Changeset 43743 in spip-zone


Ignore:
Timestamp:
Jan 21, 2011, 6:04:38 PM (10 years ago)
Author:
cedric@…
Message:

[en cours] merge avec le plugin mediatheque (les documents ne sont plus fonctionnels en l'etat, ne pas mettre a jour dans cette version hors contexte developpement)

Location:
_core_/plugins/medias
Files:
12 deleted
15 edited
49 copied

Legend:

Unmodified
Added
Removed
  • _core_/plugins/medias/action/ajouter_documents.php

    r43741 r43743  
    44 *  SPIP, Systeme de publication pour l'internet                           *
    55 *                                                                         *
    6  *  Copyright (c) 2001-2011                                                *
     6 *  Copyright (c) 2001-2009                                                *
    77 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
    88 *                                                                         *
     
    1111\***************************************************************************/
    1212
    13 if (!defined('_ECRIRE_INC_VERSION')) return;
     13if (!defined("_ECRIRE_INC_VERSION")) return;
    1414
    1515include_spip('inc/getdocument');
    1616include_spip('inc/documents');
    17 
    18 // Joindre un document ou un Zip a deballer (fonction pour action/joindre)
    19 // Distinguer les deux cas pour commencer
    20 
    21 // http://doc.spip.org/@inc_ajouter_documents_dist
    22 function inc_ajouter_documents_dist ($sources, $file, $type, $id, $mode, $id_document, &$actifs, $hout='', $redirect='', $iframe_redirect='')
    23 {
    24         if (is_array($sources))
    25           return liste_archive_jointe($sources, $file, $type, $id, $mode, $id_document, $hout, $redirect, $iframe_redirect);
     17include_spip('inc/ajouter_documents'); // compat core
     18include_spip('inc/choisir_mode_document'); // compat core
     19include_spip('inc/renseigner_document');
     20
     21function action_ajouter_documents_dist($id_document, $files, $objet, $id_objet, $mode){
     22        $ajouter_un_document = charger_fonction('ajouter_un_document','action');
     23        $ajoutes = array();
     24
     25        // on ne peut mettre qu'un seul document a la place d'un autre ou en vignette d'un autre
     26        if (intval($id_document)){
     27                $ajoutes[] = $ajouter_un_document($id_document, reset($files), $objet, $id_objet, $mode);
     28        }
    2629        else
    27           return ajouter_un_document($sources, $file, $type, $id, $mode, $id_document, $actifs, $hout);
    28 }
    29 
    30 
    31 /**
    32  * Choisir le mode du document : image/document
    33  * fonction surchargeable
    34  *
    35  * @param unknown_type $fichier
    36  * @param string $type_lien Le type de l'objet sur lequel lier le document (article, rubrique, ...)
    37  * @param unknown_type $type_image
    38  * @param unknown_type $largeur
    39  * @param unknown_type $hauteur
    40  */
    41 function inc_choisir_mode_document_dist($fichier, $type_lien, $type_image, $largeur, $hauteur){
    42        
    43         // si ce n'est pas une image, c'est forcement un document
    44         if (!in_array($type_image, array('gif', 'png', 'jpg')))
    45                 return 'document';
    46 
    47         // si on a pas le droit d'ajouter de document a l'objet, c'est donc un mode image
    48         if ($type_lien AND isset($GLOBALS['meta']["documents_$type_lien"]) AND ($GLOBALS['meta']["documents_$type_lien"]=='non'))
    49                 return 'image';
    50        
    51 
    52         // _INTERFACE_DOCUMENTS
    53         // en fonction de la taille de l'image
    54         // par defaut l'affectation en fonction de la largeur de l'image
    55         // est desactivee car pas comprehensible par le novice
    56         // il suffit de faire dans mes_options
    57         // define('_LARGEUR_MODE_IMAGE', 450);
    58         // pour beneficier de cette detection auto
    59         if (!defined('_LARGEUR_MODE_IMAGE')) define('_LARGEUR_MODE_IMAGE', 0);
    60        
    61         if (!_LARGEUR_MODE_IMAGE)
    62                 return 'image';
    63        
    64         if ($largeur > 0
    65           AND $largeur < _LARGEUR_MODE_IMAGE)
    66                 return 'image';
    67         else
    68                 return 'document';
    69 }
    70 
     30                foreach($files as $file){
     31                        $ajoutes[] = $ajouter_un_document('new', $file, $objet, $id_objet, $mode);
     32                }
     33        return $ajoutes;
     34}
    7135
    7236/**
    7337 * Ajouter un document (au format $_FILES)
     38 * $id_document,        # document a remplacer, ou pour une vignette, l'id_document de maman
     39 * $source,     # le fichier sur le serveur (/var/tmp/xyz34)
     40 * $nom_envoye, # son nom chez le client (portequoi.pdf)
     41 * $objet,      # lie a un article, une breve ou une rubrique ?
     42 * $id_objet,   # identifiant de l'article (ou rubrique) lie
     43 * $mode,       # 'image' => image en mode image
     44 *          'vignette' => personnalisee liee a un document
     45 *          'document' => doc ou image en mode document
     46 *          'distant' => lien internet
     47 * $actifs      # les documents dont il faudra ouvrir la boite de dialogue
    7448 *
    75  * @param string $source
    76  *              le fichier sur le serveur (/var/tmp/xyz34)
    77  * @param string $nom_envoye
    78  *              son nom chez le client (portequoi.pdf)
    79  * @param string $type_lien
    80  *              lie a un article, une rubrique ou un autre objet ?
    81  * @param int $id_lien
    82  *              identifiant de l'article (ou rubrique ou objet) lie
    83  * @param string $mode
    84  *              - 'image'    => image en mode image
    85  *              - 'vignette' => personnalisee liee a un document
    86  *              - 'document' => doc ou image en mode document
    87  *              - 'distant'  => lien internet
    88  * @param int $id_document
    89  *              pour une vignette, l'id_document de maman
    90  *
    91  * @param unknown $documents_actifs
    92  *               les documents dont il faudra ouvrir la boite de dialogue
    93  * @param unknown $titrer
    94  *
    95  *
    96  * @return mixed
    97  *              int : Identifiant du nouveau document insere
    98  *              NULL : echec
    99 **/
    100 
     49 * @param unknown_type $id_document
     50 * @param array $source
     51 * @param unknown_type $nom_envoye
     52 * @param unknown_type $objet
     53 * @param unknown_type $id_objet
     54 * @param unknown_type $mode
     55 * @param unknown_type $documents_actifs
     56 * @param unknown_type $titrer
     57 * @return unknown
     58 */
    10159// http://doc.spip.org/@ajouter_un_document
    102 function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, $id_document, &$documents_actifs, $titrer=false) {
     60function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet, $mode) {
     61       
     62        $source = $file['tmp_name'];
     63        $nom_envoye = $file['name'];
     64
     65        // passer en minuscules le nom du fichier, pour eviter les collisions
     66        // si le file system fait la difference entre les deux il ne detectera
     67        // pas que Toto.pdf et toto.pdf
     68        // et on aura une collision en cas de changement de file system
     69        $file['name'] = strtolower(translitteration($file['name']));
     70       
     71        // Pouvoir definir dans mes_options.php que l'on veut titrer tous les documents par d?faut
     72        if (!defined('_TITRER_DOCUMENTS')) { define('_TITRER_DOCUMENTS', false); }
     73
     74        $titrer = isset($file['titrer'])?$file['titrer']:_TITRER_DOCUMENTS;
     75        $mode = ((isset($file['mode']) AND $file['mode'])?$file['mode']:$mode);
    10376
    10477        include_spip('inc/modifier');
    105 
    106 // Documents distants : pas trop de verifications bloquantes, mais un test
    107 // via une requete HEAD pour savoir si la ressource existe (non 404), si le
    108 // content-type est connu, et si possible recuperer la taille, voire plus.
    109         if ($mode == 'distant') {
     78        if (isset($file['distant']) AND $file['distant'] AND $mode=='vignette') {
    11079                include_spip('inc/distant');
    111                 if ($a = recuperer_infos_distantes($source)) {
    112 
     80                $file['tmp_name'] = _DIR_RACINE . copie_locale($source);
     81                $source = $file['tmp_name'];
     82                unset($file['distant']);
     83        }
     84
     85        // Documents distants : pas trop de verifications bloquantes, mais un test
     86        // via une requete HEAD pour savoir si la ressource existe (non 404), si le
     87        // content-type est connu, et si possible recuperer la taille, voire plus.
     88        if (isset($file['distant']) AND $file['distant']) {
     89                include_spip('inc/distant');
     90                if (is_array($a = renseigner_source_distante($source))) {
     91
     92                        $champs = $a;
    11393                        # NB: dans les bonnes conditions (fichier autorise et pas trop gros)
    11494                        # $a['fichier'] est une copie locale du fichier
    11595
    116                         $type_image = $a['type_image'];
    117 
    118                         unset($a['type_image']);
    119                         unset($a['body']);
    120 
    121                         $a['date'] = date('Y-m-d H:i:s');
    122                         $a['distant'] = 'oui';
    123                         $a['mode'] = 'document';
    124                         $a['fichier'] = set_spip_doc($source);
    125                 }
     96                        unset($champs['type_image']);
     97                }
     98                // on ne doit plus arriver ici, car l'url distante a ete verifiee a la saisie !
    12699                else {
    127100                        spip_log("Echec du lien vers le document $source, abandon");
    128                         return;
    129                 }
    130         } else { // pas distant
    131 
     101                        return $a; // message d'erreur
     102                }
     103        }
     104        else { // pas distant
     105
     106                $champs = array(
     107                        'distant' => 'non'
     108                );
     109               
    132110                $type_image = ''; // au pire
    133                 // tester le type de document :
    134                 // - interdit a l'upload ?
    135                 // - quelle extension dans spip_types_documents ?
    136                 // - est-ce "inclus" comme une image ?
    137 
    138                 preg_match(",^(.*)\.([^.]+)$,", $nom_envoye, $match);
    139                 @list(,$titre,$ext) = $match;
    140                 // securite : pas de . en dehors de celui separant l'extension
    141                 // sinon il est possible d'injecter du php dans un toto.php.txt
    142                 $nom_envoye = str_replace('.','-',$titre).'.'.$ext;
    143                 if ($titrer) {
     111                $champs['titre'] = '';
     112                if ($titrer){
     113                        $titre = substr($nom_envoye,0, strrpos($nom_envoye, ".")); // Enlever l'extension du nom du fichier
    144114                        $titre = preg_replace(',[[:punct:][:space:]]+,u', ' ', $titre);
    145                 } else $titre = '';
    146                 $ext = corriger_extension(strtolower($ext));
    147 
    148                 $row = sql_fetsel("inclus", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'");
    149 
    150                 if ($row) {
    151                         $type_inclus_image = ($row['inclus'] == 'image');
    152                         $fichier = copier_document($ext, $nom_envoye, $source);
    153                 } else {
    154 
    155 /* STOCKER LES DOCUMENTS INCONNUS AU FORMAT .ZIP */
    156                         $type_inclus_image = false;
    157 
    158                         if (!sql_countsel("spip_types_documents", "extension='zip' AND upload='oui'")) {
    159                                 spip_log("Extension $ext interdite a l'upload");
    160                                 return;
    161                         }
    162 
    163                         $ext = 'zip';
    164                         if (!$tmp_dir = tempnam(_DIR_TMP, 'tmp_upload')) return;
    165                         spip_unlink($tmp_dir); @mkdir($tmp_dir);
    166                         $tmp = $tmp_dir.'/'.translitteration($nom_envoye);
    167                         $nom_envoye .= '.zip'; # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip
    168                         deplacer_fichier_upload($source, $tmp);
    169                         include_spip('inc/pclzip');
    170                         $source = _DIR_TMP . 'archive.zip';
    171                         $archive = new PclZip($source);
    172                         $v_list = $archive->create($tmp,
     115                        $champs['titre'] = preg_replace(',\.([^.]+)$,', '', $titre);
     116                }
     117
     118                if (!$fichier = fixer_fichier_upload($file))
     119                        return ("Impossible de telecharger le fichier");
     120               
     121                $champs['inclus'] = $fichier['inclus'];
     122                $champs['extension'] = $fichier['extension'];
     123                $champs['fichier'] = $fichier['fichier'];
     124
     125
     126                $infos = renseigner_taille_dimension_image($champs['fichier'],$champs['extension']);
     127                if (is_string($infos))
     128                        return $infos; // c'est un message d'erreur !
     129               
     130                $champs = array_merge($champs,$infos);
     131
     132                // Si mode == 'choix', fixer le mode image/document
     133                if ($mode == 'choix' OR !in_array($mode, array('vignette', 'image', 'document'))) {
     134                        $choisir_mode_document = charger_fonction('choisir_mode_document','inc');
     135                        $mode = $choisir_mode_document($champs, $champs['inclus'] == 'image', $objet);
     136                }
     137                $champs['mode'] = $mode;
     138
     139                if (($test = verifier_taille_document_acceptable($champs))!==true){
     140                        spip_unlink($champs['fichier']);
     141                        return $test; // erreur sur les dimensions du fichier
     142                }
     143
     144               
     145                unset($champs['type_image']);
     146                unset($champs['inclus']);
     147                $champs['fichier'] = set_spip_doc($champs['fichier']);
     148        }
     149       
     150        // lier le parent si necessaire
     151        if ($id_objet=intval($id_objet) AND $objet)
     152                $champs['parents'][] = "$objet|$id_objet";
     153
     154        // "mettre a jour un document" si on lui
     155        // passe un id_document
     156        if ($id_document=intval($id_document)){
     157                unset($champs['titre']); // garder le titre d'origine
     158                unset($champs['date']); // garder la date d'origine
     159                unset($champs['descriptif']); // garder la desc d'origine
     160                // unset($a['distant']); # on peut remplacer un doc statique par un doc distant
     161                // unset($a['mode']); # on peut remplacer une image par un document ?
     162        }
     163
     164        include_spip('action/editer_document');
     165        // Installer le document dans la base
     166        // attention piege semantique : les images s'installent en mode 'vignette'
     167        if (!$id_document){
     168                $id_document = insert_document();
     169                spip_log ("ajout du document ".$file['tmp_name']." ".$file['name']."  (M '$mode' T '$objet' L '$id_objet' D '$id_document')");
     170        }
     171       
     172        document_set($id_document,$champs);
     173
     174        // permettre aux plugins de faire des modifs a l'ajout initial
     175        // ex EXIF qui tourne les images si necessaire
     176        pipeline('post_edition',
     177                array(
     178                        'args' => array(
     179                                'table' => 'spip_documents', // compatibilite
     180                                'table_objet' => 'documents',
     181                                'spip_table_objet' => 'spip_documents',
     182                                'type' =>'document',
     183                                'id_objet' => $id_document,
     184                                'champs' => array_keys($champs),
     185                                'serveur' => '', // serveur par defaut, on ne sait pas faire mieux pour le moment
     186                                'action' => 'ajouter_document',
     187                                'operation' => 'ajouter_document', // compat <= v2.0
     188                        ),
     189                        'data' => $champs
     190                )
     191        );
     192
     193        return $id_document ;
     194}
     195
     196
     197if (!function_exists('corriger_extension')){
     198/**
     199 * Corrige l'extension du fichier dans quelques cas particuliers
     200 * (a passer dans ecrire/base/typedoc)
     201 * A noter : une extension 'pdf ' passe dans la requete de controle
     202 * mysql> SELECT * FROM spip_types_documents WHERE extension="pdf ";
     203 *
     204 * @param string $ext
     205 * @return string
     206 */
     207function corriger_extension($ext) {
     208        $ext = preg_replace(',[^a-z0-9],i', '', $ext);
     209        switch ($ext) {
     210                case 'htm':
     211                        $ext='html';
     212                        break;
     213                case 'jpeg':
     214                        $ext='jpg';
     215                        break;
     216                case 'tiff':
     217                        $ext='tif';
     218                        break;
     219        }
     220        return $ext;
     221}
     222}
     223
     224/**
     225 * Verifie la possibilite d'uploader une extension
     226 * renvoie un tableau descriptif si l'extension est acceptee
     227 * une chaine 'zip' si il faut zipper
     228 * false si l'extension est refusee
     229 *
     230 */
     231function verifier_upload_autorise($source){
     232        if (preg_match(",\.([^.]+)$,", $source, $match)
     233          AND $ext = $match[1]){
     234               
     235          $ext = corriger_extension(strtolower($ext));
     236                if ($row = sql_fetsel("extension,inclus", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'"))
     237                        return $row;
     238        }
     239               
     240        if (sql_countsel("spip_types_documents", "extension='zip' AND upload='oui'"))
     241                return 'zip';
     242
     243        spip_log("Extension $ext interdite a l'upload");
     244        return false;
     245}
     246
     247
     248/**
     249 * tester le type de document :
     250 * - interdit a l'upload ?
     251 * - quelle extension dans spip_types_documents ?
     252 * - est-ce "inclus" comme une image ?
     253 *
     254 * le zipper si necessaire
     255 *
     256 * @param array $file //format $_FILES
     257 * @return array
     258 */
     259function fixer_fichier_upload($file){
     260
     261
     262
     263        if (is_array($row=verifier_upload_autorise($file['name']))) {
     264                $row['fichier'] = copier_document($row['extension'], $file['name'], $file['tmp_name']);
     265                return $row;
     266        }
     267        // creer un zip comme demande
     268        // pour encapsuler un fichier dont l'extension n'est pas supportee
     269        elseif($row==='zip'){
     270               
     271                $row = array('extension'=>'zip','inclus'=>false);
     272
     273                $ext = 'zip';
     274                if (!$tmp_dir = tempnam(_DIR_TMP, 'tmp_upload'))
     275                        return false;
     276       
     277                spip_unlink($tmp_dir);
     278                @mkdir($tmp_dir);
     279               
     280                include_spip('inc/charset');
     281                $tmp = $tmp_dir.'/'.translitteration($file['name']);
     282               
     283                $file['name'] .= '.zip'; # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip
     284
     285                // deplacer le fichier tmp_name dans le dossier tmp
     286                deplacer_fichier_upload($file['tmp_name'], $tmp, true);
     287               
     288                include_spip('inc/pclzip');
     289                $source = _DIR_TMP . basename($tmp_dir) . '.zip';
     290                $archive = new PclZip($source);
     291               
     292                $v_list = $archive->create($tmp,
    173293                                PCLZIP_OPT_REMOVE_PATH, $tmp_dir,
    174294                                PCLZIP_OPT_ADD_PATH, '');
    175                         effacer_repertoire_temporaire($tmp_dir);
    176                         if (!$v_list) {
    177                                 spip_log("Echec creation du zip ");
    178                                 return;
    179                         }
    180                         $fichier = copier_document($ext, $nom_envoye, $source);
    181                         spip_unlink($source);
    182                 }
    183 
    184                 // Prevoir traitement specifique pour videos
    185                 // (http://www.getid3.org/ peut-etre
    186                 if ($ext == "mov") {
    187                         $largeur = 0;
    188                         $hauteur = 0;
    189                 } else if ($ext == "svg") {
    190                         // recuperer les dimensions et supprimer les scripts
    191                         list($largeur,$hauteur)= traite_svg($fichier);
    192                 } else { // image ?
    193                 // Si c'est une image, recuperer sa taille et son type (detecte aussi swf)
    194                         $size_image = @getimagesize($fichier);
    195                         $largeur = intval($size_image[0]);
    196                         $hauteur = intval($size_image[1]);
    197                         $type_image = decoder_type_image($size_image[2]);
    198                 }
    199 
    200                 // Quelques infos sur le fichier
    201                 if (!$fichier OR !@file_exists($fichier)
    202                 OR !$taille = @intval(filesize($fichier))) {
    203                         spip_log ("Echec copie du fichier $fichier");
    204                         return;
    205                 }
    206 
    207 
    208                
    209                 // _INTERFACE_DOCUMENTS
    210                 // Si mode == 'choix', fixer le mode image/document
    211                 if ($mode == 'choix') {
    212                         $choisir_mode_document = charger_fonction('choisir_mode_document','inc');
    213                         $mode = $choisir_mode_document($fichier, $type_lien, $type_image, $largeur, $hauteur);
    214                 }
    215 
    216 
    217                 if (!$type_image) {
    218                         if (_DOC_MAX_SIZE > 0
    219                         AND $taille > _DOC_MAX_SIZE*1024) {
    220                                 spip_unlink ($fichier);
    221                                 check_upload_error(6,
    222                                 _T('info_logo_max_poids',
    223                                         array('maxi' => taille_en_octets(_DOC_MAX_SIZE*1024),
    224                                         'actuel' => taille_en_octets($taille))));
    225                         }
    226                         if ($mode == 'image') {
    227                                 spip_log ("le format de $fichier ne convient pas pour une image");
    228                                 spip_unlink($fichier);
    229                                 return;
    230                         }
    231                 }
    232                 else { // image
    233                         if (_IMG_MAX_SIZE > 0
    234                         AND $taille > _IMG_MAX_SIZE*1024) {
    235                                 spip_unlink ($fichier);
    236                                 check_upload_error(6,
    237                                 _T('info_logo_max_poids',
    238                                         array('maxi' => taille_en_octets(_IMG_MAX_SIZE*1024),
    239                                         'actuel' => taille_en_octets($taille))));
    240                         }
    241        
    242                         if (_IMG_MAX_WIDTH * _IMG_MAX_HEIGHT
    243                         AND ($size_image[0] > _IMG_MAX_WIDTH
    244                         OR $size_image[1] > _IMG_MAX_HEIGHT)) {
    245                                 spip_unlink ($fichier);
    246                                 check_upload_error(6,
    247                                 _T('info_logo_max_taille',
     295               
     296                effacer_repertoire_temporaire($tmp_dir);
     297                if (!$v_list) {
     298                        spip_log("Echec creation du zip ");
     299                        return false;
     300                }
     301               
     302                $row['fichier']  = copier_document($row['extension'], $file['name'], $source);
     303                spip_unlink($source);
     304                return $row;
     305        }
     306       
     307        return false;
     308}
     309
     310
     311function verifier_taille_document_acceptable($infos){
     312       
     313        // si ce n'est pas une image
     314        if (!$infos['type_image']) {
     315                if (_DOC_MAX_SIZE > 0
     316                 AND $infos['taille'] > _DOC_MAX_SIZE*1024)
     317                        return _T('medias:info_doc_max_poids', array('maxi' => taille_en_octets(_DOC_MAX_SIZE*1024), 'actuel' => taille_en_octets($infos['taille'])));
     318
     319                if ($infos['mode'] == 'image')
     320                        return _T('medias:erreur_format_fichier_image',array('nom'=> $infos['fichier']));
     321        }
     322       
     323        // si c'est une image
     324        else {
     325
     326                if (_IMG_MAX_SIZE > 0
     327                 AND $infos['taille'] > _IMG_MAX_SIZE*1024)
     328                        return _T('medias:info_image_max_poids', array('maxi' => taille_en_octets(_IMG_MAX_SIZE*1024), 'actuel' => taille_en_octets($infos['taille'])));
     329       
     330                if (_IMG_MAX_WIDTH * _IMG_MAX_HEIGHT
     331                 AND ($infos['largeur'] > _IMG_MAX_WIDTH
     332                 OR $infos['hauteur'] > _IMG_MAX_HEIGHT))
     333
     334                        return _T('info_logo_max_taille',
    248335                                        array(
    249336                                        'maxi' =>
     
    253340                                        'actuel' =>
    254341                                                _T('info_largeur_vignette',
    255                                                         array('largeur_vignette' => $size_image[0],
    256                                                         'hauteur_vignette' => $size_image[1]))
    257                                 )));
    258                         }
    259                 }
    260 
    261                 // Si on veut uploader une vignette, il faut qu'elle ait ete bien lue
    262                 if ($mode == 'vignette') {
    263                         if (!$type_inclus_image) {
    264                                 spip_log ("le format de $fichier ne convient pas pour une image"); # SVG
    265                                 spip_unlink($fichier);
    266                                 return;
    267                         }
    268 
    269                         if (!($largeur OR $hauteur)) {
    270                                 spip_log('erreur upload vignette '.$fichier);
    271                                 spip_unlink($fichier);
    272                                 return;
    273                         }
    274                 } elseif (!in_array($mode, array('distant', 'image', 'document'))) {
    275                         if ($type_image AND $type_inclus_image)
    276                                 $mode = 'image';
    277                         else
    278                                 $mode = 'document';
    279                 }
    280                 $a =  array(
    281                         'date' => date('Y-m-d H:i:s'),
    282                         'distant' => 'non',
    283                         'mode' => $mode,
    284                         'titre'=> $titre,
    285                         'largeur' => $largeur,
    286                         'hauteur' => $hauteur,
    287                         'taille' => $taille,
    288                         'extension'=> $ext,
    289                         'fichier' => set_spip_doc($fichier));
    290         }
    291 
    292         if (($id_document=intval($id_document)) AND $mode!='vignette') {
    293 
    294                  // Mise a jour des descripteurs d'un vieux doc
    295                 unset($a['titre']);
    296                 unset($a['date']);
    297                 unset($a['distant']);
    298                 unset($a['mode']);
    299 
    300                 sql_updateq('spip_documents', $a, "id_document=$id_document");
    301                 $id = $id_document;
    302 
    303         } else {
    304         // Installer le document dans la base
    305         // attention piege semantique : les images s'installent en mode 'vignette'
    306         // note : la fonction peut "mettre a jour un document" si on lui
    307         // passe "mode=document" et "id_document=.." (pas utilise)
    308 
    309                 $id = sql_insertq("spip_documents", $a);
    310 
    311                 spip_log ("ajout du document $source $nom_envoye  (M '$mode' T '$type_lien' L '$id_lien' D '$id')");
    312 
    313                 if ($id_lien AND $id
    314                 AND preg_match('/^[a-z0-9_]+$/i', $type_lien) # securite
    315                 ) {
    316                         sql_insertq('spip_documents_liens',
    317                                     array('id_document' => $id,
    318                                           'id_objet' => $id_lien,
    319                                           'objet' => $type_lien));
    320                 } else spip_log("Pb d'insertion $id_lien $type_lien");
    321 
    322                 if ($id_document) {
    323                         sql_updateq("spip_documents", array("id_vignette" => $id, "mode" => 'document'), "id_document=$id_document");
    324 
    325                 } else  $id_document = $id;
    326 
    327 
    328                 // Appliquer l'exif orientation
    329                 // http://trac.rezo.net/trac/spip/ticket/1494
    330                 define('_TOURNER_SELON_EXIF', false); # par defaut non, risque memoire
    331                 if (defined('_TOURNER_SELON_EXIF')
    332                 AND _TOURNER_SELON_EXIF
    333                 AND $mode == 'document'
    334                 AND $a['distant'] == 'non'
    335                 AND $a['extension'] == 'jpg') {
    336                         include_spip('action/tourner');
    337                         tourner_selon_exif_orientation($id_document, $fichier);
    338                 }
    339 
    340         }
    341         // pour que le retour vers ecrire/ active le bon doc.
    342         $documents_actifs[$fichier] = $id_document;
    343         // Notifications, gestion des revisions, reindexation...
    344         pipeline('post_edition',
    345                 array(
    346                         'args' => array(
    347                                 'operation' => 'ajouter_document',
    348                                 'table' => 'spip_documents',
    349                                 'id_objet' => $id,
    350                                 'type_image' => $type_image
    351                         ),
    352                         'data' => null
    353                 )
    354         );
    355 
    356         return $id ;
    357 }
    358 
    359 // http://doc.spip.org/@verifier_compactes
    360 function verifier_compactes($zip) {
    361         if (!$list = $zip->listContent()) return array();
    362         // si pas possible de decompacter: installer comme fichier zip joint
    363         // Verifier si le contenu peut etre uploade (verif extension)
    364         $aff_fichiers = array();
    365         foreach ($list as $file) {
    366                 if (accepte_fichier_upload($f = $file['stored_filename']))
    367                         $aff_fichiers[$f] = $file;
    368                 else spip_log("chargement de $f interdit");
    369                 }
    370         ksort($aff_fichiers);
    371         return $aff_fichiers;
    372 }
    373 
    374 //
    375 // Convertit le type numerique retourne par getimagesize() en extension fichier
    376 //
    377 
    378 // http://doc.spip.org/@decoder_type_image
    379 function decoder_type_image($type, $strict = false) {
    380         switch ($type) {
    381         case 1:
    382                 return "gif";
    383         case 2:
    384                 return "jpg";
    385         case 3:
    386                 return "png";
    387         case 4:
    388                 return $strict ? "" : "swf";
    389         case 5:
    390                 return "psd";
    391         case 6:
    392                 return "bmp";
    393         case 7:
    394         case 8:
    395                 return "tif";
    396         default:
    397                 return "";
    398         }
    399 }
    400 
    401 
    402 // http://doc.spip.org/@traite_svg
    403 function traite_svg($file)
    404 {
    405         $texte = spip_file_get_contents($file);
    406 
    407         // Securite si pas admin : virer les scripts et les references externes
    408         // sauf si on est en mode javascript 'ok' (1), cf. inc_version
    409         if ($GLOBALS['filtrer_javascript'] < 1
    410         AND $GLOBALS['visiteur_session']['statut'] != '0minirezo') {
    411                 include_spip('inc/texte');
    412                 $new = trim(safehtml($texte));
    413                 // petit bug safehtml
    414                 if (substr($new,0,2) == ']>') $new = ltrim(substr($new,2));
    415                 if ($new != $texte) ecrire_fichier($file, $texte = $new);
    416         }
    417 
    418         $width = $height = 150;
    419         if (preg_match(',<svg[^>]+>,', $texte, $s)) {
    420                 $s = $s[0];
    421                 if (preg_match(',\WviewBox\s*=\s*.\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+),i', $s, $r)){
    422                         $width = $r[3];
    423                         $height = $r[4];
    424                 } else {
    425         // si la taille est en centimetre, estimer le pixel a 1/64 de cm
    426                 if (preg_match(',\Wwidth\s*=\s*.(\d+)([^"\']*),i', $s, $r)){
    427                         if ($r[2] != '%') {
    428                                 $width = $r[1];
    429                                 if ($r[2] == 'cm') $width <<=6;
    430                         }       
    431                 }
    432                 if (preg_match(',\Wheight\s*=\s*.(\d+)([^"\']*),i', $s, $r)){
    433                         if ($r[2] != '%') {
    434                                 $height = $r[1];
    435                                 if ($r[2] == 'cm') $height <<=6;
    436                         }
    437                 }
    438            }
    439         }
    440         return array($width, $height);
    441 }
    442 
    443 //
    444 // Corrige l'extension du fichier dans quelques cas particuliers
    445 // (a passer dans ecrire/base/typedoc)
    446 // A noter : une extension 'pdf ' passe dans la requete de controle
    447 // mysql> SELECT * FROM spip_types_documents WHERE extension="pdf ";
    448 // http://doc.spip.org/@corriger_extension
    449 function corriger_extension($ext) {
    450         $ext = preg_replace(',[^a-z0-9],i', '', $ext);
    451         switch ($ext) {
    452         case 'htm':
    453                 return 'html';
    454         case 'jpeg':
    455                 return 'jpg';
    456         case 'tiff':
    457                 return 'tif';
    458         case 'aif':
    459                 return 'aiff';
    460         default:
    461                 return $ext;
    462         }
    463 }
    464 
    465 // Cherche dans la base le type-mime du tableau representant le document
    466 // et corrige le nom du fichier ; retourne array(extension, nom corrige)
    467 // s'il ne trouve pas, retourne '' et le nom inchange
    468 // http://doc.spip.org/@fixer_extension_document
    469 function fixer_extension_document($doc) {
    470         $extension = '';
    471         $name = $doc['name'];
    472         if (preg_match(',[.]([^.]+)$,', $name, $r)
    473         AND $t = sql_fetsel("extension", "spip_types_documents",
    474         "extension=" . sql_quote(corriger_extension($r[1])))) {
    475                 $extension = $t['extension'];
    476                 $name = preg_replace(',[.][^.]*$,', '', $doc['name']).'.'.$extension;
    477         }
    478         else if ($t = sql_fetsel("extension", "spip_types_documents",
    479         "mime_type=" . sql_quote($doc['type']))) {
    480                 $extension = $t['extension'];
    481                 $name = preg_replace(',[.][^.]*$,', '', $doc['name']).'.'.$extension;
    482         }
    483 
    484         return array($extension,$name);
    485 }
    486 
    487 // Afficher un formulaire de choix: decompacter et/ou garder tel quel
    488 // et reconstruire un generer_action_auteur.
    489 // Passer ca en squelette un de ces jours.
    490 
    491 // http://doc.spip.org/@liste_archive_jointe
    492 function liste_archive_jointe($valables, $zip, $type, $id, $mode, $id_document, $hash, $redirect, $iframe_redirect)
    493 {
    494         include_spip('inc/layer');
    495 
    496         $arg = (intval($id) .'/' .intval($id_document) . "/$mode/$type");
    497 
    498         $texte = "<div style='text-align: left'>
    499 <input type='hidden' name='redirect' value='$redirect' />
    500 <input type='hidden' name='iframe_redirect' value='$iframe_redirect' />
    501 <input type='hidden' name='hash' value='$hash' />
    502 <input type='hidden' name='chemin' value='$zip' />
    503 <input type='hidden' name='arg' value='$arg' />
    504 <input type='radio' checked='checked' name='sousaction5' id='sousaction5_5' value='5' onchange='jQuery(\"#options_deballe_zip\").slideUp();' />" .
    505           "<label for='sousaction5_5'>" . _T('upload_zip_telquel'). "</label>" .
    506                 "<br />".
    507                 "<input type='radio' name='sousaction5' id='sousaction5_6' value='6' onchange='jQuery(\"#options_deballe_zip\").slideDown();' />".
    508                 "<label for='sousaction5_6'>" . _T('upload_zip_decompacter') . "</label>" .
    509                 "<ol>" .
    510                 liste_archive_taille($valables) .
    511                 "</ol>"
    512 
    513                 . debut_block_depliable(false,'options_deballe_zip')
    514                 . "<input type='checkbox' name='sousaction4' id='sousaction4_4' value='4' />".
    515                         "<label for='sousaction4_4'>" . _T('upload_zip_conserver') . "</label>" .
    516                         "<br /><input type='checkbox' name='titrer' id='titrer' />"
    517                         . "<label for='titrer'>" . _T('upload_zip_titrer') .
    518                         "</label>".
    519                         "</div></div>"
    520                 . fin_block()
    521 
    522 
    523                 . "<div style='text-align: right;'><input class='fondo spip_xx-small' type='submit' value='".
    524                 _T('bouton_valider').
    525                   "' />";
    526 
    527         $texte = "<p>" .
    528                 _T('upload_fichier_zip_texte') .
    529                 "</p><p>" .
    530                 _T('upload_fichier_zip_texte2') .
    531                  "</p>" .
    532                 generer_form_action('joindre', $texte,' method="post"');
    533 
    534         if(_request("iframe")=="iframe") {
    535                 return "<p>build form $iframe_redirect</p>" .
    536                   "<div class='upload_answer upload_zip_list'>" .
    537                   $texte .
    538                   "</div>";
    539         } else { return minipres(_T('upload_fichier_zip'), $texte); }
    540 }
    541 
    542 // http://doc.spip.org/@liste_archive_taille
    543 function liste_archive_taille($files) {
    544         $res = '';
    545         foreach ($files as $nom => $file) {
    546                 $date = date_interface(date("Y-m-d H:i:s", $file['mtime']));
    547 
    548                 $taille = taille_en_octets($file['size']);
    549                 $res .= "<li title=\"".texte_backend($title)."\"><b>$nom</b> &ndash; $taille<br />&nbsp; $date</li>\n";
    550         }
    551         return $res;
    552 }
     342                                                        array('largeur_vignette' => $infos['largeur'],
     343                                                        'hauteur_vignette' => $infos['hauteur']))
     344                                ));
     345        }
     346       
     347        // Si on veut uploader une vignette, il faut qu'elle ait ete bien lue
     348        if ($infos['mode'] == 'vignette') {
     349                if ($infos['inclus'] != 'image')
     350                        return _T('medias:erreur_format_fichier_image',array('nom'=> $infos['fichier'])); #SVG
     351
     352                if (!($infos['largeur'] OR $infos['hauteur']))
     353                        return _T('medias:erreur_upload_vignette',array('nom'=>$infos['fichier']));
     354        }
     355
     356        return true;
     357}
     358
     359
    553360?>
  • _core_/plugins/medias/action/changer_mode_document.php

    r43738 r43743  
    44 *  SPIP, Systeme de publication pour l'internet                           *
    55 *                                                                         *
    6  *  Copyright (c) 2001-2011                                                *
     6 *  Copyright (c) 2001-2009                                                *
    77 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
    88 *                                                                         *
     
    1111\***************************************************************************/
    1212
    13 if (!defined('_ECRIRE_INC_VERSION')) return;
     13if (!defined("_ECRIRE_INC_VERSION")) return;
    1414
    1515
     
    2424        if (!preg_match(",^(\d+)\W(\w+)$,", $arg, $r))
    2525                spip_log("action_changer_mode_document $arg pas compris");
    26         else action_changer_mode_document_post($r);
     26        else action_changer_mode_document_post($r[1],$r[2]);
    2727}
    2828
    2929// http://doc.spip.org/@action_changer_mode_document_post
    30 function action_changer_mode_document_post($r)
     30function action_changer_mode_document_post($id_document, $mode)
    3131{
    3232        // - id_document le doc a modifier
    3333        // - mode le mode a lui donner
    34         list(, $id_document, $mode) = $r;
    3534        if ($id_document = intval($id_document)
    3635        AND in_array($mode, array('vignette', 'image', 'document'))) {
    3736                sql_updateq('spip_documents', array('mode'=>$mode), 'id_document='.$id_document);
    3837        }
    39         if ($case = _request('afficher_case')){
    40                 $case = explode('-',$case);
    41                 list($id,$type,$script) = $case;
    42                 include_spip('inc/presentation');
    43                 include_spip('inc/documents');
    44                 include_spip('inc/actions');
    45                 // vilain hack pour ne pas recharger un script js
    46                 affiche_raccourci_doc('doc', $id_document, 'left');
    47                 // voila
    48                 ajax_retour(afficher_case_document($id_document, $id, $script, $type, true));
    49                 exit();
    50         }
    5138}
    5239?>
  • _core_/plugins/medias/action/copier_local.php

    r43738 r43743  
    44 *  SPIP, Systeme de publication pour l'internet                           *
    55 *                                                                         *
    6  *  Copyright (c) 2001-2011                                                *
     6 *  Copyright (c) 2001-2009                                                *
    77 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
    88 *                                                                         *
     
    1111\***************************************************************************/
    1212
    13 if (!defined('_ECRIRE_INC_VERSION')) return;
     13if (!defined("_ECRIRE_INC_VERSION")) return;
    1414
    1515// Fonction appellee lorsque l'utilisateur clique sur le bouton
     
    1919
    2020// http://doc.spip.org/@action_copier_local_dist
    21 function action_copier_local_dist() {
     21function action_copier_local_dist($id_document=null) {
    2222
    23         // Recupere les arguments.
    24         $securiser_action = charger_fonction('securiser_action', 'inc');
    25         $arg = $securiser_action();
    26 
    27         $id_document = intval($arg);
     23        if (!$id_document){
     24                // Recupere les arguments.
     25                $securiser_action = charger_fonction('securiser_action', 'inc');
     26                $arg = $securiser_action();
     27       
     28                $id_document = intval($arg);
     29        }
    2830
    2931        if (!$id_document) {
    3032                spip_log("action_copier_local_dist $arg pas compris");
     33                return false;
    3134        } else  {
    3235                // arguments recuperes, on peut maintenant appeler la fonction.
    33                 action_copier_local_post($id_document);
     36                return action_copier_local_post($id_document);
    3437        }
    3538}
     
    3942
    4043        // Il faut la source du document pour le copier
    41         $row = sql_fetsel("fichier, descriptif", "spip_documents", "id_document=$id_document");
     44        $row = sql_fetsel("mode,fichier, descriptif, credits", "spip_documents", "id_document=$id_document");
    4245        $source = $row['fichier'];
    4346
    4447        include_spip('inc/distant'); // pour 'copie_locale'
    45         include_spip('inc/documents'); // pour 'set_spip_doc'
    4648        $fichier = copie_locale($source);
    4749        if ($fichier) {
    4850                $fichier = _DIR_RACINE . $fichier;
    49                 $taille = filesize($fichier);
    50                 // On le sort du repertoire IMG/distant/
    51                 $dest = preg_replace(',^.*/distant/[^/_]+[/_],', '', $fichier);
    52                 $dest = sous_repertoire(_DIR_IMG, preg_replace(',^.*\.,', '', $fichier)) . $dest;
    53                 if ($dest != $fichier
    54                 AND @rename($fichier, $dest))
    55                         $fichier = $dest;
     51                $files[] = array('tmp_name'=>$fichier,'name'=>basename($fichier));
     52                $ajouter_documents = charger_fonction('ajouter_documents','action');
     53                spip_log("convertit doc $id_document en local: $source => $fichier");
     54                $liste = array();
     55                $ajouter_documents($id_document,$files,'',0,$row['mode'],$liste);
    5656
    57                 // On indique l'ancien URL dans le descriptif (pis-aller)
    58                 $row['descriptif'] .= ($row['descriptif'] ? "\n\n":'') . "[->$source]";
    59 
    60                 // $fichier contient IMG/distant/...
    61                 // or, dans la table documents, IMG doit etre exclu.
    62                 $fichier = set_spip_doc($fichier);
    63                 spip_log("convertit doc $id_document en local: $source => $fichier");
    64                 sql_updateq('spip_documents', array('fichier' =>$fichier, 'distant'=>'non', 'taille'=>$taille, 'descriptif'=> $row['descriptif']),"id_document=".$id_document);
     57                spip_unlink($fichier);
    6558               
    66                 pipeline('post_edition',
    67                         array(
    68                                 'args' => array(
    69                                         'operation' => 'copier_local_post',
    70                                         'table' => 'spip_documents',
    71                                         'id_objet' => $id_document
    72                                 ),
    73                                 'data' => null
    74                         )
    75                 );
     59                // ajouter l'origine du document aux credits
     60                include_spip('action/editer_document');
     61                document_set($id_document,array('credits'=>($row['credits']?$row['credits'].', ':'').$source));
     62                return true;
    7663               
    7764        } else {
    7865                spip_log("echec copie locale $source");
    7966        }
     67        return _T('medias:erreur_copie_fichier',array('nom'=>$source));
    8068}
    8169
  • _core_/plugins/medias/action/supprimer_document.php

    r43738 r43743  
    44 *  SPIP, Systeme de publication pour l'internet                           *
    55 *                                                                         *
    6  *  Copyright (c) 2001-2011                                                *
     6 *  Copyright (c) 2001-2009                                                *
    77 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
    88 *                                                                         *
     
    1111\***************************************************************************/
    1212
    13 if (!defined('_ECRIRE_INC_VERSION')) return;
     13if (!defined("_ECRIRE_INC_VERSION")) return;
    1414
    1515// http://doc.spip.org/@supprimer_document
    16 function action_supprimer_document_dist($id_document) {
     16function action_supprimer_document_dist($id_document=0) {
     17        if (!$id_document){
     18                $securiser_action = charger_fonction('securiser_action','inc');
     19                $id_document = $securiser_action();
     20        }
     21        include_spip('inc/autoriser');
    1722        if (!autoriser('supprimer','document',$id_document))
    1823                return false;
    19                
     24
     25        // si c'etait une vignette, modifier le document source !
     26        if ($source = sql_getfetsel('id_document', 'spip_documents', 'id_vignette='.intval($id_document))){
     27                include_spip('action/editer_document');
     28                document_set($source,array("id_vignette" => 0));
     29        }
     30
    2031        include_spip('inc/documents');
    21         if (!$doc = sql_fetsel('*', 'spip_documents', 'id_document='.$id_document))
     32        if (!$doc = sql_fetsel('*', 'spip_documents', 'id_document='.intval($id_document)))
    2233                return false;
    2334
     
    3041        }
    3142
     43        // dereferencer dans la base
     44        sql_delete('spip_documents', 'id_document='.intval($id_document));
     45
     46
    3247        // Supprimer le fichier si le doc est local,
    3348        // et la copie locale si le doc est distant
    3449        if ($doc['distant'] == 'oui') {
    3550                include_spip('inc/distant');
    36                 if ($local = copie_locale($doc['fichier'],'test'))
     51                if ($local = _DIR_RACINE . copie_locale($doc['fichier'],'test'))
    3752                        spip_unlink($local);
    3853        }
    39         else spip_unlink(get_spip_doc($doc['fichier']));
     54        else
     55                spip_unlink(get_spip_doc($doc['fichier']));
    4056
    41         sql_delete('spip_documents', 'id_document='.$id_document);
     57        pipeline('post_edition',
     58                array(
     59                        'args' => array(
     60                                'operation' => 'supprimer_document',
     61                                'table' => 'spip_documents',
     62                                'id_objet' => $id_document
     63                        ),
     64                        'data' => null
     65                )
     66        );
    4267}
    4368
  • _core_/plugins/medias/action/tourner.php

    r43738 r43743  
    44 *  SPIP, Systeme de publication pour l'internet                           *
    55 *                                                                         *
    6  *  Copyright (c) 2001-2011                                                *
     6 *  Copyright (c) 2001-2009                                                *
    77 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
    88 *                                                                         *
     
    1111\***************************************************************************/
    1212
    13 if (!defined('_ECRIRE_INC_VERSION')) return;
     13if (!defined("_ECRIRE_INC_VERSION")) return;
    1414
    1515// http://doc.spip.org/@action_tourner_dist
     
    2020        if (!preg_match(",^\W*(\d+)\W?(-?\d+)$,", $arg, $r)) {
    2121                spip_log("action_tourner_dist $arg pas compris");
    22         } else  action_tourner_post($r);
     22        } else  action_tourner_post($r[1],$r[2]);
    2323}
    2424
    2525// http://doc.spip.org/@action_tourner_post
    26 function action_tourner_post($r)
     26function action_tourner_post($id_document,$angle)
    2727{
    28         $arg = $r[1];
    29         $row = sql_fetsel("fichier", "spip_documents", "id_document=$arg");
     28        $row = sql_fetsel("fichier,extension", "spip_documents", "id_document=".intval($id_document));
    3029
    3130        if (!$row) return;
     
    3433        include_spip('inc/documents');
    3534        // Fichier destination : on essaie toujours de repartir de l'original
    36         $var_rot = $r[2];
     35        $var_rot = $angle;
     36
    3737        include_spip('inc/distant'); # pour copie_locale
    3838        $src = _DIR_RACINE . copie_locale(get_spip_doc($row['fichier']));
     
    4848                spip_log("rotation $var_rot $src : $dest");
    4949
    50                 $process = $GLOBALS['meta']['image_process'];
     50                include_spip('inc/filtres');
     51                include_spip('public/parametrer'); // charger les fichiers fonctions #bugfix spip 2.1.0
     52                $res = filtrer('image_rotation',$src,$var_rot);
     53                $res = filtrer('image_format',$res,$row['extension']);
    5154
    52                 // imagick (php4-imagemagick)
    53                 if ($process == 'imagick') {
    54                         $handle = imagick_readimage($src);
    55                         imagick_rotate($handle, $var_rot);
    56                         imagick_write($handle, $dest);
    57                         if (!@file_exists($dest)) return;       // echec imagick
    58                 }
    59                 else if ($process == "gd2") { // theoriquement compatible gd1, mais trop forte degradation d'image
    60                         gdRotate ($src, $dest, $var_rot);
    61                 }
    62                 else if ($process == "convert") {
    63                         if (_CONVERT_COMMAND!='') {
    64                                 define ('_CONVERT_COMMAND', 'convert');
    65                                 define ('_ROTATE_COMMAND', _CONVERT_COMMAND.' -rotate %t %src %dest');
    66                         } else
    67                                 define ('_ROTATE_COMMAND', '');
    68                         if (_ROTATE_COMMAND!=='') {
    69                                 $commande = str_replace(
    70                                         array('%t', '%src', '%dest'),
    71                                         array(
    72                                                 $var_rot,
    73                                                 escapeshellcmd($src),
    74                                                 escapeshellcmd($dest)
    75                                         ),
    76                                         _ROTATE_COMMAND);
    77                                 spip_log($commande);
    78                                 exec($commande);
    79                         } else
    80                                 $dest = $src;
    81                 }
     55                list($hauteur,$largeur) = taille_image($res);
     56                $res = extraire_attribut($res,'src');
     57
     58                include_spip('inc/getdocument');
     59                deplacer_fichier_upload($res,$dest);
    8260        }
    83         else
     61        else {
    8462                $dest = $src;
    85 
    86         $size_image = @getimagesize($dest);
    87         $largeur = $size_image[0];
    88         $hauteur = $size_image[1];
     63                $size_image = @getimagesize($dest);
     64                $largeur = $size_image[0];
     65                $hauteur = $size_image[1];
     66        }
    8967
    9068        // succes !
    9169        if ($largeur>0 AND $hauteur>0) {
    92                 sql_updateq('spip_documents', array('fichier' => set_spip_doc($dest), 'largeur'=>$largeur, 'hauteur'=>$hauteur), "id_document=$arg");
     70                $set = array(
     71                        'fichier' => set_spip_doc($dest),
     72                        'largeur'=>$largeur, 'hauteur'=>$hauteur,
     73                        'distant'=>'non' // le document n'est plus distant apres une transformation
     74                        );
     75                if ($taille = @filesize($dest))
     76                        $set['taille'] = $taille;
     77                sql_updateq('spip_documents', $set, "id_document=".intval($id_document));
    9378                if ($effacer) {
    94                         spip_log("j'efface $effacer");
     79                        spip_log("rotation : j'efface $effacer");
    9580                        spip_unlink($effacer);
    9681                }
     
    10388                                        'spip_table_objet' => 'spip_documents',
    10489                                        'type' =>'document',
    105                                         'id_objet' => $arg,
    106                                         'champs' => array('rotation'=>$r[2],'orientation'=>$var_rot,'fichier'=>$row),
     90                                        'id_objet' => $id_document,
     91                                        'champs' => array('rotation'=>$angle,'orientation'=>$var_rot,'fichier'=>$row['fichier']),
    10792                                        'serveur' => $serveur,
    10893                                        'action'=>'tourner',
    10994                                ),
    110                                 'data' => array('fichier'=>$row)
     95                                'data' => $set
    11196                        )
    11297                );
    11398        }
    11499
    115 }
    116 
    117 
    118 /////////////////////////////////////////////////////////////////////
    119 //
    120 // Faire tourner une image
    121 //
    122 // http://doc.spip.org/@gdRotate
    123 function gdRotate ($src, $dest, $rtt){
    124         $src_img = '';
    125         if(preg_match("/\.(png|gif|jpe?g|bmp)$/i", $src, $regs)) {
    126                 switch($regs[1]) {
    127                         case 'png':
    128                           if (function_exists('ImageCreateFromPNG')) {
    129                                 $src_img=ImageCreateFromPNG($src);
    130                                 $save = 'imagepng';
    131                           }
    132                           break;
    133                         case 'gif':
    134                           if (function_exists('ImageCreateFromGIF')) {
    135                                 $src_img=ImageCreateFromGIF($src);
    136                                 $save = 'imagegif';
    137                           }
    138                           break;
    139                         case 'jpeg':
    140                         case 'jpg':
    141                           if (function_exists('ImageCreateFromJPEG')) {
    142                                 $src_img=ImageCreateFromJPEG($src);
    143                                 $save = 'Imagejpeg';
    144                           }
    145                           break;
    146                         case 'bmp':
    147                           if (function_exists('ImageCreateFromWBMP')) {
    148                                 $src_img=@ImageCreateFromWBMP($src);
    149                                 $save = 'imagewbmp';
    150                           }
    151                           break;
    152                 }
    153         }
    154 
    155         if (!$src_img) {
    156                 spip_log("gdrotate: image non lue, $src");
    157                 return false;
    158         }
    159 
    160         $size=@getimagesize($src);
    161         if (!($size[0] * $size[1])) return false;
    162 
    163         if (function_exists('imagerotate')) {
    164                 $dst_img = imagerotate($src_img, -$rtt, 0);
    165         } else {
    166 
    167                 // Creer l'image destination (hauteur x largeur) et la parcourir
    168                 // pixel par pixel (un truc de fou)
    169                 if ($rtt == 180)
    170                         $size_dest = $size;
    171                 else
    172                         $size_dest = array($size[1],$size[0]);
    173                
    174                 if ($GLOBALS['meta']['image_process'] == "gd2")
    175                         $dst_img=ImageCreateTrueColor($size_dest[0],$size_dest[1]);
    176                 else
    177                         $dst_img=ImageCreate($size_dest[0],$size_dest[1]);
    178 
    179                 // t=top; b=bottom; r=right; l=left
    180                 for ($t=0;$t<=$size_dest[0]-1; $t++) {
    181                         $b = $size_dest[0] -1 - $t;
    182                         for ($l=0;$l<=$size_dest[1]-1; $l++) {
    183                                 $r = $size_dest[1] -1 - $l;
    184                                 switch ($rtt) {
    185                                         case 90:
    186                                                 imagecopy($dst_img,$src_img,$t,$r,$r,$b,1,1);
    187                                                 break;
    188                                         case 270:
    189                                                 imagecopy($dst_img,$src_img,$t,$l,$r,$t,1,1);
    190                                                 break;
    191                                         case 180:
    192                                                 imagecopy($dst_img,$src_img,$t,$l,$b,$r,1,1);
    193                                                 break;
    194                                 }
    195                         }
    196                 }
    197         }
    198         ImageDestroy($src_img);
    199         ImageInterlace($dst_img,0);
    200 
    201         // obligatoire d'enregistrer dans le meme format, puisqu'on change le doc
    202         // mais pas son extension
    203         $save($dst_img,$dest);
    204100}
    205101
     
    210106
    211107        if (function_exists('exif_read_data')
    212         AND function_exists('imagerotate')
    213108        AND $exif = exif_read_data($fichier)
    214109        AND (
  • _core_/plugins/medias/base/medias.php

    r43738 r43743  
    2121        $interfaces['table_des_tables']['documents']='documents';
    2222        $interfaces['table_des_tables']['types_documents']='types_documents';
     23
    2324        $interfaces['exceptions_des_tables']['documents']['type_document']=array('types_documents'
    2425        , 'titre');
    2526        $interfaces['exceptions_des_tables']['documents']['extension_document']=array('types_documents', 'extension');
    26         $interfaces['exceptions_des_tables']['documents']['mime_type']=array('types_documents'
    27         , 'mime_type');
     27        $interfaces['exceptions_des_tables']['documents']['mime_type']=array('types_documents', 'mime_type');
     28        $interfaces['exceptions_des_tables']['documents']['media']=array('types_documents', 'media');
     29       
    2830        $interfaces['table_titre']['documents']= "titre, fichier AS surnom, '' AS lang";
    2931        $interfaces['table_date']['documents']='date';
     
    5860                        "date"  => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
    5961                        "descriptif"    => "text DEFAULT '' NOT NULL",
    60                         "fichier"       => "varchar(255) DEFAULT '' NOT NULL",
     62                        "fichier"       => "text NOT NULL DEFAULT ''",
    6163                        "taille"        => "integer",
    6264                        "largeur"       => "integer",
     
    6466                        "mode"  => "ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL",
    6567                        "distant"       => "VARCHAR(3) DEFAULT 'non'",
     68                        "statut" => "varchar(10) DEFAULT '0' NOT NULL",
     69                        "credits" => "varchar(255) DEFAULT '' NOT NULL",
     70                        "date_publication" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
     71                        "brise" => "tinyint DEFAULT 0",
    6672                        "maj"   => "TIMESTAMP");
    6773
     
    8288                        "inclus"        => "ENUM('non', 'image', 'embed') DEFAULT 'non'  NOT NULL",
    8389                        "upload"        => "ENUM('oui', 'non') DEFAULT 'oui'  NOT NULL",
     90                        "media" => "varchar(10) DEFAULT 'file' NOT NULL",
    8491                        "maj"   => "TIMESTAMP");
    8592
     
    148155        global $tables_images, $tables_sequences, $tables_documents, $tables_mime;
    149156        include_spip('base/typedoc');
     157        include_spip('base/abstract_sql');
    150158
    151159        foreach ($tables_mime as $extension => $type_mime) {
     
    165173                                $titre = '';
    166174                }
     175
     176                // type de media
     177          $media = "file";
     178          if (preg_match(",^image/,",$type_mime) OR in_array($type_mime,array('application/illustrator')))
     179                  $media = "image";
     180          elseif (preg_match(",^audio/,",$type_mime))
     181                  $media = "audio";
     182          elseif (preg_match(",^video/,",$type_mime) OR in_array($type_mime,array('application/ogg','application/x-shockwave-flash','application/mp4')))
     183                  $media = "video";
     184         
    167185                // Init ou Re-init ==> replace pas insert
    168186                sql_replace('spip_types_documents',
     
    171189                                'inclus' => $inclus,
    172190                                'extension' => $extension,
     191                                'media' => $media,
    173192                                'upload' => 'oui'
    174193                        ),
     
    177196}
    178197
     198
     199function medias_check_statuts($affiche = false){
     200        $trouver_table = charger_fonction('trouver_table','base');
     201        $desc = $trouver_table('documents');
     202        # securite, si jamais on arrive ici avant un upgrade de base
     203        if (!isset($desc['field']['statut']))
     204                return;
     205
     206        // utiliser sql_allfetsel pour clore la requete avant la mise a jour en base sur chaque doc (sqlite)
     207        // iterer par groupe de 100 pour ne pas exploser sur les grosses bases
     208        $docs = array_map('reset',sql_allfetsel('id_document','spip_documents',"statut='0'",'','',"0,100"));
     209        while (count($docs)){
     210                include_spip('action/editer_document');
     211                foreach($docs as $id_document)
     212                        // mettre a jour le statut si necessaire
     213                        instituer_document($id_document);
     214                if ($affiche) echo " .";
     215          $docs = array_map('reset',sql_allfetsel('id_document','spip_documents',"statut='0'",'','',"0,100"));
     216        }
     217}
    179218
    180219function medias_upgrade($nom_meta_base_version,$version_cible){
     
    186225                        maj_tables(array('spip_documents','spip_documents_liens','spip_types_documents'));
    187226                        creer_base_types_doc();
    188                         ecrire_meta($nom_meta_base_version,$current_version="0.1",'non');
     227                        ecrire_meta($nom_meta_base_version,$current_version=$version_cible,'non');
     228                }
     229                if (spip_version_compare($current_version,'0.2.0','<')){
     230                        include_spip('base/abstract_sql');
     231                        sql_alter("TABLE spip_documents ADD statut varchar(10) DEFAULT '0' NOT NULL");
     232                        ecrire_meta($nom_meta_base_version,$current_version="0.2",'non');
     233                }
     234                if (spip_version_compare($current_version,'0.3.0','<')){
     235                        include_spip('base/abstract_sql');
     236                        // ajouter un champ
     237                        sql_alter("TABLE spip_documents ADD date_publication datetime DEFAULT '0000-00-00 00:00:00' NOT NULL");
     238                        // vider le cache des descriptions de tables
     239                        $trouver_table = charger_fonction('trouver_table','base');
     240                        $trouver_table(false);
     241                        // ecrire la version pour ne plus passer la
     242                        ecrire_meta($nom_meta_base_version,$current_version="0.3.0",'non');
     243                }
     244                if (spip_version_compare($current_version,'0.4.0','<')){
     245                        // recalculer tous les statuts en tenant compte de la date de publi des articles...
     246                        echo "Mise a jour des statuts de documents...";
     247                        medias_check_statuts(true);
     248                        ecrire_meta($nom_meta_base_version,$current_version="0.4.0",'non');
     249                }
     250                if (spip_version_compare($current_version,'0.5.0','<')){
     251                        include_spip('base/abstract_sql');
     252                        // ajouter un champ
     253                        sql_alter("TABLE spip_documents ADD brise tinyint DEFAULT 0");
     254                        // vider le cache des descriptions de tables
     255                        $trouver_table = charger_fonction('trouver_table','base');
     256                        $trouver_table(false);
     257                        ecrire_meta($nom_meta_base_version,$current_version="0.5.0",'non');
     258                }
     259                if (spip_version_compare($current_version,'0.6.0','<')){
     260                        include_spip('base/abstract_sql');
     261                        sql_alter("TABLE spip_types_documents ADD media varchar(10) DEFAULT 'file' NOT NULL");
     262                        creer_base_types_doc();
     263                        ecrire_meta($nom_meta_base_version,$current_version="0.6.0",'non');
     264                }
     265                if (spip_version_compare($current_version,'0.7.0','<')){
     266                        include_spip('base/abstract_sql');
     267                        sql_alter("TABLE spip_documents ADD credits varchar(255) DEFAULT '' NOT NULL");
     268                        ecrire_meta($nom_meta_base_version,$current_version="0.7.0",'non');
     269                }
     270                if (spip_version_compare($current_version,'0.10.0','<')){
     271                        // Augmentation de la taille du champ fichier pour permettre les URL longues
     272                        include_spip('base/abstract_sql');
     273                        sql_alter("TABLE spip_documents CHANGE fichier fichier TEXT NOT NULL DEFAULT ''");
     274                        ecrire_meta($nom_meta_base_version,$current_version="0.10.0",'non');
    189275                }
    190276        }
    191 }
     277        medias_check_statuts();
     278}
     279
     280function medias_install($action,$prefix,$version_cible){
     281        $version_base = $GLOBALS[$prefix."_base_version"];
     282        switch ($action){
     283                case 'test':
     284                        # plus necessaire si pas de bug :p
     285                        # medias_check_statuts();
     286                        return (isset($GLOBALS['meta'][$prefix."_base_version"])
     287                                AND version_compare($GLOBALS['meta'][$prefix."_base_version"],$version_cible,">="));
     288                        break;
     289                case 'install':
     290                        medias_upgrade('medias_base_version',$version_cible);
     291                        break;
     292                case 'uninstall':
     293                        # pas de deinstallation sur les documents pour le moment, trop dangereux
     294                        # medias_vider_tables();
     295                        break;
     296        }
     297}
     298
    192299
    193300function medias_optimiser_base_disparus($flux){
  • _core_/plugins/medias/inc/documents.php

    r43738 r43743  
    8888                        . '&file=' . rawurlencode($f)
    8989                        ,false,true);
    90 }
    91 
    92 // http://doc.spip.org/@document_et_vignette
    93 function document_et_vignette($document, $url, $portfolio=false) {
    94         $image = $document['id_vignette'];
    95 
    96         if ($image)
    97                 $image = sql_fetsel("*", "spip_documents", "id_document = ".$image);
    98         if ($image) {
    99                 if (!$portfolio OR !($GLOBALS['meta']['creer_preview'] == 'oui')) {
    100                         $x = $image['largeur'];
    101                         $y = $image['hauteur'];
    102                 } else {
    103                         $x = 120;
    104                         $y = 110;
    105                 }
    106                 $image = get_spip_doc($image['fichier']);
    107         } else {
    108                 if ($portfolio) {
    109                         $x = 110;
    110                         $y = 120;
    111                 } else  $x = $y =-1;
    112         }
    113         if (!$url) $url = generer_url_document_dist($document['id_document'], 'document');
    114         return vignette_automatique($image, $document, $url, $x, $y, '', "miniature_document");
    11590}
    11691
     
    199174// http://doc.spip.org/@afficher_documents_colonne
    200175function afficher_documents_colonne($id, $type="article",$script=NULL) {
    201         include_spip('inc/autoriser');
    202 
    203         // il faut avoir les droits de modif sur l'article pour pouvoir uploader !
    204         if (!autoriser('joindredocument',$type,$id))
    205                 return "";
    206 
    207         include_spip('inc/presentation'); // pour l'aide quand on appelle afficher_documents_colonne depuis un squelette
    208         // seuls cas connus : article, breve ou rubrique
    209         if ($script==NULL){
    210                 $script = $type.'s_edit';
    211                 if (!test_espace_prive())
    212                         $script = parametre_url(self(),"show_docs",'');
    213         }
    214         $id_document_actif = _request('show_docs');
    215 
    216         $joindre = charger_fonction('joindre', 'inc');
    217 
    218         define('_INTERFACE_DOCUMENTS', true);
    219         if (!_INTERFACE_DOCUMENTS
    220         OR $GLOBALS['meta']["documents_$type"]=='non') {
    221 
    222         // Ajouter nouvelle image
    223         $ret = "<div id='images'>\n"
    224                 . $joindre(array(
    225                         'cadre' => 'relief',
    226                         'icone' => 'image-24.gif',
    227                         'fonction' => 'new',
    228                         'titre' => majuscules(_T('bouton_ajouter_image')).aide("ins_img"),
    229                         'script' => $script,
    230                         'args' => "id_$type=$id",
    231                         'id' => $id,
    232                         'intitule' => _T('info_telecharger'),
    233                         'mode' => 'image',
    234                         'type' => $type,
    235                         'ancre' => '',
    236                         'id_document' => 0,
    237                         'iframe_script' => generer_url_ecrire("documents_colonne","id=$id&type=$type",true)
    238                 ))
    239                 . '</div><br />';
    240 
    241         if (!_INTERFACE_DOCUMENTS) {
    242                 //// Images sans documents
    243                 $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");
    244 
    245                 $ret .= "\n<div id='liste_images'>";
    246 
    247                 while ($doc = sql_fetch($res)) {
    248                         $id_document = $doc['id_document'];
    249                         $deplier = ($id_document_actif==$id_document);
    250                         $ret .= afficher_case_document($id_document, $id, $script, $type, $deplier);
    251                 }
    252 
    253                 $ret .= "</div><br /><br />\n";
    254         }
    255         }
    256 
    257         /// Ajouter nouveau document
    258         $bouton = !_INTERFACE_DOCUMENTS
    259                 ? majuscules(_T('bouton_ajouter_document')).aide("ins_doc")
    260                 : (_T('bouton_ajouter_image_document')).aide("ins_doc");
    261 
    262         $ret .= "<div id='documents'></div>\n<div id='portfolio'></div>\n";
    263         if ($GLOBALS['meta']["documents_$type"]!='non') {
    264                 $ret .= $joindre(array(
    265                         'cadre' => _INTERFACE_DOCUMENTS ? 'relief' : 'enfonce',
    266                         'icone' => 'doc-24.gif',
    267                         'fonction' => 'new',
    268                         'titre' => $bouton,
    269                         'script' => $script,
    270                         'args' => "id_$type=$id",
    271                         'id' => $id,
    272                         'intitule' => _T('info_telecharger'),
    273                         'mode' => _INTERFACE_DOCUMENTS ? 'choix' : 'document',
    274                         'type' => $type,
    275                         'ancre' => '',
    276                         'id_document' => 0,
    277                         'iframe_script' => generer_url_ecrire("documents_colonne","id=$id&type=$type",true)
    278                 ));
    279         }
    280 
    281         // Afficher les documents lies
    282         $ret .= "<br /><div id='liste_documents'>\n";
    283 
    284         //// Documents associes
    285         $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)
    286         . ((!_INTERFACE_DOCUMENTS)
    287                 ? " AND D.mode='document'"
    288         : " AND D.mode IN ('image','document')"
    289         ), "", "D.mode, D.id_document");
    290 
    291         while($row = sql_fetch($res))
    292                 $ret .= afficher_case_document($row['id_document'], $id, $script, $type, ($id_document_actif==$row['id_document']));
    293 
    294         $ret .= "</div>";
    295         if (test_espace_prive()){
    296                 $ret .= http_script('', "async_upload.js")
    297                   . http_script('$("form.form_upload").async_upload(async_upload_article_edit)');
    298         }
    299 
    300         return $ret;
     176        if (!is_array($GLOBALS['medias_exec_colonne_document']) OR !in_array(_request('exec'),$GLOBALS['medias_exec_colonne_document']))
     177                $GLOBALS['medias_exec_colonne_document'][] = _request('exec');
     178        return "";
    301179}
    302180
     
    323201}
    324202
    325 
    326 // Est-ce que le document est inclus dans le texte ?
    327 // http://doc.spip.org/@est_inclus
    328 function est_inclus($id_document) {
    329         return isset($GLOBALS['doublons_documents_inclus']) ?
    330                 in_array($id_document,$GLOBALS['doublons_documents_inclus']) : false;
    331 }
    332 
    333 //
    334 // Afficher un document sous forme de bloc depliable
    335 // en donnant un apercu
    336 // et en indiquer le raccourci permettant l'incrustation
    337 // Pour les distant, donner un bouton pour rappatriement (trombone)
    338 // Pour les images, donnner les boutons de rotations
    339 
    340 
    341 // http://doc.spip.org/@afficher_case_document
    342 function afficher_case_document($id_document, $id, $script, $type, $deplier=false) {
    343         global $spip_lang_right;
    344 
    345         $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));
    346 
    347         if (!$document) return "";
    348 
    349         $id_vignette = $document['id_vignette'];
    350         $extension = $document['extension'];
    351         $descriptif = $document['descriptif'];
    352         $fichier = $document['fichier'];
    353         $largeur = $document['largeur'];
    354         $hauteur = $document['hauteur'];
    355         $mode = $document['mode'];
    356         $distant = $document['distant'];
    357         $titre = $document['titre'];
    358         $legender = charger_fonction('legender', 'inc');
    359         $dist = '';
    360 
    361         $r = sql_fetsel("titre,inclus", "spip_types_documents", "extension=".sql_quote($extension));
    362         if ($r) {
    363                 $type_inclus = $r['inclus'];
    364                 $type_titre = $r['titre'];
    365         }
    366 
    367         if ($mode == 'document') {
    368 
    369                 if ($distant == 'oui') {
    370                         include_spip('inc/tourner');
    371                         $dist = "\n<div class='verdana1' style='float: $spip_lang_right; text-align: $spip_lang_right;'>"
    372                         . "\n<img src='" . chemin_image('attachment.gif') . "'\n\talt=\"$fichier\"\n\ttitle=\"$fichier\" />\n"
    373                         . bouton_copier_local($document, $type, $id, $id_document, $script)
    374                         . "</div>\n";
    375                 }
    376 
    377                 if (est_inclus($id_document))
    378                         $raccourci = affiche_raccourci_doc('doc', $id_document, '');
    379                 else {
    380                         $vign= (($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0);
    381                         $raccourci = $vign ? ("<b>"._T('info_inclusion_vignette')."</b><br />") : '';
    382 
    383                         $raccourci .= "<div style='color: 333333'>"
    384                         . affiche_raccourci_doc('doc', $id_document, 'left')
    385                         . affiche_raccourci_doc('doc', $id_document, 'center')
    386                         . affiche_raccourci_doc('doc', $id_document, 'right')
    387                         . "</div>\n";
    388 
    389                         if ($vign) {
    390                                 $raccourci .= "<div style='padding:2px; ' class='arial1 spip_xx-small'>";
    391                                 $raccourci .= "<b>"._T('info_inclusion_directe')."</b><br />";
    392                                 $raccourci .= "<div style='color: 333333'>"
    393                                 . affiche_raccourci_doc('emb', $id_document, 'left')
    394                                 . affiche_raccourci_doc('emb', $id_document, 'center')
    395                                 . affiche_raccourci_doc('emb', $id_document, 'right')
    396                                 . "</div>\n";
    397                                 $raccourci .= "</div>";
    398                         }
    399                 }
    400                 $ninclus = false;
    401                 $icone = 'doc-24.gif';
    402                 $style = 'e';
    403 
    404         } else if ($mode == 'image') {
    405 
    406                 $icone = 'image-24.gif';
    407                 $style = 'r';
    408                 $ninclus = ($type_inclus !== 'image');
    409                 $doc = ($descriptif OR $titre) ? 'doc' : 'img';
    410 
    411                 if (est_inclus($id_document))
    412                         $raccourci = affiche_raccourci_doc($doc, $id_document, '');
    413                 else {
    414                         $raccourci =
    415                                 affiche_raccourci_doc($doc, $id_document, 'left')
    416                                 . affiche_raccourci_doc($doc, $id_document, 'center')
    417                                 . affiche_raccourci_doc($doc, $id_document, 'right');
    418                 }
    419 
    420         }
    421         $cadre = lignes_longues(typo($titre ? $titre : basename($fichier)), 20);
    422         // encapsuler chaque document dans un container pour permettre son remplacement en ajax
    423         return  '<div>'
    424                 . debut_cadre($style, $icone, '', $cadre, "document$id_document")
    425                 . ($ninclus ? '' :
    426                    ("\n<div style='text-align: center'>"
    427                     . $dist
    428                     . document_et_vignette($document, '', true)
    429                     . '</div>'
    430                     . "\n<div class='verdana1' style='text-align: center; color: black;'>\n"
    431                     . ($type_titre ? $type_titre :
    432                        ( _T('info_document').' '.majuscules($extension)))
    433                     . "</div>"))
    434                 . $apercu
    435                 . "\n<div style='padding:2px; ' class='arial1 spip_xx-small'>"
    436                 . $raccourci
    437                 . "</div>\n"
    438                 . $legender($id_document, $document, $script, $type, $id, "document$id_document", $deplier)
    439                 . fin_cadre($style)
    440                 . '</div>';
    441 }
    442 
    443 // Etablit la liste des documents orphelins, c'est-a-dire qui ne sont lies
    444 // a rien ; renvoie un tableau (id_document)
    445 // ici on ne join pas avec la table objet pour voir si l'objet existe vraiment
    446 // on considere que c'est le role d'optimiser que de nettoyer les liens morts
    447 // sinon eventuellement appeler avant une fonction nettoyer_liens_documents
    448 // http://doc.spip.org/@lister_les_documents_orphelins
    449 function lister_les_documents_orphelins() {
    450         $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)");
    451 
    452         $orphelins = array();
    453         while ($t = sql_fetch($s)) {
    454                 $orphelins[$t['id_document']] = true;
    455                 // la vignette d'un orphelin est orpheline
    456                 if ($t['id_vignette'])
    457                         $orphelins[$t['id_vignette']] = true;
    458 
    459         }
    460 
    461         // les vignettes qui n'appartiennent a aucun document sont aussi orphelines
    462         $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");
    463         while ($t = sql_fetch($s))
    464                 $orphelins[$t['id_document']] = true;
    465 
    466         return array_keys(array_filter($orphelins));
    467 }
    468 
    469 // Supprimer les documents de la table spip_documents,
    470 // ainsi que les fichiers correspondants dans IMG/
    471 // Fonction a n'appeler que sur des documents orphelins
    472 // http://doc.spip.org/@supprimer_documents
    473 function supprimer_documents($liste = array()) {
    474         if (!count($liste))
    475                 return;
    476 
    477         $in = sql_in('id_document', $liste);
    478 
    479         // Supprimer les fichiers locaux et les copies locales
    480         // des docs distants
    481         $s = sql_select("fichier, distant", "spip_documents", $in);
    482         while ($t = sql_fetch($s)) {
    483                 if ($t['distant'] == 'oui') {
    484                         include_spip('inc/distant');
    485                         if ($local = copie_locale($t['fichier'], 'test'))
    486                                 spip_log("efface $local = ".$t['fichier']);
    487                                 supprimer_fichier($local);
    488                 }
    489                 else {
    490                         if (@file_exists($f = get_spip_doc($t['fichier']))) {
    491                                 spip_log("efface $f");
    492                                 supprimer_fichier($f);
    493                         }
    494                 }
    495         }
    496 
    497         // Supprimer les entrees dans spip_documents et associees
    498         sql_delete('spip_documents', $in);
    499         // en principe il ne devrait rien y avoir ici si les documents sont bien orphelins
    500         sql_delete('spip_documents_liens', $in);
    501 }
    502 
    503203?>
  • _core_/plugins/medias/inc/getdocument.php

    r43738 r43743  
    1010 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
    1111\***************************************************************************/
     12#
     13# Fichier obsolete, a supprimer
     14#
     15#
     16#
     17#
     18#
    1219
    1320if (!defined('_ECRIRE_INC_VERSION')) return;
  • _core_/plugins/medias/medias_autoriser.php

    r43738 r43743  
    1313if (!defined('_ECRIRE_INC_VERSION')) return;
    1414
    15 function medias_autoriser() {}
     15/* Pour que le pipeline de rale pas ! */
     16function medias_autoriser(){}
     17
     18
     19function autoriser_portfolio_administrer_dist($faire,$quoi,$id,$qui,$options) {
     20        return $qui['statut'] == '0minirezo';
     21}
     22
     23function autoriser_documents_bouton_dist($faire,$quoi,$id,$qui,$options) {
     24        return autoriser('administrer','portfolio',$id,$qui,$options);
     25}
     26
     27/**
     28 * Autoriser le changement des dimensions sur un document
     29 * @param <type> $faire
     30 * @param <type> $quoi
     31 * @param <type> $id
     32 * @param <type> $qui
     33 * @param <type> $options
     34 * @return <type>
     35 */
     36function autoriser_document_tailler_dist($faire,$quoi,$id,$qui,$options) {
     37
     38        if (!$id_document=intval($id))
     39                return false;
     40        if (!autoriser('modifier','document',$id,$qui,$options))
     41                return false;
     42
     43        if (!isset($options['document']) OR !$document = $options['document'])
     44                $document = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
     45
     46        // (on ne le propose pas pour les images qu'on sait
     47        // lire : gif jpg png), sauf bug, ou document distant
     48        if (in_array($document['extension'], array('gif','jpg','png'))
     49                AND $document['hauteur']
     50                AND $document['largeur']
     51                AND $document['distant']!='oui')
     52                return false;
     53
     54        // Donnees sur le type de document
     55        $extension = $document['extension'];
     56        $type_inclus = sql_getfetsel('inclus','spip_types_documents', "extension=".sql_quote($extension));
     57
     58        if (($type_inclus == "embed" OR $type_inclus == "image")
     59        AND (
     60                // documents dont la taille est definie
     61                ($document['largeur'] * $document['hauteur'])
     62                // ou distants
     63                OR $document['distant'] == 'oui'
     64                // ou tous les formats qui s'affichent en embed
     65                OR $type_inclus == "embed"
     66        ))
     67                return true;
     68}
    1669
    1770// On ne peut joindre un document qu'a un article qu'on a le droit d'editer
     
    3083}
    3184
    32 // On ne peut modifier un document que s'il est lie a un objet qu'on a le droit
    33 // d'editer *et* qu'il n'est pas lie a un objet qu'on n'a pas le droit d'editer
    34 // http://doc.spip.org/@autoriser_document_modifier_dist
    35 function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt){
     85
     86/**
     87 * On ne peut modifier un document que s'il n'est pas lie a un objet qu'on n'a pas le droit d'editer
     88 *
     89 * @staticvar <type> $m
     90 * @param <type> $faire
     91 * @param <type> $type
     92 * @param <type> $id
     93 * @param <type> $qui
     94 * @param <type> $opt
     95 * @return <type>
     96 */
     97function autoriser_document_modifier($faire, $type, $id, $qui, $opt){
    3698        static $m = array();
    3799
     100        // les admins ont le droit de modifier tous les documents
    38101        if ($qui['statut'] == '0minirezo'
    39102        AND !$qui['restreint'])
     
    41104
    42105        if (!isset($m[$id])) {
    43                 $vu = false;
     106                // un document non publie peut etre modifie par tout le monde (... ?)
     107                if ($s = sql_getfetsel("statut", "spip_documents", "id_document=".intval($id))
     108                        AND $s!=='publie')
     109                        $m[$id] = true;
     110        }
     111
     112        if (!isset($m[$id])) {
    44113                $interdit = false;
    45114
    46115                $s = sql_select("id_objet,objet", "spip_documents_liens", "id_document=".sql_quote($id));
    47116                while ($t = sql_fetch($s)) {
    48                         if (autoriser('modifier', $t['objet'], $t['id_objet'], $qui, $opt)) {
    49                                 $vu = true;
    50                         }
    51                         else {
     117                        if (!autoriser('modifier', $t['objet'], $t['id_objet'], $qui, $opt)) {
    52118                                $interdit = true;
    53119                                break;
    54120                        }
    55121                }
    56                 $m[$id] = ($vu && !$interdit);
     122
     123                $m[$id] = ($interdit?false:true);
    57124        }
    58125
     
    61128
    62129
    63 // On ne peut supprimer un document que s'il n'est lie a aucun objet
    64 // c'est autorise pour tout auteur ayant acces a ecrire
    65 // http://doc.spip.org/@autoriser_document_modifier_dist
    66 function autoriser_document_supprimer_dist($faire, $type, $id, $qui, $opt){
     130/**
     131 * On ne peut supprimer un document que s'il n'est lie a aucun objet
     132 * ET qu'on a le droit de le modifier !
     133 *
     134 * @param <type> $faire
     135 * @param <type> $type
     136 * @param <type> $id
     137 * @param <type> $qui
     138 * @param <type> $opt
     139 * @return <type>
     140 */
     141function autoriser_document_supprimer($faire, $type, $id, $qui, $opt){
    67142        if (!intval($id)
    68143                OR !$qui['id_auteur']
     
    72147                return false;
    73148
    74         return true;
     149        return autoriser('modifier','document',$id,$qui,$opt);
    75150}
    76151
     
    118193        return true;
    119194}
     195
     196/**
     197 * Autoriser a nettoyer les orphelins de la base des documents
     198 * reserve aux admins complets
     199 *
     200 * @param  $faire
     201 * @param  $type
     202 * @param  $id
     203 * @param  $qui
     204 * @param  $opt
     205 * @return bool
     206 */
     207function autoriser_orphelins_supprimer($faire, $type, $id, $qui, $opt){
     208        if ($qui['statut'] == '0minirezo'
     209        AND !$qui['restreint'])
     210                return true;
     211}
  • _core_/plugins/medias/medias_fonctions.php

    r43738 r43743  
    1818if (!defined('_ECRIRE_INC_VERSION')) return;
    1919
     20
     21/**
     22 * Afficher la puce de statut pour les documents
     23 *
     24 * @param unknown_type $id_document
     25 * @param unknown_type $statut
     26 * @param unknown_type $id_rubrique
     27 * @param unknown_type $type
     28 * @param unknown_type $ajax
     29 * @return unknown
     30 */
     31function medias_puce_statut_document($id_document, $statut){
     32        if ($statut=='publie') {
     33                $puce='puce-verte.gif';
     34        }
     35        else if ($statut == "prepa") {
     36                $puce = 'puce-blanche.gif';
     37        }
     38        else if ($statut == "poubelle") {
     39                $puce = 'puce-poubelle.gif';
     40        }
     41        else
     42                $puce = 'puce-blanche.gif';
     43
     44        return http_img_pack($puce, $statut, "class='puce'");
     45}
     46
    2047//
    2148// <BOUCLE(DOCUMENTS)>
    2249//
    2350// http://doc.spip.org/@boucle_DOCUMENTS_dist
    24 function boucle_DOCUMENTS_dist($id_boucle, &$boucles) {
     51function boucle_DOCUMENTS($id_boucle, &$boucles) {
    2552        $boucle = &$boucles[$id_boucle];
    2653        $id_table = $boucle->id_table;
     
    4269        // ces complications (et tant pis si la boucle n'a pas prevu de
    4370        // verification du statut de l'article)
    44         if ((!isset($boucle->modificateur['tout']) OR !$boucle->modificateur['tout'])
    45         AND (!isset($boucle->modificateur['criteres']['id_objet']) OR !$boucle->modificateur['criteres']['id_objet'])
     71        if (!isset($boucle->modificateur['tout'])
     72        AND !isset($boucle->modificateur['criteres']['statut'])
    4673        ) {
    47                 # Espace avant LEFT JOIN indispensable pour insertion de AS
    48                 # a refaire plus proprement
    49 
    50                 ## la boucle par defaut ignore les documents de forum
    51                 $boucle->from[$id_table] = "spip_documents LEFT JOIN spip_documents_liens AS l
    52                         ON $id_table.id_document=l.id_document
    53                         LEFT JOIN spip_articles AS aa
    54                                 ON (l.id_objet=aa.id_article AND l.objet=\'article\')
    55                         LEFT JOIN spip_breves AS bb
    56                                 ON (l.id_objet=bb.id_breve AND l.objet=\'breve\')
    57                         LEFT JOIN spip_rubriques AS rr
    58                                 ON (l.id_objet=rr.id_rubrique AND l.objet=\'rubrique\')"
    59                         // test conditionne par la presence du plugin forum, en attendant le champ statut sur la table documents
    60                         . (test_plugin_actif('forum')?" LEFT JOIN spip_forum AS ff      ON (l.id_objet=ff.id_forum AND l.objet=\'forum\')":"");
    61 
    62                 $boucle->group[] = "$id_table.id_document";
    63 
    64                 if (defined('_VAR_PREVIEW') AND _VAR_PREVIEW) {
    65                         array_unshift($boucle->where,"'(aa.statut IN (\'publie\',\'prop\') OR bb.statut  IN (\'publie\',\'prop\') OR rr.statut IN (\'publie\',\'prive\')"
    66                         .(test_plugin_actif('forum')? " OR ff.statut IN (\'publie\',\'prop\')":"")
    67                         .")'");
     74                if ($GLOBALS['var_preview']) {
     75                        array_unshift($boucle->where,"'($id_table.statut IN (\"publie\",\"prop\",\"prepa\"))'");
    6876                } else {
    69                         $postdates = ($GLOBALS['meta']['post_dates'] == 'non')
    70                                 ? ' AND \'.quete_condition_postdates(\'aa.date\').\''
    71                                 : '';
    72                         array_unshift($boucle->where,"'((aa.statut = \'publie\'$postdates) OR bb.statut = \'publie\' OR rr.statut = \'publie\'"
    73                         .(test_plugin_actif('forum')? " OR ff.statut=\'publie\'":"")
    74                         .")'");
     77                        if ($GLOBALS['meta']["post_dates"] == 'non')
     78                                array_unshift($boucle->where,array("'<'", "'$id_table" . ".date_publication'", "sql_quote(quete_date_postdates())"));
     79                        array_unshift($boucle->where,"'(($id_table.statut = \"publie\"))'");
    7580                }
    7681        }
    77 
    7882
    7983        return calculer_boucle($id_boucle, $boucles);
    8084}
    8185
     86
     87function lien_objet($id,$type,$longueur=80,$connect=NULL){
     88        include_spip('inc/liens');
     89        $titre = traiter_raccourci_titre($id, $type, $connect);
     90        $titre = typo($titre['titre']);
     91        if (!strlen($titre))
     92                $titre = _T('info_sans_titre');
     93        $url = generer_url_entite($id,$type);
     94        return "<a href='$url' class='$type'>".couper($titre,$longueur)."</a>";
     95}
     96
     97function critere_DOCUMENTS_orphelins_dist($idb, &$boucles, $crit) {
     98
     99        $boucle = &$boucles[$idb];
     100        $quoi = '@$Pile[0]["orphelins"]';
     101        $cond = $crit->cond;
     102        $not = $crit->not?"":"NOT";
     103
     104        $select = sql_get_select("DISTINCT id_document","spip_documents_liens as oooo");
     105        $where = "'".$boucle->id_table.".id_document $not IN ($select)'";
     106        if ($cond)
     107                $where = "($quoi)?$where:''";
     108
     109        $boucle->where[]= $where;
     110}
     111
    82112?>
  • _core_/plugins/medias/medias_pipelines.php

    r43738 r43743  
    4848        return $config;
    4949}
     50
     51
     52function medias_post_edition($flux){
     53        // si on ajoute un document, mettre son statut a jour
     54        if($flux['args']['operation']=='ajouter_document'){
     55                include_spip('action/editer_document');
     56                // mettre a jour le statut si necessaire
     57                instituer_document($flux['args']['id_objet']);
     58        }
     59        // si on institue un objet, mettre ses documents lies a jour
     60        elseif($flux['args']['operation']=='instituer' OR isset($flux['data']['statut'])){
     61                if ($flux['args']['table']!=='spip_documents'){
     62                        // verifier d'abord les doublons !
     63                        $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc');
     64                        $marquer_doublons_doc($flux['data'],$flux['args']['id_objet'],$flux['args']['type'],id_table_objet($flux['args']['type'], $flux['args']['serveur']),$flux['args']['table_objet'],$flux['args']['spip_table_objet'], '', $flux['args']['serveur']);
     65                        include_spip('base/abstract_sql');
     66                        $type = objet_type($flux['args']['table']);
     67                        $id = $flux['args']['id_objet'];
     68                        $docs = array_map('reset',sql_allfetsel('id_document','spip_documents_liens','id_objet='.intval($id).' AND objet='.sql_quote($type)));
     69                        include_spip('action/editer_document');
     70                        foreach($docs as $id_document)
     71                                // mettre a jour le statut si necessaire
     72                                instituer_document($id_document);
     73                }
     74        }
     75        else {
     76                if ($flux['args']['table']!=='spip_documents'){
     77                        // verifier les doublons !
     78                        $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc');
     79                        $marquer_doublons_doc($flux['data'],$flux['args']['id_objet'],$flux['args']['type'],id_table_objet($flux['args']['type'], $flux['args']['serveur']),$flux['args']['table_objet'],$flux['args']['spip_table_objet'], '', $flux['args']['serveur']);
     80                }
     81        }
     82        return $flux;
     83}
     84
     85// liste des exec avec la colonne document
     86$GLOBALS['medias_exec_colonne_document'][] = 'articles_edit';
     87$GLOBALS['medias_exec_colonne_document'][] = 'breves_edit';
     88$GLOBALS['medias_exec_colonne_document'][] = 'rubriques_edit';
     89
     90function medias_affiche_gauche($flux){
     91        if (in_array($flux['args']['exec'],$GLOBALS['medias_exec_colonne_document'])
     92                AND $table = preg_replace(",_edit$,","",$flux['args']['exec'])
     93                AND $type = objet_type($table)
     94                AND $id_table_objet = id_table_objet($type)
     95                AND ($id = intval($flux['args'][$id_table_objet]) OR $id = 0-$GLOBALS['visiteur_session']['id_auteur'])
     96          AND (autoriser('joindredocument',$type,$id))){
     97                $flux['data'] .= recuperer_fond('prive/editer/colonne_document',array('objet'=>$type,'id_objet'=>$id));
     98        }
     99
     100        return $flux;
     101}
     102
     103function medias_objets_extensibles($objets){
     104        return array_merge($objets, array('document' => _T('medias:objet_documents')));
     105}
     106
     107function medias_document_desc_actions($flux){
     108        return $flux;
     109}
     110
     111function medias_editer_document_actions($flux){
     112        return $flux;
     113}
  • _core_/plugins/medias/plugin.xml

    r43738 r43743  
    11<plugin>
    22        <nom>Medias</nom>
    3         <auteur>Collectif SPIP</auteur>
    4         <version>0.1.0</version>
    5         <version_base>0.1.0</version_base>
     3        <auteur>Collectif SPIP, Cedric Morin &amp; Romy Duhem-Verdiere pour la mediatheque</auteur>
     4        <icon>img_pack/portfolio-64.png</icon>
     5        <version>1.6.0</version>
     6        <version_base>0.10.0</version_base>
    67        <etat>dev</etat>
    78        <description>Gestion des medias de SPIP</description>
     
    2526                <inclure>medias_pipelines.php</inclure>
    2627        </pipeline>
     28        <pipeline>
     29                <nom>post_edition</nom>
     30                <inclure>medias_pipelines.php</inclure>
     31        </pipeline>
     32        <pipeline>
     33                <nom>affiche_gauche</nom>
     34                <inclure>medias_pipelines.php</inclure>
     35        </pipeline>
     36        <pipeline>
     37                <nom>header_prive</nom>
     38                <action>modalbox_insert_head</action>
     39                <inclure>modalbox/modalbox_pipelines.php</inclure>
     40        </pipeline>
    2741
    2842        <pipeline>
     
    3044                <inclure>medias_autoriser.php</inclure>
    3145        </pipeline>
     46        <pipeline>
     47                <nom>objets_extensibles</nom>
     48                <inclure>medias_pipelines.php</inclure>
     49        </pipeline>
     50        <pipeline><nom>document_desc_actions</nom><action></action></pipeline>
     51        <pipeline><nom>editer_document_actions</nom><action></action></pipeline>
     52
     53        <bouton id='documents' parent='bando_edition'>
     54                <titre>medias:documents</titre>
     55                <icone>images/portfolio-16.png</icone>
     56                <url>portfolio</url>
     57        </bouton>
     58
     59        <chemin dir="" />
     60        <chemin dir="squelettes" />
    3261        <necessite id="SPIP" version="[2.3.0-dev;]" />
     62        <utilise id="Z" version="[1.2.1;]" />
     63        <utilise id="mediabox" version="[0.5.0;]" />
    3364        <categorie>multimedia</categorie>
    3465</plugin>
  • _core_/plugins/medias/prive/inc-ajouter-documents.html

    r43455 r43743  
    11[(#ENV{ajouter}|=={oui}|oui)
    22<div class='nettoyeur'></div>
    3 <a href='[(#SELF|parametre_url{ajouter,non})]' class='ajax bouton_fermer'>[(#CHEMIN{img_pack/frame-close.png}|tag_img)]</a>
     3<a href='[(#SELF|parametre_url{ajouter,non})]' class='ajax bouton_fermer'>[(#CHEMIN{img_pack/frame-close.png}|balise_img)]</a>
    44#FORMULAIRE_JOINDRE_DOCUMENT{new,#ENV{id_objet,0},#ENV{objet,''}}
    55<div class='nettoyeur'></div>
  • _core_/plugins/medias/prive/inc-galerie.html

    r43458 r43743  
    55<div class='onglets_simple'>
    66<ul class='medias'>
    7 [<li>(#GET{self}|parametre_url{media,''}|aoustrong{<:medias:tous_les_medias:>,#ENV{media,''}|=={''},ajax})</li>]
     7[<li>(#GET{self}|parametre_url{media,''}|lien_ou_expose{<:medias:tous_les_medias:>,#ENV{media,''}|=={''},ajax})</li>]
    88<BOUCLE_medias(DOCUMENTS){id_rubrique ?}{id_article ?}{id_breve ?}{id_document ?}{recherche ?}{statut==.*}{compteur types_documents, media}{media IN image,audio,video,file}>
    9 [<li class='#MEDIA'>(#GET{self}|parametre_url{media,#MEDIA}|aoustrong{#VAL{medias:media_}|concat{#MEDIA}|_T|concat{' (',#COMPTEUR{types_documents},')'},#ENV{media}|=={#MEDIA},ajax})</li>]
     9[<li class='#MEDIA'>(#GET{self}|parametre_url{media,#MEDIA}|lien_ou_expose{#VAL{medias:media_}|concat{#MEDIA}|_T|concat{' (',#COMPTEUR{types_documents},')'},#ENV{media}|=={#MEDIA},ajax})</li>]
    1010</BOUCLE_medias>
    1111</ul>
     
    1414
    1515[(#ENV{id_document}|oui)
    16 <a class='annule_filtre' href='[(#GET{self}|parametre_url{id_document,''})]' title="<:medias:tout_voir|attribut_html:>">[(#CHEMIN{images/annuler-recherche.png}|tag_img|inserer_attribut{alt,<:medias:tout_voir:>})]</a>
     16<a class='annule_filtre' href='[(#GET{self}|parametre_url{id_document,''})]' title="<:medias:tout_voir|attribut_html:>">[(#CHEMIN{images/annuler-recherche.png}|balise_img|inserer_attribut{alt,<:medias:tout_voir:>})]</a>
    1717]
    1818
    1919<div class='onglets_simple second'>
    2020<ul class='statut'>
    21 [<li class='first'>(#GET{self}|parametre_url{statut,''}|aoustrong{<:medias:documents_tous:>,#ENV{statut,.*}|=={.*},ajax})</li>]
    22 [<li>(#GET{self}|parametre_url{statut,publie}|aoustrong{<:medias:documents_publies:>,#ENV{statut}|=={publie},ajax})</li>]
    23 [<li>(#GET{self}|parametre_url{statut,prepa|poubelle}|aoustrong{<:medias:documents_non_publies:>,#ENV{statut}|=={prepa|poubelle},ajax})</li>]
     21[<li class='first'>(#GET{self}|parametre_url{statut,''}|lien_ou_expose{<:medias:documents_tous:>,#ENV{statut,.*}|=={.*},ajax})</li>]
     22[<li>(#GET{self}|parametre_url{statut,publie}|lien_ou_expose{<:medias:documents_publies:>,#ENV{statut}|=={publie},ajax})</li>]
     23[<li>(#GET{self}|parametre_url{statut,prepa|poubelle}|lien_ou_expose{<:medias:documents_non_publies:>,#ENV{statut}|=={prepa|poubelle},ajax})</li>]
    2424</ul>
    2525
    2626<ul class='distant'>
    27 [<li class='first'>(#GET{self}|parametre_url{distant,''}|aoustrong{<:medias:documents_tous:>,#ENV{distant,''}|=={''},ajax})</li>]
    28 [<li>(#GET{self}|parametre_url{distant,'oui'}|aoustrong{<:medias:documents_distants:>,#ENV{distant,''}|=={'oui'},ajax})</li>]
    29 [<li>(#GET{self}|parametre_url{distant,'non'}|aoustrong{<:medias:documents_locaux:>,#ENV{distant,''}|=={'non'},ajax})</li>]
     27[<li class='first'>(#GET{self}|parametre_url{distant,''}|lien_ou_expose{<:medias:documents_tous:>,#ENV{distant,''}|=={''},ajax})</li>]
     28[<li>(#GET{self}|parametre_url{distant,'oui'}|lien_ou_expose{<:medias:documents_distants:>,#ENV{distant,''}|=={'oui'},ajax})</li>]
     29[<li>(#GET{self}|parametre_url{distant,'non'}|lien_ou_expose{<:medias:documents_locaux:>,#ENV{distant,''}|=={'non'},ajax})</li>]
    3030</ul>
    3131
    3232<ul class='brises'>
    33 [<li class='first'>(#GET{self}|parametre_url{brise|orphelins,''}|aoustrong{<:medias:documents_tous:>,#ENV{brise,0}|non|et{#ENV{orphelins,0}|non},ajax})</li>]
    34 [<li>(#GET{self}|parametre_url{brise,''}|parametre_url{orphelins,1}|aoustrong{<:medias:documents_orphelins:>,#ENV{orphelins,0}|=={1},ajax})</li>]
    35 [<li>(#GET{self}|parametre_url{brise,1}|parametre_url{orphelins,''}|aoustrong{<:medias:documents_brises:>,#ENV{brise,0}|=={1},ajax})</li>]
     33[<li class='first'>(#GET{self}|parametre_url{brise|orphelins,''}|lien_ou_expose{<:medias:documents_tous:>,#ENV{brise,0}|non|et{#ENV{orphelins,0}|non},ajax})</li>]
     34[<li>(#GET{self}|parametre_url{brise,''}|parametre_url{orphelins,1}|lien_ou_expose{<:medias:documents_orphelins:>,#ENV{orphelins,0}|=={1},ajax})</li>]
     35[<li>(#GET{self}|parametre_url{brise,1}|parametre_url{orphelins,''}|lien_ou_expose{<:medias:documents_brises:>,#ENV{brise,0}|=={1},ajax})</li>]
    3636</ul>
    3737
    3838<ul class='sanstitre'>
    39 [<li class='first'>(#GET{self}|parametre_url{sanstitre,''}|aoustrong{<:medias:documents_tous:>,#ENV{sanstitre,''}|=={''},ajax})</li>]
    40 [<li>(#GET{self}|parametre_url{sanstitre,'1'}|aoustrong{<:info_sans_titre:>,#ENV{sanstitre,''}|=={'1'},ajax})</li>]
     39[<li class='first'>(#GET{self}|parametre_url{sanstitre,''}|lien_ou_expose{<:medias:documents_tous:>,#ENV{sanstitre,''}|=={''},ajax})</li>]
     40[<li>(#GET{self}|parametre_url{sanstitre,'1'}|lien_ou_expose{<:info_sans_titre:>,#ENV{sanstitre,''}|=={'1'},ajax})</li>]
    4141</ul>
    4242<div class='nettoyeur'></div>
     
    4646<div class='actions'>
    4747[(#ENV{brise,0}|oui)
    48 [(#URL_ACTION_AUTEUR{verifier_documents_brises,'1',#GET{self}}|aoustrong{<:medias:verifier_documents_brises:>,0,ajax})]
     48[(#URL_ACTION_AUTEUR{verifier_documents_brises,'1',#GET{self}}|lien_ou_expose{<:medias:verifier_documents_brises:>,0,ajax})]
    4949]
    5050[
     
    5757<BOUCLE_types(TYPES_DOCUMENTS){media=#ENV{media,''}}>
    5858<BOUCLE_compte(DOCUMENTS){id_rubrique ?}{id_article ?}{id_breve ?}{id_document ?}{recherche ?}{statut==.*}{extension} />
    59 [(#TOTAL_BOUCLE|oui)[<li>(#GET{self}|parametre_url{extension,#EXTENSION}|aoustrong{#TITRE|concat{' (',#TOTAL_BOUCLE,')'},#ENV{extension}|=={#EXTENSION},ajax})<span> | </span></li>]]
     59[(#TOTAL_BOUCLE|oui)[<li>(#GET{self}|parametre_url{extension,#EXTENSION}|lien_ou_expose{#TITRE|concat{' (',#TOTAL_BOUCLE,')'},#ENV{extension}|=={#EXTENSION},ajax})<span> | </span></li>]]
    6060<//B_compte>
    6161</BOUCLE_types>
     
    6666        <B_galerie>
    6767       
    68         <h2>[(#GRAND_TOTAL|affiche_un_ou_plusieurs{#VAL{medias:un_}|concat{#ENV{media,document}},#VAL{medias:des_}|concat{#ENV{media,document},s}})]</h2>
     68        <h2>[(#GRAND_TOTAL|singulier_ou_pluriel{#VAL{medias:un_}|concat{#ENV{media,document}},#VAL{medias:des_}|concat{#ENV{media,document},s}})]</h2>
    6969        <div class='pagination tri'>
    70                 [(#TRI{'<',#CHEMIN{img_pack/tri_asc-16.png}|tag_img{<:medias:par_tri_croissant:>}}) |]
    71                 [(#TRI{'>',#CHEMIN{img_pack/tri_desc-16.png}|tag_img{<:medias:par_tri_decroissant:>}}) |]
     70                [(#TRI{'<',#CHEMIN{img_pack/tri_asc-16.png}|balise_img{<:medias:par_tri_croissant:>}}) |]
     71                [(#TRI{'>',#CHEMIN{img_pack/tri_desc-16.png}|balise_img{<:medias:par_tri_decroissant:>}}) |]
    7272                [(#TRI{id_document,<:medias:par_id:>}) |]
    7373                [(#TRI{date,<:medias:par_date:>}) |]
     
    9292                <td class='infos'>
    9393                [(#DISTANT|=={oui}|non)#SET{missing,#FICHIER|file_exists|non}]
    94                 [(#ENV{media}|non|et{#MEDIA|!={file}})[(#CHEMIN{images/media-#MEDIA|concat{-32.png}}|tag_img|inserer_attribut{alt,#VAL{medias:media_#MEDIA}|_T}|inserer_attribut{title,#VAL{medias:media_#MEDIA}|_T})]]
     94                [(#ENV{media}|non|et{#MEDIA|!={file}})[(#CHEMIN{images/media-#MEDIA|concat{-32.png}}|balise_img|inserer_attribut{alt,#VAL{medias:media_#MEDIA}|_T}|inserer_attribut{title,#VAL{medias:media_#MEDIA}|_T})]]
    9595                [(#GET{missing}|oui)<img src='#CHEMIN{images/document-manquant-24.png}' width='22' height='22' alt='<:medias:fichier_manquant:>' />]
    9696                [(#DISTANT|=={oui}|oui)<img src='#CHEMIN{images/document-distant-24.png}' width='22' height='22' alt='<:medias:fichier_distant:>' />]
     
    120120                        <B_liens>
    121121                        [(#TOTAL_BOUCLE|>{1}|oui)
    122                         <a href='#' onclick="jQuery(this).next().show();$(this).hide();return false;">[(#TOTAL_BOUCLE|affiche_un_ou_plusieurs{medias:une_utilisation,medias:des_utilisations})]</a><div style='display: none;'>
     122                        <a href='#' onclick="jQuery(this).next().show();$(this).hide();return false;">[(#TOTAL_BOUCLE|singulier_ou_pluriel{medias:une_utilisation,medias:des_utilisations})]</a><div style='display: none;'>
    123123                        ]
    124124                        <BOUCLE_liens(documents_liens){id_document}{'<br />'}>
  • _core_/plugins/medias/prive/navigation/documents_edit.html

    r43455 r43743  
    11<div class='document_utilisations'>
    22<B_liens>
    3                 <h3>[(#TOTAL_BOUCLE|affiche_un_ou_plusieurs{medias:une_utilisation,medias:des_utilisations})]</h3>
     3                <h3>[(#TOTAL_BOUCLE|singulier_ou_pluriel{medias:une_utilisation,medias:des_utilisations})]</h3>
    44                <ul class='liste_items'>
    55                        <BOUCLE_liens(documents_liens){id_document}>
    6                         <li class='item #OBJET'>[(#CHEMIN{images/#OBJET|concat{-12.png}}|tag_img) ][(#ID_OBJET|lien_objet{#OBJET})]
     6                        <li class='item #OBJET'>[(#CHEMIN{images/#OBJET|concat{-12.png}}|balise_img) ][(#ID_OBJET|lien_objet{#OBJET})]
    77                        [(#VU|=={oui}|oui)
    8                         [<span class='vu'>(#CHEMIN{images/document-vu-24.png}|tag_img|inserer_attribut{title,<:medias:document_vu:>}|inserer_attribut{alt,<:medias:document_vu:>})</span>]
     8                        [<span class='vu'>(#CHEMIN{images/document-vu-24.png}|balise_img|inserer_attribut{title,<:medias:document_vu:>}|inserer_attribut{alt,<:medias:document_vu:>})</span>]
    99                        ]
    1010                        </li>
Note: See TracChangeset for help on using the changeset viewer.