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

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

Les clauses DEFAULT sont trop souvent manquantes sur les champs extension, credits et statut de la base, car elles n'étaient pas initialement renseignées. On les remet d'applomb une bonne fois pour toute (http://forum.spip.net/fr_246338.html)

File size: 6.9 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 id_objet (id_objet)"),
117                array('sql_alter',"TABLE spip_documents_liens ADD 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        // reparer les clauses DEFAULT manquantes de maniere reccurente sur cette table
133        $maj['1.2.2'] = array(
134                array('sql_alter',"TABLE spip_documents CHANGE extension extension VARCHAR(10) DEFAULT '' NOT NULL"),
135                array('sql_alter',"TABLE spip_documents CHANGE credits credits varchar(255) DEFAULT '' NOT NULL"),
136                array('sql_alter',"TABLE spip_documents CHANGE statut statut varchar(10) DEFAULT '0' NOT NULL"),
137        );
138
139        include_spip('base/upgrade');
140        include_spip('base/medias');
141        maj_plugin($nom_meta_base_version, $version_cible, $maj);
142
143        medias_check_statuts();
144}
145
146/**
147 * Maj des meta documents
148 */
149function medias_maj_meta_documents(){
150        $config = array();
151        if (isset($GLOBALS['meta']['documents_article']) AND $GLOBALS['meta']['documents_article']!=='non')
152                $config[] = 'spip_articles';
153        if (isset($GLOBALS['meta']['documents_rubrique']) AND $GLOBALS['meta']['documents_rubrique']!=='non')
154                $config[] = 'spip_rubriques';
155        ecrire_meta('documents_objets',implode(',',$config));
156}
157
158function medias_peuple_media_document($champ_media="media_defaut"){
159        $res = sql_select("DISTINCT extension","spip_documents","media=".sql_quote('?'));
160        while($row = sql_fetch($res)){
161                // attention ici c'est encore le champ media, car on le renomme juste apres
162                $media = sql_getfetsel($champ_media,'spip_types_documents','extension='.sql_quote($row['extension']));
163                sql_updateq('spip_documents',array('media'=>$media),"media=".sql_quote('?').' AND extension='.sql_quote($row['extension']));
164                if (time() >= _TIME_OUT)
165                        return;
166        }
167}
168
169/*
170function medias_install($action,$prefix,$version_cible){
171        $version_base = $GLOBALS[$prefix."_base_version"];
172        switch ($action){
173                case 'test':
174                        # plus necessaire si pas de bug :p
175                        # medias_check_statuts();
176                        return (isset($GLOBALS['meta'][$prefix."_base_version"])
177                                AND version_compare($GLOBALS['meta'][$prefix."_base_version"],$version_cible,">="));
178                        break;
179                case 'install':
180                        medias_upgrade('medias_base_version',$version_cible);
181                        break;
182                case 'uninstall':
183                        # pas de deinstallation sur les documents pour le moment, trop dangereux
184                        # medias_vider_tables();
185                        break;
186        }
187}
188*/
Note: See TracBrowser for help on using the repository browser.