/** * Plugin SkelEditor * Editeur de squelette en ligne * (c) 2007-2010 erational * Licence GPL-v3 * */ function action_skeleditor_ul_dist(){ $securiser_action = charger_fonction('securiser_action','inc'); $file_name = $securiser_action(); if (autoriser('upload','squelette',$file_name)){ // FILES request ? if (isset($_FILES['upf'])) { // upload file ? $tmp_name = $_FILES['upf']['tmp_name']; if (isset($_POST['target'])) { $target = ($_POST['target'])."/".$_FILES['upf']['name']; // security if (check_file_allowed($target,$files_editable,true)) { // security $_GET['f'] = $target; $_GET['operation'] = 'preview'; if (file_exists($target)) { $log = "<span style='color:red'>"._T('skeleditor:erreur_overwrite')."</span>"; } else { $ok = @copy($tmp_name, $target); if (!$ok) $ok = @move_uploaded_file($tmp_name, $target); if (!$ok) $log = "<span style='color:red'>"._T('skeleditor:erreur_droits')."</span>"; else $log = "<span style='color:green'>"._T('skeleditor:fichier_upload_ok')."</span>"; } } else { $log = "<span style='color:red'>"._T('skeleditor:erreur_sansgene')."</span>"; } } } } }
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_importer_sites_charger_dist() { if (!autoriser('importer', '_sites')) { return false; } return array('fichier_import' => 0, 'id_parent' => 0, 'importer_statut_publie' => 0, 'importer_les_tags' => 1); }
/** * Preselectionner la rubrique lors de la creation * desactive par defaut suite a remontee utilisateur mais activable par define * ou surchargeable * * @param string $objet * @param array $row * @return string */ function inc_preselectionner_parent_nouvel_objet_dist($objet, $row) { if (!_AUTO_SELECTION_RUBRIQUE) { return ''; } if (!isset($row['id_rubrique'])) { return ''; } $id_rubrique = ''; if ($GLOBALS['connect_id_rubrique']) { // si admin restreint : sa rubrique $id_rubrique = $GLOBALS['connect_id_rubrique'][0]; } else { // sinon la derniere rubrique cree $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "", "", "id_rubrique DESC", "0,1"); $id_rubrique = $row_rub['id_rubrique']; } // si le choix ne convient pas, on cherche dans un secteur if (!autoriser('creer' . $objet . 'dans', 'rubrique', $id_rubrique)) { $id_rubrique = ''; // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises $res = sql_select("id_rubrique", "spip_rubriques", "id_parent=0"); while (!$id_rubrique and $row_rub = sql_fetch($res)) { if (autoriser('creer' . $objet . 'dans', 'rubrique', $row_rub['id_rubrique'])) { $id_rubrique = $row_rub['id_rubrique']; } } } return $id_rubrique; }
/** * 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; } } } }
/** * Filtrer par autorisation les saisies transmises * * Chacune des saisies est parcourue et si le visiteur n'a pas l'autorisation * de la voir, elle est enlevée de la liste. * La fonction ne retourne donc que la liste des saisies que peut voir * la personne. * * @param string $faire * Type d'autorisation testée : 'voir', 'modifier' * @param string $quoi * Type d'objet tel que 'article' * @param array $saisies * Liste des saisies à filtrer * @param array $args * Arguments pouvant être utiles à l'autorisation * @return array * Liste des saisies filtrées **/ function champs_extras_autorisation($faire, $quoi='', $saisies=array(), $args=array()) { if (!$saisies) return array(); include_spip('inc/autoriser'); foreach ($saisies as $cle=>$saisie) { $id = isset($args['id']) ? $args['id'] : $args['id_objet']; if (!autoriser($faire . 'extra', $quoi, $id, '', array( 'type' => $quoi, 'id_objet' => $id, 'contexte' => isset($args['contexte']) ? $args['contexte'] : array(), 'table' => table_objet_sql($quoi), 'saisie' => $saisie, 'champ' => $saisie['options']['nom'], ))) { // on n'est pas autorise unset($saisies[$cle]); } else { // on est autorise // on teste les sous-elements if (isset($saisie['saisies']) and $saisie['saisies']) { $saisies['saisies'] = champs_extras_autorisation($faire, $quoi, $saisie['saisies'], $args); } } } return $saisies; }
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_import_all_args($archive) { if ($archive) { // On arrive ici en debut d'operation // Est-ce une fusion ou un ecrasement ? $insert = _request('insertion'); if (!$insert AND !autoriser('detruire')) export_all_abort(); $dir = import_queldir(); $_POST['dir'] = $dir; // voir si un message d'avertissement est necessaire $commentaire = verifier_sauvegarde($dir . $archive); } else { // sinon, si on a bien la meta qui donne l'etat d'avancement // on est en cours d'operation // Tester si l'archive est toujous la: // ca sert pour forcer a sortir d'une restauration inachevee if (!isset($GLOBALS['meta']['import_all']) OR (!$request = @unserialize($GLOBALS['meta']['import_all'])) OR (!is_readable($request['dir'] . $request['archive']))) { // on ne sait pas quoi importer, il faut sortir de la export_all_abort(); } $archive = $request['archive']; $insert = $request['insertion']; $commentaire = ''; } $action = _T($insert ? 'info_restauration_sauvegarde_insert' : 'info_restauration_sauvegarde', array('archive' => $archive)); $admin = charger_fonction('admin', 'inc'); echo $admin('import_all', $action, $commentaire, !$insert); }
/** * Action de mise à jour des descriptions d'un dépot * * @return array * Liste identifiant du dépot, texte d'erreur éventuel **/ function action_editer_depot_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); // Verification des autorisations if (!autoriser('webmestre')) { include_spip('inc/minipres'); echo minipres(); exit; } // Le depot n'est jamais cree par une edition mais via le formulaire ajouter_depot // On est toujours en presence d'une mise a jour pour cette action, l'id_depot // doit donc etre renseigne sinon c'est une erreur if ($id_depot = intval($arg)) { // On teste si l'auteur est connecte. Si non on renvoie sur le formulaire login $id_auteur = $GLOBALS['visiteur_session']['id_auteur']; if (!$id_auteur) { include_spip('inc/headers'); redirige_url_ecrire(); } // On met a jour le depot avec les saisies if (sql_updateq('spip_depots', array('titre' => _request('titre'), 'descriptif' => _request('descriptif'), 'type' => _request('type')), 'id_depot=' . sql_quote($id_depot))) { } // Enregistre l'envoi dans la BD // Dans le cas du depot rien n'est fait actuellement, on garde cette fonction // par souci de coherence avec les autres editions d'objet et pour usage futur $err = depots_set($id_depot); if (!$err) { spip_log("ACTION MODIFIER DEPOT (manuel) : id_depot = " . $id_depot, 'svp_actions.' . _LOG_INFO); } } return array($id_depot, $err); }
/** * definir la liste des boutons du haut et de ses sous-menus * On defini les boutons a metrtre 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 autorises * @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 $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'))) { $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); }
function affiche_controleur($class, $c=null) { $return = array('$erreur'=>''); if (preg_match(_PREG_CRAYON, $class, $regs)) { list(,$nomcrayon,$type,$champ,$id) = $regs; $regs[] = $class; // A-t-on le droit de crayonner ? spip_log("autoriser('crayonner', $type, $id, NULL, array('modele'=>$champ)","crayons_distant"); if (!autoriser('crayonner',$type, $id, NULL, array('modele'=>$champ))) { $return['$erreur'] = "$type $id: " . _U('crayons:non_autorise'); } else { $f = charger_fonction($type.'_'.$champ, 'controleurs', true) OR $f = charger_fonction($champ, 'controleurs', true) OR $f = charger_fonction($type, 'controleurs', true) OR $f = 'controleur_dist'; list($html,$status) = $f($regs, $c); if ($status) { $return['$erreur'] = $html; } else { $return['$html'] = $html; } } } else { $return['$erreur'] = _U('crayons:donnees_mal_formatees'); } return $return; }
function action_supprimer_url_dist($arg = null) { if (is_null($arg)) { // Rien a faire ici pour le moment $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } if (strncmp($arg, "-1-", 3) == 0) { $id_parent = -1; $url = substr($arg, 3); } else { $arg = explode('-', $arg); $id_parent = array_shift($arg); $url = implode('-', $arg); } $where = 'id_parent=' . intval($id_parent) . " AND url=" . sql_quote($url); if ($row = sql_fetsel('*', 'spip_urls', $where)) { if (autoriser('modifierurl', $row['type'], $row['id_objet'])) { sql_delete('spip_urls', $where); } else { spip_log('supprimer sans autorisation l\'URL ' . $id_parent . "://" . $url, "urls." . _LOG_ERREUR); } } else { spip_log('Impossible de supprimer une URL inconnue ' . $id_parent . "://" . $url, "urls." . _LOG_INFO_IMPORTANTE); } }
/** * il faut avoir un id_transaction et un transaction_hash coherents * pour se premunir d'une tentative d'appel exterieur * * * @return array */ function presta_cheque_call_response_dist() { // recuperer la reponse en post et la decoder $id_transaction = _request('id_transaction'); $transaction_hash = _request('hash'); if (!($row = sql_fetsel('*', 'spip_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); } // l'autorisation refere l'id_auteur et le nom de celui qui accepte le cheque $autorisation = $GLOBALS['visiteur_session']['id_auteur'] . "/" . $GLOBALS['visiteur_session']['nom']; include_spip("inc/autoriser"); if (!autoriser('encaissercheque', 'transaction', $id_transaction)) { spip_log("id_transaction {$id_transaction}, tentative d'encaisser un cheque par auteur #{$autorisation} pas autorise", 'cheque.' . _LOG_CRITIQUE); return array($id_transaction, false); } // OK, on peut accepter le reglement sql_update("spip_transactions", array("mode" => sql_quote('cheque'), "autorisation_id" => sql_quote($autorisation), "montant_regle" => 'montant', "date_paiement" => sql_quote(date('Y-m-d H:i:s')), "statut" => sql_quote('ok'), "reglee" => sql_quote('oui')), "id_transaction=" . intval($id_transaction)); spip_log("cheque_response : id_transaction {$id_transaction}, reglee", 'cheque'); $regler_transaction = charger_fonction('regler_transaction', 'bank'); $regler_transaction($id_transaction, "", $row); return array($id_transaction, true); }
/** * Telecharger un dump quand on est webmestre * * @param string $arg */ function action_telecharger_dump_dist($arg = null) { if (!$arg) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } $file = dump_repertoire() . basename($arg, '.sqlite') . '.sqlite'; if (file_exists($file) and autoriser('webmestre')) { $f = basename($file); // ce content-type est necessaire pour eviter des corruptions de zip dans ie6 header('Content-Type: application/octet-stream'); header("Content-Disposition: attachment; filename=\"{$f}\";"); header("Content-Transfer-Encoding: binary"); // fix for IE catching or PHP bug issue header("Pragma: public"); header("Expires: 0"); // set expiration time header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); if ($cl = filesize($file)) { header("Content-Length: " . $cl); } readfile($file); } else { http_status(404); include_spip('inc/minipres'); echo minipres(_T('erreur') . ' 404', _T('info_acces_interdit')); } // et on finit comme ca d'un coup exit; }
function formulaires_editer_message_charger_dist($id_message = 'new', $type = 'message', $retour = '', $accepter_email = 'oui', $destinataires = '', $titre = '', $texte = '') { include_spip('inc/autoriser'); if (!intval($id_message) and !autoriser('envoyermessage', $type) or intval($id_message) and !autoriser('modifier', 'message', $id_message)) { return false; } $valeurs = formulaires_editer_objet_charger('message', $id_message, 0, 0, $retour, ''); // les destinataires sont stockes en chaine separe par une virgule dans la base if (strlen($valeurs['destinataires'])) { $valeurs['destinataires'] = explode(",", $valeurs['destinataires']); } if (!intval($id_message)) { $valeurs['type'] = $type; $valeurs['destinataires'] = $destinataires ? explode(",", $destinataires) : array(); $valeurs['titre'] = $titre; $valeurs['texte'] = $texte; $t = time(); $valeurs["date_heure"] = date('Y-m-d H:i:00', $t); $valeurs["date_fin"] = date('Y-m-d H:i:00', $t + 3600); $valeurs["rv"] = ""; } // dispatcher date et heure list($valeurs["date_debut"], $valeurs["heure_debut"]) = explode(' ', date('d/m/Y H:i', strtotime($valeurs["date_heure"]))); list($valeurs["date_fin"], $valeurs["heure_fin"]) = explode(' ', date('d/m/Y H:i', strtotime($valeurs["date_fin"]))); if (in_array($valeurs['type'], array('pb', 'affich'))) { $valeurs['_destiner'] = ''; } else { $valeurs['_destiner'] = ' '; } return $valeurs; }
function formulaires_exporter_sites_charger_dist() { if (!autoriser('exporter', '_sites')) { return false; } return array('id_parent' => 0, 'exporter_publie_seulement' => 0, 'exporter_avec_mots_cles' => 1); }
/** * Generer l'url d'un document dans l'espace public, * fonction du statut du document * * @param int $id * @param string $args * @param string $ancre * @param string $public * @param string $connect * @return string * * http://doc.spip.org/@generer_url_ecrire_document */ function urls_generer_url_document_dist($id, $args = '', $ancre = '', $public = null, $connect = '') { include_spip('inc/autoriser'); include_spip('inc/documents'); if (!autoriser('voir', 'document', $id)) { return ''; } $r = sql_fetsel("fichier,distant", "spip_documents", "id_document=" . intval($id)); if (!$r) { return ''; } $f = $r['fichier']; if ($r['distant'] == 'oui') { return $f; } // Si droit de voir tous les docs, pas seulement celui-ci // il est inutilement couteux de rajouter une protection $r = autoriser('voir', 'document'); if ($r and $r !== 'htaccess') { return get_spip_doc($f); } include_spip('inc/securiser_action'); // cette url doit etre publique ! $cle = calculer_cle_action($id . ',' . $f); // renvoyer une url plus ou moins jolie if ($GLOBALS['meta']['creer_htaccess']) { return _DIR_RACINE . "docrestreint.api/{$id}/{$cle}/{$f}"; } else { return get_spip_doc($f) . "?{$id}/{$cle}"; } }
function exec_statistiques_lang_dist() { if (!autoriser('voirstats')) { include_spip('inc/minipres'); echo minipres(); } else statistiques_lang_ok(); }
/** * Action de mise à jour en base de données de la liste des plugins * d'un ou de tous les dépots */ function action_actualiser_depot_dist() { // Securisation: aucun argument attendu $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); // Verification des autorisations if (!autoriser('webmestre')) { include_spip('inc/minipres'); echo minipres(); exit; } // Actualisation des plugins du depot ou de tous les plugins suivant l'argument de l'action // Le depot lui-meme n'est mis a jour que partiellement via le fichier XML une fois que // la premiere insertion a ete effectuee. En effet, seules les infos non editables dans le prive // peuvent etre actualisees lors de cette action include_spip('inc/svp_depoter_distant'); if ($arg === 'tout') { if ($ids_depots = sql_allfetsel('id_depot', 'spip_depots')) { $ids_depots = array_map('reset', $ids_depots); foreach ($ids_depots as $_id_depot) { svp_actualiser_depot($_id_depot); } // On consigne l'action spip_log("ACTION ACTUALISER TOUS LES DEPOTS (manuel)", 'svp_actions.' . _LOG_INFO); } } else { if ($id_depot = intval($arg)) { svp_actualiser_depot($id_depot); // On consigne l'action spip_log("ACTION ACTUALISER DEPOT (manuel) : id_depot = " . $id_depot, 'svp_actions.' . _LOG_INFO); } } }
function exec_valider_xml_dist() { if (!autoriser('sauvegarder')) { include_spip('inc/minipres'); echo minipres(); } else valider_xml_ok(_request('var_url'), _request('ext'), intval(_request('limit')), _request('recur')); }
/** * Dissocier un document * * @param string $arg * fournit les arguments de la fonction dissocier_document * sous la forme `$id_objet-$objet-$document-suppr-safe` * * - 4eme arg : suppr = true, false sinon * - 5eme arg : safe = true, false sinon * * @return void */ function action_dissocier_document_dist($arg = null) { if (is_null($arg)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } // attention au cas ou id_objet est negatif ! if (strncmp($arg, '-', 1) == 0) { $arg = explode('-', substr($arg, 1)); list($id_objet, $objet, $document) = $arg; $id_objet = -$id_objet; } else { $arg = explode('-', $arg); list($id_objet, $objet, $document) = $arg; } $suppr = $check = false; if (count($arg) > 3 and $arg[3] == 'suppr') { $suppr = true; } if (count($arg) > 4 and $arg[4] == 'safe') { $check = true; } if ($id_objet = intval($id_objet) and ($id_objet < 0 and $id_objet == -$GLOBALS['visiteur_session']['id_auteur'] or autoriser('dissocierdocuments', $objet, $id_objet))) { dissocier_document($document, $objet, $id_objet, $suppr, $check); } else { spip_log("Interdit de modifier {$objet} {$id_objet}", "spip"); } }
function exec_config_lang_dist() { if (!autoriser('configurer', 'lang')) { include_spip('inc/minipres'); echo minipres(); } else { $config = charger_fonction('config', 'inc'); $config(); pipeline('exec_init',array('args'=>array('exec'=>'config_lang'),'data'=>'')); $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('titre_page_config_contenu'), "configuration", "langues"); echo debut_gauche('', true); echo debut_droite('', true); echo "<br /><div style='text-align: center'>", gros_titre(_T('info_langues'), '', false), '</div><br />', barre_onglets("config_lang", "langues"), '<br />'; $langue = charger_fonction('langue', 'configuration'); echo $langue(); $transcodeur = charger_fonction('transcodeur', 'configuration'); echo $transcodeur(); echo fin_gauche(), fin_page(); } }
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_configurer_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); # ceinture & bretelles, a priori le test dans exec_configurer # suffit a empecher d'obtenir un hash qui passe le test ci-dessus if(!autoriser('configurer', _request('configuration'))) { include_spip('inc/minipres'); echo minipres(_T('info_acces_interdit')); exit; } $r = rawurldecode(_request('redirect')); $r = parametre_url($r, 'configuration', $arg,"&"); appliquer_modifs_config(); // Cette globale est fixee par appliquer_modifs_config(); // c'est un message a afficher dans l'exec de retour (relayeur si comme ici on est en ajax) if ($arg == 'relayeur') $r = parametre_url($r, 'retour_proxy', $GLOBALS['retour_proxy'],"&"); else if ($arg == 'langue') { include_spip('inc/rubriques'); calculer_langues_rubriques(); } if (_request('envoi_now')) cron(0, array('mail' => -1)); redirige_par_entete($r); }
function inc_petitionner_dist($id_article, $script, $args, $ajax=false) { global $spip_lang_right; $petition = sql_fetsel("*", "spip_petitions", "id_article=$id_article"); if (!autoriser('modererpetition', 'article', $id_article)) return petitionner_decompte($id_article, $petition); $choix = petitionner_choisir($petition); if ($petition) { $res = $choix . petitionner_decompte($id_article, $petition) . petitionner_params($petition) . petitionner_message($petition); $class = ''; } else { $res = $choix; $class = $ajax ? '' : ' visible_au_chargement'; } $atts = " class='$class' style='float: $spip_lang_right;' id='valider_petition'"; $res = ajax_action_post('petitionner', $id_article, $script, $args, $res,_T('bouton_changer'), $atts); return ajax_action_greffe("petitionner", $id_article, $res); }
function action_autoriser_dist() { $arg = intval(_request('arg')); if (!autoriser('voir', 'document', $arg) or !($row = sql_fetsel("fichier", "spip_documents", "id_document=" . intval($arg))) or !($file = $row['fichier']) or !file_exists($file)) { spip_log("Acces refuse (restreint) au document " . $arg . ': ' . $file); redirige_par_entete('./?page=404'); } else { if (!function_exists('mime_content_type')) { // http://doc.spip.org/@mime_content_type function mime_content_type($f) { preg_match("/\\.(\\w+)/", $f, $r); return $r[1]; } } $ct = mime_content_type($file); $cl = filesize($file); $filename = basename($file); header("Content-Type: " . $ct); header("Content-Disposition: attachment; filename=\"" . $filename . "\";"); if ($dcc) { header("Content-Description: " . $dcc); } if ($cl) { header("Content-Length: " . $cl); } header("Content-Transfer-Encoding: binary"); readfile($file); } }
/** * Page d'affichage des résultats de validation XML selon une DTD * * - l'argument var_url peut indiquer un fichier ou un repertoire * - l'argument ext peut valoir "php" ou "html" * -- Si "php", le script est execute et la page valide * -- Si "html", on suppose que c'est un squelette dont on devine les args * en cherchant les occurrences de Pile[0]. * * @example * ``` * ecrire?exec=valider_xml&var_url=exec&ext=php pour tester l'espace prive * ecrire?exec=valider_xml&var_url=../squelettes-dist&ext=html pour le public * ``` * * @uses valider_xml_ok() **/ function exec_valider_xml_dist() { if (!autoriser('sauvegarder')) { include_spip('inc/minipres'); echo minipres(); } else { $erreur = ""; // verifier que les var de l'URL sont conformes avant d'appeler la fonction $url = trim(_request('var_url')); if (strncmp($url, '/', 1) == 0) { $erreur = 'Chemin absolu interdit pour var_url'; } // on a pas le droit de remonter plus de 1 fois dans le path (pas 2 occurences de ../) if (($p = strpos($url, '../')) !== false and strpos($url, '../', $p + 3) !== false) { $erreur = 'Interdit de remonter en dehors de la racine'; } $ext = trim(_request('ext')); $ext = ltrim($ext, '.'); // precaution if (preg_match('/\\W/', $ext)) { $erreur = 'Extension invalide'; } if ($erreur) { include_spip('inc/minipres'); echo minipres($erreur); } else { valider_xml_ok($url, $ext, intval(_request('limit')), _request('recur')); } } }
function vertebres_styliser($flux) { // si pas de squelette trouve, // on verifie si on demande une vue de table if (!$squelette = $flux['data']) { $ext = $flux['args']['ext']; $fond = $flux['args']['fond']; $connect = $flux['args']['connect']; // Si pas de squelette regarder si c'est une table // et si l'on a la permission de l'afficher $trouver_table = charger_fonction('trouver_table', 'base'); if (preg_match('/^table:(.*)$/', $fond, $r) AND $table = $trouver_table($r[1], $connect) AND include_spip('inc/autoriser') AND autoriser('webmestre') ) { $fond = $r[1]; $base = _DIR_TMP . 'table_' . $fond . ".$ext"; if (!file_exists($base) OR $GLOBALS['var_mode']) { $vertebrer = charger_fonction('vertebrer', 'public'); ecrire_fichier($base, $vertebrer($table)); } // sauver les changements $flux['data'] = _DIR_TMP . 'table_' . $fond; } } return $flux; }
function formulaires_editer_zone_traiter_dist($id_zone = 'new', $retour = '', $associer_objet = '', $config_fonc = 'zones_edit_config', $row = array(), $hidden = '') { if (_request('publique') !== 'oui') { set_request('publique', 'non'); } if (_request('privee') !== 'oui') { set_request('privee', 'non'); } $res = formulaires_editer_objet_traiter('zone', $id_zone, 0, 0, $retour, $config_fonc, $row, $hidden); if ($retour and $res['id_zone']) { $res['redirect'] = parametre_url($retour, 'id_zone', $res['id_zone']); } // Un lien auteur a prendre en compte ? if ($associer_objet and $id_zone = $res['id_zone']) { $objet = ''; if (preg_match(',^\\w+\\|[0-9]+$,', $associer_objet)) { list($objet, $id_objet) = explode('|', $associer_objet); } if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) { zone_lier($id_zone, $objet, $id_objet); if (isset($res['redirect'])) { $res['redirect'] = parametre_url($res['redirect'], "id_lien_ajoute", $id_zone, '&'); } } } return $res; }
function info_maj_spip(){ if (!autoriser('webmestre')) return ""; // derniere version de SPIP $maj = $GLOBALS['meta']['info_maj_spip']; if (!$maj) return ""; $maj = explode('|',$maj); // c'est une ancienne notif, on a fait la maj depuis ! if ($GLOBALS['spip_version_branche']!==array_shift($maj)) { // compat_maj_spip(true); return ""; } // derniere version de SPIP 2.?.? $maj = implode('|',$maj); if (strncmp($maj,"<a",2)==0) $maj = extraire_attribut ($maj, 'title'); $lien = "http://www.spip.net/".$GLOBALS['spip_lang']."_download"; $maj = _T('couteau:maj_rev_ok',array('revision'=>$maj, 'url'=>$lien, 'zip'=>'')); // derniere version de SPIP 2.0.? include_spip('lib/maj_auto/distant_mise_a_jour'); if(function_exists('info_maj_cache')) { list(,,$rev) = preg_split('/\D+/', $GLOBALS['spip_version_branche']); $nom = _DIR_CACHE_XML . _VERSIONS_LISTE; $page = info_maj_cache($nom, 'spip', !file_exists($nom) ? '' : file_get_contents($nom)); preg_match_all(',/SPIP\D+2\D+0(\D+(\d+))?.*?[.]zip",i', $page, $m, PREG_SET_ORDER); $page=0; foreach ($m as $v) if ($v[2]>$rev && $v[2]>$page) $page = $v[2]; if($page) { $lien = "http://files.spip.org/spip/archives/SPIP-v2-0-$page.zip"; // 'http://files.spip.org/spip/archives/#SPIP-v2-0-'.$page; $maj = _T('couteau:maj_rev_ok',array('revision'=>'2.0.'.$page, 'url'=>$lien, 'zip'=>'')) . '<br/>' . $maj; } } // liens morts return preg_replace(',\[([^[]+)->\],', '$1', $maj); }