Example #1
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'));
            }
        }
    }
}
Example #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));
}
function instituer_auteur($id_auteur, $c)
{
    if (!($id_auteur = intval($id_auteur))) {
        return false;
    }
    // commencer par traiter les cas particuliers des logins et pass
    // avant le changement de statut eventuel
    if (isset($c['login']) or isset($c['pass'])) {
        $auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
        include_spip('inc/auth');
        if (isset($c['login'])) {
            auth_modifier_login($auth_methode, $c['login'], $id_auteur);
        }
        if (isset($c['pass'])) {
            $c['login'] = sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
            auth_modifier_pass($auth_methode, $c['login'], $c['pass'], $id_auteur);
        }
    }
    $champs = array();
    $statut = $statut_ancien = sql_getfetsel('statut', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
    if (isset($c['statut']) and ($statut_ancien == 'nouveau' or autoriser('modifier', 'auteur', $id_auteur, null, array('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 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'), 'data' => $champs));
    if (is_array($c['restreintes']) and autoriser('modifier', 'auteur', $id_auteur, NULL, array('restreint' => $c['restreintes']))) {
        sql_delete("spip_auteurs_rubriques", "id_auteur=" . sql_quote($id_auteur));
        foreach (array_unique($c['restreintes']) as $id_rub) {
            if ($id_rub = intval($id_rub)) {
                // si '0' on ignore
                sql_insertq('spip_auteurs_rubriques', array('id_auteur' => $id_auteur, 'id_rubrique' => $id_rub));
            }
        }
    }
    if (!count($champs)) {
        return;
    }
    sql_updateq('spip_auteurs', $champs, 'id_auteur=' . $id_auteur);
    include_spip('inc/modifier');
    sql_updateq('spip_auteurs', $champs, 'id_auteur=' . $id_auteur);
    // Invalider les caches
    include_spip('inc/invalideur');
    suivre_invalideur("id='id_auteur/{$id_auteur}'");
    // Pipeline
    pipeline('post_edition', array('args' => array('table' => 'spip_auteurs', 'id_objet' => $id_auteur, 'action' => 'instituer'), 'data' => $champs));
    // Notifications
    if ($notifications = charger_fonction('notifications', 'inc')) {
        $notifications('instituerauteur', $id_auteur, array('statut' => $statut, 'statut_ancien' => $statut_ancien));
    }
    return '';
    // pas d'erreur
}