/**
* Get the SEARCH_OPTION array
*
* @param $itemtype
* @param $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];
}