nom falcultatif des fichiers (nom = extention par defaut)
[mw_sourceml] / mw_sourceml.php
1 <?php
2
3   class mw_sourceml extends mw_plugin{
4
5     function title(){
6       return "SourceML";
7     }
8
9     function description(){
10       return "Publication de sources musicales";
11     }
12
13     function init($env){
14
15       $env->set_link("admin/sourceml", $env->url("admin/sourceml"), "SourceML", 50);
16       $env->set_link("admin/sourceml/licences", $env->url("admin/licences"), "Licences", 10);
17       $env->set_link("admin/sourceml/cache", $env->url("admin/cache"), "Cache", 20);
18       $env->set_link("admin/sourceml/maintenance", $env->url("admin/maintenance"), "Maintenance", 30);
19
20       $env->set_link("users/authors", $env->url("users/groupes"), "Groupes", 30);
21       $env->set_link("users/albums", $env->url("users/albums"), "Albums", 31);
22       $env->set_link("users/morceaux", $env->url("users/morceaux"), "Morceaux", 32);
23       $env->set_link("users/pistes", $env->url("users/pistes"), "Sources", 33);
24       $env->set_link("users/sources_invitations", $env->url("users/sources_invitations"), "Invitations", 34);
25
26       $env->set_link("menu_top/groupes", $env->url("sources/groupe"), "Groupes", 10);
27       $env->set_link("menu_top/albums", $env->url("sources/album"), "Albums", 11);
28       $env->set_link("menu_top/morceaux", $env->url("sources/morceau"), "Morceaux", 12);
29       $env->set_link("menu_top/pistes", $env->url("sources/piste"), "Sources", 13);
30
31       return true;
32     }
33
34     function enable($env){
35       return true;
36     }
37
38     function disable($env){
39       return true;
40     }
41
42     // ---------------------------------------------------------------------------------
43     //                                                                           install
44     //
45
46     function install($env){
47       if(
48             $env->bdd("sgbd") == "mysql"
49         ||  $env->bdd("sgbd") == "pdo_mysql"
50       ) return $this->install_mysql($env);
51       return false;
52     }
53
54     function install_mysql($env){
55       $data = $env->data();
56       $sgbd = $data->sgbd();
57       try{
58         $EXISTS =
59             $sgbd->table_exists("#--sml_authors")
60         ||  $sgbd->table_exists("#--sml_classes")
61         ||  $sgbd->table_exists("#--sml_licences")
62         ||  $sgbd->table_exists("#--sml_sources")
63         ||  $sgbd->table_exists("#--sml_sources_access")
64         ||  $sgbd->table_exists("#--sml_sources_authors")
65         ||  $sgbd->table_exists("#--sml_sources_infos")
66         ||  $sgbd->table_exists("#--sml_source_cache")
67         ||  $sgbd->table_exists("#--sml_source_compositions")
68         ||  $sgbd->table_exists("#--sml_source_derivations")
69         ||  $sgbd->table_exists("#--sml_source_documents")
70         ||  $sgbd->table_exists("#--sml_sources_invitations");
71       }
72       catch(Exception $e){
73         return "impossible de savoir si les tables existent deja";
74       }
75       if($EXISTS){
76         return "des tables existent deja en base. installation annulee";
77       }
78       try{
79         $sql =
80          "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\"";
81         $sgbd->query($sql);
82
83         $sql =
84          "CREATE TABLE `#--sml_authors`("
85         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
86         ."  `id_user` int(11) NOT NULL,"
87         ."  `nom` varchar(255) NOT NULL,"
88         ."  `image` varchar(255) DEFAULT NULL,"
89         ."  `description` text,"
90         ."  `email` varchar(255) NOT NULL,"
91         ."  `contact_form` tinyint(4) NOT NULL,"
92         ."  `captcha` tinyint(4) NOT NULL,"
93         ."  PRIMARY KEY (`id`),"
94         ."  KEY `id_user` (`id_user`)"
95         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
96         $sgbd->query($sql);
97
98         $sql =
99          "CREATE TABLE `#--sml_classes`("
100         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
101         ."  `nom` varchar(255) NOT NULL,"
102         ."  PRIMARY KEY (`id`)"
103         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
104         $sgbd->query($sql);
105
106         $sql =
107          "CREATE TABLE `#--sml_licences`("
108         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
109         ."  `nom` varchar(255) NOT NULL,"
110         ."  `url` varchar(255) NOT NULL,"
111         ."  PRIMARY KEY (`id`)"
112         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
113         $sgbd->query($sql);
114
115         $sql =
116          "CREATE TABLE `#--sml_sources`("
117         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
118         ."  `id_class` int(11) NOT NULL,"
119         ."  `reference` varchar(255) DEFAULT NULL,"
120         ."  `titre` varchar(255) DEFAULT NULL,"
121         ."  `licence` int(11) DEFAULT NULL,"
122         ."  `date_creation` date DEFAULT NULL,"
123         ."  `date_inscription` datetime NOT NULL,"
124         ."  PRIMARY KEY (`id`),"
125         ."  KEY `id_class` (`id_class`),"
126         ."  KEY `licence` (`licence`)"
127         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
128         $sgbd->query($sql);
129
130         $sql =
131          "CREATE TABLE `#--sml_sources_access`("
132         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
133         ."  `nom` varchar(255) NOT NULL,"
134         ."  `intitule` varchar(255) NOT NULL,"
135         ."  PRIMARY KEY (`id`)"
136         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
137         $sgbd->query($sql);
138
139         $sql =
140          "CREATE TABLE `#--sml_sources_authors`("
141         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
142         ."  `id_source` int(11) NOT NULL,"
143         ."  `id_author` int(11) NOT NULL,"
144         ."  `id_sources_access` int(11) NOT NULL,"
145         ."  PRIMARY KEY (`id`),"
146         ."  KEY `id_object` (`id_source`),"
147         ."  KEY `id_author` (`id_author`),"
148         ."  KEY `id_sources_access` (`id_sources_access`)"
149         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
150         $sgbd->query($sql);
151
152         $sql =
153          "CREATE TABLE `#--sml_sources_infos`("
154         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
155         ."  `id_source` int(11) NOT NULL,"
156         ."  `key` varchar(255) NOT NULL,"
157         ."  `value` text NOT NULL,"
158         ."  PRIMARY KEY (`id`),"
159         ."  KEY `id_source` (`id_source`)"
160         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
161         $sgbd->query($sql);
162
163         $sql =
164          "CREATE TABLE `#--sml_source_cache`("
165         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
166         ."  `url` varchar(255) NOT NULL,"
167         ."  `id_source` int(11) NOT NULL,"
168         ."  `last_update` datetime NOT NULL,"
169         ."  PRIMARY KEY (`id`)"
170         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
171         $sgbd->query($sql);
172
173         $sql =
174          "CREATE TABLE `#--sml_source_compositions`("
175         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
176         ."  `id_source` int(11) NOT NULL,"
177         ."  `id_composition` int(11) NOT NULL,"
178         ."  PRIMARY KEY (`id`),"
179         ."  KEY `id_source` (`id_source`),"
180         ."  KEY `id_composition` (`id_composition`)"
181         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
182         $sgbd->query($sql);
183
184         $sql =
185          "CREATE TABLE `#--sml_source_derivations`("
186         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
187         ."  `id_source` int(11) NOT NULL,"
188         ."  `derivation` varchar(255) NOT NULL,"
189         ."  PRIMARY KEY (`id`),"
190         ."  KEY `derivation` (`derivation`)"
191         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
192         $sgbd->query($sql);
193
194         $sql =
195          "CREATE TABLE `#--sml_source_documents`("
196         ."  `id` int(11) NOT NULL AUTO_INCREMENT,"
197         ."  `id_source` int(11) NOT NULL,"
198         ."  `nom` varchar(255) NOT NULL,"
199         ."  `url` varchar(255) NOT NULL,"
200         ."  PRIMARY KEY (`id`),"
201         ."  KEY `id_source` (`id_source`)"
202         .") DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
203         $sgbd->query($sql);
204
205         $sql =
206          "CREATE TABLE `#--sml_sources_invitations`("
207         ."  `id` INT(11) NOT NULL AUTO_INCREMENT,"
208         ."  `id_user` INT(11) NOT NULL,"
209         ."  `id_source` INT(11) NOT NULL,"
210         ."  `id_author` INT(11) NOT NULL,"
211         ."  `id_sources_access` INT(11) NOT NULL,"
212         ."  `date_invitation` datetime NOT NULL,"
213         ."  PRIMARY KEY (`id`)"
214         .")";
215         $sgbd->query($sql);
216
217       }
218       catch(Exception $e){
219         return "imposible de creer les tables en base";
220       }
221       try{
222         $sql =
223          "INSERT INTO `#--sml_licences` (`id`, `nom`, `url`) VALUES"
224         ."(1, 'Creative commons by-sa 2.0', 'http://creativecommons.org/licenses/by-sa/2.0/deed.fr'),"
225         ."(2, 'Creative Commons by-nc-nd 2.5', 'http://creativecommons.org/licenses/by-nc-nd/2.5/'),"
226         ."(3, 'Creative Commons by-nc-sa 2.5', 'http://creativecommons.org/licenses/by-nc-sa/2.5/'),"
227         ."(4, 'Creative Commons by-nc 2.5', 'http://creativecommons.org/licenses/by-nc/2.5/'),"
228         ."(5, 'Creative Commons by-nd 2.5', 'http://creativecommons.org/licenses/by-nd/2.5/'),"
229         ."(6, 'Creative Commons by-sa 2.5', 'http://creativecommons.org/licenses/by-sa/2.5/'),"
230         ."(7, 'Creative Commons by 2.5', 'http://creativecommons.org/licenses/by/2.5/'),"
231         ."(8, 'Licence Art Libre', 'http://artlibre.org/licence/lal/'),"
232         ."(9, 'Licence C Reaction', 'http://morne.free.fr/Necktar7/creactionfr.htm'),"
233         ."(10, 'Yellow OpenMusic License', 'http://openmusic.linuxtag.org/yellow.html'),"
234         ."(11, 'Green OpenMusic License', 'http://openmusic.linuxtag.org/green.html')";
235         $sgbd->query($sql);
236
237         $sql =
238          "INSERT INTO `#--sml_classes` (`id`, `nom`) VALUES"
239         ."(1, 'album'),"
240         ."(2, 'morceau'),"
241         ."(3, 'piste')";
242         $sgbd->query($sql);
243
244         $sql =
245          "INSERT INTO `mw_sml_sources_access` (`id`, `nom`, `intitule`) VALUES"\r
246         ."(1, 'admin', 'administrateur'),"\r
247         ."(2, 'editeur', 'éditeur'),"\r
248         ."(3, 'contributeur', 'contributeur')";
249         $sgbd->query($sql);
250
251       }
252       catch(Exception $e){
253         return "les tables ont ete ajoutees en base mais impossible d'y enregistrer les valeurs par defaut.";
254       }
255       return true;
256     }
257
258     // ---------------------------------------------------------------------------------
259     //                                                                         uninstall
260     //
261
262     function uninstall($env){
263       if(
264             $env->bdd("sgbd") == "mysql"
265         ||  $env->bdd("sgbd") == "pdo_mysql"
266       ) return $this->uninstall_mysql($env);
267       return false;
268     }
269
270     function uninstall_mysql($env){
271       $data = $env->data();
272       $sgbd = $data->sgbd();
273       if(!$this->disable($env)) return "impossible de desactiver le plugin";
274       try{
275         $sgbd->query("DROP TABLE #--sml_authors");
276       }
277       catch(Exception $e){
278         return "impossible de supprimer la table #--sml_authors";
279       }
280       try{
281         $sgbd->query("DROP TABLE #--sml_classes");
282       }
283       catch(Exception $e){
284         return "impossible de supprimer la table #--sml_classes";
285       }
286       try{
287         $sgbd->query("DROP TABLE #--sml_licences");
288       }
289       catch(Exception $e){
290         return "impossible de supprimer la table #--sml_licences";
291       }
292       try{
293         $sgbd->query("DROP TABLE #--sml_sources");
294       }
295       catch(Exception $e){
296         return "impossible de supprimer la table #--sml_sources";
297       }
298       try{
299         $sgbd->query("DROP TABLE #--sml_sources_access");
300       }
301       catch(Exception $e){
302         return "impossible de supprimer la table #--sml_sources_access";
303       }
304       try{
305         $sgbd->query("DROP TABLE #--sml_sources_authors");
306       }
307       catch(Exception $e){
308         return "impossible de supprimer la table #--sml_sources_authors";
309       }
310       try{
311         $sgbd->query("DROP TABLE #--sml_sources_infos");
312       }
313       catch(Exception $e){
314         return "impossible de supprimer la table #--sml_sources_infos";
315       }
316       try{
317         $sgbd->query("DROP TABLE #--sml_source_cache");
318       }
319       catch(Exception $e){
320         return "impossible de supprimer la table #--sml_source_cache";
321       }
322       try{
323         $sgbd->query("DROP TABLE #--sml_source_compositions");
324       }
325       catch(Exception $e){
326         return "impossible de supprimer la table #--sml_source_compositions";
327       }
328       try{
329         $sgbd->query("DROP TABLE #--sml_source_derivations");
330       }
331       catch(Exception $e){
332         return "impossible de supprimer la table #--sml_source_derivations";
333       }
334       try{
335         $sgbd->query("DROP TABLE #--sml_source_documents");
336       }
337       catch(Exception $e){
338         return "impossible de supprimer la table #--sml_source_documents";
339       }
340       try{
341         $sgbd->query("DROP TABLE #--sml_sources_invitations");
342       }
343       catch(Exception $e){
344         return "impossible de supprimer la table #--sml_sources_invitations";
345       }
346       return true;
347     }
348
349   }
350
351 ?>