Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
/**
 * 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) . "'";
}
Ejemplo n.º 3
0
/**
 * 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) . "'";
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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);
    }
}
Ejemplo n.º 6
0
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) . "'");
}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 8
0
Archivo: pg.php Proyecto: rhertzog/lcs
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);
	}
}
Ejemplo n.º 9
0
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));
}