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; }
/** * 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; }
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); }
/** * 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; }
/** * 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))) . " — " . _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(); }
/** * 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; }
/** * 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; }
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; }
/** * 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; }
/** * 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); }
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; }
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))) . " — "._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; }