. * --------------------------------------------------------------------- */ use Glpi\Event; if (!defined('GLPI_ROOT')) { die("Sorry. You can't access this file directly"); } /** * Entity class */ class Entity extends CommonTreeDropdown { use MapGeolocation; public $must_be_replace = true; public $dohistory = true; public $first_level_menu = "admin"; public $second_level_menu = "entity"; static $rightname = 'entity'; protected $usenotepad = true; const READHELPDESK = 1024; const UPDATEHELPDESK = 2048; const CONFIG_PARENT = -2; const CONFIG_NEVER = -10; const AUTO_ASSIGN_HARDWARE_CATEGORY = 1; const AUTO_ASSIGN_CATEGORY_HARDWARE = 2; // Array of "right required to update" => array of fields allowed // Missing field here couldn't be update (no right) private static $field_right = [ 'entity' => [ // Address 'address', 'country', 'email', 'fax', 'notepad', 'longitude','latitude','altitude', 'phonenumber', 'postcode', 'state', 'town', 'website', // Advanced (could be user_authtype ?) 'authldaps_id', 'entity_ldapfilter', 'ldap_dn', 'mail_domain', 'tag', // Inventory 'entities_id_software', 'level', 'name', 'completename', 'entities_id', 'ancestors_cache', 'sons_cache', 'comment' ], // Inventory 'infocom' => [ 'autofill_buy_date', 'autofill_delivery_date', 'autofill_order_date', 'autofill_use_date', 'autofill_warranty_date', 'autofill_decommission_date' ], // Notification 'notification' => [ 'admin_email', 'admin_reply', 'admin_email_name', 'admin_reply_name', 'delay_send_emails', 'is_notif_enable_default', 'default_cartridges_alarm_threshold', 'default_consumables_alarm_threshold', 'default_contract_alert', 'default_infocom_alert', 'mailing_signature', 'cartridges_alert_repeat', 'consumables_alert_repeat', 'notclosed_delay', 'use_licenses_alert', 'use_certificates_alert', 'send_licenses_alert_before_delay', 'send_certificates_alert_before_delay', 'use_contracts_alert', 'send_contracts_alert_before_delay', 'use_reservations_alert', 'use_infocoms_alert', 'send_infocoms_alert_before_delay', 'notification_subject_tag', 'use_domains_alert', 'send_domains_alert_close_expiries_delay', 'send_domains_alert_expired_delay' ], // Helpdesk 'entity_helpdesk' => [ 'calendars_id', 'tickettype', 'auto_assign_mode', 'autoclose_delay', 'inquest_config', 'inquest_rate', 'inquest_delay', 'inquest_duration','inquest_URL', 'max_closedate', 'tickettemplates_id', 'changetemplates_id', 'problemtemplates_id', 'suppliers_as_private', 'autopurge_delay', 'anonymize_support_agents' ], // Configuration 'config' => ['enable_custom_css', 'custom_css_code'] ]; function getForbiddenStandardMassiveAction() { $forbidden = parent::getForbiddenStandardMassiveAction(); $forbidden[] = 'delete'; $forbidden[] = 'purge'; $forbidden[] = 'restore'; $forbidden[] = 'CommonDropdown'.MassiveAction::CLASS_ACTION_SEPARATOR.'merge'; return $forbidden; } /** * @since 0.84 **/ function pre_deleteItem() { global $GLPI_CACHE; // Security do not delete root entity if ($this->input['id'] == 0) { return false; } //Cleaning sons calls getAncestorsOf and thus... Re-create cache. Call it before clean. $this->cleanParentsSons(); if (Toolbox::useCache()) { $ckey = 'ancestors_cache_' . $this->getTable() . '_' . $this->getID(); $GLPI_CACHE->delete($ckey); } return true; } static function getTypeName($nb = 0) { return _n('Entity', 'Entities', $nb); } function canCreateItem() { // Check the parent return Session::haveRecursiveAccessToEntity($this->getField('entities_id')); } /** * @since 0.84 **/ static function canUpdate() { return (Session::haveRightsOr(self::$rightname, [UPDATE, self::UPDATEHELPDESK]) || Session::haveRight('notification', UPDATE)); } function canUpdateItem() { // Check the current entity return Session::haveAccessToEntity($this->getField('id')); } function canViewItem() { // Check the current entity return Session::haveAccessToEntity($this->getField('id')); } static function isNewID($ID) { return (($ID < 0) || !strlen($ID)); } /** * Can object have a location * * @since 9.3 * * @return boolean */ function maybeLocated() { return true; } /** * Check right on each field before add / update * * @since 0.84 (before in entitydata.class) * * @param $input array (form) * * @return array (filtered input) **/ private function checkRightDatas($input) { $tmp = []; if (isset($input['id'])) { $tmp['id'] = $input['id']; } foreach (self::$field_right as $right => $fields) { if ($right == 'entity_helpdesk') { if (Session::haveRight(self::$rightname, self::UPDATEHELPDESK )) { foreach ($fields as $field) { if (isset($input[$field])) { $tmp[$field] = $input[$field]; } } } } else { if (Session::haveRight($right, UPDATE)) { foreach ($fields as $field) { if (isset($input[$field])) { $tmp[$field] = $input[$field]; } } } } } // Add framework / internal ones foreach ($input as $key => $val) { if ($key[0] == '_') { $tmp[$key] = $input[$key]; } } return $tmp; } /** * @since 0.84 (before in entitydata.class) **/ function prepareInputForAdd($input) { global $DB; $input['name'] = isset($input['name']) ? trim($input['name']) : ''; if (empty($input["name"])) { Session::addMessageAfterRedirect(__("You can't add an entity without name"), false, ERROR); return false; } $input = parent::prepareInputForAdd($input); $result = $DB->request([ 'SELECT' => new \QueryExpression( 'MAX('.$DB->quoteName('id').')+1 AS newID' ), 'FROM' => $this->getTable() ])->next(); $input['id'] = $result['newID']; $input['max_closedate'] = $_SESSION["glpi_currenttime"]; if (!Session::isCron()) { // Filter input for connected $input = $this->checkRightDatas($input); } return $input; } /** * @since 0.84 (before in entitydata.class) **/ function prepareInputForUpdate($input) { $input = parent::prepareInputForUpdate($input); // Si on change le taux de déclenchement de l'enquête (enquête activée) ou le type de l'enquete, // cela s'applique aux prochains tickets - Pas à l'historique if ((isset($input['inquest_rate']) && (($this->fields['inquest_rate'] == 0) || is_null($this->fields['max_closedate'])) && ($input['inquest_rate'] != $this->fields['inquest_rate'])) || (isset($input['inquest_config']) && (($this->fields['inquest_config'] == self::CONFIG_PARENT) || is_null($this->fields['max_closedate'])) && ($input['inquest_config'] != $this->fields['inquest_config']))) { $input['max_closedate'] = $_SESSION["glpi_currenttime"]; } // Force entities_id = -1 for root entity if ($input['id'] == 0) { $input['entities_id'] = -1; $input['level'] = 1; } if (!Session::isCron()) { // Filter input for connected $input = $this->checkRightDatas($input); } return $input; } function defineTabs($options = []) { $ong = []; $this->addDefaultFormTab($ong); $this->addImpactTab($ong, $options); $this->addStandardTab(__CLASS__, $ong, $options); $this->addStandardTab('Profile_User', $ong, $options); $this->addStandardTab('Rule', $ong, $options); $this->addStandardTab('Document_Item', $ong, $options); $this->addStandardTab('Notepad', $ong, $options); $this->addStandardTab('KnowbaseItem_Item', $ong, $options); $this->addStandardTab('Log', $ong, $options); return $ong; } /** * @since 0.84 (before in entitydata.class) **/ function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) { if (!$withtemplate) { switch ($item->getType()) { case __CLASS__ : $ong = []; $ong[1] = $this->getTypeName(Session::getPluralNumber()); $ong[2] = __('Address'); $ong[3] = __('Advanced information'); if (Notification::canView()) { $ong[4] = _n('Notification', 'Notifications', Session::getPluralNumber()); } if (Session::haveRightsOr(self::$rightname, [self::READHELPDESK, self::UPDATEHELPDESK])) { $ong[5] = __('Assistance'); } $ong[6] = __('Assets'); if (Session::haveRight(Config::$rightname, [UPDATE])) { $ong[7] = __('UI customization'); } return $ong; } } return ''; } /** * @since 0.84 (before in entitydata.class) **/ static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) { if ($item->getType()==__CLASS__) { switch ($tabnum) { case 1 : $item->showChildren(); break; case 2 : self::showStandardOptions($item); break; case 3 : self::showAdvancedOptions($item); break; case 4 : self::showNotificationOptions($item); break; case 5 : self::showHelpdeskOptions($item); break; case 6 : self::showInventoryOptions($item); break; case 7 : self::showUiCustomizationOptions($item); break; } } return true; } /** * Print a good title for entity pages * *@return void **/ function title() { // Empty title for entities } function displayHeader() { Html::header($this->getTypeName(1), '', "admin", "entity"); } /** * Get the ID of entity assigned to the object * * simply return ID * * @return integer ID of the entity **/ function getEntityID() { if (isset($this->fields["id"])) { return $this->fields["id"]; } return -1; } function isEntityAssign() { return true; } function maybeRecursive() { return true; } /** * Is the object recursive * * Entity are always recursive * * @return integer (0/1) **/ function isRecursive () { return true; } function post_addItem() { parent::post_addItem(); // Add right to current user - Hack to avoid login/logout $_SESSION['glpiactiveentities'][$this->fields['id']] = $this->fields['id']; $_SESSION['glpiactiveentities_string'] .= ",'".$this->fields['id']."'"; } function cleanDBonPurge() { // most use entities_id, RuleDictionnarySoftwareCollection use new_entities_id Rule::cleanForItemAction($this, '%entities_id'); Rule::cleanForItemCriteria($this); $this->deleteChildrenAndRelationsFromDb( [ Entity_KnowbaseItem::class, Entity_Reminder::class, Entity_RSSFeed::class, ] ); } function rawSearchOptions() { $tab = []; $tab[] = [ 'id' => 'common', 'name' => __('Characteristics') ]; $tab[] = [ 'id' => '1', 'table' => $this->getTable(), 'field' => 'completename', 'name' => __('Complete name'), 'datatype' => 'itemlink', 'massiveaction' => false ]; $tab[] = [ 'id' => '2', 'table' => $this->getTable(), 'field' => 'id', 'name' => __('ID'), 'massiveaction' => false, 'datatype' => 'number' ]; $tab[] = [ 'id' => '14', 'table' => $this->getTable(), 'field' => 'name', 'name' => __('Name'), 'datatype' => 'itemlink', 'massiveaction' => false ]; $tab[] = [ 'id' => '3', 'table' => $this->getTable(), 'field' => 'address', 'name' => __('Address'), 'massiveaction' => false, 'datatype' => 'text' ]; $tab[] = [ 'id' => '4', 'table' => $this->getTable(), 'field' => 'website', 'name' => __('Website'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '5', 'table' => $this->getTable(), 'field' => 'phonenumber', 'name' => Phone::getTypeName(1), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '6', 'table' => $this->getTable(), 'field' => 'email', 'name' => _n('Email', 'Emails', 1), 'datatype' => 'email', 'massiveaction' => false, 'autocomplete' => true, ]; $tab[] = [ 'id' => '10', 'table' => $this->getTable(), 'field' => 'fax', 'name' => __('Fax'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '25', 'table' => $this->getTable(), 'field' => 'postcode', 'name' => __('Postal code'), 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '11', 'table' => $this->getTable(), 'field' => 'town', 'name' => __('City'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '12', 'table' => $this->getTable(), 'field' => 'state', 'name' => _x('location', 'State'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '13', 'table' => $this->getTable(), 'field' => 'country', 'name' => __('Country'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '67', 'table' => $this->getTable(), 'field' => 'latitude', 'name' => __('Latitude'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '68', 'table' => $this->getTable(), 'field' => 'longitude', 'name' => __('Longitude'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '69', 'table' => $this->getTable(), 'field' => 'altitude', 'name' => __('Altitude'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '16', 'table' => $this->getTable(), 'field' => 'comment', 'name' => __('Comments'), 'datatype' => 'text' ]; $tab[] = [ 'id' => '122', 'table' => $this->getTable(), 'field' => 'date_mod', 'name' => __('Last update'), 'datatype' => 'datetime', 'massiveaction' => false ]; $tab[] = [ 'id' => '121', 'table' => $this->getTable(), 'field' => 'date_creation', 'name' => __('Creation date'), 'datatype' => 'datetime', 'massiveaction' => false ]; // add objectlock search options $tab = array_merge($tab, ObjectLock::rawSearchOptionsToAdd(get_class($this))); $tab = array_merge($tab, Notepad::rawSearchOptionsToAdd()); $tab[] = [ 'id' => 'advanced', 'name' => __('Advanced information') ]; $tab[] = [ 'id' => '7', 'table' => $this->getTable(), 'field' => 'ldap_dn', 'name' => __('LDAP directory information attribute representing the entity'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '8', 'table' => $this->getTable(), 'field' => 'tag', 'name' => __('Information in inventory tool (TAG) representing the entity'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '9', 'table' => 'glpi_authldaps', 'field' => 'name', 'name' => __('LDAP directory of an entity'), 'massiveaction' => false, 'datatype' => 'dropdown' ]; $tab[] = [ 'id' => '17', 'table' => $this->getTable(), 'field' => 'entity_ldapfilter', 'name' => __('Search filter (if needed)'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '20', 'table' => $this->getTable(), 'field' => 'mail_domain', 'name' => __('Mail domain'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => 'notif', 'name' => __('Notification options') ]; $tab[] = [ 'id' => '60', 'table' => $this->getTable(), 'field' => 'delay_send_emails', 'name' => __('Delay to send email notifications'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'number', 'min' => 0, 'max' => 60, 'step' => 1, 'unit' => 'minute', 'toadd' => [self::CONFIG_PARENT => __('Inheritance of the parent entity')] ]; $tab[] = [ 'id' => '61', 'table' => $this->getTable(), 'field' => 'is_notif_enable_default', 'name' => __('Enable notifications by default'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'string' ]; $tab[] = [ 'id' => '18', 'table' => $this->getTable(), 'field' => 'admin_email', 'name' => __('Administrator email'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '19', 'table' => $this->getTable(), 'field' => 'admin_reply', 'name' => __('Administrator reply-to email (if needed)'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '21', 'table' => $this->getTable(), 'field' => 'notification_subject_tag', 'name' => __('Prefix for notifications'), 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '22', 'table' => $this->getTable(), 'field' => 'admin_email_name', 'name' => __('Administrator name'), 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '23', 'table' => $this->getTable(), 'field' => 'admin_reply_name', 'name' => __('Response address (if needed)'), 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '24', 'table' => $this->getTable(), 'field' => 'mailing_signature', 'name' => __('Email signature'), 'datatype' => 'text' ]; $tab[] = [ 'id' => '26', 'table' => $this->getTable(), 'field' => 'cartridges_alert_repeat', 'name' => __('Alarms on cartridges'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '27', 'table' => $this->getTable(), 'field' => 'consumables_alert_repeat', 'name' => __('Alarms on consumables'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '29', 'table' => $this->getTable(), 'field' => 'use_licenses_alert', 'name' => __('Alarms on expired licenses'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '53', 'table' => $this->getTable(), 'field' => 'send_licenses_alert_before_delay', 'name' => __('Send license alarms before'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '30', 'table' => $this->getTable(), 'field' => 'use_contracts_alert', 'name' => __('Alarms on contracts'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '54', 'table' => $this->getTable(), 'field' => 'send_contracts_alert_before_delay', 'name' => __('Send contract alarms before'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '31', 'table' => $this->getTable(), 'field' => 'use_infocoms_alert', 'name' => __('Alarms on financial and administrative information'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '55', 'table' => $this->getTable(), 'field' => 'send_infocoms_alert_before_delay', 'name' => __('Send financial and administrative information alarms before'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '32', 'table' => $this->getTable(), 'field' => 'use_reservations_alert', 'name' => __('Alerts on reservations'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '48', 'table' => $this->getTable(), 'field' => 'default_contract_alert', 'name' => __('Default value for alarms on contracts'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '49', 'table' => $this->getTable(), 'field' => 'default_infocom_alert', 'name' => __('Default value for alarms on financial and administrative information'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '50', 'table' => $this->getTable(), 'field' => 'default_cartridges_alarm_threshold', 'name' => __('Default threshold for cartridges count'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'number' ]; $tab[] = [ 'id' => '52', 'table' => $this->getTable(), 'field' => 'default_consumables_alarm_threshold', 'name' => __('Default threshold for consumables count'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'number' ]; $tab[] = [ 'id' => '57', 'table' => $this->getTable(), 'field' => 'use_certificates_alert', 'name' => __('Alarms on expired certificates'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '58', 'table' => $this->getTable(), 'field' => 'send_certificates_alert_before_delay', 'name' => __('Send Certificate alarms before'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => 'helpdesk', 'name' => __('Assistance') ]; $tab[] = [ 'id' => '47', 'table' => $this->getTable(), 'field' => 'tickettemplates_id', // not a dropdown because of special value 'name' => _n('Ticket template', 'Ticket templates', 1), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '33', 'table' => $this->getTable(), 'field' => 'autoclose_delay', 'name' => __('Automatic closing of solved tickets after'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'number', 'min' => 1, 'max' => 99, 'step' => 1, 'unit' => 'day', 'toadd' => [ self::CONFIG_PARENT => __('Inheritance of the parent entity'), self::CONFIG_NEVER => __('Never'), 0 => __('Immediatly') ] ]; $tab[] = [ 'id' => '59', 'table' => $this->getTable(), 'field' => 'autopurge_delay', 'name' => __('Automatic purge of closed tickets after'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'number', 'min' => 1, 'max' => 3650, 'step' => 1, 'unit' => 'day', 'toadd' => [ self::CONFIG_PARENT => __('Inheritance of the parent entity'), self::CONFIG_NEVER => __('Never'), 0 => __('Immediatly') ] ]; $tab[] = [ 'id' => '34', 'table' => $this->getTable(), 'field' => 'notclosed_delay', 'name' => __('Alerts on tickets which are not solved'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '35', 'table' => $this->getTable(), 'field' => 'auto_assign_mode', 'name' => __('Automatic assignment of tickets'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '36', 'table' => $this->getTable(), 'field' => 'calendars_id',// not a dropdown because of special valu 'name' => _n('Calendar', 'Calendars', 1), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '37', 'table' => $this->getTable(), 'field' => 'tickettype', 'name' => __('Tickets default type'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => 'assets', 'name' => __('Assets') ]; $tab[] = [ 'id' => '38', 'table' => $this->getTable(), 'field' => 'autofill_buy_date', 'name' => __('Date of purchase'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '39', 'table' => $this->getTable(), 'field' => 'autofill_order_date', 'name' => __('Order date'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '40', 'table' => $this->getTable(), 'field' => 'autofill_delivery_date', 'name' => __('Delivery date'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '41', 'table' => $this->getTable(), 'field' => 'autofill_use_date', 'name' => __('Startup date'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '42', 'table' => $this->getTable(), 'field' => 'autofill_warranty_date', 'name' => __('Start date of warranty'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '43', 'table' => $this->getTable(), 'field' => 'inquest_config', 'name' => __('Satisfaction survey configuration'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '44', 'table' => $this->getTable(), 'field' => 'inquest_rate', 'name' => __('Satisfaction survey trigger rate'), 'massiveaction' => false, 'datatype' => 'number' ]; $tab[] = [ 'id' => '45', 'table' => $this->getTable(), 'field' => 'inquest_delay', 'name' => __('Create survey after'), 'massiveaction' => false, 'datatype' => 'number' ]; $tab[] = [ 'id' => '46', 'table' => $this->getTable(), 'field' => 'inquest_URL', 'name' => __('URL'), 'massiveaction' => false, 'datatype' => 'string', 'autocomplete' => true, ]; $tab[] = [ 'id' => '51', 'table' => $this->getTable(), 'field' => 'name', 'linkfield' => 'entities_id_software', // not a dropdown because of special value //TRANS: software in plural 'name' => __('Entity for software creation'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; $tab[] = [ 'id' => '56', 'table' => $this->getTable(), 'field' => 'autofill_decommission_date', 'name' => __('Decommission date'), 'massiveaction' => false, 'nosearch' => true, 'datatype' => 'specific' ]; return $tab; } /** * Display entities of the loaded profile * * @param string $target target for entity change action * @param string $myname select name **/ static function showSelector($target, $myname) { global $CFG_GLPI; $rand = mt_rand(); if (Session::getCurrentInterface() == 'helpdesk') { $actionurl = $CFG_GLPI["root_doc"]."/front/helpdesk.public.php?active_entity="; } else { $actionurl = $CFG_GLPI["root_doc"]."/front/central.php?active_entity="; } echo "
"; echo "".__('Select the desired entity')."
( ".__s('to see the entity and its sub-entities').")
". "
"; echo "".str_replace(" ", " ", __('Show all'))."
"; echo "
"; echo "
"; echo Html::input('entsearchtext', ['id' => 'entsearchtext']); echo Html::submit(__('Search'), ['id' => 'entsearch']); echo "
"; echo ""; echo "
"; echo "
"; } /** * @since 0.83 (before addRule) * * @param $input array of values **/ function executeAddRule($input) { $this->check($_POST["affectentity"], UPDATE); $collection = RuleCollection::getClassByType($_POST['sub_type']); $rule = $collection->getRuleClass($_POST['sub_type']); $ruleid = $rule->add($_POST); if ($ruleid) { //Add an action associated to the rule $ruleAction = new RuleAction(); //Action is : affect computer to this entity $ruleAction->addActionByAttributes("assign", $ruleid, "entities_id", $_POST["affectentity"]); switch ($_POST['sub_type']) { case 'RuleRight' : if ($_POST["profiles_id"]) { $ruleAction->addActionByAttributes("assign", $ruleid, "profiles_id", $_POST["profiles_id"]); } $ruleAction->addActionByAttributes("assign", $ruleid, "is_recursive", $_POST["is_recursive"]); } } Event::log($ruleid, "rules", 4, "setup", //TRANS: %s is the user login sprintf(__('%s adds the item'), $_SESSION["glpiname"])); Html::back(); } /** * get all entities with a notification option set * manage CONFIG_PARENT (or NULL) value * * @param $field String name of the field to search (>0) * * @return Array of id => value **/ static function getEntitiesToNotify($field) { global $DB; $entities = []; // root entity first $ent = new self(); if ($ent->getFromDB(0)) { // always exists $val = $ent->getField($field); if ($val > 0) { $entities[0] = $val; } } // Others entities in level order (parent first) $iterator = $DB->request([ 'SELECT' => [ 'id AS entity', 'entities_id AS parent', $field ], 'FROM' => self::getTable(), 'ORDER' => 'level ASC' ]); while ($entitydata = $iterator->next()) { if ((is_null($entitydata[$field]) || ($entitydata[$field] == self::CONFIG_PARENT)) && isset($entities[$entitydata['parent']])) { // config inherit from parent $entities[$entitydata['entity']] = $entities[$entitydata['parent']]; } else if ($entitydata[$field] > 0) { // config found in entity $entities[$entitydata['entity']] = $entitydata[$field]; } } return $entities; } /** * @since 0.84 * * @param $entity Entity object **/ static function showStandardOptions(Entity $entity) { $con_spotted = false; $ID = $entity->getField('id'); if (!$entity->can($ID, READ)) { return false; } // Entity right applied $canedit = $entity->can($ID, UPDATE); echo "
"; if ($canedit) { echo "
"; } echo ""; Plugin::doHook("pre_item_form", ['item' => $entity, 'options' => []]); echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; Plugin::doHook("post_item_form", ['item' => $entity, 'options' => []]); echo "
".__('Address')."
". Phone::getTypeName(1).""; Html::autocompletionTextField($entity, "phonenumber"); echo "".__('Address').""; echo ""; echo "
".__('Fax').""; Html::autocompletionTextField($entity, "fax"); echo "
".__('Website').""; Html::autocompletionTextField($entity, "website"); echo "
"._n('Email', 'Emails', 1).""; Html::autocompletionTextField($entity, "email"); echo "
".__('Postal code').""; Html::autocompletionTextField($entity, "postcode", ['size' => 7]); echo "  ". __('City'). " "; Html::autocompletionTextField($entity, "town", ['size' => 27]); echo "
"._x('location', 'State').""; Html::autocompletionTextField($entity, "state"); echo "
".__('Country').""; Html::autocompletionTextField($entity, "country"); echo "
".__('Location on map').""; $entity->displaySpecificTypeField($ID, [ 'name' => 'setlocation', 'type' => 'setlocation', 'label' => __('Location on map'), 'list' => false ]); echo "
"._x('location', 'Longitude').""; Html::autocompletionTextField($entity, "longitude"); echo "
"._x('location', 'Latitude').""; Html::autocompletionTextField($entity, "latitude"); echo "
"._x('location', 'Altitude').""; Html::autocompletionTextField($entity, "altitude"); echo "
"; if ($canedit) { echo "
"; echo ""; echo ""; echo "
"; Html::closeForm(); } echo "
"; } /** * @since 0.84 (before in entitydata.class) * * @param $entity Entity object **/ static function showAdvancedOptions(Entity $entity) { $con_spotted = false; $ID = $entity->getField('id'); if (!$entity->can($ID, READ)) { return false; } // Entity right applied (could be User::UPDATEAUTHENT) $canedit = $entity->can($ID, UPDATE); if ($canedit) { echo ""; } echo ""; Plugin::doHook("pre_item_form", ['item' => $entity, 'options' => []]); echo ""; echo ""; echo ""; echo ""; echo ""; if (Toolbox::canUseLdap()) { echo ""; echo ""; echo ""; } echo ""; echo ""; echo ""; if (Toolbox::canUseLdap()) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } Plugin::doHook("post_item_form", ['item' => $entity, 'options' => &$options]); echo "
".__('Values for the generic rules for assignment to entities'). "
". __('These parameters are used as actions in generic rules for assignment to entities'). "
".__('Information in inventory tool (TAG) representing the entity').""; Html::autocompletionTextField($entity, "tag", ['size' => 100]); echo "
".__('LDAP directory information attribute representing the entity').""; Html::autocompletionTextField($entity, "ldap_dn", ['size' => 100]); echo "
".__('Mail domain surrogates entity').""; Html::autocompletionTextField($entity, "mail_domain", ['size' => 100]); echo "
". __('Values used in the interface to search users from a LDAP directory'). "
".__('LDAP directory of an entity').""; AuthLDAP::dropdown([ 'value' => $entity->fields['authldaps_id'], 'emptylabel' => __('Default server'), 'condition' => ['is_active' => 1] ]); echo "
".__('LDAP filter associated to the entity (if necessary)').""; Html::autocompletionTextField($entity, 'entity_ldapfilter', ['size' => 100]); echo "
"; if ($canedit) { echo "
"; echo ""; echo ""; echo "
"; Html::closeForm(); } } /** * @since 0.84 (before in entitydata.class) * * @param $entity Entity object **/ static function showInventoryOptions(Entity $entity) { $ID = $entity->getField('id'); if (!$entity->can($ID, READ)) { return false; } // Notification right applied $canedit = (Infocom::canUpdate() && Session::haveAccessToEntity($ID)); echo "
"; if ($canedit) { echo ""; } echo ""; Plugin::doHook("pre_item_form", ['item' => $entity, 'options' => []]); echo ""; $options[0] = __('No autofill'); if ($ID > 0) { $options[self::CONFIG_PARENT] = __('Inheritance of the parent entity'); } $states = getAllDataFromTable('glpi_states'); foreach ($states as $state) { $options[Infocom::ON_STATUS_CHANGE.'_'.$state['id']] //TRANS: %s is the name of the state = sprintf(__('Fill when shifting to state %s'), $state['name']); } $options[Infocom::COPY_WARRANTY_DATE] = __('Copy the start date of warranty'); //Buy date echo ""; echo ""; echo ""; //Order date echo ""; echo ""; //Delivery date echo ""; echo ""; echo ""; //Use date echo ""; echo ""; //Warranty date echo ""; echo ""; echo ""; //Decommission date echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; Plugin::doHook("post_item_form", ['item' => $entity, 'options' => &$options]); echo "
".__('Autofill dates for financial and administrative information'). "
" . __('Date of purchase') . ""; Dropdown::showFromArray('autofill_buy_date', $options, ['value' => $entity->getField('autofill_buy_date')]); echo " " . __('Order date') . ""; $options[Infocom::COPY_BUY_DATE] = __('Copy the date of purchase'); Dropdown::showFromArray('autofill_order_date', $options, ['value' => $entity->getField('autofill_order_date')]); echo "
" . __('Delivery date') . ""; $options[Infocom::COPY_ORDER_DATE] = __('Copy the order date'); Dropdown::showFromArray('autofill_delivery_date', $options, ['value' => $entity->getField('autofill_delivery_date')]); echo " " . __('Startup date') . " "; $options[Infocom::COPY_DELIVERY_DATE] = __('Copy the delivery date'); Dropdown::showFromArray('autofill_use_date', $options, ['value' => $entity->getField('autofill_use_date')]); echo "
" . __('Start date of warranty') . ""; $options = [0 => __('No autofill'), Infocom::COPY_BUY_DATE => __('Copy the date of purchase'), Infocom::COPY_ORDER_DATE => __('Copy the order date'), Infocom::COPY_DELIVERY_DATE => __('Copy the delivery date')]; if ($ID > 0) { $options[self::CONFIG_PARENT] = __('Inheritance of the parent entity'); } Dropdown::showFromArray('autofill_warranty_date', $options, ['value' => $entity->getField('autofill_warranty_date')]); echo " " . __('Decommission date') . ""; $options = [0 => __('No autofill'), Infocom::COPY_BUY_DATE => __('Copy the date of purchase'), Infocom::COPY_ORDER_DATE => __('Copy the order date'), Infocom::COPY_DELIVERY_DATE => __('Copy the delivery date')]; if ($ID > 0) { $options[self::CONFIG_PARENT] = __('Inheritance of the parent entity'); } foreach ($states as $state) { $options[Infocom::ON_STATUS_CHANGE.'_'.$state['id']] //TRANS: %s is the name of the state = sprintf(__('Fill when shifting to state %s'), $state['name']); } Dropdown::showFromArray('autofill_decommission_date', $options, ['value' => $entity->getField('autofill_decommission_date')]); echo "
"._n('Software', 'Software', Session::getPluralNumber())."
" . __('Entity for software creation') . ""; $toadd = [self::CONFIG_NEVER => __('No change of entity')]; // Keep software in PC entity if ($ID > 0) { $toadd[self::CONFIG_PARENT] = __('Inheritance of the parent entity'); } $entities = [$entity->fields['entities_id']]; foreach (getAncestorsOf('glpi_entities', $entity->fields['entities_id']) as $ent) { if (Session::haveAccessToEntity($ent)) { $entities[] = $ent; } } self::dropdown(['name' => 'entities_id_software', 'value' => $entity->getField('entities_id_software'), 'toadd' => $toadd, 'entity' => $entities, 'comments' => false]); if ($entity->fields['entities_id_software'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('entities_id_software', $entity->getField('entities_id')); echo "  "; echo self::getSpecificValueToDisplay('entities_id_software', $tid); echo ""; } echo "
"; if ($canedit) { echo "
"; echo ""; echo ""; echo "
"; Html::closeForm(); } echo "
"; } /** * @since 0.84 (before in entitydata.class) * * @param $entity Entity object **/ static function showNotificationOptions(Entity $entity) { $ID = $entity->getField('id'); if (!$entity->can($ID, READ) || !Notification::canView()) { return false; } // Notification right applied $canedit = (Notification::canUpdate() && Session::haveAccessToEntity($ID)); echo "
"; if ($canedit) { echo ""; } echo ""; Plugin::doHook("pre_item_form", ['item' => $entity, 'options' => []]); echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo "
".__('Notification options')."
".__('Administrator email').""; Html::autocompletionTextField($entity, "admin_email"); echo "" . __('Administrator name') . ""; Html::autocompletionTextField($entity, "admin_email_name"); echo "
".__('Administrator reply-to email (if needed)').""; Html::autocompletionTextField($entity, "admin_reply"); echo "" . __('Response address (if needed)') . ""; Html::autocompletionTextField($entity, "admin_reply_name"); echo "
".__('Prefix for notifications').""; Html::autocompletionTextField($entity, "notification_subject_tag"); echo "".__('Delay to send email notifications').""; $toadd=[]; if ($ID > 0) { $toadd = [self::CONFIG_PARENT => __('Inheritance of the parent entity')]; } Dropdown::showNumber('delay_send_emails', ['value' => $entity->fields["delay_send_emails"], 'min' => 0, 'max' => 100, 'unit' => 'minute', 'toadd' => $toadd]); if ($entity->fields['delay_send_emails'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('delay_send_emails', $entity->getField('entities_id')); echo "
"; echo $entity->getValueToDisplay('delay_send_emails', $tid, ['html' => true]); echo "
"; } echo "
".__('Enable notifications by default').""; Alert::dropdownYesNo(['name' => "is_notif_enable_default", 'value' => $entity->getField('is_notif_enable_default'), 'inherit_parent' => (($ID > 0) ? 1 : 0)]); if ($entity->fields['is_notif_enable_default'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('is_notif_enable_default', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('is_notif_enable_default', $tid); echo "
"; } echo "
 
" . __('Email signature') . ""; echo ""; echo "
"; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; Plugin::doHook("post_item_form", ['item' => $entity, 'options' => &$options]); echo "
".__('Alarms options')."
"; echo _n('Cartridge', 'Cartridges', Session::getPluralNumber()); echo "" . __('Reminders frequency for alarms on cartridges') . ""; $default_value = $entity->fields['cartridges_alert_repeat']; Alert::dropdown(['name' => 'cartridges_alert_repeat', 'value' => $default_value, 'inherit_parent' => (($ID > 0) ? 1 : 0)]); if ($entity->fields['cartridges_alert_repeat'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('cartridges_alert_repeat', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('cartridges_alert_repeat', $tid); echo "
"; } echo "
" . __('Default threshold for cartridges count') .""; if ($ID > 0) { $toadd = [self::CONFIG_PARENT => __('Inheritance of the parent entity'), self::CONFIG_NEVER => __('Never')]; } else { $toadd = [self::CONFIG_NEVER => __('Never')]; } Dropdown::showNumber('default_cartridges_alarm_threshold', ['value' => $entity->fields["default_cartridges_alarm_threshold"], 'min' => 0, 'max' => 100, 'step' => 1, 'toadd' => $toadd]); if ($entity->fields['default_cartridges_alarm_threshold'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('default_cartridges_alarm_threshold', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('default_cartridges_alarm_threshold', $tid); echo "
"; } echo "
"; echo _n('Consumable', 'Consumables', Session::getPluralNumber()); echo "" . __('Reminders frequency for alarms on consumables') . ""; $default_value = $entity->fields['consumables_alert_repeat']; Alert::dropdown(['name' => 'consumables_alert_repeat', 'value' => $default_value, 'inherit_parent' => (($ID > 0) ? 1 : 0)]); if ($entity->fields['consumables_alert_repeat'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('consumables_alert_repeat', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('consumables_alert_repeat', $tid); echo "
"; } echo "
" . __('Default threshold for consumables count') .""; if ($ID > 0) { $toadd = [self::CONFIG_PARENT => __('Inheritance of the parent entity'), self::CONFIG_NEVER => __('Never')]; } else { $toadd = [self::CONFIG_NEVER => __('Never')]; } Dropdown::showNumber('default_consumables_alarm_threshold', ['value' => $entity->fields["default_consumables_alarm_threshold"], 'min' => 0, 'max' => 100, 'step' => 1, 'toadd' => $toadd]); if ($entity->fields['default_consumables_alarm_threshold'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('default_consumables_alarm_threshold', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('default_consumables_alarm_threshold', $tid); echo "
"; } echo "
"; echo _n('Contract', 'Contracts', Session::getPluralNumber()); echo "" . __('Alarms on contracts') . ""; $default_value = $entity->fields['use_contracts_alert']; Alert::dropdownYesNo(['name' => "use_contracts_alert", 'value' => $default_value, 'inherit_parent' => (($ID > 0) ? 1 : 0)]); if ($entity->fields['use_contracts_alert'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('use_contracts_alert', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('use_contracts_alert', $tid); echo "
"; } echo "
".__('Default value') . ""; Contract::dropdownAlert(['name' => "default_contract_alert", 'value' => $entity->fields["default_contract_alert"], 'inherit_parent' => (($ID > 0) ? 1 : 0)]); if ($entity->fields['default_contract_alert'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('default_contract_alert', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('default_contract_alert', $tid); echo "
"; } echo "
" . __('Send contract alarms before').""; Alert::dropdownIntegerNever('send_contracts_alert_before_delay', $entity->fields['send_contracts_alert_before_delay'], ['max' => 99, 'inherit_parent' => (($ID > 0) ? 1 : 0), 'unit' => 'day', 'never_string' => __('No')]); if ($entity->fields['send_contracts_alert_before_delay'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('send_contracts_alert_before_delay', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('send_contracts_alert_before_delay', $tid); echo "
"; } echo "
"; echo __('Financial and administrative information'); echo "" . __('Alarms on financial and administrative information') . ""; $default_value = $entity->fields['use_infocoms_alert']; Alert::dropdownYesNo(['name' => "use_infocoms_alert", 'value' => $default_value, 'inherit_parent' => (($ID > 0) ? 1 : 0)]); if ($entity->fields['use_infocoms_alert'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('use_infocoms_alert', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('use_infocoms_alert', $tid); echo "
"; } echo "
" . __('Default value').""; Infocom::dropdownAlert(['name' => 'default_infocom_alert', 'value' => $entity->fields["default_infocom_alert"], 'inherit_parent' => (($ID > 0) ? 1 : 0)]); if ($entity->fields['default_infocom_alert'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('default_infocom_alert', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('default_infocom_alert', $tid); echo "
"; } echo "
" . __('Send financial and administrative information alarms before').""; Alert::dropdownIntegerNever('send_infocoms_alert_before_delay', $entity->fields['send_infocoms_alert_before_delay'], ['max' => 99, 'inherit_parent' => (($ID > 0) ? 1 : 0), 'unit' => 'day', 'never_string' => __('No')]); if ($entity->fields['send_infocoms_alert_before_delay'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('send_infocoms_alert_before_delay', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('send_infocoms_alert_before_delay', $tid); echo "
"; } echo "
"; echo SoftwareLicense::getTypeName(Session::getPluralNumber()); echo "" . __('Alarms on expired licenses') . ""; $default_value = $entity->fields['use_licenses_alert']; Alert::dropdownYesNo(['name' => "use_licenses_alert", 'value' => $default_value, 'inherit_parent' => (($ID > 0) ? 1 : 0)]); if ($entity->fields['use_licenses_alert'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('use_licenses_alert', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('use_licenses_alert', $tid); echo "
"; } echo "
" . __('Send license alarms before').""; Alert::dropdownIntegerNever('send_licenses_alert_before_delay', $entity->fields['send_licenses_alert_before_delay'], ['max' => 99, 'inherit_parent' => (($ID > 0) ? 1 : 0), 'unit' => 'day', 'never_string' => __('No')]); if ($entity->fields['send_licenses_alert_before_delay'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('send_licenses_alert_before_delay', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('send_licenses_alert_before_delay', $tid); echo "
"; } echo "
"; echo _n('Certificate', 'Certificates', Session::getPluralNumber()); echo "" . __('Alarms on expired certificates') . ""; $default_value = $entity->fields['use_certificates_alert']; Alert::dropdownYesNo(['name' => "use_certificates_alert", 'value' => $default_value, 'inherit_parent' => (($ID > 0) ? 1 : 0)]); if ($entity->fields['use_certificates_alert'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('use_certificates_alert', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('use_certificates_alert', $tid); echo "
"; } echo "
" . __('Send certificates alarms before').""; Alert::dropdownIntegerNever('send_certificates_alert_before_delay', $entity->fields['send_certificates_alert_before_delay'], ['max' => 99, 'inherit_parent' => (($ID > 0) ? 1 : 0), 'unit' => 'day', 'never_string' => __('No')]); if ($entity->fields['send_certificates_alert_before_delay'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('send_certificates_alert_before_delay', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('send_certificates_alert_before_delay', $tid); echo "
"; } echo "
"; echo _n('Reservation', 'Reservations', Session::getPluralNumber()); echo "" . __('Alerts on reservations') . ""; Alert::dropdownIntegerNever('use_reservations_alert', $entity->fields['use_reservations_alert'], ['max' => 99, 'inherit_parent' => (($ID > 0) ? 1 : 0), 'unit' => 'hour']); if ($entity->fields['use_reservations_alert'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('use_reservations_alert', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('use_reservations_alert', $tid); echo "
"; } echo "
"; echo _n('Ticket', 'Tickets', Session::getPluralNumber()); echo "". __('Alerts on tickets which are not solved since'). ""; Alert::dropdownIntegerNever('notclosed_delay', $entity->fields["notclosed_delay"], ['max' => 99, 'inherit_parent' => (($ID > 0) ? 1 : 0), 'unit' => 'day']); if ($entity->fields['notclosed_delay'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('notclosed_delay', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('notclosed_delay', $tid); echo "
"; } echo "
"; echo Domain::getTypeName(Session::getPluralNumber()); echo "" . __('Alarms on domains expiries') . ""; $default_value = $entity->fields['use_domains_alert']; Alert::dropdownYesNo(['name' => "use_domains_alert", 'value' => $default_value, 'inherit_parent' => (($ID > 0) ? 1 : 0)]); if ($entity->fields['use_domains_alert'] == self::CONFIG_PARENT) { $tid = self::getUsedConfig('use_domains_alert', $entity->getField('entities_id')); echo "
"; echo self::getSpecificValueToDisplay('use_domains_alert', $tid); echo "
"; } echo "
" . __('Domains closes expiries') . ""; Alert::dropdownIntegerNever( 'send_domains_alert_close_expiries_delay', $entity->fields["send_domains_alert_close_expiries_delay"], [ 'max' => 99, 'inherit_parent' => (($ID > 0) ? 1 : 0), 'unit' => 'day' ] ); echo "
" . __('Domains expired') . ""; Alert::dropdownIntegerNever( 'send_domains_alert_expired_delay', $entity->fields["send_domains_alert_expired_delay"], [ 'max' => 99, 'inherit_parent' => (($ID > 0) ? 1 : 0), 'unit' => 'day' ] ); echo "
"; if ($canedit) { echo "
"; echo ""; echo ""; echo "
"; Html::closeForm(); } echo "
"; } /** * UI customization configuration form. * * @param $entity Entity object * * @return void * * @since 9.5.0 */ static function showUiCustomizationOptions(Entity $entity) { global $CFG_GLPI; $ID = $entity->getField('id'); if (!$entity->can($ID, READ) || !Session::haveRight(Config::$rightname, [UPDATE])) { return false; } // Codemirror lib echo Html::css('public/lib/codemirror.css'); echo Html::script("public/lib/codemirror.js"); // Notification right applied $canedit = Session::haveRight(Config::$rightname, [UPDATE]) && Session::haveAccessToEntity($ID); echo "
"; if ($canedit) { echo ""; } echo ""; Plugin::doHook("pre_item_form", ['item' => $entity, 'options' => []]); $rand = mt_rand(); echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; Ajax::updateItemOnSelectEvent( 'dropdown_enable_custom_css' . $rand, 'custom_css_container', $CFG_GLPI['root_doc'] . '/ajax/entityCustomCssCode.php', [ 'enable_custom_css' => '__VALUE__', 'entities_id' => $ID ] ); Plugin::doHook("post_item_form", ['item' => $entity, 'options' => &$options]); echo "
".__('UI options')."
".__('Enable CSS customization').""; $values = []; if (($ID > 0) ? 1 : 0) { $values[Entity::CONFIG_PARENT] = __('Inherits configuration from the parent entity'); } $values[0] = __('No'); $values[1] = __('Yes'); echo Dropdown::showFromArray( 'enable_custom_css', $values, [ 'display' => false, 'rand' => $rand, 'value' => $entity->fields['enable_custom_css'] ] ); echo "
"; echo "
"; $value = $entity->fields['enable_custom_css']; // wrap call in function to prevent modifying variables from current scope call_user_func(function() use($value, $ID) { $_POST = [ 'enable_custom_css' => $value, 'entities_id' => $ID ]; include GLPI_ROOT . '/ajax/entityCustomCssCode.php'; }); echo "
\n"; echo "
"; if ($canedit) { echo "
"; echo ""; echo ""; echo "
"; Html::closeForm(); } echo "
"; } /** * Returns tag containing custom CSS code applied to entity. * * @return string */ public function getCustomCssTag() { $enable_custom_css = self::getUsedConfig( 'enable_custom_css', $this->fields['id'] ); if (!$enable_custom_css) { return ''; } $custom_css_code = self::getUsedConfig( 'enable_custom_css', $this->fields['id'], 'custom_css_code', '' ); if (empty($custom_css_code)) { return ''; } return ''; } /** * @since 0.84 (before in entitydata.class) * * @param string $field * @param string $value must be addslashes **/ private static function getEntityIDByField($field, $value) { global $DB; $iterator = $DB->request([ 'SELECT' => 'id', 'FROM' => self::getTable(), 'WHERE' => [$field => $value] ]); if (count($iterator) == 1) { $result = $iterator->next(); return $result['id']; } return -1; } /** * @since 0.84 (before in entitydata.class) * * @param $value **/ static function getEntityIDByDN($value) { return self::getEntityIDByField("ldap_dn", $value); } /** * @since 0.84 * * @param $value **/ static function getEntityIDByCompletename($value) { return self::getEntityIDByField("completename", $value); } /** * @since 0.84 (before in entitydata.class) * * @param $value **/ static function getEntityIDByTag($value) { return self::getEntityIDByField("tag", $value); } /** * @since 0.84 (before in entitydata.class) * * @param $value **/ static function getEntityIDByDomain($value) { return self::getEntityIDByField("mail_domain", $value); } /** * @since 0.84 (before in entitydata.class) * * @param $entities_id **/ static function isEntityDirectoryConfigured($entities_id) { $entity = new self(); if ($entity->getFromDB($entities_id) && ($entity->getField('authldaps_id') > 0)) { return true; } //If there's a directory marked as default if (AuthLDAP::getDefault()) { return true; } return false; } /** * @since 0.84 (before in entitydata.class) * * @param $entity Entity object **/ static function showHelpdeskOptions(Entity $entity) { global $CFG_GLPI; $ID = $entity->getField('id'); if (!$entity->can($ID, READ) || !Session::haveRightsOr(self::$rightname, [self::READHELPDESK, self::UPDATEHELPDESK])) { return false; } $canedit = (Session::haveRight(self::$rightname, self::UPDATEHELPDESK) && Session::haveAccessToEntity($ID)); echo "
"; if ($canedit) { echo ""; } echo ""; Plugin::doHook("pre_item_form", ['item' => $entity, 'options' => []]); echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo "". ""; echo ""; echo ""; echo ""; echo "". ""; echo "\n"; // Do not display for root entity in inherit case if (($entity->fields['inquest_config'] == self::CONFIG_PARENT) && ($ID !=0)) { $inquestconfig = self::getUsedConfig('inquest_config', $entity->fields['entities_id']); $inquestrate = self::getUsedConfig('inquest_config', $entity->fields['entities_id'], 'inquest_rate'); echo "\n"; } echo ""; Plugin::doHook("post_item_form", ['item' => $entity, 'options' => &$options]); echo "
".__('Templates configuration')."
"._n('Ticket template', 'Ticket templates', 1). ""; $toadd = []; if ($ID != 0) { $toadd = [self::CONFIG_PARENT => __('Inheritance of the parent entity')]; } $options = ['value' => $entity->fields["tickettemplates_id"], 'entity' => $ID, 'toadd' => $toadd]; TicketTemplate::dropdown($options); if (($entity->fields["tickettemplates_id"] == self::CONFIG_PARENT) && ($ID != 0)) { echo "  "; $tt = new TicketTemplate(); $tid = self::getUsedConfig('tickettemplates_id', $ID, '', 0); if (!$tid) { echo Dropdown::EMPTY_VALUE; } else if ($tt->getFromDB($tid)) { echo $tt->getLink(); } echo ""; } echo "
"._n('Change template', 'Change templates', 1). ""; $toadd = []; if ($ID != 0) { $toadd = [self::CONFIG_PARENT => __('Inheritance of the parent entity')]; } $options = ['value' => $entity->fields["changetemplates_id"], 'entity' => $ID, 'toadd' => $toadd]; ChangeTemplate::dropdown($options); if (($entity->fields["changetemplates_id"] == self::CONFIG_PARENT) && ($ID != 0)) { echo "  "; $tt = new ChangeTemplate(); $tid = self::getUsedConfig('changetemplates_id', $ID, '', 0); if (!$tid) { echo Dropdown::EMPTY_VALUE; } else if ($tt->getFromDB($tid)) { echo $tt->getLink(); } echo ""; } echo "
"._n('Problem template', 'Problem templates', 1). ""; $toadd = []; if ($ID != 0) { $toadd = [self::CONFIG_PARENT => __('Inheritance of the parent entity')]; } $options = ['value' => $entity->fields["problemtemplates_id"], 'entity' => $ID, 'toadd' => $toadd]; ProblemTemplate::dropdown($options); if (($entity->fields["problemtemplates_id"] == self::CONFIG_PARENT) && ($ID != 0)) { echo "  "; $tt = new ProblemTemplate(); $tid = self::getUsedConfig('problemtemplates_id', $ID, '', 0); if (!$tid) { echo Dropdown::EMPTY_VALUE; } else if ($tt->getFromDB($tid)) { echo $tt->getLink(); } echo ""; } echo "
".__('Tickets configuration')."
"._n('Calendar', 'Calendars', 1).""; $options = ['value' => $entity->fields["calendars_id"], 'emptylabel' => __('24/7')]; if ($ID != 0) { $options['toadd'] = [self::CONFIG_PARENT => __('Inheritance of the parent entity')]; } Calendar::dropdown($options); if (($entity->fields["calendars_id"] == self::CONFIG_PARENT) && ($ID != 0)) { echo "  "; $calendar = new Calendar(); $cid = self::getUsedConfig('calendars_id', $ID, '', 0); if (!$cid) { echo __('24/7'); } else if ($calendar->getFromDB($cid)) { echo $calendar->getLink(); } echo ""; } echo "
".__('Tickets default type').""; $toadd = []; if ($ID != 0) { $toadd = [self::CONFIG_PARENT => __('Inheritance of the parent entity')]; } Ticket::dropdownType('tickettype', ['value' => $entity->fields["tickettype"], 'toadd' => $toadd]); if (($entity->fields['tickettype'] == self::CONFIG_PARENT) && ($ID != 0)) { echo "  "; echo Ticket::getTicketTypeName(self::getUsedConfig('tickettype', $ID, '', Ticket::INCIDENT_TYPE)); echo ""; } echo "
".__('Automatic assignment of tickets').""; $autoassign = self::getAutoAssignMode(); if ($ID == 0) { unset($autoassign[self::CONFIG_PARENT]); } Dropdown::showFromArray('auto_assign_mode', $autoassign, ['value' => $entity->fields["auto_assign_mode"]]); if (($entity->fields['auto_assign_mode'] == self::CONFIG_PARENT) && ($ID != 0)) { $auto_assign_mode = self::getUsedConfig('auto_assign_mode', $entity->fields['entities_id']); echo "  "; echo $autoassign[$auto_assign_mode]; echo ""; } echo "
".__('Mark followup added by a supplier though an email collector as private').""; $supplierValues = self::getSuppliersAsPrivateValues(); $currentSupplierValue = $entity->fields['suppliers_as_private']; if ($ID == 0) { // Remove parent option for root entity unset($supplierValues[self::CONFIG_PARENT]); } Dropdown::showFromArray( 'suppliers_as_private', $supplierValues, ['value' => $currentSupplierValue] ); // If the entity is using it's parent value, print it if ($currentSupplierValue == self::CONFIG_PARENT && $ID != 0) { $parentSupplierValue = self::getUsedConfig( 'suppliers_as_private', $entity->fields['entities_id'] ); echo "  "; echo $supplierValues[$parentSupplierValue]; echo ""; } echo "
".__('Anonymize support agents').""; $anonymizeValues = self::getAnonymizeSupportAgentsValues(); $currentAnonymizeValue = $entity->fields['anonymize_support_agents']; if ($ID == 0) { // Remove parent option for root entity unset($anonymizeValues[self::CONFIG_PARENT]); } Dropdown::showFromArray( 'anonymize_support_agents', $anonymizeValues, ['value' => $currentAnonymizeValue] ); // If the entity is using it's parent value, print it if ($currentAnonymizeValue == self::CONFIG_PARENT && $ID != 0) { $parentHelpdeskValue = self::getUsedConfig( 'anonymize_support_agents', $entity->fields['entities_id'] ); echo "  "; echo $anonymizeValues[$parentHelpdeskValue]; echo ""; } echo "
".__('Automatic closing configuration')."
".__('Automatic closing of solved tickets after'); //Check if crontask is disabled $crontask = new CronTask(); $criteria = [ 'itemtype' => 'Ticket', 'name' => 'closeticket', 'state' => CronTask::STATE_DISABLE ]; if ($crontask->getFromDBByCrit($criteria)) { echo "
".__('Close ticket action is disabled.').""; } echo "
"; $autoclose = [self::CONFIG_PARENT => __('Inheritance of the parent entity'), self::CONFIG_NEVER => __('Never'), 0 => __('Immediatly')]; if ($ID == 0) { unset($autoclose[self::CONFIG_PARENT]); } Dropdown::showNumber('autoclose_delay', ['value' => $entity->fields['autoclose_delay'], 'min' => 1, 'max' => 99, 'step' => 1, 'toadd' => $autoclose, 'unit' => 'day']); if (($entity->fields['autoclose_delay'] == self::CONFIG_PARENT) && ($ID != 0)) { $autoclose_mode = self::getUsedConfig('autoclose_delay', $entity->fields['entities_id'], '', self::CONFIG_NEVER); echo "
  "; if ($autoclose_mode >= 0) { printf(_n('%d day', '%d days', $autoclose_mode), $autoclose_mode); } else { echo $autoclose[$autoclose_mode]; } echo ""; } echo "
".__('Automatic purge of closed tickets after'); //Check if crontask is disabled $crontask = new CronTask(); $criteria = [ 'itemtype' => 'Ticket', 'name' => 'purgeticket', 'state' => CronTask::STATE_DISABLE ]; if ($crontask->getFromDBByCrit($criteria)) { echo "
".__('Purge ticket action is disabled.').""; } echo "
"; $autopurge = [ self::CONFIG_PARENT => __('Inheritance of the parent entity'), self::CONFIG_NEVER => __('Never') ]; if ($ID == 0) { unset($autopurge[self::CONFIG_PARENT]); } Dropdown::showNumber( 'autopurge_delay', [ 'value' => $entity->fields['autopurge_delay'], 'min' => 1, 'max' => 3650, 'step' => 1, 'toadd' => $autopurge, 'unit' => 'day']); if (($entity->fields['autopurge_delay'] == self::CONFIG_PARENT) && ($ID != 0)) { $autopurge_mode = self::getUsedConfig( 'autopurge_delay', $entity->fields['entities_id'], '', self::CONFIG_NEVER ); echo "
  "; if ($autopurge_mode >= 0) { printf(_n('%d day', '%d days', $autopurge_mode), $autopurge_mode); } else { echo $autopurge[$autopurge_mode]; } echo ""; } echo "
".__('Configuring the satisfaction survey')."
".__('Configuring the satisfaction survey').""; /// no inquest case = rate 0 $typeinquest = [self::CONFIG_PARENT => __('Inheritance of the parent entity'), 1 => __('Internal survey'), 2 => __('External survey')]; // No inherit from parent for root entity if ($ID == 0) { unset($typeinquest[self::CONFIG_PARENT]); if ($entity->fields['inquest_config'] == self::CONFIG_PARENT) { $entity->fields['inquest_config'] = 1; } } $rand = Dropdown::showFromArray('inquest_config', $typeinquest, $options = ['value' => $entity->fields['inquest_config']]); echo "
"; if ($inquestrate == 0) { echo __('Disabled'); } else { echo $typeinquest[$inquestconfig].'
'; $inqconf = self::getUsedConfig('inquest_config', $entity->fields['entities_id'], 'inquest_delay'); printf(_n('%d day', '%d days', $inqconf), $inqconf); echo "
"; //TRANS: %d is the percentage. %% to display % printf(__('%d%%'), $inquestrate); if ($inquestconfig == 2) { echo "
"; echo self::getUsedConfig('inquest_config', $entity->fields['entities_id'], 'inquest_URL'); } } echo "
"; $_POST = ['inquest_config' => $entity->fields['inquest_config'], 'entities_id' => $ID]; $params = ['inquest_config' => '__VALUE__', 'entities_id' => $ID]; echo "
"; include GLPI_ROOT.'/ajax/ticketsatisfaction.php'; echo "
\n"; echo "
"; if ($canedit) { echo "
"; echo ""; echo ""; echo "
"; Html::closeForm(); } echo "
"; Ajax::updateItemOnSelectEvent("dropdown_inquest_config$rand", "inquestconfig", $CFG_GLPI["root_doc"]."/ajax/ticketsatisfaction.php", $params); } /** * Retrieve data of current entity or parent entity * * @since 0.84 (before in entitydata.class) * * @param string $fieldref name of the referent field to know if we look at parent entity * @param integer $entities_id * @param string $fieldval name of the field that we want value (default '') * @param mixed $default_value value to return (default -2) **/ static function getUsedConfig($fieldref, $entities_id = null, $fieldval = '', $default_value = -2) { // Get for current entity if ($entities_id === null) { $entities_id = Session::getActiveEntity(); } // for calendar if (empty($fieldval)) { $fieldval = $fieldref; } $entity = new self(); // Search in entity data of the current entity if ($entity->getFromDB($entities_id)) { // Value is defined : use it if (isset($entity->fields[$fieldref])) { // Numerical value if (is_numeric($default_value) && ($entity->fields[$fieldref] != self::CONFIG_PARENT)) { return $entity->fields[$fieldval]; } // String value if (!is_numeric($default_value) && $entity->fields[$fieldref]) { return $entity->fields[$fieldval]; } } } // Entity data not found or not defined : search in parent one if ($entities_id > 0) { if ($entity->getFromDB($entities_id)) { $ret = self::getUsedConfig($fieldref, $entity->fields['entities_id'], $fieldval, $default_value); return $ret; } } return $default_value; } /** * Generate link for ticket satisfaction * * @since 0.84 (before in entitydata.class) * * @param $ticket ticket object * * @return string url contents **/ static function generateLinkSatisfaction($ticket) { $url = self::getUsedConfig('inquest_config', $ticket->fields['entities_id'], 'inquest_URL'); if (strstr($url, "[TICKET_ID]")) { $url = str_replace("[TICKET_ID]", $ticket->fields['id'], $url); } if (strstr($url, "[TICKET_NAME]")) { $url = str_replace("[TICKET_NAME]", urlencode($ticket->fields['name']), $url); } if (strstr($url, "[TICKET_CREATEDATE]")) { $url = str_replace("[TICKET_CREATEDATE]", $ticket->fields['date'], $url); } if (strstr($url, "[TICKET_SOLVEDATE]")) { $url = str_replace("[TICKET_SOLVEDATE]", $ticket->fields['solvedate'], $url); } if (strstr($url, "[REQUESTTYPE_ID]")) { $url = str_replace("[REQUESTTYPE_ID]", $ticket->fields['requesttypes_id'], $url); } if (strstr($url, "[REQUESTTYPE_NAME]")) { $url = str_replace("[REQUESTTYPE_NAME]", urlencode(Dropdown::getDropdownName('glpi_requesttypes', $ticket->fields['requesttypes_id'])), $url); } if (strstr($url, "[TICKET_PRIORITY]")) { $url = str_replace("[TICKET_PRIORITY]", $ticket->fields['priority'], $url); } if (strstr($url, "[TICKET_PRIORITYNAME]")) { $url = str_replace("[TICKET_PRIORITYNAME]", urlencode(CommonITILObject::getPriorityName($ticket->fields['priority'])), $url); } if (strstr($url, "[TICKETCATEGORY_ID]")) { $url = str_replace("[TICKETCATEGORY_ID]", $ticket->fields['itilcategories_id'], $url); } if (strstr($url, "[TICKETCATEGORY_NAME]")) { $url = str_replace("[TICKETCATEGORY_NAME]", urlencode(Dropdown::getDropdownName('glpi_itilcategories', $ticket->fields['itilcategories_id'])), $url); } if (strstr($url, "[TICKETTYPE_ID]")) { $url = str_replace("[TICKETTYPE_ID]", $ticket->fields['type'], $url); } if (strstr($url, "[TICKET_TYPENAME]")) { $url = str_replace("[TICKET_TYPENAME]", Ticket::getTicketTypeName($ticket->fields['type']), $url); } if (strstr($url, "[SOLUTIONTYPE_ID]")) { $url = str_replace("[SOLUTIONTYPE_ID]", $ticket->fields['solutiontypes_id'], $url); } if (strstr($url, "[SOLUTIONTYPE_NAME]")) { $url = str_replace("[SOLUTIONTYPE_NAME]", urlencode(Dropdown::getDropdownName('glpi_solutiontypes', $ticket->fields['solutiontypes_id'])), $url); } if (strstr($url, "[SLA_TTO_ID]")) { $url = str_replace("[SLA_TTO_ID]", $ticket->fields['slas_id_tto'], $url); } if (strstr($url, "[SLA_TTO_NAME]")) { $url = str_replace("[SLA_TTO_NAME]", urlencode(Dropdown::getDropdownName('glpi_slas', $ticket->fields['slas_id_tto'])), $url); } if (strstr($url, "[SLA_TTR_ID]")) { $url = str_replace("[SLA_TTR_ID]", $ticket->fields['slas_id_ttr'], $url); } if (strstr($url, "[SLA_TTR_NAME]")) { $url = str_replace("[SLA_TTR_NAME]", urlencode(Dropdown::getDropdownName('glpi_slas', $ticket->fields['slas_id_ttr'])), $url); } if (strstr($url, "[SLALEVEL_ID]")) { $url = str_replace("[SLALEVEL_ID]", $ticket->fields['slalevels_id_ttr'], $url); } if (strstr($url, "[SLALEVEL_NAME]")) { $url = str_replace("[SLALEVEL_NAME]", urlencode(Dropdown::getDropdownName('glpi_slalevels', $ticket->fields['slalevels_id_ttr'])), $url); } return $url; } /** * get value for auto_assign_mode * * @since 0.84 (created in version 0.83 in entitydata.class) * * @param integer|null $val if not set, ask for all values, else for 1 value (default NULL) * * @return string|array **/ static function getAutoAssignMode($val = null) { $tab = [self::CONFIG_PARENT => __('Inheritance of the parent entity'), self::CONFIG_NEVER => __('No'), self::AUTO_ASSIGN_HARDWARE_CATEGORY => __('Based on the item then the category'), self::AUTO_ASSIGN_CATEGORY_HARDWARE => __('Based on the category then the item')]; if (is_null($val)) { return $tab; } if (isset($tab[$val])) { return $tab[$val]; } return NOT_AVAILABLE; } /** * get value for suppliers_as_private * * @since 9.5 * * @param integer|null $val if not set, ask for all values, else for 1 value (default NULL) * * @return string|array **/ static function getSuppliersAsPrivateValues() { return [ self::CONFIG_PARENT => __('Inheritance of the parent entity'), 0 => __('No'), 1 => __('Yes'), ]; } /** * Get values for anonymize_support_agents * * @since 9.5 * * @return array **/ static function getAnonymizeSupportAgentsValues() { return [ self::CONFIG_PARENT => __('Inheritance of the parent entity'), 0 => __('No'), 1 => __('Yes'), ]; } /** * @since 0.84 * * @param $options array **/ static function dropdownAutoAssignMode(array $options) { $p['name'] = 'auto_assign_mode'; $p['value'] = 0; $p['display'] = true; if (count($options)) { foreach ($options as $key => $val) { $p[$key] = $val; } } $tab = self::getAutoAssignMode(); return Dropdown::showFromArray($p['name'], $tab, $p); } /** * @since 0.84 (before in entitydata.class) * * @param $field * @param $values * @param $options array **/ static function getSpecificValueToDisplay($field, $values, array $options = []) { if (!is_array($values)) { $values = [$field => $values]; } switch ($field) { case 'use_licenses_alert' : case 'use_certificates_alert' : case 'use_contracts_alert' : case 'use_infocoms_alert' : case 'is_notif_enable_default' : if ($values[$field] == self::CONFIG_PARENT) { return __('Inheritance of the parent entity'); } return Dropdown::getYesNo($values[$field]); case 'use_reservations_alert' : switch ($values[$field]) { case self::CONFIG_PARENT : return __('Inheritance of the parent entity'); case 0 : return __('Never'); } return sprintf(_n('%d hour', '%d hours', $values[$field]), $values[$field]); case 'default_cartridges_alarm_threshold' : case 'default_consumables_alarm_threshold' : switch ($values[$field]) { case self::CONFIG_PARENT : return __('Inheritance of the parent entity'); case 0 : return __('Never'); } return $values[$field]; case 'send_contracts_alert_before_delay' : case 'send_infocoms_alert_before_delay' : case 'send_licenses_alert_before_delay' : case 'send_certificates_alert_before_delay' : switch ($values[$field]) { case self::CONFIG_PARENT : return __('Inheritance of the parent entity'); case 0 : return __('No'); } return sprintf(_n('%d day', '%d days', $values[$field]), $values[$field]); case 'cartridges_alert_repeat' : case 'consumables_alert_repeat' : switch ($values[$field]) { case self::CONFIG_PARENT : return __('Inheritance of the parent entity'); case self::CONFIG_NEVER : case 0 : // For compatibility issue return __('Never'); case DAY_TIMESTAMP : return __('Each day'); case WEEK_TIMESTAMP : return __('Each week'); case MONTH_TIMESTAMP : return __('Each month'); default : // Display value if not defined return $values[$field]; } break; case 'notclosed_delay' : // 0 means never switch ($values[$field]) { case self::CONFIG_PARENT : return __('Inheritance of the parent entity'); case 0 : return __('Never'); } return sprintf(_n('%d day', '%d days', $values[$field]), $values[$field]); case 'auto_assign_mode' : return self::getAutoAssignMode($values[$field]); case 'tickettype' : if ($values[$field] == self::CONFIG_PARENT) { return __('Inheritance of the parent entity'); } return Ticket::getTicketTypeName($values[$field]); case 'autofill_buy_date' : case 'autofill_order_date' : case 'autofill_delivery_date' : case 'autofill_use_date' : case 'autofill_warranty_date' : case 'autofill_decommission_date' : switch ($values[$field]) { case self::CONFIG_PARENT : return __('Inheritance of the parent entity'); case Infocom::COPY_WARRANTY_DATE : return __('Copy the start date of warranty'); case Infocom::COPY_BUY_DATE : return __('Copy the date of purchase'); case Infocom::COPY_ORDER_DATE : return __('Copy the order date'); case Infocom::COPY_DELIVERY_DATE : return __('Copy the delivery date'); default : if (strstr($values[$field], '_')) { list($type,$sid) = explode('_', $values[$field], 2); if ($type == Infocom::ON_STATUS_CHANGE) { // TRANS %s is the name of the state return sprintf(__('Fill when shifting to state %s'), Dropdown::getDropdownName('glpi_states', $sid)); } } } return __('No autofill'); case 'inquest_config' : if ($values[$field] == self::CONFIG_PARENT) { return __('Inheritance of the parent entity'); } return TicketSatisfaction::getTypeInquestName($values[$field]); case 'default_contract_alert' : return Contract::getAlertName($values[$field]); case 'default_infocom_alert' : return Infocom::getAlertName($values[$field]); case 'entities_id_software' : if ($values[$field] == self::CONFIG_NEVER) { return __('No change of entity'); } if ($values[$field] == self::CONFIG_PARENT) { return __('Inheritance of the parent entity'); } return Dropdown::getDropdownName('glpi_entities', $values[$field]); case 'tickettemplates_id' : if ($values[$field] == self::CONFIG_PARENT) { return __('Inheritance of the parent entity'); } return Dropdown::getDropdownName(TicketTemplate::getTable(), $values[$field]); case 'calendars_id' : switch ($values[$field]) { case self::CONFIG_PARENT : return __('Inheritance of the parent entity'); case 0 : return __('24/7'); } return Dropdown::getDropdownName('glpi_calendars', $values[$field]); } return parent::getSpecificValueToDisplay($field, $values, $options); } /** * @since 0.84 * * @param $field * @param $name (default '') * @param $values (default '') * @param $options array **/ static function getSpecificValueToSelect($field, $name = '', $values = '', array $options = []) { if (!is_array($values)) { $values = [$field => $values]; } $options['display'] = false; switch ($field) { case 'use_licenses_alert' : case 'use_certificates_alert' : case 'use_contracts_alert' : case 'use_infocoms_alert' : $options['name'] = $name; $options['value'] = $values[$field]; return Alert::dropdownYesNo($options); case 'cartridges_alert_repeat' : case 'consumables_alert_repeat' : $options['name'] = $name; $options['value'] = $values[$field]; return Alert::dropdown($options); case 'send_contracts_alert_before_delay' : case 'send_infocoms_alert_before_delay' : case 'send_licenses_alert_before_delay' : case 'send_certificates_alert_before_delay' : $options['unit'] = 'day'; $options['never_string'] = __('No'); return Alert::dropdownIntegerNever($name, $values[$field], $options); case 'use_reservations_alert' : $options['unit'] = 'hour'; return Alert::dropdownIntegerNever($name, $values[$field], $options); case 'notclosed_delay' : $options['unit'] = 'hour'; return Alert::dropdownIntegerNever($name, $values[$field], $options); case 'auto_assign_mode' : $options['name'] = $name; $options['value'] = $values[$field]; return self::dropdownAutoAssignMode($options); case 'tickettype' : $options['value'] = $values[$field]; $options['toadd'] = [self::CONFIG_PARENT => __('Inheritance of the parent entity')]; return Ticket::dropdownType($name, $options); case 'autofill_buy_date' : case 'autofill_order_date' : case 'autofill_delivery_date' : case 'autofill_use_date' : case 'autofill_decommission_date' : $tab[0] = __('No autofill'); $tab[self::CONFIG_PARENT] = __('Inheritance of the parent entity'); $states = getAllDataFromTable('glpi_states'); foreach ($states as $state) { $tab[Infocom::ON_STATUS_CHANGE.'_'.$state['id']] //TRANS: %s is the name of the state = sprintf(__('Fill when shifting to state %s'), $state['name']); } $tab[Infocom::COPY_WARRANTY_DATE] = __('Copy the start date of warranty'); if ($field != 'autofill_buy_date') { $tab[Infocom::COPY_BUY_DATE] = __('Copy the date of purchase'); if ($field != 'autofill_order_date') { $tab[Infocom::COPY_ORDER_DATE] = __('Copy the order date'); if ($field != 'autofill_delivery_date') { $options[Infocom::COPY_DELIVERY_DATE] = __('Copy the delivery date'); } } } $options['value'] = $values[$field]; return Dropdown::showFromArray($name, $tab, $options); case 'autofill_warranty_date' : $tab = [0 => __('No autofill'), Infocom::COPY_BUY_DATE => __('Copy the date of purchase'), Infocom::COPY_ORDER_DATE => __('Copy the order date'), Infocom::COPY_DELIVERY_DATE => __('Copy the delivery date'), self::CONFIG_PARENT => __('Inheritance of the parent entity')]; $options['value'] = $values[$field]; return Dropdown::showFromArray($name, $tab, $options); case 'inquest_config' : $typeinquest = [self::CONFIG_PARENT => __('Inheritance of the parent entity'), 1 => __('Internal survey'), 2 => __('External survey')]; $options['value'] = $values[$field]; return Dropdown::showFromArray($name, $typeinquest, $options); case 'default_contract_alert' : $options['name'] = $name; $options['value'] = $values[$field]; return Contract::dropdownAlert($options); case 'default_infocom_alert' : $options['name'] = $name; $options['value'] = $values[$field]; return Infocom::dropdownAlert($options); case 'entities_id_software' : $options['toadd'] = [self::CONFIG_NEVER => __('No change of entity')]; // Keep software in PC entity $options['toadd'][self::CONFIG_PARENT] = __('Inheritance of the parent entity'); return self::dropdown($options); } return parent::getSpecificValueToSelect($field, $name, $values, $options); } function getRights($interface = 'central') { $values = parent::getRights(); $values[self::READHELPDESK] = ['short' => __('Read parameters'), 'long' => __('Read helpdesk parameters')]; $values[self::UPDATEHELPDESK] = ['short' => __('Update parameters'), 'long' => __('Update helpdesk parameters')]; return $values; } function displaySpecificTypeField($ID, $field = []) { switch ($field['type']) { case 'setlocation': $this->showMap(); break; default: throw new \RuntimeException("Unknown {$field['type']}"); } } static function getIcon() { return "fas fa-layer-group"; } }