Author: christian_lefebvre@laposte.net
Date: Wed Jun 21 15:40:24 2006
New Revision: 3612
Log:
quelques debug et ameliorations mais il faudrait surement revoir des trucs
plus profondement
Added:
_plugins_/_ze_laboratoire_/editables/import.php
Modified:
_plugins_/_ze_laboratoire_/editables/inc/actionParser.php
_plugins_/_ze_laboratoire_/editables/inc/actionParserTest.php
_plugins_/_ze_laboratoire_/editables/inc/actions.exemple
_plugins_/_ze_laboratoire_/editables/test2.action.html
_plugins_/_ze_laboratoire_/editables/test2.html
Added: _plugins_/_ze_laboratoire_/editables/import.php
--- _plugins_/_ze_laboratoire_/editables/import.php (added)
+++ _plugins_/_ze_laboratoire_/editables/import.php Wed Jun 21 15:40:24 2006
@@ -0,0 +1,49 @@
+<?php
+ // script permattant d'importer un fichier d'actions explicite
+ // ATTENTION : version simple sans recup de valeurs et sans callbacks
+ // interessant en batch a la sieps
+
+ // A MODIFIER SELON VOTRE CONFIG
+$spipDir= "../..";
+$spipDir= "/var/www/html/spalios";
+
+// le bout de code qui va bien pour se retrouver dans un contexte "spip minimal"
+define('_DIR_RACINE', "$spipDir/");
+define('_DIR_RESTREINT_ABS', "$spipDir/ecrire/");
+define('_DIR_RESTREINT', _DIR_RESTREINT_ABS);
+include("$spipDir/ecrire/inc_version.php");
+spip_connect();
+include_spip("base/abstract_sql");
+
+$r= spip_abstract_select(array("count(*)"), array("spip_articles"));
+if (!$r || !spip_abstract_fetch($r)) {
+ die("echec d'acces a la bdd (".mysql_error($r).")\n");
+}
+// arrivé là , on a les fonctions spip de base, et la bdd est accessible
+
+// récupérer le xml2bdd du plugin editables
+include_spip('inc/actionParser');
+
+// pour chaque fichier passé en argument (avec un chemin en aaaa/ll/...txt)
+array_shift($argv);
+foreach($argv as $fichier) {
+ $actions= file_get_contents($fichier);
+ $parser = new actionParser(null);
+ $parser->parse($actions);
+ $code= $parser->getCode();
+
+ echo "=> code = ".$code."\n";
+
+// $cc= explode("\n && ", $code);
+// array_shift($cc);
+// foreach($cc as $c) {
+// echo "CODE $c => ";
+// $res= eval("return $c;");
+// if($res===false) {
+// die("erreur à l'exécution du code");
+// }
+// echo "$res\n";
+// }
+}
+
+?>
Modified: _plugins_/_ze_laboratoire_/editables/inc/actionParser.php
--- _plugins_/_ze_laboratoire_/editables/inc/actionParser.php (original)
+++ _plugins_/_ze_laboratoire_/editables/inc/actionParser.php Wed Jun 21 15:40:24 2006
@@ -13,21 +13,32 @@
var $sql= array();
// on part d'un etat 'vide' et on empile des etats 'actions' puis
- // 'update' ou 'insert' puis 'key' ou 'field' puis eventuellement 'get'
+ // 'update' ou 'insert' puis 'field' puis eventuellement 'select'
var $state=array();
- // la liste d'action qui en resulte
+ // la liste d'actions qui en resulte
var $liste= array();
// les actions en cours d'interpretation
var $actions= array();
+ /** ce tableau contient une liste d'entrées, chacune étant elle même un
+ * tableau associatif avec les clés suivantes :
+ * type = insert ou update
+ * table = la table concernées (nom spip et pas nom de table sql,
+ * càd articles et pas spip_articles par exemple)
+ * id = le nom à donner à l'éventuel autoincrément
+ * field = la liste des champs avec leur valeur
+ * aTrouver = la liste des champs dont il faut trouver la valeur par ailleurs
+ * (via un select imbriqué)
+ */
- // si on trouve des erreurs en court de route (valeurs obligatoires
+ // si on trouve des erreurs en cours de route (valeurs obligatoires
// absentes principalement)
var $errors= array();
// compteur pour les variables temporaires generees
var $tmpVars= 0;
+ // initialisation d'un parseur d'actions et des données de travail
function actionParser($valeurs) {
$this->valeurs= $valeurs;
$this->parser = xml_parser_create($GLOBALS['meta']['charset']);
@@ -38,20 +49,29 @@
xml_set_element_handler($this->parser, "startElement", "endElement");
}
+ // effectue le parsing et en déduit une structure "actions"
function parse($data) {
//xml_parse_into_struct($this->parser, $data, $values, $indexes);
//echo "VALUES=".var_export($values, 1)."\n";
//echo "INDEXES=".var_export($indexes, 1)."\n";
xml_parse($this->parser, $data);
+
+ if(($c=xml_get_error_code($this->parser)) != XML_ERROR_NONE) {
+ return xml_error_string($c);
+ } else {
+ return null;
+ }
}
+ // parcours la structure "actions" et en déduit un code php effectuant les
+ // appels sql correspondants.
function getCode($liste=null) {
if(!$liste) {
$l= $this->liste;
} else {
$l= $liste;
}
- echo "<xmp>getSql:".var_export($l, 1)."</xmp>";
+ //echo "<xmp>getSql:".var_export($l, 1)."</xmp>";
$res='';
foreach($l as $action) {
if($action['type']=='insert') {
@@ -64,9 +84,9 @@
$valeurs= '('.join(", ", array_values($action['field'])).')';
$appel= "spip_abstract_insert(\"$table\",\"$colonnes\",\"$valeurs\")";
if($id=$action['id']) {
- $res.="\n && (\$var_tmp_$id= $appel)";
+ $res.="\n && (\$tmp_var_$id= $appel)!==false";
} else {
- $res.="\n && $appel";
+ $res.="\n && $appel!==false";
}
} else {
$set= array();
@@ -181,6 +201,7 @@
//array_unshift($this->state, $name);
array_unshift($this->actions,
array('type' => 'select',
+ 'aFaire' => 'oui',
'table' => $attrs['type'],
'colonne' => $attrs['name']));
break;
@@ -209,8 +230,9 @@
// die("fin update/insert inattendu");
//}
$a= array_shift($this->actions);
- echo "FERME ".var_export($a, 1);
- if($a['aFaire']=='oui' && $a['field']!=array()) {
+ //echo "FERME ".var_export($a, 1);
+ if($a['aFaire']=='oui'
+ && ($a['field']!=array() || $a['where']!=array()) ) {
unset($a['aFaire']);
if(count($this->actions)) {
$this->actions[0]['sousActions'][]= $a;
@@ -222,7 +244,7 @@
case 'field':
//if($st!=$name) {
- // die("fin key/field inattendu");
+ // die("fin field inattendu");
//}
//array_shift($this->state);
break;
@@ -275,8 +297,8 @@
$table= $table['table'];
$res.="\n && (($var=spip_abstract_fetsel(\""
.$value['colonne']."\", \"".$table
- ."\", \"$where\")) && ($var= ${var}['"
- .$value['colonne']."']))";
+ ."\", \"$where\"))!==false && ($var= ${var}['"
+ .$value['colonne']."'])!==false)";
$value= "\".$var.\"";
}
} else {
Modified: _plugins_/_ze_laboratoire_/editables/inc/actionParserTest.php
--- _plugins_/_ze_laboratoire_/editables/inc/actionParserTest.php (original)
+++ _plugins_/_ze_laboratoire_/editables/inc/actionParserTest.php Wed Jun 21 15:40:24 2006
@@ -3,5 +3,5 @@
include("actionParser.php");
$parser = new actionParser("aze");
$parser->parse($actions);
-echo $parser->getSql();
+echo $parser->getCode();
?>
Modified: _plugins_/_ze_laboratoire_/editables/inc/actions.exemple
--- _plugins_/_ze_laboratoire_/editables/inc/actions.exemple (original)
+++ _plugins_/_ze_laboratoire_/editables/inc/actions.exemple Wed Jun 21 15:40:24 2006
@@ -1,29 +1,31 @@
<actions>
<update type='articles'>
- <key name='id_article' value='1'/>
+ <where name='id_article' value='1'/>
<field name='titre' valueFrom='titreArt1'/>
<field name='surtitre' valueFrom='surtitreArt1'/>
</update>
<update type='articles'>
- <key name='id_article' value='2'/>
+ <where name='id_article' value='2'/>
<field name='titre' valueFrom='titreArt2'/>
<field name='surtitre' valueFrom='surtitreArt2'/>
</update>
+<!--
<update type='pipo'>
- <key name='id' value='42'/>
+ <where name='id' value='42'/>
<field name='titre' valueFrom='pipo42'/>
</update>
<insert type='pipo' id='pipo1'>
- <key name='id' value='42'/>
+ <field name='id' value='42'/>
<field name='str' valueFrom='pipo1'/>
</insert>
<insert type='pipo' id='pipo2'>
<field name='id' value='24'/>
<field name='str' valueFrom='pipo2'/>
</insert>
+-->
<insert type='articles' id='art'>
<field name='titre' cond='!' valueFrom='titreNewArt'/>
@@ -32,9 +34,9 @@
<callback>???</callback>
<field name='id_rubrique' cond='!' valueFrom='rubrique'/>
<field name='id_secteur'>
- <get type='rubriques' name='id_secteur'>
+ <select type='rubriques' name='id_secteur'>
<where name='id_rubrique' valueFrom='rubrique'/>
- </get>
+ </select>
</field>
</insert>
<insert type='auteurs_articles'>
Modified: _plugins_/_ze_laboratoire_/editables/test2.action.html
--- _plugins_/_ze_laboratoire_/editables/test2.action.html (original)
+++ _plugins_/_ze_laboratoire_/editables/test2.action.html Wed Jun 21 15:40:24 2006
@@ -9,22 +9,6 @@
</update>
</BOUCLE_arts>
-<BOUCLE_pipo(PIPO)>
-<update type='pipo'>
- <where name='id' value='#ID'/>
- <field name='titre' valueFrom='pipo#ID'/>
-</update>
-</BOUCLE_pipo>
-
-<insert type='pipo'>
- <where name='id' value='42'/>
- <field name='str' valueFrom='pipoNew1'/>
-</insert>
-<insert type='pipo'>
- <field name='id' value='24'/>
- <field name='str' valueFrom='pipoNew2'/>
-</insert>
-
<insert type='articles' id='art'>
<field name='titre' obligatoire='1' valueFrom='titreNewArt'/>
<field name='surtitre' valueFrom='surtitreNewArt'/>
Modified: _plugins_/_ze_laboratoire_/editables/test2.html
--- _plugins_/_ze_laboratoire_/editables/test2.html (original)
+++ _plugins_/_ze_laboratoire_/editables/test2.html Wed Jun 21 15:40:24 2006
@@ -10,14 +10,6 @@
<br><br>
-<BOUCLE_pipo(PIPO)>
-#ID : #STR =><br/>
[... 10 lines stripped ...]