function balise_LESMOTS_dist($p){ $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; // #LESMOTS hors boucle ? ne rien faire if (!$type = $p->boucles[$i_boucle]->type_requete) { $p->code = "''"; $p->interdire_scripts = false; return $p; } // le compilateur 1.9.2 ne calcule pas primary pour les tables secondaires // il peut aussi arriver une table sans primary (par ex: une vue) if (!($primary = $p->boucles[$i_boucle]->primary)) { include_spip('inc/vieilles_defs'); # 1.9.2 pour trouver_def_table list($nom, $desc) = trouver_def_table( $p->boucles[$i_boucle]->type_requete, $p->boucles[$i_boucle]); $primary = $desc['key']['PRIMARY KEY']; } $primary = explode(',',$primary); $id = array(); foreach($primary as $key) $id[] = champ_sql(trim($key),$p); $primary = implode(".'-'.",$id); $p->code = "classe_boucle_crayon('" . $type ."'," .sinon(interprete_argument_balise(1,$p),"''") ."," . $primary .").' '"; $p->interdire_scripts = false; return $p; // Cherche le champ 'lesmots' dans la pile $_lesmots = champ_sql('lesmots', $p); // Si le champ n'existe pas (cas de spip_articles), on applique // le fond les_mots.html en passant id_article dans le contexte; // dans le cas contraire on prend le champ SQL 'lesmots' if ($_lesmots AND $_lesmots != '$Pile[0][\'lesmots\']') { $p->code = "safehtml($_lesmots)"; // $p->interdire_scripts = true; } else { if ($cle = $p->boucles[$p->id_boucle]->primary) $id = champ_sql($primary, $p); $p->code = "recuperer_fond('fonds/lesmots', array($cle => $id))"; // securite imposee par recuperer_fond() $p->interdire_scripts = false; } return $p; }
/** * Balise indiquant un champ SQL crayonnable * * @note * Si cette fonction est absente, `balise_EDIT_dist()` déclarée par SPIP * ne retourne rien * * @example * ``` * <div class="#EDIT{texte}">#TEXTE</div> * <div class="#EDIT{ps}">#PS</div> * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer **/ function balise_EDIT($p) { // le code compile de ce qui se trouve entre les {} de la balise $label = interprete_argument_balise(1, $p); // Verification si l'on est dans le cas d'une meta // #EDIT{meta-descriptif_site} ou #EDIT{meta-demo/truc} if (preg_match('/meta-(.*)\'/', $label, $meta)) { $type = 'meta'; $label = 'valeur'; $primary = $meta[1]; $p->code = "classe_boucle_crayon('" . $type . "','" . $label . "'," . "str_replace('/', '__', '{$primary}')" . ").' '"; $p->interdire_scripts = false; return $p; } $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; // #EDIT hors boucle? ne rien faire if (!isset($p->boucles[$i_boucle]) or !($type = $p->boucles[$i_boucle]->type_requete)) { $p->code = "''"; $p->interdire_scripts = false; return $p; } // crayon sur une base distante 'nua__article-intro-5' if ($distant = $p->boucles[$i_boucle]->sql_serveur) { $type = $distant . '__' . $type; } // le compilateur 1.9.2 ne calcule pas primary pour les tables secondaires // il peut aussi arriver une table sans primary (par ex: une vue) if (!($primary = $p->boucles[$i_boucle]->primary)) { include_spip('inc/vieilles_defs'); # 1.9.2 pour trouver_def_table if (function_exists('trouver_def_table')) { list($nom, $desc) = trouver_def_table($p->boucles[$i_boucle]->type_requete, $p->boucles[$i_boucle]); $primary = $desc['key']['PRIMARY KEY']; } } // On rajoute ici un debug dans le cas où aucune clé primaire n'est trouvée. // Cela peut se présenter par exemple si on utilise #EDIT{monchamp} directement // dans une boucle CONDITION sans faire référence au nom de la boucle d'au dessus. if (!$primary) { erreur_squelette(_T('crayons:absence_cle_primaire'), $p); } $primary = explode(',', $primary); $id = array(); foreach ($primary as $key) { $id[] = champ_sql(trim($key), $p); } $primary = implode(".'-'.", $id); $p->code = "classe_boucle_crayon('" . $type . "'," . sinon($label, "''") . "," . $primary . ").' '"; $p->interdire_scripts = false; return $p; }
function balise_EDIT($p) { // le code compile de ce qui se trouve entre les {} de la balise $label = interprete_argument_balise(1,$p); // Verification si l'on est dans le cas d'une meta // #EDIT{meta-descriptif_site} #EDIT{nom_site} et #EDIT{email_webmaster} if(preg_match('/meta-(.*)\'/',$label,$meta)){ if(in_array($meta[1],array('descriptif_site','nom_site','email_webmaster'))){ $type = 'meta'; $label= 'valeur'; $primary = $meta[1]; $p->code = "classe_boucle_crayon('" . $type ."'," .sinon($label,"''") ."," . $primary .").' '"; $p->interdire_scripts = false; return $p; } } $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; // #EDIT hors boucle? ne rien faire if (!$type = ($p->boucles[$i_boucle]->type_requete)) { $p->code = "''"; $p->interdire_scripts = false; return $p; } // crayon sur une base distante 'nua:article-intro-5' if ($distant = $p->boucles[$i_boucle]->sql_serveur) $type = $distant.'__'.$type; // le compilateur 1.9.2 ne calcule pas primary pour les tables secondaires // il peut aussi arriver une table sans primary (par ex: une vue) if(!($primary = $p->boucles[$i_boucle]->primary)){ include_spip('inc/vieilles_defs'); # 1.9.2 pour trouver_def_table list($nom, $desc) = trouver_def_table( $p->boucles[$i_boucle]->type_requete, $p->boucles[$i_boucle]); $primary = $desc['key']['PRIMARY KEY']; } $primary = explode(',',$primary); $id = array(); foreach($primary as $key) { $id[] = champ_sql(trim($key),$p); } $primary = implode(".'-'.",$id); $p->code = "classe_boucle_crayon('" . $type ."'," .sinon($label,"''") ."," . $primary .").' '"; $p->interdire_scripts = false; return $p; }
function critere_frequence_dist($idb, &$boucles, $crit) { global $table_des_tables; $not = $crit->not; $boucle = &$boucles[$idb]; if ($not) erreur_squelette(_T('zbug_info_erreur_squelette'), $crit->op); if (empty($boucle->jointures)) { erreur_squelette(_T('zbug_info_erreur_squelette'), _L('frequence sur table sans jointures')); return; } //analyser chaque criteres de frequence $nom = $table_des_tables[$boucle->type_requete]; $parent = $boucles[$idb]->id_parent; $criteres = array(); //Pour l'instant, un seul parametre while(list(,$p) = each($crit->param)) { $param = calculer_liste($p, array(), $boucles, $parent); $type = preg_match(',^\(?\'(\w+)(\s*)?([!=<>]+)?(\s*)?,', $param, $regs) ? $regs[1] : $boucle->jointures[0]; $op = $regs[3] ? $regs[3] : '>='; if($val = $regs[0] ? preg_replace(',' . preg_quote($regs[0]) . ',', '', $param) : 0) { $val = preg_replace(',\'$,', '', $val); $val = preg_replace(',^\'\s\.\s(.*)\)$,Um', '$1', $val); $val = $val ? $val : 0; } //Trouver une jointure n:n (cad table spip_mots_articles) if(in_array($_type = $nom.'_'.$type, $boucle->jointures)) $criteres[] = array($op, $_type, $val); else { erreur_squelette(_T('zbug_info_erreur_squelette'), _L('frequence '.$type.': jointure inconnue')); } } if(empty($criteres)) $criteres[0] = array('>=', $boucle->jointures[0], 0); //composer la requete pour la jointure $primary = $boucle->primary; $id_table = $boucle->id_table . '.' . $primary; foreach($criteres as $critere) { $frequence = $boucle->modificateur['frequence'] = "frequence".$idb; list($op, $type, $val) = $critere; //compatibilite SVN et 1.9.2 if(function_exists('trouver_def_table')) { $nom = $table_des_tables[$type]; list($table, $desc) = trouver_def_table($nom ? $nom : $type, $boucle); } else { $trouver_table = charger_fonction('trouver_table','base'); $desc=$trouver_table($type, $boucle->sql_serveur); $table = $desc['table']; } /*Ajouter ici un test et produire une erreur si table non trouvee*/ $ids = $desc['key']['PRIMARY KEY']; foreach(split(',', $ids) as $_id) if(trim($_id) != $primary) $id = $_id; $boucle->select[]= 'COUNT('.$frequence.'.'.$id.') AS '.$frequence; $boucle->from[$frequence] = $table; $boucle->where[] = array("'='", "'$id_table'", "'$frequence.$primary'"); $boucle->group[] = $id_table; $boucle->having[] = array("'$op'", "'$frequence'", $val); } }