Example #1
0
function generer_generer_url_arg($type, $p, $_id)
{
	$s = $p->id_boucle;

	if ($s !== '' AND $s = $p->boucles[$s]->sql_serveur) {

// si une fonction de generation des url a ete definie pour ce connect l'utiliser
		if (function_exists($f = 'generer_generer_url_'.$s)){
			return $f($type, $_id, $s);
		}
		if (!$GLOBALS['connexions'][strtolower($s)]['spip_connect_version']) {
			return NULL;
		}
		$s = _q($s);
		if ($type == 'document') {
			return 
			"quete_meta('adresse_site', $s) . '/' .\n\t" .
			"quete_meta('dir_img', $s) . \n\t" .
			"quete_fichier($_id,$s)";
		}
		$s = ", '', '', $s, quete_meta('type_urls', $s)";
	}
	else 
		$s = ", '', '', true";
	return "urlencode_1738(generer_url_entite($_id, '$type'$s))";
}
function inserer_document_syndic_article($liens, $id_syndic_article, $date, $titre_parent)
{
    include_spip("base/abstract_sql");
    $id_article_syndic = sql_getfetsel("id_syndic_article", "spip_syndic_articles", "id_syndic_article=" . _q($id_syndic_article), "", "date desc", "0,1");
    if (!$date) {
        $date = date("Y-m-d h:i:s");
    }
    foreach ($liens as $link) {
        $id3 = recuperer_id3($link);
        $champs = array('titre' => $titre_parent, 'fichier' => $link, 'tag_auteur' => $id3['artiste'], 'tag_titre' => $id3['titre'], 'date' => date("Y-m-d H:i:s", $date), 'distant' => 'oui', 'statut' => 'publie', 'date' => $date, 'extension' => 'mp3');
        $s = sql_getfetsel("id_document", "spip_documents", "fichier=" . _q($champs['fichier']), "", "date desc", "0,1");
        if ($s) {
            // maj le document distant
            sql_updateq('spip_documents', $champs, 'id_document=' . intval($s));
            // a t'on un lien entre ce doc et cet article ?
            $l = sql_getfetsel("id_document", "spip_documents_liens", "id_document=" . _q($s) . " and id_objet=" . _q($id_article_syndic));
            if (!$l) {
                $champs_liens = array('id_document' => $s, 'id_objet' => $id_article_syndic, 'objet' => 'syndic_article');
                sql_insertq('spip_documents_liens', $champs_liens);
            }
        } else {
            // enregistrer le document distant
            $id_document = sql_insertq('spip_documents', $champs);
            // le lier a son syndic article
            $champs_liens = array('id_document' => $id_document, 'id_objet' => $id_article_syndic, 'objet' => 'syndic_article');
            sql_insertq('spip_documents_liens', $champs_liens);
        }
    }
}
Example #3
0
File: v016.php Project: nursit/SPIP
function maj_v016_dist($version_installee, $version_cible)
{
    if (upgrade_vers(1.6, $version_installee, $version_cible)) {
        #8/08/07  plus d'indexation dans le core
        #		include_spip('inc/indexation');
        #		purger_index();
        #		creer_liste_indexation();
        maj_version(1.6);
    }
    if (upgrade_vers(1.601, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_forum ADD INDEX id_syndic (id_syndic)");
        maj_version(1.601);
    }
    if (upgrade_vers(1.603, $version_installee, $version_cible)) {
        // supprimer les fichiers deplaces
        spip_unlink('inc_meta_cache.php');
        spip_unlink('inc_meta_cache.php3');
        spip_unlink('data/engines-list.ini');
        maj_version(1.603);
    }
    if (upgrade_vers(1.604, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_auteurs ADD lang VARCHAR(10) DEFAULT '' NOT NULL");
        $u = spip_query("SELECT * FROM spip_auteurs WHERE prefs LIKE '%spip_lang%'");
        while ($row = sql_fetch($u)) {
            $prefs = unserialize($row['prefs']);
            $l = $prefs['spip_lang'];
            unset($prefs['spip_lang']);
            spip_query("UPDATE spip_auteurs SET lang=" . _q($l) . ", prefs='" . addslashes(serialize($prefs)) . "' WHERE id_auteur=" . $row['id_auteur']);
        }
        $u = spip_query("SELECT lang FROM spip_auteurs");
        maj_version(1.604, $u);
    }
}
Example #4
0
function affiche_auteur_diff($auteur)
{
    // Si c'est un nombre, c'est un auteur de la table spip_auteurs
    if ($auteur == intval($auteur) and $s = sql_query("SELECT * FROM spip_auteurs WHERE id_auteur=" . _q($auteur)) and $t = sql_fetch($s)) {
        return typo($t['nom']);
    } else {
        return $auteur;
    }
}
Example #5
0
function glossaire_groupes() {
	$groupes = trim($GLOBALS['glossaire_groupes']);
	if(!strlen($groupes)) return _q('Glossaire');
		else {
			$groupes = explode(':', $groupes);
			foreach($groupes as $i=>$g) $groupes[$i] = _q(trim($g));
			return join(" OR type=", $groupes);
		}
}
Example #6
0
/**
 * Generer n'importe quel info pour un objet : #INFO_TITRE{article, #ENV{id_article}}
 * Utilise la fonction generer_info_entite() de inc/filtres
 * se reporter a sa documentation
 * 
 */
function balise_INFO__dist($p)
{
    $info = $p->nom_champ;
    $type_objet = interprete_argument_balise(1, $p);
    $id_objet = interprete_argument_balise(2, $p);
    if ($info === 'INFO_' or !$type_objet or !$id_objet) {
        $msg = _T('zbug_balise_sans_argument', array('balise' => ' INFO_'));
        erreur_squelette($msg, $p);
        $p->interdire_scripts = true;
        return $p;
    } else {
        $info_sql = strtolower(substr($info, 5));
        $code = "generer_info_entite({$id_objet}, {$type_objet}, '{$info_sql}'" . ($p->etoile ? "," . _q($p->etoile) : "") . ")";
        $p->code = champ_sql($info, $p, $code);
        $p->interdire_scripts = true;
        return $p;
    }
}
function socialtags_json($cfg)
{
    if (!is_array($cfg)) {
        return '[]';
    }
    $json = array();
    include_spip('socialtags_fonctions');
    foreach (socialtags_liste() as $service) {
        if (in_array($a = $service['lesauteurs'], $cfg)) {
            $t = _q($service['titre']);
            $u = _q($service['url']);
            $d = isset($service['descriptif']) ? _q($service['descriptif']) : $t;
            $u_site = _q($GLOBALS['meta']['adresse_site']);
            $i = _q('data:image/png;base64,' . base64_encode(file_get_contents(find_in_path('images/' . $a . '.png'))));
            $json[] = "{ a: '{$a}', n: {$t}, i: {$i}, u: {$u}, u_site: {$u_site}}";
        }
    }
    return "[\n" . join(",\n", $json) . "\n]";
}
Example #8
0
File: url_.php Project: nursit/SPIP
function generer_generer_url_arg($type, $p, $_id)
{
    if ($s = trouver_nom_serveur_distant($p)) {
        // si une fonction de generation des url a ete definie pour ce connect l'utiliser
        if (function_exists($f = 'generer_generer_url_' . $s)) {
            return $f($type, $_id, $s);
        }
        if (!$GLOBALS['connexions'][strtolower($s)]['spip_connect_version']) {
            return NULL;
        }
        $s = _q($s);
        # exception des urls de documents sur un serveur distant...
        if ($type == 'document') {
            return "quete_meta('adresse_site', {$s}) . '/' .\n\t" . "quete_meta('dir_img', {$s}) . \n\t" . "quete_fichier({$_id},{$s})";
        }
        $s = ", '', '', {$s}, quete_meta('type_urls', {$s})";
    } else {
        $s = ", '', '', true";
    }
    return "urlencode_1738(generer_url_entite({$_id}, '{$type}'{$s}))";
}
Example #9
0
function etape_ldap5_save()
{
    if (!@file_exists(_FILE_CONNECT_TMP)) {
        redirige_url_ecrire('install');
    }
    ecrire_meta('ldap_statut_import', _request('statut_ldap'));
    lire_fichier(_FILE_CONNECT_TMP, $conn);
    if ($p = strpos($conn, "'');")) {
        ecrire_fichier(_FILE_CONNECT_TMP, substr($conn, 0, $p + 1) . _FILE_LDAP . substr($conn, $p + 1));
    }
    $adresse_ldap = addcslashes(_request('adresse_ldap'), "'\\");
    $login_ldap = addcslashes(_request('login_ldap'), "'\\");
    $pass_ldap = addcslashes(_request('pass_ldap'), "'\\");
    $port_ldap = addcslashes(_request('port_ldap'), "'\\");
    $tls_ldap = addcslashes(_request('tls_ldap'), "'\\");
    $protocole_ldap = addcslashes(_request('protocole_ldap'), "'\\");
    $base_ldap = addcslashes(_request('base_ldap'), "'\\");
    $base_ldap_text = addcslashes(_request('base_ldap_text'), "'\\");
    $conn = "\$GLOBALS['ldap_base'] = '{$base_ldap}';\n" . "\$GLOBALS['ldap_link'] = @ldap_connect('{$adresse_ldap}','{$port_ldap}');\n" . "@ldap_set_option(\$GLOBALS['ldap_link'],LDAP_OPT_PROTOCOL_VERSION,'{$protocole_ldap}');\n" . ($tls_ldap != 'oui' ? '' : "@ldap_start_tls(\$GLOBALS['ldap_link']);\n") . "@ldap_bind(\$GLOBALS['ldap_link'],'{$login_ldap}','{$pass_ldap}');\n";
    $champs = is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : array();
    $res = '';
    foreach ($champs as $champ => $v) {
        $nom = 'ldap_' . $champ;
        $val = trim(_request($nom));
        if (preg_match('/^\\w*$/', $val)) {
            if ($val) {
                $val = _q($val);
            }
        } else {
            $val = "array(" . _q(preg_split('/\\W+/', $val)) . ')';
        }
        if ($val) {
            $res .= "'{$champ}' => " . $val . ",";
        }
    }
    $conn .= "\$GLOBALS['ldap_champs'] = array({$res});\n";
    install_fichier_connexion(_DIR_CONNECT . _FILE_LDAP, $conn);
}
Example #10
0
function v019_pre193($version_installee, $version_cible)
{
    // Syndication : ajout de l'option resume=oui/non et de la langue
    if (upgrade_vers(1.901, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_syndic ADD `resume` VARCHAR(3) DEFAULT 'oui'");
        spip_query("ALTER TABLE spip_syndic_articles ADD `lang` VARCHAR(10) DEFAULT '' NOT NULL");
        maj_version(1.901);
    }
    // Syndication : ajout de source, url_source, tags
    if (upgrade_vers(1.902, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_syndic_articles ADD `url_source` TINYTEXT DEFAULT '' NOT NULL");
        spip_query("ALTER TABLE spip_syndic_articles ADD `source` TINYTEXT DEFAULT '' NOT NULL");
        spip_query("ALTER TABLE spip_syndic_articles ADD `tags` TEXT DEFAULT '' NOT NULL");
        maj_version(1.902);
    }
    // URLs propres des sites (sait-on jamais)
    // + oubli des KEY url_propre sur les auteurs si installation neuve
    if (upgrade_vers(1.903, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_syndic ADD `url_propre` VARCHAR(255) NOT NULL");
        spip_query("ALTER TABLE spip_syndic ADD INDEX `url_propre` (`url_propre`)");
        spip_query("ALTER TABLE spip_auteurs ADD INDEX `url_propre` (`url_propre`)");
        maj_version(1.903);
    }
    // suppression des anciennes tables temporaires des visites
    // (maintenant stockees sous forme de fichiers)
    if (upgrade_vers(1.904, $version_installee, $version_cible)) {
        spip_query("DROP TABLE IF EXISTS spip_visites_temp");
        spip_query("DROP TABLE IF EXISTS spip_referers_temp");
        maj_version(1.904);
    }
    // fusion des 10 tables index en une seule
    // pour fonctions futures evoluees du moteur de recherche
    if (upgrade_vers(1.905, $version_installee, $version_cible)) {
        // agrandir le champ "valeur" de spip_meta pour pouvoir y stocker
        // des choses plus sympa
        spip_query("ALTER TABLE spip_meta DROP INDEX `valeur`");
        spip_query("ALTER TABLE spip_meta CHANGE `valeur` `valeur` TEXT");
        // table des correspondances table->id_table
        $liste_tables = array();
        $liste_tables[1] = 'spip_articles';
        $liste_tables[2] = 'spip_auteurs';
        $liste_tables[3] = 'spip_breves';
        $liste_tables[4] = 'spip_documents';
        $liste_tables[5] = 'spip_forum';
        $liste_tables[6] = 'spip_mots';
        $liste_tables[7] = 'spip_rubriques';
        $liste_tables[8] = 'spip_signatures';
        $liste_tables[9] = 'spip_syndic';
        ecrire_meta('index_table', serialize($liste_tables));
        ## devenu inutile car suppression totale de l'indexation
        /*
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_article` as id_objet,'1' as id_table FROM spip_index_articles");
        		spip_query("DROP TABLE IF EXISTS spip_index_articles");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_auteur` as id_objet,'2' as id_table FROM spip_index_auteurs");
        		spip_query("DROP TABLE IF EXISTS spip_index_auteurs");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_breve` as id_objet,'3' as id_table FROM spip_index_breves");
        		spip_query("DROP TABLE IF EXISTS spip_index_breves");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_document` as id_objet,'4' as id_table FROM spip_index_documents");
        		spip_query("DROP TABLE IF EXISTS spip_index_documents");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_forum` as id_objet,'5' as id_table FROM spip_index_forum");
        		spip_query("DROP TABLE IF EXISTS spip_index_forum");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_mot` as id_objet,'6' as id_table FROM spip_index_mots");
        		spip_query("DROP TABLE IF EXISTS spip_index_mots");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_rubrique` as id_objet,'7' as id_table FROM spip_index_rubriques");
        		spip_query("DROP TABLE IF EXISTS spip_index_rubriques");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_signature` as id_objet,'8' as id_table FROM spip_index_signatures");
        		spip_query("DROP TABLE IF EXISTS spip_index_signatures");
        
        		spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_syndic` as id_objet,'9' as `id_table FROM spip_index_syndic");
        		spip_query("DROP TABLE IF EXISTS spip_index_syndic");
        */
        maj_version(1.905);
    }
    // cette table est desormais geree par le plugin "podcast_client", on la
    // supprime si le plugin n'est pas active ; risque inherent a l'utilisation
    // de versions alpha :-)
    if (upgrade_vers(1.906, $version_installee, $version_cible)) {
        if (!@in_array('podcast_client', $GLOBALS['plugins'])) {
            spip_query("DROP TABLE spip_documents_syndic");
        }
        maj_version(1.906);
    }
    if (upgrade_vers(1.907, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_forum ADD INDEX `idx` (`idx`)");
        maj_version(1.907);
    }
    // Oups ! on stockait les tags de syndication sous la forme rel="category"
    // au lieu de rel="directory" - http://microformats.org/wiki/rel-directory
    if (upgrade_vers(1.908, $version_installee, $version_cible)) {
        spip_query("UPDATE spip_syndic_articles SET `tags` = REPLACE(`tags`, 'rel=\"category\">', 'rel=\"directory\">') WHERE `tags` like '%category%'");
        maj_version(1.908);
    }
    if (upgrade_vers(1.909, $version_installee, $version_cible)) {
        spip_query("ALTER IGNORE TABLE spip_mots_articles ADD PRIMARY KEY (`id_article`, `id_mot`)");
        spip_query("ALTER IGNORE TABLE spip_mots_breves ADD PRIMARY KEY (`id_breve`, `id_mot`)");
        spip_query("ALTER IGNORE TABLE spip_mots_rubriques ADD PRIMARY KEY (`id_rubrique`, `id_mot`)");
        spip_query("ALTER IGNORE TABLE spip_mots_syndic ADD PRIMARY KEY (`id_syndic`, `id_mot`)");
        spip_query("ALTER IGNORE TABLE spip_mots_documents ADD PRIMARY KEY (`id_document`, `id_mot`)");
        spip_query("ALTER IGNORE TABLE spip_mots_forum ADD PRIMARY KEY (`id_forum`, `id_mot`)");
        maj_version(1.909);
    }
    if (upgrade_vers(1.91, $version_installee, $version_cible)) {
        spip_query("ALTER IGNORE TABLE spip_auteurs_articles ADD PRIMARY KEY (`id_auteur`, `id_article`)");
        spip_query("ALTER IGNORE TABLE spip_auteurs_rubriques ADD PRIMARY KEY (`id_auteur`, `id_rubrique`)");
        spip_query("ALTER IGNORE TABLE spip_auteurs_messages ADD PRIMARY KEY (`id_auteur`, `id_message`)");
        maj_version(1.91);
    }
    if (upgrade_vers(1.911, $version_installee, $version_cible)) {
        spip_query("ALTER IGNORE TABLE spip_auteurs_articles DROP INDEX `id_auteur`");
        spip_query("ALTER IGNORE TABLE spip_auteurs_rubriques DROP INDEX `id_auteur`");
        spip_query("ALTER IGNORE TABLE spip_auteurs_messages DROP INDEX `id_auteur`");
        spip_query("ALTER IGNORE TABLE spip_mots_articles DROP INDEX `id_article`");
        spip_query("ALTER IGNORE TABLE spip_mots_breves DROP INDEX `id_breve`");
        spip_query("ALTER IGNORE TABLE spip_mots_rubriques DROP INDEX `id_rubrique`");
        spip_query("ALTER IGNORE TABLE spip_mots_syndic DROP INDEX `id_syndic`");
        spip_query("ALTER IGNORE TABLE spip_mots_forum DROP INDEX `id_forum`");
        spip_query("ALTER IGNORE TABLE spip_mots_documents DROP INDEX `id_document`");
        # 18 juillet 2007: table depreciee
        #		spip_query("ALTER IGNORE TABLE spip_caches DROP	INDEX fichier");
        maj_version(1.911);
    }
    // Le logo du site n'est plus le logo par defaut des rubriques
    // mais pour assurer la compatibilite ascendante, on le duplique
    if (upgrade_vers(1.912, $version_installee, $version_cible)) {
        @copy(_DIR_LOGOS . 'rubon0.gif', _DIR_LOGOS . 'siteon0.gif');
        @copy(_DIR_LOGOS . 'ruboff0.gif', _DIR_LOGOS . 'siteoff0.gif');
        @copy(_DIR_LOGOS . 'rubon0.jpg', _DIR_LOGOS . 'siteon0.jpg');
        @copy(_DIR_LOGOS . 'ruboff0.jpg', _DIR_LOGOS . 'siteoff0.jpg');
        @copy(_DIR_LOGOS . 'rubon0.png', _DIR_LOGOS . 'siteon0.png');
        @copy(_DIR_LOGOS . 'ruboff0.png', _DIR_LOGOS . 'siteoff0.png');
        maj_version(1.912);
    }
    // suppression de auteur_modif qui n'est plus utilise nulle part
    if (upgrade_vers(1.913, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_articles DROP `auteur_modif`");
        maj_version(1.913);
    }
    // Ajout de SVG
    if (upgrade_vers(1.914, $version_installee, $version_cible)) {
        spip_query("INSERT IGNORE INTO spip_types_documents (`extension`, `titre`, `inclus`) VALUES ('svg', 'Scalable Vector Graphics', 'embed')");
        spip_query("UPDATE spip_types_documents SET `mime_type`='image/svg+xml' WHERE `extension`='svg'");
        maj_version(1.914);
    }
    // Ajout de plein de type mime
    if (upgrade_vers(1.915, $version_installee, $version_cible)) {
        maj_version(1.915);
    }
    // refaire l'upgrade 1.905 qui a pu foirer en partie a cause de la requete ALTER sur spip_meta
    if (upgrade_vers(1.916, $version_installee, $version_cible)) {
        // agrandir le champ "valeur" de spip_meta pour pouvoir y stocker
        // des choses plus sympa
        spip_query("ALTER TABLE spip_meta DROP INDEX `valeur`");
        spip_query("ALTER TABLE spip_meta CHANGE `valeur` `valeur` TEXT");
        #8/08/07  plus d'indexation dans le core
        //include_spip('inc/indexation');
        //update_index_tables();
        maj_version(1.916);
    }
    if (upgrade_vers(1.917, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_documents DROP `inclus`");
        maj_version(1.917);
    }
    // Permettre d'enregistrer un numero IP dans les revisions d'articles
    // a la place de l'id_auteur
    if (upgrade_vers(1.918, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_versions CHANGE `id_auteur` `id_auteur` VARCHAR(23)");
        maj_version(1.918);
    }
    if (upgrade_vers(1.919, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_ajax_fonc DROP `id_auteur`");
        maj_version('1.919');
    }
    if (upgrade_vers(1.92, $version_installee, $version_cible)) {
        spip_query("ALTER IGNORE TABLE spip_documents_articles ADD PRIMARY KEY (`id_article`, `id_document`)");
        spip_query("ALTER IGNORE TABLE spip_documents_breves ADD PRIMARY KEY (`id_breve`, `id_document`)");
        spip_query("ALTER IGNORE TABLE spip_documents_rubriques ADD PRIMARY KEY (`id_rubrique`, `id_document`)");
        spip_query("ALTER IGNORE TABLE spip_documents_articles DROP INDEX `id_article`");
        spip_query("ALTER IGNORE TABLE spip_documents_breves DROP INDEX `id_breve`");
        spip_query("ALTER IGNORE TABLE spip_documents_rubriques DROP INDEX `id_rubrique`");
        maj_version('1.920');
    }
    if (upgrade_vers(1.922, $version_installee, $version_cible)) {
        spip_query("ALTER TABLE spip_meta ADD `impt` ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER `valeur`");
        $meta_serveur = array('version_installee', 'adresse_site', 'alea_ephemere_ancien', 'alea_ephemere', 'alea_ephemere_date', 'langue_site', 'langues_proposees', 'date_calcul_rubriques', 'derniere_modif', 'optimiser_table', 'drapeau_edition', 'creer_preview', 'taille_preview', 'creer_htpasswd', 'creer_htaccess', 'gd_formats_read', 'gd_formats', 'netpbm_formats', 'formats_graphiques', 'image_process', 'plugin_header', 'plugin');
        foreach ($meta_serveur as $nom) {
            spip_query("UPDATE spip_meta SET `impt`='non' WHERE `nom`=" . _q($nom));
        }
        maj_version('1.922');
    }
    if (upgrade_vers(1.923, $version_installee, $version_cible)) {
        if (isset($GLOBALS['meta']['IMPORT_tables_noimport'])) {
            $IMPORT_tables_noimport = unserialize($GLOBALS['meta']['IMPORT_tables_noimport']);
            foreach ($IMPORT_tables_noimport as $key => $table) {
                if ($table == 'spip_meta') {
                    unset($IMPORT_tables_noimport[$key]);
                }
            }
            ecrire_meta('IMPORT_tables_noimport', serialize($IMPORT_tables_noimport), 'non');
        }
        maj_version('1.923');
    }
    if (upgrade_vers(1.924, $version_installee, $version_cible)) {
        spip_query('DROP TABLE spip_ajax_fonc');
        maj_version('1.924');
    }
    if (upgrade_vers(1.925, $version_installee, $version_cible)) {
        include_spip('inc/flock');
        /* deplacement des sessions */
        $f_session = preg_files('data', 'session_');
        $repertoire = _DIR_SESSIONS;
        if (!@file_exists($repertoire)) {
            $repertoire = preg_replace(',' . _DIR_TMP . ',', '', $repertoire);
            $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
        }
        foreach ($f_session as $f) {
            $d = basename($f);
            @copy($f, $repertoire . $d);
        }
        /* deplacement des visites */
        $f_visites = preg_files('data/visites');
        $repertoire = sous_repertoire(_DIR_TMP, 'visites');
        foreach ($f_visites as $f) {
            $d = basename($f);
            @copy($f, $repertoire . $d);
        }
        /* deplacement des upload */
        $auteurs = array();
        $req = spip_query("SELECT `login` FROM spip_auteurs WHERE `statut` = '0minirezo'");
        while ($row = sql_fetch($req)) {
            $auteurs[] = $row['login'];
        }
        $f_upload = preg_files('upload', -1, 10000, $auteurs);
        $repertoire = _DIR_TRANSFERT;
        if (!@file_exists($repertoire)) {
            $repertoire = preg_replace(',' . _DIR_TMP . ',', '', $repertoire);
            $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
        }
        foreach ($auteurs as $login) {
            if (is_dir('upload/' . $login)) {
                $sous_repertoire = sous_repertoire(_DIR_TRANSFERT, $login);
            }
        }
        foreach ($f_upload as $f) {
            @copy($f, _DIR_TMP . $f);
        }
        /* deplacement des dumps */
        $f_session = preg_files('data', 'dump');
        $repertoire = _DIR_DUMP;
        if (!@file_exists($repertoire)) {
            $repertoire = preg_replace(',' . _DIR_TMP . ',', '', $repertoire);
            $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
        }
        foreach ($f_session as $f) {
            $d = basename($f);
            @copy($f, $repertoire . $d);
        }
        maj_version('1.925');
    }
    // Ajout de MP4
    if (upgrade_vers(1.926, $version_installee, $version_cible)) {
        spip_query("INSERT IGNORE INTO spip_types_documents (`extension`, `titre`, `inclus`) VALUES ('mp4', 'MPEG4', 'embed')");
        spip_query("UPDATE spip_types_documents SET `mime_type`='application/mp4' WHERE `extension`='mp4'");
        maj_version('1.926');
    }
}
Example #11
0
File: v019.php Project: nursit/SPIP
function maj_1_938()
{
    $res = sql_select('extension', 'spip_documents', "extension='' OR extension is NULL");
    if ($n = sql_count($res)) {
        $repli = false;
        // verifier que la colonne id_type est toujours la (update post 1.938)
        $desc = sql_showtable('spip_documents');
        if (!$desc or !isset($desc['field']['id_type'])) {
            $repli = true;
        }
        $s = sql_select('extension' . ($repli ? '' : ',id_type'), 'spip_types_documents');
        while ($t = sql_fetch($s)) {
            if (isset($t['id_type'])) {
                spip_query("UPDATE spip_documents\tSET `extension`=" . _q($t['extension']) . " WHERE `id_type`=" . _q($t['id_type']));
            } else {
                spip_query("UPDATE spip_documents\tSET `extension`=" . _q($t['extension']) . " WHERE fichier LIKE " . _q("%." . $t['extension']));
            }
        }
        $res = sql_select('extension', 'spip_documents', "extension='' OR extension is NULL");
        if ($n = sql_count($res)) {
            spip_log("Table spip_documents : Colonne extension incomplete : {$n} lignes vides");
        }
    }
}
Example #12
0
function autoriser_forum_modifier($faire, $type, $id, $qui, $opt) {

	// Le webmestre
	if ($GLOBALS['autorite']['editer_forums'] >= 1
	AND autoriser('webmestre', $type, $id, $qui, $opt))
		return true;

	// Les admins
	if (
		$GLOBALS['autorite']['editer_forums'] >= 2
		AND $qui['statut'] == '0minirezo'
		AND !$qui['restreint']
	)
		return true;

	// L'auteur du message (enregistre')
	// 2 = avec une periode de grace d'une heure
	// 3 = ad vitam
	if ($GLOBALS['autorite']['editer_forums'] >= 3
	AND isset($qui['id_auteur'])) {
		$q = "SELECT id_forum FROM spip_forum WHERE id_forum="._q($id)." AND id_auteur="._q($qui['id_auteur']);
		if ($GLOBALS['autorite']['editer_forums'] == 3)
			$q .= " AND date_heure > DATE_SUB(NOW(), INTERVAL 1 HOUR)";
		$s = spip_query($q);
		if (sql_count($s))
			return true;
	}

	// par defaut
	return autoriser_forum_modifier_dist($faire, $type, $id, $qui, $opt);

}
Example #13
0
function balise_LOGO__dist($p)
{
    preg_match(",^LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)\$,i", $p->nom_champ, $regs);
    $type = strtolower($regs[1]);
    $suite_logo = $regs[2];
    // cas de #LOGO_SITE_SPIP
    if ($type == 'site_spip') {
        $type = 'site';
        $_id_objet = "\"'0'\"";
    }
    $id_objet = id_table_objet($type);
    if (!isset($_id_objet) or !$_id_objet) {
        $_id_objet = champ_sql($id_objet, $p);
    }
    $fichier = $p->etoile === '**' ? -1 : 0;
    $coord = array();
    $align = $lien = '';
    $mode_logo = '';
    if ($p->param and !$p->param[0][0]) {
        $params = $p->param[0];
        array_shift($params);
        foreach ($params as $a) {
            if ($a[0]->type === 'texte') {
                $n = $a[0]->texte;
                if (is_numeric($n)) {
                    $coord[] = $n;
                } elseif (in_array($n, array('top', 'left', 'right', 'center', 'bottom'))) {
                    $align = $n;
                } elseif (in_array($n, array('auto', 'icone', 'apercu', 'vignette'))) {
                    $mode_logo = $n;
                }
            } else {
                $lien = calculer_liste($a, $p->descr, $p->boucles, $p->id_boucle);
            }
        }
    }
    $coord_x = !$coord ? 0 : intval(array_shift($coord));
    $coord_y = !$coord ? 0 : intval(array_shift($coord));
    if ($p->etoile === '*') {
        include_spip('balise/url_');
        $lien = generer_generer_url_arg($type, $p, $_id_objet);
    }
    $connect = $p->id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : '';
    if ($type == 'document') {
        $qconnect = _q($connect);
        $doc = "quete_document({$_id_objet}, {$qconnect})";
        if ($fichier) {
            $code = "quete_logo_file({$doc}, {$qconnect})";
        } else {
            $code = "quete_logo_document({$doc}, " . ($lien ? $lien : "''") . ", '{$align}', '{$mode_logo}', {$coord_x}, {$coord_y}, {$qconnect})";
        }
        // (x=non-faux ? y : '') pour affecter x en retournant y
        if ($p->descr['documents']) {
            $code = '(($doublons["documents"] .= ",". ' . $_id_objet . ") ? {$code} : '')";
        }
    } elseif ($connect) {
        $code = "''";
        spip_log("Les logos distants ne sont pas prevus");
    } else {
        $code = logo_survol($id_objet, $_id_objet, $type, $align, $fichier, $lien, $p, $suite_logo);
    }
    // demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0}
    if ($coord_x or $coord_y) {
        $code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '{$coord_x}', '{$coord_y}'))";
    }
    $p->code = $code;
    $p->interdire_scripts = false;
    return $p;
}
Example #14
0
function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect = ''){
	global $tables_jointures;
	static $trouver_table;
	spip_timer('calcul_skel');

	if (isset($GLOBALS['var_mode']) AND $GLOBALS['var_mode']=='debug'){
		$GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette'];
		$GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile;

		if (!isset($GLOBALS['debug_objets']['principal']))
			$GLOBALS['debug_objets']['principal'] = $nom;
	}
	foreach ($boucles as $id => $boucle){
		$GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle;
	}
	$descr['documents'] = compile_inclure_doublons($squelette);

	// Demander la description des tables une fois pour toutes
	// et reperer si les doublons sont demandes
	// pour un inclure ou une boucle document
	// c'est utile a la fonction champs_traitements
	if (!$trouver_table)
		$trouver_table = charger_fonction('trouver_table', 'base');

	foreach ($boucles as $id => $boucle){
		if (!($type = $boucle->type_requete)) continue;
		if (!$descr['documents'] AND (
			(($type=='documents') AND $boucle->doublons) OR
				compile_inclure_doublons($boucle->avant) OR
				compile_inclure_doublons($boucle->apres) OR
				compile_inclure_doublons($boucle->milieu) OR
				compile_inclure_doublons($boucle->altern))
		)
			$descr['documents'] = true;
		if ($type!='boucle'){
			if (!$boucles[$id]->sql_serveur AND $connect)
				$boucles[$id]->sql_serveur = $connect;
			$show = $trouver_table($type, $boucles[$id]->sql_serveur);
			// si la table n'existe pas avec le connecteur par defaut, 
			// c'est peut etre une table qui necessite son connecteur dedie fourni
			// permet une ecriture allegee (GEO) -> (geo:GEO)
			if (!$show AND $show = $trouver_table($type, strtolower($type)))
				$boucles[$id]->sql_serveur = strtolower($type);
			if ($show){
				$boucles[$id]->show = $show;
				// recopie les infos les plus importantes
				$boucles[$id]->primary = $show['key']["PRIMARY KEY"];
				$boucles[$id]->id_table = $x = $show['id_table'];
				$boucles[$id]->from[$x] = $nom_table = $show['table'];

				$boucles[$id]->descr = &$descr;
				if ((!$boucles[$id]->jointures)
					AND (isset($tables_jointures[$nom_table]))
						AND is_array($x = $tables_jointures[$nom_table])
				)
					$boucles[$id]->jointures = $x;
				if ($boucles[$id]->jointures_explicites){
					$jointures = preg_split("/\s+/", $boucles[$id]->jointures_explicites);
					while ($j = array_pop($jointures))
						array_unshift($boucles[$id]->jointures, $j);
				}
			} else {
				// Pas une erreur si la table est optionnelle
				if ($boucles[$id]->table_optionnelle)
					$boucles[$id]->type_requete = '';
				else {
					$boucles[$id]->type_requete = false;
					$boucle = $boucles[$id];
					$x = (!$boucle->sql_serveur ? '' :
						($boucle->sql_serveur . ":")) .
						$type;
					$msg = array('zbug_table_inconnue',
						array('table' => $x));
					erreur_squelette($msg, $boucle);
				}
			}
		}
	}

	// Commencer par reperer les boucles appelees explicitement 
	// car elles indexent les arguments de maniere derogatoire
	foreach ($boucles as $id => $boucle){
		if ($boucle->type_requete=='boucle' AND $boucle->param){
			$boucles[$id]->descr = &$descr;
			$rec = &$boucles[$boucle->param[0]];
			if (!$rec){
				$msg = array('zbug_boucle_recursive_undef',
					array('nom' => $boucle->param[0]));
				erreur_squelette($msg, $boucle);
				$boucles[$id]->type_requete = false;
			} else {
				$rec->externe = $id;
				$descr['id_mere'] = $id;
				$boucles[$id]->return =
					calculer_liste(array($rec),
						$descr,
						$boucles,
						$boucle->param);
			}
		}
	}
	foreach ($boucles as $id => $boucle){
		$id = strval($id); // attention au type dans index_pile
		$type = $boucle->type_requete;
		if ($type AND $type!='boucle'){
			$crit = !$boucle->param ? true : calculer_criteres($id, $boucles);
			$descr['id_mere'] = $id;
			$boucles[$id]->return =
				calculer_liste($boucle->milieu,
					$descr,
					$boucles,
					$id);
			// Si les criteres se sont mal compiles
			// ne pas tenter d'assembler le code final
			// (mais compiler le corps pour detection d'erreurs)
			if (is_array($crit))
				$boucles[$id]->type_requete = false;
		}
	}

	// idem pour la racine
	$descr['id_mere'] = '';
	$corps = calculer_liste($squelette, $descr, $boucles);
	$debug = (isset($GLOBALS['var_mode']) AND $GLOBALS['var_mode']=='debug');

	if ($debug){
		include_spip('public/decompiler');
		include_spip('public/format_' . _EXTENSION_SQUELETTES);
	}
	// Calcul du corps de toutes les fonctions PHP,
	// en particulier les requetes SQL et TOTAL_BOUCLE
	// de'terminables seulement maintenant

	foreach ($boucles as $id => $boucle){
		$boucle = $boucles[$id] = pipeline('pre_boucle', $boucle);
		if ($boucle->return===false) continue;
		// appeler la fonction de definition de la boucle

		if ($req = $boucle->type_requete){
			$f = 'boucle_' . strtoupper($req);
			// si pas de definition perso, definition spip
			if (!function_exists($f)) $f = $f . '_dist';
			// laquelle a une definition par defaut
			if (!function_exists($f)) $f = 'boucle_DEFAUT';
			if (!function_exists($f)) $f = 'boucle_DEFAUT_dist';
			$req = "\n\n\tstatic \$connect = " .
				_q($boucle->sql_serveur) .
				";" .
				$f($id, $boucles);
		} else $req = ("\n\treturn '';");

		$boucles[$id]->return =
			"function BOUCLE" . strtr($id, "-", "_") . $nom .
				'(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
				$req .
				"\n}\n\n";

		if ($debug)
			$GLOBALS['debug_objets']['code'][$nom . $id] = $boucles[$id]->return;
	}

	// Au final, si le corps ou un critere au moins s'est mal compile
	// retourner False, sinon inserer leur decompilation
	if (is_bool($corps)) return false;
	foreach ($boucles as $id => $boucle){
		if ($boucle->return===false) return false;
		$boucle->return = "\n\n/* BOUCLE " .
			$boucle->type_requete .
			" " .
			(!$debug ? '' :
				str_replace('*/', '* /',
					decompiler_criteres($boucle->param,
						$boucle->criteres))) .
			" */\n\n " .
			$boucle->return;
	}

	$secondes = spip_timer('calcul_skel');
	spip_log("COMPIL ($secondes) [$sourcefile] $nom.php");
	// $connect n'est pas sûr : on nettoie
	$connect = preg_replace(',[^\w],', '', $connect);

	// Assimiler la fct principale a une boucle anonyme, c'est plus simple
	$code = new Boucle;
	$code->descr = $descr;
	$code->return = '
//
// Fonction principale du squelette ' .
		$sourcefile .
		($connect ? " pour $connect" : '') .
		(!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
		"\n//" .
		(!$debug ? '' : ("\n/*\n" .
			str_replace('*/', '* /', public_decompiler($squelette))
			. "\n*/")) . "

function " . $nom . '($Cache, $Pile, $doublons=array(), $Numrows=array(), $SP=0) {

'
		// reporter de maniere securisee les doublons inclus
		. '
	if (isset($Pile[0]["doublons"]) AND is_array($Pile[0]["doublons"]))
		$doublons = nettoyer_env_doublons($Pile[0]["doublons"]);

	$connect = ' .
		_q($connect) . ';
	$page = ' .
		// ATTENTION, le calcul de l'expression $corps affectera $Cache
		// c'est pourquoi on l'affecte a la variable auxiliaire $page.
		// avant de referencer $Cache
		$corps . ";

	return analyse_resultat_skel(" . var_export($nom, true)
		. ", \$Cache, \$page, " . var_export($sourcefile, true) . ");
}";

	$boucles[''] = $code;
	return $boucles;
}
Example #15
0
/**
 * Relâcher un verrou SQL local 
 * 
 * @deprecated Pas d'équivalence actuellement en dehors de MySQL
 * @see spip_get_lock()
 * 
 * @param string $nom
 *     Inutilisé. Le nom est calculé en fonction de la connexion principale
 * @return string|bool
 *     True si réussite, false sinon.
 */
function spip_release_lock($nom)
{
    $connexion =& $GLOBALS['connexions'][0];
    $bd = $connexion['db'];
    $prefixe = $connexion['prefixe'];
    $nom = "{$bd}:{$prefixe}:{$nom}" . _LOCK_TIME;
    $connexion['last'] = $q = "SELECT RELEASE_LOCK(" . _q($nom) . ")";
    @mysql_query($q);
}
Example #16
0
function type_urls_edit_urls_1_action() {
	// forms[1] : editer un objet (cas SPIP < 2.0)
	$type = _request('ar_type_objet');
	$table = $type.($type=='syndic'?'':'s');
	$id = intval(_request('ar_num_objet'));
	$url = trim(_request('ar_url_objet'));
	$q = "UPDATE spip_$table SET url_propre="._q($url)." WHERE id_$type=$id";
	spip_query($q);
	redirige_vers_exec(array('ar_num_objet' => _request('ar_num_objet'), 'ar_type_objet' => _request('ar_type_objet')));
}
Example #17
0
function calculer_parties(&$boucles, $id_boucle, $debut, $mode) {

	$total_parties = $boucles[$id_boucle]->total_parties;
	preg_match(",([+-/p])([+-/])?,", $mode, $regs);
	list(,$op1,$op2) = $regs;
	$nombre_boucle = "\$Numrows['$id_boucle']['total']";
	// {1/3}
	if ($op1 == '/') {
		$pmoins1 = is_numeric($debut) ? ($debut-1) : "($debut-1)";
		$totpos = is_numeric($total_parties) ? ($total_parties) :
		  "($total_parties ? $total_parties : 1)";
		$fin = "ceil(($nombre_boucle * $debut )/$totpos) - 1";
		$debut = !$pmoins1 ? 0 : "ceil(($nombre_boucle * $pmoins1)/$totpos);";
	} else {
		// cas {n-1,x}
		if ($op1 == '-') $debut = "$nombre_boucle - $debut;";

		// cas {x,n-1}
		if ($op2 == '-') {
			$fin = '$debut_boucle + '.$nombre_boucle.' - '
			. (is_numeric($total_parties) ? ($total_parties+1) :
			   ($total_parties . ' - 1'));
		} else {
			// {x,1} ou {pagination}
			$fin = '$debut_boucle'
			. (is_numeric($total_parties) ?
			     (($total_parties==1) ? "" :(' + ' . ($total_parties-1))):
			     ('+' . $total_parties . ' - 1'));
		}
		
		// {pagination}, gerer le debut_xx=-1 pour tout voir
		if ($op1 == 'p') {
			$debut .= ";\n	\$debut_boucle = ((\$tout=(\$debut_boucle == -1))?0:(\$debut_boucle))";
			$debut .= ";\n	\$debut_boucle = max(0,min(\$debut_boucle,floor(($nombre_boucle-1)/($total_parties))*($total_parties)))";
			$fin = "(\$tout ? $nombre_boucle : $fin)";
		}
	}

	// Notes :
	// $debut_boucle et $fin_boucle sont les indices SQL du premier
	// et du dernier demandes dans la boucle : 0 pour le premier,
	// n-1 pour le dernier ; donc total_boucle = 1 + debut - fin
	// Utiliser min pour rabattre $fin_boucle sur total_boucle.

	$boucles[$id_boucle]->mode_partie = "\n\t"
	. '$debut_boucle = ' . $debut .   ";\n	"
	. '$fin_boucle = min(' . $fin . ", \$Numrows['$id_boucle']['total'] - 1);\n	"
	. '$Numrows[\''.$id_boucle. "']['grand_total'] = \$Numrows['$id_boucle']['total'];\n	"
	. '$Numrows[\''.$id_boucle.'\']["total"] = max(0,$fin_boucle - $debut_boucle + 1);'
	. "\n\tif (\$debut_boucle>0 AND \$debut_boucle < \$Numrows['$id_boucle']['grand_total'] AND sql_seek(\$result,\$debut_boucle,"._q($boucles[$id_boucle]->sql_serveur).",'continue'))\n\t\t\$Numrows['$id_boucle']['compteur_boucle'] = \$debut_boucle;\n\t";

	$boucles[$id_boucle]->partie = "
		if (\$Numrows['$id_boucle']['compteur_boucle'] <= \$debut_boucle) continue;
		if (\$Numrows['$id_boucle']['compteur_boucle']-1 > \$fin_boucle) break;";
}
Example #18
0
function balise_PARAMETRES_FORUM_dist($p)
{
    // s'il y a un id_article dans le contexte, regarder le statut
    // accepter_forum de cet article
    $_id_article = champ_sql('id_article', $p);
    $p->code = '
		// refus des forums ?
		(quete_accepter_forum(' . $_id_article . ')=="non" OR
		($GLOBALS["meta"]["forums_publics"] == "non"
		AND quete_accepter_forum(' . $_id_article . ') == ""))
		? "" : // sinon:
		';
    // pas de calculs superflus si le site est monolingue
    $lang = strpos($GLOBALS['meta']['langues_utilisees'], ',');
    // si on est dans une boucle de forums, c'est une reponse
    if ($p->type_requete == 'forums') {
        $_id_reponse = champ_sql('id_forum', $p);
    } else {
        $_id_reponse = "null";
    }
    // objet et id_objet principaux sont a determiner
    // dans le contexte ; on demande en tout etat de cause
    // a la boucle mere de reserver son id_primary
    if ($p->id_boucle and isset($p->boucles[$p->id_boucle]) and $primary = $p->boucles[$p->id_boucle]->primary) {
        $_type = _q($p->boucles[$p->id_boucle]->type_requete);
        $_primary = champ_sql($primary, $p);
    } else {
        $_type = "null";
        $_primary = "null";
    }
    // le code de base des parametres
    $c = 'calcul_parametres_forum($Pile[0],' . $_id_reponse . ',' . $_type . ',' . $_primary . ')';
    // ajouter la lang, eventuellement donnee par le contexte
    if ($lang) {
        $_lang = champ_sql('lang', $p);
        $c = "lang_parametres_forum({$c},{$_lang})";
    }
    // Syntaxe [(#PARAMETRES_FORUM{#SELF})] pour fixer le retour du forum
    # note : ce bloc qui sert a recuperer des arguments calcules pourrait
    # porter un nom et faire partie de l'API.
    $retour = interprete_argument_balise(1, $p);
    if ($retour === null) {
        $retour = "''";
    }
    // Attention un eventuel &retour=xxx dans l'URL est prioritaire
    $c .= '.
	(($lien = (_request("retour") ? _request("retour") : str_replace("&amp;", "&", ' . $retour . '))) ? "&retour=".rawurlencode($lien) : "")';
    $c = '(' . $c . ')';
    // Ajouter le code d'invalideur specifique a cette balise
    include_spip('inc/invalideur');
    if ($i = charger_fonction('code_invalideur_forums', '', true)) {
        $p->code .= $i($p, $c);
    } else {
        $p->code .= $c;
    }
    $p->interdire_scripts = false;
    return $p;
}
Example #19
0
<?php

if (!defined('__KIMS__')) {
    exit;
}
checkAdmin(0);
$name = trim($name);
$name = str_replace('http://', '', $name);
$name = str_replace('/', '', $name);
if ($vtype == 'sub') {
    $name = $name . $_fdomain;
}
if ($cat && !$vtype) {
    $R = getDbData($table['s_domain'], "uid<>" . $cat . " and name='" . $name . "'", '*');
    if ($R['uid']) {
        getLink('', '', _q('This is a domain already has registered.', 'a1001', 'domain'), '');
    }
    getDbUpdate($table['s_domain'], "name='{$name}',site='{$site}'", 'uid=' . $cat);
    getLink('reload', 'parent.', '', '');
} else {
    $R = getDbData($table['s_domain'], "name='" . $name . "'", '*');
    if ($R['uid']) {
        getLink('', '', _LANG('a1001', 'domain'), '');
    }
    $MAXC = getDbCnt($table['s_domain'], 'max(gid)', 'depth=' . ($depth + 1) . ' and parent=' . $parent);
    $gid = $MAXC + 1;
    $xdepth = $depth + 1;
    getDbInsert($table['s_domain'], "gid,is_child,parent,depth,name,site", "'{$gid}','0','{$parent}','{$xdepth}','{$name}','{$site}'");
    if ($parent) {
        getDbUpdate($table['s_domain'], 'is_child=1', 'uid=' . $parent);
    }
Example #20
0
function spip_pg_showtable($nom_table, $serveur = '', $requeter = true)
{
    $connexion =& $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
    $link = $connexion['link'];
    $connexion['last'] = $q = "SELECT column_name, column_default, data_type FROM information_schema.columns WHERE table_name ILIKE " . _q($nom_table);
    $res = spip_pg_query_simple($link, $q);
    if (!$res) {
        return false;
    }
    // etrangement, $res peut ne rien contenir, mais arriver ici...
    // il faut en tenir compte dans le return
    $fields = array();
    while ($field = pg_fetch_array($res, NULL, PGSQL_NUM)) {
        $fields[$field[0]] = $field[2] . (!$field[1] ? '' : " DEFAULT " . $field[1]);
    }
    $connexion['last'] = $q = "SELECT indexdef FROM pg_indexes WHERE tablename ILIKE " . _q($nom_table);
    $res = spip_pg_query_simple($link, $q);
    $keys = array();
    while ($index = pg_fetch_array($res, NULL, PGSQL_NUM)) {
        if (preg_match('/CREATE\\s+(UNIQUE\\s+)?INDEX\\s([^\\s]+).*\\((.*)\\)$/', $index[0], $r)) {
            $nom = str_replace($nom_table . '_', '', $r[2]);
            $keys[$r[1] ? "PRIMARY KEY" : "KEY " . $nom] = $r[3];
        }
    }
    return count($fields) ? array('field' => $fields, 'key' => $keys) : false;
}
Example #21
0
$GLOBALS['couleur_claire'] = $GLOBALS['couleurs_spip'][$choix_couleur]['couleur_claire'];

// charger l'affichage minimal et initialiser a la langue par defaut
include_spip('inc/minipres');

//  si la langue est specifiee par cookie alors ...
if (isset($GLOBALS['_COOKIE']['spip_lang_ecrire'])) {

	$spip_lang_ecrire = $GLOBALS['_COOKIE']['spip_lang_ecrire'];
	// si pas authentifie, changer juste pour cette execution
	if ($var_auth)
		changer_langue($GLOBALS['_COOKIE']['spip_lang_ecrire']);
	// si authentifie, changer definitivement si ce n'est fait
	else {	if (($spip_lang_ecrire <> $GLOBALS['auteur_session']['lang'])
		AND changer_langue($spip_lang_ecrire)) {
			spip_query("UPDATE spip_auteurs SET lang = " . _q($spip_lang_ecrire) . " WHERE id_auteur = " . intval($GLOBALS['auteur_session']['id_auteur']));
			$GLOBALS['auteur_session']['lang'] = $var_lang_ecrire;
			$session = charger_fonction('session', 'inc');
			$session($GLOBALS['auteur_session']);
		}
	}
}

utiliser_langue_visiteur(); 

define('_TRANCHES', 10);

//
// Gestion d'une page normale de l'espace prive
//
function enregistrer_entites($entites = array(), $id_article)
{
    // effacer les entites deja enregistrées pour cet article (maj)
    include_spip("base/abstract_sql");
    //var_dump("delete from entites_nommees where id_article=$id_article");
    sql_query("delete from entites_nommees where id_article={$id_article}");
    if (is_array($entites)) {
        foreach ($entites as $entite) {
            /*
            		if(preg_match("/^a\|/", $entite)){
            			var_dump("enregis",$entite);
            			exit ;
            		}
            */
            if (preg_match("/^\\|/", $entite)) {
                var_dump("alert pas d'entite", $entite, $entites);
                continue;
            }
            $e = explode("|", $entite);
            $id_article_entite = $e[2];
            $extrait = _q($e[3]);
            $entite = _q($e[0]);
            $type_entite = _q($e[1]);
            $date = _q(sql_getfetsel("date_redac", "spip_articles", "id_article={$id_article}"));
            //var_dump($date);
            $req = "INSERT INTO entites_nommees (entite, type_entite, id_article, extrait, date) VALUES ({$entite},{$type_entite},{$id_article_entite},{$extrait},{$date})";
            sql_query($req);
            //var_dump("<pre>",$req,"</pre>");
        }
    }
}
Example #23
0
/**
 * Compile le critère `branche` qui sélectionne dans une boucle les
 * éléments appartenant à une branche d'une rubrique.
 *
 * Cherche l'identifiant de la rubrique en premier paramètre du critère {branche XX}
 * s'il est renseigné, sinon, sans paramètre ({branche} tout court) dans les
 * boucles parentes. On calcule avec lui la liste des identifiants
 * de rubrique de toute la branche.
 *
 * La boucle qui possède ce critère cherche une liaison possible avec
 * la colonne id_rubrique, et tentera de trouver une jointure avec une autre
 * table si c'est nécessaire pour l'obtenir.
 *
 * @link http://www.spip.net/@branche
 *
 * @param string $idb     Identifiant de la boucle
 * @param array $boucles  AST du squelette
 * @param Critere $crit   Paramètres du critère dans cette boucle
 * @return void
**/
function critere_branche_dist($idb, &$boucles, $crit)
{
    $not = $crit->not;
    $boucle =& $boucles[$idb];
    // prendre en priorite un identifiant en parametre {branche XX}
    if (isset($crit->param[0])) {
        $arg = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
        // sinon on le prend chez une boucle parente
    } else {
        $arg = kwote(calculer_argument_precedent($idb, 'id_rubrique', $boucles));
    }
    //Trouver une jointure
    $champ = "id_rubrique";
    $desc = $boucle->show;
    //Seulement si necessaire
    if (!array_key_exists($champ, $desc['field'])) {
        $cle = trouver_jointure_champ($champ, $boucle);
        $trouver_table = charger_fonction("trouver_table", "base");
        $desc = $trouver_table($boucle->from[$cle]);
        if (count(trouver_champs_decomposes($champ, $desc)) > 1) {
            $decompose = decompose_champ_id_objet($champ);
            $champ = array_shift($decompose);
            $boucle->where[] = array("'='", _q($cle . "." . reset($decompose)), '"' . sql_quote(end($decompose)) . '"');
        }
    } else {
        $cle = $boucle->id_table;
    }
    $c = "sql_in('{$cle}" . ".{$champ}', calcul_branche_in({$arg})" . ($not ? ", 'NOT'" : '') . ")";
    $boucle->where[] = !$crit->cond ? $c : "({$arg} ? {$c} : " . ($not ? "'0=1'" : "'1=1'") . ')';
}
Example #24
0
function legender_auteur_voir($auteur) {
	global $spip_lang_right;
	$res = "";

	$id_auteur = $auteur['id_auteur'];

	// Bouton "modifier" ?
	if (autoriser('modifier', 'auteur', $id_auteur)) {
		$res .= "<span id='bouton_modifier_auteur'>";

		if (_request('edit') == 'oui') {
			$clic = _T('icone_retour');
			$retour = _T('admin_modifier_auteur');
		} else {
			$clic = _T('admin_modifier_auteur');
			$retour = _T('icone_retour');
		}

		$h = generer_url_ecrire("auteur_infos","id_auteur=$id_auteur&edit=oui");
		$h = "<a\nhref='$h'>$clic</a>";
		$res .= icone_inline($clic, $h, "redacteurs-24.gif", "edit.gif", $spip_lang_right);

		$res .= http_script("
		var intitule_bouton = "._q($retour).";
		jQuery('#bouton_modifier_auteur a')
		.click(function() {
			jQuery('#auteur_infos_edit')
			.toggle();
			jQuery('#auteur-voir')
			.toggle();
			return false;
		});");
		$res .= "</span>\n";
	}
	
	$res .= gros_titre(
		sinon($auteur['nom'],_T('item_nouvel_auteur')),
		'',false);

	$res .= "<div class='nettoyeur'></div>";

	$contenu_auteur = "";
	if (strlen($auteur['email']))
		$contenu_auteur .= "<div>"._T('email_2')
			." <b><a href='mailto:".htmlspecialchars($auteur['email'])."'>"
			.$auteur['email']."</a></b></div>";
	// message d'information d'envoi d'email pour modif et de confirmation
	// on ne fait ici qu'informer, sans aucune action
	if ($email = _request('email_confirm')){
		$contenu_auteur .= "<p><strong>"._T('form_auteur_envoi_mail_confirmation',array('email'=>$email))."</strong></p>";
	}
	elseif (_request('email_modif')==='ok'){
		$contenu_auteur .= "<p><strong>"._T('form_auteur_email_modifie')."</strong></p>";
	}

	if ($auteur['url_site']) {
		if (!$auteur['nom_site'])
			$auteur['nom_site'] = _T('info_site');
		$contenu_auteur .= propre(_T('info_site_2')." [{{".$auteur['nom_site']."}}->".$auteur['url_site']."]");
	}

	if (strlen($auteur['bio'])) {
		$contenu_auteur .= propre("<quote>".$auteur['bio']."</quote>");
	}

	if (strlen($auteur['pgp'])) {
		$contenu_auteur .= propre("PGP: <cadre>".$auteur['pgp']."</cadre>");
	}

	$contexte = array('id'=>$id_auteur);
	// permettre aux plugin de faire des modifs ou des ajouts
	$contenu_auteur = pipeline('afficher_contenu_objet',
		array(
			'args'=>array(
				'type'=>'auteur',
				'id_objet'=>$id_auteur,
				'contexte'=>$contexte
			),
			'data'=> $contenu_auteur
		)
	);

	$res .= "<div id='auteur_infos_voir'>$contenu_auteur</div>\n";

	return $res;

}
/**
 * Calcul des critères {suivant} et {precedent} (avant l'existence d'Iterateurs).
 * On reprend en grande partie le fonctionnement de {pagination} avec debut_xx=@yy
 * en jouant de sql_seek pour se déplacer à la bonne position sur les résultats de
 * la boucle.
 *
 * @param string $type	type de décalage : 'suivant' ou 'precedent'
**/
function calculer_critere_suivant_precedent_dist($idb, &$boucles, $crit, $type) {
	$boucle = &$boucles[$idb];
	$primary = $boucle->primary;
	
	$arg = kwote(calculer_argument_precedent($idb, $primary, $boucles));

	$partie =
		 "0;\n"
		."\tif (\$id_actuel = $arg) {\n"
		."\t\t".'$debut_boucle = quete_position_primary(\''.$primary.'\', $id_actuel, "'.$type.'", $result, '._q($boucle->sql_serveur).');'."\n"
		// pas de resultat, on cree une selection vide
		."\t\t".'if ($debut_boucle === false){'."\n"
			."\t\t\t".'@sql_free($result,'._q($boucle->sql_serveur).");\n"
			."\t\t\t"."\$where[] = array('=','0','1');\n" // forcer 0 resultat
			."\t\t\t".'$result = calculer_select($select, $from, $type, $where, $join, $groupby, $orderby, $limit, $having, $table, $id, $connect);'."\n"
			//."\t\t\t"."\$Numrows['$idb']['total'] = 0;\n"
		."\t\t} else {\n"
			// si on a des resultats, il faut remettre le compteur a zero.
			."\t\t".'if (!sql_seek($result,0,'._q($boucle->sql_serveur).")){\n"
			."\t\t\t".'@sql_free($result,'._q($boucle->sql_serveur).");\n"
			."\t\t\t".'$result = calculer_select($select, $from, $type, $where, $join, $groupby, $orderby, $limit, $having, $table, $id, $connect);'."\n"
			."\t\t}\n"
			// donner un bon GRAND_TOTAL pour la fonction calculer_parties()
			// NAN ça marche pas non plus... mah que passa ?
			//."\t\t\t"."\$Numrows['$idb']['total'] = (\$Numrows['$idb']['total'] >= 1 ? 2 : 0);\n"
		."\t\t}\n"
		."\t}\n"
		."\t".'$debut_boucle = intval($debut_boucle)';


	$boucle->total_parties = 1;
	calculer_parties($boucles, $idb, $partie, '++');
	
	// ajouter la cle primaire dans le select
	// sauf si pas de primaire, ou si primaire composee
	// dans ce cas, on ne sait pas gerer une pagination indirecte
	// : il faut id_xx dans le select pour la fonction quete_position_primary()
	$t = $boucle->id_table . '.' . $primary;
	if ($boucle->primary
		AND !preg_match('/[,\s]/',$primary)
		AND !in_array($t, $boucle->select)) {
	  $boucle->select[]= $t;
	}

	// forcer le compilo à ne pas prendre en static a cause du $where fluctuant
	$boucle->where[]= array("'='","'1'","sql_quote(1)");
	  
}
Example #26
0
function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect = '')
{
    static $trouver_table;
    spip_timer('calcul_skel');
    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
        $GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette'];
        $GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile;
        if (!isset($GLOBALS['debug_objets']['principal'])) {
            $GLOBALS['debug_objets']['principal'] = $nom;
        }
    }
    foreach ($boucles as $id => $boucle) {
        $GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle;
    }
    $descr['documents'] = compile_inclure_doublons($squelette);
    // Demander la description des tables une fois pour toutes
    // et reperer si les doublons sont demandes
    // pour un inclure ou une boucle document
    // c'est utile a la fonction champs_traitements
    if (!$trouver_table) {
        $trouver_table = charger_fonction('trouver_table', 'base');
    }
    foreach ($boucles as $id => $boucle) {
        if (!($type = $boucle->type_requete)) {
            continue;
        }
        if (!$descr['documents'] and ($type == 'documents' and $boucle->doublons or compile_inclure_doublons($boucle->avant) or compile_inclure_doublons($boucle->apres) or compile_inclure_doublons($boucle->milieu) or compile_inclure_doublons($boucle->altern))) {
            $descr['documents'] = true;
        }
        if ($type != TYPE_RECURSIF) {
            if (!$boucles[$id]->sql_serveur and $connect) {
                $boucles[$id]->sql_serveur = $connect;
            }
            // chercher dans les iterateurs du repertoire iterateur/
            if ($g = charger_fonction(preg_replace('/\\W/', '_', $boucle->type_requete), 'iterateur', true)) {
                $boucles[$id] = $g($boucle);
                // sinon, en cas de requeteur d'un type predefini,
                // utiliser les informations donnees par le requeteur
                // cas "php:xx" et "data:xx".
            } else {
                if ($boucle->sql_serveur and $requeteur = charger_fonction($boucle->sql_serveur, 'requeteur', true)) {
                    $requeteur($boucles, $boucle, $id);
                    // utiliser la description des champs transmis
                } else {
                    $show = $trouver_table($type, $boucles[$id]->sql_serveur);
                    // si la table n'existe pas avec le connecteur par defaut,
                    // c'est peut etre une table qui necessite son connecteur dedie fourni
                    // permet une ecriture allegee (GEO) -> (geo:GEO)
                    if (!$show and $show = $trouver_table($type, strtolower($type))) {
                        $boucles[$id]->sql_serveur = strtolower($type);
                    }
                    if ($show) {
                        $boucles[$id]->show = $show;
                        // recopie les infos les plus importantes
                        $boucles[$id]->primary = isset($show['key']["PRIMARY KEY"]) ? $show['key']["PRIMARY KEY"] : '';
                        $boucles[$id]->id_table = $x = preg_replace(",^spip_,", "", $show['id_table']);
                        $boucles[$id]->from[$x] = $nom_table = $show['table'];
                        $boucles[$id]->iterateur = 'SQL';
                        $boucles[$id]->descr =& $descr;
                        if (!$boucles[$id]->jointures and is_array($show['tables_jointures']) and count($x = $show['tables_jointures'])) {
                            $boucles[$id]->jointures = $x;
                        }
                        if ($boucles[$id]->jointures_explicites) {
                            $jointures = preg_split("/\\s+/", $boucles[$id]->jointures_explicites);
                            while ($j = array_pop($jointures)) {
                                array_unshift($boucles[$id]->jointures, $j);
                            }
                        }
                    } else {
                        // Pas une erreur si la table est optionnelle
                        if ($boucles[$id]->table_optionnelle) {
                            $boucles[$id]->type_requete = '';
                        } else {
                            $boucles[$id]->type_requete = false;
                            $boucle = $boucles[$id];
                            $x = (!$boucle->sql_serveur ? '' : $boucle->sql_serveur . ":") . $type;
                            $msg = array('zbug_table_inconnue', array('table' => $x));
                            erreur_squelette($msg, $boucle);
                        }
                    }
                }
            }
        }
    }
    // Commencer par reperer les boucles appelees explicitement
    // car elles indexent les arguments de maniere derogatoire
    foreach ($boucles as $id => $boucle) {
        if ($boucle->type_requete == TYPE_RECURSIF and $boucle->param) {
            $boucles[$id]->descr =& $descr;
            $rec =& $boucles[$boucle->param[0]];
            if (!$rec) {
                $msg = array('zbug_boucle_recursive_undef', array('nom' => $boucle->param[0]));
                erreur_squelette($msg, $boucle);
                $boucles[$id]->type_requete = false;
            } else {
                $rec->externe = $id;
                $descr['id_mere'] = $id;
                $boucles[$id]->return = calculer_liste(array($rec), $descr, $boucles, $boucle->param);
            }
        }
    }
    foreach ($boucles as $id => $boucle) {
        $id = strval($id);
        // attention au type dans index_pile
        $type = $boucle->type_requete;
        if ($type and $type != TYPE_RECURSIF) {
            $res = '';
            if ($boucle->param) {
                // retourne un tableau en cas d'erreur
                $res = calculer_criteres($id, $boucles);
            }
            $descr['id_mere'] = $id;
            $boucles[$id]->return = calculer_liste($boucle->milieu, $descr, $boucles, $id);
            // Si les criteres se sont mal compiles
            // ne pas tenter d'assembler le code final
            // (mais compiler le corps pour detection d'erreurs)
            if (is_array($res)) {
                $boucles[$id]->type_requete = false;
            }
        }
    }
    // idem pour la racine
    $descr['id_mere'] = '';
    $corps = calculer_liste($squelette, $descr, $boucles);
    // Calcul du corps de toutes les fonctions PHP,
    // en particulier les requetes SQL et TOTAL_BOUCLE
    // de'terminables seulement maintenant
    foreach ($boucles as $id => $boucle) {
        $boucle = $boucles[$id] = pipeline('pre_boucle', $boucle);
        if ($boucle->return === false) {
            $corps = false;
            continue;
        }
        // appeler la fonction de definition de la boucle
        if ($req = $boucle->type_requete) {
            // boucle personnalisée ?
            $table = strtoupper($boucle->type_requete);
            $serveur = strtolower($boucle->sql_serveur);
            if ((!$serveur or !function_exists($f = "boucle_" . $serveur . "_" . $table) and !function_exists($f = $f . "_dist")) and !function_exists($f = "boucle_" . $table) and !function_exists($f = $f . "_dist")) {
                // fonction de boucle standard
                if (!function_exists($f = 'boucle_DEFAUT')) {
                    $f = 'boucle_DEFAUT_dist';
                }
            }
            $req = "\n\n\tstatic \$command = array();\n\t" . "static \$connect;\n\t" . "\$command['connect'] = \$connect = " . _q($boucle->sql_serveur) . ";" . $f($id, $boucles);
        } else {
            $req = "\n\treturn '';";
        }
        $boucles[$id]->return = "\n\nfunction BOUCLE" . strtr($id, "-", "_") . $nom . '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' . $req . "\n}\n";
    }
    // Au final, si le corps ou un critere au moins s'est mal compile
    // retourner False, sinon inserer leur decompilation
    if (is_bool($corps)) {
        return false;
    }
    $principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons=array(), $Numrows=array(), $SP=0) {
' . '
	if (isset($Pile[0]["doublons"]) AND is_array($Pile[0]["doublons"]))
		$doublons = nettoyer_env_doublons($Pile[0]["doublons"]);

	$connect = ' . _q($connect) . ';
	$page = ' . $corps . ";\n\n\treturn analyse_resultat_skel(" . var_export($nom, true) . ", \$Cache, \$page, " . var_export($sourcefile, true) . ");\n}";
    $secondes = spip_timer('calcul_skel');
    spip_log("COMPIL ({$secondes}) [{$sourcefile}] {$nom}.php");
    // $connect n'est pas sûr : on nettoie
    $connect = preg_replace(',[^\\w],', '', $connect);
    // Assimiler la fct principale a une boucle anonyme, pour retourner un resultat simple
    $code = new Boucle();
    $code->descr = $descr;
    $code->return = '
//
// Fonction principale du squelette ' . $sourcefile . ($connect ? " pour {$connect}" : '') . (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: {$secondes}") . "\n//\n" . $principal;
    $boucles[''] = $code;
    return $boucles;
}
function balise_LANGUE_PREFEREE_SECTEUR_REDIRECTION_dyn($liste_rub_exclues="")
{
	include_spip('inc/meta');

	// Recuperation des langues des secteurs
	$langues_secteurs = array();
	include_spip('base/abstract_sql');
	$query = 'SELECT DISTINCT(lang) FROM spip_rubriques WHERE id_parent=0 AND statut="publie" GROUP BY lang';
	if ($res = sql_query($query)) { // was spip_query($query)) {
		while($row = sql_fetch($res)) { // was spip_fetch_array
			$langues_secteurs[] = $row['lang'];
		}
	}
	// Détection de la langue preferee
	if (isset($_GET['lang']) && in_array($_GET['lang'], $langues_secteurs)) {
		// Soit passee dans l'url, auquel cas c'est un choix qu'on conserve pour la suite
		$langue_preferee = $_GET['lang'];
		include_spip('inc/cookie');
		// On pose un cookie d'un an de duree de vie
		spip_setcookie('spip_langue_preferee', $langue_preferee, time() + 3660*24*365, chemin_cookie());
	} elseif(isset($_COOKIE['spip_lang']) && in_array($_COOKIE['spip_lang'], $langues_secteurs)){
		//Soit un cookie lang est présent
		$langue_preferee = $_COOKIE['spip_lang'];
		include_spip('inc/cookie');
		// On pose un cookie d'un an de duree de vie
		spip_setcookie('spip_langue_preferee', $langue_preferee, time() + 3660*24*365, chemin_cookie());
	}elseif (isset($_COOKIE['spip_langue_preferee']) && in_array($_COOKIE['spip_langue_preferee'], $langues_secteurs)) {
		// Soit deja enregistree dans un cookie
		$langue_preferee = $_COOKIE['spip_langue_preferee'];
	} else {
		// Soit indeterminee
		$langues_navigateur = getenv('HTTP_ACCEPT_LANGUAGE');
		// On supprime les taux de pertinence des langues acceptees
		$langues_navigateur = preg_replace("/;q=[.0-9]+(,)?/", "$1", $langues_navigateur);
		$langues_navigateur = explode(',', $langues_navigateur);
		// Quelles sont les langues acceptees disponibles dans les secteurs
		$langues_possibles = array_intersect($langues_navigateur, $langues_secteurs);
		if (count($langues_possibles)) {
			list(, $langue_preferee) = each($langues_possibles);
		} else {
			// fr-ca -> fr
			$langues_navigateur_reduites = array();
			foreach($langues_navigateur as $langue) {
				$langue_reduite = substr($langue, 0, 2);
				if (!in_array($langue_reduite, $langues_navigateur_reduites)) {
					$langues_navigateur_reduites[] = $langue_reduite;
				}
			}
			// Quelles sont les langues acceptees reduites disponibles dans les secteurs
			$langues_reduites_possibles = array_intersect($langues_navigateur_reduites, $langues_secteurs);
			if (count($langues_reduites_possibles)) {
				list(, $langue_preferee) = each($langues_reduites_possibles);
			} elseif (in_array(lire_meta('langue_site'), $langues_secteurs)) {
				// Quelle est alors la langue par defaut du site
				$langue_preferee = lire_meta('langue_site');
			} else {
				// Tant pis, on prend le premier secteur qui vient...
				list(, $langue_preferee) = each($langues_secteurs);
			}
		}
	}

	// On recupere l'id du premier secteur trouve correspondant a la langue preferee (tant pis s'il y en a plusieurs)
	if (!empty($liste_rub_exclues)) {
		$query='SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 AND lang='._q($langue_preferee).' AND id_rubrique NOT IN ('.$liste_rub_exclues.') LIMIT 0,1';
	} else {
		$query = 'SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 AND lang='._q($langue_preferee).' LIMIT 0,1';
	}
	$res = sql_query($query) ; // was spip_query($query);
	if ($row = sql_fetch($res)) { // was spip_fetch_array
		$id_rubrique = $row['id_rubrique'];
		if ( $GLOBALS['spip_version_code']<1.93) { // spip 1.9.x
			if (!function_exists('generer_url_rubrique')) { include_spip('urls/'.$GLOBALS['type_urls']); }
			$url_rubrique = generer_url_rubrique($id_rubrique);
		} else { // spip 2.x
			if (!function_exists('generer_url_entite')) { include_spip('inc/utils'); }
			$url_rubrique = generer_url_entite($id_rubrique,'rubrique');
		}
		spip_log('Redirection vers '.$url_rubrique);
		header('Location: '.$url_rubrique);
		exit;
	}
}
function crayons_update($id, $colval = array(), $type = '')
{
    if (!$colval or !count($colval)) {
        return false;
    }
    list($distant, $table) = distant_table($type);
    if ($distant) {
        list($nom_table, $where) = table_where($type, $id);
        if (!$nom_table) {
            return false;
        }
        $update = $sep = '';
        foreach ($colval as $col => $val) {
            $update .= $sep . '`' . $col . '`=' . _q($val);
            $sep = ', ';
        }
        $a = spip_query($q = 'UPDATE `' . $nom_table . '` SET ' . $update . ' WHERE ' . $where, $distant);
        #spip_log($q);
        include_spip('inc/invalideur');
        suivre_invalideur($cond, $modif = true);
    } else {
        // cle primaire composee : 3-4-rubrique
        // calculer un where approprie
        // et modifier sans passer par la fonction destinee aux tables principales
        // on limite a SPIP 2 mini car sql_updateq n'est pas mappe dans les crayons_compat
        if (is_scalar($id) and $GLOBALS['spip_version_code'] >= '1.93') {
            list($nom_table, $where) = table_where($type, $id, true);
            // where sous forme de tableau
            $a = sql_updateq($nom_table, $colval, $where);
        } else {
            // modification d'une table principale
            include_spip('inc/modifier');
            $a = modifier_contenu($type, $id, array(), $colval);
        }
    }
    return $a;
}
Example #29
0
/**
 * Retourne une ressource de la liste des tables de la base de données 
 *
 * @param string $match
 *     Filtre sur tables à récupérer
 * @param string $serveur
 *     Connecteur de la base
 * @param bool $requeter
 *     true pour éxecuter la requête
 *     false pour retourner le texte de la requête.
 * @return ressource
 *     Ressource à utiliser avec sql_fetch()
**/
function spip_sqlite_showbase($match, $serveur = '', $requeter = true)
{
    // type est le type d'entrée : table / index / view
    // on ne retourne que les tables (?) et non les vues...
    # ESCAPE non supporte par les versions sqlite <3
    #	return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter);
    $match = preg_quote($match);
    $match = str_replace("\\\\_", "[[TIRETBAS]]", $match);
    $match = str_replace("\\\\%", "[[POURCENT]]", $match);
    $match = str_replace("_", ".", $match);
    $match = str_replace("%", ".*", $match);
    $match = str_replace("[[TIRETBAS]]", "_", $match);
    $match = str_replace("[[POURCENT]]", "%", $match);
    $match = "^{$match}\$";
    return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match), $serveur, $requeter);
}
Example #30
0
/**
 * Compile la balise `#PUBLIE` qui indique si un objet est publié ou non
 *
 * @balise
 * @link http://www.spip.net/5545
 * @see objet_test_si_publie()
 * @example
 *     ```
 *     #PUBLIE : porte sur la boucle en cours
 *     [(#PUBLIE{article, 3}|oui) ... ] : pour l'objet indiqué
 *     ```
 *
 * @param Champ $p
 *     Pile au niveau de la balise
 * @return Champ
 *     Pile complétée par le code à générer
 */
function balise_PUBLIE_dist($p)
{
    if (!($_type = interprete_argument_balise(1, $p))) {
        $_type = _q($p->type_requete);
        $_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
    } else {
        $_id = interprete_argument_balise(2, $p);
    }
    $connect = '';
    if (isset($p->boucles[$p->id_boucle])) {
        $connect = $p->boucles[$p->id_boucle]->sql_serveur;
    }
    $p->code = "(objet_test_si_publie(" . $_type . ",intval(" . $_id . ")," . _q($connect) . ")?' ':'')";
    $p->interdire_scripts = false;
    return $p;
}