From 8cbdc6172d33c296a0cd3b087db67329b2c03fb8 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Fri, 21 Jan 2011 11:19:31 +0000 Subject: [PATCH] supprimer les documents du core. Preliminaires : il reste du code intrique et la gestion des logos qui est batarde. En l'etat le core ne fonctionne pas encore sans l'extension medias --- ecrire/action/editer_article.php | 12 +- ecrire/action/supprimer.php | 1 - ecrire/balise/url_.php | 1 + ecrire/base/auxiliaires.php | 14 - ecrire/base/connect_sql.php | 20 +- ecrire/base/create.php | 38 -- ecrire/base/serial.php | 40 --- ecrire/base/upgrade.php | 5 +- ecrire/core.xml | 1 + ecrire/genie/optimiser.php | 11 - ecrire/inc/autoriser.php | 106 +----- ecrire/inc/config.php | 3 - ecrire/inc/distant.php | 2 +- ecrire/inc/documents.php | 588 ++++++------------------------- ecrire/inc_version.php | 2 +- ecrire/install/etape_3.php | 1 - ecrire/public.php | 11 +- ecrire/public/boucles.php | 62 ---- ecrire/public/interfaces.php | 19 - 19 files changed, 139 insertions(+), 798 deletions(-) diff --git a/ecrire/action/editer_article.php b/ecrire/action/editer_article.php index 8bd60caf89..d9decea0f5 100644 --- a/ecrire/action/editer_article.php +++ b/ecrire/action/editer_article.php @@ -24,19 +24,11 @@ function action_editer_article_dist($arg=null) { // mais on verifie qu'on a toutes les donnees qu'il faut. if (!$id_article = intval($arg)) { $id_parent = _request('id_parent'); - $id_auteur = $GLOBALS['visiteur_session']['id_auteur']; - if (!($id_parent AND $id_auteur)) { + if (!($id_parent AND $GLOBALS['visiteur_session']['id_auteur'])) { include_spip('inc/headers'); redirige_url_ecrire(); } - if (($id_article = insert_article($id_parent)) > 0) - - # cf. GROS HACK ecrire/inc/getdocument - # rattrapper les documents associes a cet article nouveau - # ils ont un id = 0-id_auteur - - sql_updateq("spip_documents_liens", array("id_objet" => $id_article), array("id_objet = ".(0-$id_auteur),"objet='article'")); - } + } // Enregistre l'envoi dans la BD if ($id_article > 0) $err = articles_set($id_article); diff --git a/ecrire/action/supprimer.php b/ecrire/action/supprimer.php index fbb5db58d1..1364b87bc6 100644 --- a/ecrire/action/supprimer.php +++ b/ecrire/action/supprimer.php @@ -13,7 +13,6 @@ if (!defined('_ECRIRE_INC_VERSION')) return; include_spip('inc/charsets'); # pour le nom de fichier -include_spip('inc/documents'); // Effacer une rubrique // http://doc.spip.org/@action_supprimer_dist diff --git a/ecrire/balise/url_.php b/ecrire/balise/url_.php index 553efd35be..307416f0cc 100644 --- a/ecrire/balise/url_.php +++ b/ecrire/balise/url_.php @@ -46,6 +46,7 @@ function generer_generer_url_arg($type, $p, $_id) return NULL; } $s = _q($s); + # exception des urls de documents sur un serveur distant... if ($type == 'document') { return "quete_meta('adresse_site', $s) . '/' .\n\t" . diff --git a/ecrire/base/auxiliaires.php b/ecrire/base/auxiliaires.php index c86926f6f1..65b80ea733 100644 --- a/ecrire/base/auxiliaires.php +++ b/ecrire/base/auxiliaires.php @@ -35,16 +35,6 @@ $spip_auteurs_liens_key = array( "PRIMARY KEY" => "id_auteur,id_objet,objet", "KEY id_auteur" => "id_auteur"); -$spip_documents_liens = array( - "id_document" => "bigint(21) DEFAULT '0' NOT NULL", - "id_objet" => "bigint(21) DEFAULT '0' NOT NULL", - "objet" => "VARCHAR (25) DEFAULT '' NOT NULL", - "vu" => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL"); - -$spip_documents_liens_key = array( - "PRIMARY KEY" => "id_document,id_objet,objet", - "KEY id_document" => "id_document"); - $spip_meta = array( "nom" => "VARCHAR (255) NOT NULL", "valeur" => "text DEFAULT ''", @@ -58,10 +48,6 @@ $tables_auxiliaires['spip_auteurs_liens'] = array( 'field' => &$spip_auteurs_liens, 'key' => &$spip_auteurs_liens_key); -$tables_auxiliaires['spip_documents_liens'] = array( - 'field' => &$spip_documents_liens, - 'key' => &$spip_documents_liens_key); - $tables_auxiliaires['spip_meta'] = array( 'field' => &$spip_meta, 'key' => &$spip_meta_key); diff --git a/ecrire/base/connect_sql.php b/ecrire/base/connect_sql.php index 7fd0bc11a9..c5fe694b0a 100644 --- a/ecrire/base/connect_sql.php +++ b/ecrire/base/connect_sql.php @@ -243,11 +243,11 @@ function table_objet($type,$serveur='') { // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions $surnoms = pipeline('declarer_tables_objets_surnoms', array( - 'doc' => 'documents', # pour les modeles + # pour les modeles + # a enlever ? + 'doc' => 'documents', 'img' => 'documents', 'emb' => 'documents', - 'type_document' => 'types_documents', # hum - 'extension' => 'types_documents' # hum )); } if (isset($surnoms[$type])) @@ -278,15 +278,11 @@ function table_objet_sql($type,$serveur='') { // http://doc.spip.org/@id_table_objet function id_table_objet($type,$serveur='') { $type = objet_type($type,$serveur); - if ($type == 'type') - return 'extension'; - else { - if (!$type) return; - $t = table_objet($type); - $trouver_table = charger_fonction('trouver_table', 'base'); - $desc = $trouver_table($t,$serveur); - return @$desc['key']["PRIMARY KEY"]; - } + if (!$type) return; + $t = table_objet($type); + $trouver_table = charger_fonction('trouver_table', 'base'); + $desc = $trouver_table($t,$serveur); + return @$desc['key']["PRIMARY KEY"]; } // http://doc.spip.org/@objet_type diff --git a/ecrire/base/create.php b/ecrire/base/create.php index ee5fe7eec6..c0dafc4736 100644 --- a/ecrire/base/create.php +++ b/ecrire/base/create.php @@ -134,42 +134,4 @@ function maj_tables($upgrade_tables=array(),$serveur=''){ $serveur); } -/** - * Creer la table des types de document - * - * http://doc.spip.org/@creer_base_types_doc - * - * @param string $serveur - * @return void - */ -function creer_base_types_doc($serveur='') { - global $tables_images, $tables_sequences, $tables_documents, $tables_mime; - - foreach ($tables_mime as $extension => $type_mime) { - if (isset($tables_images[$extension])) { - $titre = $tables_images[$extension]; - $inclus='image'; - } - else if (isset($tables_sequences[$extension])) { - $titre = $tables_sequences[$extension]; - $inclus='embed'; - } - else { - $inclus='non'; - if (isset($tables_documents[$extension])) - $titre = $tables_documents[$extension]; - else - $titre = ''; - } - // Init ou Re-init ==> replace pas insert - sql_replace('spip_types_documents', - array('mime_type' => $type_mime, - 'titre' => $titre, - 'inclus' => $inclus, - 'extension' => $extension, - 'upload' => 'oui' - ), - '', $serveur); - } -} ?> diff --git a/ecrire/base/serial.php b/ecrire/base/serial.php index 8bd879af02..7ca26266d3 100644 --- a/ecrire/base/serial.php +++ b/ecrire/base/serial.php @@ -118,42 +118,6 @@ $spip_rubriques_key = array( # "KEY url_propre" => "url_propre" ); -$spip_documents = array( - "id_document" => "bigint(21) NOT NULL", - "id_vignette" => "bigint(21) DEFAULT '0' NOT NULL", - "extension" => "VARCHAR(10) DEFAULT '' NOT NULL", - "titre" => "text DEFAULT '' NOT NULL", - "date" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", - "descriptif" => "text DEFAULT '' NOT NULL", - "fichier" => "varchar(255) DEFAULT '' NOT NULL", - "taille" => "integer", - "largeur" => "integer", - "hauteur" => "integer", - "mode" => "ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL", - "distant" => "VARCHAR(3) DEFAULT 'non'", - "maj" => "TIMESTAMP"); - -$spip_documents_key = array( - "PRIMARY KEY" => "id_document", - "KEY id_vignette" => "id_vignette", - "KEY mode" => "mode", - "KEY extension" => "extension"); -$spip_documents_join = array( - "id_document"=>"id_document", - "extension"=>"extension"); - -$spip_types_documents = array( - "extension" => "varchar(10) DEFAULT '' NOT NULL", - "titre" => "text DEFAULT '' NOT NULL", - "descriptif" => "text DEFAULT '' NOT NULL", - "mime_type" => "varchar(100) DEFAULT '' NOT NULL", - "inclus" => "ENUM('non', 'image', 'embed') DEFAULT 'non' NOT NULL", - "upload" => "ENUM('oui', 'non') DEFAULT 'oui' NOT NULL", - "maj" => "TIMESTAMP"); - -$spip_types_documents_key = array( - "PRIMARY KEY" => "extension", - "KEY inclus" => "inclus"); /// Attention: mes_fonctions peut avoir deja defini cette variable /// il faut donc rajouter, mais pas reinitialiser @@ -164,10 +128,6 @@ $tables_principales['spip_auteurs'] = array('field' => &$spip_auteurs, 'key' => &$spip_auteurs_key,'join' => &$spip_auteurs_join); $tables_principales['spip_rubriques'] = array('field' => &$spip_rubriques, 'key' => &$spip_rubriques_key); -$tables_principales['spip_documents'] = - array('field' => &$spip_documents, 'key' => &$spip_documents_key, 'join' => &$spip_documents_join); -$tables_principales['spip_types_documents'] = - array('field' => &$spip_types_documents, 'key' => &$spip_types_documents_key); $tables_principales = pipeline('declarer_tables_principales',$tables_principales); } diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php index 7abefd6580..ec62bae368 100644 --- a/ecrire/base/upgrade.php +++ b/ecrire/base/upgrade.php @@ -192,8 +192,9 @@ function serie_alter($serie, $q = array(), $meta='', $table='meta') { // http://doc.spip.org/@upgrade_types_documents function upgrade_types_documents() { - include_spip('base/create'); - creer_base_types_doc(); + if (include_spip('base/medias') + AND function_exists('creer_base_types_doc')); + creer_base_types_doc(); } // http://doc.spip.org/@upgrade_test diff --git a/ecrire/core.xml b/ecrire/core.xml index 82592b7db2..039226cc17 100644 --- a/ecrire/core.xml +++ b/ecrire/core.xml @@ -241,6 +241,7 @@ <pipeline><nom>declarer_tables_objets_surnoms</nom><action></action></pipeline> <pipeline><nom>declarer_type_surnoms</nom><action></action></pipeline> <pipeline><nom>declarer_url_objets</nom><action></action></pipeline> + <pipeline><nom>detecter_fond_par_defaut</nom><action></action></pipeline> <pipeline><nom>definir_session</nom><action></action></pipeline> <pipeline><nom>delete_tables</nom><action></action></pipeline> <pipeline><nom>editer_contenu_objet</nom><action></action></pipeline> diff --git a/ecrire/genie/optimiser.php b/ecrire/genie/optimiser.php index e1cd373448..8c65b3ab42 100644 --- a/ecrire/genie/optimiser.php +++ b/ecrire/genie/optimiser.php @@ -161,17 +161,6 @@ function optimiser_base_disparus($attente = 86400) { sql_delete("spip_auteurs", "statut='nouveau' AND maj < ". sql_quote(date('Y-m-d', time()-45*24*3600))); - // - // Documents - // - - include_spip('action/editer_liens'); - // optimiser les liens de tous les documents vers des objets effaces - $n+= objet_optimiser_liens(array('document'=>'*'),'*'); - - - // on ne nettoie volontairement pas automatiquement les documents orphelins - $n = pipeline('optimiser_base_disparus', array( 'args'=>array( 'attente' => $attente, diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php index bf8bb24467..bbec4ac6b5 100644 --- a/ecrire/inc/autoriser.php +++ b/ecrire/inc/autoriser.php @@ -228,65 +228,7 @@ function autoriser_rubrique_modifier_dist($faire, $type, $id, $qui, $opt) { autoriser('publierdans', 'rubrique', $id, $qui, $opt); } -// On ne peut joindre un document qu'a un article qu'on a le droit d'editer -// mais il faut prevoir le cas d'une *creation* par un redacteur, qui correspond -// au hack id_article = 0-id_auteur -// http://doc.spip.org/@autoriser_joindredocument_dist -function autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt){ - return - autoriser('modifier', $type, $id, $qui, $opt) - OR ( - $type == 'article' - AND $id<0 - AND abs($id) == $qui['id_auteur'] - AND autoriser('ecrire', $type, $id, $qui, $opt) - ); -} - -// On ne peut modifier un document que s'il est lie a un objet qu'on a le droit -// d'editer *et* qu'il n'est pas lie a un objet qu'on n'a pas le droit d'editer -// http://doc.spip.org/@autoriser_document_modifier_dist -function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt){ - static $m = array(); - - if ($qui['statut'] == '0minirezo' - AND !$qui['restreint']) - return true; - - if (!isset($m[$id])) { - $vu = false; - $interdit = false; - $s = sql_select("id_objet,objet", "spip_documents_liens", "id_document=".sql_quote($id)); - while ($t = sql_fetch($s)) { - if (autoriser('modifier', $t['objet'], $t['id_objet'], $qui, $opt)) { - $vu = true; - } - else { - $interdit = true; - break; - } - } - $m[$id] = ($vu && !$interdit); - } - - return $m[$id]; -} - - -// On ne peut supprimer un document que s'il n'est lie a aucun objet -// c'est autorise pour tout auteur ayant acces a ecrire -// http://doc.spip.org/@autoriser_document_modifier_dist -function autoriser_document_supprimer_dist($faire, $type, $id, $qui, $opt){ - if (!intval($id) - OR !$qui['id_auteur'] - OR !autoriser('ecrire','','',$qui)) - return false; - if (sql_countsel('spip_documents_liens', 'id_document='.intval($id))) - return false; - - return true; -} // Autoriser a modifier l'article $id // = publierdans rubrique parente @@ -310,8 +252,11 @@ function autoriser_article_modifier_dist($faire, $type, $id, $qui, $opt) { // Voir un objet // http://doc.spip.org/@autoriser_voir_dist function autoriser_voir_dist($faire, $type, $id, $qui, $opt) { - if ($type == 'document') - return autoriser_document_voir_dist($faire, $type, $id, $qui, $opt); + # securite, mais on aurait pas du arriver ici ! + if (function_exists($f='autoriser_'.$type.'_voir') OR function_exists($f='autoriser_'.$type.'_voir_dist')){ + return $f($faire, $type, $id, $qui, $opt); + } + if ($qui['statut'] == '0minirezo') return true; if ($type == 'auteur') return false; if ($type == 'groupemots') { @@ -460,39 +405,6 @@ function autoriser_chargerftp_dist($faire, $type, $id, $qui, $opt) { } -// -// Peut-on voir un document dans _DIR_IMG ? -// Tout le monde (y compris les visiteurs non enregistres), puisque par -// defaut ce repertoire n'est pas protege ; si une extension comme -// acces_restreint a positionne creer_htaccess, on regarde -// si le document est lie a un element publie -// (TODO: a revoir car c'est dommage de sortir de l'API true/false) -// -// http://doc.spip.org/@autoriser_document_voir_dist -function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) { - - if (!isset($GLOBALS['meta']["creer_htaccess"]) - OR $GLOBALS['meta']["creer_htaccess"] != 'oui') - return true; - - if ((!is_numeric($id)) OR $id < 0) return false; - - if (in_array($qui['statut'], array('0minirezo', '1comite'))) - return 'htaccess'; - - if ($liens = sql_allfetsel('objet,id_objet', 'spip_documents_liens', 'id_document='.intval($id))) - foreach ($liens as $l) { - $table_sql = table_objet_sql($l['objet']); - $id_table = id_table_objet($l['objet']); - if (sql_countsel($table_sql, "$id_table = ". intval($l['id_objet']) - . (in_array($l['objet'], array('article', 'rubrique', 'breve')) - ? " AND statut = 'publie'" - : '') - ) > 0) - return 'htaccess'; - } - return false; -} // Qui peut activer le debugueur ? // http://doc.spip.org/@autoriser_debug_dist @@ -595,12 +507,4 @@ function autoriser_base_reparer_dist($faire, $type, $id, $qui, $opts) { return true; } - -/** - * Auto-association de documents a du contenu editorial qui le reference - * par defaut true pour tous les objets - */ -function autoriser_autoassocierdocument_dist($faire, $type, $id, $qui, $opts) { - return true; -} ?> diff --git a/ecrire/inc/config.php b/ecrire/inc/config.php index 480e083c67..de6ddd5851 100644 --- a/ecrire/inc/config.php +++ b/ecrire/inc/config.php @@ -387,9 +387,6 @@ function liste_metas() 'jours_neuf' => '', 'quoi_de_neuf' => 'non', - 'documents_article' => 'non', - 'documents_rubrique' => 'non', - 'documents_date' => 'non', 'syndication_integrale' => 'oui', 'charset' => _DEFAULT_CHARSET, 'dir_img' => substr(_DIR_IMG,strlen(_DIR_RACINE)), diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php index d89b1189aa..c53c5b7cf1 100644 --- a/ecrire/inc/distant.php +++ b/ecrire/inc/distant.php @@ -346,7 +346,7 @@ function recuperer_entetes($f, $date_verif='') // http://doc.spip.org/@nom_fichier_copie_locale function nom_fichier_copie_locale($source, $extension) { - include_spip('inc/getdocument'); + include_spip('inc/documents'); $d = creer_repertoire_documents('distant'); # IMG/distant/ $d = sous_repertoire($d, $extension); # IMG/distant/pdf/ diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php index a0ee9ba917..f9da217935 100644 --- a/ecrire/inc/documents.php +++ b/ecrire/inc/documents.php @@ -12,12 +12,15 @@ if (!defined('_ECRIRE_INC_VERSION')) return; -include_spip('inc/actions'); // *action_auteur et determine_upload -include_spip('inc/date'); - -// donne le chemin du fichier relatif a _DIR_IMG -// pour stockage 'tel quel' dans la base de donnees -// http://doc.spip.org/@set_spip_doc +/** + * donne le chemin du fichier relatif a _DIR_IMG + * pour stockage 'tel quel' dans la base de donnees + * + * http://doc.spip.org/@set_spip_doc + * + * @param string $fichier + * @return string + */ function set_spip_doc($fichier) { if (strpos($fichier, _DIR_IMG) === 0) return substr($fichier, strlen(_DIR_IMG)); @@ -25,8 +28,14 @@ function set_spip_doc($fichier) { return $fichier; // ex: fichier distant } -// donne le chemin complet du fichier -// http://doc.spip.org/@get_spip_doc +/** + * donne le chemin complet du fichier + * + * http://doc.spip.org/@get_spip_doc + * + * @param string $fichier + * @return bool|string + */ function get_spip_doc($fichier) { // fichier distant if (preg_match(',^\w+://,', $fichier)) @@ -44,486 +53,121 @@ function get_spip_doc($fichier) { return $fichier; } -// Constante indiquant le charset probable des documents non utf-8 joints - -if (!defined('CHARSET_JOINT')) define('CHARSET_JOINT', 'iso-8859-1'); +/** + * Creer IMG/pdf/ + * + * http://doc.spip.org/@creer_repertoire_documents + * + * @param $ext + * @return string + */ +function creer_repertoire_documents($ext) { + $rep = sous_repertoire(_DIR_IMG, $ext); -// Filtre pour #FICHIER permettant d'incruster le contenu d'un document -// Si 2e arg fourni, conversion dans le charset du site si possible - -// http://doc.spip.org/@contenu_document -function contenu_document($arg, $charset='') -{ - if (is_numeric($arg)) { - $r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".sql_quote($arg)); - if (!$r) return ''; - $f = $r['fichier']; - $f = ($r['distant'] =='oui') ? _DIR_RACINE . copie_locale($f) : get_spip_doc($f); + if (!$ext OR !$rep) { + spip_log("creer_repertoire_documents '$rep' interdit"); + exit; } - else { - if (!@file_exists($f=$arg)){ - if (!$f = copie_locale($f)) - return ''; - $f = _DIR_RACINE . $f; - } - } - - $r = spip_file_get_contents($f); - if ($charset) { - include_spip('inc/charset'); - if ($charset !== 'auto') { - $r = importer_charset($r, $charset); - } elseif ($GLOBALS['meta']['charset'] == 'utf-8' AND !is_utf8($r)) - $r = importer_charset($r, CHARSET_JOINT); + // Cette variable de configuration peut etre posee par un plugin + // par exemple acces_restreint + if ($GLOBALS['meta']["creer_htaccess"] == 'oui') { + include_spip('inc/acces'); + verifier_htaccess($rep); } - return $r; -} - -// http://doc.spip.org/@generer_url_document_dist -function generer_url_document_dist($id_document, $args='', $ancre='') { - - include_spip('inc/autoriser'); - if (!autoriser('voir', 'document', $id_document)) return ''; - - $r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".sql_quote($id_document)); - - 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') - // idem si ce doc est visible par tous - // ie si ca ne renvoie pas false - OR autoriser('voir', 'document', $id_document, array())) - return get_spip_doc($f); - - include_spip('inc/securiser_action'); - - // cette action doit etre publique ! - return generer_url_action('acceder_document', - $args . ($args ? "&" : '') - . 'arg='.$id_document - . ($ancre ? "&ancre=$ancre" : '') - . '&cle=' . calculer_cle_action($id_document.','.$f) - . '&file=' . rawurlencode($f) - ,false,true); -} - -// http://doc.spip.org/@document_et_vignette -function document_et_vignette($document, $url, $portfolio=false) { - $image = $document['id_vignette']; - - if ($image) - $image = sql_fetsel("*", "spip_documents", "id_document = ".$image); - if ($image) { - if (!$portfolio OR !($GLOBALS['meta']['creer_preview'] == 'oui')) { - $x = $image['largeur']; - $y = $image['hauteur']; - } else { - $x = 120; - $y = 110; - } - $image = get_spip_doc($image['fichier']); - } else { - if ($portfolio) { - $x = 110; - $y = 120; - } else $x = $y =-1; - } - if (!$url) $url = generer_url_document_dist($document['id_document'], 'document'); - return vignette_automatique($image, $document, $url, $x, $y, '', "miniature_document"); + return $rep; } -// -// Affiche le document avec sa vignette par defaut -// -// Attention : en mode 'doc', si c'est un fichier graphique on prefere -// afficher une vue reduite, quand c'est possible (presque toujours, donc) -// En mode 'image', l'image conserve sa taille -// -// A noter : dans le portfolio prive on pousse le vice jusqu'a reduire la taille -// de la vignette -> c'est a ca que sert la variable $portfolio -// http://doc.spip.org/@vignette_automatique -function vignette_automatique($img, $doc, $lien, $x=0, $y=0, $align='', $class='spip_logos') -{ - include_spip('inc/distant'); - include_spip('inc/texte'); - include_spip('inc/filtres_images_mini'); - $e = $doc['extension']; - if (!$img) { - if ($img = image_du_document($doc)) { - if (!$x AND !$y) // eviter une double reduction - $img = image_reduire($img); - } - else{ - $f = charger_fonction('vignette','inc'); - $img = $f($e, false); - $size = @getimagesize($img); - $img = "<img src='$img' ".$size[3]." />"; - } - } - else{ - $size = @getimagesize($img); - $img = "<img src='$img' ".$size[3]." />"; - } - // on appelle image_reduire independamment de la presence ou non - // des librairies graphiques - // la fonction sait se debrouiller et faire de son mieux dans tous les cas - if ($x OR $y) { - $img = image_reduire($img, $x, $y); - } - $img = inserer_attribut($img, 'alt', ''); - $img = inserer_attribut($img, 'class', $class); - if ($align) $img = inserer_attribut($img, 'align', $align); - - if (!$lien) return $img; - - $titre = supprimer_tags(typo($doc['titre'])); - $titre = " - " .taille_en_octets($doc['taille']) - . ($titre ? " - $titre" : ""); - - $type = sql_fetsel('titre, mime_type','spip_types_documents', "extension = " . sql_quote($e)); - - $mime = $type['mime_type']; - $titre = attribut_html(couper($type['titre'] . $titre, 80)); - - return "<a href='$lien' type='$mime' title='$titre'>$img</a>"; -} - -// Trouve une image caracteristique d'un document. -// Si celui-ci est une image et que les outils graphiques sont dispos, -// retourner le document (en exploitant sa copie locale s'il est distant). -// Autrement retourner la vignette fournie par SPIP pour ce type MIME -// Resultat: un fichier local existant - -function image_du_document($document) -{ - $e = $document['extension']; - if ((strpos($GLOBALS['meta']['formats_graphiques'], $e) !== false) - AND (!test_espace_prive() OR $GLOBALS['meta']['creer_preview']=='oui') - AND $document['fichier']) { - if ($document['distant'] == 'oui') { - $image = _DIR_RACINE.copie_locale($document['fichier']); - } - else - $image = get_spip_doc($document['fichier']); - if (@file_exists($image)) return $image; - } - return ''; -} - -// -// Afficher un document dans la colonne de gauche -// - -// http://doc.spip.org/@afficher_documents_colonne -function afficher_documents_colonne($id, $type="article",$script=NULL) { - include_spip('inc/autoriser'); - - // il faut avoir les droits de modif sur l'article pour pouvoir uploader ! - if (!autoriser('joindredocument',$type,$id)) - return ""; - - include_spip('inc/presentation'); // pour l'aide quand on appelle afficher_documents_colonne depuis un squelette - // seuls cas connus : article, breve ou rubrique - if ($script==NULL){ - $script = $type.'s_edit'; - if (!test_espace_prive()) - $script = parametre_url(self(),"show_docs",''); - } - $id_document_actif = _request('show_docs'); - - $joindre = charger_fonction('joindre', 'inc'); - - define('_INTERFACE_DOCUMENTS', true); - if (!_INTERFACE_DOCUMENTS - OR $GLOBALS['meta']["documents_$type"]=='non') { - - // Ajouter nouvelle image - $ret = "<div id='images'>\n" - . $joindre(array( - 'cadre' => 'relief', - 'icone' => 'image-24.gif', - 'fonction' => 'new', - 'titre' => majuscules(_T('bouton_ajouter_image')).aide("ins_img"), - 'script' => $script, - 'args' => "id_$type=$id", - 'id' => $id, - 'intitule' => _T('info_telecharger'), - 'mode' => 'image', - 'type' => $type, - 'ancre' => '', - 'id_document' => 0, - 'iframe_script' => generer_url_ecrire("documents_colonne","id=$id&type=$type",true) - )) - . '</div><br />'; - - if (!_INTERFACE_DOCUMENTS) { - //// Images sans documents - $res = sql_select("D.id_document", "spip_documents AS D LEFT JOIN spip_documents_liens AS T ON T.id_document=D.id_document", "T.id_objet=" . intval($id) . " AND T.objet=" . sql_quote($type) . " AND D.mode='image'", "", "D.id_document"); - - $ret .= "\n<div id='liste_images'>"; - - while ($doc = sql_fetch($res)) { - $id_document = $doc['id_document']; - $deplier = ($id_document_actif==$id_document); - $ret .= afficher_case_document($id_document, $id, $script, $type, $deplier); - } - - $ret .= "</div><br /><br />\n"; - } - } - - /// Ajouter nouveau document - $bouton = !_INTERFACE_DOCUMENTS - ? majuscules(_T('bouton_ajouter_document')).aide("ins_doc") - : (_T('bouton_ajouter_image_document')).aide("ins_doc"); - - $ret .= "<div id='documents'></div>\n<div id='portfolio'></div>\n"; - if ($GLOBALS['meta']["documents_$type"]!='non') { - $ret .= $joindre(array( - 'cadre' => _INTERFACE_DOCUMENTS ? 'relief' : 'enfonce', - 'icone' => 'doc-24.gif', - 'fonction' => 'new', - 'titre' => $bouton, - 'script' => $script, - 'args' => "id_$type=$id", - 'id' => $id, - 'intitule' => _T('info_telecharger'), - 'mode' => _INTERFACE_DOCUMENTS ? 'choix' : 'document', - 'type' => $type, - 'ancre' => '', - 'id_document' => 0, - 'iframe_script' => generer_url_ecrire("documents_colonne","id=$id&type=$type",true) - )); - } - - // Afficher les documents lies - $ret .= "<br /><div id='liste_documents'>\n"; - - //// Documents associes - $res = sql_select("D.id_document", "spip_documents AS D LEFT JOIN spip_documents_liens AS T ON T.id_document=D.id_document", "T.id_objet=" . intval($id) . " AND T.objet=" . sql_quote($type) - . ((!_INTERFACE_DOCUMENTS) - ? " AND D.mode='document'" - : " AND D.mode IN ('image','document')" - ), "", "D.mode, D.id_document"); - - while($row = sql_fetch($res)) - $ret .= afficher_case_document($row['id_document'], $id, $script, $type, ($id_document_actif==$row['id_document'])); - - $ret .= "</div>"; - if (test_espace_prive()){ - $ret .= http_script('', "async_upload.js") - . http_script('$("form.form_upload").async_upload(async_upload_article_edit)'); - } - - return $ret; +/** + * Efface le repertoire de maniere recursive ! + * + * http://doc.spip.org/@effacer_repertoire_temporaire + * + * @param string $nom + */ +function effacer_repertoire_temporaire($nom) { + $d = opendir($nom); + while (($f = readdir($d)) !== false) { + if (is_file("$nom/$f")) + spip_unlink("$nom/$f"); + else if ($f <> '.' AND $f <> '..' + AND is_dir("$nom/$f")) + effacer_repertoire_temporaire("$nom/$f"); + } + closedir($d); + @rmdir($nom); } // -// Affiche le raccourci <doc123|left> -// et l'insere quand on le clique -// -// http://doc.spip.org/@affiche_raccourci_doc -function affiche_raccourci_doc($doc, $id, $align) { - static $num = 0; - - if ($align) { - $pipe = "|$align"; - - if ($GLOBALS['browser_barre']) - $onclick = "\nondblclick=\"barre_inserer('\\x3C$doc$id$pipe>', $('textarea[name=texte]')[0]);\"\ntitle=\"". str_replace('&', '&', entites_html(_T('double_clic_inserer_doc')))."\""; - } else { - $align='center'; - } - - return - ((++$num > 1) ? "" : http_script('', "spip_barre.js")) - . "\n<div style='text-align: $align'$onclick><$doc$id$pipe></div>\n"; +/** + * Copier un document $source un dossier IMG/$ext/$orig.$ext + * en numerotant eventuellement si un du meme nom existe deja + * + * http://doc.spip.org/@copier_document + * + * @param string $ext + * @param string $orig + * @param string $source + * @return bool|mixed|string + */ +function copier_document($ext, $orig, $source) { + + $orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc + $dir = creer_repertoire_documents($ext); + $dest = preg_replace("/[^._=-\w\d]+/", "_", + translitteration(preg_replace("/\.([^.]+)$/", "", + preg_replace("/<[^>]*>/", '', basename($orig))))); + + // ne pas accepter de noms de la forme -r90.jpg qui sont reserves + // pour les images transformees par rotation (action/documenter) + $dest = preg_replace(',-r(90|180|270)$,', '', $dest); + + // Si le document "source" est deja au bon endroit, ne rien faire + if ($source == ($dir . $dest . '.' . $ext)) + return $source; + + // sinon tourner jusqu'a trouver un numero correct + $n = 0; + while (@file_exists($newFile = $dir . $dest .($n++ ? ('-'.$n) : '').'.'.$ext)); + + return deplacer_fichier_upload($source, $newFile); } +/** + * Deplacer ou copier un fichier + * + * http://doc.spip.org/@deplacer_fichier_upload + * + * @param string $source + * @param string $dest + * @param bool $move + * @return bool|mixed|string + */ +function deplacer_fichier_upload($source, $dest, $move=false) { + // Securite + if (substr($dest,0,strlen(_DIR_RACINE))==_DIR_RACINE) + $dest = _DIR_RACINE.preg_replace(',\.\.+,', '.', substr($dest,strlen(_DIR_RACINE))); + else + $dest = preg_replace(',\.\.+,', '.', $dest); -// Est-ce que le document est inclus dans le texte ? -// http://doc.spip.org/@est_inclus -function est_inclus($id_document) { - return isset($GLOBALS['doublons_documents_inclus']) ? - in_array($id_document,$GLOBALS['doublons_documents_inclus']) : false; -} - -// -// Afficher un document sous forme de bloc depliable -// en donnant un apercu -// et en indiquer le raccourci permettant l'incrustation -// Pour les distant, donner un bouton pour rappatriement (trombone) -// Pour les images, donnner les boutons de rotations - - -// http://doc.spip.org/@afficher_case_document -function afficher_case_document($id_document, $id, $script, $type, $deplier=false) { - global $spip_lang_right; - - $document = sql_fetsel("D.id_document, D.id_vignette,D.extension,D.titre,D.descriptif,D.fichier,D.largeur,D.hauteur,D.taille,D.mode,D.distant, D.date, L.vu", "spip_documents AS D INNER JOIN spip_documents_liens AS L ON L.id_document=D.id_document", "L.id_objet=".intval($id)." AND objet=".sql_quote($type)." AND L.id_document=".intval($id_document)); - - if (!$document) return ""; - - $id_vignette = $document['id_vignette']; - $extension = $document['extension']; - $descriptif = $document['descriptif']; - $fichier = $document['fichier']; - $largeur = $document['largeur']; - $hauteur = $document['hauteur']; - $mode = $document['mode']; - $distant = $document['distant']; - $titre = $document['titre']; - $legender = charger_fonction('legender', 'inc'); - $dist = ''; - - $r = sql_fetsel("titre,inclus", "spip_types_documents", "extension=".sql_quote($extension)); - if ($r) { - $type_inclus = $r['inclus']; - $type_titre = $r['titre']; - } - - if ($mode == 'document') { - - if ($distant == 'oui') { - include_spip('inc/tourner'); - $dist = "\n<div class='verdana1' style='float: $spip_lang_right; text-align: $spip_lang_right;'>" - . "\n<img src='" . chemin_image('attachment.gif') . "'\n\talt=\"$fichier\"\n\ttitle=\"$fichier\" />\n" - . bouton_copier_local($document, $type, $id, $id_document, $script) - . "</div>\n"; - } - - if (est_inclus($id_document)) - $raccourci = affiche_raccourci_doc('doc', $id_document, ''); - else { - $vign= (($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0); - $raccourci = $vign ? ("<b>"._T('info_inclusion_vignette')."</b><br />") : ''; - - $raccourci .= "<div style='color: 333333'>" - . affiche_raccourci_doc('doc', $id_document, 'left') - . affiche_raccourci_doc('doc', $id_document, 'center') - . affiche_raccourci_doc('doc', $id_document, 'right') - . "</div>\n"; - - if ($vign) { - $raccourci .= "<div style='padding:2px; ' class='arial1 spip_xx-small'>"; - $raccourci .= "<b>"._T('info_inclusion_directe')."</b><br />"; - $raccourci .= "<div style='color: 333333'>" - . affiche_raccourci_doc('emb', $id_document, 'left') - . affiche_raccourci_doc('emb', $id_document, 'center') - . affiche_raccourci_doc('emb', $id_document, 'right') - . "</div>\n"; - $raccourci .= "</div>"; - } - } - $ninclus = false; - $icone = 'doc-24.gif'; - $style = 'e'; - - } else if ($mode == 'image') { - - $icone = 'image-24.gif'; - $style = 'r'; - $ninclus = ($type_inclus !== 'image'); - $doc = ($descriptif OR $titre) ? 'doc' : 'img'; - - if (est_inclus($id_document)) - $raccourci = affiche_raccourci_doc($doc, $id_document, ''); - else { - $raccourci = - affiche_raccourci_doc($doc, $id_document, 'left') - . affiche_raccourci_doc($doc, $id_document, 'center') - . affiche_raccourci_doc($doc, $id_document, 'right'); + if ($move) $ok = @rename($source, $dest); + else $ok = @copy($source, $dest); + if (!$ok) $ok = @move_uploaded_file($source, $dest); + if ($ok) + @chmod($dest, _SPIP_CHMOD & ~0111); + else { + $f = @fopen($dest,'w'); + if ($f) { + fclose ($f); + } else { + include_spip('inc/flock'); + raler_fichier($dest); } - + spip_unlink($dest); } - $cadre = lignes_longues(typo($titre ? $titre : basename($fichier)), 20); - // encapsuler chaque document dans un container pour permettre son remplacement en ajax - return '<div>' - . debut_cadre($style, $icone, '', $cadre, "document$id_document") - . ($ninclus ? '' : - ("\n<div style='text-align: center'>" - . $dist - . document_et_vignette($document, '', true) - . '</div>' - . "\n<div class='verdana1' style='text-align: center; color: black;'>\n" - . ($type_titre ? $type_titre : - ( _T('info_document').' '.majuscules($extension))) - . "</div>")) - . $apercu - . "\n<div style='padding:2px; ' class='arial1 spip_xx-small'>" - . $raccourci - . "</div>\n" - . $legender($id_document, $document, $script, $type, $id, "document$id_document", $deplier) - . fin_cadre($style) - . '</div>'; + return $ok ? $dest : false; } -// Etablit la liste des documents orphelins, c'est-a-dire qui ne sont lies -// a rien ; renvoie un tableau (id_document) -// ici on ne join pas avec la table objet pour voir si l'objet existe vraiment -// on considere que c'est le role d'optimiser que de nettoyer les liens morts -// sinon eventuellement appeler avant une fonction nettoyer_liens_documents -// http://doc.spip.org/@lister_les_documents_orphelins -function lister_les_documents_orphelins() { - $s = sql_select("D.id_document, D.id_vignette", "spip_documents AS D LEFT JOIN spip_documents_liens AS L ON D.id_document=L.id_document", "(L.id_objet IS NULL)"); - - $orphelins = array(); - while ($t = sql_fetch($s)) { - $orphelins[$t['id_document']] = true; - // la vignette d'un orphelin est orpheline - if ($t['id_vignette']) - $orphelins[$t['id_vignette']] = true; - - } - - // les vignettes qui n'appartiennent a aucun document sont aussi orphelines - $s = sql_select("V.id_document", "spip_documents AS V LEFT JOIN spip_documents AS D ON V.id_document=D.id_vignette", "V.mode='vignette' AND D.id_document IS NULL"); - while ($t = sql_fetch($s)) - $orphelins[$t['id_document']] = true; - - return array_keys(array_filter($orphelins)); -} - -// Supprimer les documents de la table spip_documents, -// ainsi que les fichiers correspondants dans IMG/ -// Fonction a n'appeler que sur des documents orphelins -// http://doc.spip.org/@supprimer_documents -function supprimer_documents($liste = array()) { - if (!count($liste)) - return; - - $in = sql_in('id_document', $liste); - - // Supprimer les fichiers locaux et les copies locales - // des docs distants - $s = sql_select("fichier, distant", "spip_documents", $in); - while ($t = sql_fetch($s)) { - if ($t['distant'] == 'oui') { - include_spip('inc/distant'); - if ($local = copie_locale($t['fichier'], 'test')) - spip_log("efface $local = ".$t['fichier']); - supprimer_fichier($local); - } - else { - if (@file_exists($f = get_spip_doc($t['fichier']))) { - spip_log("efface $f"); - supprimer_fichier($f); - } - } - } - - // Supprimer les entrees dans spip_documents et associees - sql_delete('spip_documents', $in); - // en principe il ne devrait rien y avoir ici si les documents sont bien orphelins - sql_delete('spip_documents_liens', $in); -} ?> diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php index 73bdeda0bb..73dcb887f5 100644 --- a/ecrire/inc_version.php +++ b/ecrire/inc_version.php @@ -45,7 +45,7 @@ define('_ROOT_RESTREINT', _ROOT_CWD . _DIR_RESTREINT); if (!defined('_NOM_IMG_PACK')) define('_NOM_IMG_PACK', 'images/'); # le chemin http (relatif) vers les images standard define('_DIR_IMG_PACK', (_DIR_RACINE . 'prive/' . _NOM_IMG_PACK)); -# le chemin des vignettes de type de document +# le chemin des vignettes de type de fichier define('_DIR_IMG_ICONES_DIST', _DIR_RACINE . "prive/vignettes/"); # le chemin php (absolu) vers les images standard (pour hebergement centralise) diff --git a/ecrire/install/etape_3.php b/ecrire/install/etape_3.php index 453beac1b3..183c446cce 100644 --- a/ecrire/install/etape_3.php +++ b/ecrire/install/etape_3.php @@ -90,7 +90,6 @@ function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, } spip_log("Creation des tables. Codage $charsetbase"); creer_base($server_db); // AT LAST - creer_base_types_doc($server_db); // memoriser avec quel charset on l'a creee if ($charset) { diff --git a/ecrire/public.php b/ecrire/public.php index c99287e769..4f1fb9722a 100644 --- a/ecrire/public.php +++ b/ecrire/public.php @@ -58,17 +58,8 @@ if (isset($GLOBALS['_INC_PUBLIC'])) { unset($_GET['action']); # sinon, fond par defaut } else { - // traiter le cas pathologique d'un upload de document ayant echoue - // car trop gros - if (empty($_GET) AND empty($_POST) AND empty($_FILES) - AND isset($_SERVER["CONTENT_LENGTH"]) - AND strstr($_SERVER["CONTENT_TYPE"], "multipart/form-data;")) { - include_spip('inc/getdocument'); - erreur_upload_trop_gros(); - } - // sinon fond par defaut (cf. assembler.php) - $fond = ''; + $fond = pipeline('detecter_fond_par_defaut',''); } $tableau_des_temps = array(); diff --git a/ecrire/public/boucles.php b/ecrire/public/boucles.php index d9ae8685c4..859f41a574 100644 --- a/ecrire/public/boucles.php +++ b/ecrire/public/boucles.php @@ -36,68 +36,6 @@ function boucle_BOUCLE_dist($id_boucle, &$boucles) { } -// -// <BOUCLE(DOCUMENTS)> -// -// http://doc.spip.org/@boucle_DOCUMENTS_dist -function boucle_DOCUMENTS_dist($id_boucle, &$boucles) { - $boucle = &$boucles[$id_boucle]; - $id_table = $boucle->id_table; - - // on ne veut pas des fichiers de taille nulle, - // sauf s'ils sont distants (taille inconnue) - array_unshift($boucle->where,array("'($id_table.taille > 0 OR $id_table.distant=\\'oui\\')'")); - - // Supprimer les vignettes - if (!isset($boucle->modificateur['criteres']['mode']) - AND !isset($boucle->modificateur['criteres']['tout'])) { - array_unshift($boucle->where,array("'!='", "'$id_table.mode'", "'\\'vignette\\''")); - } - - // Pour une boucle generique (DOCUMENTS) sans critere de lien, verifier - // qu notre document est lie a un element publie - // (le critere {tout} permet de les afficher tous quand meme) - // S'il y a un critere de lien {id_article} par exemple, on zappe - // ces complications (et tant pis si la boucle n'a pas prevu de - // verification du statut de l'article) - if ((!isset($boucle->modificateur['tout']) OR !$boucle->modificateur['tout']) - AND (!isset($boucle->modificateur['criteres']['id_objet']) OR !$boucle->modificateur['criteres']['id_objet']) - ) { - # Espace avant LEFT JOIN indispensable pour insertion de AS - # a refaire plus proprement - - ## la boucle par defaut ignore les documents de forum - $boucle->from[$id_table] = "spip_documents LEFT JOIN spip_documents_liens AS l - ON $id_table.id_document=l.id_document - LEFT JOIN spip_articles AS aa - ON (l.id_objet=aa.id_article AND l.objet=\'article\') - LEFT JOIN spip_breves AS bb - ON (l.id_objet=bb.id_breve AND l.objet=\'breve\') - LEFT JOIN spip_rubriques AS rr - ON (l.id_objet=rr.id_rubrique AND l.objet=\'rubrique\')" - // test conditionne par la presence du plugin forum, en attendant le champ statut sur la table documents - . (test_plugin_actif('forum')?" LEFT JOIN spip_forum AS ff ON (l.id_objet=ff.id_forum AND l.objet=\'forum\')":""); - - $boucle->group[] = "$id_table.id_document"; - - if (defined('_VAR_PREVIEW') AND _VAR_PREVIEW) { - array_unshift($boucle->where,"'(aa.statut IN (\'publie\',\'prop\') OR bb.statut IN (\'publie\',\'prop\') OR rr.statut IN (\'publie\',\'prive\')" - .(test_plugin_actif('forum')? " OR ff.statut IN (\'publie\',\'prop\')":"") - .")'"); - } else { - $postdates = ($GLOBALS['meta']['post_dates'] == 'non') - ? ' AND \'.quete_condition_postdates(\'aa.date\').\'' - : ''; - array_unshift($boucle->where,"'((aa.statut = \'publie\'$postdates) OR bb.statut = \'publie\' OR rr.statut = \'publie\'" - .(test_plugin_actif('forum')? " OR ff.statut=\'publie\'":"") - .")'"); - } - } - - - return calculer_boucle($id_boucle, $boucles); -} - // // <BOUCLE(HIERARCHIE)> // diff --git a/ecrire/public/interfaces.php b/ecrire/public/interfaces.php index d8d24bf40a..f7c546c4d9 100644 --- a/ecrire/public/interfaces.php +++ b/ecrire/public/interfaces.php @@ -191,27 +191,15 @@ function declarer_interfaces(){ $table_des_tables['articles']='articles'; $table_des_tables['auteurs']='auteurs'; - $table_des_tables['documents']='documents'; - $table_des_tables['types_documents']='types_documents'; $table_des_tables['rubriques']='rubriques'; $table_des_tables['hierarchie']='rubriques'; - $exceptions_des_tables['documents']['type_document']=array('types_documents' - , 'titre'); - $exceptions_des_tables['documents']['extension_document']=array('types_documents', 'extension'); - $exceptions_des_tables['documents']['mime_type']=array('types_documents' - , 'mime_type'); - - $table_titre['articles']= 'titre, lang'; $table_titre['rubriques']= 'titre, lang'; $table_titre['auteurs']= "nom AS titre, '' AS lang"; - $table_titre['documents']= "titre, fichier AS surnom, '' AS lang"; $table_date['articles']='date'; $table_date['auteurs']='date'; - $table_date['documents']='date'; - $table_date['types_documents']='date'; $table_date['rubriques']='date'; $table_statut['spip_articles'][] = array( @@ -260,15 +248,9 @@ function declarer_interfaces(){ global $tables_jointures; $tables_jointures['spip_articles']['id_auteur']= 'auteurs_liens'; - $tables_jointures['spip_articles'][]= 'documents_liens'; $tables_jointures['spip_auteurs'][]= 'auteurs_liens'; - $tables_jointures['spip_documents'][]= 'documents_liens'; - $tables_jointures['spip_documents'][]= 'types_documents'; - - $tables_jointures['spip_rubriques'][]= 'documents_liens'; - global $exceptions_des_jointures; #$exceptions_des_jointures['titre_mot'] = array('spip_mots', 'titre'); // pour exemple @@ -286,7 +268,6 @@ function declarer_interfaces(){ $table_des_traitements['DATE_MODIF'][]= 'normaliser_date(%s)'; $table_des_traitements['DATE_NOUVEAUTES'][]= 'normaliser_date(%s)'; $table_des_traitements['DESCRIPTIF'][]= _TRAITEMENT_RACCOURCIS; - $table_des_traitements['FICHIER']['documents']= 'get_spip_doc(%s)'; $table_des_traitements['INTRODUCTION'][]= 'PtoBR('. _TRAITEMENT_RACCOURCIS .')'; $table_des_traitements['NOM_SITE_SPIP'][]= _TRAITEMENT_TYPO; $table_des_traitements['NOM'][]= _TRAITEMENT_TYPO; -- GitLab