Пример #1
0
/**
 * Appelle toutes les fonctions de modification d'un auteur
 *
 * @param int $id_auteur
 * @param array $set
 * @param bool $force_update
 *   permet de forcer la maj en base des champs fournis, sans passer par instancier
 *   utilise par auth/spip
 * @return string
 */
function auteur_modifier($id_auteur, $set = null, $force_update = false)
{
    include_spip('inc/modifier');
    include_spip('inc/filtres');
    $c = collecter_requests(objet_info('auteur', 'champs_editables'), $force_update ? array() : array('webmestre', 'pass', 'login'), $set);
    if ($err = objet_modifier_champs('auteur', $id_auteur, array('nonvide' => array('nom' => _T('ecrire:item_nouvel_auteur'))), $c)) {
        return $err;
    }
    $session = $c;
    $err = '';
    if (!$force_update) {
        // Modification de statut, changement de rubrique ?
        $c = collecter_requests(array('statut', 'new_login', 'new_pass', 'login', 'pass', 'webmestre', 'restreintes', 'id_parent'), array(), $set);
        if (isset($c['new_login']) and !isset($c['login'])) {
            $c['login'] = $c['new_login'];
        }
        if (isset($c['new_pass']) and !isset($c['pass'])) {
            $c['pass'] = $c['new_pass'];
        }
        $err = auteur_instituer($id_auteur, $c);
        $session = array_merge($session, $c);
    }
    // .. mettre a jour les sessions de cet auteur
    include_spip('inc/session');
    $session['id_auteur'] = $id_auteur;
    unset($session['new_login']);
    unset($session['new_pass']);
    actualiser_sessions($session);
    return $err;
}
Пример #2
0
/**
 * Afficher le diff d'un champ texte generique
 * @param string $champ
 * @param string $old
 * @param string $new
 * @param string $format
 *   apercu, diff ou complet
 * @return string
 */
function afficher_diff_jointure_dist($champ, $old, $new, $format = 'diff')
{
    $join = substr($champ, 9);
    $objet = objet_type($join);
    $old = explode(',', $old);
    $new = explode(',', $new);
    $liste = array();
    // les communs
    $intersection = array_intersect($new, $old);
    foreach ($intersection as $id) {
        if ($id = intval(trim($id))) {
            $liste[$id] = "<a href='" . generer_url_entite($id, $objet) . "' title='" . _T(objet_info($objet, 'texte_objet')) . " {$id}'>" . generer_info_entite($id, $objet, 'titre') . "</a>";
        }
    }
    // les supprimes
    $old = array_diff($old, $intersection);
    foreach ($old as $id) {
        if ($id = intval(trim($id))) {
            $liste[$id] = "<span class='diff-supprime'>" . "<a href='" . generer_url_entite($id, $objet) . "' title='" . _T(objet_info($objet, 'texte_objet')) . " {$id}'>" . generer_info_entite($id, $objet, 'titre') . "</a>" . "</span>";
        }
    }
    // les ajoutes
    $new = array_diff($new, $intersection);
    foreach ($new as $id) {
        if ($id = intval(trim($id))) {
            $liste[$id] = "<span class='diff-ajoute'>" . "<a href='" . generer_url_entite($id, $objet) . "' title='" . _T(objet_info($objet, 'texte_objet')) . " {$id}'>" . generer_info_entite($id, $objet, 'titre') . "</a>" . "</span>";
        }
    }
    ksort($liste);
    $liste = implode(', ', $liste);
    return $liste;
}
function html_f3666965c018303599bb64189cbac96c($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 = '';
    $page = ' <div' . (($t1 = strval(interdire_scripts(entites_html(sinon(table_valeur(@$Pile[0], (string) 'divclass', null), 'spip-admin-bloc'), true)))) !== '' ? ' class="' . $t1 . '"' : '') . ' id=\'spip-admin\' dir="' . lang_dir(@$Pile[0]['lang'], 'ltr', 'rtl') . '">' . (($t1 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'analyser', null), true)))) !== '' ? '
	<a href="' . $t1 . ('" class="spip-admin-boutons"
		id="analyser">' . _T('public|spip|ecrire:analyse_xml') . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'xhtml_error', null), true)))) !== '' ? ' (' . $t2 . ')' : '') . '</a>') : '') . '
	' . (($t1 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'objet', null), true) ? ' ' : ''))) !== '' ? $t1 . ('
		' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'id_objet', null), true)))) !== '' ? '<a href="' . interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) ('voir_' . interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'objet', null), true))), null), true)) . '" class="spip-admin-boutons"
		id="voir_' . interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'objet', null), true)) . '">' . interdire_scripts(_T(objet_info(entites_html(table_valeur(@$Pile[0], (string) 'objet', null), true), 'texte_objet'))) . '
			(' . $t2 . ')</a>' : '') . '
	') : '') . '<!--extra-->' . (($t1 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'ecrire', null), true)))) !== '' ? '
	<a href="' . $t1 . ('" class="spip-admin-boutons"
		id="ecrire">' . _T('public|spip|ecrire:espace_prive') . '</a>') : '') . '
	<a href="' . parametre_url(self(), 'var_mode', interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'calcul', null), true))) . '" class="spip-admin-boutons"
		id="var_mode">' . _T('public|spip|ecrire:admin_recalculer') . interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'use_cache', null), true)) . '</a>' . (($t1 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'preview', null), true)))) !== '' ? '
	<a href="' . $t1 . ('" class="spip-admin-boutons"
		id="preview">' . _T('public|spip|ecrire:previsualisation') . '</a>') : '') . (($t1 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'debug', null), true)))) !== '' ? '
	<a href="' . $t1 . ('" class="spip-admin-boutons"
		id="debug">' . _T('public|spip|ecrire:admin_debug') . '</a>') : '') . '
</div>
';
    return analyse_resultat_skel('html_f3666965c018303599bb64189cbac96c', $Cache, $page, 'squelettes-dist/formulaires/administration.html');
}
Пример #4
0
/**
 * Trouver le label d'un champ de révision
 * 
 * Quelques champs ont un label dans dans les chaînes de langue de SPIP
 * Pour un champ particulier d'un objet particulier, le pipeline revisions_chercher_label
 * peut être utilisé
 * 
 * @param string $champ
 * 		Le nom du champ révisionné
 * @param string $objet
 * 		Le type d'objet révisionné
 * @return string $label
 * 		Le label du champ
 */
function label_champ($champ, $objet = false)
{
    $label = "";
    // si jointure: renvoyer le nom des objets joints
    if (strncmp($champ, 'jointure_', 9) == 0) {
        return _T(objet_info(objet_type(substr($champ, 9)), 'texte_objets'));
    }
    switch ($champ) {
        case 'surtitre':
            $label = "texte_sur_titre";
            break;
        case 'soustitre':
            $label = "texte_sous_titre";
            break;
        case 'nom_site':
            $label = "lien_voir_en_ligne";
            break;
        case 'email':
            $label = "entree_adresse_email_2";
            break;
        case 'login':
            $label = "item_login";
            break;
        case 'chapo':
            $champ = "chapeau";
        default:
            $label = pipeline('revisions_chercher_label', array('args' => array('champ' => $champ, 'objet' => $objet), 'data' => $label ? $label : 'info_' . $champ));
            break;
    }
    return $label ? _T($label) : "";
}
Пример #5
0
/**
 * Un parametre permet de forcer le statut (exemple: plugin antispam)
 *
 * http://code.spip.net/@inc_forum_insert_dist
 *
 * @param $objet
 * @param $id_objet
 * @param $id_forum
 *   en reponse a
 * @param null $force_statut
 * @return bool
 */
function inc_forum_insert_dist($objet, $id_objet, $id_forum, $force_statut = null)
{
    if (!in_array($force_statut, array('privrac', 'privadm'))) {
        if (!strlen($objet) or !intval($id_objet)) {
            spip_log("Erreur insertion forum sur objet='{$objet}', id_objet={$id_objet}", 'forum.' . _LOG_ERREUR);
            return 0;
        }
    }
    spip_log("insertion de forum {$force_statut} sur {$objet} {$id_objet} (+{$id_forum})", 'forum');
    include_spip('inc/filtres');
    include_spip('inc/modifier');
    include_spip('inc/session');
    $champs = objet_info('forum', 'champs_editables');
    $c = collecter_requests($champs, array());
    $c['statut'] = 'off';
    $c['objet'] = $objet;
    $c['id_objet'] = $id_objet;
    $c['auteur'] = sinon(session_get('nom'), session_get('session_nom'));
    $c['email_auteur'] = sinon(session_get('email'), session_get('session_email'));
    $c = pipeline('pre_edition', array('args' => array('table' => 'spip_forum', 'id_objet' => $id_forum, 'action' => 'instituer'), 'data' => forum_insert_statut($c, $force_statut)));
    $id_reponse = forum_insert_base($c, $id_forum, $objet, $id_objet, $c['statut'], _request('ajouter_mot'));
    if (!$id_reponse) {
        spip_log("Echec insertion forum sur {$objet} {$id_objet} (+{$id_forum})", 'forum.' . _LOG_ERREUR);
    } else {
        spip_log("forum insere' {$id_reponse} sur {$objet} {$id_objet} (+{$id_forum})", 'forum');
    }
    return $id_reponse;
}
function critere_archives($idb, &$boucles, $crit)
{
    $boucle =& $boucles[$idb];
    $objet = objet_type($boucle->id_table);
    $date = objet_info($objet, 'date');
    $champ_date = "'" . $boucle->id_table . "." . $date . "'";
    $boucle->where[] = array('REGEXP', $champ_date, "sql_quote(('^' . interdire_scripts(entites_html(\$Pile[0]['" . VAR_DATE . "']))))");
}
Пример #7
0
function urls_afficher_fiche_objet($flux)
{
    if (isset($GLOBALS['meta']['urls_activer_controle']) and $GLOBALS['meta']['urls_activer_controle'] == 'oui' and $objet = $flux['args']['type'] and $id_objet = $flux['args']['id'] and objet_info($objet, 'page')) {
        $p = strpos($flux['data'], 'fiche_objet');
        $p = strpos($flux['data'], '<!--/hd-->', $p);
        //$p = strrpos(substr($flux['data'],0,$p),'<div');
        $res = recuperer_fond('prive/objets/editer/url', array('id_objet' => $id_objet, 'objet' => $objet), array('ajax' => true));
        $flux['data'] = substr_replace($flux['data'], $res, $p, 0);
    }
    return $flux;
}
/**
 * Modifier une souscription
 *
 * $c est un contenu (par defaut on prend le contenu via _request())
 *
 * @param int $id_souscription
 * @param array|bool $set
 * @return string
 */
function souscription_modifier($id_souscription, $set = false)
{
    include_spip('inc/modifier');
    $c = collecter_requests(objet_info('souscription', 'champs_editables'), array(), $set);
    /* Récupération du nom du pays */
    $code_pays = _request('pays');
    $pays = sql_getfetsel(sql_multi("nom", $GLOBALS['spip_lang']), 'spip_pays', "code=" . sql_quote($code_pays));
    $c = array_merge($c, array("pays" => $pays));
    if ($err = objet_modifier_champs('souscription', $id_souscription, array(), $c)) {
        return $err;
    }
}
Пример #9
0
/**
 * J'edite tel objet
 * si l'objet est non editable dans l'espace prive, ne pas retenir le signalement
 * qui correspond a un process unique
 *
 * http://doc.spip.org/@signale_edition
 *
 * @param int $id
 * @param $auteur
 * @param string $type
 * @return mixed
 */
function signale_edition($id, $auteur, $type = 'article')
{
    include_spip('base/objets');
    include_spip('inc/filtres');
    if (objet_info($type, 'editable') !== 'oui') {
        return;
    }
    $edition = lire_tableau_edition();
    if (isset($auteur['id_auteur']) and $id_a = $auteur['id_auteur']) {
        $nom = $auteur['nom'];
    } else {
        $nom = $id_a = $GLOBALS['ip'];
    }
    if (!is_array($edition[$type][$id])) {
        $edition[$type][$id] = array();
    }
    $edition[$type][$id][$id_a][$nom] = time();
    ecrire_tableau_edition($edition);
}
Пример #10
0
/**
 * Appelle toutes les fonctions de modification d'un article
 * $err est de la forme chaine de langue ou vide si pas d'erreur
 * http://doc.spip.org/@articles_set
 *
 * @param  $id_article
 * @param null $set
 * @return string
 */
function article_modifier($id_article, $set = null)
{
    // unifier $texte en cas de texte trop long
    trop_longs_articles();
    include_spip('inc/modifier');
    include_spip('inc/filtres');
    $c = collecter_requests(objet_info('article', 'champs_editables'), array('date', 'statut', 'id_parent'), $set);
    // Si l'article est publie, invalider les caches et demander sa reindexation
    $t = sql_getfetsel("statut", "spip_articles", "id_article=" . intval($id_article));
    $invalideur = $indexation = false;
    if ($t == 'publie') {
        $invalideur = "id='article/{$id_article}'";
        $indexation = true;
    }
    if ($err = objet_modifier_champs('article', $id_article, array('nonvide' => array('titre' => _T('info_nouvel_article') . " " . _T('info_numero_abbreviation') . $id_article), 'invalideur' => $invalideur, 'indexation' => $indexation, 'date_modif' => 'date_modif'), $c)) {
        return $err;
    }
    // Modification de statut, changement de rubrique ?
    $c = collecter_requests(array('date', 'statut', 'id_parent'), array(), $set);
    $err = article_instituer($id_article, $c);
    return $err;
}
Пример #11
0
/**
 * Enregistre une revision de document.
 * $set est un contenu (par defaut on prend le contenu via _request())
 *
 * @param int $id_document
 * @param array|bool $set
 */
function document_modifier($id_document, $set = false)
{
    include_spip('inc/modifier');
    include_spip('inc/filtres');
    // champs normaux
    $champs = collecter_requests(objet_info('document', 'champs_editables'), array('parents', 'ajout_parents'), $set);
    $invalideur = "";
    $indexation = false;
    // Si le document est publie, invalider les caches et demander sa reindexation
    $t = sql_getfetsel("statut", "spip_documents", 'id_document=' . intval($id_document));
    if ($t == 'publie') {
        $invalideur = "id='id_document/{$id_document}'";
        $indexation = true;
    }
    $ancien_fichier = "";
    // si le fichier est modifie, noter le nom de l'ancien pour faire le menage
    if (isset($champs['fichier'])) {
        $ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document));
    }
    if ($err = objet_modifier_champs('document', $id_document, array('invalideur' => $invalideur, 'indexation' => $indexation), $champs)) {
        return $err;
    }
    // nettoyer l'ancien fichier si necessaire
    if ($champs['fichier'] and $ancien_fichier and $ancien_fichier !== $champs['fichier'] and @file_exists($f = get_spip_doc($ancien_fichier))) {
        spip_unlink($f);
    }
    // Changer le statut du document ?
    // le statut n'est jamais fixe manuellement mais decoule de celui des objets lies
    $champs = collecter_requests(array('parents', 'ajouts_parents'), array(), $set);
    if (document_instituer($id_document, $champs)) {
        //
        // Post-modifications
        //
        // Invalider les caches
        include_spip('inc/invalideur');
        suivre_invalideur("id='id_document/{$id_document}'");
    }
}
Пример #12
0
/**
 * Renseigner les informations de taille et dimension d'un document
 * 
 * Récupère les informations de taille (largeur / hauteur / type_image / taille) d'un document
 * Utilise pour cela les fonctions du répertoire metadatas/*
 * 
 * Ces fonctions de récupérations peuvent retourner d'autres champs si ces champs sont définis
 * comme editable dans la déclaration de la table spip_documents
 * 
 * TODO Renommer cette fonction sans "_image"
 *
 * @param string $fichier 
 * 		Le fichier à examiner 
 * @param string $ext
 * 		L'extension du fichier à examiner
 * @return array|string $infos
 * 		Si c'est une chaine, c'est une erreur
 * 		Si c'est un tableau, l'ensemble des informations récupérées du fichier
 */
function renseigner_taille_dimension_image($fichier, $ext)
{
    $infos = array('largeur' => 0, 'hauteur' => 0, 'type_image' => '', 'taille' => 0);
    // Quelques infos sur le fichier
    if (!$fichier or !@file_exists($fichier) or !($infos['taille'] = @intval(filesize($fichier)))) {
        spip_log("Echec copie du fichier {$fichier}");
        return _T('medias:erreur_copie_fichier', array('nom' => $fichier));
    }
    // chercher une fonction de description
    $meta = array();
    if ($metadata = charger_fonction($ext, "metadata", true)) {
        $meta = $metadata($fichier);
    } else {
        $media = sql_getfetsel('media_defaut', 'spip_types_documents', 'extension=' . sql_quote($ext));
        if ($metadata = charger_fonction($media, "metadata", true)) {
            $meta = $metadata($fichier);
        }
    }
    $meta = pipeline('renseigner_document', array('args' => array('extension' => $ext, 'fichier' => $fichier), 'data' => $meta));
    include_spip('inc/filtres');
    # pour objet_info()
    $editables = objet_info('document', 'champs_editables');
    foreach ($meta as $m => $v) {
        if (isset($infos[$m]) or in_array($m, $editables)) {
            $infos[$m] = $v;
        }
    }
    return $infos;
}
Пример #13
0
/**
 * Autorisation de changer de langue un contenu
 *
 * @param  string $faire Action demandée
 * @param  string $type Type d'objet sur lequel appliquer l'action
 * @param  int $id Identifiant de l'objet
 * @param  array $qui Description de l'auteur demandant l'autorisation
 * @param  array $opt Options de cette autorisation
 * @return bool          true s'il a le droit, false sinon
 **/
function autoriser_changerlangue_dist($faire, $type, $id, $qui, $opt)
{
    $multi_objets = explode(',', lire_config('multi_objets'));
    $gerer_trad_objets = explode(',', lire_config('gerer_trad_objets'));
    $table = table_objet_sql($type);
    if (in_array($table, $multi_objets) or in_array($table, $gerer_trad_objets)) {
        // affichage du formulaire si la configuration l'accepte
        $multi_secteurs = lire_config('multi_secteurs');
        $champs = objet_info($type, 'field');
        if ($multi_secteurs == 'oui' and array_key_exists('id_rubrique', $champs)) {
            // multilinguisme par secteur et objet rattaché à une rubrique
            $primary = id_table_objet($type);
            if ($table != 'spip_rubriques') {
                $id_rubrique = sql_getfetsel('id_rubrique', "{$table}", "{$primary}=" . intval($id));
            } else {
                $id_rubrique = $id;
            }
            $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
            if (!$id_secteur > 0) {
                $id_secteur = $id_rubrique;
            }
            $langue_secteur = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_secteur));
            $langue_objet = sql_getfetsel('lang', "{$table}", "{$primary}=" . intval($id));
            if ($langue_secteur != $langue_objet) {
                // configuration incohérente, on laisse l'utilisateur corriger la situation
                return true;
            }
            if ($table != 'spip_rubriques') {
                // le choix de la langue se fait seulement sur les rubriques
                return false;
            } else {
                $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id));
                if ($id_parent != 0) {
                    // sous-rubriques : pas de choix de langue
                    return false;
                }
            }
        }
    } else {
        return false;
    }
    return autoriser('modifier', $type, $id, $qui, $opt);
}
Пример #14
0
/**
 * Modifier une rubrique en base
 *
 * @param int $id_rubrique
 *     Identifiant de la rubrique modifiée
 * @param array|null $set
 *     Tableau qu'on peut proposer en lieu et place de _request()
 * @return bool|string
 *     - false  : Aucune modification, aucun champ n'est à modifier
 *     - chaîne vide : Vide si tout s'est bien passé
 *     - chaîne : Texte d'un message d'erreur
 */
function rubrique_modifier($id_rubrique, $set = null)
{
    include_spip('inc/autoriser');
    include_spip('inc/filtres');
    include_spip('inc/modifier');
    $c = collecter_requests(objet_info('rubrique', 'champs_editables'), array('id_parent', 'confirme_deplace'), $set);
    if ($err = objet_modifier_champs('rubrique', $id_rubrique, array('data' => $set, 'nonvide' => array('titre' => _T('titre_nouvelle_rubrique') . " " . _T('info_numero_abbreviation') . $id_rubrique)), $c)) {
        return $err;
    }
    $c = collecter_requests(array('id_parent', 'confirme_deplace'), array(), $set);
    // Deplacer la rubrique
    if (isset($c['id_parent'])) {
        $err = rubrique_instituer($id_rubrique, $c);
    }
    // invalider les caches marques de cette rubrique
    include_spip('inc/invalideur');
    suivre_invalideur("id='rubrique/{$id_rubrique}'");
    // et celui de menu_rubriques
    effacer_meta("date_calcul_rubriques");
    return $err;
}
Пример #15
0
/**
 * Chargement du formulaire d'édition de logo
 *
 * @param string $objet Objet SPIP auquel sera lie le document (ex. article)
 * @param int $id_objet Identifiant de l'objet
 * @param string $retour Url de redirection apres traitement
 * @param array $options Tableau d'option (exemple : image_reduire => 50)
 * @return array               Variables d'environnement pour le fond
 */
function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $options = array())
{
    // pas dans une boucle ? formulaire pour le logo du site
    // dans ce cas, il faut chercher un 'siteon0.ext'
    if (!$objet) {
        $objet = 'site';
    }
    $objet = objet_type($objet);
    $_id_objet = id_table_objet($objet);
    if (!is_array($options)) {
        $options = unserialize($options);
    }
    if (!isset($options['titre'])) {
        $balise_img = chercher_filtre('balise_img');
        $img = $balise_img(chemin_image('image-24.png'), "", 'cadre-icone');
        $libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']);
        $libelle = ($id_objet or $objet != 'rubrique') ? $objet : 'racine';
        if (isset($libelles[$libelle])) {
            $libelle = $libelles[$libelle];
        } elseif ($libelle = objet_info($objet, 'texte_logo_objet')) {
            $libelle = _T($libelle);
        } else {
            $libelle = _L('Logo');
        }
        switch ($objet) {
            case 'article':
                $libelle .= " " . aide("logoart");
                break;
            case 'breve':
                $libelle .= " " . aide("breveslogo");
                break;
            case 'rubrique':
                $libelle .= " " . aide("rublogo");
                break;
            default:
                break;
        }
        $options['titre'] = $img . $libelle;
    }
    if (!isset($options['editable'])) {
        include_spip('inc/autoriser');
        $options['editable'] = autoriser('iconifier', $objet, $id_objet);
    }
    $res = array('editable' => ($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '') && (!isset($options['editable']) or $options['editable']), 'logo_survol' => $GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : '', 'objet' => $objet, 'id_objet' => $id_objet, '_options' => $options, '_show_upload_off' => '');
    // rechercher le logo de l'objet
    // la fonction prend un parametre '_id_objet' etrange :
    // le nom de la cle primaire (et non le nom de la table)
    // ou directement le nom du raccourcis a chercher
    $chercher_logo = charger_fonction('chercher_logo', 'inc');
    $etats = $res['logo_survol'] ? array('on', 'off') : array('on');
    foreach ($etats as $etat) {
        $logo = $chercher_logo($id_objet, $_id_objet, $etat);
        if ($logo) {
            $res['logo_' . $etat] = $logo[0];
        }
    }
    // pas de logo_on -> pas de formulaire pour le survol
    if (!isset($res['logo_on'])) {
        $res['logo_survol'] = '';
    } elseif (!isset($res['logo_off']) and _request('logo_up')) {
        $res['_show_upload_off'] = ' ';
    }
    // si le logo n'est pas editable et qu'il n'y en a pas, on affiche pas du tout le formulaire
    if (!$res['editable'] and !isset($res['logo_off']) and !isset($res['logo_on'])) {
        return false;
    }
    return $res;
}
function agenda_action_update_repetitions($id_evenement, $repetitions)
{
    // evenement source
    if ($row = sql_fetsel('*', 'spip_evenements', 'id_evenement=' . intval($id_evenement))) {
        // Si ce n'est pas un événement source, on n'a rien à faire ici
        if ($row['id_evenement_source'] != 0) {
            return;
        }
        // On ne garde que les données correctes pour une modification
        $c = collecter_requests(objet_info('evenement', 'champs_editables'), array('id_evenement', 'id_evenement_source'), $row);
        // Savoir si la source était publiée ou pas
        $publie = $row['statut'] == 'publie';
        // On calcule la durée en secondes de l'événement source pour la reporter telle quelle aux répétitions
        $date_debut = strtotime($row['date_debut']);
        $date_fin = strtotime($row['date_fin']);
        $duree = $date_fin - $date_debut;
        $repetitions_updated = array();
        // mettre a jour toutes les repetitions deja existantes ou les supprimer si plus lieu
        $res = sql_select('id_evenement,date_debut', 'spip_evenements', 'id_evenement_source=' . intval($id_evenement));
        while ($row = sql_fetch($res)) {
            $date = strtotime(date('Y-m-d', strtotime($row['date_debut'])));
            if (in_array($date, $repetitions)) {
                // Cette répétition existe déjà, on la met à jour
                $repetitions_updated[] = $date;
                // On calcule les nouvelles dates/heures en reportant la durée de la source
                $update_date_debut = date('Y-m-d', $date) . ' ' . date('H:i:s', $date_debut);
                $update_date_fin = date('Y-m-d H:i:s', strtotime($update_date_debut) + $duree);
                // Seules les dates sont changées dans les champs de la source
                // TODO : prendre en charge la mise a jour uniquement si conforme a l'original
                $c['date_debut'] = $update_date_debut;
                $c['date_fin'] = $update_date_fin;
                // mettre a jour l'evenement
                sql_updateq('spip_evenements', $c, 'id_evenement = ' . $row['id_evenement']);
            } else {
                // il est supprime
                sql_delete('spip_evenements', 'id_evenement=' . $row['id_evenement']);
            }
        }
        // regarder les repetitions a ajouter
        foreach ($repetitions as $date) {
            if (!in_array($date, $repetitions_updated)) {
                // On calcule les dates/heures en reportant la durée de la source
                $update_date_debut = date('Y-m-d', $date) . ' ' . date('H:i:s', $date_debut);
                $update_date_fin = date('Y-m-d H:i:s', strtotime($update_date_debut) + $duree);
                // Seules les dates sont changées dans les champs de la source
                $c['date_debut'] = $update_date_debut;
                $c['date_fin'] = $update_date_fin;
                // On crée la nouvelle répétition
                if ($id_evenement_new = agenda_action_insert_evenement($c['id_article'], $id_evenement)) {
                    // Si c'est bon, on ajoute tous les champs
                    sql_updateq('spip_evenements', $c, 'id_evenement = ' . $id_evenement_new);
                    // Pour les créations il ne faut pas oublier de dupliquer les liens
                    // En effet, sinon les documents insérés avant la création (0-id_auteur) ne seront pas dupliqués
                    include_spip('action/editer_liens');
                    objet_dupliquer_liens('evenement', $id_evenement, $id_evenement_new);
                }
            }
        }
    }
}
Пример #17
0
function generer_url_ecrire_entite_edit($id, $entite, $args = '', $ancre = '')
{
    $exec = objet_info($entite, 'url_edit');
    $url = generer_url_ecrire($exec, $args);
    if (intval($id)) {
        $url = parametre_url($url, id_table_objet($entite), $id);
    } else {
        $url = parametre_url($url, 'new', 'oui');
    }
    if ($ancre) {
        $url = ancre_url($url, $ancre);
    }
    return $url;
}
Пример #18
0
/**
 * Autorisation de changer de langue un contenu
 *
 * @param  string $faire Action demandée
 * @param  string $type  Type d'objet sur lequel appliquer l'action
 * @param  int    $id    Identifiant de l'objet
 * @param  array  $qui   Description de l'auteur demandant l'autorisation
 * @param  array  $opt   Options de cette autorisation
 * @return bool          true s'il a le droit, false sinon
**/
function autoriser_changerlangue_dist($faire, $type, $id, $qui, $opt)
{
    $multi_objets = explode(',', lire_config('multi_objets'));
    $gerer_trad_objets = explode(',', lire_config('gerer_trad_objets'));
    $table = table_objet_sql($type);
    if (in_array($table, $multi_objets) or in_array($table, $gerer_trad_objets)) {
        // affichage du formulaire si la configuration l'accepte
        $multi_secteurs = lire_config('multi_secteurs');
        $champs = objet_info($type, 'field');
        if ($multi_secteurs == 'oui' and array_key_exists('id_rubrique', $champs)) {
            // multilinguisme par secteur et objet rattaché à une rubrique
            if ($table != 'spip_rubriques') {
                // le choix de la langue se fait seulement sur les rubriques
                return false;
            } else {
                $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id));
                if ($id_parent != 0) {
                    // sous-rubriques : pas de choix de langue
                    return false;
                }
            }
        }
    } else {
        return false;
    }
    return autoriser('modifier', $type, $id, $qui, $opt);
}
Пример #19
0
/**
 * Filtre pour afficher l'img icone d'un objet
 *
 * @param string $objet
 * @param int $taille
 * @return string
 */
function objet_icone($objet, $taille = 24)
{
    $icone = objet_info($objet, 'icone_objet') . "-" . $taille . ".png";
    $icone = chemin_image($icone);
    $balise_img = charger_filtre('balise_img');
    return $icone ? $balise_img($icone, _T(objet_info($objet, 'texte_objet'))) : '';
}
Пример #20
0
/**
 * Générer l'URL d'un objet dans l'espace privé
 *
 * L'URL est calculée en fonction de son état publié ou non,
 * calculé à partir de la déclaration de statut.
 *
 * @param string $objet Type d'objet
 * @param int $id Identifiant de l'objet
 * @param string $args
 * @param string $ancre
 * @param bool|null $public
 * @param string $connect
 * @return string
 *
 */
function generer_url_ecrire_objet($objet, $id, $args = '', $ancre = '', $public = null, $connect = '')
{
    static $furls = array();
    if (!isset($furls[$objet])) {
        if (function_exists($f = 'generer_url_ecrire_' . $objet) or $f = charger_fonction($f, 'urls', true)) {
            $furls[$objet] = $f;
        } else {
            $furls[$objet] = '';
        }
    }
    if ($furls[$objet]) {
        return $furls[$objet]($id, $args, $ancre, $public, $connect);
    }
    // si pas de flag public fourni
    // le calculer en fonction de la declaration de statut
    if (is_null($public) and !$connect) {
        $public = objet_test_si_publie($objet, $id, $connect);
    }
    if ($public or $connect) {
        return generer_url_entite_absolue($id, $objet, $args, $ancre, $connect);
    }
    $a = id_table_objet($objet) . "=" . intval($id);
    if (!function_exists('objet_info')) {
        include_spip('inc/filtres');
    }
    return generer_url_ecrire(objet_info($objet, 'url_voir'), $a . ($args ? "&{$args}" : '')) . ($ancre ? "#{$ancre}" : '');
}
Пример #21
0
/**
 * Compile la balise `#INTRODUCTION`
 *
 * Retourne une introduction d'un objet éditorial, c'est à dire les 600
 * premiers caractères environ du champ 'texte' de l'objet ou le contenu
 * indiqué entre `<intro>` et `</intro>` de ce même champ.
 *
 * Pour les articles, l'introduction utilisée est celle du champ `descriptif`
 * s'il est renseigné, sinon il est pris dans les champs `chapo` et `texte` et
 * est par défaut limité à 500 caractères.
 *
 * Pour les rubriques, l'introduction utilisée est celle du champ `descriptif`
 * s'il est renseigné, sinon du champ texte.
 *
 * La balise accèpte 1 paramètre indiquant la longueur en nombre de caractères
 * de l'introduction.
 *
 * @see filtre_introduction_dist()
 * @example
 *     ```
 *     #INTRODUCTION
 *     #INTRODUCTION{300}
 *     ```
 *
 * @balise
 * @link http://www.spip.net/@introduction
 *
 * @param Champ $p
 *     Pile au niveau de la balise
 * @return Champ
 *     Pile complétée par le code à générer
 **/
function balise_INTRODUCTION_dist($p)
{
    $type = $p->type_requete;
    $_texte = champ_sql('texte', $p);
    $_descriptif = ($type == 'articles' or $type == 'rubriques') ? champ_sql('descriptif', $p) : "''";
    if ($type == 'articles') {
        $_chapo = champ_sql('chapo', $p);
        $_texte = "(strlen({$_descriptif}))\n\t\t? ''\n\t\t: {$_chapo} . \"\\n\\n\" . {$_texte}";
    }
    // longueur en parametre, ou valeur par defaut
    $longueur_defaut = objet_info($type, 'introduction_longueur');
    if (!$longueur_defaut) {
        $longueur_defaut = 600;
    }
    $_suite = 'null';
    $_longueur = $longueur_defaut;
    if (($v = interprete_argument_balise(1, $p)) !== null) {
        $_longueur = 'is_numeric(' . $v . ')?intval(' . $v . '):' . $longueur_defaut;
        $_suite = '!is_numeric(' . $v . ')?' . $v . ':null';
    }
    if (($v2 = interprete_argument_balise(2, $p)) !== null) {
        $_suite = $v2;
    }
    $f = chercher_filtre('introduction');
    $p->code = "{$f}({$_descriptif}, {$_texte}, {$_longueur}, \$connect, {$_suite})";
    #$p->interdire_scripts = true;
    $p->etoile = '*';
    // propre est deja fait dans le calcul de l'intro
    return $p;
}
/**
 * Importe une description de champs extras donnée
 *
 * @param array $description 
 *    description des champs extras (table sql => liste des champs extras)
 * @param string $message
 *    message de retour, rempli par cette fonction
 * @param bool $fusionner_doublons
 *    true si on fusionne les champs présents dans la sauvegarde et aussi présents sur le site. False pour les ignorer.
 * @return bool
 *    true si tout s'est bien passé, false sinon
**/
function iextras_importer_description($description, &$message, $fusionner_doublons = false)
{
    include_spip('inc/iextras');
    include_spip('inc/saisies');
    include_spip('inc/texte');
    include_spip('inc/cextras');
    $tables_sql_presentes = array_keys(lister_tables_objets_sql());
    $message = '';
    $nbt = count($description);
    $message .= "{{Fichier importé :}}\n";
    $message .= "- {$nbt} objets éditoriaux.\n";
    $nbc = 0;
    foreach ($description as $table => $saisies) {
        $nbc += count($saisies);
    }
    $message .= "- {$nbc} champs extras.\n";
    foreach ($description as $table => $saisies) {
        if (!in_array($table, $tables_sql_presentes)) {
            $message .= "\nTable {{ {$table} }} absente sur le site\n";
            $message .= count($saisies) . " champs extras ignorés !!\n";
            continue;
        }
        $champs_presents = $champs_futurs = iextras_champs_extras_definis($table);
        $champs_presents_par_nom = saisies_lister_par_nom($champs_presents);
        $objet = objet_type($table);
        $titre = _T(objet_info($objet, 'texte_objets'));
        $message .= "\n{{ {$titre} :}}\n";
        $message .= count($saisies) . " champs extras\n";
        foreach ($saisies as $saisie) {
            $nom = isset($saisie['options']['nom']) ? $saisie['options']['nom'] : '';
            if (!$nom) {
                $message .= "- !! Saisie sans nom ignorée\n";
                continue;
            }
            // champ déjà présent ?
            if (isset($champs_presents_par_nom[$nom])) {
                if ($fusionner_doublons) {
                    $message .= "- {{ {$nom} :}} modifié (déjà présent)\n";
                    $champs_futurs = saisies_modifier($champs_futurs, $nom, $saisie);
                } else {
                    $message .= "- {{ {$nom} :}} ignoré (déjà présent)\n";
                }
            } else {
                $message .= "- {{ {$nom} :}} ajouté\n";
                $champs_futurs = saisies_inserer($champs_futurs, $saisie);
            }
        }
        $diff = saisies_comparer_par_identifiant($champs_presents, $champs_futurs);
        // ajouter les nouveaux champs;
        if ($diff['ajoutees']) {
            $message .= count($diff['ajoutees']) . " champs ajoutés.\n";
            champs_extras_creer($table, $diff['ajoutees']);
        }
        // modifier les champs modifies;
        if ($diff['modifiees']) {
            $message .= count($diff['modifiees']) . " champs modifiés.\n";
            $anciennes = saisies_lister_par_identifiant($champs_presents);
            $anciennes = array_intersect_key($anciennes, $diff['modifiees']);
            champs_extras_modifier($table, $diff['modifiees'], $anciennes);
        }
        // enregistrer la nouvelle config
        if ($diff['ajoutees'] or $diff['modifiees']) {
            ecrire_meta("champs_extras_" . $table, serialize($champs_futurs));
        } else {
            $message .= "Aucune modification !\n";
        }
    }
    $message = propre($message);
    return true;
}