set_link("plugins/admin/mw_pages", $env->url("pages/admin"), "éditer les pages"); $env->set_link("admin/pages", $env->url("pages/admin"), "Pages", 40); $data = $env->data(); if( ( $arbo = $data->pages_arbo( array( "enabled" => 1, "order_by" => "position", "order" => "ASC" ) ) ) !== false ){ $this->_set_links($env, "menu_top", $arbo); } return true; } public function _set_links($env, $parent, $arbo){ if($arbo["subs"]){ foreach($arbo["subs"] as $page){ $env->set_link( $parent."/mw_page_".$page["id"], $env->url("pages/view/page", array("id" => $page["id"])), $page["title"], $page["position"] ); $this->_set_links($env, $parent."/mw_page_".$page["id"], $page); } } } public function enable($env){ $plugins_pages_start_id = $env->config("plugins_pages_start_id"); if($plugins_pages_start_id){ $data = $env->data(); if( $data->set_config("start_action", "pages/view/page") && $data->set_config("start_action_params", @serialize(array("id" => $plugins_pages_start_id))) ){ return true; } return false; } return true; } public function disable($env){ $start_action = $env->config("start_action"); if($start_action == "pages/view/page"){ $data = $env->data(); if( $data->set_config("start_action", "") && $data->set_config("start_action_params", "") ){ return true; } return false; } return true; } // --------------------------------------------------------------------------------- // install // public function install($env){ if( $env->bdd("sgbd") == "mysql" || $env->bdd("sgbd") == "pdo_mysql" ){ return $this->install_mysql($env); } elseif( $env->bdd("sgbd") == "pdo_sqlite" ){ return $this->install_sqlite($env); } elseif( $env->bdd("sgbd") == "xml" ){ return $this->install_xml($env); } else{ return "Mode de stockage pour Mtweb (".$env->bdd("sgbd").") non supporté par mw_pages"; } return true; } public function install_mysql($env){ $data = $env->data(); $sgbd = $data->sgbd(); try{ $EXISTS = $sgbd->table_exists("#--pages"); } catch(Exception $e){ return "impossible de savoir si la table #--pages existe"; } if($EXISTS){ return "la table #--pages existe deja"; } try{ $sql = "CREATE TABLE #--pages" ."( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY" .", id_parent INT(11) NULL" .", title VARCHAR(255) NULL" .", content TEXT NULL" .", date_creation DATETIME NOT NULL" .", user_creation INT(11) NOT NULL" .", date_last_update DATETIME NOT NULL" .", user_last_update INT(11) NOT NULL" .", enabled TINYINT NOT NULL DEFAULT '1'" .", position INT(11) NOT NULL DEFAULT '0'" .") DEFAULT CHARSET=utf8"; $sgbd->query($sql); } catch(Exception $e){ return "imposible de creer la table #--pages"; } try{ $sgbd->query("INSERT INTO #--actions_roles(action, id_role) VALUES('pages/admin', 1)"); } catch(Exception $e){ try{ $sgbd->query("DROP TABLE #--pages"); } catch(Exception $e){} return "impossible d'ajouter un statut pour l'action pages/admin"; } return true; } public function install_sqlite($env){ $data = $env->data(); $sgbd = $data->sgbd(); try{ $EXISTS = $sgbd->table_exists("#--pages"); } catch(Exception $e){ return "impossible de savoir si la table #--pages existe"; } if($EXISTS){ return "la table #--pages existe deja"; } try{ $sql = "CREATE TABLE #--pages(" ." `id` INTEGER PRIMARY KEY AUTOINCREMENT" .", id_parent INTEGER NULL" .", title TEXT NULL" .", content TEXT NULL" .", date_creation TEXT NOT NULL" .", user_creation INTEGER NOT NULL" .", date_last_update TEXT NOT NULL" .", user_last_update INTEGER NOT NULL" .", enabled INTEGER NOT NULL DEFAULT '1'" .", position INTEGER NOT NULL DEFAULT '0'" .")"; $sgbd->query($sql); } catch(Exception $e){ return "imposible de creer la table #--pages"; } try{ $sgbd->query("INSERT INTO #--actions_roles(action, id_role) VALUES('pages/admin', 1)"); } catch(Exception $e){ try{ $sgbd->query("DROP TABLE #--pages"); } catch(Exception $e){} return "impossible d'ajouter un statut pour l'action pages/admin"; } return true; } public function install_xml($env){ $data = $env->data(); $sgbd = $data->sgbd(); $EXISTS = $sgbd->data_exists("pages"); if(!isset($EXISTS)){ return "impossible de savoir si la table #--pages existe"; } if($EXISTS){ return "la table #--pages existe deja"; } if(!$sgbd->create_data("pages")){ return "imposible de creer la table #--pages"; } if(!$sgbd->add_data("actions_roles", array("action" => "pages/admin", "id_role" => "1"))){ $sgbd->remove_data("pages"); return "impossible d'ajouter un statut pour l'action pages/admin"; } return true; } // --------------------------------------------------------------------------------- // uninstall // public function uninstall($env){ if($env->bdd("sgbd") == "xml") return $this->uninstall_xml($env); else return $this->uninstall_sql($env); } public function uninstall_xml($env){ $data = $env->data(); $sgbd = $data->sgbd(); if(!$this->disable($env)) return "impossible de desactiver le plugin"; $data->del_config("plugins_pages_start_id"); $EXISTS = $sgbd->data_exists("pages"); if(!isset($EXISTS)){ return "impossible de savoir si la table #--pages existe"; } if(!$EXISTS){ // return "la table #--pages n'existe pas"; } elseif(!$sgbd->remove_data("pages")){ return "imposible de supprimer la table #--pages"; } $ids = array(); if($rst = $sgbd->open_data("actions_roles")){ while($v_rst = $sgbd->fetch_data($rst)){ if(isset($v_rst)){ if(isset($v_rst["action"]) && isset($v_rst["id"]) && $v_rst["action"] == "pages/admin"){ $ids[] = $v_rst["id"]; } } else $ids = false; } $sgbd->close_data($rst); } if($ids !== false){ foreach($ids as $id){ $sgbd->del_data("actions_roles", $id); } } return true; } public function uninstall_sql($env){ $data = $env->data(); $sgbd = $data->sgbd(); if(!$this->disable($env)) return "impossible de desactiver le plugin"; $data->del_config("plugins_pages_start_id"); try{ $EXISTS = $sgbd->table_exists("#--pages"); } catch(Exception $e){ return "impossible de savoir si la table #--pages existe"; } if(!$EXISTS){ // return "la table #--pages n'existe pas"; } else{ try{ $sgbd->query("DROP TABLE #--pages"); } catch(Exception $e){ return "imposible de supprimer la table #--pages"; } } try{ $sgbd->query("DELETE FROM #--actions_roles WHERE action='pages/admin'"); } catch(Exception $e){ return "Le plugin a bien été désinstallé" ." mais impossible d'enlever les droits pages/admin/* de la table actions_roles"; } return true; } }