function vertebrer_cell($fields) { $res = ""; foreach ($fields as $n => $t) { $texte = "#CHAMP_SQL{" . $n . "}"; if (preg_match('/\\s+references\\s+([\\w_]+)/', $t, $r)) { $url = "[(#SELF|parametre_url{page,'" . $r[1] . "'})]"; $texte = "<a href='{$url}'>" . $texte . "</a>"; } if (sql_test_int($t)) { $s = " style='text-align: right;'"; } else { $s = ''; if (sql_test_date($t)) { $texte = "[({$texte}|affdate_heure)]"; } } $res .= "\n\t\t<td{$s}>{$texte}</td>"; } return $res; }
/** * Renvoie les bons echappements (mais pas sur les fonctions comme NOW()) * * @param string|number $v Texte ou nombre à échapper * @param string $type Type de donnée attendue, description SQL de la colonne de destination * @return string|number Texte ou nombre échappé */ function _sqlite_calculer_cite($v, $type) { if ($type) { if (is_null($v) and stripos($type, "NOT NULL") === false) { return 'NULL'; } // null php se traduit en NULL SQL if (sql_test_date($type) and preg_match('/^\\w+\\(/', $v)) { return $v; } if (sql_test_int($type)) { if (is_numeric($v)) { return $v; } elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) { return hexdec(substr($v, 2)); } else { return intval($v); } } } else { // si on ne connait pas le type on le deduit de $v autant que possible if (is_numeric($v)) { return strval($v); } } if (function_exists('sqlite_escape_string')) { return "'" . sqlite_escape_string($v) . "'"; } // trouver un link sqlite3 pour faire l'echappement foreach ($GLOBALS['connexions'] as $s) { if (_sqlite_is_version(3, $l = $s['link'])) { return $l->quote($v); } } // echapper les ' en '' spip_log("Pas de methode sqlite_escape_string ni ->quote pour echapper", "sqlite." . _LOG_INFO_IMPORTANTE); return "'" . str_replace("'", "''", $v) . "'"; }
/** * Renvoie les bons echappements (mais pas sur les fonctions comme NOW()) * * @param string|number $v Texte ou nombre à échapper * @param string $type Type de donnée attendue, description SQL de la colonne de destination * @return string|number Texte ou nombre échappé */ function spip_mysql_cite($v, $type) { if (is_null($v) and stripos($type, "NOT NULL") === false) { return 'NULL'; } // null php se traduit en NULL SQL if (sql_test_date($type) and preg_match('/^\\w+\\(/', $v)) { return $v; } if (sql_test_int($type)) { if (is_numeric($v) or ctype_xdigit(substr($v, 2)) and $v[0] == '0' and $v[1] == 'x') { return $v; } else { return intval($v); } } return "'" . addslashes($v) . "'"; }
function calculer_critere_infixe($idb, &$boucles, $crit) { global $table_criteres_infixes; global $exceptions_des_jointures, $exceptions_des_tables; $boucle = &$boucles[$idb]; $type = $boucle->type_requete; $table = $boucle->id_table; $desc = $boucle->show; $date = array(); list($fct, $col, $op, $val, $args_sql) = calculer_critere_infixe_ops($idb, $boucles, $crit); $col_alias = $col; $where_complement =false; // Cas particulier : id_enfant => utiliser la colonne id_objet if ($col == 'id_enfant') $col = $boucle->primary; // Cas particulier : id_parent => verifier les exceptions de tables if ($col == 'id_parent') $col = isset($exceptions_des_tables[$table]['id_parent']) ? $exceptions_des_tables[$table]['id_parent'] : 'id_parent'; // Cas particulier : id_secteur pour certaines tables else if (($col == 'id_secteur')&&($type == 'breves')) { $col = 'id_rubrique'; } // et possibilite de gerer un critere secteur sur des tables de plugins (ie forums) else if (($col == 'id_secteur') AND ($critere_secteur = charger_fonction("critere_secteur_$type","public",true))) { $table = $critere_secteur($idb, $boucles, $val, $crit); } // cas id_article=xx qui se mappe en id_objet=xx AND objet=article else if (count(trouver_champs_decomposes($col,$desc))>1){ $e = decompose_champ_id_objet($col); $col = array_shift($e); $where_complement = primary_doublee($e, $table); } // Cas particulier : expressions de date else if ($date = tester_param_date($boucle->type_requete, $col)) { $col = calculer_critere_infixe_date($idb, $boucles, $date); $table = ''; } else if (preg_match('/^(.*)\.(.*)$/', $col, $r)) { list(,$table, $col) = $r; $col_alias = $col; $table = calculer_critere_externe_init($boucle, array($table), $col, $desc, ($crit->cond OR $op !='='), true); if (!$table) return ''; } elseif (@!array_key_exists($col, $desc['field'])) { $r = calculer_critere_infixe_externe($boucle, $crit, $op, $desc, $col, $col_alias, $table); if (!$r) return ''; list($col, $col_alias, $table, $where_complement) = $r; } // Si la colonne SQL est numerique ou le critere est une date relative // virer les guillemets eventuels qui sont refuses par certains SQL // Ne pas utiliser intval, PHP tronquant les Bigint de SQL if (($op == '=' OR in_array($op, $table_criteres_infixes)) AND (($desc AND isset($desc['field'][$col]) AND sql_test_int($desc['field'][$col])) OR ($date AND strpos($date[0], '_relatif')))) { if (preg_match("/^\"'(-?\d+)'\"$/", $val[0], $r)) $val[0] = $r[1]; elseif (preg_match('/^sql_quote[(](.*?)(,[^)]*)?[)]\s*$/', $val[0], $r)) { $r = $r[1] . ($r[2] ? $r[2] : ",''") . ",'int'"; $val[0] = "sql_quote($r)"; } } // Indicateur pour permettre aux fonctionx boucle_X de modifier // leurs requetes par defaut, notamment le champ statut // Ne pas confondre champs de la table principale et des jointures if ($table === $boucle->id_table) { $boucles[$idb]->modificateur['criteres'][$col] = true; if ($col_alias!=$col) $boucles[$idb]->modificateur['criteres'][$col_alias] = true; } // ajout pour le cas special d'une condition sur le champ statut: // il faut alors interdire a la fonction de boucle // de mettre ses propres criteres de statut // http://www.spip.net/@statut (a documenter) // garde pour compatibilite avec code des plugins anterieurs, mais redondant avec la ligne precedente if ($col == 'statut') $boucles[$idb]->statut = true; // ajout pour le cas special des forums // il faut alors interdire a la fonction de boucle sur forum // de selectionner uniquement les forums sans pere elseif ($boucles[$idb]->type_requete == 'forums' AND ($col == 'id_parent' OR $col == 'id_forum')) $boucles[$idb]->modificateur['plat'] = true; // inserer le nom de la table SQL devant le nom du champ if ($table) { if ($col[0] == "`") $arg = "$table." . substr($col,1,-1); else $arg = "$table.$col"; } else $arg = $col; // inserer la fonction SQL if ($fct) $arg = "$fct($arg$args_sql)"; return array($arg, $op, $val, $col_alias, $where_complement); }
function spip_pg_cite($v, $t) { if (is_null($v)) { return 'NULL'; } // null php se traduit en NULL SQL if (sql_test_date($t)) { if ($v and strpos("0123456789", $v[0]) === false) { return spip_pg_frommysql($v); } else { if (strncmp($v, '0000', 4) == 0) { $v = "0001" . substr($v, 4); } if (strpos($v, "-00-00") === 4) { $v = substr($v, 0, 4) . "-01-01" . substr($v, 10); } return "timestamp '{$v}'"; } } elseif (!sql_test_int($t)) { return "'" . pg_escape_string($v) . "'"; } elseif (is_numeric($v) or strpos($v, 'CAST(') === 0) { return $v; } elseif ($v[0] == '0' and $v[1] !== 'x' and ctype_xdigit(substr($v, 1))) { return substr($v, 1); } else { spip_log("Warning: '{$v}' n'est pas de type {$t}", 'pg.' . _LOG_AVERTISSEMENT); return intval($v); } }
function spip_mysql_cite($v, $type) { if (sql_test_date($type) AND preg_match('/^\w+\(/', $v) OR (sql_test_int($type) AND (is_numeric($v) OR (ctype_xdigit(substr($v,2)) AND $v[0]=='0' AND $v[1]=='x')))) return $v; else return ("'" . addslashes($v) . "'"); }
function vertebrer_cell($fields) { $res = ""; foreach($fields as $n => $t) { $texte = "#" . strtoupper($n); if (preg_match('/\s+references\s+([\w_]+)/' , $t, $r)) { $url = "[(#SELF|parametre_url{page,'" . $r[1] . "'})]"; $texte = "<a href='$url'>" . $texte . "</a>"; } if (sql_test_int($t)) $s = " style='text-align: right;'"; else { $s = ''; if (sql_test_date($t)) $texte = "[($texte|affdate_heure)]"; } $res .= "\n\t\t<td$s>$texte</td>"; } return $res; }
function spip_pg_cite($v, $t) { if (sql_test_date($t)) { if ($v AND (strpos("0123456789", $v[0]) === false)) return spip_pg_frommysql($v); else { if (strpos($v, "-00-00") <= 4) { $annee = substr($v,0,4); if (!intval($annee)) $annee = '0001'; $v = $annee ."-01-01".substr($v,10); } return "timestamp '$v'"; } } elseif (!sql_test_int($t)) return ("'" . addslashes($v) . "'"); elseif (is_numeric($v) OR (strpos($v, 'CAST(') === 0)) return $v; elseif ($v[0]== '0' AND $v[1]!=='x' AND ctype_xdigit(substr($v,1))) return substr($v,1); else { spip_log("Warning: '$v' n'est pas de type $t", 'pg'); return intval($v); } }
function _sqlite_calculer_cite($v, $type) { if (sql_test_date($type) AND preg_match('/^\w+\(/', $v)) return $v; if (sql_test_int($type)) { if (is_numeric($v)) return $v; if (ctype_xdigit(substr($v,2)) AND strncmp($v,'0x',2)==0) return hexdec(substr($v,2)); } //else return ("'" . spip_sqlite_quote($v) . "'"); return (spip_sqlite_quote($v)); }