syntaxe POO (visibilite)
[mw_pages] / mw_pages.php
1 <?php
2
3   class mw_pages extends mw_plugin{
4
5     public function title(){
6       return "Pages";
7     }
8
9     public function description(){
10       return "Pour ajouter des pages, avec un &eacute;diteur dans l'administration du site";
11     }
12
13     public function init($env){
14       $env->set_link("plugins/admin/mw_pages", $env->url("pages/admin"), "&eacute;diter les pages");
15       $env->set_link("admin/pages", $env->url("pages/admin"), "Pages", 40);
16       $data = $env->data();
17       if(
18         (
19           $arbo = $data->pages_arbo(
20             array(
21               "enabled" => 1,
22               "order_by" => "position",
23               "order" => "ASC"
24             )
25           )
26         ) !== false
27       ){
28         $this->_set_links($env, "menu_top", $arbo);
29       }
30       return true;
31     }
32
33     public function _set_links($env, $parent, $arbo){
34       if($arbo["subs"]){
35         foreach($arbo["subs"] as $page){
36           $env->set_link(
37             $parent."/mw_page_".$page["id"],
38             $env->url("pages/view/page", array("id" => $page["id"])),
39             $page["title"],
40             $page["position"]
41           );
42           $this->_set_links($env, $parent."/mw_page_".$page["id"], $page);
43         }
44       }
45     }
46
47     public function enable($env){
48       $plugins_pages_start_id = $env->config("plugins_pages_start_id");
49       if($plugins_pages_start_id){
50         $data = $env->data();
51         if(
52              $data->set_config("start_action", "pages/view/page")
53           && $data->set_config("start_action_params", @serialize(array("id" => $plugins_pages_start_id)))
54         ){
55           return true;
56         }
57         return false;
58       }
59       return true;
60     }
61
62     public function disable($env){
63       $start_action = $env->config("start_action");
64       if($start_action == "pages/view/page"){
65         $data = $env->data();
66         if(
67              $data->set_config("start_action", "")
68           && $data->set_config("start_action_params", "")
69         ){
70           return true;
71         }
72         return false;
73       }
74       return true;
75     }
76
77     // ---------------------------------------------------------------------------------
78     //                                                                           install
79     //
80
81     public function install($env){
82       if(
83             $env->bdd("sgbd") == "mysql"
84         ||  $env->bdd("sgbd") == "pdo_mysql"
85       ){
86         return $this->install_mysql($env);
87       }
88       elseif(
89             $env->bdd("sgbd") == "pdo_sqlite"
90       ){
91         return $this->install_sqlite($env);
92       }
93       elseif(
94             $env->bdd("sgbd") == "xml"
95       ){
96         return $this->install_xml($env);
97       }
98       else{
99         return "Mode de stockage pour Mtweb (".$env->bdd("sgbd").") non supporté par mw_pages";
100       }
101       return true;
102     }
103
104     public function install_mysql($env){
105       $data = $env->data();
106       $sgbd = $data->sgbd();
107       try{
108         $EXISTS = $sgbd->table_exists("#--pages");
109       }
110       catch(Exception $e){
111         return "impossible de savoir si la table #--pages existe";
112       }
113       if($EXISTS){
114         return "la table #--pages existe deja";
115       }
116       try{
117         $sql =
118          "CREATE TABLE #--pages"
119         ."( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY"
120         .", id_parent INT(11) NULL"
121         .", title VARCHAR(255) NULL"
122         .", content TEXT NULL"
123         .", date_creation DATETIME NOT NULL"
124         .", user_creation INT(11) NOT NULL"
125         .", date_last_update DATETIME NOT NULL"
126         .", user_last_update INT(11) NOT NULL"
127         .", enabled TINYINT NOT NULL DEFAULT '1'"
128         .", position INT(11) NOT NULL DEFAULT '0'"
129         .") DEFAULT CHARSET=utf8";
130         $sgbd->query($sql);
131       }
132       catch(Exception $e){
133         return "imposible de creer la table #--pages";
134       }
135       try{
136         $sgbd->query("INSERT INTO #--actions_roles(action, id_role) VALUES('pages/admin', 1)");
137       }
138       catch(Exception $e){
139         try{
140           $sgbd->query("DROP TABLE #--pages");
141         }
142         catch(Exception $e){}
143         return "impossible d'ajouter un statut pour l'action pages/admin";
144       }
145       return true;
146     }
147
148     public function install_sqlite($env){
149       $data = $env->data();
150       $sgbd = $data->sgbd();
151       try{
152         $EXISTS = $sgbd->table_exists("#--pages");
153       }
154       catch(Exception $e){
155         return "impossible de savoir si la table #--pages existe";
156       }
157       if($EXISTS){
158         return "la table #--pages existe deja";
159       }
160       try{
161         $sql =
162          "CREATE TABLE #--pages("
163         ." `id` INTEGER PRIMARY KEY AUTOINCREMENT"
164         .", id_parent INTEGER NULL"
165         .", title TEXT NULL"
166         .", content TEXT NULL"
167         .", date_creation TEXT NOT NULL"
168         .", user_creation INTEGER NOT NULL"
169         .", date_last_update TEXT NOT NULL"
170         .", user_last_update INTEGER NOT NULL"
171         .", enabled INTEGER NOT NULL DEFAULT '1'"
172         .", position INTEGER NOT NULL DEFAULT '0'"
173         .")";
174         $sgbd->query($sql);
175       }
176       catch(Exception $e){
177         return "imposible de creer la table #--pages";
178       }
179       try{
180         $sgbd->query("INSERT INTO #--actions_roles(action, id_role) VALUES('pages/admin', 1)");
181       }
182       catch(Exception $e){
183         try{
184           $sgbd->query("DROP TABLE #--pages");
185         }
186         catch(Exception $e){}
187         return "impossible d'ajouter un statut pour l'action pages/admin";
188       }
189       return true;
190     }
191
192     public function install_xml($env){
193       $data = $env->data();
194       $sgbd = $data->sgbd();
195       $EXISTS = $sgbd->data_exists("pages");
196       if(!isset($EXISTS)){
197         return "impossible de savoir si la table #--pages existe";
198       }
199       if($EXISTS){
200         return "la table #--pages existe deja";
201       }
202       if(!$sgbd->create_data("pages")){
203         return "imposible de creer la table #--pages";
204       }
205       if(!$sgbd->add_data("actions_roles", array("action" => "pages/admin", "id_role" => "1"))){
206         $sgbd->remove_data("pages");
207         return "impossible d'ajouter un statut pour l'action pages/admin";
208       }
209       return true;
210     }
211
212     // ---------------------------------------------------------------------------------
213     //                                                                         uninstall
214     //
215
216     public function uninstall($env){
217       if($env->bdd("sgbd") == "xml") return $this->uninstall_xml($env);
218       else return $this->uninstall_sql($env);
219     }
220
221     public function uninstall_xml($env){
222       $data = $env->data();
223       $sgbd = $data->sgbd();
224       if(!$this->disable($env)) return "impossible de desactiver le plugin";
225       $data->del_config("plugins_pages_start_id");
226       $EXISTS = $sgbd->data_exists("pages");
227       if(!isset($EXISTS)){
228         return "impossible de savoir si la table #--pages existe";
229       }
230       if(!$EXISTS){
231         // return "la table #--pages n'existe pas";
232       }
233       elseif(!$sgbd->remove_data("pages")){
234         return "imposible de supprimer la table #--pages";
235       }
236       $ids = array();
237       if($rst = $sgbd->open_data("actions_roles")){
238         while($v_rst = $sgbd->fetch_data($rst)){
239           if(isset($v_rst)){
240             if(isset($v_rst["action"]) && isset($v_rst["id"]) && $v_rst["action"] == "pages/admin"){
241               $ids[] = $v_rst["id"];
242             }
243           }
244           else $ids = false;
245         }
246         $sgbd->close_data($rst);
247       }
248       if($ids !== false){
249         foreach($ids as $id){
250           $sgbd->del_data("actions_roles", $id);
251         }
252       }
253       return true;
254     }
255
256     public function uninstall_sql($env){
257       $data = $env->data();
258       $sgbd = $data->sgbd();
259       if(!$this->disable($env)) return "impossible de desactiver le plugin";
260       $data->del_config("plugins_pages_start_id");
261       try{
262         $EXISTS = $sgbd->table_exists("#--pages");
263       }
264       catch(Exception $e){
265         return "impossible de savoir si la table #--pages existe";
266       }
267       if(!$EXISTS){
268         // return "la table #--pages n'existe pas";
269       }
270       else{
271         try{
272           $sgbd->query("DROP TABLE #--pages");
273         }
274         catch(Exception $e){
275           return "imposible de supprimer la table #--pages";
276         }
277       }
278       try{
279         $sgbd->query("DELETE FROM #--actions_roles WHERE action='pages/admin'");
280       }
281       catch(Exception $e){
282         return
283          "Le plugin a bien &eacute;t&eacute; d&eacute;sinstall&eacute;"
284         ." mais impossible d'enlever les droits pages/admin/* de la table actions_roles";
285       }
286       return true;
287     }
288
289   }