Esempio n. 1
0
/**
 * Traitements du formulaire d'édition d'un auteur
 *
 * En plus de l'enregistrement normal des infos de l'auteur, la fonction
 * traite ces cas spécifiques :
 * 
 * - Envoie lorsqu'un rédacteur n'a pas forcément l'autorisation changer
 *   seul son adresse email, un email à la nouvelle adresse indiquée
 *   pour vérifier l'email saisi, avec un lien dans le mai sur l'action
 *   'confirmer_email' qui acceptera alors le nouvel email.
 *
 * - Crée aussi une éventuelle laision indiquée dans $associer_objet avec
 *   cet auteur.
 * 
 * @see formulaires_editer_objet_traiter()
 * 
 * @param int|string $id_auteur
 *     Identifiant de l'auteur. 'new' pour une nouvel auteur.
 * @param string $retour
 *     URL de redirection après le traitement
 * @param string $associer_objet
 *     Éventuel 'objet|x' indiquant de lier le mot créé à cet objet,
 *     tel que 'article|3'
 * @param string $config_fonc
 *     Nom de la fonction ajoutant des configurations particulières au formulaire
 * @param array $row
 *     Valeurs de la ligne SQL de l'auteur, si connu
 * @param string $hidden
 *     Contenu HTML ajouté en même temps que les champs cachés du formulaire.
 * @return array
 *     Retour des traitements
**/
function formulaires_editer_auteur_traiter_dist($id_auteur = 'new', $retour = '', $associer_objet = '', $config_fonc = 'auteurs_edit_config', $row = array(), $hidden = '')
{
    if (_request('saisie_webmestre') or _request('webmestre')) {
        set_request('webmestre', _request('webmestre') ? _request('webmestre') : 'non');
    }
    $retour = parametre_url($retour, 'email_confirm', '');
    include_spip('inc/autoriser');
    if (!autoriser('modifier', 'auteur', $id_auteur, null, array('email' => '?'))) {
        $email_nouveau = _request('email');
        set_request('email');
        // vider la saisie car l'auteur n'a pas le droit de modifier cet email
        // mais si c'est son propre profil on lui envoie un email à l'adresse qu'il a indique
        // pour qu'il confirme qu'il possede bien cette adresse
        // son clic sur l'url du message permettre de confirmer le changement
        // et de revenir sur son profil
        if ($GLOBALS['visiteur_session']['id_auteur'] == $id_auteur and $email_nouveau != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)))) {
            $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
            $texte = _T('form_auteur_mail_confirmation', array('url' => generer_action_auteur('confirmer_email', $email_nouveau, parametre_url($retour, 'email_modif', 'ok'))));
            $envoyer_mail($email_nouveau, _T('form_auteur_confirmation'), $texte);
            set_request('email_confirm', $email_nouveau);
            if ($email_ancien) {
                $envoyer_mail($email_ancien, _T('form_auteur_confirmation'), _T('form_auteur_envoi_mail_confirmation', array('email' => $email_nouveau)));
            }
            $retour = parametre_url($retour, 'email_confirm', $email_nouveau);
        }
    }
    $res = formulaires_editer_objet_traiter('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden);
    // Un lien auteur a prendre en compte ?
    if ($associer_objet and $id_auteur = $res['id_auteur']) {
        $objet = '';
        if (intval($associer_objet)) {
            $objet = 'article';
            $id_objet = intval($associer_objet);
        } elseif (preg_match(',^\\w+\\|[0-9]+$,', $associer_objet)) {
            list($objet, $id_objet) = explode('|', $associer_objet);
        }
        if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) {
            include_spip('action/editer_auteur');
            auteur_associer($id_auteur, array($objet => $id_objet));
            if (isset($res['redirect'])) {
                $res['redirect'] = parametre_url($res['redirect'], "id_lien_ajoute", $id_auteur, '&');
            }
        }
    }
    return $res;
}
Esempio n. 2
0
/**
 * Modifier le statut d'un auteur, ou son login/pass
 * 
 * @link http://doc.spip.org/@instituer_auteur
 * @param  $id_auteur
 * @param  $c
 * @param bool $force_webmestre
 * @return bool|string
 */
function auteur_instituer($id_auteur, $c, $force_webmestre = false)
{
    if (!($id_auteur = intval($id_auteur))) {
        return false;
    }
    $erreurs = array();
    // contiendra les differentes erreurs a traduire par _T()
    $champs = array();
    // les memoriser pour les faire passer dans le pipeline pre_edition
    if (isset($c['login']) and strlen($c['login'])) {
        $champs['login'] = $c['login'];
    }
    if (isset($c['pass']) and strlen($c['pass'])) {
        $champs['pass'] = $c['pass'];
    }
    $statut = $statut_ancien = sql_getfetsel('statut', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
    if (isset($c['statut']) and autoriser('modifier', 'auteur', $id_auteur, null, array('statut' => $c['statut']))) {
        $statut = $champs['statut'] = $c['statut'];
    }
    // Restreindre avant de declarer l'auteur
    // (section critique sur les droits)
    if ($c['id_parent']) {
        if (is_array($c['restreintes'])) {
            $c['restreintes'][] = $c['id_parent'];
        } else {
            $c['restreintes'] = array($c['id_parent']);
        }
    }
    if (isset($c['webmestre']) and ($force_webmestre or autoriser('modifier', 'auteur', $id_auteur, null, array('webmestre' => '?')))) {
        $champs['webmestre'] = $c['webmestre'] == 'oui' ? 'oui' : 'non';
    }
    // Envoyer aux plugins
    $champs = pipeline('pre_edition', array('args' => array('table' => 'spip_auteurs', 'id_objet' => $id_auteur, 'action' => 'instituer', 'statut_ancien' => $statut_ancien), 'data' => $champs));
    if (is_array($c['restreintes']) and autoriser('modifier', 'auteur', $id_auteur, NULL, array('restreint' => $c['restreintes']))) {
        $rubriques = array_map('intval', $c['restreintes']);
        $rubriques = array_unique($rubriques);
        $rubriques = array_diff($rubriques, array(0));
        auteur_dissocier($id_auteur, array('rubrique' => '*'));
        auteur_associer($id_auteur, array('rubrique' => $rubriques));
    }
    $flag_ecrire_acces = false;
    // commencer par traiter les cas particuliers des logins et pass
    // avant les autres ecritures en base
    if (isset($champs['login']) or isset($champs['pass'])) {
        $auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
        include_spip('inc/auth');
        if (isset($champs['login']) and strlen($champs['login'])) {
            if (!auth_modifier_login($auth_methode, $champs['login'], $id_auteur)) {
                $erreurs[] = 'ecrire:impossible_modifier_login_auteur';
            }
        }
        if (isset($champs['pass']) and strlen($champs['pass'])) {
            $champs['login'] = sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
            if (!auth_modifier_pass($auth_methode, $champs['login'], $champs['pass'], $id_auteur)) {
                $erreurs[] = 'ecrire:impossible_modifier_pass_auteur';
            }
        }
        unset($champs['login']);
        unset($champs['pass']);
        $flag_ecrire_acces = true;
    }
    if (!count($champs)) {
        return implode(' ', array_map('_T', $erreurs));
    }
    sql_updateq('spip_auteurs', $champs, 'id_auteur=' . $id_auteur);
    // .. mettre a jour les fichiers .htpasswd et .htpasswd-admin
    if ($flag_ecrire_acces or isset($champs['statut'])) {
        include_spip('inc/acces');
        ecrire_acces();
    }
    // Invalider les caches
    include_spip('inc/invalideur');
    suivre_invalideur("id='auteur/{$id_auteur}'");
    // Pipeline
    pipeline('post_edition', array('args' => array('table' => 'spip_auteurs', 'id_objet' => $id_auteur, 'action' => 'instituer', 'statut_ancien' => $statut_ancien), 'data' => $champs));
    // Notifications
    if ($notifications = charger_fonction('notifications', 'inc')) {
        $notifications('instituerauteur', $id_auteur, array('statut' => $statut, 'statut_ancien' => $statut_ancien));
    }
    return implode(' ', array_map('_T', $erreurs));
}
Esempio n. 3
0
function spip_importer_articles($spip_data)
{
    global $tables_conversion;
    foreach ($spip_data as $entry) {
        $id_rubrique = null;
        $type = $entry['metadata']['type'];
        journaliser(sprintf("Traitement d'un nouvel item : %s - %s", $entry['metadata']['nid'], $type), 2);
        if (binlog_contient($entry['metadata']['nid'])) {
            journaliser("L'élément %s a déjà été converti", $entry['metadata']['nid']);
            continue;
        }
        journaliser("Recherche de la catégorie cible pour l'article");
        /* FIXME: doit être déplacé hors de cette fonction (spécifique site cible). */
        /* CATEGORIE CIBLE */
        /* Remarque : les articles de type 'story' sont dispatchés par la
         * fonction dispatch_story_type() */
        $cat_cible = array('video' => 14, 'photos' => 23, 'audio' => 24, 'commission' => 36, 'livre' => 15, 'evenement' => 11);
        $fct = "dispatch_{$type}_type";
        if (function_exists($fct)) {
            $id_rubrique = call_user_func($fct, $entry);
        } elseif ($cat_cible[$type]) {
            $id_rubrique = $cat_cible[$type];
        }
        if ($id_rubrique == null) {
            journaliser("Catégorie cible introuvable pour le type de contenu " . $type, 4);
            die;
        }
        journaliser("Envoi de l'article dans la rubrique %s", $id_rubrique, 1);
        /* --- VIDEO --- */
        if ($type == "video") {
            if ($entry['documents']['video']) {
                /* Si une vidéo est présente dans ce champ, il faut modifier le
                 * texte de l'article et ajouter le lien vers la video à la
                 * fin. */
                $entry['article']['texte'] .= sprintf("\n\n%s", $entry['documents']['video']);
            }
        }
        /* --- AUDIO --- */
        if ($type == "audio") {
            journaliser("Gestion des documents audio");
            $audio_path = $entry['documents']['audio'];
            $audio_name = $entry['documents']['audio_name'];
            $id_document = importer_document($audio_path, $audio_name);
            journaliser("Import du document : " . $id_document, 1);
            $entry['article']['texte'] = sprintf("<emb%s>\nRéalisation : %s\n\n%s", $id_document, $entry['documents']['audio_desc'], $entry['article']['texte']);
            document_modifier($id_document, array('credits' => $entry['documents']['audio_desc']));
        }
        /* --- PIECES JOINTES --- */
        if ($entry['documents']['pdf']) {
            journaliser("Ajout des pièces jointes au format PDF");
            foreach ($entry['documents']['pdf'] as $document) {
                $id_document = importer_document($document['filepath'], $document['filename']);
                journaliser(sprintf("Document PDF %s importé", $id_document), 1);
                $entry['article']['texte'] = sprintf("%s\n\n<lecteurpdf%s>", $entry['article']['texte'], $id_document);
            }
        }
        /* --- ARTICLE --- */
        journaliser("Création du nouvel article");
        $id_article = article_inserer($id_rubrique);
        journaliser("Nouvel article créee : {$id_article}", 1);
        //print_r($entry['article']);
        article_modifier($id_article, $entry['article']);
        journaliser("Ajout des données dans l'article n° {$id_article}", 1);
        /* --- AUTEUR => ARTICLE --- */
        journaliser("Création ou récupération des auteurs qui doivent être associées à l'article");
        $id_auteurs = array();
        if ($entry['auteur']['nom']) {
            foreach ($entry['auteur']['nom'] as $nom_auteur) {
                journaliser("Recherche de l'auteur « {$nom_auteur} »", 1);
                if ($id = sql_getfetsel("id_auteur", "spip_auteurs", 'nom LIKE ' . sql_quote("% - {$nom_auteur}"))) {
                    journaliser("« {$nom_auteur} » trouvé : {$id} (REGEXP)", 1);
                    $id_auteurs[] = $id;
                } elseif ($id = sql_getfetsel("id_auteur", "spip_auteurs", 'nom=' . sql_quote($nom_auteur))) {
                    journaliser("« {$nom_auteur} » trouvé : {$id}", 1);
                    $id_auteurs[] = $id;
                } else {
                    $id = auteur_inserer();
                    auteur_modifier($id, array('nom' => $nom_auteur, 'statut' => '1comite'));
                    $id_auteurs[] = $id;
                    journaliser("« {$nom_auteur} » créé : {$id}", 1);
                }
            }
            foreach ($id_auteurs as $id) {
                journaliser("Association de l'auteur %s à l'article", $id, 1);
                auteur_associer($id, array('article' => $id_article));
            }
        }
        if (!in_array(1, $id_auteurs)) {
            journaliser("Retrait de l'auteur 1", 1);
            auteur_dissocier(1, array('article' => $id_article));
        }
        /* --- CAMPAGNE --- */
        if ($entry['metadata']['campagne']) {
            journaliser("Ajout des mots-clés de campagne");
            foreach ($entry['metadata']['campagne'] as $campagne) {
                journaliser("Association du mot clé %s à l'article %s", $campagne, $id_article, 1);
                mot_associer($campagne, array('article' => $id_article));
            }
        }
        /* --- ATTACPÉDIA --- */
        if ($entry['metadata']['attacpedia']) {
            journaliser("Ajout des mots-clés Attacpédia");
            foreach ($entry['metadata']['attacpedia'] as $attacpedia) {
                journaliser("Association du mot clé %s à l'article %s", $attacpedia, $id_article, 1);
                mot_associer($attacpedia, array('article' => $id_article));
            }
        }
        /* EVENEMENT */
        if ($type == "evenement") {
            journaliser("Création de l'évènement");
            foreach ($entry['evenement']['dates'] as $dates_evt) {
                $id_evenement = evenement_inserer($id_article);
                journaliser("Numéro de l'évènement : %s", $id_evenement, 1);
                evenement_modifier($id_evenement, array('titre' => $entry['article']['titre'], 'lieu' => $entry['evenement']['lieu'], 'date_debut' => $dates_evt['date_debut'], 'date_fin' => $dates_evt['date_fin'], 'statut' => $entry['article']['statut']));
                journaliser("Géolocation GIS", 1);
                $id_gis = gis_inserer();
                journaliser("Création du lieu GIS : %s", $id_gis, 1);
                gis_modifier($id_gis, $entry['gis']);
                lier_gis($id_gis, "evenement", $id_evenement);
                journaliser("Lien de l'évènement %s au lieu %s", $id_evenement, $id_gis, 1);
            }
        }
        /* --- TYPE D'EVENEMENT --- */
        if ($type == "evenement") {
            $id_mot_drupal = $entry['metadata']['type_evenement'];
            $mod_evt = $tables_conversion['type_evenement'][$id_mot_drupal];
            mot_associer($mod_evt, array('article' => $id_article));
            journaliser("Association du mot clé %s/%s à l'article %s", $id_mot_drupal, $mod_evt, $id_article, 1);
        }
        /* --- PIECES JOINTES --- */
        if ($entry['documents']['pj']) {
            journaliser("Ajout des pièces jointes");
            foreach ($entry['documents']['pj'] as $document) {
                $id_document = importer_document($document['filepath'], $document['filename'], $id_article);
                journaliser(sprintf("Document %s importé", $id_document), 1);
            }
        }
        /* --- GALERIES PHOTO --- */
        if ($entry['documents']['photos']) {
            journaliser("Ajout des pĥotos jointes");
            foreach ($entry['documents']['photos'] as $document) {
                $id_document = importer_document($document['filepath'], $document['filename'], $id_article, "document");
                journaliser(sprintf("Document %s importé", $id_document), 1);
            }
        }
        /* --- URL --- */
        journaliser("Gestion des URL");
        $urls = array();
        $urls[] = "node/" . $entry['metadata']['nid'];
        $urls[] = $entry['url']['url'];
        foreach ($urls as $url) {
            if ($url) {
                if ($url_existante = sql_fetsel(array('id_objet', 'type'), 'spip_urls', 'url=' . sql_quote($url))) {
                    journaliser(sprintf("URL ({$url}) déjà existante (%s / %s)", $url_existante['type'], $url_existante['id_objet']), 4);
                } else {
                    $sql_url = array('url' => $url, 'type' => 'article', 'id_objet' => $id_article, 'perma' => 1, 'id_parent' => $id_rubrique);
                    url_insert($sql_url, false, '-');
                    journaliser(sprintf("URL ajoutée : %s/%s", $GLOBALS['meta']['adresse_site'], $url), 1);
                }
            }
        }
        /* --- LOGO --- */
        if ($entry['logo']['chemin']) {
            journaliser("Import du logo");
            $remote = sprintf("http://www.france.attac.org/%s", $entry['logo']['chemin']);
            $filename = $entry['logo']['fichier'];
            $fic = copie_locale($remote, 'auto', determine_upload() . $filename);
            journaliser("Logo ({$remote}) => {$fic}", 1);
            $spip_image_ajouter = charger_fonction('spip_image_ajouter', 'action');
            $spip_image_ajouter('arton' . $id_article, true, $filename);
            spip_unlink($fic);
        }
        $dest_url = sprintf("%s/%s", $GLOBALS['meta']['adresse_site'], $id_article);
        journaliser(sprintf("Article publié : <%s>", $dest_url), 2);
        binlog($entry['metadata']['nid'], $entry['metadata']['type'], $id_article, $entry['article']['titre'], $dest_url);
    }
}
Esempio n. 4
0
function formulaires_constructor_traiter_dist($id_auteur = 'new', $retour = '', $ajaxload = 'oui')
{
    include_spip('base/abstract_sql');
    include_spip('inc/texte');
    include_spip('inc/auth');
    include_spip('action/editer_auteur');
    include_spip('action/editer_article');
    include_spip('action/editer_document');
    include_spip('inc/autoriser');
    $nom = _request('nom');
    $email = _request('email');
    $login = _request('login');
    $pass = _request('pass');
    $base_url = _request('base_url');
    $qr_url = _request('qr_url');
    $image = _request('image');
    $ajouter_documents = charger_fonction('ajouter_documents', 'action');
    $id_editeur = $GLOBALS['visiteur_session']['id_auteur'];
    if (autoriser('webmestre')) {
        $id_auteur = auteur_inserer('spip');
        if ($id_auteur) {
            auteur_modifier($id_auteur, array('nom' => $nom, 'email' => $email, 'statut' => '1comite'));
            auth_modifier_login('spip', $login, $id_auteur);
            auth_modifier_pass('spip', $login, $pass, $id_auteur);
            // primera entrada
            $rubrique = 1;
            // 1 creamos un articulo vacio
            $id_article = insert_article($rubrique);
            if ($id_article) {
                auteur_associer($id_auteur, array('article' => intval($id_article)));
                auteur_dissocier($id_editeur, array('article' => intval($id_article)));
                // 2 actualizampos los campos del articulo
                sql_updateq('spip_articles', array('titre' => 'Bienvenida', 'soustitre' => 'Tu primer artículo', 'id_rubrique' => $rubrique, 'statut' => 'publie', 'date' => date('Y-m-d H:i:s')), 'id_article=' . intval($id_article));
                // 3 insertamos las coordenadas del articulo
                $latitude = rand(-90000, 90000) / 1000;
                $longitude = rand(-180000, 180000) / 1000;
                $zoom = 8;
                $id_vhplab_gis = sql_insertq("spip_vhplab_gis", array('latitude' => $latitude, 'longitude' => $longitude, 'zoom' => $zoom, 'address' => ''));
                sql_insertq('spip_vhplab_gis_liens', array('id_vhplab_gis' => intval($id_vhplab_gis), 'id_objet' => intval($id_article), 'objet' => 'article'));
                // 5 asociamos las palabras clave al articulo
                sql_insertq('spip_mots_liens', array('id_mot' => 1, 'id_objet' => intval($id_article), 'objet' => 'article'));
                sql_insertq('spip_mots_liens', array('id_mot' => 5, 'id_objet' => intval($id_article), 'objet' => 'article'));
                // 6 hacemos una copia de la imagen inicial
                $file = array('name' => 'cgeomap_explorer_banner_1100x591.jpg', 'tmp_name' => $image);
                $id_document = $ajouter_documents('new', array(0 => $file), 'article', intval($id_article), 'image');
                sql_updateq('spip_documents', array('statut' => 'publie', 'date_publication' => date('Y-m-d H:i:s')), 'id_document=' . intval($id_document[0]));
                sql_insertq('spip_documents_liens', array('id_document' => intval($id_document[0]), 'id_objet' => intval($id), 'objet' => 'article', 'vu' => 'oui'));
                // 7 procesamos los módulos y actualizamos el texto del artículo
                $texte = '<block class="audiovisuel">
<module class="text" name="Bienvenid@ a CGeomap!">Con tu cuenta Explorer podrás empezar a construir rutas audiovisuales locativas y cartografiar tu entorno.</module>
<module class="media" name="Explorer"><image' . $id_document[0] . '></module>
<module class="text" name="Edita y publica contenidos">Este editor online te permitirá posicionar contenidos audiovisuales, accessibles desde tu smartphone (web app) y/o con la app CGeomap para Android y IOS. 
Para aprender a crear entradas locativas en pocos minutos, accede a la página de tutoriales (icono de información en la esquina superior derecha del editor).</module>
<module class="text" name="Contacta con nosotr@s">Estamos a tu disposición para ayudarte a crear con CGeomap, ¡la tierra, el mar y las nubes esperan tus contenidos!.</module>
</block>';
                sql_updateq('spip_articles', array('texte' => $texte), 'id_article=' . intval($id_article));
                // 8 creamos el qr y lo adjuntamos como documento
                $file = array('name' => 'article_' . $id_article . '_qr.png', 'tmp_name' => $qr_url . urlencode($base_url . 'author=' . $id_auteur . '&nodo=' . $id_article));
                $descriptif = "qr";
                $id_document = $ajouter_documents('new', array(0 => $file), 'article', intval($id_article), 'image');
                sql_updateq('spip_documents', array('descriptif' => $descriptif, 'statut' => 'publie', 'date_publication' => date('Y-m-d H:i:s')), 'id_document=' . intval($id_document[0]));
                sql_insertq('spip_documents_liens', array('id_document' => intval($id_document[0]), 'id_objet' => intval($id_article), 'objet' => 'article', 'vu' => 'oui'));
            }
        }
    }
}
Esempio n. 5
0
/**
 * Inserer en base un objet generique
 * @param string $objet
 * @param int $id_parent
 * @param array|null $set
 * @return bool|int
 */
function objet_inserer($objet, $id_parent = null, $set = null)
{
    if (include_spip('action/editer_' . $objet) and function_exists($inserer = $objet . "_inserer")) {
        return $inserer($id_parent);
    }
    $table_sql = table_objet_sql($objet);
    $trouver_table = charger_fonction('trouver_table', 'base');
    $desc = $trouver_table($table_sql);
    if (!$desc or !isset($desc['field'])) {
        return 0;
    }
    $lang_rub = "";
    $champs = array();
    if (isset($desc['field']['id_rubrique'])) {
        // Si id_rubrique vaut 0 ou n'est pas definie, creer l'objet
        // dans la premiere rubrique racine
        if (!($id_rubrique = intval($id_parent))) {
            $row = sql_fetsel("id_rubrique, id_secteur, lang", "spip_rubriques", "id_parent=0", '', '0+titre,titre', "1");
            $id_rubrique = $row['id_rubrique'];
        } else {
            $row = sql_fetsel("lang, id_secteur", "spip_rubriques", "id_rubrique=" . intval($id_rubrique));
        }
        $champs['id_rubrique'] = $id_rubrique;
        if (isset($desc['field']['id_secteur'])) {
            $champs['id_secteur'] = $row['id_secteur'];
        }
        $lang_rub = $row['lang'];
    }
    // La langue a la creation : si les liens de traduction sont autorises
    // dans les rubriques, on essaie avec la langue de l'auteur,
    // ou a defaut celle de la rubrique
    // Sinon c'est la langue de la rubrique qui est choisie + heritee
    if (isset($desc['field']['lang']) and $GLOBALS['meta']['multi_objets'] and in_array($table_sql, explode(',', $GLOBALS['meta']['multi_objets']))) {
        lang_select($GLOBALS['visiteur_session']['lang']);
        if (in_array($GLOBALS['spip_lang'], explode(',', $GLOBALS['meta']['langues_multilingue']))) {
            $champs['lang'] = $GLOBALS['spip_lang'];
            if (isset($desc['field']['langue_choisie'])) {
                $champs['langue_choisie'] = 'oui';
            }
        }
    } elseif (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) {
        $champs['lang'] = $lang_rub ? $lang_rub : $GLOBALS['meta']['langue_site'];
        $champs['langue_choisie'] = 'non';
    }
    if (isset($desc['field']['statut'])) {
        if (isset($desc['statut_textes_instituer'])) {
            $cles_statut = array_keys($desc['statut_textes_instituer']);
            $champs['statut'] = reset($cles_statut);
        } else {
            $champs['statut'] = 'prepa';
        }
    }
    if (isset($desc['date']) and $d = $desc['date'] or isset($desc['field'][$d = 'date'])) {
        $champs[$d] = date('Y-m-d H:i:s');
    }
    if ($set) {
        $champs = array_merge($champs, $set);
    }
    // Envoyer aux plugins
    $champs = pipeline('pre_insertion', array('args' => array('table' => $table_sql), 'data' => $champs));
    $id = sql_insertq($table_sql, $champs);
    if ($id) {
        pipeline('post_insertion', array('args' => array('table' => $table_sql, 'id_objet' => $id), 'data' => $champs));
        // controler si le serveur n'a pas renvoye une erreur
        // et associer l'auteur sinon
        // si la table n'a pas deja un champ id_auteur
        // et si le form n'a pas poste un id_auteur (meme vide, ce qui sert a annuler cette auto association)
        if ($id > 0 and !isset($desc['field']['id_auteur'])) {
            $id_auteur = (is_null(_request('id_auteur')) and isset($GLOBALS['visiteur_session']['id_auteur'])) ? $GLOBALS['visiteur_session']['id_auteur'] : _request('id_auteur');
            if ($id_auteur) {
                include_spip('action/editer_auteur');
                auteur_associer($id_auteur, array($objet => $id));
            }
        }
    }
    return $id;
}
Esempio n. 6
0
/**
 * Insérer un nouvel article en base de données
 * 
 * En plus des données enregistrées par défaut, la fonction :
 * - retrouve un identifiant de rubrique pour stocker l'article (la
 *   première rubrique racine) si l'identifiant de rubrique transmis est
 *   nul.
 * - calcule la langue de l'article, soit
 *   - d'après la langue de la rubrique si les articles ne sont pas
 *     configurés comme pouvant être traduits,
 *   - d'après la langue de l'auteur en cours si les articles peuvent être traduits et
 *     si la langue de l'auteur est acceptée en tant que langue de traduction
 * - crée une liaison automatiquement entre l'auteur connecté et l'article
 *   créé, de sorte que la personne devient par défaut auteur de l'article
 *   qu'elle crée.
 *   
 * @pipeline_appel pre_insertion
 * @pipeline_appel post_insertion
 *
 * @global array $GLOBALS['meta']
 * @global array $GLOBALS['visiteur_session']
 * @global string $GLOBALS['spip_lang']
 * 
 * @param int $id_rubrique
 *     Identifiant de la rubrique parente
 * @return int
 *     Identifiant du nouvel article
 * 
 */
function article_inserer($id_rubrique)
{
    // Si id_rubrique vaut 0 ou n'est pas definie, creer l'article
    // dans la premiere rubrique racine
    if (!($id_rubrique = intval($id_rubrique))) {
        $row = sql_fetsel("id_rubrique, id_secteur, lang", "spip_rubriques", "id_parent=0", '', '0+titre,titre', "1");
        $id_rubrique = $row['id_rubrique'];
    } else {
        $row = sql_fetsel("lang, id_secteur", "spip_rubriques", "id_rubrique={$id_rubrique}");
    }
    // eviter $id_secteur = NULL (erreur sqlite) si la requete precedente echoue
    // cas de id_rubrique = -1 par exemple avec plugin "pages"
    $id_secteur = isset($row['id_secteur']) ? $row['id_secteur'] : 0;
    $lang_rub = $row['lang'];
    $lang = "";
    $choisie = 'non';
    // La langue a la creation : si les liens de traduction sont autorises
    // dans les rubriques, on essaie avec la langue de l'auteur,
    // ou a defaut celle de la rubrique
    // Sinon c'est la langue de la rubrique qui est choisie + heritee
    if (in_array('spip_articles', explode(',', $GLOBALS['meta']['multi_objets']))) {
        lang_select($GLOBALS['visiteur_session']['lang']);
        if (in_array($GLOBALS['spip_lang'], explode(',', $GLOBALS['meta']['langues_multilingue']))) {
            $lang = $GLOBALS['spip_lang'];
            $choisie = 'oui';
        }
    }
    if (!$lang) {
        $choisie = 'non';
        $lang = $lang_rub ? $lang_rub : $GLOBALS['meta']['langue_site'];
    }
    $champs = array('id_rubrique' => $id_rubrique, 'id_secteur' => $id_secteur, 'statut' => 'prepa', 'date' => date('Y-m-d H:i:s'), 'lang' => $lang, 'langue_choisie' => $choisie);
    // Envoyer aux plugins
    $champs = pipeline('pre_insertion', array('args' => array('table' => 'spip_articles'), 'data' => $champs));
    $id_article = sql_insertq("spip_articles", $champs);
    pipeline('post_insertion', array('args' => array('table' => 'spip_articles', 'id_objet' => $id_article), 'data' => $champs));
    // controler si le serveur n'a pas renvoye une erreur
    if ($id_article > 0 and $GLOBALS['visiteur_session']['id_auteur']) {
        include_spip('action/editer_auteur');
        auteur_associer($GLOBALS['visiteur_session']['id_auteur'], array('article' => $id_article));
    }
    return $id_article;
}