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