Skip to content

Commit e059204

Browse files
author
Loïc
authored
Merge pull request #80 from jeedom/beta
merge
2 parents 5fc705f + 40f9def commit e059204

27 files changed

Lines changed: 1291 additions & 1269 deletions

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ test.php
33
core/config/common.config.php
44
plugins
55
sftp-config.json
6-
.project
6+
.project
7+
.vscode/settings.json

core/class/script.class.php

Lines changed: 33 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -50,93 +50,6 @@ public static function cron() {
5050

5151
}
5252

53-
public static function shareOnMarket(&$market) {
54-
$cibDir = calculPath(config::byKey('userScriptDir', 'script') . '/' . $market->getLogicalId());
55-
if (!file_exists($cibDir)) {
56-
throw new Exception(__('Impossible de trouver le script :', __FILE__) . $cibDir);
57-
}
58-
$tmp = dirname(__FILE__) . '/../../../../tmp/' . $market->getLogicalId() . '.zip';
59-
if (file_exists($tmp)) {
60-
if (!unlink($tmp)) {
61-
throw new Exception(__('Impossible de supprimer : ', __FILE__) . $tmp . __('. Vérifiez les droits', __FILE__));
62-
}
63-
}
64-
if (!create_zip($cibDir, $tmp)) {
65-
throw new Exception(__('Echec de création du zip. Répertoire source : ', __FILE__) . $cibDir . __(' / Répertoire cible : ', __FILE__) . $tmp);
66-
}
67-
return $tmp;
68-
}
69-
70-
public static function getFromMarket(&$market, $_path) {
71-
$cibDir = calculPath(config::byKey('userScriptDir', 'script'));
72-
if (!file_exists($cibDir)) {
73-
throw new Exception(__('Impossible d\'installer le script. Le dossier n\'existe pas : ', __FILE__) . $cibDir);
74-
}
75-
$zip = new ZipArchive;
76-
$res = $zip->open($_path);
77-
if ($res === true) {
78-
$zip->extractTo($cibDir . '/');
79-
$zip->close();
80-
} else {
81-
switch ($res) {
82-
case ZipArchive::ER_EXISTS:
83-
$ErrMsg = "Le fichier existe déjà.";
84-
break;
85-
case ZipArchive::ER_INCONS:
86-
$ErrMsg = "L'archive est inconsistante.";
87-
break;
88-
case ZipArchive::ER_MEMORY:
89-
$ErrMsg = "Echec d'allocation mémoire (malloc).";
90-
break;
91-
case ZipArchive::ER_NOENT:
92-
$ErrMsg = "Le fichier n'existe pas.";
93-
break;
94-
case ZipArchive::ER_NOZIP:
95-
$ErrMsg = "Ce n'est pas une archive zip.";
96-
break;
97-
case ZipArchive::ER_OPEN:
98-
$ErrMsg = "Le fichier ne peut pas être ouvert.";
99-
break;
100-
case ZipArchive::ER_READ:
101-
$ErrMsg = "Erreur de lecture.";
102-
break;
103-
case ZipArchive::ER_SEEK:
104-
$ErrMsg = "Erreur de recherche.";
105-
break;
106-
default:
107-
$ErrMsg = "Unknow (Code $res)";
108-
break;
109-
}
110-
throw new Exception(__('Impossible de décompresser l\'archive zip : ', __FILE__) . $_path . 'Erreur : ' . $ErrMsg);
111-
}
112-
$scriptPath = realpath(dirname(__FILE__) . '/../../../../' . config::byKey('userScriptDir', 'script') . '/' . $market->getLogicalId());
113-
if (!file_exists($scriptPath)) {
114-
throw new Exception(__('Echec de l\'installation. Impossible de trouver le script ', __FILE__) . $scriptPath);
115-
}
116-
chmod($scriptPath, 0770);
117-
}
118-
119-
public static function removeFromMarket(&$market) {
120-
$scriptPath = calculPath(config::byKey('userScriptDir', 'script') . '/' . $market->getLogicalId());
121-
if (!file_exists($scriptPath)) {
122-
return true;
123-
}
124-
unlink($scriptPath);
125-
if (!file_exists($scriptPath)) {
126-
throw new Exception(__('Echec de la désinstallation. Impossible de supprimer le script ', __FILE__) . $scriptPath);
127-
}
128-
}
129-
130-
public static function listMarketObject() {
131-
$return = array();
132-
foreach (ls(calculPath(config::byKey('userScriptDir', 'script')), '*') as $logical_id) {
133-
if (is_file(calculPath(config::byKey('userScriptDir', 'script')) . '/' . $logical_id)) {
134-
$return[] = $logical_id;
135-
}
136-
}
137-
return $return;
138-
}
139-
14053
/* * *********************Méthodes d'instance************************* */
14154

14255
public function postSave() {
@@ -390,21 +303,54 @@ public function execute($_options = null) {
390303
}
391304
$json = json_decode($json_str, true);
392305
if ($json === null) {
306+
$json = json_decode($json_str, true, 512, JSON_INVALID_UTF8_IGNORE);
307+
if ($json === null) {
393308
throw new Exception(__('Json invalide ou non décodable : ', __FILE__) . $json_str);
309+
}
394310
}
311+
log::add('script', 'debug', 'tags : ' . $request);
312+
log::add('script', 'debug', 'json : ' . json_encode($json));
395313
$tags = explode('>', $request);
396314
foreach ($tags as $tag) {
397315
$tag = trim($tag);
316+
log::add('script', 'debug', 'tag : ' . $tag);
398317
if (isset($json[$tag])) {
399318
$json = $json[$tag];
319+
} elseif (strpos($tag,'@')!==false && strpos($tag,'=')!==false) {
320+
$tag = ltrim($tag,"@");
321+
$conditions = explode('&', $tag);
322+
foreach ($json as $json_element) {
323+
$found = true;
324+
foreach ($conditions as $condition) {
325+
$condition_kv = explode('=',$condition,2);
326+
$condition_k = trim($condition_kv[0]);
327+
$condition_v = trim($condition_kv[1]);
328+
if ($json_element[$condition_k]==$condition_v) {
329+
$found = $found && true;
330+
} else {
331+
$found = false;
332+
}
333+
}
334+
if ($found) {
335+
$json = $json_element;
336+
break;
337+
}
338+
}
339+
if(!$found) {
340+
$json = '';
341+
log::add('script', 'debug', 'tag not found');
342+
break;
343+
}
400344
} elseif (is_numeric(intval($tag)) && isset($json[intval($tag)])) {
401345
$json = $json[intval($tag)];
402346
} elseif (is_numeric(intval($tag)) && intval($tag) < 0 && isset($json[count($json) + intval($tag)])) {
403347
$json = $json[count($json) + intval($tag)];
404348
} else {
405349
$json = '';
350+
log::add('script', 'debug', 'tag not found');
406351
break;
407352
}
353+
log::add('script', 'debug', 'json : ' . json_encode($json));
408354
}
409355
if($this->getType() == 'info'){
410356
return (is_array($json)) ? json_encode($json) : $json;

core/config/.htaccess

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Order allow,deny
2+
<Files ~ "\.(jpg|jpeg|png|gif|pdf|txt|bmp)$">
3+
allow from all
4+
</Files>
5+
Deny from all

core/i18n/de_DE.json

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,29 @@
88
"Gestion": "Verwaltung",
99
"Ajouter": "Hinzufügen",
1010
"Configuration": "Konfiguration",
11-
"Market": "Markt",
1211
"Mes Scripts": "Meine Skripte",
12+
"Aucun équipement trouvé, cliquer sur \"Ajouter\" pour commencer": "Keine Ausrüstung gefunden, klicken Sie zum Starten auf \"Hinzufügen\"",
1313
"Rechercher": "Suchen nach",
14+
"Equipement visible": "Sichtbare Ausrüstung",
15+
"Equipement non visible": "Ausrüstung nicht sichtbar",
1416
"Configuration avancée": "Erweiterte Konfiguration",
1517
"Dupliquer": "Duplikat",
1618
"Sauvegarder": "Speichern",
1719
"Supprimer": "Löschen",
1820
"Equipement": "Gerät",
1921
"Commandes": "Befehle",
20-
"Nom de l'équipement script": "Name der Skriptausrüstung",
22+
"Paramètres généraux": "Allgemeine Einstellungen",
23+
"Nom de l'équipement": "Ausrüstungsname",
2124
"Objet parent": "Übergeordnetes Objekt",
2225
"Aucun": "Ohne",
2326
"Catégorie": "Kategorie",
27+
"Options": "Optionen",
2428
"Activer": "Aktivieren",
2529
"Visible": "Sichtbar",
26-
"Auto-actualisation (cron)": "Selbstaktualisierung (cron)",
30+
"Paramètres spécifiques": "Spezifische Parameter",
31+
"Auto-actualisation": "Selbstauffrischung",
32+
"Fréquence de rafraîchissement des commandes infos de l'équipement": "Aktualisierungsrate des Ausrüstungsinfo-Befehls",
33+
"Cliquer sur ? pour afficher l'assistant cron": "Klicke auf ? um den Cron-Helfer anzuzeigen",
2734
"Délai avant d'actualiser les infos suite à une action (en secondes)": "Zeit vor dem Aktualisieren der Informationen nach einer Aktion (in Sekunden)",
2835
"Ajouter une commande script": "Fügen Sie einen Skriptbefehl hinzu",
2936
" Sous type :": "Untertyp:",
@@ -35,24 +42,25 @@
3542
"Type script": "Skripttyp",
3643
"Type": "Typ",
3744
"Requête": "Petition",
38-
"Options": "Optionen",
39-
"Divers": "Verschiedene",
40-
"Paramètres": "Einstellungen"
45+
"Paramètres": "Einstellungen",
46+
"Etat": "Bundesland",
47+
"Actions": "Anteile"
4148
},
4249
"plugins\/script\/desktop\/js\/script.js": {
4350
"Etes-vous sûr de vouloir supprimer le script :": "Möchten Sie das Skript wirklich löschen:",
44-
"Vous devez d\\'abord sélectioner un script": "Sie müssen zuerst ein Skript auswählen",
45-
"Partager sur le market": "Auf dem Markt Teilen",
4651
"Script": "Skript",
4752
"HTTP": "Http",
4853
"HTML": "HTML",
4954
"XML": "Xml",
5055
"JSON": "Json",
56+
"Nom de la commande": "Befehlsname",
57+
"Choisir une icône": "Wählen Sie ein Symbol aus",
58+
"Commande info liée": "Verknüpfter Info-Befehl",
59+
"Aucune": "Keiner",
5160
"Parcourir": "Reise",
5261
"Editer": "Bearbeiten",
5362
"Nouveau": "Neu",
5463
"Supprimer": "Löschen",
55-
"Partager": "Aktie",
5664
"Vérifier SSL": "Überprüfen Sie SSL",
5765
"Retour vide": "Leere Rückgabe",
5866
"Pas d\\'erreurs": "Keine Fehler",
@@ -62,16 +70,16 @@
6270
"Maximum d\\'essai": "Maximaler Test",
6371
"Mot de passe": "Passwort",
6472
"Essais au maximum": "Maximale Prüfung",
65-
"Unité": "Unit",
73+
"Afficher": "Anzeige",
74+
"Historiser": "Chronik",
75+
"Inverser": "Umgekehrt",
6676
"Min": "Niedrig",
6777
"Max": "Max",
78+
"Unité": "Unit",
6879
"Liste de valeur|texte séparé par ;": "Werteliste | Text getrennt durch;",
6980
"Liste": "Auflistung",
70-
"Afficher": "Anzeige",
71-
"Historiser": "Chronik",
72-
"Inverser": "Umgekehrt",
73-
"Configuration de la commande": "Befehl Konfiguration",
74-
"Tester": "Test"
81+
"Commande d\\'information à mettre à jour": "Bestellinformationen zu aktualisieren",
82+
"Valeur de l\\'information": "Informationswert"
7583
},
7684
"plugins\/script\/core\/ajax\/script.ajax.php": {
7785
"401 - Accès non autorisé": "401 - Nicht autorisierter Zugriff",
@@ -87,15 +95,6 @@
8795
"plugins\/script\/core\/class\/script.class.php": {
8896
"Erreur pour ": "Fehler für",
8997
"Expression cron non valide pour ": "Ungültiger Cron-Ausdruck für",
90-
"Impossible de trouver le script :": "Das Skript konnte nicht gefunden werden:",
91-
"Impossible de supprimer : ": "Löschen nicht möglich:",
92-
". Vérifiez les droits": "Überprüfen Sie die Rechte",
93-
"Echec de création du zip. Répertoire source : ": "Fehler beim Erstellen der Zip. Quellverzeichnis:",
94-
" \/ Répertoire cible : ": "\/ Zielverzeichnis:",
95-
"Impossible d\\'installer le script. Le dossier n\\'existe pas : ": "Das Skript kann nicht installiert werden. Der Ordner existiert nicht:",
96-
"Impossible de décompresser l\\'archive zip : ": "Das Zip-Archiv kann nicht dekomprimiert werden:",
97-
"Echec de l\\'installation. Impossible de trouver le script ": "Installation fehlgeschlagen. Das Skript konnte nicht gefunden werden",
98-
"Echec de la désinstallation. Impossible de supprimer le script ": "Deinstallation fehlgeschlagen. Skript kann nicht gelöscht werden",
9998
"Rafraichir": "Aktualisieren",
10099
"Le champ requête ne peut pas être vide": "Das Anforderungsfeld darf nicht leer sein",
101100
"Le champ requête type ne peut pas être vide": "Das Standardanforderungsfeld darf nicht leer sein",
@@ -104,5 +103,8 @@
104103
"Le message et le sujet ne peuvent pas être vide": "Nachricht und Betreff dürfen nicht leer sein",
105104
"La réponse ne contient pas ": "Die Antwort enthält nicht",
106105
"Json invalide ou non décodable : ": "Json ungültig oder nicht dekodierbar:"
106+
},
107+
"info.json": {
108+
"Plugin ajoutant le support des scripts dans Jeedom. Les scripts sont des programmes en Python\/PHP\/Shell\/Ruby etc... qui permettent d'ajouter des fonctions à Jeedom": "Plugin zur Unterstützung von Skripten in Jeedom. Skripte sind Programme in Python \/ PHP \/ Shell \/ Ruby usw., mit denen Sie Jeedom Funktionen hinzufügen können"
107109
}
108110
}

core/i18n/en_US.json

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,29 @@
88
"Gestion": "Management",
99
"Ajouter": "Add",
1010
"Configuration": "Setup",
11-
"Market": "Market",
1211
"Mes Scripts": "My Scripts",
12+
"Aucun équipement trouvé, cliquer sur \"Ajouter\" pour commencer": "No equipment found, click \"Add\" to start",
1313
"Rechercher": "Search",
14+
"Equipement visible": "Visible equipment",
15+
"Equipement non visible": "Equipment not visible",
1416
"Configuration avancée": "Advanced configuration",
1517
"Dupliquer": "Duplicate",
1618
"Sauvegarder": "Save",
1719
"Supprimer": "Delete",
18-
"Equipement": "Device",
20+
"Equipement": "Equipment",
1921
"Commandes": "Commands",
20-
"Nom de l'équipement script": "Script equipment name",
22+
"Paramètres généraux": "General settings",
23+
"Nom de l'équipement": "Equipment name",
2124
"Objet parent": "Parent object",
2225
"Aucun": "None",
2326
"Catégorie": "Category",
27+
"Options": "Options",
2428
"Activer": "Activate",
2529
"Visible": "Visible",
26-
"Auto-actualisation (cron)": "Self-updating (cron)",
30+
"Paramètres spécifiques": "Specific parameters",
31+
"Auto-actualisation": "Self-refresh",
32+
"Fréquence de rafraîchissement des commandes infos de l'équipement": "Equipment Info Command Refresh Rate",
33+
"Cliquer sur ? pour afficher l'assistant cron": "Click on ? to display the cron helper",
2734
"Délai avant d'actualiser les infos suite à une action (en secondes)": "Time before updating the info following an action (in seconds)",
2835
"Ajouter une commande script": "Add a script command",
2936
" Sous type :": "Sub type:",
@@ -35,43 +42,44 @@
3542
"Type script": "Script type",
3643
"Type": "Type",
3744
"Requête": "Request",
38-
"Options": "Options",
39-
"Divers": "Various",
40-
"Paramètres": "Settings"
45+
"Paramètres": "Settings",
46+
"Etat": "State",
47+
"Actions": "Shares"
4148
},
4249
"plugins\/script\/desktop\/js\/script.js": {
4350
"Etes-vous sûr de vouloir supprimer le script :": "Are you sure you want to delete the script:",
44-
"Vous devez d\\'abord sélectioner un script": "You must first select a script",
45-
"Partager sur le market": "Share on Market",
4651
"Script": "Script",
4752
"HTTP": "HTTP",
48-
"HTML": "L'opération à mener",
53+
"HTML": "HTML",
4954
"XML": "XML",
5055
"JSON": "JSON",
56+
"Nom de la commande": "Command name",
57+
"Choisir une icône": "Choose an icon",
58+
"Commande info liée": "Linked info command",
59+
"Aucune": "None",
5160
"Parcourir": "Browse",
5261
"Editer": "Edit",
5362
"Nouveau": "New",
5463
"Supprimer": "Delete",
55-
"Partager": "Share",
5664
"Vérifier SSL": "Verify SSL",
5765
"Retour vide": "Empty return",
58-
"Pas d\\'erreurs": "No errors",
66+
"Pas d\\'erreurs": "No error",
5967
"La réponse doit contenir": "The answer must contain",
6068
"Timeout (s)": "Timeout (s)",
6169
"Utilisateur": "User",
6270
"Maximum d\\'essai": "Maximum test",
6371
"Mot de passe": "Password",
64-
"Essais au maximum": "Maximum testing",
65-
"Unité": "Unit",
72+
"Essais au maximum": "Maximum tests",
73+
"Afficher": "Show",
74+
"Historiser": "Historize",
75+
"Inverser": "Invert",
6676
"Min": "Min",
6777
"Max": "Max",
78+
"Unité": "Unit",
6879
"Liste de valeur|texte séparé par ;": "List of values | text separated by;",
6980
"Liste": "List",
70-
"Afficher": "Show",
71-
"Historiser": "Historize",
72-
"Inverser": "Invert",
73-
"Configuration de la commande": "Command setup",
74-
"Tester": "Test"
81+
"Commande d\\'information à mettre à jour": "Order information to update",
82+
"Valeur de l\\'information": "Information value"
7583
},
7684
"plugins\/script\/core\/ajax\/script.ajax.php": {
7785
"401 - Accès non autorisé": "401 - Unauthorized access",
@@ -87,15 +95,6 @@
8795
"plugins\/script\/core\/class\/script.class.php": {
8896
"Erreur pour ": "Error for",
8997
"Expression cron non valide pour ": "Invalid cron expression for",
90-
"Impossible de trouver le script :": "Unable to find the script:",
91-
"Impossible de supprimer : ": "Unable to delete:",
92-
". Vérifiez les droits": "Check the rights",
93-
"Echec de création du zip. Répertoire source : ": "Failed to create the zip. Source directory:",
94-
" \/ Répertoire cible : ": "\/ Target directory:",
95-
"Impossible d\\'installer le script. Le dossier n\\'existe pas : ": "Unable to install the script. The folder does not exist:",
96-
"Impossible de décompresser l\\'archive zip : ": "Unable to decompress the zip archive:",
97-
"Echec de l\\'installation. Impossible de trouver le script ": "Installation failed. Unable to find the script",
98-
"Echec de la désinstallation. Impossible de supprimer le script ": "Uninstall failed. Unable to delete script",
9998
"Rafraichir": "Refresh",
10099
"Le champ requête ne peut pas être vide": "Request field cannot be empty",
101100
"Le champ requête type ne peut pas être vide": "The standard request field cannot be empty",
@@ -104,5 +103,8 @@
104103
"Le message et le sujet ne peuvent pas être vide": "Message and subject cannot be empty",
105104
"La réponse ne contient pas ": "The answer does not contain",
106105
"Json invalide ou non décodable : ": "Json invalid or not decodable:"
106+
},
107+
"info.json": {
108+
"Plugin ajoutant le support des scripts dans Jeedom. Les scripts sont des programmes en Python\/PHP\/Shell\/Ruby etc... qui permettent d'ajouter des fonctions à Jeedom": "Plugin adding scripting support in Jeedom. Scripts are programs in Python \/ PHP \/ Shell \/ Ruby etc ... which allow you to add functions to Jeedom"
107109
}
108110
}

0 commit comments

Comments
 (0)