uawdijnntqw1x1x1
IP : 216.73.216.146
Hostname : webm008.cluster111.gra.hosting.ovh.net
Kernel : Linux webm008.cluster111.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
bourgleram
/
www
/
c4d43
/
.
/
..
/
.static
/
..
/
398a1
/
action.tar
/
/
editer_breve.php000066600000014154152522474160007735 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; // http://code.spip.net/@action_editer_breve_dist function action_editer_breve_dist($arg=null) { if (is_null($arg)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } // Envoi depuis le formulaire d'edition d'une breve if (!$id_breve = intval($arg)) { $id_breve = breve_inserer(_request('id_parent')); } if (!$id_breve) return array(0,''); // erreur $err = breve_modifier($id_breve); return array($id_breve,$err); } /** * Inserer une breve en base * http://code.spip.net/@insert_breve * * @param int $id_rubrique * @return int */ function breve_inserer($id_rubrique) { include_spip('inc/rubriques'); // Si id_rubrique vaut 0 ou n'est pas definie, creer la breve // dans la premiere rubrique racine if (!$id_rubrique = intval($id_rubrique)) { $id_rubrique = sql_getfetsel("id_rubrique", "spip_rubriques", "id_parent=0",'', '0+titre,titre', "1"); } // La langue a la creation : c'est la langue de la rubrique $row = sql_fetsel("lang, id_secteur", "spip_rubriques", "id_rubrique=$id_rubrique"); $lang = $row['lang']; $id_rubrique = $row['id_secteur']; // garantir la racine $champs = array( 'id_rubrique' => $id_rubrique, 'statut' => 'prop', 'date_heure' => date('Y-m-d H:i:s'), 'lang' => $lang, 'langue_choisie' => 'non'); // Envoyer aux plugins $champs = pipeline('pre_insertion', array( 'args' => array( 'table' => 'spip_breves', ), 'data' => $champs ) ); $id_breve = sql_insertq("spip_breves", $champs); pipeline('post_insertion', array( 'args' => array( 'table' => 'spip_breves', 'id_objet' => $id_breve ), 'data' => $champs ) ); return $id_breve; } /** * Modifier une breve en base * $c est un contenu (par defaut on prend le contenu via _request()) * * http://code.spip.net/@revisions_breves * * @param int $id_breve * @param array $set * @return string|bool */ function breve_modifier ($id_breve, $set=null) { include_spip('inc/modifier'); $c = collecter_requests( // white list array('titre', 'texte', 'lien_titre', 'lien_url'), // black list array('id_parent', 'statut'), // donnees eventuellement fournies $set ); // Si la breve est publiee, invalider les caches et demander sa reindexation $t = sql_getfetsel("statut", "spip_breves", "id_breve=$id_breve"); if ($t == 'publie') { $invalideur = "id='breve/$id_breve'"; $indexation = true; } if ($err = objet_modifier_champs('breve', $id_breve, array( 'nonvide' => array('titre' => _T('breves:titre_nouvelle_breve')." "._T('info_numero_abbreviation').$id_breve), 'invalideur' => $invalideur, 'indexation' => $indexation ), $c)) return $err; $c = collecter_requests(array('id_parent', 'statut'),array(),$set); $err = breve_instituer($id_breve, $c); return $err; } /** * Instituer une breve : modifier son statut ou son parent * * @param int $id_breve * @param array $c * @return string */ function breve_instituer($id_breve, $c) { $champs = array(); // Changer le statut de la breve ? $row = sql_fetsel("statut, id_rubrique,lang, langue_choisie", "spip_breves", "id_breve=".intval($id_breve)); $id_rubrique = $row['id_rubrique']; $statut_ancien = $statut = $row['statut']; $langue_old = $row['lang']; $langue_choisie_old = $row['langue_choisie']; if ($c['statut'] AND $c['statut'] != $statut AND autoriser('publierdans', 'rubrique', $id_rubrique)) { $statut = $champs['statut'] = $c['statut']; } // Changer de rubrique ? // Verifier que la rubrique demandee est a la racine et differente // de la rubrique actuelle if ($id_parent = intval($c['id_parent']) AND $id_parent != $id_rubrique AND (NULL !== ($lang=sql_getfetsel('lang', 'spip_rubriques', "id_parent=0 AND id_rubrique=".intval($id_parent))))) { $champs['id_rubrique'] = $id_parent; // - changer sa langue (si heritee) if ($langue_choisie_old != "oui") { if ($lang != $langue_old) $champs['lang'] = $lang; } // si la breve est publiee // et que le demandeur n'est pas admin de la rubrique // repasser la breve en statut 'prop'. if ($statut == 'publie') { if (!autoriser('publierdans','rubrique',$id_parent)) $champs['statut'] = $statut = 'prop'; } } // Envoyer aux plugins $champs = pipeline('pre_edition', array( 'args' => array( 'table' => 'spip_breves', 'id_objet' => $id_breve, 'action'=>'instituer', 'statut_ancien' => $statut_ancien, ), 'data' => $champs ) ); if (!$champs) return; sql_updateq('spip_breves', $champs, "id_breve=".intval($id_breve)); // // Post-modifications // // Invalider les caches include_spip('inc/invalideur'); suivre_invalideur("id='breve/$id_breve'"); // Au besoin, changer le statut des rubriques concernees include_spip('inc/rubriques'); calculer_rubriques_if($id_rubrique, $champs, $statut_ancien); // Pipeline pipeline('post_edition', array( 'args' => array( 'table' => 'spip_breves', 'id_objet' => $id_breve, 'action'=>'instituer', 'statut_ancien' => $statut_ancien, ), 'data' => $champs ) ); // Notifications if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('instituerbreve', $id_breve, array('statut' => $statut, 'statut_ancien' => $statut_ancien) ); } return ''; // pas d'erreur } function insert_breve($id_rubrique) { return breve_inserer($id_rubrique); } function revisions_breves ($id_breve, $set=false) { return breve_modifier($id_breve,$set); } ?>verifier_documents_liens.php000066600000002222152522474270012357 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; /** * Verifier tous les fichiers brises * */ function action_verifier_documents_liens_dist($id_document=null) { if (is_null($id_document)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $id_document = $securiser_action(); } $id_document = ($id_document=='*')?'*':intval($id_document); include_spip('action/editer_liens'); objet_optimiser_liens(array('document'=>$id_document),'*'); } ?>copier_local.php000066600000005603152522474270007732 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; /** * Fonction appellee lorsque l'utilisateur clique sur le bouton * 'copier en local' (document/portfolio). * Il s'agit de la partie logique, c'est a dire que cette fonction * realise la copie. * * http://code.spip.net/@action_copier_local_dist * * @param null $id_document * @return bool|mixed|string */ function action_copier_local_dist($id_document=null) { if (!$id_document){ // Recupere les arguments. $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); $id_document = intval($arg); } if (!$id_document) { spip_log("action_copier_local_dist $arg pas compris"); return false; } else { // arguments recuperes, on peut maintenant appeler la fonction. return action_copier_local_post($id_document); } } /** * 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']; // si la source est bien un fichier distant // sinon c'est une donnee moisie, on ne fait rien if (tester_url_absolue($source)){ 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"); } } else { spip_log("echec copie locale $source n'est pas une URL distante", "medias" . _LOG_ERREUR); } return _T('medias:erreur_copie_fichier',array('nom'=>$source)); } ?> ajouter_documents.php000066600000041276152522474270011037 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2014 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * * * * JYG001 : redimensionnement à la volée dans tous les cas (ex. avec * * les plugins cycle, nivoslider, etc...) * * Basé sur le source de SPIP 3.0.14 * * (Répertoire d'origine : \plugins-dist\medias\action) * * * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/getdocument'); include_spip('inc/documents'); include_spip('inc/choisir_mode_document'); // compat core include_spip('inc/renseigner_document'); // JYG001 ***** Debut Ajout ***** include_spip('inc/filtres_images_lib_mini'); // pour la fonction _image_creer_vignette // JYG001 ***** Fin Ajout ***** /** * Ajouter des documents * * @param int $id_document * document a remplacer, ou pour une vignette, l'id_document de maman * 0 ou 'new' pour une insertion * @param $files * tableau de taleau de propriete pour chaque document a inserer * @param $objet * objet auquel associer le document * @param $id_objet * id_objet * @param $mode * mode par defaut si pas precise pour le document * @return array * liste des id_documents inseres */ function action_ajouter_documents_dist($id_document, $files, $objet, $id_objet, $mode){ $ajouter_un_document = charger_fonction('ajouter_un_document','action'); $ajoutes = array(); // on ne peut mettre qu'un seul document a la place d'un autre ou en vignette d'un autre if (intval($id_document)){ $ajoutes[] = $ajouter_un_document($id_document, reset($files), $objet, $id_objet, $mode); } else foreach($files as $file){ $ajoutes[] = $ajouter_un_document('new', $file, $objet, $id_objet, $mode); } return $ajoutes; } /** * Ajouter un document (au format $_FILES) * * http://doc.spip.org/@ajouter_un_document * * @param int $id_document * document a remplacer, ou pour une vignette, l'id_document de maman * 0 ou 'new' pour une insertion * @param array $file * proprietes au format $_FILE etendu : * string tmp_name : source sur le serveur * string name : nom du fichier envoye * bool titrer : donner ou non un titre a partir du nom du fichier * bool distant : pour utiliser une source distante sur internet * string mode : vignette|image|documents|choix * @param string $objet * objet auquel associer le document * @param int $id_objet * id_objet * @param string $mode * mode par defaut si pas precise pour le document * @return array|bool|int|mixed|string|unknown * si int : l'id_document ajouté (opération réussie) * si string : une erreur s'est produit, la chaine est le message d'erreur * */ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet, $mode) { $source = $file['tmp_name']; $nom_envoye = $file['name']; // passer en minuscules le nom du fichier, pour eviter les collisions // si le file system fait la difference entre les deux il ne detectera // pas que Toto.pdf et toto.pdf // et on aura une collision en cas de changement de file system $file['name'] = strtolower(translitteration($file['name'])); // Pouvoir definir dans mes_options.php que l'on veut titrer tous les documents par d?faut if (!defined('_TITRER_DOCUMENTS')) { define('_TITRER_DOCUMENTS', false); } $titrer = isset($file['titrer'])?$file['titrer']:_TITRER_DOCUMENTS; $mode = ((isset($file['mode']) AND $file['mode'])?$file['mode']:$mode); include_spip('inc/modifier'); if (isset($file['distant']) AND $file['distant'] AND !in_array($mode,array('choix','auto','image','document'))) { include_spip('inc/distant'); $file['tmp_name'] = _DIR_RACINE . copie_locale($source); $source = $file['tmp_name']; unset($file['distant']); } // Documents distants : pas trop de verifications bloquantes, mais un test // via une requete HEAD pour savoir si la ressource existe (non 404), si le // content-type est connu, et si possible recuperer la taille, voire plus. if (isset($file['distant']) AND $file['distant']) { include_spip('inc/distant'); if (is_array($a = renseigner_source_distante($source))) { $champs = $a; # NB: dans les bonnes conditions (fichier autorise et pas trop gros) # $a['fichier'] est une copie locale du fichier unset($champs['type_image']); } // on ne doit plus arriver ici, car l'url distante a ete verifiee a la saisie ! else { spip_log("Echec du lien vers le document $source, abandon"); return $a; // message d'erreur } } else { // pas distant $champs = array( 'distant' => 'non' ); $type_image = ''; // au pire $champs['titre'] = ''; if ($titrer){ $titre = substr($nom_envoye,0, strrpos($nom_envoye, ".")); // Enlever l'extension du nom du fichier $titre = preg_replace(',[[:punct:][:space:]]+,u', ' ', $titre); $champs['titre'] = preg_replace(',\.([^.]+)$,', '', $titre); } if (!is_array($fichier = fixer_fichier_upload($file, $mode))) return is_string($fichier)?$fichier:_T("medias:erreur_upload_type_interdit",array('nom'=>$file['name'])); $champs['inclus'] = $fichier['inclus']; $champs['extension'] = $fichier['extension']; $champs['fichier'] = $fichier['fichier']; /** * Récupère les informations du fichier * -* largeur * -* hauteur * -* type_image * -* taille * -* ses metadonnées si une fonction de metadatas/ est présente */ $infos = renseigner_taille_dimension_image($champs['fichier'],$champs['extension']); if (is_string($infos)) return $infos; // c'est un message d'erreur ! // JYG001 ***** Debut Ajout ***** // On corrige le type image - bug SPIP : // ----------------------------------- // 'type_image' n'est pas inclus dans la table 'spip_documents' 'champs_editables' (voir \plugins-dist\medias\base\medias.php) // Du coup, la fonction objet_info('document','champs_editables') du fichier \plugins-dist\medias\inc\renseigner_document.php ne retourne pas de valeur pour le champ 'type_image', // alors que la fonction verifier_taille_document_acceptable($champs) qui suit en a besoin pour déterminer si le document est une image ou non if ($champs['inclus'] == 'image') { $meta_image = array(); $meta_image = metadata_image_dist($champs['fichier']); $infos['type_image'] = $meta_image['type_image']; } // JYG001 ***** Fin Ajout ***** $champs = array_merge($champs,$infos); // Si mode == 'choix', fixer le mode image/document if (in_array($mode,array('choix','auto'))) { $choisir_mode_document = charger_fonction('choisir_mode_document','inc'); $mode = $choisir_mode_document($champs, $champs['inclus'] == 'image', $objet); } $champs['mode'] = $mode; if (($test = verifier_taille_document_acceptable($champs))!==true){ // JYG001 ***** Debut Ajout ***** if ($test == "Redimensionner") { // On redimensionne l'image à la volée et on actualise ses dimensions $maxx = _IMG_MAX_WIDTH; $maxy = _IMG_MAX_HEIGHT; $fonction = array('image_reduire', func_get_args()); $fichier = $champs['fichier']; $image = _image_valeurs_trans($fichier, "reduire-$maxx-$maxy",false,$fonction); $image['fichier_dest'] = $image['fichier']; $process = $GLOBALS['meta']['image_process']; if (_image_creer_vignette($image, _IMG_MAX_WIDTH, _IMG_MAX_HEIGHT, $process, true, false)) { spip_log ("Redimensionnement image : $fichier"); $champs['largeur'] = $image['largeur_dest']; $champs['hauteur'] = $image['hauteur_dest']; $champs['taille'] = @intval(filesize($fichier)); } } else { // JYG001 ***** Fin Ajout ***** spip_unlink($champs['fichier']); return $test; // erreur sur les dimensions du fichier // JYG001 ***** Debut Ajout ***** } // JYG001 ***** Fin Ajout ***** } unset($champs['type_image']); unset($champs['inclus']); $champs['fichier'] = set_spip_doc($champs['fichier']); } // si le media est pas renseigne, le faire, en fonction de l'extension if (!isset($champs['media'])){ $champs['media'] = sql_getfetsel('media_defaut','spip_types_documents','extension='.sql_quote($champs['extension'])); } // lier le parent si necessaire if ($id_objet=intval($id_objet) AND $objet) $champs['parents'][] = "$objet|$id_objet"; // "mettre a jour un document" si on lui // passe un id_document if ($id_document=intval($id_document)){ unset($champs['titre']); // garder le titre d'origine unset($champs['date']); // garder la date d'origine unset($champs['descriptif']); // garder la desc d'origine // unset($a['distant']); # on peut remplacer un doc statique par un doc distant // unset($a['mode']); # on peut remplacer une image par un document ? } include_spip('action/editer_document'); // Installer le document dans la base if (!$id_document){ if ($id_document = document_inserer()) spip_log ("ajout du document ".$file['tmp_name']." ".$file['name']." (M '$mode' T '$objet' L '$id_objet' D '$id_document')",'medias'); else spip_log ("Echec insert_document() du document ".$file['tmp_name']." ".$file['name']." (M '$mode' T '$objet' L '$id_objet' D '$id_document')",'medias'._LOG_ERREUR); } if (!$id_document) return _T('medias:erreur_insertion_document_base',array('fichier'=>"<em>".$file['name']."</em>")); document_modifier($id_document,$champs); // permettre aux plugins de faire des modifs a l'ajout initial // ex EXIF qui tourne les images si necessaire // Ce plugin ferait quand même mieux de se placer dans metadata/jpg.php pipeline('post_edition', array( 'args' => array( 'table' => 'spip_documents', // compatibilite 'table_objet' => 'documents', 'spip_table_objet' => 'spip_documents', 'type' =>'document', 'id_objet' => $id_document, 'champs' => array_keys($champs), 'serveur' => '', // serveur par defaut, on ne sait pas faire mieux pour le moment 'action' => 'ajouter_document', 'operation' => 'ajouter_document', // compat <= v2.0 ), 'data' => $champs ) ); return $id_document ; } /** * Corrige l'extension du fichier dans quelques cas particuliers * (a passer dans ecrire/base/typedoc) * A noter : une extension 'pdf ' passe dans la requete de controle * mysql> SELECT * FROM spip_types_documents WHERE extension="pdf "; * * @param string $ext * @return string */ function corriger_extension($ext) { $ext = preg_replace(',[^a-z0-9],i', '', $ext); switch ($ext) { case 'htm': $ext='html'; break; case 'jpeg': $ext='jpg'; break; case 'tiff': $ext='tif'; break; case 'aif': $ext='aiff'; break; case 'mpeg': $ext='mpg'; break; } return $ext; } /** * Verifie la possibilite d'uploader une extension * renvoie un tableau descriptif si l'extension est acceptee * avec un index 'autozip' si il faut zipper * false ou message d'erreur si l'extension est refusee * Verifie aussi si l'extension est autorisee pour le mode demande * si on connait le mode a ce moment la * */ function verifier_upload_autorise($source, $mode=''){ $infos = array('fichier'=>$source); $res = false; if (preg_match(",\.([a-z0-9]+)(\?.*)?$,i", $source, $match) AND $ext = $match[1]){ $ext = corriger_extension(strtolower($ext)); if ($res = sql_fetsel("extension,inclus,media_defaut as media", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'")) $infos = array_merge($infos,$res); } if (!$res){ if ($res = sql_fetsel("extension,inclus,media_defaut as media", "spip_types_documents", "extension='zip' AND upload='oui'")){ $infos = array_merge($infos,$res); $res['autozip'] = true; } } if ($mode AND $res){ // verifier en fonction du mode si une fonction est proposee if ($verifier_document_mode = charger_fonction("verifier_document_mode_".$mode,"inc",true)){ $check = $verifier_document_mode($infos); // true ou message d'erreur sous forme de chaine if ($check!==true) $res = $check; } } if (!$res OR is_string($res)) { spip_log("Upload $source interdit ($res)",_LOG_INFO_IMPORTANTE); } return $res; } /** * tester le type de document : * - interdit a l'upload ? * - quelle extension dans spip_types_documents ? * - est-ce "inclus" comme une image ? * * le zipper si necessaire * * @param array $file //format $_FILES * @return array */ function fixer_fichier_upload($file, $mode=''){ if (is_array($row=verifier_upload_autorise($file['name'], $mode))) { if (!isset($row['autozip'])){ $row['fichier'] = copier_document($row['extension'], $file['name'], $file['tmp_name']); /** * On vérifie que le fichier a une taille * si non, on le supprime et on affiche une erreur */ if($row['fichier'] && (!$taille = @intval(filesize(get_spip_doc($row['fichier']))))) { spip_log ("Echec copie du fichier ".$file['tmp_name']." (taille de fichier indéfinie)"); spip_unlink(get_spip_doc($row['fichier'])); return _T('medias:erreur_copie_fichier',array('nom'=> $file['tmp_name'])); }else return $row; } // creer un zip comme demande // pour encapsuler un fichier dont l'extension n'est pas supportee else{ unset($row['autozip']); $ext = 'zip'; if (!$tmp_dir = tempnam(_DIR_TMP, 'tmp_upload')) return false; spip_unlink($tmp_dir); @mkdir($tmp_dir); include_spip('inc/charsets'); $tmp = $tmp_dir.'/'.translitteration($file['name']); $file['name'] .= '.'.$ext; # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip // deplacer le fichier tmp_name dans le dossier tmp deplacer_fichier_upload($file['tmp_name'], $tmp, true); include_spip('inc/pclzip'); $source = _DIR_TMP . basename($tmp_dir) . '.'.$ext; $archive = new PclZip($source); $v_list = $archive->create($tmp, PCLZIP_OPT_REMOVE_PATH, $tmp_dir, PCLZIP_OPT_ADD_PATH, ''); effacer_repertoire_temporaire($tmp_dir); if (!$v_list) { spip_log("Echec creation du zip "); return false; } $row['fichier'] = copier_document($row['extension'], $file['name'], $source); spip_unlink($source); /** * On vérifie que le fichier zip créé a une taille * si non, on le supprime et on affiche une erreur */ if($row['fichier'] && (!$taille = @intval(filesize(get_spip_doc($row['fichier']))))) { spip_log ("Echec copie du fichier ".$file['tmp_name']." (taille de fichier indéfinie)"); spip_unlink(get_spip_doc($row['fichier'])); return _T('medias:erreur_copie_fichier',array('nom'=> $file['tmp_name'])); }else return $row; } } else return $row; // retourner le message d'erreur } /** * Verifier si le fichier respecte les contraintes de tailles * * @param array $infos * @return bool|mixed|string */ function verifier_taille_document_acceptable($infos){ // si ce n'est pas une image if (!$infos['type_image']) { if (_DOC_MAX_SIZE > 0 AND $infos['taille'] > _DOC_MAX_SIZE*1024) return _T('medias:info_doc_max_poids', array('maxi' => taille_en_octets(_DOC_MAX_SIZE*1024), 'actuel' => taille_en_octets($infos['taille']))); } // si c'est une image else { if (_IMG_MAX_SIZE > 0 AND $infos['taille'] > _IMG_MAX_SIZE*1024) return _T('medias:info_image_max_poids', array('maxi' => taille_en_octets(_IMG_MAX_SIZE*1024), 'actuel' => taille_en_octets($infos['taille']))); if (_IMG_MAX_WIDTH * _IMG_MAX_HEIGHT AND ($infos['largeur'] > _IMG_MAX_WIDTH OR $infos['hauteur'] > _IMG_MAX_HEIGHT)) // JYG001 ***** Debut Suppression ***** /* return _T('medias:info_logo_max_taille', array( 'maxi' => _T('info_largeur_vignette', array('largeur_vignette' => _IMG_MAX_WIDTH, 'hauteur_vignette' => _IMG_MAX_HEIGHT)), 'actuel' => _T('info_largeur_vignette', array('largeur_vignette' => $infos['largeur'], 'hauteur_vignette' => $infos['hauteur'])) )); */ // JYG001 ***** Fin Suppression ***** // JYG001 ***** Debut Ajout ***** // Au lieu d'un message d'erreur, on retourne l'indication qu'il faut redimensionner l'image return "Redimensionner"; // JYG001 ***** Fin Ajout ***** } // verifier en fonction du mode si une fonction est proposee if ($verifier_document_mode = charger_fonction("verifier_document_mode_".$infos['mode'],"inc",true)) return $verifier_document_mode($infos); return true; } ?>changer_mode_document.php000066600000003632152522474270011610 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; /** * Cette action permet de basculer du mode image au mode document et vice versa * * http://code.spip.net/@action_changer_mode_document_dist * * @param int $id_document * @param string $mode * @return void */ function action_changer_mode_document_dist($id_document=null, $mode=null){ if (is_null($id_document) OR is_null($mode)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); if (!preg_match(",^(\d+)\W(\w+)$,", $arg, $r)) spip_log("action_changer_mode_document $arg pas compris"); else { array_shift($r); list($id_document, $mode) = $r; } } if ($id_document AND include_spip('inc/autoriser') AND autoriser('modifier','document',$id_document)) action_changer_mode_document_post($id_document, $mode); } // http://code.spip.net/@action_changer_mode_document_post function action_changer_mode_document_post($id_document, $mode){ // - id_document le doc a modifier // - mode le mode a lui donner if ($id_document = intval($id_document) AND in_array($mode, array('vignette', 'image', 'document'))) { include_spip('action/editer_document'); document_modifier($id_document,array('mode'=>$mode)); } } ?> supprimer_document.php000066600000005724152522474270011227 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; // http://code.spip.net/@supprimer_document function action_supprimer_document_dist($id_document=0) { if (!$id_document){ $securiser_action = charger_fonction('securiser_action','inc'); $id_document = $securiser_action(); } include_spip('inc/autoriser'); if (!autoriser('supprimer','document',$id_document)){ spip_log("Echec : Suppression document $id_document interdite",_LOG_ERREUR); return false; } // si c'etait une vignette, modifier le document source ! if ($source = sql_getfetsel('id_document', 'spip_documents', 'id_vignette='.intval($id_document))){ include_spip('action/editer_document'); document_modifier($source,array("id_vignette" => 0)); } include_spip('inc/documents'); if (!$doc = sql_fetsel('*', 'spip_documents', 'id_document='.intval($id_document))){ spip_log("Echec : Suppression document $id_document : le document n'existe pas en base",_LOG_ERREUR); return false; } spip_log("Suppression du document $id_document (".$doc['fichier'].")"); include_spip('action/editer_liens'); // Si c'est un document ayant une vignette, supprimer aussi la vignette if ($doc['id_vignette']) { action_supprimer_document_dist($doc['id_vignette']); objet_dissocier(array('document'=>$doc['id_vignette']),'*'); } // Si c'est un document ayant des documents annexes (sous-titre, ...) // les supprimer aussi $annexes = array_map('reset',sql_allfetsel("id_document","spip_documents_liens","objet='document' AND id_objet=".intval($id_document))); foreach($annexes as $id){ action_supprimer_document_dist($id); } // dereferencer dans la base objet_dissocier(array('document'=>$id_document),'*'); sql_delete('spip_documents', 'id_document='.intval($id_document)); // Supprimer le fichier si le doc est local, // et la copie locale si le doc est distant if ($doc['distant'] == 'oui') { include_spip('inc/distant'); if ($local = _DIR_RACINE . copie_locale($doc['fichier'],'test')) spip_unlink($local); } else spip_unlink(get_spip_doc($doc['fichier'])); pipeline('post_edition', array( 'args' => array( 'operation' => 'supprimer_document', // compat v<=2 'action' => 'supprimer_document', 'table' => 'spip_documents', 'id_objet' => $id_document ), 'data' => null ) ); return true; } ?> supprimer_tous_orphelins.php000066600000003641152522474270012462 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('base/abstract_sql'); 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 } } ?>dissocier_document.php000066600000012747152522474270011170 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; /** * Dissocier un document * $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=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"); } /** * Supprimer un lien entre un document et un objet * * @param int $id_document * @param string $objet * @param int $id_objet * @param bool $supprime * si true, le document est supprime si plus lie a aucun objet * @param bool $check * si true, on verifie les documents references dans le texte de l'objet * et on les associe si pas deja fait * @return bool */ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = false, $check = false) { if (!$id_document = intval($id_document)) return false; // D'abord on ne supprime pas, on dissocie include_spip('action/editer_liens'); objet_dissocier(array('document'=>$id_document),array($objet=>$id_objet)); // Si c'est une vignette, l'eliminer du document auquel elle appartient // cas tordu peu probable sql_updateq("spip_documents", array('id_vignette' => 0), "id_vignette=".$id_document); // verifier son statut apres une suppression de lien include_spip('action/editer_document'); document_instituer($id_document); pipeline('post_edition', array( 'args' => array( 'operation' => 'delier_document', // compat v<=2 'action' => 'delier_document', 'table' => 'spip_documents', 'id_objet' => $id_document, 'objet' => $objet, 'id' => $id_objet ), 'data' => null ) ); if ($check) { // si demande, on verifie que ses documents vus sont bien lies ! $spip_table_objet = table_objet_sql($objet); $table_objet = table_objet($objet); $id_table_objet = id_table_objet($objet,$serveur); $champs = sql_fetsel('*',$spip_table_objet,addslashes($id_table_objet)."=".intval($id_objet)); $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc'); $marquer_doublons_doc($champs,$id_objet,$objet,$id_table_objet,$table_objet,$spip_table_objet, '', $serveur); } // On supprime ensuite s'il est orphelin // et si demande // ici on ne bloque pas la suppression d'un document rattache a un autre if ($supprime AND !sql_countsel('spip_documents_liens', "objet!='document' AND id_document=".$id_document)){ $supprimer_document = charger_fonction('supprimer_document','action'); return $supprimer_document($id_document); } } /** * Dissocier un ou des documents * * @param int|string $document * id_document a dissocier * I/image pour dissocier les images en mode Image * I/document pour dissocier les images en mode document * D/document pour dissocier les documents non image en mode document * @param $objet * objet duquel dissocier * @param $id_objet * id_objet duquel dissocier * @param bool $supprime * supprimer les documents orphelins apres dissociation * @param bool $check * verifier le texte des documents et relier les documents references dans l'objet * @return void */ function dissocier_document($document, $objet, $id_objet, $supprime = false, $check = false){ if ($id_document=intval($document)) { supprimer_lien_document($id_document, $objet, $id_objet, $supprime, $check); } else { list($image,$mode) = explode('/',$document); $image = ($image=='I'); $typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $image ? '' : 'NOT'); $obj = "id_objet=".intval($id_objet)." AND objet=".sql_quote($objet); $s = sql_select('docs.id_document', "spip_documents AS docs LEFT JOIN spip_documents_liens AS l ON l.id_document=docs.id_document", "$obj AND vu='non' AND docs.mode=".sql_quote($mode)." AND $typdoc"); while ($t = sql_fetch($s)) { supprimer_lien_document($t['id_document'], $objet, $id_objet, $supprime, $check); } } // pas tres generique ca ... if ($objet == 'rubrique') { include_spip('inc/rubriques'); depublier_branche_rubrique_if($id_objet); } } ?> acceder_document.php000066600000007271152522474270010566 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) return; include_spip('inc/headers'); // acces aux documents joints securise // verifie soit que le demandeur est authentifie // soit que le document est publie, c'est-a-dire // joint a au moins 1 article ou rubrique publie // http://code.spip.net/@action_acceder_document_dist function action_acceder_document_dist() { include_spip('inc/documents'); // $file exige pour eviter le scan id_document par id_document $f = rawurldecode(_request('file')); $file = get_spip_doc($f); $arg = rawurldecode(_request('arg')); $status = $dcc = false; if (strpos($f,'../') !== false OR preg_match(',^\w+://,', $f)) { $status = 403; } else if (!file_exists($file) OR !is_readable($file)) { $status = 404; } else { $where = "D.fichier=".sql_quote(set_spip_doc($file)) . ($arg ? " AND D.id_document=".intval($arg): ''); $doc = sql_fetsel("D.id_document, D.titre, D.fichier, T.mime_type, T.inclus, D.extension", "spip_documents AS D LEFT JOIN spip_types_documents AS T ON D.extension=T.extension",$where); if (!$doc) { $status = 404; } else { // ETag pour gerer le status 304 $ETag = md5($file . ': '. filemtime($file)); if (isset($_SERVER['HTTP_IF_NONE_MATCH']) AND $_SERVER['HTTP_IF_NONE_MATCH'] == $ETag) { http_status(304); // Not modified exit; } else { header('ETag: '.$ETag); } // // Verifier les droits de lecture du document // en controlant la cle passee en argument // include_spip('inc/securiser_action'); $cle = _request('cle'); if (!verifier_cle_action($doc['id_document'].','.$f, $cle)) { spip_log("acces interdit $cle erronee"); $status = 403; } } } switch($status) { case 403: include_spip('inc/minipres'); echo minipres(); break; case 404: http_status(404); include_spip('inc/minipres'); echo minipres(_T('erreur').' 404', _T('medias:info_document_indisponible')); break; default: header("Content-Type: ". $doc['mime_type']); // pour les images ne pas passer en attachment // sinon, lorsqu'on pointe directement sur leur adresse, // le navigateur les downloade au lieu de les afficher if ($doc['inclus']=='non') { // Si le fichier a un titre avec extension, // ou si c'est un nom bien connu d'Unix, le prendre // sinon l'ignorer car certains navigateurs pataugent $f = basename($file); if (isset($doc['titre']) AND (preg_match('/^\w+[.]\w+$/', $doc['titre']) OR $doc['titre'] == 'Makefile')) $f = $doc['titre']; // 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); break; } } ?> verifier_documents_brises.php000066600000002526152522474270012543 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; /** * Verifier tous les fichiers brises * */ function action_verifier_documents_brises_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); include_spip('inc/autoriser'); if (autoriser('administrer','mediatheque')) { include_spip('inc/documents'); $res = sql_select('fichier,brise,id_document','spip_documents',"distant='non'"); while ($row = sql_fetch($res)){ if (($brise = !@file_exists(get_spip_doc($row['fichier'])))!=$row['brise']) sql_updateq('spip_documents',array('brise'=>$brise),'id_document='.intval($row['id_document'])); } } } ?>editer_document.php000066600000020752152522474270010453 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; /** * Action editer_document * * @param int $arg * @return array */ function action_editer_document_dist($arg=null) { if (is_null($arg)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } // Envoi depuis le formulaire de creation d'un document if (!$id_document = intval($arg)) { $id_document = document_inserer(); } if (!$id_document) return array(0,''); // erreur $err = document_modifier($id_document); return array($id_document,$err); } /** * Creer un nouveau document * * @return int */ function document_inserer() { $champs = array( 'statut' => 'prop', 'date' => 'NOW()', ); // Envoyer aux plugins $champs = pipeline('pre_insertion', array( 'args' => array( 'table' => 'spip_documents', ), 'data' => $champs ) ); $id_document = sql_insertq("spip_documents", $champs); pipeline('post_insertion', array( 'args' => array( 'table' => 'spip_documents', 'id_objet' => $id_document ), 'data' => $champs ) ); return $id_document; } /** * Enregistre une revision de document. * $set est un contenu (par defaut on prend le contenu via _request()) * * @param int $id_document * @param array|bool $set */ function document_modifier($id_document, $set=false) { include_spip('inc/modifier'); include_spip('inc/filtres'); // champs normaux $champs = collecter_requests( // white list objet_info('document','champs_editables'), // black list array('parents', 'ajout_parents'), // donnees eventuellement fournies $set ); $invalideur = ""; $indexation = false; // Si le document est publie, invalider les caches et demander sa reindexation $t = sql_getfetsel("statut", "spip_documents", 'id_document='.intval($id_document)); if ($t == 'publie') { $invalideur = "id='id_document/$id_document'"; $indexation = true; } $ancien_fichier = ""; // si le fichier est modifie, noter le nom de l'ancien pour faire le menage if (isset($champs['fichier'])){ $ancien_fichier = sql_getfetsel('fichier','spip_documents','id_document='.intval($id_document)); } if ($err = objet_modifier_champs('document', $id_document, array( 'invalideur' => $invalideur, 'indexation' => $indexation ), $champs)) return $err; // nettoyer l'ancien fichier si necessaire if ($champs['fichier'] // un plugin a pu interdire la modif du fichier en virant le champ AND $ancien_fichier // on avait bien note le nom du fichier avant la modif AND $ancien_fichier!==$champs['fichier'] // et il a ete modifie AND !tester_url_absolue($ancien_fichier) AND @file_exists($f = get_spip_doc($ancien_fichier))) spip_unlink($f); // Changer le statut du document ? // le statut n'est jamais fixe manuellement mais decoule de celui des objets lies $champs = collecter_requests(array('parents','ajouts_parents'),array(),$set); if(document_instituer($id_document,$champs)) { // // Post-modifications // // Invalider les caches include_spip('inc/invalideur'); suivre_invalideur("id='id_document/$id_document'"); } } /** * determiner le statut d'un document : prepa/publie * si on trouve un element joint sans champ statut ou avec un statut='publie' alors le doc est publie aussi * * @param int $id_document * @param array $champs * @return bool */ function document_instituer($id_document,$champs=array()){ $statut=isset($champs['statut'])?$champs['statut']:null; $date_publication = isset($champs['date_publication'])?$champs['date_publication']:null; if (isset($champs['parents'])) medias_revision_document_parents($id_document,$champs['parents']); if (isset($champs['ajout_parents'])) medias_revision_document_parents($id_document,$champs['ajout_parents'],true); $row = sql_fetsel("statut,date_publication", "spip_documents", "id_document=$id_document"); $statut_ancien = $row['statut']; $date_publication_ancienne = $row['date_publication']; /* Autodetermination du statut si non fourni */ if (is_null($statut)){ $statut = 'prepa'; $trouver_table = charger_fonction('trouver_table','base'); $res = sql_select('id_objet,objet','spip_documents_liens',"objet!='document' AND id_document=".intval($id_document)); // dans 10 ans, ca nous fera un bug a corriger vers 2018 // penser a ouvrir un ticket d'ici la :p $date_publication=time()+10*365*24*3600; include_spip('base/objets'); while($row = sql_fetch($res)){ if ( // cas particulier des rubriques qui sont publiees des qu'elles contiennent un document ! $row['objet']=='rubrique' // ou si objet publie selon sa declaration OR objet_test_si_publie($row['objet'],$row['id_objet'])){ $statut = 'publie'; $date_publication=0; continue; } // si pas publie, et article, il faut checker la date de post-publi eventuelle elseif ($row['objet']=='article' AND $row2 = sql_fetsel('date','spip_articles','id_article='.intval($row['id_objet'])." AND statut='publie'")){ $statut = 'publie'; $date_publication = min($date_publication,strtotime($row2['date'])); } } $date_publication = date('Y-m-d H:i:s',$date_publication); if ($statut=='publie' AND $statut_ancien=='publie' AND $date_publication==$date_publication_ancienne) return false; if ($statut!='publie' AND $statut_ancien!='publie' AND $statut_ancien!='0') return false; } if ($statut!==$statut_ancien OR $date_publication!=$date_publication_ancienne){ sql_updateq('spip_documents',array('statut'=>$statut,'date_publication'=>$date_publication),'id_document='.intval($id_document)); if ($statut!==$statut_ancien){ $publier_rubriques = sql_allfetsel('id_objet','spip_documents_liens',"objet='rubrique' AND id_document=".intval($id_document)); if (count($publier_rubriques)){ include_spip('inc/rubriques'); foreach($publier_rubriques as $r) calculer_rubriques_if($r['id_objet'],array('statut'=>$statut),$statut_ancien,false); } } return true; } return false; } /** * Revision des parents d'un document * chaque parent est liste au format objet|id_objet * * @param int $id_document * @param array $parents * @param bool $ajout */ function medias_revision_document_parents($id_document, $parents=null, $ajout=false){ if (!is_array($parents)) return; $insertions = array(); $objets_parents = array(); // array('article'=>array(12,23)) // au format objet|id_objet foreach($parents as $p){ $p = explode('|',$p); if (preg_match('/^[a-z0-9_]+$/i', $objet=$p[0]) AND $p[1]=intval($p[1])){ // securite $objets_parents[$p[0]][] = $p[1]; } } include_spip('action/editer_liens'); // les liens actuels $liens = objet_trouver_liens(array('document'=>$id_document),'*'); $deja_parents = array(); // si ce n'est pas un ajout, il faut supprimer les liens actuels qui ne sont pas dans $objets_parents if (!$ajout){ foreach($liens as $k=>$lien) if (!isset($objets_parents[$lien['objet']]) OR !in_array($lien['id_objet'],$objets_parents[$lien['objet']])) { if (autoriser('dissocierdocuments',$lien['objet'],$lien['id_objet'])){ objet_dissocier(array('document'=>$id_document),array($lien['objet']=>$lien['id_objet'])); } unset($liens[$k]); } else $deja_parents[$lien['objet']][] = $lien['id_objet']; } // verifier les droits d'associer foreach($objets_parents as $objet=>$ids){ foreach($ids as $k=>$id){ if (!autoriser('associerdocuments',$objet,$id)){ unset($objets_parents[$objet][$k]); } } } objet_associer(array('document'=>$id_document),$objets_parents); } // obsoletes function insert_document() { return document_inserer(); } function document_set($id_document, $set=false) { return document_modifier($id_document, $set); } function instituer_document($id_document,$champs=array()){ return document_instituer($id_document,$champs); } function revision_document($id_document, $c=false) { return document_modifier($id_document,$c); } ?> tourner.php000066600000010666152522474270007002 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; /** * Tourner un document * * http://code.spip.net/@action_tourner_dist * * lorsque les arguments sont passes dans arg en GET : * id_document-angle * * @param int $id_document * @param int $angle * angle de rotation en degre>0 * @return void */ function action_tourner_dist($id_document=null, $angle=null) { if (is_null($id_document) OR is_null($angle)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); if (!preg_match(",^\W*(\d+)\W?(-?\d+)$,", $arg, $r)) { spip_log("action_tourner_dist $arg pas compris"); } else{ array_shift($r); list($id_document,$angle) = $r; } } if ($id_document AND autoriser('modifier','document',$id_document)) action_tourner_post($id_document,$angle); } /** * Tourner un document * * http://code.spip.net/@action_tourner_post * * @param int $id_document * @param int $angle * angle de rotation en degre>0 * @return */ function action_tourner_post($id_document,$angle) { $row = sql_fetsel("fichier,extension", "spip_documents", "id_document=".intval($id_document)); if (!$row) return; include_spip('inc/charsets'); # pour le nom de fichier include_spip('inc/documents'); // Fichier destination : on essaie toujours de repartir de l'original $var_rot = $angle; include_spip('inc/distant'); # pour copie_locale $src = _DIR_RACINE . copie_locale(get_spip_doc($row['fichier'])); if (preg_match(',^(.*)-r(90|180|270)\.([^.]+)$,', $src, $match)) { $effacer = $src; $src = $match[1].'.'.$match[3]; $var_rot += intval($match[2]); } $var_rot = ((360 + $var_rot) % 360); // 0, 90, 180 ou 270 if ($var_rot > 0) { $dest = preg_replace(',\.[^.]+$,', '-r'.$var_rot.'$0', $src); spip_log("rotation $var_rot $src : $dest"); include_spip('inc/filtres'); include_spip('public/parametrer'); // charger les fichiers fonctions #bugfix spip 2.1.0 $res = filtrer('image_rotation',$src,$var_rot); $res = filtrer('image_format',$res,$row['extension']); list($hauteur,$largeur) = taille_image($res); $res = extraire_attribut($res,'src'); include_spip('inc/getdocument'); deplacer_fichier_upload($res,$dest); } else { $dest = $src; $size_image = @getimagesize($dest); $largeur = $size_image[0]; $hauteur = $size_image[1]; } // succes ! if ($largeur>0 AND $hauteur>0) { $set = array( 'fichier' => set_spip_doc($dest), 'largeur'=>$largeur, 'hauteur'=>$hauteur, 'distant'=>'non' // le document n'est plus distant apres une transformation ); if ($taille = @filesize($dest)) $set['taille'] = $taille; sql_updateq('spip_documents', $set, "id_document=".intval($id_document)); if ($effacer) { spip_log("rotation : j'efface $effacer"); spip_unlink($effacer); } // pipeline pour les plugins pipeline('post_edition', array( 'args' => array( 'table' => 'spip_documents', 'table_objet' => 'documents', 'spip_table_objet' => 'spip_documents', 'type' =>'document', 'id_objet' => $id_document, 'champs' => array('rotation'=>$angle,'orientation'=>$var_rot,'fichier'=>$row['fichier']), 'serveur' => $serveur, 'action'=>'tourner', ), 'data' => $set ) ); } } // Appliquer l'EXIF orientation // cf. http://trac.rezo.net/trac/spip/ticket/1494 // http://code.spip.net/@tourner_selon_exif_orientation function tourner_selon_exif_orientation($id_document, $fichier) { if (function_exists('exif_read_data') AND $exif = exif_read_data($fichier) AND ( $ort = $exif['IFD0']['Orientation'] OR $ort = $exif['Orientation']) ) { spip_log("rotation: $ort"); $rot = null; switch ($ort) { case 3: $rot = 180; case 6: $rot = 90; case 8: $rot = -90; } if ($rot) action_tourner_post(array(null,$id_document, $rot)); } } ?> porte_plume_previsu.php000066600000003313152522551750011402 0ustar00<?php /** * Gestion de l'action porte_plume_previsu * * @plugin Porte Plume pour SPIP * @license GPL * @package SPIP\PortePlume\Actions */ if (!defined("_ECRIRE_INC_VERSION")) return; /** * Action affichant la prévisualisation de porte plume * * Pas besoin de sécuriser outre mesure ici, on ne réalise donc qu'un * recuperer_fond * * On passe par cette action pour éviter les redirection et la perte du $_POST de * $forcer_lang=true; * cf : ecrire/public.php ligne 80 */ function action_porte_plume_previsu_dist() { // $_POST a ete sanitise par SPIP // et le fond injecte des interdire_scripts pour empecher les injections PHP // le js est bloque ou non selon les reglages de SPIP et si on est ou non dans l'espace prive $contexte = $_POST; // mais il faut avoir le droit de previsualiser // (par defaut le droit d'aller dans ecrire/) if (!autoriser('previsualiser','porteplume')) $contexte = array(); header('Content-type: text/html; charset='.pp_charset()); echo recuperer_fond('prive/porte_plume_preview', $contexte); } /** * Retourner le charset SQL * * Retourne le charset SQL si on le connait, en priorité * sinon, on utilise le charset de l'affichage HTML. * * Cependant, on peut forcer un charset donné avec une constante : * define('PORTE_PLUME_PREVIEW_CHARSET','utf-8'); * * @return string Nom du charset (ex: 'utf-8') */ function pp_charset() { if (defined('PORTE_PLUME_PREVIEW_CHARSET')) { return PORTE_PLUME_PREVIEW_CHARSET; } $charset = $GLOBALS['meta']['charset']; $charset_sql = isset($GLOBALS['charset_sql_base']) ? $GLOBALS['charset_sql_base'] : ''; if ($charset_sql == 'utf8') { $charset_sql = 'utf-8'; } return $charset_sql ? $charset_sql : $charset; } ?> relancer_signature.php000066600000003254152522552710011147 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; function action_relancer_signature_dist($id_signature=null){ if (!$id_signature){ $securiser_action = charger_fonction('securiser_action','inc'); $id_signature = $securiser_action(); } if (autoriser('relancer','signature',$id_signature)){ $row = sql_fetsel('*', 'spip_signatures', 'id_signature='.intval($id_signature)); $id_article = sql_getfetsel('id_article','spip_petitions','id_petition='.intval($row['id_petition'])); if ($id_article=intval($id_article) AND autoriser('mordererpetition','article',$id_article)) { include_spip('action/editer_signature'); include_spip('formulaires/signature'); $url = generer_url_entite_absolue($id_article, 'article','','',true); if (signature_a_confirmer($id_article, $url, $row['nom_email'], $row['ad_email'], $row['nom_site'], $row['url_site'], $row['message'], $row['lang'], $row['statut'])) signature_modifier($id_signature, array("date_time" => date('Y-m-d H:i:s'))); } } } ?>valider_signature.php000066600000002125152522552710010776 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; function action_valider_signature_dist($id_signature=null){ if (!$id_signature){ $securiser_action = charger_fonction('securiser_action','inc'); $id_signature = $securiser_action(); } if (autoriser('publier','signature',$id_signature)){ include_spip('action/editer_signature'); signature_modifier($id_signature, array('statut'=>'publie')); } } ?>traiter_lot_signature.php000066600000003643152522552710011706 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; function action_traiter_lot_signature_dist($arg=null) { if (is_null($arg)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } /** * $arg contient l'action relancer/supprimer/valider * les id sont dans un tableau non signe ids[] */ if (preg_match(",^(\w+)$,",$arg,$match) AND in_array($statut=$match[1],array('relancer','supprimer','valider')) AND autoriser('modererlot','petition')){ $where = ''; if (intval($id_petition = _request('id_petition'))){ $where="id_petition=".intval($id_petition); // pour relancer ou valider on ne prend que celles en attente if (in_array($statut,array('relancer','valider'))) $where.=" AND statut!='publie' AND statut!='poubelle'"; } else { $ids=_request('ids'); if (is_array($ids)) { $ids = array_map('intval',$ids); $where = sql_in('id_signature',$ids); } } if ($where){ $rows = sql_allfetsel("id_signature", "spip_signatures", $where); if (!count($rows)) return; $rows = array_map('reset',$rows); if ($action = charger_fonction($statut."_signature",'action',true)) foreach ($rows as $id_signature) { $action($id_signature); } } } } ?> editer_signature.php000066600000014415152522552710010631 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; // http://code.spip.net/@action_editer_signature_dist function action_editer_signature_dist($arg=null) { if (is_null($arg)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } // si id_signature n'est pas un nombre, c'est une creation // mais on verifie qu'on a toutes les donnees qu'il faut. if (!$id_signature = intval($arg)) { $id_petition = _request('id_petition'); if (!($id_petition)) return array(0,''); $id_signature = signature_inserer($id_petition); } // Enregistre l'envoi dans la BD if ($id_signature > 0) $err = signature_modifier($id_signature); return array($id_signature,$err); } /** * Mettre a jour une signature existante * * @param int $id_signature * @param array $set * @return string */ function signature_modifier($id_signature, $set=null) { $err = ''; include_spip('inc/modifier'); $c = collecter_requests( // white list array( "nom_email","ad_email", "nom_site","url_site","message","statut" ), // black list array('statut','id_petition','date_time'), // donnees eventuellement fournies $set ); if ($err = objet_modifier_champs('signature', $id_signature, array( 'nonvide' => array('nom_email' => _T('info_sans_titre')) ), $c)) return $err; // Modification de statut $c = collecter_requests(array('statut','id_petition','date_time'),array(),$set); $err .= signature_instituer($id_signature, $c); return $err; } /** * Inserer une signature en base * @param int $id_petition * @return int */ function signature_inserer($id_petition) { // Si $id_petition vaut 0 ou n'est pas definie, echouer if (!$id_petition = intval($id_petition)) return 0; $champs = array( 'id_petition' => $id_petition, 'statut' => 'prepa', 'date_time' => date('Y-m-d H:i:s')); // Envoyer aux plugins $champs = pipeline('pre_insertion', array( 'args' => array( 'table' => 'spip_signatures', ), 'data' => $champs ) ); $id_signature = sql_insertq("spip_signatures", $champs); pipeline('post_insertion', array( 'args' => array( 'table' => 'spip_signatures', 'id_objet' => $id_signature ), 'data' => $champs ) ); return $id_signature; } // $c est un array ('statut', 'id_petition' = changement de petition) // il n'est pas autoriser de deplacer une signature // http://code.spip.net/@signature_instituer function signature_instituer($id_signature, $c, $calcul_rub=true) { include_spip('inc/autoriser'); include_spip('inc/modifier'); $row = sql_fetsel("S.statut, S.date_time, P.id_article", "spip_signatures AS S JOIN spip_petitions AS P ON S.id_petition=P.id_petition", "S.id_signature=".intval($id_signature)); $statut_ancien = $statut = $row['statut']; $date_ancienne = $date = $row['date_time']; $champs = array(); $d = isset($c['date_time'])?$c['date_time']:null; $s = isset($c['statut'])?$c['statut']:$statut; // cf autorisations dans inc/signature_instituer if ($s != $statut OR ($d AND $d != $date)) { $statut = $champs['statut'] = $s; // En cas de publication, fixer la date a "maintenant" // sauf si $c commande autre chose // ou si l'signature est deja date dans le futur // En cas de proposition d'un signature (mais pas depublication), idem if ($champs['statut'] == 'publie') { if ($d) $champs['date_time'] = $date = $d; else $champs['date_time'] = $date = date('Y-m-d H:i:s'); } // on peut redater une signature qu'on relance elseif($d) $champs['date_time'] = $date = $d; } // Envoyer aux plugins $champs = pipeline('pre_edition', array( 'args' => array( 'table' => 'spip_signatures', 'id_objet' => $id_signature, 'action'=>'instituer', 'statut_ancien' => $statut_ancien, ), 'data' => $champs ) ); if (!count($champs)) return; // Envoyer les modifs. sql_updateq('spip_signatures',$champs,'id_signature='.intval($id_signature)); // Invalider les caches include_spip('inc/invalideur'); suivre_invalideur("id='signature/$id_signature'"); suivre_invalideur("id='article/".$row['id_article']."'"); // Pipeline pipeline('post_edition', array( 'args' => array( 'table' => 'spip_signatures', 'id_objet' => $id_signature, 'action'=>'instituer', 'statut_ancien' => $statut_ancien, ), 'data' => $champs ) ); // Notifications if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('instituersignature', $id_signature, array('statut' => $statut, 'statut_ancien' => $statut_ancien, 'date'=>$date) ); } return ''; // pas d'erreur } /** * Pour eviter le recours a un verrou (qui bloque l'acces a la base), * on commence par inserer systematiquement la signature * puis on demande toutes celles ayant la propriete devant etre unique * (mail ou site). S'il y en a plus qu'une on les retire sauf la premiere * En cas d'acces concurrents il y aura des requetes de retraits d'elements * deja detruits. Bizarre ? C'est mieux que de bloquer! * * http://code.spip.net/@signature_entrop * * @param string $where * @return array */ function signature_entrop($where) { $entrop = array(); $where .= " AND statut='publie'"; $res = sql_select('id_signature', 'spip_signatures', $where,'',"date_time desc"); $n = sql_count($res); if ($n>1) { while($r=sql_fetch($res)) $entrop[]=$r['id_signature']; // garder la premiere signature array_shift($entrop); } sql_free($res); if (count($entrop)){ sql_delete('spip_signatures', sql_in('id_signature', $entrop)); } return $entrop; } // obsolete function revision_signature($id_signature, $c=false) { return signature_modifier($id_signature,$c); } ?> editer_petition.php000066600000011663152522552710010465 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; function action_editer_petition_dist($arg=null) { if (is_null($arg)){ $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } // si id_petition n'est pas un nombre, c'est une creation // mais on verifie qu'on a toutes les donnees qu'il faut. if (!$id_petition = intval($arg)) { $id_article = _request('id_article'); if (!($id_article)) { include_spip('inc/headers'); redirige_url_ecrire(); } $id_petition = petition_inserer($id_article); } // Enregistre l'envoi dans la BD if ($id_petition > 0) $err = petition_modifier($id_petition); return array($id_petition,$err); } /** * Mettre a jour une petition existante * * @param int $id_petition * @param array $set * @return string */ function petition_modifier($id_petition, $set=null) { $err = ''; include_spip('inc/modifier'); $c = collecter_requests( // white list array( "email_unique","site_obli", "site_unique","message","texte" ), // black list array('statut','id_article'), // donnees eventuellement fournies $set ); if ($err = objet_modifier_champs('petition', $id_petition,array(),$c)) return $err; // changement d'article ou de statut ? $c = collecter_requests(array('statut','id_article'),array(),$set); $err .= petition_instituer($id_petition, $c); return $err; } /** * Inserer une petition en base * @param <type> $id_article * @return <type> */ function petition_inserer($id_article) { // Si id_article vaut 0 ou n'est pas definie, echouer if (!$id_article = intval($id_article)) return 0; $champs = array( 'id_article' => $id_article, ); // Envoyer aux plugins $champs = pipeline('pre_insertion', array( 'args' => array( 'table' => 'spip_petitions', ), 'data' => $champs ) ); $id_petition = sql_insertq("spip_petitions", $champs); pipeline('post_insertion', array( 'args' => array( 'table' => 'spip_petitions', 'id_objet' => $id_petition ), 'data' => $champs ) ); return $id_petition; } /** * $c est un array ('id_article' = changement d'article) * il n'est pas autoriser de deplacer une petition * * @param $id_petition * @param $c * @param bool $calcul_rub * @return string */ function petition_instituer($id_petition, $c) { include_spip('inc/autoriser'); include_spip('inc/modifier'); $row = sql_fetsel("id_article", "spip_petitions", "id_petition=".intval($id_petition)); $statut_ancien = $statut = $row['statut']; #$date_ancienne = $date = $row['date_time']; $champs = array(); $s = isset($c['statut'])?$c['statut']:$statut; // cf autorisations dans inc/petition_instituer if ($s != $statut /*OR ($d AND $d != $date)*/) { $statut = $champs['statut'] = $s; // En cas de publication, fixer la date a "maintenant" // sauf si $c commande autre chose // ou si l'petition est deja date dans le futur // En cas de proposition d'un petition (mais pas depublication), idem /* if ($champs['statut'] == 'publie') { if ($d) $champs['date_time'] = $date = $d; else $champs['date_time'] = $date = date('Y-m-d H:i:s'); }*/ } // Envoyer aux plugins $champs = pipeline('pre_edition', array( 'args' => array( 'table' => 'spip_petitions', 'id_objet' => $id_petition, 'action'=>'instituer', 'statut_ancien' => $statut_ancien, ), 'data' => $champs ) ); if (!count($champs)) return; // Envoyer les modifs. sql_updateq('spip_petitions',$champs,'id_petition='.intval($id_petition)); // Invalider les caches include_spip('inc/invalideur'); suivre_invalideur("id='petition/$id_petition'"); suivre_invalideur("id='article/".$row['id_article']."'"); // Pipeline pipeline('post_edition', array( 'args' => array( 'table' => 'spip_petitions', 'id_objet' => $id_petition, 'action'=>'instituer', 'statut_ancien' => $statut_ancien, ), 'data' => $champs ) ); // Notifications if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('instituerpetition', $id_petition, array('statut' => $statut, 'statut_ancien' => $statut_ancien) ); } return ''; // pas d'erreur } // http://code.spip.net/@revision_petition function revision_petition($id_petition, $c=null) { return petition_modifier($id_petition,$c); } ?>confirmer_signature.php000066600000010343152522552710011335 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; /** * Confirmer une signature * Retour a l'ecran du lien de confirmation d'une signature de petition. * var_confirm contient le hash de la signature. * Au premier appel on traite et on publie * Au second appel on retourne le resultat a afficher * * @staticvar string $confirm * @param <type> $var_confirm * @return string */ function action_confirmer_signature_dist($var_confirm=null) { static $confirm = null; // reponse mise en cache dans la session ? $code_message = 'signature_message_'.strval($var_confirm); if (isset($GLOBALS['visiteur_session'][$code_message])) return $GLOBALS['visiteur_session'][$code_message]; // reponse deja calculee depuis public/assembler.php if (isset($confirm)) return $confirm; if (is_null($var_confirm)) { $securiser_action = charger_fonction('securiser_action','inc'); $var_confirm = $securiser_action(); } if (!$var_confirm OR $var_confirm == 'publie' OR $var_confirm == 'poubelle') return ''; if (!spip_connect()) { $confirm = _T('petitions:form_pet_probleme_technique'); return ''; } include_spip('inc/texte'); include_spip('inc/filtres'); // Suppression d'une signature par un moderateur ? // Cf. plugin notifications if (isset($_GET['refus'])) { // verifier validite de la cle de suppression // l'id_signature est dans var_confirm include_spip('inc/securiser_action'); if ($id_signature = intval($var_confirm) AND ( $_GET['refus'] == _action_auteur("supprimer signature $id_signature", '', '', 'alea_ephemere') OR $_GET['refus'] == _action_auteur("supprimer signature $id_signature", '', '', 'alea_ephemere_ancien') )) { include_spip('action/editer_signature'); signature_modifier($id_signature,array("statut" => 'poubelle')); $confirm = _T('petitions:info_signature_supprimee'); } else $confirm = _T('petitions:info_signature_supprimee_erreur'); return ''; } $row = sql_fetsel('*', 'spip_signatures', "statut=" . sql_quote($var_confirm), '', "1"); if (!$row) { $confirm = _T('petitions:form_pet_aucune_signature'); return ''; } $id_signature = $row['id_signature']; $id_petition = $row['id_petition']; $adresse_email = $row['ad_email']; $url_site = $row['url_site']; $row = sql_fetsel('email_unique, site_unique, id_article', 'spip_petitions', "id_petition=".intval($id_petition)); $email_unique = $row['email_unique'] == "oui"; $site_unique = $row['site_unique'] == "oui"; $id_article = $row['id_article']; include_spip('action/editer_signature'); signature_modifier($id_signature,array('statut' => 'publie')); if ($email_unique) { $r = "id_petition=".intval($id_petition)." AND ad_email=" . sql_quote($adresse_email); if (signature_entrop($r)) $confirm = _T('petitions:form_pet_deja_signe'); } if ($site_unique) { $r = "id_petition=".intval($id_petition)." AND url_site=" . sql_quote($url_site); if (signature_entrop($r)) $confirm = _T('petitions:form_pet_site_deja_enregistre'); } include_spip('inc/session'); if (!$confirm) { $confirm = _T('petitions:form_pet_signature_validee'); // noter dans la session que l'email est valide // de facon a permettre de signer les prochaines // petitions sans refaire un tour d'email session_set('email_confirme', $adresse_email); // invalider les pages ayant des boucles signatures include_spip('inc/invalideur'); suivre_invalideur("id='signature/$id_signature'"); suivre_invalideur("id='article/$id_article'"); } // Conserver la reponse dans la session du visiteur if ($confirm) session_set($code_message, $confirm); } ?>supprimer_signature.php000066600000002523152522552710011400 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) return; function action_supprimer_signature_dist($id_signature=null){ if (!$id_signature){ $securiser_action = charger_fonction('securiser_action','inc'); $id_signature = $securiser_action(); } if (autoriser('supprimer','signature',$id_signature)){ $id_article = sql_getfetsel('P.id_article','spip_signatures AS S JOIN spip_petitions AS P ON S.id_petition=P.id_petition','S.id_signature='.intval($id_signature)); if ($id_article AND autoriser('modererpetition','article',$id_article)) { include_spip('action/editer_signature'); signature_modifier($id_signature, array('statut'=>'poubelle')); } } } ?>
/home/bourgleram/www/c4d43/./../.static/../398a1/action.tar