function plugins_afficher_plugin_dist($url_page, $plug_file, $checked, $actif, $expose = false, $class_li = "item", $dir_plugins = _DIR_PLUGINS) { static $id_input = 0; static $versions = array(); $force_reload = _request('var_mode') == 'recalcul'; $get_infos = charger_fonction('get_infos', 'plugins'); $info = $get_infos($plug_file, $force_reload, $dir_plugins); $prefix = $info['prefix']; $cfg = ""; $checkable = $dir_plugins !== _DIR_PLUGINS_DIST; $nom = plugin_nom($info, $dir_plugins, $plug_file); if (!plugin_version_compatible($info['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) { $info['slogan'] = _T('plugin_info_non_compatible_spip'); $erreur = http_img_pack("plugin-dis-32.png", _T('plugin_info_non_compatible_spip'), " class='picto_err'", _T('plugin_info_non_compatible_spip')); $class_li .= " disabled"; $checkable = false; } elseif (isset($info['erreur'])) { $class_li .= " error"; $erreur = http_img_pack("plugin-err-32.png", _T('plugin_info_erreur_xml'), " class='picto_err'", _T('plugin_info_erreur_xml')) . "<div class='erreur'>" . join('<br >', $info['erreur']) . "</div>"; $checkable = false; } elseif (isset($GLOBALS['erreurs_activation_raw'][$dir_plugins . $plug_file])) { $class_li .= " error"; $erreur = http_img_pack("plugin-err-32.png", _T('plugin_impossible_activer', array('plugin' => $nom)), " class='picto_err'", _T('plugin_impossible_activer', array('plugin' => $nom))) . "<div class='erreur'>" . implode("<br />", $GLOBALS['erreurs_activation_raw'][$dir_plugins . $plug_file]) . "</div>"; } else { $cfg = $actif ? plugin_bouton_config($plug_file, $info, $dir_plugins) : ""; } // numerotons les occurrences d'un meme prefix $versions[$prefix] = $id = isset($versions[$prefix]) ? $versions[$prefix] + 1 : ''; $class_li .= ($actif ? " actif" : "") . ($expose ? " on" : ""); return "<li id='{$prefix}{$id}' class='{$class_li}'>" . ((!$checkable and !$checked) ? '' : plugin_checkbox(++$id_input, $plug_file, $checked)) . plugin_resume($info, $dir_plugins, $plug_file, $url_page) . $cfg . $erreur . (($dir_plugins !== _DIR_PLUGINS_DIST and plugin_est_installe($plug_file)) ? plugin_desintalle($plug_file, $nom) : '') . "<div class='details'>" . (!$expose ? '' : affiche_bloc_plugin($plug_file, $info)) . "</div>" . "</li>"; }
function tw_traiter_autoliens($r) { if (count($r) < 2) { return reset($r); } list($tout, $l) = $r; if (!$l) { return $tout; } // reperer le protocole if (preg_match(',^(https?):/*,S', $l, $m)) { $l = substr($l, strlen($m[0])); $protocol = $m[1]; } else { $protocol = 'http'; } // valider le nom de domaine if (!preg_match(_EXTRAIRE_DOMAINE, $l)) { return $tout; } // les ponctuations a la fin d'une URL n'en font certainement pas partie // en particulier le "|" quand elles sont dans un tableau a la SPIP preg_match('/^(.*?)([,.;?|]?)$/', $l, $k); $url = $protocol . '://' . $k[1]; $lien = charger_fonction('lien', 'inc'); // deux fois <html> car inc_lien echappe un coup et restaure ensuite // => un perd 1 <html> $r = $lien($url, "<html><html>{$url}</html></html>", '', '', '', 'nofollow') . $k[2]; // ajouter la class auto $r = inserer_attribut($r, 'class', trim(extraire_attribut($r, 'class') . ' auto')); // si l'original ne contenait pas le 'http:' on le supprime du clic return $m ? $r : str_replace('>http://', '>', $r); }
function type_urls_URL_objet_exec() { global $type_urls; $type = _request('type_objet'); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table(table_objet($type)); $table = $desc['table']; $champ_titre = $desc['titre']?$desc['titre']:'titre'; $col_id = @$desc['key']["PRIMARY KEY"]; if (!$col_id) return false; // Quand $type ne reference pas une table $id_objet = intval(_request('id_objet')); // chercher dans la table des URLS include_spip('base/abstract_sql'); // Recuperer une URL propre correspondant a l'objet. $row = sql_fetsel("U.url, O.$champ_titre", "$table AS O LEFT JOIN spip_urls AS U ON (U.type='$type' AND U.id_objet=O.$col_id)", "O.$col_id=$id_objet", '', 'U.date DESC', 1); if (!$row) return false; # Quand $id_objet n'est pas un numero connu // Calcul de l'URL complete $url = str_replace('.././','../',generer_url_entite($id_objet, $type, '', '', true)); $row2 = !strlen($url2 = $row['url']) // si l'URL n'etait pas presente en base, maintenant elle l'est ! ?sql_fetsel("url", "spip_urls", "id_objet=$id_objet AND type='$type'", '', 'date DESC', 1) :array('url'=>$url2); include_spip('inc/charsets'); // titre || url complete || type d'URLs || URL recalculee || url propre en base echo charset2unicode($row['titre']).'||'.$url.'||'.$type_urls.'||'.$row2['url'].'||'.$url2; }
function action_dereferencer_traduction_rubrique_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); list($type, $id_objet) = explode('/', $arg); if (!$type = objet_type($type) or !$id_objet = intval($id_objet)) { if (!_AJAX) { include_spip('inc/minipres'); minipres('Arguments incompris'); } else { spip_log('Arguments incompris dans action dereferencer_traduction_rubrique'); return false; } } $objet = table_objet($type); $_id_objet = id_table_objet($objet); $table = table_objet_sql($objet); $id_trad_old = sql_getfetsel('id_trad', $table, "$_id_objet = " . sql_quote($id_objet)); if ($id_trad_old) { include_spip('inc/modifier'); modifier_contenu($objet, $id_objet, array('invalideur' => "id='$objet/$id_objet'"), array('id_trad' => 0)); // si la deliaison fait qu'il ne reste plus que la source // dans le groupe de traduction on lui remet l'id_trad a 0 if (1 == $nb_dans_groupe = sql_countsel($table, array('id_trad = ' . sql_quote($id_trad_old)))) { modifier_contenu($objet, $id_trad_old, array('invalideur' => "id='$objet/$id_trad_old'"), array('id_trad' => 0)); } } }
function action_editer_message_dist($arg=null) { if (is_null($arg)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } if (preg_match(',^(\d+)$,', $arg, $r)) action_editer_message_post_vieux($arg); elseif (preg_match(',^-(\d+)$,', $arg, $r)) action_editer_message_post_supprimer($r[1]); elseif (preg_match(',^(\d+)\W$,', $arg, $r)) action_editer_message_post_choisir($r[1]); elseif (preg_match(',^(\d+)\W@(\d+)$,', $arg, $r)) action_editer_message_post_ajouter($r[1], $r[2]); elseif (preg_match(',^(\d+)\W:(\d+)$,', $arg, $r)) action_editer_message_post_vu($r[1], $r[2]); elseif (preg_match(',^(\d+)\W-(\d+)$,', $arg, $r)) action_editer_message_post_retirer($r[1], $r[2]); elseif (preg_match(',^(\d+)\W(\w+)$,', $arg, $r)) action_editer_message_post_envoyer($r[1], $r[2]); elseif (preg_match(',^(\w+)$,', $arg, $r)) action_editer_message_post_nouveau($arg); elseif (preg_match(',^(\w+)\W(\d+)$,', $arg, $r)) action_editer_message_post_nouveau($r[1], $r[2]); elseif (preg_match(',^(\w+)\W(\d+-\d+-\d+)$,', $arg, $r)) action_editer_message_post_nouveau($r[1], '', $r[2]); else spip_log("action_editer_message_dist $arg pas compris"); }
function action_instituer_langue_rubrique_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); $changer_lang = _request('changer_lang'); list($id_rubrique, $id_parent) = preg_split('/\W/', $arg); if ($changer_lang AND $id_rubrique>0 AND $GLOBALS['meta']['multi_rubriques'] == 'oui' AND ($GLOBALS['meta']['multi_secteurs'] == 'non' OR $id_parent == 0)) { if ($changer_lang != "herit") sql_updateq('spip_rubriques', array('lang'=>$changer_lang, 'langue_choisie'=>'oui'), "id_rubrique=$id_rubrique"); else { if ($id_parent == 0) $langue_parent = $GLOBALS['meta']['langue_site']; else { $langue_parent = sql_getfetsel("lang", "spip_rubriques", "id_rubrique=$id_parent"); } sql_updateq('spip_rubriques', array('lang'=>$langue_parent, 'langue_choisie'=>'non'), "id_rubrique=$id_rubrique"); } include_spip('inc/rubriques'); calculer_langues_rubriques(); // invalider les caches marques de cette rubrique include_spip('inc/invalideur'); suivre_invalideur("id='id_rubrique/$id_rubrique'"); } }
function inc_informer_dist($id, $col, $exclus, $rac, $type, $do = 'aff') { include_spip('inc/texte'); if ($type == "rubrique") { $row = sql_fetsel("titre, descriptif", "spip_rubriques", "id_rubrique = {$id}"); if ($row) { $titre = typo($row["titre"]); $descriptif = propre($row["descriptif"]); } else { $titre = _T('info_racine_site'); } } else { $titre = ''; } $res = ''; if ($type == "rubrique" and $GLOBALS['spip_display'] != 1 and isset($GLOBALS['meta']['image_process'])) { if ($GLOBALS['meta']['image_process'] != "non") { $chercher_logo = charger_fonction('chercher_logo', 'inc'); if ($res = $chercher_logo($id, 'id_rubrique', 'on')) { list($fid, $dir, $nom, $format) = $res; include_spip('inc/filtres_images_mini'); $res = image_reduire("<img src='{$fid}' alt='' />", 100, 48); if ($res) { $res = "<div style='float: " . $GLOBALS['spip_lang_right'] . "; margin-" . $GLOBALS['spip_lang_right'] . ": -5px; margin-top: -5px;'>{$res}</div>"; } } } } $rac = spip_htmlentities($rac); # ce lien provoque la selection (directe) de la rubrique cliquee # et l'affichage de son titre dans le bandeau $titre = strtr(str_replace("'", "’", str_replace('"', """, textebrut($titre))), "\n\r", " "); $js_func = $do . '_selection_titre'; return "<div style='display: none;'>" . "<input type='text' id='" . $rac . "_sel' value='{$id}' />" . "<input type='text' id='" . $rac . "_sel2' value=\"" . entites_html($titre) . "\" />" . "</div>" . "<div class='informer' style='padding: 5px; border-top: 0px;'>" . (!$res ? '' : $res) . "<p><b>" . safehtml($titre) . "</b></p>" . (!$descriptif ? '' : "<div>" . safehtml($descriptif) . "</div>") . "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>" . "<input type='submit' class='fondo' value='" . _T('bouton_choisir') . "'\nonclick=\"{$js_func}('{$titre}',{$id},'selection_rubrique','id_parent'); return false;\" />" . "</div>" . "</div>"; }
function action_spiplistes_journal () { global $connect_toutes_rubriques, $connect_login, $connect_statut, $spip_lang_rtl; // spiplistes_log("controle appel action"); if (!$connect_statut) { $auth = charger_fonction('auth', 'inc'); $auth = $auth(); } $securiser_action = charger_fonction('securiser_action', 'inc'); $args = $securiser_action(); $autoriser_lire = (autoriser('webmestre','','',$connect_id_auteur)); if($autoriser_lire) { $result = spiplistes_journal_lire(_SPIPLISTES_PREFIX); echo($result); exit(0); } }
function exec_description_outil_dist() { cs_log("INIT : exec_description_outil_dist() - Preparation du retour par Ajax (donnees transmises par GET)"); $script = _request('script'); $outil = _request('outil'); cs_log(" -- outil = $outil - script = $script"); cs_minipres(!preg_match('/^\w+$/', $script)); // ici on commence l'initialisation de tous les outils global $outils, $metas_vars, $metas_outils; include_spip('cout_utils'); // remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici); include_spip('config_outils'); cs_log(" -- exec_description_outil_dist() - Appel de config_outils.php : nb_outils = ".count($outils)); // installer les outils cs_installe_outils(); cs_log(" -- appel de charger_fonction('description_outil', 'inc') et de description_outil($outil, $script) :"); include_spip('inc/cs_outils'); $description_outil = charger_fonction('description_outil', 'inc'); $descrip = cs_initialisation_d_un_outil($outil, $description_outil, true); cs_init_plugins(); cs_log(" FIN : exec_description_outil_dist() - Appel maintenant de ajax_retour() pour afficher la ligne de configuration de l'outil"); include_spip('inc/texte'); include_spip('cout_fonctions'); // fonctions pour les pipelines ajax_retour(propre($descrip)); }
function plugins_afficher_nom_plugin_dist($url_page, $plug_file, $checked, $actif, $expose = false, $class_li = "item", $dir_plugins = _DIR_PLUGINS) { static $id_input = 0; static $versions = array(); $erreur = false; $s = ""; $get_infos = charger_fonction('get_infos', 'plugins'); $info = $get_infos($plug_file, false, $dir_plugins); // numerotons les occurences d'un meme prefix $versions[$info['prefix']] = isset($versions[$info['prefix']]) ? $versions[$info['prefix']] + 1 : ''; $id = $info['prefix'] . $versions[$info['prefix']]; $class = $class_li; $class .= $actif ? " actif" : ""; $class .= $expose ? " on" : ""; $erreur = isset($info['erreur']); if ($erreur) { $class .= " error"; } $s .= "<li id='{$id}' class='{$class}'>"; // Cartouche Resume $s .= "<div class='resume'>"; $prefix = $info['prefix']; $dir = "{$dir_plugins}{$plug_file}/lang/{$prefix}"; $desc = plugin_propre($info['description'], $dir); $url_stat = parametre_url($url_page, "plugin", $dir_plugins . $plug_file); $s .= "<strong class='nom'>" . typo($info['nom']) . "</strong>"; $s .= " <span class='version'>" . $info['version'] . "</span>"; $s .= " <span class='etat'> - " . plugin_etat_en_clair($info['etat']) . "</span>"; $s .= "</div>"; if ($erreur) { $s .= "<div class='erreur'>" . join('<br >', $info['erreur']) . "</div>"; } $s .= "</li>"; return $s; }
function action_supprimer_tous_orphelins() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); //on recupere le contexte pour ne supprimer les orphelins que de ce dernier list($media, $distant, $statut, $sanstitre) = explode('/', $arg); //critere sur le media if ($media) { $select = "media=" . sql_quote($media); } //critere sur le distant if ($distant) { $where[] = "distant=" . sql_quote($distant); } //critere sur le statut if ($statut) { $where[] = "statut REGEXP " . sql_quote("({$statut})"); } //critere sur le sanstitre if ($sanstitre) { $where[] = "titre=''"; } //on isole les orphelins $select = sql_get_select("DISTINCT id_document", "spip_documents_liens as oooo"); $cond = "spip_documents.id_document NOT IN ({$select})"; $where[] = $cond; $ids_doc_orphelins = sql_select("id_document", "spip_documents", $where); $supprimer_document = charger_fonction('supprimer_document', 'action'); while ($row = sql_fetch($ids_doc_orphelins)) { $supprimer_document($row['id_document']); // pour les orphelins du contexte, on traite avec la fonction existante } }
function install_etape_4_dist() { // creer le repertoire cache, qui sert partout ! if (!@file_exists(_DIR_CACHE)) { $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE); $rep = sous_repertoire(_DIR_TMP, $rep, true, true); } echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); echo info_progression_etape(4, 'etape_', 'install/'); echo "<div class='success'><b>" . _T('info_derniere_etape') . "</b><p>" . _T('info_utilisation_spip') . "</p></div>"; echo "<p>" . _T('plugin_info_plugins_dist_1', array('plugins_dist' => "<tt>" . joli_repertoire(_DIR_PLUGINS_DIST) . "</tt>")) . "</p>"; // installer les extensions include_spip('inc/plugin'); $afficher = charger_fonction("afficher_liste", 'plugins'); echo $afficher(self(), liste_plugin_files(_DIR_PLUGINS_DIST), array(), array(), _DIR_PLUGINS_DIST, 'afficher_nom_plugin'); plugin_installes_meta(); // mettre a jour si necessaire l'adresse du site // securite si on arrive plus a se loger include_spip('inc/config'); appliquer_adresse_site(''); // aller a la derniere etape qui clos l'install et redirige $suite = "\n<input type='hidden' name='etape' value='fin' />" . bouton_suivant(_T('login_espace_prive')); echo generer_form_ecrire('install', $suite); echo install_fin_html(); }
/** * Sauvegarder par morceaux * * @param string $arg */ function action_restaurer_dist($arg = null) { if (!$arg) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } $status_file = $arg; define('_DUMP_STATUS_FILE', $status_file); $status_file = _DIR_TMP . basename($status_file) . ".txt"; if (!lire_fichier($status_file, $status) or !($status = unserialize($status))) { include_spip('inc/headers'); echo redirige_formulaire(generer_url_ecrire("restaurer", 'status=' . _DUMP_STATUS_FILE, '', true, true)); } else { utiliser_langue_visiteur(); $archive = "<br />" . joli_repertoire($status['archive']); $action = _T('dump:info_restauration_sauvegarde', array('archive' => $archive)); $admin = charger_fonction('admin', 'inc'); echo $admin('restaurer', $action, "", true); } // forcer l'envoi du buffer par tous les moyens ! echo str_repeat("<br />\r\n", 256); while (@ob_get_level()) { @ob_flush(); @flush(); @ob_end_flush(); } }
/** * @param array $config * @param int $id_transaction * @param string $transaction_hash * @param array $options * @return array|string */ function presta_sips_payer_acte_dist($config, $id_transaction, $transaction_hash, $options = array()) { $call_request = charger_fonction('request', 'presta/sips/call'); $contexte = $call_request($id_transaction, $transaction_hash, $config); $contexte = array_merge($options, $contexte); return recuperer_fond('presta/sips/payer/acte', $contexte); }
/** * Exec de la page de destruction des tables de SPIP **/ function exec_base_delete_all_dist() { include_spip('inc/autoriser'); if (!autoriser('detruire')) { include_spip('inc/minipres'); echo minipres(); } else { include_spip('base/dump'); $res = base_lister_toutes_tables('', array(), array(), true); if (!$res) { include_spip('inc/minipres'); spip_log("Erreur base de donnees"); echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique') . "<p><tt>" . sql_errno() . " " . sql_error() . "</tt></p>"); } else { $res = base_saisie_tables('delete', $res); include_spip('inc/headers'); $res = "\n<ol style='text-align:left'><li>\n" . join("</li>\n<li>", $res) . '</li></ol>'; $admin = charger_fonction('admin', 'inc'); $res = $admin('delete_all', _T('titre_page_delete_all'), $res); if (!$res) { redirige_url_ecrire('install', ''); } else { echo $res; } } } }
/** * il faut avoir un id_transaction et un transaction_hash coherents * pour se premunir d'une tentative d'appel exterieur * * * @return array */ function presta_virement_call_response() { // recuperer la reponse en post et la decoder $id_transaction = _request('id_transaction'); $transaction_hash = _request('hash'); $mode = 'virement'; if (!($row = sql_fetsel('*', 'spip_commandes_transactions', 'id_transaction=' . intval($id_transaction)))) { spip_log("id_transaction {$id_transaction} non trouve", 'gratuit.' . _LOG_ERREUR); return array($id_transaction, false); } if ($transaction_hash != $row['transaction_hash']) { spip_log("id_transaction {$id_transaction}, hash {$transaction_hash} non conforme", 'gratuit.' . _LOG_ERREUR); return array($id_transaction, false); } if ($row['statut'] == 'ok') { spip_log("Check:Transaction {$id_transaction} deja validee", "virement"); return array($id_transaction, true); } // si pages publiques, c'est le client qui demande à payer par virement if (!test_espace_prive()) { $bank_recoit_notification = charger_fonction('recoit_notification', 'bank'); return bank_recoit_notification($id_transaction, $transaction_hash, $mode); //retourne $id_transaction,true } return array($id_transaction, false); }
/** * Un exec d'acces interdit * * @param string $message */ function exec_403_dist($message = '') { $exec = _request('exec'); $titre = "exec_{$exec}"; $navigation = ""; $extra = ""; if (!$message) { $message = _L("Vous n'avez pas le droit d'accéder à la page <b>@exec@</b>.", array('exec' => _request('exec'))); } $contenu = "<h1 class='grostitre'>" . _T('info_acces_interdit') . "</h1>" . $message; if (_request('var_zajax')) { include_spip('inc/actions'); ajax_retour($contenu); } else { include_spip('inc/presentation'); // alleger les inclusions avec un inc/presentation_mini $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page($titre); echo debut_gauche("403_{$exec}", true); echo recuperer_fond('prive/squelettes/navigation/dist', array()); echo pipeline('affiche_gauche', array('args' => array('exec' => '403', 'exec_erreur' => $exec), 'data' => '')); echo creer_colonne_droite("403", true); echo pipeline('affiche_droite', array('args' => array('exec' => '403', 'exec_erreur' => $exec), 'data' => '')); echo debut_droite("403", true); echo pipeline('affiche_milieu', array('args' => array('exec' => '403', 'exec_erreur' => $exec), 'data' => $contenu)); echo fin_gauche(), fin_page(); } }
/** * http://code.spip.net/@action_copier_local_post * * @param $id_document * @return bool|mixed|string */ function action_copier_local_post($id_document) { // Il faut la source du document pour le copier $row = sql_fetsel("mode,fichier, descriptif, credits", "spip_documents", "id_document={$id_document}"); $source = $row['fichier']; include_spip('inc/distant'); // pour 'copie_locale' $fichier = copie_locale($source); if ($fichier) { $fichier = _DIR_RACINE . $fichier; $files[] = array('tmp_name' => $fichier, 'name' => basename($fichier)); $ajouter_documents = charger_fonction('ajouter_documents', 'action'); spip_log("convertit doc {$id_document} en local: {$source} => {$fichier}"); $liste = array(); $ajouter_documents($id_document, $files, '', 0, $row['mode'], $liste); spip_unlink($fichier); // ajouter l'origine du document aux credits include_spip('action/editer_document'); document_modifier($id_document, array('credits' => ($row['credits'] ? $row['credits'] . ', ' : '') . $source)); return true; } else { spip_log("echec copie locale {$source}"); } return _T('medias:erreur_copie_fichier', array('nom' => $source)); }
/** * Installation/maj des tables petitions et signatures * * @param string $nom_meta_base_version * @param string $version_cible */ function petitions_upgrade($nom_meta_base_version, $version_cible) { // cas particulier : // si plugin pas installe mais que la table existe // considerer que c'est un upgrade depuis v 1.0.0 // pour gerer l'historique des installations SPIP <=2.1 if (!isset($GLOBALS['meta'][$nom_meta_base_version])) { $trouver_table = charger_fonction('trouver_table', 'base'); if ($desc = $trouver_table('spip_signatures') and isset($desc['field']['id_article'])) { ecrire_meta($nom_meta_base_version, '1.0.0'); } // si pas de table en base, on fera une simple creation de base } $maj = array(); $maj['create'] = array(array('maj_tables', array('spip_petitions', 'spip_signatures'))); $maj['1.1.0'] = array(array('sql_alter', "TABLE spip_petitions DROP PRIMARY KEY")); $maj['1.1.1'] = array(array('sql_alter', "TABLE spip_petitions ADD UNIQUE id_article (id_article)")); $maj['1.1.2'] = array(array('sql_alter', "TABLE spip_petitions ADD id_petition BIGINT(21) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST"), array('sql_alter', "TABLE spip_petitions ADD PRIMARY KEY (id_petition)")); $maj['1.1.3'] = array(array('sql_alter', "TABLE spip_petitions ADD statut VARCHAR (10) DEFAULT 'publie' NOT NULL")); $maj['1.1.4'] = array(array('sql_alter', "TABLE spip_signatures ADD id_petition bigint(21) DEFAULT '0' NOT NULL"), array('sql_alter', "TABLE spip_signatures ADD INDEX id_petition (id_petition)"), array('sql_updateq', 'spip_signatures', array('id_petition' => -1))); $maj['1.1.5'] = array(array('upgrade_index_signatures')); $maj['1.1.6'] = array(array('sql_alter', "TABLE spip_signatures DROP INDEX id_article"), array('sql_alter', "TABLE spip_signatures DROP id_article")); include_spip('base/upgrade'); maj_plugin($nom_meta_base_version, $version_cible, $maj); }
/** * Appeler le presta bancaire si celui-ci dispose d'une methode dans son API pour resilier un abonnement * @param string $abonne_uid * @param string $mode_paiement * @return bool * renvoie false si le presta bancaire indique un echec, true dans tous les autres cas */ function abos_resilier_notify_bank($abonne_uid, $mode_paiement = null) { if (!$mode_paiement) { $mode_paiement = sql_getfetsel("mode", "spip_transactions", "abo_uid=" . sql_quote($abonne_uid, '', 'text'), "", "id_transaction DESC"); } spip_log("abos/resilier_notify_bank abonne_uid={$abonne_uid} mode={$mode_paiement}", "abos_resil"); $ok = true; // notifier au presta bancaire si besoin if ($mode_paiement and $abonne_uid) { include_spip("inc/bank"); if (!($config = bank_config($mode_paiement, true)) or !isset($config['presta']) or !($presta = $config['presta'])) { spip_log("abos/resilier_notify_bank presta inconnu pour mode={$mode_paiement}", "abos_resil" . _LOG_ERREUR); } if ($presta and $presta_resilier = charger_fonction('resilier_abonnement', "presta/{$presta}/call", true)) { $ok = $presta_resilier($abonne_uid); if (!$ok) { spip_log("Resiliation abo " . $abonne_uid . " refuse par le prestataire", 'abos_resil' . _LOG_ERREUR); } } else { spip_log("abos/resilier_notify_bank : pas de methode resilier_abonnement pour le presta {$presta}", "abos_resil" . _LOG_INFO_IMPORTANTE); } if (!$ok) { bank_simple_call_resilier_abonnement($abonne_uid, $mode_paiement); // TODO ajouter un message a l'abonnement pour le feedback user spip_log("Envoi email de desabo " . $abonne_uid . " au webmestre", 'abos_resil' . _LOG_INFO_IMPORTANTE); // neanmoins, si plus d'echeance prevue, on peut finir // (cas d'un abos deja resilie fin de mois qu'on veut forcer a resilier immediatement) // TODO eventuel } } return $ok; }
function action_iextras_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); // droits include_spip('inc/autoriser'); if (!autoriser('configurer', 'iextra')) { include_spip('inc/minipres'); echo minipres(); exit; } @(list($arg, $id_extra_ou_table, $champ) = explode('/', $arg)); // actions possibles if (!in_array($arg, array('associer_champ', 'supprimer_champ'))) { include_spip('inc/minipres'); echo minipres(_T('iextras:erreur_action', array("action" => $arg))); exit; } // cas de l'association d'un champ existant if ($arg == 'associer_champ' and $table = $id_extra_ou_table and $champ) { $extra_id = action_associer_champ_sql_comme_champ_extra($table, $champ); } // cas de la suppression d'un champ existant if ($arg == 'supprimer_champ' and $table = $id_extra_ou_table and $champ) { action_supprimer_champ_sql($table, $champ); } }
function formulaires_editer_balade_traiter_dist($id_collection = 'new', $retour = '') { $message = array(); // récupérer le rang des articles de la balade et le mettre à jour $rangs = _request('rang'); foreach ($rangs as $rang => $id_article) { $rang = $rang + 1; $ok = sql_updateq('spip_collections_liens', array('rang' => intval($rang)), "objet='article' AND id_objet = {$id_article}"); } // éditer le gis associé if ($action_editer = charger_fonction("editer_gis", 'action', true)) { list($id, $err) = $action_editer(_request('id_gis')); } // ne pas polluer l'url de retour avec des paramètres inutiles set_request('id_gis'); set_request('id_objet'); // invalider le cache include_spip('inc/invalideur'); suivre_invalideur("id='gis/{$id}"); // rediriger sur l'url de retour passée en paramètre if ($retour) { include_spip('inc/headers'); $message['redirect'] = redirige_formulaire($retour); } return $message; }
/** * Contexte du formulaire * Mots-cles dans les forums : * Si la variable de personnalisation $afficher_groupe[] est definie * dans le fichier d'appel, et si la table de reference est OK, proposer * la liste des mots-cles * #FORMULAIRE_FORUM seul calcule (objet, id_objet) depuis la boucle parente * #FORMULAIRE_FORUM{#SELF} pour forcer l'url de retour * #FORMULAIRE_FORUM{#SELF, article, 3} pour forcer l'objet et son identifiant * http://code.spip.net/@balise_FORMULAIRE_FORUM * * @param Object $p * @return Object */ function balise_FORMULAIRE_FORUM($p) { /** * On recupere $objet et $id_objet depuis une boucle englobante si possible * Sinon, on essaie aussi de recuperer des id_xx dans l'URL qui pourraient indiquer * sur quoi le formulaire porte. * Enfin, on pourra aussi forcer objet et id_objet depuis l'appel du formulaire */ $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; $_id_objet = $p->boucles[$i_boucle]->primary; $_type = $p->boucles[$i_boucle]->id_table; /** * On essaye de trouver les forums en fonction de l'environnement * pour cela, on recupere l'ensemble des id_xxx possibles dans l'env */ $ids = forum_get_objets_depuis_env(); $ids = array_values($ids); $obtenir = array($_id_objet, 'id_forum', 'ajouter_mot', 'ajouter_groupe', 'afficher_texte'); if ($ids) { $obtenir = array_merge($obtenir, $ids); } $p = calculer_balise_dynamique($p, 'FORMULAIRE_FORUM', $obtenir, array("'{$_type}'", count($ids))); // Ajouter le code d'invalideur specifique aux forums include_spip('inc/invalideur'); if ($i = charger_fonction('code_invalideur_forums', '', true)) { $p->code = $i($p, $p->code); } return $p; }
function action_supprimer_adhcoti_dist() { $debug1 = "DEBUG plugin JR : action/supprimer_adhcoti.php - action_supprimer_adhcoti_dist - Pt01 - <br />"; echo "<br />", $debug1; adhclub_log("{$debug1}.", true); echo "id_coti= {$id_coti}.<br />"; adhclub_log("id_coti= {$id_coti}", true); echo "FIN ", $debug1; adhclub_log("{$debug1} FIN.", true); $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); $debug1 = "DEBUG plugin JR : action/supprimer_adhcoti.php - action_supprimer_adhcoti_dist - Pt12 - <br />"; echo "<br />", $debug1; adhclub_log("{$debug1}.", true); echo "id_coti= {$id_coti}.<br />"; adhclub_log("id_coti= {$id_coti}", true); echo "args= {$args}.<br />"; adhclub_log("args= {$args}", true); echo "FIN ", $debug1; adhclub_log("{$debug1} FIN.", true); if ($id_coti = intval($arg) and autoriser('supprimer', 'adhcoti', $id_coti)) { include_spip('action/editer_adhcoti'); adhclub_supprime_adhcoti($id_coti); } }
function action_factures_export_csv_mensuel_dist() { $securiser_action = charger_fonction("securiser_action", "inc"); $date = $securiser_action(); $t = strtotime($date); $date_debut = date('Y-m-01 00:00:00', $t); $t = strtotime('+1 month', strtotime($date_debut)); $t = strtotime('+5 day', $t); $date_fin = date('Y-m-01 00:00:00', $t); $entetes = array('ID', 'Date', 'No', 'Client', 'HT', 'TTC', 'Paye', 'Date paiement', 'Commande'); $factures = sql_allfetsel("id_facture,date,no_comptable,id_auteur,montant_ht,montant,montant_regle,date_paiement", "spip_factures", "date>=" . sql_quote($date_debut) . " AND date<" . sql_quote($date_fin), '', 'id_facture'); foreach ($factures as $k => $facture) { $factures[$k]['date'] = date('d/m/Y', strtotime($facture['date'])); $factures[$k]['date_paiement'] = date('d/m/Y', strtotime($facture['date_paiement'])); $nom = sql_getfetsel('nom', 'spip_auteurs', 'id_auteur=' . intval($facture['id_auteur'])); $factures[$k]['id_auteur'] = trim($nom . " #" . $facture['id_auteur']); $factures[$k]['commande'] = ''; if ($trans = sql_fetsel("*", "spip_transactions", "id_facture=" . intval($facture['id_facture'])) and $id_commande = intval($trans['id_commande'])) { $reference = sql_getfetsel('reference', 'spip_commandes', 'id_commande=' . intval($id_commande)); $factures[$k]['commande'] = trim($reference . " #" . $trans['id_commande']); } } $factures = array_map('array_values', $factures); $nom = $GLOBALS['meta']['nom_site'] . ' Factures ' . date('Y-m'); $exporter_csv = charger_fonction('exporter_csv', 'inc'); $exporter_csv($nom, $factures, ',', $entetes, true); }
function action_desinstaller_plugin_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); list($dir_plugins, $plugin) = explode("::", $arg); $dir_type = "_DIR_PLUGINS"; if (defined('_DIR_PLUGINS_SUPPL') and $dir_plugins == _DIR_PLUGINS_SUPPL) { $dir_type = "_DIR_PLUGINS_SUPPL"; } $installer_plugins = charger_fonction('installer', 'plugins'); $infos = $installer_plugins($plugin, 'uninstall', $dir_type); if ($infos and !$infos['install_test'][0]) { include_spip('inc/plugin'); ecrire_plugin_actifs(array($plugin), false, 'enleve'); $erreur = ''; } else { $erreur = 'erreur_plugin_desinstalation_echouee'; } if ($redirect = _request('redirect')) { include_spip('inc/headers'); if ($erreur) { $redirect = parametre_url($redirect, 'erreur', $erreur); } $redirect = str_replace('&', '&', $redirect); redirige_par_entete($redirect); } }
function exec_agenda_evenements_dist(){ /*$ajouter_id_article = intval(_request('ajouter_id_article')); $flag_editable = article_editable($ajouter_id_article);*/ /*$annee = intval(_request('annee')); $mois = intval(_request('mois')); $jour = intval(_request('jour')); $date = date("Y-m-d", time()); if ($annee&&$mois&&$jour) $date = date("Y-m-d", strtotime("$annee-$mois-$jour"));*/ $commencer_page = charger_fonction('commencer_page', 'inc'); $out = $commencer_page(_T('agenda:tous_les_evenements'), "agenda", "calendrier"); $out .= barre_onglets("calendrier", "agenda"); $contexte = array(); foreach($_GET as $key=>$val) $contexte[$key] = $val; $out .= debut_gauche("agenda",true); $out .= recuperer_fond("prive/navigation/agenda_evenements",$contexte); $out .= debut_droite('agenda',true); $out .= recuperer_fond("prive/contenu/agenda_evenements",$contexte); $out .= fin_gauche('agenda',true); $out .= fin_page(); echo $out; }
function action_zengarden_activer_theme_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); if (strncmp('defaut:', $arg, 7) == 0) { $dir_theme = _DIR_RACINE . substr($arg, 7); $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'effacer'), 'data' => true)); if ($flux) { include_spip('inc/meta'); effacer_meta("zengarden_theme"); } } elseif (strncmp('apercu:', $arg, 7) == 0) { $theme = substr($arg, 7); $dir_theme = _DIR_RACINE . $theme; if (is_dir($dir_theme)) { $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'apercevoir'), 'data' => true)); if ($flux) { include_spip('inc/cookie'); spip_setcookie('spip_zengarden_theme', $theme); } } } elseif (strncmp('activation:', $arg, 11) == 0) { $theme = substr($arg, 11); $dir_theme = _DIR_RACINE . $theme; if (is_dir($dir_theme)) { $flux = pipeline('zengarden_activer_theme', array('args' => array('dir' => $dir_theme, 'action' => 'activer'), 'data' => true)); if ($flux) { include_spip('inc/meta'); ecrire_meta("zengarden_theme", $theme); } } } }
/** * Plugin SkelEditor * Editeur de squelette en ligne * (c) 2007-2010 erational * Licence GPL-v3 * */ function action_skeleditor_new_from_dist(){ $securiser_action = charger_fonction('securiser_action','inc'); $arg = $securiser_action(); // $arg est le fichier que l'on veut personaliser if (strncmp($arg,_DIR_RACINE,strlen(_DIR_RACINE)!==0)) $arg = _DIR_RACINE.$arg; include_spip('inc/skeleditor'); $file = skeleditor_nom_copie($arg); if ($file){ include_spip('inc/skeleditor'); $path_base = skeleditor_path_editable(); list($chemin,) = skeleditor_cree_chemin($path_base, $file); if ($chemin){ $file = basename($file); if (!file_exists($chemin . $file)) { lire_fichier($arg, $contenu); ecrire_fichier($chemin . $file, skeleditor_commente_copie($arg,$contenu)); } if (file_exists($f=$chemin.$file)) $GLOBALS['redirect'] = parametre_url(_request('redirect'),'f',$f); } } }
/** * Enregistrer le reglement effectif d'une transaction * On peut passer ici 2 fois pour une meme transaction : * - lors de la notification serveur a serveur * - lors du retour de l'internaute par redirection depuis le presta bancaire * * @param int $id_transaction * @param array $options * string message * array row_prec * bool notifier * @return bool */ function bank_rembourser_transaction_dist($id_transaction, $options = array()) { $message = isset($options['message']) ? $options['message'] : ""; $notifier = isset($options['notifier']) ? $options['notifier'] : true; if (!isset($options['row_prec'])) { $options['row_prec'] = sql_fetsel("*", "spip_transactions", "id_transaction=" . intval($id_transaction)); } $row_prec = $options['row_prec']; // ne pas jouer 2 fois le traitement du remboursement if (!$row_prec or $row_prec['statut'] !== 'ok') { return false; } // et on le pose aussitot sql_updateq('spip_transactions', array('statut' => 'rembourse'), "id_transaction=" . intval($id_transaction)); $notifier = ($notifier and $row_prec['statut'] != 'rembourse'); $message = trim($row_prec['message'] . "\n" . trim($message)); // ensuite un pipeline de traitement, notification etc... $message = pipeline('bank_traiter_remboursement', array('args' => array('id_transaction' => $id_transaction, 'notifier' => $notifier, 'avant' => $row_prec, 'options' => $options), 'data' => $message)); sql_updateq("spip_transactions", array('message' => $message, 'finie' => 1), "id_transaction=" . intval($id_transaction)); // notifier aux admins avec un ticket caisse if ($notifier) { $bank_editer_ticket_admin = charger_fonction('bank_editer_ticket_admin', 'inc'); $bank_editer_ticket_admin($id_transaction, "REMBOURSEMENT Transaction"); } return true; }