Пример #1
0
function formulaires_importer_sites_traiter_dist()
{
    $id_parent = intval(_request('id_parent'));
    $importer_statut_publie = _request('importer_statut_publie') ? true : false;
    $importer_tags = _request('importer_les_tags') ? true : false;
    $fichier_ok = info_fichiers_import('fichier_import');
    $importer_bookmarks = charger_fonction('importer_bookmarks_' . $fichier_ok['format'], 'action');
    $nb = $importer_bookmarks($fichier_ok, $id_parent, $importer_statut_publie, $importer_tags);
    if (!$nb) {
        $res = array('message_erreur' => _T('sites:info_aucun_site_importe'));
    } else {
        $res = array('message_ok' => singulier_ou_pluriel($nb, 'sites:info_1_site_importe', 'sites:info_nb_sites_importes'));
    }
    return $res;
}
Пример #2
0
/**
 * Charger
 *
 * @param int $id_article
 * @return array
 */
function formulaires_activer_petition_article_charger_dist($id_article)
{
    $valeurs = array();
    $valeurs['editable'] = true;
    if (!autoriser('modererpetition', 'article', $id_article)) {
        $valeurs['editable'] = false;
    }
    include_spip('inc/presentation');
    include_spip('base/abstract_sql');
    $nb_signatures = 0;
    $petition = sql_fetsel("*", "spip_petitions", "id_article={$id_article}");
    if ($petition) {
        $nb_signatures = sql_countsel("spip_signatures", "id_petition=" . intval($petition['id_petition']));
    }
    $valeurs['id_article'] = $id_article;
    $valeurs['petition'] = $petition;
    $valeurs['_controle_petition'] = $nb_signatures ? singulier_ou_pluriel($nb_signatures, 'petitions:une_signature', 'petitions:nombre_signatures') : "";
    return $valeurs;
}
Пример #3
0
function formulaires_migrer_agenda_traiter_dist()
{
    $id_rubrique = _request('id_parent');
    $where_articles = migrer_agenda_where_articles($id_rubrique, _request('toute_la_branche'));
    $groupes = _request('groupes_mots');
    if (!$groupes) {
        $groupes = array();
    }
    $where_mots = migrer_agenda_where_mots($groupes);
    $horaire = _request('horaire') == 'oui' ? true : false;
    $champ_date_debut = _request('champ_date_debut');
    $champ_date_fin = _request('champ_date_fin');
    // poser le flag agenda sur la rubrique !
    sql_updateq('spip_rubriques', array('agenda' => 1), 'id_rubrique=' . intval($id_rubrique));
    // et migrer les articles
    $nb = migrer_articles($where_articles, $champ_date_debut, $champ_date_fin, $horaire, $where_mots);
    $message = _T('migreragenda:info_migration_articles_reussi') . ' ';
    $message .= sinon(singulier_ou_pluriel($nb, 'info_1_article', 'info_nb_articles'), _T('info_aucun_article'));
    return array('message_ok' => $message);
}
Пример #4
0
/**
 * Fabrique la liste a cocher des tables a traiter (copie, delete, sauvegarde)
 *
 * @param string $name
 * @param array $tables
 * @param array $exclude
 * @param array|null $post
 * @param string $serveur
 * @return array
 */
function base_saisie_tables($name, $tables, $exclude = array(), $post = null, $serveur = '')
{
    include_spip('inc/filtres');
    $res = array();
    foreach ($tables as $k => $t) {
        // par defaut tout est coche sauf les tables dans $exclude
        if (is_null($post)) {
            $check = in_array($t, $exclude) ? false : true;
        } else {
            $check = in_array($t, $post);
        }
        $res[$k] = "<input type='checkbox' value='{$t}' name='{$name}" . "[]' id='{$name}{$k}'" . ($check ? " checked='checked'" : '') . "/>\n" . "<label for='{$name}{$k}'>" . $t . "</label>" . " (" . sinon(singulier_ou_pluriel(sql_countsel($t, '', '', '', $serveur), 'dump:une_donnee', 'dump:nb_donnees'), _T('dump:aucune_donnee')) . ")";
    }
    return $res;
}
Пример #5
0
/**
 * Affichage spécifique de la page de gestion des plugins 
 *
 * Affiche la liste des plugins demandés et les erreurs éventuelles.
 *
 * @uses plugin_donne_erreurs()
 * @uses liste_chemin_plugin()
 * @uses plugin_installes_meta()
 * @uses affiche_les_plugins_verrouilles()
 * 
 * @pipeline_appel affiche_gauche
 * @pipeline_appel affiche_droit
 * @pipeline_appel affiche_milieu
 * 
 * @param string $quoi
 *     Quels plugins afficher ? actifs, ou autre
 * @param string $erreur
 *     Erreur éventuelle à afficher
 * @param string $format
 *     Format d'affichage (liste ou arborescence)
**/
function admin_plug_args($quoi, $erreur, $format)
{
    if (!$quoi) {
        $quoi = 'actifs';
    }
    // empecher l'affichage des erreurs dans le bandeau, on le donne ensuite
    // format brut par plugin
    $GLOBALS['erreurs_activation_raw'] = plugin_donne_erreurs(true, false);
    // format resume mis en forme
    $erreur_activation = plugin_donne_erreurs();
    $commencer_page = charger_fonction('commencer_page', 'inc');
    echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin");
    echo debut_gauche('plugin', true);
    echo recuperer_fond('prive/squelettes/navigation/configurer', array('exec' => 'admin_plugin'));
    echo pipeline('affiche_gauche', array('args' => array('exec' => 'admin_plugin'), 'data' => afficher_librairies()));
    echo debut_droite('plugin', true);
    echo gros_titre(_T('icone_admin_plugin'), '', false);
    // Barre d'onglets de premier niveau
    echo barre_onglets("plugins", "plugins_actifs");
    // Barre d'onglets de second niveau
    $onglet2 = $quoi == 'actifs' ? 'plugins_actifs' : 'admin_plugin';
    echo debut_onglet('onglets_simple second');
    echo onglet(_T('plugins_tous_liste'), generer_url_ecrire("admin_plugin", "voir=tous"), 'admin_plugin', $onglet2);
    echo onglet(_T('plugins_actifs_liste'), generer_url_ecrire("admin_plugin"), 'plugins_actifs', $onglet2);
    echo fin_onglet();
    // message d'erreur au retour d'une operation
    if ($erreur) {
        echo "<div class='error'>{$erreur}</div>";
    }
    if ($erreur_activation) {
        echo "<div class='error'>{$erreur_activation}</div>";
    }
    // la mise a jour de cette meta a ete faite par ecrire_plugin_actifs
    $actifs = unserialize($GLOBALS['meta']['plugin']);
    $lcpa = $actifs + unserialize($GLOBALS['meta']['plugin_attente']);
    // Les affichages se basent sur le repertoire, pas sur le nom
    $actifs = liste_chemin_plugin($actifs, '');
    if (defined('_DIR_PLUGINS_SUPPL')) {
        $lcpas = liste_chemin_plugin($lcpa, _DIR_PLUGINS_SUPPL);
    }
    $lcpa = liste_chemin_plugin($lcpa);
    // on installe les plugins maintenant,
    // cela permet aux scripts d'install de faire des affichages (moches...)
    plugin_installes_meta();
    echo "<div class='liste-plugins formulaire_spip'>";
    echo debut_cadre_trait_couleur('plugin-24.png', true, '', _T('plugins_liste'), 'plugins');
    if ($quoi !== 'actifs') {
        $lpf = liste_plugin_files();
        if ($lpf) {
            echo "<p>" . _T('texte_presente_plugin') . "</p>";
        } else {
            if (!@is_dir(_DIR_PLUGINS)) {
                echo "<p>" . _T('plugin_info_automatique_ftp', array('rep' => joli_repertoire(_DIR_PLUGINS))) . " &mdash; " . _T('plugin_info_automatique_creer') . "</p>";
            }
        }
        $lcpaffiche = $lpf;
        if (defined('_DIR_PLUGINS_SUPPL')) {
            $lcpaffichesup = liste_plugin_files(_DIR_PLUGINS_SUPPL);
        }
    } else {
        // la liste
        // $quoi=='actifs'
        $lcpaffiche = $lcpa;
        if (defined('_DIR_PLUGINS_SUPPL')) {
            $lcpaffichesup = $lcpas;
        }
    }
    if ($quoi == 'actifs' or $lpf) {
        $nb = count($lcpa);
        if (defined('_DIR_PLUGINS_SUPPL')) {
            $nb += count($lcpas);
        }
        echo "<h3>" . sinon(singulier_ou_pluriel($nb, 'plugins_actif_un', 'plugins_actifs', 'count'), _T('plugins_actif_aucun')) . "</h3>";
    }
    if (empty($format)) {
        $format = 'liste';
    } elseif (!in_array($format, array('liste', 'repertoires'))) {
        $format = 'repertoires';
    }
    $afficher = charger_fonction("afficher_{$format}", 'plugins');
    $corps = $afficher(self(), $lcpaffiche, $lcpa, $actifs);
    if (defined('_DIR_PLUGINS_SUPPL')) {
        $corps .= $afficher(self(), $lcpaffichesup, $lcpas, $actifs, _DIR_PLUGINS_SUPPL);
    }
    if ($corps) {
        $corps .= "\n<div class='boutons' style='display:none;'>" . "<input type='submit' class='submit save' value='" . _T('bouton_enregistrer') . "' />" . "</div>";
    }
    echo redirige_action_post('activer_plugins', 'activer', 'admin_plugin', '', $corps);
    echo fin_cadre_trait_couleur(true);
    if ($quoi == 'actifs') {
        echo affiche_les_plugins_verrouilles($actifs);
    }
    echo "</div>";
    echo http_script("\n\tjQuery(function(){\n\t\tjQuery('.plugins li.item a[rel=info]').click(function(){\n\t\t\tvar li = jQuery(this).parents('li').eq(0);\n\t\t\tvar prefix = li.find('input.checkbox').attr('name');\n\t\t\tif (!jQuery('div.details',li).html()) {\n\t\t\t\tjQuery('div.details',li).prepend(ajax_image_searching).load(\n\t\t\t\t\tjQuery(this).attr('href').replace(/admin_plugin|plugins/, 'info_plugin'), function(){\n\t\t\t\t\t\tli.addClass('on');\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (jQuery('div.details',li).toggle().is(':visible'))\n\t\t\t\t\tli.addClass('on');\n\t\t\t\telse\n\t\t\t\t\tli.removeClass('on');\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tjQuery('.plugins li.item input.checkbox').change(function(){\n\t\t\tjQuery(this).parents('form').eq(0).find('.boutons').slideDown();\n\t\t});\n\t});\n\t");
    echo pipeline('affiche_milieu', array('args' => array('exec' => 'admin_plugin'), 'data' => ''));
    echo fin_gauche(), fin_page();
}
Пример #6
0
/**
 * Compter et afficher les contributions d'un visiteur
 * pour affichage dans la page auteurs
 *
 * @param array $flux
 * @return array
 */
function forum_compter_contributions_auteur($flux)
{
    $id_auteur = intval($flux['args']['id_auteur']);
    if ($cpt = sql_countsel("spip_forum AS F", "F.id_auteur=" . intval($flux['args']['id_auteur']))) {
        // manque "1 message de forum"
        $contributions = singulier_ou_pluriel($cpt, 'forum:info_1_message_forum', 'forum:info_nb_messages_forum');
        $flux['data'][] = $contributions;
    }
    return $flux;
}
Пример #7
0
/**
 * Verifier les etapes de saisie
 *
 * @param array $flux
 * @return array
 */
function cvtmulti_formulaire_verifier($flux)
{
    #var_dump('Pipe verifier');
    if ($form = $flux['args']['form'] and ($e = cvtmulti_recuperer_post_precedents($form)) !== false) {
        // recuperer l'etape saisie et le nombre d'etapes total
        list($etape, $etapes) = $e;
        $etape_demandee = _request('aller_a_etape');
        // possibilite de poster en entier dans aller_a_etape
        // lancer les verifs pour chaque etape deja saisie de 1 a $etape
        $erreurs = array();
        $derniere_etape_ok = 0;
        $e = 0;
        while ($e < $etape and $e < $etapes) {
            $e++;
            $erreurs[$e] = array();
            if ($verifier = charger_fonction("verifier_{$e}", "formulaires/{$form}/", true)) {
                $erreurs[$e] = call_user_func_array($verifier, $flux['args']['args']);
            } elseif ($verifier = charger_fonction("verifier_etape", "formulaires/{$form}/", true)) {
                $args = $flux['args']['args'];
                array_unshift($args, $e);
                $erreurs[$e] = call_user_func_array($verifier, $args);
            }
            if ($derniere_etape_ok == $e - 1 and !count($erreurs[$e])) {
                $derniere_etape_ok = $e;
            }
            // possibilite de poster dans _retour_etape_x
            if (!is_null(_request("_retour_etape_{$e}"))) {
                $etape_demandee = $e;
            }
        }
        // si la derniere etape OK etait la derniere
        // on renvoie le flux inchange et ca declenche traiter
        if ($derniere_etape_ok == $etapes and !$etape_demandee) {
            return $flux;
        } else {
            $etape = $derniere_etape_ok + 1;
            if ($etape_demandee > 0 and $etape_demandee < $etape) {
                $etape = $etape_demandee;
            }
            $etape = min($etape, $etapes);
            #var_dump("prochaine etape $etape");
            // retourner les erreurs de l'etape ciblee
            $flux['data'] = isset($erreurs[$etape]) ? $erreurs[$etape] : array();
            // Ne pas se tromper dans le texte du message d'erreur : la clé '_etapes' n'est pas une erreur !
            if ($flux['data']) {
                $flux['data']['message_erreur'] = singulier_ou_pluriel(count($flux['data']), 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
            } else {
                $flux['data']['message_erreur'] = "";
            }
            $flux['data']['_etapes'] = "etape suivante {$etape}";
            set_request('_etape', $etape);
        }
    }
    return $flux;
}
Пример #8
0
function traiter_formulaires_dynamiques($get = false)
{
    static $post = array();
    static $done = false;
    if ($get) {
        return $post;
    }
    if ($done) {
        return false;
    }
    $done = true;
    if (!($form = _request('formulaire_action') and $args = _request('formulaire_action_args'))) {
        return false;
    }
    // le hit peut continuer normalement
    include_spip('inc/filtres');
    if (($args = decoder_contexte_ajax($args, $form)) === false) {
        spip_log("signature ajax form incorrecte : {$form}");
        return false;
        // continuons le hit comme si de rien etait
    } else {
        include_spip('inc/lang');
        // sauvegarder la lang en cours
        $old_lang = $GLOBALS['spip_lang'];
        // changer la langue avec celle qui a cours dans le formulaire
        // on la depile de $args car c'est un argument implicite masque
        changer_langue(array_shift($args));
        // inclure mes_fonctions et autres filtres avant verifier/traiter
        include_spip('public/parametrer');
        // ainsi que l'API SQL bien utile dans verifier/traiter
        include_spip('base/abstract_sql');
        $verifier = charger_fonction("verifier", "formulaires/{$form}/", true);
        $post["erreurs_{$form}"] = pipeline('formulaire_verifier', array('args' => array('form' => $form, 'args' => $args), 'data' => $verifier ? call_user_func_array($verifier, $args) : array()));
        // accessibilite : si des erreurs mais pas de message general l'ajouter
        if (count($post["erreurs_{$form}"]) and !isset($post["erreurs_{$form}"]['message_erreur'])) {
            $post["erreurs_{$form}"]['message_erreur'] = singulier_ou_pluriel(count($post["erreurs_{$form}"]), 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
        }
        // si on ne demandait qu'une verif json
        if (_request('formulaire_action_verifier_json')) {
            include_spip('inc/json');
            include_spip('inc/actions');
            ajax_retour(json_encode($post["erreurs_{$form}"]), 'text/plain');
            return true;
            // on a fini le hit
        }
        $retour = "";
        if (count($post["erreurs_{$form}"]) == 0) {
            $rev = "";
            if ($traiter = charger_fonction("traiter", "formulaires/{$form}/", true)) {
                $rev = call_user_func_array($traiter, $args);
            }
            $rev = pipeline('formulaire_traiter', array('args' => array('form' => $form, 'args' => $args), 'data' => $rev));
            // le retour de traiter est
            // un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
            // il permet le pipelinage, en particulier
            // en y passant l'id de l'objet cree/modifie
            // si message_erreur est present, on considere que le traitement a echoue
            $post["message_ok_{$form}"] = '';
            // on peut avoir message_ok et message_erreur
            if (isset($rev['message_ok'])) {
                $post["message_ok_{$form}"] = $rev['message_ok'];
            }
            // verifier si traiter n'a pas echoue avec une erreur :
            if (isset($rev['message_erreur'])) {
                $post["erreurs_{$form}"]["message_erreur"] = $rev['message_erreur'];
                // si il y a une erreur on ne redirige pas
            } else {
                // sinon faire ce qu'il faut :
                if (isset($rev['editable'])) {
                    $post["editable_{$form}"] = $rev['editable'];
                }
                // si une redirection est demandee, appeler redirigae_formulaire qui choisira
                // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
                if (isset($rev['redirect']) and $rev['redirect']) {
                    include_spip('inc/headers');
                    list($masque, $message) = redirige_formulaire($rev['redirect'], '', 'ajaxform');
                    $post["message_ok_{$form}"] .= $message;
                    $retour .= $masque;
                }
            }
        }
        // si le formulaire a ete soumis en ajax, on le renvoie direct !
        if (_request('var_ajax')) {
            if (find_in_path('formulaire_.php', 'balise/', true)) {
                include_spip('inc/actions');
                include_spip('public/assembler');
                array_unshift($args, $form);
                $retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false);
                // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
                // sans cela le formulaire n'est pas actif apres le hit ajax
                // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
                $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
                ajax_retour($retour, false);
                return true;
                // on a fini le hit
            }
        }
        // restaurer la lang en cours
        changer_langue($old_lang);
    }
    return false;
    // le hit peut continuer normalement
}
/**
 * Traitement du formulaire
 *
 * @param int|string $id_document
 *    L'identidiant numérique du document s'il est à remplacer, sinon "new"
 * @param int $id_objet
 *    L'identifiant numérique de l'objet sur lequel on ajoute le document
 * @param string $objet
 *    Le type de l'objet sur lequel on ajoute le document
 * @param string $mode
 *    Le mode du document (auto,choix,document,image,vignette...), par défaut auto
 * @param string $galerie
 *    Passer optionnellement une galerie jointe au form, plus utilise nativement,
 *    on prefere la mise a jour apres upload par ajaxReload('documents')
 * @param bool|string $proposer_media
 *    Doit on afficher la médiathèque ?  par défaut oui
 *    Valeurs possibles si string : false,'non','no'.
 * @param bool|string $proposer_ftp
 *    Doit on afficher le ftp ? par défaut oui
 *    Valeurs possibles si string : false,'non','no'.
 * @return array $res
 *    Le tableau renvoyé par les CVT avec le message et editable
 */
function formulaires_joindre_document_traiter_dist($id_document = 'new', $id_objet = 0, $objet = '', $mode = 'auto', $galerie = false, $proposer_media = true, $proposer_ftp = true)
{
    $res = array('editable' => true);
    $ancre = '';
    // on joint un document deja dans le site
    if (_request('joindre_mediatheque')) {
        $refdoc_joindre = _request('refdoc_joindre');
        $refdoc_joindre = strtr($refdoc_joindre, ";,", "  ");
        $refdoc_joindre = preg_replace(',\\b(doc|document|img),', '', $refdoc_joindre);
        // expliciter les intervales xxx-yyy
        while (preg_match(",\\b(\\d+)-(\\d+)\\b,", $refdoc_joindre, $m)) {
            $refdoc_joindre = str_replace($m[0], implode(" ", range($m[1], $m[2])), $refdoc_joindre);
        }
        $refdoc_joindre = explode(" ", $refdoc_joindre);
        include_spip('action/editer_document');
        foreach ($refdoc_joindre as $j) {
            if ($j = intval(preg_replace(',^(doc|document|img),', '', $j))) {
                // lier le parent en plus
                $champs = array('ajout_parents' => array("{$objet}|{$id_objet}"));
                document_modifier($j, $champs);
                if (!$ancre) {
                    $ancre = $j;
                }
                $sel[] = $j;
                $res['message_ok'] = _T('medias:document_attache_succes');
            }
        }
        if ($sel) {
            $res['message_ok'] = singulier_ou_pluriel(count($sel), 'medias:document_attache_succes', 'medias:nb_documents_attache_succes');
        }
        set_request('refdoc_joindre', '');
        // vider la saisie
    } else {
        $ajouter_documents = charger_fonction('ajouter_documents', 'action');
        $mode = joindre_determiner_mode($mode, $id_document, $objet);
        include_spip('inc/joindre_document');
        $files = joindre_trouver_fichier_envoye();
        $nouveaux_doc = $ajouter_documents($id_document, $files, $objet, $id_objet, $mode);
        if (defined('_tmp_zip')) {
            unlink(_tmp_zip);
        }
        if (defined('_tmp_dir')) {
            effacer_repertoire_temporaire(_tmp_dir);
        }
        // checker les erreurs eventuelles
        $messages_erreur = array();
        $nb_docs = 0;
        $sel = array();
        foreach ($nouveaux_doc as $doc) {
            if (!is_numeric($doc)) {
                $messages_erreur[] = $doc;
            } elseif (!$doc) {
                $messages_erreur[] = _T('medias:erreur_insertion_document_base', array('fichier' => '<em>???</em>'));
            } else {
                if (!$ancre) {
                    $ancre = $doc;
                }
                $sel[] = $doc;
            }
        }
        if (count($messages_erreur)) {
            $res['message_erreur'] = implode('<br />', $messages_erreur);
        }
        if ($sel) {
            $res['message_ok'] = singulier_ou_pluriel(count($sel), 'medias:document_installe_succes', 'medias:nb_documents_installe_succes');
        }
        if ($ancre) {
            $res['redirect'] = "#doc{$ancre}";
        }
    }
    if (count($sel) or isset($res['message_ok'])) {
        $callback = "";
        if ($ancre) {
            $callback .= "jQuery('#doc{$ancre} a.editbox').eq(0).focus();";
        }
        if (count($sel)) {
            // passer les ids document selectionnes aux pipelines
            $res['ids'] = $sel;
            $sel = "#doc" . implode(",#doc", $sel);
            $callback .= "jQuery('{$sel}').animateAppend();";
        }
        $js = "if (window.jQuery) jQuery(function(){ajaxReload('documents',{callback:function(){ {$callback} }});});";
        $js = "<script type='text/javascript'>{$js}</script>";
        if (isset($res['message_erreur'])) {
            $res['message_erreur'] .= $js;
        } else {
            $res['message_ok'] .= $js;
        }
    }
    return $res;
}
Пример #10
0
/**
 * Afficher le nombre de sites dans chaque rubrique
 *
 * @param array $flux
 * @return array
 */
function sites_boite_infos($flux)
{
    if ($flux['args']['type'] == 'rubrique' and $id_rubrique = $flux['args']['id']) {
        if ($nb = sql_countsel('spip_syndic', "statut='publie' AND id_rubrique=" . intval($id_rubrique))) {
            $nb = "<div>" . singulier_ou_pluriel($nb, "info_1_site", "info_nb_sites") . "</div>";
            if ($p = strpos($flux['data'], "<!--nb_elements-->")) {
                $flux['data'] = substr_replace($flux['data'], $nb, $p, 0);
            }
        }
    }
    return $flux;
}
Пример #11
0
/**
 * Afficher un message "un truc"/"N trucs"
 *
 * @param int $nb
 * @return string
 */
function affiche_un_ou_plusieurs($nb,$chaine_un,$chaine_plusieurs,$var='nb'){
	return singulier_ou_pluriel($nb,$chaine_un,$chaine_plusieurs,$var);
}
Пример #12
0
function agenda_afficher_nombre_objets_associes_a($flux){
	if ($flux['args']['objet']=='mot'
	  AND $id_mot=$flux['args']['id_objet']){
		$aff_articles = sql_in('A.statut',  ($GLOBALS['connect_statut'] =="0minirezo")  ? array('prepa','prop','publie') : array('prop','publie'));
		$nb = sql_countsel("spip_mots_evenements AS L LEFT JOIN spip_evenements AS E ON E.id_evenement=L.id_evenement LEFT JOIN spip_articles AS A ON E.id_article=A.id_article", "L.id_mot=".intval($id_mot)." AND $aff_articles");
		if ($nb)
			$flux['data'][] = singulier_ou_pluriel($nb, "agenda:info_un_evenement", "agenda:info_nombre_evenements");
	}
	return $flux;
}
function formulaires_construire_formulaire_verifier($identifiant, $formulaire_initial = array(), $options = array())
{
    include_spip('inc/saisies');
    $erreurs = array();
    // l'une ou l'autre sera presente
    $configurer_saisie = $enregistrer_saisie = '';
    // Pas d'erreur si l'on ne demande rien
    if (!($nom_ou_id = $configurer_saisie = _request('configurer_saisie') or $nom_ou_id = $enregistrer_saisie = _request('enregistrer_saisie'))) {
        return $erreurs;
    }
    // On ajoute un préfixe devant l'identifiant
    $identifiant = 'constructeur_formulaire_' . $identifiant;
    // On récupère le formulaire à son état actuel
    $formulaire_actuel = session_get($identifiant);
    // On récupère les saisies actuelles, par identifiant ou par nom
    if ($nom_ou_id[0] == '@') {
        $saisies_actuelles = saisies_lister_par_identifiant($formulaire_actuel);
        $nom = $saisies_actuelles[$nom_ou_id]['options']['nom'];
    } else {
        $saisies_actuelles = saisies_lister_par_nom($formulaire_actuel);
        $nom = $nom_ou_id;
    }
    $noms_autorises = array_keys($saisies_actuelles);
    // le nom (ou identifiant) doit exister
    if (!in_array($nom_ou_id, $noms_autorises)) {
        return $erreurs;
    }
    // La liste des saisies
    $saisies_disponibles = saisies_lister_disponibles();
    $saisie = $saisies_actuelles[$nom_ou_id];
    $formulaire_config = $saisies_disponibles[$saisie['saisie']]['options'];
    array_walk_recursive($formulaire_config, 'formidable_transformer_nom', "saisie_modifiee_{$nom}[options][@valeur@]");
    $formulaire_config = saisie_identifier(array('saisies' => $formulaire_config));
    $formulaire_config = $formulaire_config['saisies'];
    // Si la saisie possede un identifiant, on l'ajoute
    // au formulaire de configuration pour ne pas le perdre en route
    if (isset($saisie['identifiant']) and $saisie['identifiant']) {
        $formulaire_config = saisies_inserer($formulaire_config, array('saisie' => 'hidden', 'options' => array('nom' => "saisie_modifiee_{$nom}[identifiant]", 'defaut' => $saisie['identifiant'])));
    }
    // S'il y a l'option adéquat, on ajoute le champ pour modifier le nom
    if (isset($options['modifier_nom']) and $options['modifier_nom'] and $chemin_nom = saisies_chercher($formulaire_config, "saisie_modifiee_{$nom}[options][description]", true)) {
        $chemin_nom[] = 'saisies';
        $chemin_nom[] = '0';
        $formulaire_config = saisies_inserer($formulaire_config, array('saisie' => 'input', 'options' => array('nom' => "saisie_modifiee_{$nom}[options][nom]", 'label' => _T('saisies:option_nom_label'), 'explication' => _T('saisies:option_nom_explication'), 'obligatoire' => 'oui', 'size' => 50), 'verifier' => array('type' => 'regex', 'options' => array('modele' => '/^[\\w]+$/'))), $chemin_nom);
    }
    // liste des options de vérification
    $verif_options = array();
    // S'il y a un groupe "validation" alors on va construire le formulaire des vérifications
    if ($chemin_validation = saisies_chercher($formulaire_config, "saisie_modifiee_{$nom}[options][validation]", true)) {
        include_spip('inc/verifier');
        $liste_verifications = verifier_lister_disponibles();
        $chemin_validation[] = 'saisies';
        $chemin_validation[] = 1000000;
        // à la fin
        // On construit la saisie à insérer et les fieldset des options
        $saisie_liste_verif = array('saisie' => 'selection', 'options' => array('nom' => "saisie_modifiee_{$nom}[verifier][type]", 'label' => _T('saisies:construire_verifications_label'), 'option_intro' => _T('saisies:construire_verifications_aucune'), 'conteneur_class' => 'liste_verifications', 'datas' => array()));
        foreach ($liste_verifications as $type_verif => $verif) {
            $saisie_liste_verif['options']['datas'][$type_verif] = $verif['titre'];
            // Si le type de vérif a des options, on ajoute un fieldset
            if (isset($verif['options']) and $verif['options'] and is_array($verif['options'])) {
                $groupe = array('saisie' => 'fieldset', 'options' => array('nom' => 'options', 'label' => $verif['titre'], 'conteneur_class' => "{$type_verif} options_verifier"), 'saisies' => $verif['options']);
                array_walk_recursive($groupe, 'formidable_transformer_nom', "saisie_modifiee_{$nom}[verifier][{$type_verif}][@valeur@]");
                $verif_options[$type_verif] = $groupe;
            }
        }
        $verif_options = array_merge(array($saisie_liste_verif), $verif_options);
    }
    // Permettre d'intégrer des saisies et fieldset au formulaire de configuration.
    // Si des vérifications sont à faire, elles seront prises en compte
    // lors des tests de vérifications à l'enregistrement.
    $formulaire_config = pipeline('saisies_construire_formulaire_config', array('data' => $formulaire_config, 'args' => array('identifiant' => $identifiant, 'action' => $enregistrer_saisie ? 'enregistrer' : 'configurer', 'options' => $options, 'nom' => $nom, 'saisie' => $saisie)));
    if ($enregistrer_saisie) {
        // La saisie modifié
        $saisie_modifiee = _request("saisie_modifiee_{$nom}");
        // On cherche les erreurs de la configuration
        $vraies_erreurs = saisies_verifier($formulaire_config);
        // Si on autorise à modifier le nom ET qu'il doit être unique : on vérifie
        if (isset($options['modifier_nom']) and $options['modifier_nom'] and isset($options['nom_unique']) and $options['nom_unique']) {
            $nom_modifie = $saisie_modifiee['options']['nom'];
            if ($nom_modifie != $enregistrer_saisie and saisies_chercher($formulaire_actuel, $nom_modifie)) {
                $vraies_erreurs["saisie_modifiee_{$nom}[options][nom]"] = _T('saisies:erreur_option_nom_unique');
            }
        }
        // On regarde s'il a été demandé un type de vérif
        if (isset($saisie_modifiee['verifier']['type']) and ($type_verif = $saisie_modifiee['verifier']['type']) != '' and $verif_options[$type_verif]) {
            // On ne vérifie que les options du type demandé
            $vraies_erreurs = array_merge($vraies_erreurs, saisies_verifier($verif_options[$type_verif]['saisies']));
        }
    }
    // On insère chaque saisie des options de verification
    if ($verif_options) {
        foreach ($verif_options as $saisie_verif) {
            $formulaire_config = saisies_inserer($formulaire_config, $saisie_verif, $chemin_validation);
        }
    }
    $erreurs['configurer_' . $nom] = $formulaire_config;
    $erreurs['positionner'] = '#configurer_' . $nom;
    if ($enregistrer_saisie) {
        if ($vraies_erreurs) {
            $erreurs = array_merge($erreurs, $vraies_erreurs);
            $erreurs['message_erreur'] = singulier_ou_pluriel(count($vraies_erreurs), 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie');
        } else {
            $erreurs = array();
        }
    } else {
        $erreurs['message_erreur'] = '';
        // on ne veut pas du message_erreur automatique
    }
    return $erreurs;
}
Пример #14
0
function exec_admin_plugin_dist($retour='') {

	if (!autoriser('configurer', 'plugins')) {
		include_spip('inc/minipres');
		echo minipres();
	} else {
	// on fait la verif du path avant tout,
	// et l'installation des qu'on est dans la colonne principale
	// si jamais la liste des plugins actifs change, il faut faire un refresh du hit
	// pour etre sur que les bons fichiers seront charges lors de l'install
	if (actualise_plugins_actifs()==-1 AND _request('actualise')<2){
		include_spip('inc/headers');
		redirige_par_entete(parametre_url(self(),'actualise',_request('actualise')+1,'&'));
	}

	if ($erreur_activation = isset($GLOBALS['meta']['plugin_erreur_activation'])){
		$erreur_activation = $GLOBALS['meta']['plugin_erreur_activation'];
		// l'effacement reel de la meta se fera au moment de l'affichage
		// mais on la vide pour ne pas l'afficher dans le bandeau haut
		unset($GLOBALS['meta']['plugin_erreur_activation']);
	}

	$format = '';
	if (_request('format')!==NULL)
		$format = _request('format'); // liste ou repertoires

	$commencer_page = charger_fonction('commencer_page', 'inc');
	echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin");
	echo "<br />\n";
	echo "<br />\n";

	$quoi = _request('voir');
	$quoi = $quoi ? $quoi : 'actifs';

	echo gros_titre(_T('icone_admin_plugin'),'',false);
	echo barre_onglets("plugins", $quoi=='actifs'?"plugins_actifs":"admin_plugin");

	echo debut_gauche('plugin',true);
	echo debut_boite_info(true);
	$s = "";
	$s .= _T('info_gauche_admin_tech');
	echo $s;
	echo fin_boite_info(true);

	// la valeur de retour de la fonction ci-dessus n'est pas compatible
	// avec ce que fait actualise_plugins_actifs, il faut recalculer. A revoir.
	$lcpa = liste_chemin_plugin_actifs();

	echo pipeline('affiche_gauche',
		array(
		'args'=>array('exec'=>'admin_plugin'),
		'data'=>afficher_librairies()
		)
	);

	echo debut_droite('plugin', true);

	// message d'erreur au retour d'un operation
	if (_request('erreur')){
		echo "<div class='erreur_message-plugins'>" . _T(_request('erreur')) . "</div>";
	}
	if ($erreur_activation){
		echo "<div class='erreur_message-plugins'>" . $erreur_activation . "</div>";
		effacer_meta('plugin_erreur_activation');
	}


	// on fait l'installation ici,
	// cela permet aux scripts d'install de faire des affichages (moches...)
	installe_plugins();

	$lpf = liste_plugin_files();
	$plugins_interessants = @array_keys(unserialize($GLOBALS['meta']['plugins_interessants']));
	if (!is_array($plugins_interessants))
		$plugins_interessants = array();

	echo "<div class='liste-plugins formulaire_spip'>";

	echo debut_cadre_trait_couleur('plugin-24.gif',true,'',_T('plugins_liste'),
	'plugins');

	if ($quoi!=='actifs'){
		if ($lpf)
			echo "<p>"._T('texte_presente_plugin')."</p>";
		else {
			if (!@is_dir(_DIR_PLUGINS))
				echo  "<p>"._T('plugin_info_automatique_ftp',array('rep'=>joli_repertoire(_DIR_PLUGINS)))
							. " &mdash; "._T('plugin_info_automatique_creer')."</p>";
		}
	}

	if ($quoi=='actifs' OR $lpf)
		echo "<h3>".sinon(
						singulier_ou_pluriel(count($lcpa), 'plugins_actif_un', 'plugins_actifs', 'count'),
						_T('plugins_actif_aucun')
						)."</h3>";

	$sub = "\n<div class='boutons'>"
	.  "<input type='submit' class='submit save' value='"._T('bouton_enregistrer')
	."' />"
	. "</div>";

	$no_button = false;

	// la liste
	if ($quoi=='actifs'){
		$aff = affiche_les_plugins($lcpa, $lcpa, $format);
		$no_button = !strlen($aff);
		$corps = $aff;
	}
	elseif ($quoi=='tous')
		$corps = affiche_les_plugins($lpf, $lcpa, $format);
	else {
		$dir_auto = substr(_DIR_PLUGINS_AUTO, strlen(_DIR_PLUGINS));
		$lcpaffiche = array();
		foreach ($lpf as $f)
			if (!strpos($f, '/')
			OR ($dir_auto AND substr($f, 0, strlen($dir_auto)) == $dir_auto)
			OR in_array($f, $lcpa)
			OR in_array($f, $plugins_interessants))
				$lcpaffiche[] = $f;

		$corps = affiche_les_plugins($lcpaffiche, $lcpa, $format);
	}

	if (!$no_button)
		$corps .= "\n<br />" . $sub;

	echo redirige_action_post('activer_plugins','activer','admin_plugin','', $corps);

	echo fin_cadre_trait_couleur(true);

	if ($quoi=='actifs')
		echo affiche_les_extensions(liste_chemin_plugin_actifs(_DIR_EXTENSIONS));
	echo "</div>";
	
	echo 	http_script("
	jQuery(function(){
		jQuery('#plugins .boutons').hide();
		jQuery('.plugins li.item a[rel=info]').click(function(){
			var li = jQuery(this).parents('li').eq(0);
			var prefix = li.find('input.checkbox').attr('name');
			if (!jQuery('div.details',li).html()) {
				jQuery('div.details',li).prepend(ajax_image_searching).load(
					jQuery(this).attr('href').replace(/admin_plugin|plugins/, 'info_plugin'), function(){
						li.addClass('on');
					}
				);
			}
			else {
				if (jQuery('div.details',li).toggle().is(':visible'))
					li.addClass('on');
				else
					li.removeClass('on');
			}
			return false;
		});
		jQuery('.plugins li.item input.checkbox').change(function(){
			jQuery(this).parents('form').eq(0).find('.boutons').slideDown();
		});
	});
	");

	echo pipeline('affiche_milieu',
		array(
		'args'=>array('exec'=>'admin_plugin'),
		'data'=>''
		)
	);

	echo fin_gauche(), fin_page();
	}
}
/**
 * Afficher le nombre de documents dans chaque rubrique
 *
 * @pipeline boite_infos
 * @param array $flux
 * @return array
 */
function medias_boite_infos($flux)
{
    if ($flux['args']['type'] == 'rubrique' and $id_rubrique = $flux['args']['id']) {
        if ($nb = sql_countsel('spip_documents_liens', "objet='rubrique' AND id_objet=" . intval($id_rubrique))) {
            $nb = "<div>" . singulier_ou_pluriel($nb, "medias:un_document", "medias:des_documents") . "</div>";
            if ($p = strpos($flux['data'], "<!--nb_elements-->")) {
                $flux['data'] = substr_replace($flux['data'], $nb, $p, 0);
            }
        }
    }
    return $flux;
}