Search::getOptions PHP Method

getOptions() static public method

Get the SEARCH_OPTION array
static public getOptions ( $itemtype, $withplugins = true ) : the
$itemtype
$withplugins boolean get search options from plugins (true by default)
return the reference to array of search options for the given item type
    static function &getOptions($itemtype, $withplugins = true)
    {
        global $CFG_GLPI;
        static $search = array();
        $item = NULL;
        if (!isset($search[$itemtype])) {
            // standard type first
            switch ($itemtype) {
                case 'Internet':
                    $search[$itemtype]['common'] = __('Characteristics');
                    $search[$itemtype][1]['table'] = 'networkport_types';
                    $search[$itemtype][1]['field'] = 'name';
                    $search[$itemtype][1]['name'] = __('Name');
                    $search[$itemtype][1]['datatype'] = 'itemlink';
                    $search[$itemtype][1]['searchtype'] = 'contains';
                    $search[$itemtype][2]['table'] = 'networkport_types';
                    $search[$itemtype][2]['field'] = 'id';
                    $search[$itemtype][2]['name'] = __('ID');
                    $search[$itemtype][2]['searchtype'] = 'contains';
                    $search[$itemtype][31]['table'] = 'glpi_states';
                    $search[$itemtype][31]['field'] = 'completename';
                    $search[$itemtype][31]['name'] = __('Status');
                    $search[$itemtype] += NetworkPort::getSearchOptionsToAdd('networkport_types');
                    break;
                case 'AllAssets':
                    $search[$itemtype]['common'] = __('Characteristics');
                    $search[$itemtype][1]['table'] = 'asset_types';
                    $search[$itemtype][1]['field'] = 'name';
                    $search[$itemtype][1]['name'] = __('Name');
                    $search[$itemtype][1]['datatype'] = 'itemlink';
                    $search[$itemtype][1]['searchtype'] = 'contains';
                    $search[$itemtype][2]['table'] = 'asset_types';
                    $search[$itemtype][2]['field'] = 'id';
                    $search[$itemtype][2]['name'] = __('ID');
                    $search[$itemtype][2]['searchtype'] = 'contains';
                    $search[$itemtype][31]['table'] = 'glpi_states';
                    $search[$itemtype][31]['field'] = 'completename';
                    $search[$itemtype][31]['name'] = __('Status');
                    $search[$itemtype] += Location::getSearchOptionsToAdd();
                    $search[$itemtype][5]['table'] = 'asset_types';
                    $search[$itemtype][5]['field'] = 'serial';
                    $search[$itemtype][5]['name'] = __('Serial number');
                    $search[$itemtype][6]['table'] = 'asset_types';
                    $search[$itemtype][6]['field'] = 'otherserial';
                    $search[$itemtype][6]['name'] = __('Inventory number');
                    $search[$itemtype][16]['table'] = 'asset_types';
                    $search[$itemtype][16]['field'] = 'comment';
                    $search[$itemtype][16]['name'] = __('Comments');
                    $search[$itemtype][16]['datatype'] = 'text';
                    $search[$itemtype][70]['table'] = 'glpi_users';
                    $search[$itemtype][70]['field'] = 'name';
                    $search[$itemtype][70]['name'] = __('User');
                    $search[$itemtype][7]['table'] = 'asset_types';
                    $search[$itemtype][7]['field'] = 'contact';
                    $search[$itemtype][7]['name'] = __('Alternate username');
                    $search[$itemtype][7]['datatype'] = 'string';
                    $search[$itemtype][8]['table'] = 'asset_types';
                    $search[$itemtype][8]['field'] = 'contact_num';
                    $search[$itemtype][8]['name'] = __('Alternate username number');
                    $search[$itemtype][8]['datatype'] = 'string';
                    $search[$itemtype][71]['table'] = 'glpi_groups';
                    $search[$itemtype][71]['field'] = 'completename';
                    $search[$itemtype][71]['name'] = __('Group');
                    $search[$itemtype][19]['table'] = 'asset_types';
                    $search[$itemtype][19]['field'] = 'date_mod';
                    $search[$itemtype][19]['name'] = __('Last update');
                    $search[$itemtype][19]['datatype'] = 'datetime';
                    $search[$itemtype][19]['massiveaction'] = false;
                    $search[$itemtype][23]['table'] = 'glpi_manufacturers';
                    $search[$itemtype][23]['field'] = 'name';
                    $search[$itemtype][23]['name'] = __('Manufacturer');
                    $search[$itemtype][24]['table'] = 'glpi_users';
                    $search[$itemtype][24]['field'] = 'name';
                    $search[$itemtype][24]['linkfield'] = 'users_id_tech';
                    $search[$itemtype][24]['name'] = __('Technician in charge of the hardware');
                    $search[$itemtype][80]['table'] = 'glpi_entities';
                    $search[$itemtype][80]['field'] = 'completename';
                    $search[$itemtype][80]['name'] = __('Entity');
                    break;
                default:
                    if ($item = getItemForItemtype($itemtype)) {
                        $search[$itemtype] = $item->getSearchOptions();
                    }
                    break;
            }
            if (Session::getLoginUserID() && in_array($itemtype, $CFG_GLPI["ticket_types"])) {
                $search[$itemtype]['tracking'] = __('Assistance');
                $search[$itemtype][60]['table'] = 'glpi_tickets';
                $search[$itemtype][60]['field'] = 'id';
                $search[$itemtype][60]['datatype'] = 'count';
                $search[$itemtype][60]['name'] = _x('quantity', 'Number of tickets');
                $search[$itemtype][60]['forcegroupby'] = true;
                $search[$itemtype][60]['usehaving'] = true;
                $search[$itemtype][60]['massiveaction'] = false;
                $search[$itemtype][60]['joinparams'] = array('beforejoin' => array('table' => 'glpi_items_tickets', 'joinparams' => array('jointype' => 'itemtype_item')), 'condition' => getEntitiesRestrictRequest('AND', 'NEWTABLE'));
                $search[$itemtype][140]['table'] = 'glpi_problems';
                $search[$itemtype][140]['field'] = 'id';
                $search[$itemtype][140]['datatype'] = 'count';
                $search[$itemtype][140]['name'] = _x('quantity', 'Number of problems');
                $search[$itemtype][140]['forcegroupby'] = true;
                $search[$itemtype][140]['usehaving'] = true;
                $search[$itemtype][140]['massiveaction'] = false;
                $search[$itemtype][140]['joinparams'] = array('beforejoin' => array('table' => 'glpi_items_problems', 'joinparams' => array('jointype' => 'itemtype_item')), 'condition' => getEntitiesRestrictRequest('AND', 'NEWTABLE'));
            }
            if (in_array($itemtype, $CFG_GLPI["networkport_types"]) || $itemtype == 'AllAssets') {
                $search[$itemtype] += NetworkPort::getSearchOptionsToAdd($itemtype);
            }
            if (in_array($itemtype, $CFG_GLPI["contract_types"]) || $itemtype == 'AllAssets') {
                $search[$itemtype] += Contract::getSearchOptionsToAdd();
            }
            if (Document::canApplyOn($itemtype) || $itemtype == 'AllAssets') {
                $search[$itemtype] += Document::getSearchOptionsToAdd();
            }
            if (InfoCom::canApplyOn($itemtype) || $itemtype == 'AllAssets') {
                $search[$itemtype] += Infocom::getSearchOptionsToAdd($itemtype);
            }
            if (in_array($itemtype, $CFG_GLPI["link_types"])) {
                $search[$itemtype]['link'] = _n('External link', 'External links', Session::getPluralNumber());
                $search[$itemtype] += Link::getSearchOptionsToAdd($itemtype);
            }
            if ($withplugins) {
                // Search options added by plugins
                $plugsearch = Plugin::getAddSearchOptions($itemtype);
                if (count($plugsearch)) {
                    $search[$itemtype] += array('plugins' => _n('Plugin', 'Plugins', Session::getPluralNumber()));
                    $search[$itemtype] += $plugsearch;
                }
            }
            // Complete linkfield if not define
            if (is_null($item)) {
                // Special union type
                $itemtable = $CFG_GLPI['union_search_type'][$itemtype];
            } else {
                if ($item = getItemForItemtype($itemtype)) {
                    $itemtable = $item->getTable();
                }
            }
            foreach ($search[$itemtype] as $key => $val) {
                if (!is_array($val)) {
                    // skip sub-menu
                    continue;
                }
                // Compatibility before 0.80 : Force massive action to false if linkfield is empty :
                if (isset($val['linkfield']) && empty($val['linkfield'])) {
                    $search[$itemtype][$key]['massiveaction'] = false;
                }
                // Set default linkfield
                if (!isset($val['linkfield']) || empty($val['linkfield'])) {
                    if (strcmp($itemtable, $val['table']) == 0 && (!isset($val['joinparams']) || count($val['joinparams']) == 0)) {
                        $search[$itemtype][$key]['linkfield'] = $val['field'];
                    } else {
                        $search[$itemtype][$key]['linkfield'] = getForeignKeyFieldForTable($val['table']);
                    }
                }
                // Set default datatype
                // if (!isset($val['datatype']) || empty($val['datatype'])) {
                //    if ((strcmp($itemtable,$val['table']) != 0)
                //        && ($val['field'] == 'name' || $val['field'] == 'completename')) {
                //       $search[$itemtype][$key]['datatype'] = 'dropdown';
                //    } else {
                //       $search[$itemtype][$key]['datatype'] = 'string';
                //    }
                // }
                // Add default joinparams
                if (!isset($val['joinparams'])) {
                    $search[$itemtype][$key]['joinparams'] = array();
                }
            }
        }
        return $search[$itemtype];
    }

Usage Example

 /**
  * @see plugins/datainjection/inc/PluginDatainjectionInjectionInterface::getOptions()
  **/
 function getOptions($primary_type = '')
 {
     $tab = Search::getOptions(get_parent_class($this));
     //Specific to location
     $tab[5]['checktype'] = 'date';
     $tab[6]['minvalue'] = 0;
     $tab[6]['maxvalue'] = 120;
     $tab[6]['step'] = 1;
     $tab[6]['checktype'] = 'integer';
     $tab[7]['minvalue'] = 0;
     $tab[7]['maxvalue'] = 120;
     $tab[7]['step'] = 1;
     $tab[7]['checktype'] = 'integer';
     $tab[11]['checktype'] = 'float';
     $tab[20]['checktype'] = 'date';
     $tab[22]['linkfield'] = 'billing';
     // Associated suppliers
     $tab[29]['linkfield'] = 'suppliers_id';
     $tab[29]['displaytype'] = 'relation';
     $tab[29]['relationclass'] = 'Contract_Supplier';
     $tab[29]['relationfield'] = $tab[29]['linkfield'];
     //Remove some options because some fields cannot be imported
     $blacklist = PluginDatainjectionCommonInjectionLib::getBlacklistedOptions(get_parent_class($this));
     $notimportable = array(12, 13, 20, 41, 42, 43, 44, 45, 72);
     $options['ignore_fields'] = array_merge($blacklist, $notimportable);
     $options['displaytype'] = array("dropdown" => array(4), "date" => array(5), "dropdown_integer" => array(6, 7, 21), "bool" => array(86), "alert" => array(59), "billing" => array(22), "renewal" => array(23), "multiline_text" => array(16, 90));
     return PluginDatainjectionCommonInjectionLib::addToSearchOptions($tab, $options, $this);
 }
All Usage Examples Of Search::getOptions