[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / medias / medias_administrations.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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 if (!defined('_ECRIRE_INC_VERSION')) {
14 return;
15 }
16
17 /**
18 * verifier et maj le statut des documents
19 *
20 * @param bool $affiche
21 * @return
22 */
23 function medias_check_statuts($affiche = false) {
24 $trouver_table = charger_fonction('trouver_table', 'base');
25 $desc = $trouver_table('documents');
26 # securite, si jamais on arrive ici avant un upgrade de base
27 if (!isset($desc['field']['statut'])) {
28 return;
29 }
30
31 // utiliser sql_allfetsel pour clore la requete avant la mise a jour en base sur chaque doc (sqlite)
32 // iterer par groupe de 100 pour ne pas exploser sur les grosses bases
33 $docs = array_map('reset', sql_allfetsel('id_document', 'spip_documents', "statut='0'", '', '', '0,100'));
34 while (count($docs)) {
35 include_spip('action/editer_document');
36 foreach ($docs as $id_document) {
37 // mettre a jour le statut si necessaire
38 instituer_document($id_document);
39 }
40 if ($affiche) {
41 echo ' .';
42 }
43 $docs = array_map('reset', sql_allfetsel('id_document', 'spip_documents', "statut='0'", '', '', '0,100'));
44 }
45 }
46
47 /**
48 * Mise a jour de la BDD
49 *
50 * @param string $nom_meta_base_version
51 * @param string $version_cible
52 */
53 function medias_upgrade($nom_meta_base_version, $version_cible) {
54
55 // ne pas installer tant qu'on est pas a jour sur version base SPIP
56 // cas typique d'un upgrade qui commence par suppression de connect.php
57 // SPIP lance la maj des plugins lors de la connexion, alors que l'upgrade SPIP
58 // a pas encore ete joue : ca casse cet upgrade quand on migre depuis un tres vieux SPIP
59 if (isset($GLOBALS['meta']['version_installee'])
60 and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee'])))
61 ) {
62 return;
63 }
64
65 if (!isset($GLOBALS['meta'][$nom_meta_base_version])) {
66 $trouver_table = charger_fonction('trouver_table', 'base');
67 if ($desc = $trouver_table('spip_documents')
68 and !isset($desc['field']['statut'])
69 ) {
70 ecrire_meta($nom_meta_base_version, '0.1.0');
71 }
72 }
73
74 $maj = array();
75 $maj['create'] = array(
76 array('maj_tables', array('spip_documents', 'spip_documents_liens', 'spip_types_documents')),
77 array('creer_base_types_doc')
78 );
79 $maj['0.2.0'] = array(
80 array('sql_alter', "TABLE spip_documents ADD statut varchar(10) DEFAULT '0' NOT NULL"),
81 );
82 $maj['0.3.0'] = array(
83 array('sql_alter', "TABLE spip_documents ADD date_publication datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"),
84 );
85 $maj['0.4.0'] = array(
86 // recalculer tous les statuts en tenant compte de la date de publi des articles...
87 array('medias_check_statuts', true),
88 );
89 $maj['0.5.0'] = array(
90 array('sql_alter', 'TABLE spip_documents ADD brise tinyint DEFAULT 0'),
91 );
92 $maj['0.6.0'] = array(
93 array('sql_alter', "TABLE spip_types_documents ADD media varchar(10) DEFAULT 'file' NOT NULL"),
94 array('creer_base_types_doc', '', 'media'),
95 );
96 $maj['0.7.0'] = array(
97 array('sql_alter', "TABLE spip_documents ADD credits varchar(255) DEFAULT '' NOT NULL"),
98 );
99 $maj['0.10.0'] = array(
100 array('sql_alter', "TABLE spip_documents CHANGE fichier fichier TEXT NOT NULL DEFAULT ''"),
101 );
102 $maj['0.11.0'] = array(
103 array('sql_alter', "TABLE spip_documents CHANGE mode mode varchar(10) DEFAULT 'document' NOT NULL"),
104 );
105 $maj['0.14.0'] = array(
106 array('medias_maj_meta_documents'),
107 array('creer_base_types_doc', '', 'media'),
108 );
109 $maj['0.15.0'] = array(
110 array('creer_base_types_doc', '', 'media'),
111 );
112 $maj['0.15.1'] = array(
113 array('sql_alter', 'TABLE spip_documents CHANGE taille taille bigint'),
114 );
115 $maj['0.16.0'] = array(
116 array('creer_base_types_doc', '', 'media'),
117 );
118
119 $maj['1.0.0'] = array(
120 // on cree le champ en defaut '?' pour reperer les nouveaux a peupler
121 array('sql_alter', "TABLE spip_documents ADD media varchar(10) DEFAULT '?' NOT NULL"),
122 array('medias_peuple_media_document', 'media'),
123 // puis on retablit le bon defaut
124 array('sql_alter', "TABLE spip_documents CHANGE media media varchar(10) DEFAULT 'file' NOT NULL"),
125 );
126 $maj['1.0.1'] = array(
127 // puis on retablit le bon defaut
128 array('sql_alter', "TABLE spip_types_documents CHANGE media media_defaut varchar(10) DEFAULT 'file' NOT NULL"),
129 );
130
131 $maj['1.1.0'] = array(
132 array('sql_alter', 'TABLE spip_documents_liens ADD INDEX id_objet (id_objet)'),
133 array('sql_alter', 'TABLE spip_documents_liens ADD INDEX objet (objet)'),
134 );
135 $maj['1.1.1'] = array(
136 array('creer_base_types_doc'),
137 );
138 // reparer les media sur les file suite a upgrade rate depuis SPIP 2.x
139 $maj['1.2.0'] = array(
140 // on remet en ? tous les media=file
141 array('sql_updateq', 'spip_documents', array('media' => '?'), "media='file'"),
142 // et on repeuple
143 array('medias_peuple_media_document'),
144 );
145 $maj['1.2.1'] = array(
146 array('creer_base_types_doc'),
147 );
148 $maj['1.2.3'] = array(
149 // ajout de mbtiles
150 array('creer_base_types_doc'),
151 // reparer les clauses DEFAULT manquantes de maniere reccurente sur cette table
152 array('sql_alter', "TABLE spip_documents CHANGE extension extension VARCHAR(10) DEFAULT '' NOT NULL"),
153 array('sql_alter', "TABLE spip_documents CHANGE credits credits varchar(255) DEFAULT '' NOT NULL"),
154 array('sql_alter', "TABLE spip_documents CHANGE statut statut varchar(10) DEFAULT '0' NOT NULL"),
155 );
156 $maj['1.2.4'] = array(
157 // ajout de tar
158 array('creer_base_types_doc')
159 );
160 $maj['1.2.5'] = array(
161 // ajout de json
162 array('creer_base_types_doc')
163 );
164 $maj['1.2.6'] = array(
165 // ajout de md (markdown)
166 array('creer_base_types_doc')
167 );
168 $maj['1.2.7'] = array(
169 // ajout de ics + vcf
170 array('creer_base_types_doc')
171 );
172 $maj['1.3.0'] = array(
173 // ajout de rang_lien
174 array('maj_tables', 'spip_documents_liens'),
175 );
176 $maj['1.3.1'] = array(
177 // plus de place dans les crédits
178 array('sql_alter', "TABLE spip_documents CHANGE credits credits text DEFAULT '' NOT NULL"),
179 );
180 $maj['1.3.2'] = array(
181 // buggons en 2038 plutôt qu'en 2018'
182 array('medias_check_statuts', true),
183 );
184 $maj['1.3.4'] = array(
185 // 1.3.2 et 1.3.3 n'étaient pas suffisants grml'
186 array('medias_maj_date_publication_documents'),
187 array('medias_check_statuts', true)
188 );
189 $maj['1.3.5'] = array(
190 // ajout de duree
191 array('maj_tables', 'spip_documents'),
192 );
193 include_spip('base/upgrade');
194 include_spip('base/medias');
195 maj_plugin($nom_meta_base_version, $version_cible, $maj);
196
197 }
198
199 /**
200 * Maj des meta documents
201 */
202 function medias_maj_meta_documents() {
203 $config = array();
204 if (isset($GLOBALS['meta']['documents_article']) and $GLOBALS['meta']['documents_article'] !== 'non') {
205 $config[] = 'spip_articles';
206 }
207 if (isset($GLOBALS['meta']['documents_rubrique']) and $GLOBALS['meta']['documents_rubrique'] !== 'non') {
208 $config[] = 'spip_rubriques';
209 }
210 ecrire_meta('documents_objets', implode(',', $config));
211 }
212
213 function medias_peuple_media_document($champ_media = 'media_defaut') {
214 $res = sql_select('DISTINCT extension', 'spip_documents', 'media=' . sql_quote('?'));
215 while ($row = sql_fetch($res)) {
216 // attention ici c'est encore le champ media, car on le renomme juste apres
217 $media = sql_getfetsel($champ_media, 'spip_types_documents', 'extension=' . sql_quote($row['extension']));
218 sql_updateq('spip_documents', array('media' => $media), 'media=' . sql_quote('?') . ' AND extension=' . sql_quote($row['extension']));
219 if (time() >= _TIME_OUT) {
220 return;
221 }
222 }
223 }
224
225 /**
226 * Maj des date de publication des documents cf ticket #3329, z104221
227 */
228 function medias_maj_date_publication_documents() {
229 sql_update('spip_documents', array('statut' => '0'), 'date_publication > ' . sql_quote('2017-01-01 00:00:00'));
230 sql_update('spip_documents', array('statut' => '0'), 'date_publication = ' . sql_quote('1970-01-01 01:33:58'));
231 }
232
233 /*
234 function medias_install($action, $prefix, $version_cible){
235 $version_base = $GLOBALS[$prefix."_base_version"];
236 switch ($action){
237 case 'test':
238 # plus necessaire si pas de bug :p
239 # medias_check_statuts();
240 return (isset($GLOBALS['meta'][$prefix."_base_version"])
241 AND version_compare($GLOBALS['meta'][$prefix."_base_version"],$version_cible,">="));
242 break;
243 case 'install':
244 medias_upgrade('medias_base_version',$version_cible);
245 break;
246 case 'uninstall':
247 # pas de deinstallation sur les documents pour le moment, trop dangereux
248 # medias_vider_tables();
249 break;
250 }
251 }
252 */