css menu
[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           $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     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     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     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     function install($env){
82       if($env->bdd("sgbd") == "xml") return $this->install_xml($env);
83       else return $this->install_sql($env);
84     }
85
86     function install_xml($env){
87       $data = $env->data();
88       $sgbd = $data->sgbd();
89       $EXISTS = $sgbd->data_exists("pages");
90       if(!isset($EXISTS)){
91         return "impossible de savoir si la table #--pages existe";
92       }
93       if($EXISTS){
94         return "la table #--pages existe deja";
95       }
96       if(!$sgbd->create_data("pages")){
97         return "imposible de creer la table #--pages";
98       }
99       if(!$sgbd->add_data("actions_roles", array("action" => "pages/admin", "id_role" => "1"))){
100         $sgbd->remove_data("pages");
101         return "impossible d'ajouter un statut pour l'action pages/admin";
102       }
103       return true;
104     }
105
106     function install_sql($env){
107       $data = $env->data();
108       $sgbd = $data->sgbd();
109       try{
110         $EXISTS = $sgbd->table_exists("#--pages");
111       }
112       catch(Exception $e){
113         return "impossible de savoir si la table #--pages existe";
114       }
115       if($EXISTS){
116         return "la table #--pages existe deja";
117       }
118       try{
119         $sql =
120          "CREATE TABLE #--pages"
121         ."( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY"
122         .", id_parent INT(11) NULL"
123         .", title VARCHAR(255) NULL"
124         .", content TEXT NULL"
125         .", date_creation DATETIME NOT NULL"
126         .", user_creation INT(11) NOT NULL"
127         .", date_last_update DATETIME NOT NULL"
128         .", user_last_update INT(11) NOT NULL"
129         .", enabled TINYINT NOT NULL DEFAULT '1'"
130         .", position INT(11) NOT NULL DEFAULT '0'"
131         .") DEFAULT CHARSET=utf8";
132         $sgbd->query($sql);
133       }
134       catch(Exception $e){
135         return "imposible de creer la table #--pages";
136       }
137       try{
138         $sgbd->query("INSERT INTO #--actions_roles(action, id_role) VALUES('pages/admin', 1)");
139       }
140       catch(Exception $e){
141         try{
142           $sgbd->query("DROP TABLE #--pages");
143         }
144         catch(Exception $e){}
145         return "impossible d'ajouter un statut pour l'action pages/admin";
146       }
147       return true;
148     }
149
150     // ---------------------------------------------------------------------------------
151     //                                                                         uninstall
152     //
153
154     function uninstall($env){
155       if($env->bdd("sgbd") == "xml") return $this->uninstall_xml($env);
156       else return $this->uninstall_sql($env);
157     }
158
159     function uninstall_xml($env){
160       $data = $env->data();
161       $sgbd = $data->sgbd();
162       if(!$this->disable($env)) return "impossible de desactiver le plugin";
163       $data->del_config("plugins_pages_start_id");
164       $EXISTS = $sgbd->data_exists("pages");
165       if(!isset($EXISTS)){
166         return "impossible de savoir si la table #--pages existe";
167       }
168       if(!$EXISTS){
169         // return "la table #--pages n'existe pas";
170       }
171       elseif(!$sgbd->remove_data("pages")){
172         return "imposible de supprimer la table #--pages";
173       }
174       $ids = array();
175       if($rst = $sgbd->open_data("actions_roles")){
176         while($v_rst = $sgbd->fetch_data($rst)){
177           if(isset($v_rst)){
178             if(isset($v_rst["action"]) && isset($v_rst["id"]) && $v_rst["action"] == "pages/admin"){
179               $ids[] = $v_rst["id"];
180             }
181           }
182           else $ids = false;
183         }
184         $sgbd->close_data($rst);
185       }
186       if($ids !== false){
187         foreach($ids as $id){
188           $sgbd->del_data("actions_roles", $id);
189         }
190       }
191       return true;
192     }
193
194     function uninstall_sql($env){
195       $data = $env->data();
196       $sgbd = $data->sgbd();
197       if(!$this->disable($env)) return "impossible de desactiver le plugin";
198       $data->del_config("plugins_pages_start_id");
199       try{
200         $EXISTS = $sgbd->table_exists("#--pages");
201       }
202       catch(Exception $e){
203         return "impossible de savoir si la table #--pages existe";
204       }
205       if(!$EXISTS){
206         // return "la table #--pages n'existe pas";
207       }
208       else{
209         try{
210           $sgbd->query("DROP TABLE #--pages");
211         }
212         catch(Exception $e){
213           return "imposible de supprimer la table #--pages";
214         }
215       }
216       try{
217         $sgbd->query("DELETE FROM #--actions_roles WHERE action='pages/admin'");
218       }
219       catch(Exception $e){
220         return
221          "Le plugin a bien &eacute;t&eacute; d&eacute;sinstall&eacute;"
222         ." mais impossible d'enlever les droits pages/admin/* de la table actions_roles";
223       }
224       return true;
225     }
226
227   }
228
229 ?>