table="glpi_plugin_example"; $this->type=PLUGIN_EXAMPLE_TYPE; } function getSearchOptions() { global $LANG; $tab = array(); $tab['common']="Header Needed"; $tab[1]['table']='glpi_plugin_example'; $tab[1]['field']='name'; $tab[1]['linkfield']='name'; $tab[1]['name']=$LANG['plugin_example']["name"]; $tab[2]['table']='glpi_plugin_example_dropdown'; $tab[2]['field']='name'; $tab[2]['linkfield']='plugin_example_dropdown_id'; $tab[2]['name']='Dropdown'; $tab[3]['table']='glpi_plugin_example'; $tab[3]['field']='serial'; $tab[3]['linkfield']='serial'; $tab[3]['name']='Serial'; $tab[3]['usehaving']=true; $tab[30]['table']='glpi_plugin_example'; $tab[30]['field']='id'; $tab[30]['linkfield']=''; $tab[30]['name']=$LANG["common"][2]; return $tab; } } // Class for a Dropdown class pluginExampleDropdown extends CommonDropdown { function __construct () { $this->table="glpi_plugin_example_dropdown"; $this->type=PLUGIN_EXAMPLEDROPDOWN_TYPE; } static function getTypeName() { global $LANG; return "Plugin Example Dropdown"; } } // 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(){ // return array("glpi_plugin_example_dropdown"=>array("glpi_plugin_example"=>"plugin_example_dropdown_id")); } // Define Dropdown tables to be manage in GLPI : function plugin_example_getDropdown(){ // Table => Name return array(PLUGIN_EXAMPLEDROPDOWN_TYPE => "Plugin Example Dropdown"); } ////// SEARCH FUNCTIONS ///////(){ // Define Additionnal search options for types (other than the plugin ones) function plugin_example_getAddSearchOptions($itemtype){ global $LANG; $sopt=array(); if ($itemtype == COMPUTER_TYPE) { // Just for example, not working... $sopt[1001]['table'] = 'glpi_plugin_example_dropdown'; $sopt[1001]['field'] = 'name'; $sopt[1001]['linkfield'] = 'plugin_example_dropdown_id'; $sopt[1001]['name'] = 'Example plugin'; } return $sopt; } function plugin_example_giveItem($type,$ID,$data,$num){ global $CFG_GLPI, $INFOFORM_PAGES; $searchopt=&getSearchOptions($type); $table=$searchopt[$ID]["table"]; $field=$searchopt[$ID]["field"]; switch ($table.'.'.$field){ case "glpi_plugin_example.name" : $out= ""; $out.= $data["ITEM_$num"]; if ($_SESSION["glpiis_ids_visible"]||empty($data["ITEM_$num"])) $out.= " (".$data["id"].")"; $out.= ""; return $out; break; } return ""; } function plugin_example_addLeftJoin($type,$ref_table,$new_table,$linkfield){ // Example of standard LEFT JOIN clause but use it ONLY for specific LEFT JOIN // No need of the function if you do not have specific cases switch ($new_table){ case "glpi_plugin_example_dropdown" : return " LEFT JOIN $new_table ON ($ref_table.$linkfield = $new_table.id) "; break; } return ""; } function plugin_example_forceGroupBy($type){ switch ($type){ case PLUGIN_EXAMPLE_TYPE : // Force add GROUP BY IN REQUEST return true; break; } return false; } function plugin_example_addWhere($link,$nott,$type,$ID,$val){ $searchopt=&getSearchOptions($type); $table=$searchopt[$ID]["table"]; $field=$searchopt[$ID]["field"]; $SEARCH=makeTextSearch($val,$nott); // Example of standard Where clause but use it ONLY for specific Where // No need of the function if you do not have specific cases // switch ($table.".".$field){ // case "glpi_plugin_example.name" : // $ADD=""; // if ($nott&&$val!="NULL") { // $ADD=" OR $table.$field IS NULL"; // } // return $link." ($table.$field $SEARCH ".$ADD." ) "; // break; // } return ""; } // This is not a real example because the use of Having condition in this case is not suitable function plugin_example_addHaving($link,$nott,$type,$ID,$val,$num){ $searchopt=&getSearchOptions($type); $table=$searchopt[$ID]["table"]; $field=$searchopt[$ID]["field"]; $SEARCH=makeTextSearch($val,$nott); // Example of standard Having clause but use it ONLY for specific Having // No need of the function if you do not have specific cases switch ($table.".".$field){ case "glpi_plugin_example.serial" : $ADD=""; if (($nott&&$val!="NULL")||$val=='^$') { $ADD=" OR ITEM_$num IS NULL"; } return " $LINK ( ITEM_".$num.$SEARCH." $ADD ) "; break; } return ""; } function plugin_example_addSelect($type,$ID,$num){ $searchopt=&getSearchOptions($type); $table=$searchopt[$ID]["table"]; $field=$searchopt[$ID]["field"]; // Example of standard Select clause but use it ONLY for specific Select // No need of the function if you do not have specific cases // switch ($table.".".$field){ // case "glpi_plugin_example.name" : // return $table.".".$field." AS ITEM_$num, "; // break; // } return ""; } function plugin_example_addOrderBy($type,$ID,$order,$key=0){ $searchopt=&getSearchOptions($type); $table=$searchopt[$ID]["table"]; $field=$searchopt[$ID]["field"]; // Example of standard OrderBy clause but use it ONLY for specific order by // No need of the function if you do not have specific cases // switch ($table.".".$field){ // case "glpi_plugin_example.name" : // return " ORDER BY $table.$field $order "; // break; // } return ""; } ////////////////////////////// ////// SPECIFIC MODIF MASSIVE FUNCTIONS /////// // Define actions : function plugin_example_MassiveActions($type){ global $LANG; switch ($type){ // New action for core and other plugin types : name = plugin_PLUGINNAME_actionname case COMPUTER_TYPE : return array( "plugin_example_DoIt"=>"plugin_example_DoIt", ); break; // Actions for types provided by the plugin case PLUGIN_EXAMPLE_TYPE : return array( // GLPI core one "add_document"=>$LANG["document"][16], // Specific one "do_nothing"=>'Do Nothing - just for fun' ); break; } return array(); } // How to display specific actions ? function plugin_example_MassiveActionsDisplay($type,$action){ global $LANG; switch ($type){ case COMPUTER_TYPE: switch ($action){ case "plugin_example_DoIt": echo " but do nothing :)"; break; } break; case PLUGIN_EXAMPLE_TYPE: switch ($action){ // No case for add_document : use GLPI core one case "do_nothing": echo " but do nothing :)"; break; } break; } return ""; } // How to process specific actions ? function plugin_example_MassiveActionsProcess($data){ global $LANG; switch ($data['action']){ case 'plugin_example_DoIt': if ($data['device_type']==COMPUTER_TYPE){ $ci =new CommonItem(); addMessageAfterRedirect("Right it is the type I want..."); addMessageAfterRedirect("But... I say I will do nothing for :"); foreach ($data['item'] as $key => $val){ if ($val==1) { if ($ci->getFromDB($data["device_type"],$key)){ addMessageAfterRedirect("- ".$ci->getField("name")); } } } } break; case 'do_nothing': if ($data['device_type']==PLUGIN_EXAMPLE_TYPE){ $ci =new CommonItem(); addMessageAfterRedirect("Right it is the type I want..."); addMessageAfterRedirect("But... I say I will do nothing for :"); foreach ($data['item'] as $key => $val){ if ($val==1) { if ($ci->getFromDB($data["device_type"],$key)){ addMessageAfterRedirect("- ".$ci->getField("name")); } } } } break; } } // How to display specific update fields ? function plugin_example_MassiveActionsFieldsDisplay($type,$table,$field,$linkfield){ global $LINK_ID_TABLE; if ($table==$LINK_ID_TABLE[$type]){ // Table fields switch ($table.".".$field){ case 'glpi_plugin_example.serial': echo "Not really specific - Just for example "; autocompletionTextField($linkfield,$table,$field); // dropdownYesNo($linkfield); // Need to return true if specific display return true; break; } } else { // Linked Fields switch ($table.".".$field){ case "glpi_plugin_example_dropdown.name" : echo "Not really specific - Just for example "; dropdown($table,$linkfield,1,$_SESSION["glpiactive_entity"]); //dropdownUsers($linkfield,0,"own_ticket",0,1,$_SESSION["glpiactive_entity"]); // Need to return true if specific display return true; break; } } // Need to return false on non display item return false; } ////////////////////////////// // Hook done on before update item case function plugin_pre_item_update_example($input){ if (isset($input["_item_type_"])) switch ($input["_item_type_"]){ case COMPUTER_TYPE : // Manipulate data if needed addMessageAfterRedirect("Pre Update Computer Hook",true); break; } return $input; } // Hook done on update item case function plugin_item_update_example($parm){ if (isset($parm["type"])) switch ($parm["type"]){ case COMPUTER_TYPE : addMessageAfterRedirect("Update Computer Hook",true); return true; break; } return false; } // Hook done on before add item case function plugin_pre_item_add_example($input){ if (isset($input["_item_type_"])) switch ($input["_item_type_"]){ case COMPUTER_TYPE : // Manipulate data if needed addMessageAfterRedirect("Pre Add Computer Hook",true); break; } return $input; } // Hook done on add item case function plugin_item_add_example($parm){ if (isset($parm["type"])) switch ($parm["type"]){ case COMPUTER_TYPE : addMessageAfterRedirect("Add Computer Hook",true); return true; break; } return false; } // Hook done on before delete item case function plugin_pre_item_delete_example($input){ if (isset($input["_item_type_"])) switch ($input["_item_type_"]){ case COMPUTER_TYPE : // Manipulate data if needed addMessageAfterRedirect("Pre Delete Computer Hook",true); break; } return $input; } // Hook done on delete item case function plugin_item_delete_example($parm){ if (isset($parm["type"])) switch ($parm["type"]){ case COMPUTER_TYPE : addMessageAfterRedirect("Delete Computer Hook",true); return true; break; } return false; } // Hook done on before purge item case function plugin_pre_item_purge_example($input){ if (isset($input["_item_type_"])) switch ($input["_item_type_"]){ case COMPUTER_TYPE : // Manipulate data if needed addMessageAfterRedirect("Pre Purge Computer Hook",true); break; } return $input; } // Hook done on purge item case function plugin_item_purge_example($parm){ if (isset($parm["type"])) switch ($parm["type"]){ case COMPUTER_TYPE : addMessageAfterRedirect("Purge Computer Hook",true); return true; break; } return false; } // Hook done on before restore item case function plugin_pre_item_restore_example($input){ if (isset($input["_item_type_"])) switch ($input["_item_type_"]){ case COMPUTER_TYPE : // Manipulate data if needed addMessageAfterRedirect("Pre Restore Computer Hook"); break; } return $input; } // Hook done on restore item case function plugin_item_restore_example($parm){ if (isset($parm["type"])) switch ($parm["type"]){ case COMPUTER_TYPE : addMessageAfterRedirect("Restore Computer Hook"); return true; break; } return false; } // Hook done on restore item case function plugin_item_transfer_example($parm){ addMessageAfterRedirect("Transfer Computer Hook ".$parm['type']." ".$parm['id']." -> ".$parm['newID']); return false; } // Parm contains begin, end and who // Create data to be displayed in the planning of $parm["who"] or $parm["who_group"] between $parm["begin"] and $parm["end"] function plugin_planning_populate_example($parm){ // Add items in the items fields of the parm array // Items need to have an unique index beginning by the begin date of the item to display // needed to be correcly displayed $parm["items"][$parm["begin"]."$$$"."plugin_example1"]["plugin"]="example"; $parm["items"][$parm["begin"]."$$$"."plugin_example1"]["begin"]=date("Y-m-d 17:00:00"); $parm["items"][$parm["begin"]."$$$"."plugin_example1"]["end"]=date("Y-m-d 18:00:00"); $parm["items"][$parm["begin"]."$$$"."plugin_example1"]["name"]="test planning example 1 "; // Set the ID using the ID of the item in the database to have unique ID $ID=date("Ymd"); // Current date for example $parm["items"][$parm["begin"]."$$$"."plugin_example1"]["planningID"]="plugin_example".$ID; return $parm; } // Display the planning item function plugin_display_planning_example($parm){ // $parm["type"] say begin end in or from type // Add items in the items fields of the parm array global $LANG; switch ($parm["type"]){ case "in": echo date("H:i",strtotime($parm["begin"]))." -> ".date("H:i",strtotime($parm["end"])).": "; break; case "from": break; case "begin"; echo $LANG["buttons"][33]." ".date("H:i",strtotime($parm["begin"])).": "; break; case "end"; echo $LANG["buttons"][32]." ".date("H:i",strtotime($parm["end"])).": "; break; } echo $parm["name"]; } // Define headings added by the plugin function plugin_get_headings_example($type,$ID,$withtemplate){ switch ($type){ case PROFILE_TYPE: $prof = new Profile(); if ($ID>0 && $prof->getFromDB($ID) && $prof->fields['interface']=='central') { return array( 1 => "Test PLugin", ); } else { return array(); } break; case COMPUTER_TYPE : // new object / template case if ($withtemplate) { return array(); // Non template case / editing an existing object } else { return array( 1 => "Test PLugin", ); } break; case COMPUTERDISK_TYPE : case ENTERPRISE_TYPE : if ($ID>0) { // Not in create mode return array( 1 => "Test PLugin", 2 => "Test PLugin 2", ); } break; case "central": return array( 1 => "Test PLugin", ); break; case "prefs": return array( 1 => "Test PLugin", ); break; case "mailing": return array( 1 => "Test PLugin", ); break; } return false; } // Define headings actions added by the plugin function plugin_headings_actions_example($type){ switch ($type){ case PROFILE_TYPE : case COMPUTER_TYPE : return array( 1 => "plugin_headings_example", ); break; case COMPUTERDISK_TYPE : case ENTERPRISE_TYPE : return array( 1 => "plugin_headings_example", 2 => "plugin_headings_example", ); break; case "central" : return array( 1 => "plugin_headings_example", ); break; case "prefs" : return array( 1 => "plugin_headings_example", ); break; case "mailing" : return array( 1 => "plugin_headings_example", ); break; } return false; } // Example of an action heading function plugin_headings_example($type,$ID,$withtemplate=0){ global $LANG; if (!$withtemplate){ echo "