From 9132ad67add6f981d0bd0383e99aea0359fbc97f Mon Sep 17 00:00:00 2001 From: remicollet Date: Sun, 22 Mar 2009 08:42:39 +0000 Subject: [PATCH] Changes to illustrate changes in plugin management and common used solution for rights - move install/uninstall functions in hook.php - provide a change_profile to save right in the session - change haveRight to use data from session git-svn-id: https://forge.glpi-project.org/svn/example/trunk@70 349b9182-4a13-0410-896f-e5e9767dd1b3 --- hook.php | 76 +++++++++++++++++++++++++++++++++++ setup.php | 118 +++++++++++++++--------------------------------------- 2 files changed, 109 insertions(+), 85 deletions(-) diff --git a/hook.php b/hook.php index 0dc3cd1..8e63e59 100644 --- a/hook.php +++ b/hook.php @@ -41,6 +41,23 @@ class pluginExample extends CommonDBTM { } }; +// Hook called on profile change +// Good place to evaluate the user right on this plugin +// And to save it in the session +function plugin_change_profile_example() { + + // For example : same right of computer + if (haveRight('computer','w')) { + $_SESSION["glpi_plugin_example_profile"]=array('example'=>'w'); + + } else if (haveRight('computer','r')) { + $_SESSION["glpi_plugin_example_profile"]=array('example'=>'r'); + + } else { + unset($_SESSION["glpi_plugin_example_profile"]); + } + +} // Define dropdown relations function plugin_example_getDatabaseRelations(){ @@ -638,5 +655,64 @@ function plugin_example_addParamFordynamicReport($device_type){ return false; } +// Install process for plugin : need to return true if succeeded +function plugin_example_install(){ + global $DB; + if (!TableExists("glpi_plugin_example")){ + $query="CREATE TABLE `glpi_plugin_example` ( + `ID` int(11) NOT NULL auto_increment, + `name` varchar(255) collate utf8_unicode_ci default NULL, + `serial` varchar(255) collate utf8_unicode_ci NOT NULL, + `FK_dropdown` int(11) NOT NULL default '0', + `deleted` smallint(6) NOT NULL default '0', + `is_template` smallint(6) NOT NULL default '0', + `tplname` varchar(255) collate utf8_unicode_ci default NULL, + PRIMARY KEY (`ID`) + ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + "; + $DB->query($query) or die("error creating glpi_plugin_example ". $DB->error()); + $query="INSERT INTO `glpi_plugin_example` (`ID`, `name`, `serial`, `FK_dropdown`, `deleted`, `is_template`, `tplname`) VALUES + (1, 'example 1', 'serial 1', 1, 0, 0, NULL), + (2, 'example 2', 'serial 2', 2, 0, 0, NULL), + (3, 'example 3', 'serial 3', 1, 0, 0, NULL);"; + $DB->query($query) or die("error populate glpi_plugin_example ". $DB->error()); + + } + if (!TableExists("glpi_dropdown_plugin_example")){ + + $query="CREATE TABLE `glpi_dropdown_plugin_example` ( + `ID` int(11) NOT NULL auto_increment, + `name` varchar(255) collate utf8_unicode_ci default NULL, + `comments` text collate utf8_unicode_ci, + PRIMARY KEY (`ID`), + KEY `name` (`name`) + ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;"; + + $DB->query($query) or die("error creating glpi_dropdown_plugin_example". $DB->error()); + $query="INSERT INTO `glpi_dropdown_plugin_example` (`ID`, `name`, `comments`) VALUES + (1, 'dp 1', 'comment 1'), + (2, 'dp2', 'comment 2');"; + $DB->query($query) or die("error populate glpi_dropdown_plugin_example". $DB->error()); + + } + return true; +} + +// Uninstall process for plugin : need to return true if succeeded +function plugin_example_uninstall(){ + global $DB; + + if (TableExists("glpi_plugin_example")){ + $query="DROP TABLE `glpi_plugin_example`;"; + $DB->query($query) or die("error creating glpi_plugin_example"); + } + if (TableExists("glpi_dropdown_plugin_example")){ + + $query="DROP TABLE `glpi_dropdown_plugin_example`;"; + $DB->query($query) or die("error creating glpi_dropdown_plugin_example"); + } + return true; +} + ?> diff --git a/setup.php b/setup.php index 1a7b0e5..28d7d4d 100755 --- a/setup.php +++ b/setup.php @@ -37,22 +37,39 @@ function plugin_init_example() { global $PLUGIN_HOOKS,$LANG,$CFG_GLPI; - // Display a menu entry ? - $PLUGIN_HOOKS['menu_entry']['example'] = true; - $PLUGIN_HOOKS['submenu_entry']['example']['add'] = 'example.form.php'; - $PLUGIN_HOOKS['submenu_entry']['example']["".$LANG["] = 'index.php'; - $PLUGIN_HOOKS['submenu_entry']['example'][$LANG['plugin_example']["test"]] = 'index.php'; - $PLUGIN_HOOKS['submenu_entry']['example']['config'] = 'index.php'; + // Params : plugin name - string type - ID - Array of attributes + registerPluginType('example', 'PLUGIN_EXAMPLE_TYPE', 1001, array( + 'classname' => 'pluginExample', + 'tablename' => 'glpi_plugin_example', + 'formpage' => 'example.form.php', + 'searchpage' => 'index.php', + 'typename' => 'Example Type', + 'deleted_tables' => false, + 'template_tables' => false, + 'specif_entities_tables' => false, + 'recursive_type' => false + )); - $PLUGIN_HOOKS["helpdesk_menu_entry"]['example'] = true; + // Display a menu entry ? + if (plugin_example_haveTypeRight(PLUGIN_EXAMPLE_TYPE,'r')) { // Right set in change_profile hook + $PLUGIN_HOOKS['menu_entry']['example'] = true; + $PLUGIN_HOOKS['submenu_entry']['example']['add'] = 'example.form.php'; + $PLUGIN_HOOKS['submenu_entry']['example']["".$LANG["] = 'index.php'; + $PLUGIN_HOOKS['submenu_entry']['example'][$LANG['plugin_example']["test"]] = 'index.php'; + $PLUGIN_HOOKS['submenu_entry']['example']['config'] = 'index.php'; + + $PLUGIN_HOOKS["helpdesk_menu_entry"]['example'] = true; + } // Config page - $PLUGIN_HOOKS['config_page']['example'] = 'config.php'; + if (haveRight('config','w')) { + $PLUGIN_HOOKS['config_page']['example'] = 'config.php'; + } // Init session //$PLUGIN_HOOKS['init_session']['example'] = 'plugin_init_session_example'; // Change profile - //$PLUGIN_HOOKS['change_profile']['example'] = 'plugin_change_profile_example'; + $PLUGIN_HOOKS['change_profile']['example'] = 'plugin_change_profile_example'; // Change entity //$PLUGIN_HOOKS['change_entity']['example'] = 'plugin_change_entity_example'; @@ -107,19 +124,6 @@ function plugin_init_example() { // Stats $PLUGIN_HOOKS['stats']['example'] = array('stat.php'=>'New stat', 'stat.php?other'=>'New stats 2',); - // Params : plugin name - string type - ID - Array of attributes - registerPluginType('example', 'PLUGIN_EXAMPLE_TYPE', 1001, array( - 'classname' => 'pluginExample', - 'tablename' => 'glpi_plugin_example', - 'formpage' => 'example.form.php', - 'searchpage' => 'index.php', - 'typename' => 'Example Type', - 'deleted_tables' => false, - 'template_tables' => false, - 'specif_entities_tables' => false, - 'recursive_type' => false - )); - } @@ -134,65 +138,6 @@ function plugin_version_example(){ ); } -// Install process for plugin : need to return true if succeeded -function plugin_example_install(){ - global $DB; - if (!TableExists("glpi_plugin_example")){ - $query="CREATE TABLE `glpi_plugin_example` ( - `ID` int(11) NOT NULL auto_increment, - `name` varchar(255) collate utf8_unicode_ci default NULL, - `serial` varchar(255) collate utf8_unicode_ci NOT NULL, - `FK_dropdown` int(11) NOT NULL default '0', - `deleted` smallint(6) NOT NULL default '0', - `is_template` smallint(6) NOT NULL default '0', - `tplname` varchar(255) collate utf8_unicode_ci default NULL, - PRIMARY KEY (`ID`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - "; - $DB->query($query) or die("error creating glpi_plugin_example ". $DB->error()); - $query="INSERT INTO `glpi_plugin_example` (`ID`, `name`, `serial`, `FK_dropdown`, `deleted`, `is_template`, `tplname`) VALUES - (1, 'example 1', 'serial 1', 1, 0, 0, NULL), - (2, 'example 2', 'serial 2', 2, 0, 0, NULL), - (3, 'example 3', 'serial 3', 1, 0, 0, NULL);"; - $DB->query($query) or die("error populate glpi_plugin_example ". $DB->error()); - - } - if (!TableExists("glpi_dropdown_plugin_example")){ - - $query="CREATE TABLE `glpi_dropdown_plugin_example` ( - `ID` int(11) NOT NULL auto_increment, - `name` varchar(255) collate utf8_unicode_ci default NULL, - `comments` text collate utf8_unicode_ci, - PRIMARY KEY (`ID`), - KEY `name` (`name`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;"; - - $DB->query($query) or die("error creating glpi_dropdown_plugin_example". $DB->error()); - $query="INSERT INTO `glpi_dropdown_plugin_example` (`ID`, `name`, `comments`) VALUES - (1, 'dp 1', 'comment 1'), - (2, 'dp2', 'comment 2');"; - $DB->query($query) or die("error populate glpi_dropdown_plugin_example". $DB->error()); - - } - return true; -} - -// Uninstall process for plugin : need to return true if succeeded -function plugin_example_uninstall(){ - global $DB; - - if (TableExists("glpi_plugin_example")){ - $query="DROP TABLE `glpi_plugin_example`;"; - $DB->query($query) or die("error creating glpi_plugin_example"); - } - if (TableExists("glpi_dropdown_plugin_example")){ - - $query="DROP TABLE `glpi_dropdown_plugin_example`;"; - $DB->query($query) or die("error creating glpi_dropdown_plugin_example"); - } - return true; -} - // Optional : check prerequisites before install : may print errors or add to message after redirect function plugin_example_check_prerequisites(){ @@ -220,12 +165,15 @@ function plugin_example_check_config($verbose=false){ // Define rights for the plugin types function plugin_example_haveTypeRight($type,$right){ + + if (!isset($_SESSION["glpi_plugin_example_profile"])) { + // No right + return false; + } switch ($type){ case PLUGIN_EXAMPLE_TYPE : - // 1 - All rights for all users - // return true; - // 2 - Similarity right : same right of computer - return haveRight("computer",$right); + // Evaluate the right from data saved in session by change_profile hook + return ($right=='r' || $_SESSION["glpi_plugin_example_profile"]=='w'); break; } }