source: spip-zone/_core_/plugins/medias/base/medias.php @ 51577

Last change on this file since 51577 was 51577, checked in by marcimat@…, 8 years ago

Gagner 15 secondes sur l'installation du plugin en SQLite, passant de 17s à 2s chez moi.

Lorsque l'on peuple spip_types_documents, on utilise sql_insertq_multi() si la table est vide, sinon sql_replace_multi().

File size: 8.5 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2011                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13
14/**
15 * Interfaces des tables breves pour le compilateur
16 *
17 * @param array $interfaces
18 * @return array
19 */
20function medias_declarer_tables_interfaces($interfaces) {
21        $interfaces['table_des_tables']['documents']='documents';
22        $interfaces['table_des_tables']['types_documents']='types_documents';
23
24        $interfaces['exceptions_des_tables']['documents']['type_document']=array('types_documents', 'titre');
25        $interfaces['exceptions_des_tables']['documents']['extension_document']=array('types_documents', 'extension');
26        $interfaces['exceptions_des_tables']['documents']['mime_type']=array('types_documents', 'mime_type');
27        $interfaces['exceptions_des_tables']['documents']['media']=array('types_documents', 'media');
28
29        $interfaces['exceptions_des_jointures']['spip_documents']['id_forum']=array('spip_documents_liens','id_forum');
30        $interfaces['exceptions_des_jointures']['spip_documents']['vu']=array('spip_documents_liens', 'vu');
31        $interfaces['table_date']['types_documents']='date';
32
33        $interfaces['table_des_traitements']['FICHIER']['documents']= 'get_spip_doc(%s)';
34
35        return $interfaces;
36}
37
38
39/**
40 * Table principale spip_documents et spip_types_documents
41 *
42 * @param array $tables_principales
43 * @return array
44 */
45function medias_declarer_tables_principales($tables_principales) {
46
47        $spip_types_documents = array(
48                        "extension"     => "varchar(10) DEFAULT '' NOT NULL",
49                        "titre" => "text DEFAULT '' NOT NULL",
50                        "descriptif"    => "text DEFAULT '' NOT NULL",
51                        "mime_type"     => "varchar(100) DEFAULT '' NOT NULL",
52                        "inclus"        => "ENUM('non', 'image', 'embed') DEFAULT 'non'  NOT NULL",
53                        "upload"        => "ENUM('oui', 'non') DEFAULT 'oui'  NOT NULL",
54                        "media" => "varchar(10) DEFAULT 'file' NOT NULL",
55                        "maj"   => "TIMESTAMP");
56
57        $spip_types_documents_key = array(
58                        "PRIMARY KEY"   => "extension",
59                        "KEY inclus"    => "inclus");
60
61        $tables_principales['spip_types_documents']     =
62                array('field' => &$spip_types_documents, 'key' => &$spip_types_documents_key);
63
64        return $tables_principales;
65}
66
67/**
68 * Table des liens documents-objets spip_documents_liens
69 * @param array $tables_auxiliaires
70 * @return array
71 */
72function medias_declarer_tables_auxiliaires($tables_auxiliaires) {
73
74        $spip_documents_liens = array(
75                        "id_document"   => "bigint(21) DEFAULT '0' NOT NULL",
76                        "id_objet"      => "bigint(21) DEFAULT '0' NOT NULL",
77                        "objet" => "VARCHAR (25) DEFAULT '' NOT NULL",
78                        "vu"    => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL");
79
80        $spip_documents_liens_key = array(
81                        "PRIMARY KEY"           => "id_document,id_objet,objet",
82                        "KEY id_document"       => "id_document");
83
84        $tables_auxiliaires['spip_documents_liens'] = array(
85                'field' => &$spip_documents_liens,
86                'key' => &$spip_documents_liens_key);
87
88        return $tables_auxiliaires;
89}
90
91/**
92 * Declarer le surnom des breves
93 *
94 * @param array $surnoms
95 * @return array
96 */
97function medias_declarer_tables_objets_surnoms($surnoms) {
98        $surnoms['type_document'] = "types_documents"; # hum
99        #$surnoms['extension'] = "types_documents"; # hum
100        #$surnoms['type'] = "types_documents"; # a ajouter pour id_table_objet('type')=='extension' ?
101        return $surnoms;
102}
103
104function medias_declarer_tables_objets_sql($tables){
105        $tables['spip_articles']['champs_versionnes'][] = 'jointure_documents';
106        $tables['spip_documents'] = array(
107                'table_objet_surnoms'=>array('doc','img','emb'),
108          'type_surnoms' => array(),
109                'url_voir' => 'document_edit',
110                'url_edit' => 'document_edit',
111                'page'=>'',
112                'texte_retour' => 'icone_retour',
113                'texte_objets' => 'medias:objet_documents',
114                'texte_objet' => 'medias:objet_document',
115                'texte_modifier' => 'medias:info_modifier_document',
116                'info_aucun_objet'=> 'medias:aucun_document',
117                'info_1_objet' => 'medias:un_document',
118                'info_nb_objets' => 'medias:des_documents',
119                'titre' => "CASE WHEN length(titre)>0 THEN titre ELSE fichier END as titre, '' AS lang",
120                'date' => 'date',
121                'principale'=>'oui',
122                'field' => array(
123                        "id_document"   => "bigint(21) NOT NULL",
124                        "id_vignette"   => "bigint(21) DEFAULT '0' NOT NULL",
125                        "extension"     => "VARCHAR(10) DEFAULT '' NOT NULL",
126                        "titre" => "text DEFAULT '' NOT NULL",
127                        "date"  => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
128                        "descriptif"    => "text DEFAULT '' NOT NULL",
129                        "fichier"       => "text NOT NULL DEFAULT ''",
130                        "taille"        => "integer",
131                        "largeur"       => "integer",
132                        "hauteur"       => "integer",
133                        "mode"  => "varchar(10) DEFAULT 'document' NOT NULL",
134                        "distant"       => "VARCHAR(3) DEFAULT 'non'",
135                        "statut" => "varchar(10) DEFAULT '0' NOT NULL",
136                        "credits" => "varchar(255) DEFAULT '' NOT NULL",
137                        "date_publication" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
138                        "brise" => "tinyint DEFAULT 0",
139                        "maj"   => "TIMESTAMP"
140                ),
141                'key' => array(
142                        "PRIMARY KEY"   => "id_document",
143                        "KEY id_vignette"       => "id_vignette",
144                        "KEY mode"      => "mode",
145                        "KEY extension" => "extension"
146                ),
147                'join' => array(
148                        "id_document"=>"id_document",
149                        "extension"=>"extension"
150                ),
151                'statut'=> array(
152                        array(
153                                'champ' => 'statut',
154                                'publie' => 'publie',
155                                'previsu' => 'publie,prop,prepa',
156                                'post_date' => 'date_publication',
157                                'exception' => array('statut','tout')
158                        )
159                ),
160                'tables_jointures' => array('types_documents'),
161                'rechercher_champs' => array(
162                        'titre' => 3, 'descriptif' => 1, 'fichier' => 1
163                ),
164                'champs_versionnes' => array('id_vignette', 'titre', 'descriptif', 'hauteur', 'largeur', 'mode','distant'),
165                'modeles' => array('document','doc','img','emb','image','video','text','audio','application'),
166        );
167
168        // jointures sur les forum pour tous les objets
169        $tables[]['tables_jointures'][]= 'documents_liens';
170
171        // recherche jointe sur les documents pour les articles et rubriques
172        $tables['spip_articles']['rechercher_jointures']['document'] = array('titre' => 2, 'descriptif' => 1);
173        $tables['spip_rubriques']['rechercher_jointures']['document'] = array('titre' => 2, 'descriptif' => 1);
174        return $tables;
175}
176
177/**
178 * Creer la table des types de document
179 *
180 * http://doc.spip.org/@creer_base_types_doc
181 *
182 * @param string $serveur
183 * @return void
184 */
185function creer_base_types_doc($serveur='') {
186        global $tables_images, $tables_sequences, $tables_documents, $tables_mime;
187        include_spip('base/typedoc');
188        include_spip('base/abstract_sql');
189
190        $insertions = array();
191       
192        foreach ($tables_mime as $extension => $type_mime) {
193                if (isset($tables_images[$extension])) {
194                        $titre = $tables_images[$extension];
195                        $inclus='image';
196                }
197                else if (isset($tables_sequences[$extension])) {
198                        $titre = $tables_sequences[$extension];
199                        $inclus='embed';
200                }
201                else {
202                        $inclus='non';
203                        if (isset($tables_documents[$extension]))
204                                $titre = $tables_documents[$extension];
205                        else
206                                $titre = '';
207                }
208
209                // type de media
210          $media = "file";
211          if (preg_match(",^image/,",$type_mime) OR in_array($type_mime,array('application/illustrator')))
212                  $media = "image";
213          elseif (preg_match(",^audio/,",$type_mime))
214                  $media = "audio";
215          elseif (preg_match(",^video/,",$type_mime) OR in_array($type_mime,array('application/ogg','application/x-shockwave-flash','application/mp4')))
216                  $media = "video";
217
218          $insertions[] = array(
219                'mime_type' => $type_mime,
220                'titre' => $titre,
221                'inclus' => $inclus,
222                'extension' => $extension,
223                'media' => $media,
224                'upload' => 'oui'
225                );
226        }
227
228        if ($insertions) {
229               
230                // Re-init : replace
231                if (sql_countsel('spip_types_documents')) {
232                        sql_replace_multi('spip_types_documents', $insertions, '', $serveur);
233                // Init : insert
234                } else {
235                        sql_insertq_multi('spip_types_documents', $insertions, '', $serveur);
236                }
237               
238        }
239}
240
241
242
243/**
244 * Optimiser la base de donnee en supprimant les liens orphelins
245 *
246 * @param int $n
247 * @return int
248 */
249function medias_optimiser_base_disparus($flux){
250
251        include_spip('action/editer_liens');
252        // optimiser les liens morts :
253        // entre documents vers des objets effaces
254        // depuis des documents effaces
255        $flux['data'] += objet_optimiser_liens(array('document'=>'*'),'*');
256        // on ne nettoie volontairement pas automatiquement les documents orphelins
257
258        return $flux;
259}
260
261?>
Note: See TracBrowser for help on using the repository browser.