source: spip-zone/_core_/branches/spip-3.0/plugins/medias/medias_administrations.php @ 71848

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

Sur les traces de http://core.spip.org/projects/spip/repository/revisions/20410 , ajouter un index nécessite ADD INDEX, pas seulement ADD.

File size: 7.0 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2013                                                *
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
13if (!defined('_ECRIRE_INC_VERSION')) return;
14
15/**
16 * verifier et maj le statut des documents
17 * @param bool $affiche
18 * @return
19 */
20function medias_check_statuts($affiche = false){
21        $trouver_table = charger_fonction('trouver_table','base');
22        $desc = $trouver_table('documents');
23        # securite, si jamais on arrive ici avant un upgrade de base
24        if (!isset($desc['field']['statut']))
25                return;
26
27        // utiliser sql_allfetsel pour clore la requete avant la mise a jour en base sur chaque doc (sqlite)
28        // iterer par groupe de 100 pour ne pas exploser sur les grosses bases
29        $docs = array_map('reset',sql_allfetsel('id_document','spip_documents',"statut='0'",'','',"0,100"));
30        while (count($docs)){
31                include_spip('action/editer_document');
32                foreach($docs as $id_document)
33                        // mettre a jour le statut si necessaire
34                        instituer_document($id_document);
35                if ($affiche) echo " .";
36          $docs = array_map('reset',sql_allfetsel('id_document','spip_documents',"statut='0'",'','',"0,100"));
37        }
38}
39
40/**
41 * Mise a jour de la BDD
42 * @param string $nom_meta_base_version
43 * @param string $version_cible
44 */
45function medias_upgrade($nom_meta_base_version,$version_cible){
46        if (!isset($GLOBALS['meta'][$nom_meta_base_version])){
47                $trouver_table = charger_fonction('trouver_table','base');
48                if ($desc = $trouver_table('spip_documents')
49                  AND !isset($desc['field']['statut']))
50                        ecrire_meta($nom_meta_base_version,'0.1.0');
51        }
52
53        $maj = array();
54        $maj['create'] = array(
55                array('maj_tables',array('spip_documents','spip_documents_liens','spip_types_documents')),
56                array('creer_base_types_doc')
57        );
58        $maj['0.2.0'] = array(
59                array('sql_alter',"TABLE spip_documents ADD statut varchar(10) DEFAULT '0' NOT NULL"),
60        );
61        $maj['0.3.0'] = array(
62                array('sql_alter',"TABLE spip_documents ADD date_publication datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"),
63        );
64        $maj['0.4.0'] = array(
65                // recalculer tous les statuts en tenant compte de la date de publi des articles...
66                array('medias_check_statuts',true),
67        );
68        $maj['0.5.0'] = array(
69                array('sql_alter',"TABLE spip_documents ADD brise tinyint DEFAULT 0"),
70        );
71        $maj['0.6.0'] = array(
72                array('sql_alter',"TABLE spip_types_documents ADD media varchar(10) DEFAULT 'file' NOT NULL"),
73                array('creer_base_types_doc','','media'),
74        );
75        $maj['0.7.0'] = array(
76                array('sql_alter',"TABLE spip_documents ADD credits varchar(255) DEFAULT '' NOT NULL"),
77        );
78        $maj['0.10.0'] = array(
79                array('sql_alter',"TABLE spip_documents CHANGE fichier fichier TEXT NOT NULL DEFAULT ''"),
80        );
81        $maj['0.11.0'] = array(
82                array('sql_alter',"TABLE spip_documents CHANGE mode mode varchar(10) DEFAULT 'document' NOT NULL"),
83        );
84        $maj['0.11.0'] = array(
85                array('sql_alter',"TABLE spip_documents CHANGE mode mode varchar(10) DEFAULT 'document' NOT NULL"),
86        );
87        $maj['0.12.0'] = array(
88                array('medias_maj_meta_documents'),
89        );
90        $maj['0.14.0'] = array(
91                array('creer_base_types_doc','','media'),
92        );
93        $maj['0.15.0'] = array(
94                array('creer_base_types_doc','','media'),
95        );
96        $maj['0.15.1'] = array(
97                array('sql_alter',"TABLE spip_documents CHANGE taille taille bigint"),
98        );
99        $maj['0.16.0'] = array(
100                array('creer_base_types_doc','','media'),
101        );
102
103        $maj['1.0.0'] = array(
104                // on cree le champ en defaut '?' pour reperer les nouveaux a peupler
105                array('sql_alter',"TABLE spip_documents ADD media varchar(10) DEFAULT '?' NOT NULL"),
106                array('medias_peuple_media_document', 'media'),
107                // puis on retablit le bon defaut
108                array('sql_alter',"TABLE spip_documents CHANGE media media varchar(10) DEFAULT 'file' NOT NULL"),
109        );
110        $maj['1.0.1'] = array(
111                // puis on retablit le bon defaut
112                array('sql_alter',"TABLE spip_types_documents CHANGE media media_defaut varchar(10) DEFAULT 'file' NOT NULL"),
113        );
114
115        $maj['1.1.0'] = array(
116                array('sql_alter',"TABLE spip_documents_liens ADD INDEX id_objet (id_objet)"),
117                array('sql_alter',"TABLE spip_documents_liens ADD INDEX objet (objet)"),
118        );
119        $maj['1.1.1'] = array(
120                array('creer_base_types_doc'),
121        );
122        // reparer les media sur les file suite a upgrade rate depuis SPIP 2.x
123        $maj['1.2.0'] = array(
124                // on remet en ? tous les media=file
125                array('sql_updateq',"spip_documents",array('media'=>'?'),"media='file'"),
126                // et on repeuple
127                array('medias_peuple_media_document'),
128        );
129        $maj['1.2.1'] = array(
130                array('creer_base_types_doc'),
131        );
132        $maj['1.2.3'] = array(
133                // ajout de mbtiles
134                array('creer_base_types_doc'),
135                // reparer les clauses DEFAULT manquantes de maniere reccurente sur cette table
136                array('sql_alter',"TABLE spip_documents CHANGE extension extension VARCHAR(10) DEFAULT '' NOT NULL"),
137                array('sql_alter',"TABLE spip_documents CHANGE credits credits varchar(255) DEFAULT '' NOT NULL"),
138                array('sql_alter',"TABLE spip_documents CHANGE statut statut varchar(10) DEFAULT '0' NOT NULL"),
139        );
140
141        include_spip('base/upgrade');
142        include_spip('base/medias');
143        maj_plugin($nom_meta_base_version, $version_cible, $maj);
144
145        medias_check_statuts();
146}
147
148/**
149 * Maj des meta documents
150 */
151function medias_maj_meta_documents(){
152        $config = array();
153        if (isset($GLOBALS['meta']['documents_article']) AND $GLOBALS['meta']['documents_article']!=='non')
154                $config[] = 'spip_articles';
155        if (isset($GLOBALS['meta']['documents_rubrique']) AND $GLOBALS['meta']['documents_rubrique']!=='non')
156                $config[] = 'spip_rubriques';
157        ecrire_meta('documents_objets',implode(',',$config));
158}
159
160function medias_peuple_media_document($champ_media="media_defaut"){
161        $res = sql_select("DISTINCT extension","spip_documents","media=".sql_quote('?'));
162        while($row = sql_fetch($res)){
163                // attention ici c'est encore le champ media, car on le renomme juste apres
164                $media = sql_getfetsel($champ_media,'spip_types_documents','extension='.sql_quote($row['extension']));
165                sql_updateq('spip_documents',array('media'=>$media),"media=".sql_quote('?').' AND extension='.sql_quote($row['extension']));
166                if (time() >= _TIME_OUT)
167                        return;
168        }
169}
170
171/*
172function medias_install($action,$prefix,$version_cible){
173        $version_base = $GLOBALS[$prefix."_base_version"];
174        switch ($action){
175                case 'test':
176                        # plus necessaire si pas de bug :p
177                        # medias_check_statuts();
178                        return (isset($GLOBALS['meta'][$prefix."_base_version"])
179                                AND version_compare($GLOBALS['meta'][$prefix."_base_version"],$version_cible,">="));
180                        break;
181                case 'install':
182                        medias_upgrade('medias_base_version',$version_cible);
183                        break;
184                case 'uninstall':
185                        # pas de deinstallation sur les documents pour le moment, trop dangereux
186                        # medias_vider_tables();
187                        break;
188        }
189}
190*/
Note: See TracBrowser for help on using the repository browser.