/** * 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; }
/** * @param array $config * @param int $id_transaction * @param string $transaction_hash * @param array $options * @return array|string */ function presta_paypalexpress_payer_acte_dist($config, $id_transaction, $transaction_hash, $options = array()) { include_spip('presta/paypalexpress/inc/paypalexpress'); $contexte = array('id_transaction' => $id_transaction, 'transaction_hash' => $transaction_hash, 'url_confirm' => parametre_url(self(), 'confirm', 'oui'), 'sandbox' => paypalexpress_is_sandbox($config) ? ' ' : '', 'logo' => bank_trouver_logo('paypal', 'PAYPAL.gif'), 'config' => $config); $contexte = array_merge($options, $contexte); return recuperer_fond('presta/paypalexpress/payer/acte', $contexte); }
/** * 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); } } }
function player_affiche_config_form ($exec_page){ global $spip_lang_right, $spip_lang_left; if ($player = _request('player')) { ecrire_meta('player', $player); if(version_compare($GLOBALS['spip_version_code'],'1.9300','<')) { include_spip("inc/meta"); ecrire_metas(); } } $player_ = $GLOBALS['meta']['player']; $out = "" . debut_cadre_trait_couleur(_DIR_PLUGIN_PLAYER_IMAGES."player-son-24.png", true, "", "Player Audio") . "<form action='".generer_url_ecrire($exec_page)."' method='post' class='verdana2'><div>" . bouton_radio("player", "neoplayer", "Neolao player", $player_ == "neoplayer") . "<br />" . bouton_radio("player", "dewplayer", "Dew player", $player_ == "dewplayer") . "<br />" . bouton_radio("player", "pixplayer", "One pixel out player", $player_ == "pixplayer") . "<br />" . bouton_radio("player", "eraplayer", "Erational player", $player_ == "eraplayer") . "<div style='text-align:$spip_lang_right'><input type='submit' name='Valider' value='"._T('bouton_valider')."' class='fondo' /></div>" . "</div></form>" . fin_cadre_trait_couleur(true) ; return ($out); }
/** * Définir la liste des boutons du haut et de ses sous-menus * * On defini les boutons à mettre selon les droits de l'utilisateur * puis on balance le tout au pipeline "ajouter_menus" pour que des plugins * puissent y mettre leur grain de sel * * @param array $contexte * @param bool $icones Rechercher les icones * @param bool $autorise Ne renvoyer que les boutons autorisés * @return array */ function definir_barre_boutons($contexte = array(), $icones = true, $autorise = true) { include_spip('inc/autoriser'); $boutons_admin = array(); // les boutons du core, issus de prive/navigation.xml $liste_boutons = array(); // ajouter les boutons issus des plugin via plugin.xml if (function_exists('boutons_plugins') and is_array($liste_boutons_plugins = boutons_plugins())) { $liste_boutons =& $liste_boutons_plugins; } foreach ($liste_boutons as $id => $infos) { $parent = ""; // les boutons principaux ne sont pas soumis a autorisation if (!isset($infos['parent']) or !($parent = $infos['parent']) or !$autorise or autoriser('menu', "_{$id}", 0, null, array('contexte' => $contexte))) { if ($parent and $parent = preg_replace(',^bando_,', 'menu_', $parent) and isset($boutons_admin[$parent])) { if (!is_array($boutons_admin[$parent]->sousmenu)) { $boutons_admin[$parent]->sousmenu = array(); } $position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu); if ($position < 0) { $position = count($boutons_admin[$parent]->sousmenu) + 1 + $position; } $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position) + array($id => new Bouton(($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin[$parent]->sousmenu, $position, 100); } if (!$parent and !in_array($id, array('forum', 'statistiques_visites')) and (!$autorise or autoriser('menugrandeentree', "_{$id}", 0, null, array('contexte' => $contexte)))) { $position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin); $boutons_admin = array_slice($boutons_admin, 0, $position) + array($id => new Bouton(($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '', $infos['titre'], (isset($infos['action']) and $infos['action']) ? $infos['action'] : null, (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null)) + array_slice($boutons_admin, $position, 100); } } } return pipeline('ajouter_menus', $boutons_admin); }
/** * @param array $config * @param int $id_transaction * @param string $transaction_hash * @param array $options * @return array|string */ function presta_paypal_payer_acte_dist($config, $id_transaction, $transaction_hash, $options = array()) { include_spip('presta/paypal/inc/paypal'); $contexte = array('action' => paypal_url_serveur($config), 'url_return' => bank_url_api_retour($config, "response"), 'url_notify' => bank_url_api_retour($config, "autoresponse"), 'url_cancel' => bank_url_api_retour($config, "cancel"), 'id_transaction' => $id_transaction, 'transaction_hash' => $transaction_hash, 'sandbox' => paypal_is_sandbox($config), 'logo' => bank_trouver_logo('paypal', 'PAYPAL.gif'), 'config' => $config); $contexte = array_merge($options, $contexte); return recuperer_fond('presta/paypal/payer/acte', $contexte); }
/** * supprime/compte les elements listes d'un type donne * * @param nom $table * @param tableau $ids (si $id==-1, on vide/compte tout) * @param booleen $compter * @return array(nb objets, nb objets lies, ids trouves) */ function cs_corbeille_gerer($table, $ids=array(), $vider=false) { $params = cs_corbeille_table_infos($table); if (isset($params['table'])) $table = $params['table']; include_spip('base/abstract_sql'); $type = objet_type($table); $table_sql = table_objet_sql($type); $id_table = id_table_objet($type); if (!$params['statut']) return false; //echo "$type - $table_sql - $id_table - ",table_objet_sql($type),'<hr>'; // determine les index des elements a supprimer $ids = $ids===-1 ?array_map('reset',sql_allfetsel($id_table,$table_sql,'statut='.sql_quote($params['statut']))) :array_map('reset',sql_allfetsel($id_table,$table_sql,sql_in($id_table,$ids).' AND statut='.sql_quote($params['statut']))); if (!count($ids)) return array(0, 0, array()); // compte/supprime les elements definis par la liste des index if($vider) sql_delete($table_sql,sql_in($id_table,$ids)); $nb = count($ids); // compte/supprime des elements lies $nb_lies = 0; $f = $vider?'sql_delete':'sql_countsel'; if ($table_liee=$params['tableliee']) { $trouver_table = charger_fonction('trouver_table','base'); foreach($table_liee as $unetable) { $desc = $trouver_table($unetable); if (isset($desc['field'][$id_table])) $nb_lies += $f($unetable,sql_in($id_table,$ids)); elseif(isset($desc['field']['id_objet']) AND isset($desc['field']['objet'])) $nb_lies += $f($unetable,sql_in('id_objet',$ids)." AND objet=".sql_quote($type)); } } return array($nb, $vider?'-1':$nb_lies, $ids); }
/** * 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; } } } }
/** * http://doc.spip.org/@balise_FORMULAIRE_INSCRIPTION_stat * * [(#FORMULAIRE_INSCRIPTION{nom_inscription, #ID_RUBRIQUE})] * * @param array $args * args[0] un statut d'auteur (redacteur par defaut) * args[1] indique la rubrique eventuelle de proposition * @param array $context_compil * @return array|string */ function balise_FORMULAIRE_INSCRIPTION_stat($args, $context_compil) { list($mode, $id) = $args; include_spip('action/inscrire_auteur'); $mode = tester_statut_inscription($mode, $id); return $mode ? array($mode, $id) : ''; }
function recuperer_parametres_url(&$fond, $url) { global $contexte; // traiter les injections du type domaine.org/spip.php/cestnimportequoi/ou/encore/plus/rubrique23 if ($GLOBALS['profondeur_url'] > 0 and $fond == 'sommaire') { $fond = '404'; } /* * Le bloc qui suit sert a faciliter les transitions depuis * le mode 'urls-propres' vers les modes 'urls-standard' et 'url-html' * Il est inutile de le recopier si vous personnalisez vos URLs * et votre .htaccess */ // Si on est revenu en mode html, mais c'est une ancienne url_propre // on ne redirige pas, on assume le nouveau contexte (si possible) $url_propre = isset($_SERVER['REDIRECT_url_propre']) ? $_SERVER['REDIRECT_url_propre'] : (isset($_ENV['url_propre']) ? $_ENV['url_propre'] : ''); include_spip('inc/urls'); $objets = urls_liste_objets(); if ($url_propre and preg_match(",^({$objets}|type_urls|404)\$,", $fond)) { if ($GLOBALS['profondeur_url'] <= 0) { $urls_anciennes = charger_fonction('propres', 'urls'); } else { $urls_anciennes = charger_fonction('arbo', 'urls'); } $p = $urls_anciennes($url_propre, $fond, $contexte); $contexte = $p[0]; } else { if ($GLOBALS['profondeur_url'] <= 0 and preg_match(',[?/&](' . $objets . ')[=]?([0-9]+),', $url, $r)) { $fond = $r[1]; $contexte[id_table_objet($r[1])] = $r[2]; } } /* Fin compatibilite urls-page */ return; }
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); } } } }
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 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 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; }
/** * Lister les objets éditoriaux disponibles pour peupler une saisie * * @return array : un tableau qu'on peut utiliser comme paramètre * "datas" dans une saisie */ function lister_datas_objets_editoriaux() { include_spip('base/objets'); return array_map(function ($el) { return _T($el['texte_objets']); }, lister_tables_objets_sql()); }
/** * 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(); } }
/** * Envoi une requette de conversion a zencoder. * * @param int $id_document l'id du document original * @param int $id_objet */ function zencoder_new_job($id_document) { spip_log('start zencoder_new_job', 'zencoder'); $cwd = getcwd(); chdir(realpath(_DIR_ZENCODER_LIB)); require_once "Services/Zencoder.php"; chdir($cwd); include_spip('inc/config'); include_spip('inc/utils'); $api_key = lire_config('zencoder/api_key'); $document = generer_url_entite_absolue($id_document, 'document'); $url_notification = generer_url_action('zencoder_notification', 'id_document=' . $id_document, true, false); $clip_length = '10'; try { // Initialize the Services_Zencoder class $zencoder = new Services_Zencoder($api_key); // New Encoding Job $encoding_job = $zencoder->jobs->create(array("input" => $document, "outputs" => array(array("label" => "webm", "size" => "640x480", "format" => "webm", "notifications" => array("format" => "json", "url" => $url_notification, "clip_length" => $clip_length)), array("label" => "ogg", "format" => "ogg", "size" => "640x480", "notifications" => array("format" => "json", "url" => $url_notification, "clip_length" => $clip_length)), array("label" => "mp4 low", "size" => "640x480", "notifications" => array("format" => "json", "url" => $url_notification, "clip_length" => $clip_length))))); // Success if we got here spip_log('success- Job ID: ' . $encoding_job->id . ' Output ID:' . $encoding_job->outputs['web']->id, 'zencoder'); } catch (Services_Zencoder_Exception $e) { // If were here, an error occured spip_log('error: ' . print_r($e), 'zencoder'); } return; }
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_snippet_exporte(){ global $auteur_session; $arg = _request('arg'); $args = explode(":",$arg); $hash = _request('hash'); $id_auteur = $auteur_session['id_auteur']; $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; include_spip("inc/securiser_action"); if (verifier_action_auteur("snippet_exporte-$arg",$hash,$id_auteur)==TRUE) { $table = $args[0]; $id = $args[1]; $f = snippets_fond_exporter($table, false); if ($f) { include_spip('public/assembler'); $out = recuperer_fond($f,array('id'=>intval($id))); //$out = preg_replace(",\n\n[\s]*(?=\n),","",$out); $filename=str_replace(":","_",$arg); if (preg_match(",<titre>(.*)</titre>,Uims",$out,$regs)) $filename = preg_replace(',[^-_\w]+,', '_', trim(translitteration(textebrut(typo($regs[1]))))); $extension = "xml"; Header("Content-Type: text/xml; charset=".$GLOBALS['meta']['charset']); Header("Content-Disposition: attachment; filename=$filename.$extension"); Header("Content-Length: ".strlen($out)); echo $out; exit(); } } redirige_par_entete(str_replace("&","&",urldecode($redirect))); }
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 genie_clevermail_auto_ajout_abonnes_dist() { if ($autoListes = sql_select("lst_id, lst_name, lst_auto_subscribers, lst_auto_subscribers_mode", "spip_cm_lists", "lst_auto_subscribers != '' AND lst_auto_subscribers_updated < " . (time() - 60 * 60 * 24))) { include_spip('inc/distant'); while ($liste = sql_fetch($autoListes)) { if ($adresses = recuperer_page($liste['lst_auto_subscribers'])) { if (!clevermail_verification_adresses_email($adresses)) { // XXX : log en chaîne de langue spip_log('Le format des adresses e-mail ne semble pas bon dans le fichier distant d\'adresses de la liste « ' . $liste['lst_name'] . ' » (id=' . $liste['lst_id'] . ') : ' . $liste['lst_auto_subscribers'], 'clevermail'); } else { $retour = clevermail_abonnes_ajout(array($liste['lst_id']), intval($liste['lst_auto_subscribers_mode']), $adresses); sql_updateq("spip_cm_lists", array('lst_auto_subscribers_updated' => time()), "lst_id=" . $liste['lst_id']); // XXX : log en chaîne de langue $msg = 'Ajout automatique d\'abonnés à la liste « ' . $liste['lst_name'] . ' » (id=' . $liste['lst_id'] . ') à partir du fichier ' . $liste['lst_auto_subscribers'] . ' : '; if ($retour === false) { $msg .= _T('clevermail:aucun_nouvel_abonne'); } else { $msg .= $retour['nb_nouv'] > 0 ? $retour['nb_nouv'] . _T('clevermail:n_nouveaux_abonnes') : _T('clevermail:aucun_nouvel_abonne'); $msg .= $retour['nb_nouv'] > 0 && $retour['nb_maj'] > 0 ? _T('clevermail:nouveaux_abonnes_et') : ''; $msg .= $retour['nb_maj'] > 0 ? $retour['nb_maj'] . _T('clevermail:changements_mode_abonnement') : ''; spip_log($msg, 'clevermail'); } } } else { // XXX : log en chaîne de langue spip_log('Impossible de télécharger le fichier distant d\'adresses de la liste « ' . $liste['lst_name'] . ' » (id=' . $liste['lst_id'] . ') : ' . $liste['lst_auto_subscribers'], 'clevermail'); } } } return 1; }
/** * 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; }
/** * Envoi du Mail des nouveautés * * Ce mail est basé sur le squelette nouveautes.html * * La meta `dernier_envoi_neuf` permet de marquer la date du dernier envoi * et de determiner les nouveautes publiees depuis cette date * * @param int $t * @return int */ function genie_mail_dist($t) { $adresse_neuf = $GLOBALS['meta']['adresse_neuf']; $jours_neuf = $GLOBALS['meta']['jours_neuf']; $now = time(); if (!isset($GLOBALS['meta']['dernier_envoi_neuf'])) { ecrire_meta('dernier_envoi_neuf', date('Y-m-d H:i:s', $now - 3600 * 24 * $jours_neuf)); } $page = recuperer_fond('nouveautes', array('date' => $GLOBALS['meta']['dernier_envoi_neuf'], 'jours_neuf' => $jours_neuf), array('raw' => true)); if (strlen(trim($page['texte']))) { // recuperer les entetes envoyes par #HTTP_HEADER $headers = ""; if (isset($page['entetes']) and count($page['entetes'])) { foreach ($page['entetes'] as $k => $v) { $headers .= (strlen($v) ? "{$k}: {$v}" : $k) . "\n"; } } include_spip("inc/notifications"); notifications_envoyer_mails($adresse_neuf, $page['texte'], "", "", $headers); ecrire_meta('dernier_envoi_neuf', date('Y-m-d H:i:s', $now)); } else { spip_log("mail nouveautes : rien de neuf depuis {$jours_neuf} jours"); } return 1; }
/** * Calculs de paramètres de contexte automatiques pour la balise FORMULAIRE_ECRIRE_AUTEUR * * Retourne le contexte du formulaire uniquement si l'email de l'auteur * est valide, sinon rien (pas d'exécution/affichage du formulaire) * * @param array $args * Liste des arguments demandés obtenus du contexte (id_auteur, id_article, email) * @param array $context_compil * Tableau d'informations sur la compilation * @return array|string * - Liste (id_auteur, id_article, email) des paramètres du formulaire CVT * - chaîne vide sinon (erreur ou non affichage). */ function balise_FORMULAIRE_ECRIRE_AUTEUR_stat($args, $context_compil) { include_spip('inc/filtres'); // Pas d'id_auteur ni d'id_article ? Erreur de contexte $id = intval($args[1]); if (!$args[0] and !$id) { $msg = array('zbug_champ_hors_motif', array('champ' => 'FORMULAIRE_ECRIRE_AUTEUR', 'motif' => 'AUTEURS/ARTICLES')); erreur_squelette($msg, $context_compil); return ''; } // Si on est dans un contexte article, // sortir tous les mails des auteurs de l'article if (!$args[0] and $id) { $r = ''; $s = sql_allfetsel('email', 'spip_auteurs AS A LEFT JOIN spip_auteurs_liens AS L ON (A.id_auteur=L.id_auteur AND L.objet=\'article\')', "A.email != '' AND L.id_objet={$id}"); foreach ($s as $row) { if (email_valide($row['email'])) { $r .= ', ' . $row['email']; } } $args[2] = substr($r, 2); } // On ne peut pas ecrire a un auteur dont le mail n'est pas valide if (!$args[2] or !email_valide($args[2])) { return ''; } // OK return $args; }
/** * mise a jour des donnees si envoi via formulaire * * @link http://doc.spip.org/@enregistre_modif_plugin * @global array $GLOBALS['visiteur_session'] * @global array $GLOBALS['meta'] * @return void */ function enregistre_modif_plugin() { include_spip('inc/plugin'); // recuperer les plugins dans l'ordre des $_POST $test = array(); foreach (liste_plugin_files() as $file) { $test['s' . substr(md5($file), 0, 16)] = $file; } $plugin = array(); foreach ($_POST as $choix => $val) { if (isset($test[$choix]) && $val == 'O') { $plugin[] = $test[$choix]; } } spip_log("Changement des plugins actifs par l'auteur " . $GLOBALS['visiteur_session']['id_auteur'] . ": " . join(',', $plugin)); ecrire_plugin_actifs($plugin); // Chaque fois que l'on valide des plugins, on memorise la liste de ces plugins comme etant "interessants", avec un score initial, qui sera decremente a chaque tour : ainsi un plugin active pourra reter visible a l'ecran, jusqu'a ce qu'il tombe dans l'oubli. $plugins_interessants = @unserialize($GLOBALS['meta']['plugins_interessants']); if (!is_array($plugins_interessants)) { $plugins_interessants = array(); } $plugins_interessants2 = array(); foreach ($plugins_interessants as $plug => $score) { if ($score > 1) { $plugins_interessants2[$plug] = $score - 1; } } foreach ($plugin as $plug) { $plugins_interessants2[$plug] = 10; } // score initial ecrire_meta('plugins_interessants', serialize($plugins_interessants2)); }
function wha_check_offer_dist($id_abonnement) { $res = spip_query('SELECT * FROM spip_abonnements WHERE id_abonnement=' . intval($id_abonnement)); if (!($row = spip_fetch_array($res))) { return false; } if ($row['mode_paiement'] != 'wha' or !($uoid = $row['abonne_uid'])) { spip_log("wha_check_offer :Erreur : abonnement {$id_abonnement} n'a pas ete souscrit avec wha (ou pas d'uoid)", 'wha_abo_check'); return false; } if (!($confirm = $row['confirm']) or !($confirm = unserialize($confirm))) { spip_log("wha_check_offer :Erreur : abonnement {$id_abonnement} n'a pas d'url node enregistree", 'wha_abo_check'); return false; } $config = array('MERCHANT_ID' => $confirm['partner'], 'KEY_ID' => $confirm['key'], 'node' => $confirm['node']); $url_check = wha_url_check_abo($uoid, 'love', $config); include_spip('inc/distant'); $ack = @recuperer_page($url_check); spip_log($t = "wha_check_offer : reponse a {$url_check} : {$ack}", 'wha_abo_check'); if (!$ack or !($unsign = wha_unsign($ack)) or !($args = wha_extract_args(reset($unsign)))) { spip_log($t = "wha_check_offer : pas de reponse valide {$url_check} : {$ack}", 'wha_abo_check'); return null; } if (isset($args['c']) and $args['c'] == 'ack') { return true; } if (isset($args['e']) and in_array($args['e'], array(0, 1, 14, 15))) { return false; } return null; }
function balise_ECATALOGUE_COMPOSITE_QUANTITY_dyn($id_composite, $id_article) { if (!($id_composite = intval($id_composite)) || !($id_article = intval($id_article))) { return false; } include_spip('functions/pdk_common.php'); $cart = pdk_load_class('Alohacart', 'classes'); // If some exceptions are thrown - return empty value try { // If user changed number of this product, we will use this value if (!($quantity = $cart->GetCompositeProduct($id_composite, $id_article))) { //var_Dump($quantity); $composite_article_mdl = pdk_load_class('CompositeArticleModel', 'classes'); $row = $composite_article_mdl->select("id_composite=" . $id_composite . " AND id_article=" . $id_article); if (isset($row[0]) && isset($row[0]["quantity"])) { $quantity = $row[0]["quantity"]; } else { $quantity = ''; } } } catch (Exception $e) { $quantity = ''; } //$product = $cart->GetProduct($id_composite); //if ($product) // $quantity = $quantity * $product; return array('balise/ecatalogue_composite_quantity', 0, array('quantity' => $quantity)); }
/** * Modifier la langue d'un objet * * @param string $objet * @param int $id * @param int $id_rubrique * @param string $changer_lang * @return string */ function action_instituer_langue_objet_dist($objet, $id, $id_rubrique, $changer_lang) { if ($changer_lang) { $table_objet_sql = table_objet_sql($objet); $id_table_objet = id_table_objet($objet); if ($changer_lang != "herit") { sql_updateq($table_objet_sql, array('lang' => $changer_lang, 'langue_choisie' => 'oui'), "{$id_table_objet}=" . intval($id)); include_spip('inc/rubriques'); if ($table_objet_sql == 'spip_rubriques') { calculer_langues_rubriques(); } $langues = calculer_langues_utilisees(); ecrire_meta('langues_utilisees', $langues); } else { $langue_parent = sql_getfetsel("lang", "spip_rubriques", "id_rubrique=" . intval($id_rubrique)); if (!$langue_parent) { $langue_parent = $GLOBALS['meta']['langue_site']; } sql_updateq($table_objet_sql, array('lang' => $langue_parent, 'langue_choisie' => 'non'), "{$id_table_objet}=" . intval($id)); $changer_lang = $langue_parent; if ($table_objet_sql == 'spip_rubriques') { include_spip('inc/rubriques'); calculer_langues_rubriques(); } } } return $changer_lang; }
/** * 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)); }