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