3286 lines
		
	
	
		
			117 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			3286 lines
		
	
	
		
			117 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * ---------------------------------------------------------------------
 | |
|  * GLPI - Gestionnaire Libre de Parc Informatique
 | |
|  * Copyright (C) 2015-2020 Teclib' and contributors.
 | |
|  *
 | |
|  * http://glpi-project.org
 | |
|  *
 | |
|  * based on GLPI - Gestionnaire Libre de Parc Informatique
 | |
|  * Copyright (C) 2003-2014 by the INDEPNET Development Team.
 | |
|  *
 | |
|  * ---------------------------------------------------------------------
 | |
|  *
 | |
|  * LICENSE
 | |
|  *
 | |
|  * This file is part of GLPI.
 | |
|  *
 | |
|  * GLPI is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation; either version 2 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * GLPI is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with GLPI. If not, see <http://www.gnu.org/licenses/>.
 | |
|  * ---------------------------------------------------------------------
 | |
|  */
 | |
| 
 | |
| if (!defined('GLPI_ROOT')) {
 | |
|    die("Sorry. You can't access this file directly");
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Profile class
 | |
| **/
 | |
| class Profile extends CommonDBTM {
 | |
| 
 | |
|    // Specific ones
 | |
| 
 | |
|    /// Helpdesk fields of helpdesk profiles
 | |
|    public static $helpdesk_rights = [
 | |
|       'create_ticket_on_login',
 | |
|       'changetemplates_id',
 | |
|       'followup',
 | |
|       'helpdesk_hardware',
 | |
|       'helpdesk_item_type',
 | |
|       'knowbase',
 | |
|       'password_update',
 | |
|       'personalization',
 | |
|       'problemtemplates_id',
 | |
|       'reminder_public',
 | |
|       'reservation',
 | |
|       'rssfeed_public',
 | |
|       'show_group_hardware',
 | |
|       'task',
 | |
|       'ticket',
 | |
|       'ticket_cost',
 | |
|       'ticket_status',
 | |
|       'tickettemplates_id',
 | |
|       'ticketvalidation',
 | |
|    ];
 | |
| 
 | |
| 
 | |
|    /// Common fields used for all profiles type
 | |
|    static public $common_fields  = ['id', 'interface', 'is_default', 'name'];
 | |
| 
 | |
|    public $dohistory             = true;
 | |
| 
 | |
|    static $rightname             = 'profile';
 | |
| 
 | |
| 
 | |
| 
 | |
|    function getForbiddenStandardMassiveAction() {
 | |
| 
 | |
|       $forbidden   = parent::getForbiddenStandardMassiveAction();
 | |
|       $forbidden[] = 'update';
 | |
|       $forbidden[] = 'clone';
 | |
|       return $forbidden;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    static function getTypeName($nb = 0) {
 | |
|       return _n('Profile', 'Profiles', $nb);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function defineTabs($options = []) {
 | |
| 
 | |
|       $ong = [];
 | |
|       $this->addDefaultFormTab($ong);
 | |
|       $this->addImpactTab($ong, $options);
 | |
|       $this->addStandardTab(__CLASS__, $ong, $options);
 | |
|       $this->addStandardTab('Profile_User', $ong, $options);
 | |
|       $this->addStandardTab('Log', $ong, $options);
 | |
|       return $ong;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) {
 | |
| 
 | |
|       if (!$withtemplate) {
 | |
|          switch ($item->getType()) {
 | |
|             case __CLASS__ :
 | |
|                if ($item->fields['interface'] == 'helpdesk') {
 | |
|                   $ong[3] = __('Assistance'); // Helpdesk
 | |
|                   $ong[4] = __('Life cycles');
 | |
|                   $ong[6] = __('Tools');
 | |
|                   $ong[8] = __('Setup');
 | |
|                } else {
 | |
|                   $ong[2] = __('Assets');
 | |
|                   $ong[3] = __('Assistance');
 | |
|                   $ong[4] = __('Life cycles');
 | |
|                   $ong[5] = __('Management');
 | |
|                   $ong[6] = __('Tools');
 | |
|                   $ong[7] = __('Administration');
 | |
|                   $ong[8] = __('Setup');
 | |
| 
 | |
|                }
 | |
|                return $ong;
 | |
|          }
 | |
|       }
 | |
|       return '';
 | |
|    }
 | |
| 
 | |
| 
 | |
|    static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) {
 | |
| 
 | |
|       if ($item->getType() == __CLASS__) {
 | |
|          $item->cleanProfile();
 | |
|          switch ($tabnum) {
 | |
|             case 2 :
 | |
|                $item->showFormAsset();
 | |
|                break;
 | |
| 
 | |
|             case 3 :
 | |
|                if ($item->fields['interface'] == 'helpdesk') {
 | |
|                   $item->showFormTrackingHelpdesk();
 | |
|                } else {
 | |
|                   $item->showFormTracking();
 | |
|                }
 | |
|                break;
 | |
| 
 | |
|             case 4 :
 | |
|                if ($item->fields['interface'] == 'helpdesk') {
 | |
|                   $item->showFormLifeCycleHelpdesk();
 | |
|                } else {
 | |
|                   $item->showFormLifeCycle();
 | |
|                }
 | |
|                break;
 | |
| 
 | |
|             case 5 :
 | |
|                $item->showFormManagement();
 | |
|                break;
 | |
| 
 | |
|             case 6 :
 | |
|                if ($item->fields['interface'] == 'helpdesk') {
 | |
|                   $item->showFormToolsHelpdesk();
 | |
|                } else {
 | |
|                   $item->showFormTools();
 | |
|                }
 | |
|                break;
 | |
| 
 | |
|             case 7 :
 | |
|                $item->showFormAdmin();
 | |
|                break;
 | |
| 
 | |
|             case 8 :
 | |
|                if ($item->fields['interface'] == 'helpdesk') {
 | |
|                   $item->showFormSetupHelpdesk();
 | |
|                } else {
 | |
|                   $item->showFormSetup();
 | |
|                }
 | |
|                break;
 | |
|          }
 | |
|       }
 | |
|       return true;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function post_updateItem($history = 1) {
 | |
|       global $DB;
 | |
| 
 | |
|       if (count($this->profileRight) > 0) {
 | |
|          ProfileRight::updateProfileRights($this->getID(), $this->profileRight);
 | |
|          unset($this->profileRight);
 | |
|       }
 | |
| 
 | |
|       if (in_array('is_default', $this->updates) && ($this->input["is_default"] == 1)) {
 | |
|          $DB->update(
 | |
|             $this->getTable(), [
 | |
|                'is_default' => 0
 | |
|             ], [
 | |
|                'id' => ['<>', $this->input['id']]
 | |
|             ]
 | |
|          );
 | |
|       }
 | |
| 
 | |
|       // To avoid log out and login when rights change (very useful in debug mode)
 | |
|       if (isset($_SESSION['glpiactiveprofile']['id'])
 | |
|             && $_SESSION['glpiactiveprofile']['id'] == $this->input['id']) {
 | |
| 
 | |
|          if (in_array('helpdesk_item_type', $this->updates)) {
 | |
|             $_SESSION['glpiactiveprofile']['helpdesk_item_type'] = importArrayFromDB($this->input['helpdesk_item_type']);
 | |
|          }
 | |
| 
 | |
|          if (in_array('managed_domainrecordtypes', $this->updates)) {
 | |
|             $_SESSION['glpiactiveprofile']['managed_domainrecordtypes'] = importArrayFromDB($this->input['managed_domainrecordtypes']);
 | |
|          }
 | |
| 
 | |
|          ///TODO other needed fields
 | |
|       }
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function post_addItem() {
 | |
|       global $DB;
 | |
| 
 | |
|       $rights = ProfileRight::getAllPossibleRights();
 | |
|       ProfileRight::updateProfileRights($this->fields['id'], $rights);
 | |
|       unset($this->profileRight);
 | |
| 
 | |
|       if (isset($this->fields['is_default']) && ($this->fields["is_default"] == 1)) {
 | |
|          $DB->update(
 | |
|             $this->getTable(), [
 | |
|                'is_default' => 0
 | |
|             ], [
 | |
|                'id' => ['<>', $this->fields['id']]
 | |
|             ]
 | |
|          );
 | |
|       }
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function cleanDBonPurge() {
 | |
| 
 | |
|       $this->deleteChildrenAndRelationsFromDb(
 | |
|          [
 | |
|             KnowbaseItem_Profile::class,
 | |
|             Profile_Reminder::class,
 | |
|             Profile_RSSFeed::class,
 | |
|             Profile_User::class,
 | |
|             ProfileRight::class,
 | |
|          ]
 | |
|       );
 | |
| 
 | |
|       Rule::cleanForItemAction($this);
 | |
|       // PROFILES and UNIQUE_PROFILE in RuleMailcollector
 | |
|       Rule::cleanForItemCriteria($this, 'PROFILES');
 | |
|       Rule::cleanForItemCriteria($this, 'UNIQUE_PROFILE');
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function prepareInputForUpdate($input) {
 | |
| 
 | |
|       if (isset($input["_helpdesk_item_types"])) {
 | |
|          if ((!isset($input["helpdesk_item_type"])) || (!is_array($input["helpdesk_item_type"]))) {
 | |
|             $input["helpdesk_item_type"] = [];
 | |
|          }
 | |
|          // Linear_HIT: $input["helpdesk_item_type"] = array_keys($input["helpdesk_item_type"]
 | |
|          $input["helpdesk_item_type"] = exportArrayToDB($input["helpdesk_item_type"]);
 | |
|       }
 | |
| 
 | |
|       if (isset($input["_managed_domainrecordtypes"])) {
 | |
|          if ((!isset($input["managed_domainrecordtypes"])) || (!is_array($input["managed_domainrecordtypes"]))) {
 | |
|             $input["managed_domainrecordtypes"] = [];
 | |
|          }
 | |
|          if (in_array(-1, $input['managed_domainrecordtypes'])) {
 | |
|             //when all selected, keep only all
 | |
|             $input['managed_domainrecordtypes'] = [-1];
 | |
|          }
 | |
|          $input["managed_domainrecordtypes"] = exportArrayToDB($input["managed_domainrecordtypes"]);
 | |
|       }
 | |
| 
 | |
|       if (isset($input['helpdesk_hardware']) && is_array($input['helpdesk_hardware'])) {
 | |
|          $helpdesk_hardware = 0;
 | |
|          foreach ($input['helpdesk_hardware'] as $right => $value) {
 | |
|             if ($value) {
 | |
|                $helpdesk_hardware += $right;
 | |
|             }
 | |
|          }
 | |
|          $input['helpdesk_hardware'] = $helpdesk_hardware;
 | |
|       }
 | |
| 
 | |
|       if (isset($input["_cycle_ticket"])) {
 | |
|          $tab   = array_keys(Ticket::getAllStatusArray());
 | |
|          $cycle = [];
 | |
|          foreach ($tab as $from) {
 | |
|             foreach ($tab as $dest) {
 | |
|                if (($from != $dest)
 | |
|                    && (!isset($input["_cycle_ticket"][$from][$dest])
 | |
|                       || ($input["_cycle_ticket"][$from][$dest] == 0))) {
 | |
|                   $cycle[$from][$dest] = 0;
 | |
|                }
 | |
|             }
 | |
|          }
 | |
|          $input["ticket_status"] = exportArrayToDB($cycle);
 | |
|       }
 | |
| 
 | |
|       if (isset($input["_cycle_problem"])) {
 | |
|          $tab   = Problem::getAllStatusArray();
 | |
|          $cycle = [];
 | |
|          foreach ($tab as $from => $label) {
 | |
|             foreach ($tab as $dest => $label2) {
 | |
|                if (($from !== $dest)
 | |
|                    && ($input["_cycle_problem"][$from][$dest] == 0)) {
 | |
|                   $cycle[$from][$dest] = 0;
 | |
|                }
 | |
|             }
 | |
|          }
 | |
|          $input["problem_status"] = exportArrayToDB($cycle);
 | |
|       }
 | |
| 
 | |
|       if (isset($input["_cycle_change"])) {
 | |
|          $tab   = Change::getAllStatusArray();
 | |
|          $cycle = [];
 | |
|          foreach ($tab as $from => $label) {
 | |
|             foreach ($tab as $dest => $label2) {
 | |
|                if (($from !== $dest)
 | |
|                    && ($input["_cycle_change"][$from][$dest] == 0)) {
 | |
|                   $cycle[$from][$dest] = 0;
 | |
|                }
 | |
|             }
 | |
|          }
 | |
|          $input["change_status"] = exportArrayToDB($cycle);
 | |
|       }
 | |
| 
 | |
|       $this->profileRight = [];
 | |
|       foreach (array_keys(ProfileRight::getAllPossibleRights()) as $right) {
 | |
|          if (isset($input['_'.$right])) {
 | |
|             if (!is_array($input['_'.$right])) {
 | |
|                $input['_'.$right] = ['1' => $input['_'.$right]];
 | |
|             }
 | |
|             $newvalue = 0;
 | |
|             foreach ($input['_'.$right] as $value => $valid) {
 | |
|                if ($valid) {
 | |
|                   if (($underscore_pos = strpos($value, '_')) !== false) {
 | |
|                      $value = substr($value, 0, $underscore_pos);
 | |
|                   }
 | |
|                   $newvalue += $value;
 | |
|                }
 | |
|             }
 | |
|             // Update rights only if changed
 | |
|             if (!isset($this->fields[$right]) || ($this->fields[$right] != $newvalue)) {
 | |
|                $this->profileRight[$right] = $newvalue;
 | |
|             }
 | |
|             unset($input['_'.$right]);
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       // check if right if the last write profile on Profile object
 | |
|       if (($this->fields['profile'] & UPDATE)
 | |
|           && isset($input['profile']) && !($input['profile'] & UPDATE)
 | |
|           && (countElementsInTable("glpi_profilerights",
 | |
|                                    ['name' => 'profile', 'rights' => ['&',  UPDATE]]))) {
 | |
|          Session::addMessageAfterRedirect(__("This profile is the last with write rights on profiles"),
 | |
|          false, ERROR);
 | |
|          Session::addMessageAfterRedirect(__("Deletion refused"), false, ERROR);
 | |
|          unset($input["profile"]);
 | |
|       }
 | |
|       return $input;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * check right before delete
 | |
|     *
 | |
|     * @since 0.85
 | |
|     *
 | |
|     * @return boolean
 | |
|    **/
 | |
|    function pre_deleteItem() {
 | |
|       if (($this->fields['profile'] & DELETE)
 | |
|           && (countElementsInTable("glpi_profilerights",
 | |
|                                    ['name' => 'profile', 'rights' => ['&', DELETE]]))) {
 | |
|           Session::addMessageAfterRedirect(__("This profile is the last with write rights on profiles"),
 | |
|                                            false, ERROR);
 | |
|           Session::addMessageAfterRedirect(__("Deletion refused"), false, ERROR);
 | |
|           return false;
 | |
|       }
 | |
|       return true;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function prepareInputForAdd($input) {
 | |
| 
 | |
|       if (isset($input["helpdesk_item_type"])) {
 | |
|          $input["helpdesk_item_type"] = exportArrayToDB($input["helpdesk_item_type"]);
 | |
|       }
 | |
| 
 | |
|       if (isset($input["managed_domainrecordtypes"])) {
 | |
|          $input["managed_domainrecordtypes"] = exportArrayToDB($input["managed_domainrecordtypes"]);
 | |
|       }
 | |
| 
 | |
|       $this->profileRight = [];
 | |
|       foreach (array_keys(ProfileRight::getAllPossibleRights()) as $right) {
 | |
|          if (isset($input[$right])) {
 | |
|             $this->profileRight[$right] = $input[$right];
 | |
|             unset($input[$right]);
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       // Set default values, only needed for helpdesk
 | |
|       $interface = isset($input['interface']) ? $input['interface'] : "";
 | |
|       if ($interface == "helpdesk" && !isset($input["_cycle_ticket"])) {
 | |
|          $tab   = array_keys(Ticket::getAllStatusArray());
 | |
|          $cycle = [];
 | |
|          foreach ($tab as $from) {
 | |
|             foreach ($tab as $dest) {
 | |
|                if ($from != $dest) {
 | |
|                   $cycle[$from][$dest] = 0;
 | |
|                }
 | |
|             }
 | |
|          }
 | |
|          $input["ticket_status"] = exportArrayToDB($cycle);
 | |
|       }
 | |
| 
 | |
|       return $input;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Unset unused rights for helpdesk
 | |
|    **/
 | |
|    function cleanProfile() {
 | |
| 
 | |
|       if (isset($this->fields['interface']) && $this->fields["interface"] == "helpdesk") {
 | |
|          foreach ($this->fields as $key=>$val) {
 | |
|             if (!in_array($key, self::$common_fields)
 | |
|                 && !in_array($key, self::$helpdesk_rights)) {
 | |
|                unset($this->fields[$key]);
 | |
|             }
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       // decode array
 | |
|       if (isset($this->fields["helpdesk_item_type"])
 | |
|           && !is_array($this->fields["helpdesk_item_type"])) {
 | |
| 
 | |
|          $this->fields["helpdesk_item_type"] = importArrayFromDB($this->fields["helpdesk_item_type"]);
 | |
|       }
 | |
| 
 | |
|       // Empty/NULL case
 | |
|       if (!isset($this->fields["helpdesk_item_type"])
 | |
|           || !is_array($this->fields["helpdesk_item_type"])) {
 | |
| 
 | |
|          $this->fields["helpdesk_item_type"] = [];
 | |
|       }
 | |
| 
 | |
|       // decode array
 | |
|       if (isset($this->fields["managed_domainrecordtypes"])
 | |
|           && !is_array($this->fields["managed_domainrecordtypes"])) {
 | |
| 
 | |
|          $this->fields["managed_domainrecordtypes"] = importArrayFromDB($this->fields["managed_domainrecordtypes"]);
 | |
|       }
 | |
| 
 | |
|       // Empty/NULL case
 | |
|       if (!isset($this->fields["managed_domainrecordtypes"])
 | |
|           || !is_array($this->fields["managed_domainrecordtypes"])) {
 | |
| 
 | |
|          $this->fields["managed_domainrecordtypes"] = [];
 | |
|       }
 | |
| 
 | |
|       // Decode status array
 | |
|       $fields_to_decode = ['ticket_status', 'problem_status', 'change_status'];
 | |
|       foreach ($fields_to_decode as $val) {
 | |
|          if (isset($this->fields[$val]) && !is_array($this->fields[$val])) {
 | |
|             $this->fields[$val] = importArrayFromDB($this->fields[$val]);
 | |
|             // Need to be an array not a null value
 | |
|             if (is_null($this->fields[$val])) {
 | |
|                $this->fields[$val] = [];
 | |
|             }
 | |
|          }
 | |
|       }
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Get SQL restrict criteria to determine profiles with less rights than the active one
 | |
|     *
 | |
|     * @since 9.3.1
 | |
|     *
 | |
|     * @return array
 | |
|    **/
 | |
|    static function getUnderActiveProfileRestrictCriteria() {
 | |
| 
 | |
|       // Not logged -> no profile to see
 | |
|       if (!isset($_SESSION['glpiactiveprofile'])) {
 | |
|          return [0];
 | |
|       }
 | |
| 
 | |
|       // Profile right : may modify profile so can attach all profile
 | |
|       if (Profile::canCreate()) {
 | |
|          return [1];
 | |
|       }
 | |
| 
 | |
|       $criteria = ['glpi_profiles.interface' => Session::getCurrentInterface()];
 | |
| 
 | |
|       // First, get all possible rights
 | |
|       $right_subqueries = [];
 | |
|       foreach (ProfileRight::getAllPossibleRights() as $key => $default) {
 | |
|          $val = isset($_SESSION['glpiactiveprofile'][$key])?$_SESSION['glpiactiveprofile'][$key]:0;
 | |
| 
 | |
|          if (!is_array($val) // Do not include entities field added by login
 | |
|              && (Session::getCurrentInterface() == 'central'
 | |
|                  || in_array($key, self::$helpdesk_rights))) {
 | |
|             $right_subqueries[] = [
 | |
|                'glpi_profilerights.name'     => $key,
 | |
|                'RAW'                         => [
 | |
|                   '(' . DBmysql::quoteName('glpi_profilerights.rights') . ' | ' . DBmysql::quoteValue($val) . ')' => $val
 | |
|                ]
 | |
|             ];
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       $sub_query = new QuerySubQuery([
 | |
|          'FROM'   => 'glpi_profilerights',
 | |
|          'COUNT'  => 'cpt',
 | |
|          'WHERE'  => [
 | |
|             'glpi_profilerights.profiles_id' => new \QueryExpression(\DBmysql::quoteName('glpi_profiles.id')),
 | |
|             'OR'                             => $right_subqueries
 | |
|          ]
 | |
|       ]);
 | |
|       $criteria[] = new \QueryExpression(count($right_subqueries)." = ".$sub_query->getQuery());
 | |
| 
 | |
|       if (Session::getCurrentInterface() == 'central') {
 | |
|          return [
 | |
|             'OR'  => [
 | |
|                'glpi_profiles.interface' => 'helpdesk',
 | |
|                $criteria
 | |
|             ]
 | |
|          ];
 | |
|       }
 | |
| 
 | |
|       return $criteria;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Is the current user have more right than all profiles in parameters
 | |
|     *
 | |
|     * @param $IDs array of profile ID to test
 | |
|     *
 | |
|     * @return boolean true if have more right
 | |
|    **/
 | |
|    static function currentUserHaveMoreRightThan($IDs = []) {
 | |
|       global $DB;
 | |
| 
 | |
|       if (Session::isCron()) {
 | |
|          return true;
 | |
|       }
 | |
|       if (count($IDs) == 0) {
 | |
|          // Check all profiles (means more right than all possible profiles)
 | |
|          return (countElementsInTable('glpi_profiles')
 | |
|                      == countElementsInTable('glpi_profiles',
 | |
|                                              self::getUnderActiveProfileRestrictCriteria()));
 | |
|       }
 | |
|       $under_profiles = [];
 | |
| 
 | |
|       $iterator = $DB->request([
 | |
|          'FROM'   => self::getTable(),
 | |
|          'WHERE'  => self::getUnderActiveProfileRestrictCriteria()
 | |
|       ]);
 | |
| 
 | |
|       while ($data = $iterator->next()) {
 | |
|          $under_profiles[$data['id']] = $data['id'];
 | |
|       }
 | |
| 
 | |
|       foreach ($IDs as $ID) {
 | |
|          if (!isset($under_profiles[$ID])) {
 | |
|             return false;
 | |
|          }
 | |
|       }
 | |
|       return true;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function showLegend() {
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
|       echo "<table class='tab_cadre_fixe'>";
 | |
|       echo "<tr class='tab_bg_2'><td width='70' style='text-decoration:underline' class='b'>";
 | |
|       echo __('Caption')."</td>";
 | |
|       echo "<td class='tab_bg_4' width='15' style='border:1px solid black'></td>";
 | |
|       echo "<td class='b'>".__('Global right')."</td></tr>\n";
 | |
|       echo "<tr class='tab_bg_2'><td></td>";
 | |
|       echo "<td class='tab_bg_2' width='15' style='border:1px solid black'></td>";
 | |
|       echo "<td class='b'>".__('Entity right')."</td></tr>";
 | |
|       echo "</table></div>\n";
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function post_getEmpty() {
 | |
|       $this->fields["interface"] = "helpdesk";
 | |
|       $this->fields["name"]      = __('Without name');
 | |
|       ProfileRight::cleanAllPossibleRights();
 | |
|       $this->fields = array_merge($this->fields, ProfileRight::getAllPossibleRights());
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function post_getFromDB() {
 | |
|       $this->fields = array_merge($this->fields, ProfileRight::getProfileRights($this->getID()));
 | |
|    }
 | |
| 
 | |
|    /**
 | |
|     * Print the profile form headers
 | |
|     *
 | |
|     * @param $ID        integer : Id of the item to print
 | |
|     * @param $options   array of possible options
 | |
|     *     - target filename : where to go when done.
 | |
|     *     - withtemplate boolean : template or basic item
 | |
|     *
 | |
|     * @return boolean item found
 | |
|     **/
 | |
|    function showForm($ID, $options = []) {
 | |
| 
 | |
|       $onfocus = "";
 | |
|       $new     = false;
 | |
|       $rowspan = 4;
 | |
|       if ($ID > 0) {
 | |
|          $rowspan++;
 | |
|          $this->check($ID, READ);
 | |
|       } else {
 | |
|          // Create item
 | |
|          $this->check(-1, CREATE);
 | |
|          $onfocus = "onfocus=\"if (this.value=='".$this->fields["name"]."') this.value='';\"";
 | |
|          $new     = true;
 | |
|       }
 | |
| 
 | |
|       $rand = mt_rand();
 | |
| 
 | |
|       $this->showFormHeader($options);
 | |
| 
 | |
|       echo "<tr class='tab_bg_1'><td>".__('Name')."</td>";
 | |
|       echo "<td><input type='text' name='name' value=\"".$this->fields["name"]."\" $onfocus></td>";
 | |
|       echo "<td rowspan='$rowspan' class='middle right'>".__('Comments')."</td>";
 | |
|       echo "<td class='center middle' rowspan='$rowspan'>";
 | |
|       echo "<textarea cols='45' rows='4' name='comment' >".$this->fields["comment"]."</textarea>";
 | |
|       echo "</td></tr>";
 | |
| 
 | |
|       echo "<tr class='tab_bg_1'><td>".__('Default profile')."</td><td>";
 | |
|       Html::showCheckbox(['name'    => 'is_default',
 | |
|                                'checked' => $this->fields['is_default']]);
 | |
|       echo "</td></tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_1'><td>".__("Profile's interface")."</td>";
 | |
|       echo "<td>";
 | |
|       Dropdown::showFromArray('interface', self::getInterfaces(),
 | |
|                               ['value'=>$this->fields["interface"]]);
 | |
|       echo "</td></tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_1'><td>".__('Update password')."</td><td>";
 | |
|       Html::showCheckbox(['name'    => '_password_update',
 | |
|                                'checked' => $this->fields['password_update']]);
 | |
|       echo "</td></tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_1'><td>".__('Ticket creation form on login')."</td><td>";
 | |
|       Html::showCheckbox(['name'    => 'create_ticket_on_login',
 | |
|                                'checked' => $this->fields['create_ticket_on_login']]);
 | |
|       echo "</td></tr>\n";
 | |
| 
 | |
|       $this->showFormButtons($options);
 | |
| 
 | |
|       return true;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Print the helpdesk right form for the current profile
 | |
|     *
 | |
|     * @since 0.85
 | |
|    **/
 | |
|    function showFormTrackingHelpdesk() {
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
|       if ($canedit = Session::haveRightsOr(self::$rightname, [CREATE, UPDATE, PURGE])) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       $matrix_options = ['canedit'       => $canedit,
 | |
|                               'default_class' => 'tab_bg_2'];
 | |
| 
 | |
|       $rights = [['rights'     => Profile::getRightsFor('Ticket', 'helpdesk'),
 | |
|                             'label'      => _n('Ticket', 'Tickets', Session::getPluralNumber()),
 | |
|                             'field'      => 'ticket'],
 | |
|                       ['rights'     => Profile::getRightsFor('ITILFollowup', 'helpdesk'),
 | |
|                             'label'      => _n('Followup', 'Followups', Session::getPluralNumber()),
 | |
|                             'field'      => 'followup'],
 | |
|                       ['rights'     => Profile::getRightsFor('TicketTask', 'helpdesk'),
 | |
|                             'label'      => _n('Task', 'Tasks', Session::getPluralNumber()),
 | |
|                             'field'      => 'task'],
 | |
|                       ['rights'     => Profile::getRightsFor('TicketValidation', 'helpdesk'),
 | |
|                             'label'      => _n('Validation', 'Validations', Session::getPluralNumber()),
 | |
|                             'field'      => 'ticketvalidation']];
 | |
| 
 | |
|       $matrix_options['title'] = __('Assistance');
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       echo "<table class='tab_cadre_fixehov'>";
 | |
|       echo "<tr class='tab_bg_5'><th colspan='2'>".__('Association')."</th></tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_2'>";
 | |
|       echo "<td width=30%>".__('See hardware of my groups')."</td><td>";
 | |
|       Html::showCheckbox(['name'    => '_show_group_hardware',
 | |
|                                'checked' => $this->fields['show_group_hardware']]);
 | |
|       echo "</td></tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_2'>";
 | |
|       echo "<td>".__('Link with items for the creation of tickets')."</td>";
 | |
|       echo "<td>";
 | |
|       self::getLinearRightChoice(self::getHelpdeskHardwareTypes(true),
 | |
|                                  ['field' => 'helpdesk_hardware',
 | |
|                                        'value' => $this->fields['helpdesk_hardware']]);
 | |
|       echo "</td></tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_2'>";
 | |
|       echo "<td>".__('Associable items to a ticket')."</td>";
 | |
|       echo "<td><input type='hidden' name='_helpdesk_item_types' value='1'>";
 | |
|       self::dropdownHelpdeskItemtypes(['values' => $this->fields["helpdesk_item_type"]]);
 | |
| 
 | |
|       echo "</td>";
 | |
|       echo "</tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_2'>";
 | |
|       echo "<td>".__('Default ticket template')."</td><td>";
 | |
|       // Only root entity ones and recursive
 | |
|       $options = ['value'     => $this->fields["tickettemplates_id"],
 | |
|                        'entity'    => 0];
 | |
|       if (Session::isMultiEntitiesMode()) {
 | |
|          $options['condition'] = ['is_recursive' => 1];
 | |
|       }
 | |
|       // Only add profile if on root entity
 | |
|       if (!isset($_SESSION['glpiactiveentities'][0])) {
 | |
|          $options['addicon'] = false;
 | |
|       }
 | |
|       TicketTemplate::dropdown($options);
 | |
|       echo "</td>";
 | |
|       echo "</tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_2'>";
 | |
|       echo "<td>".__('Default change template')."</td><td>";
 | |
|       // Only root entity ones and recursive
 | |
|       $options = ['value'     => $this->fields["changetemplates_id"],
 | |
|                        'entity'    => 0];
 | |
|       if (Session::isMultiEntitiesMode()) {
 | |
|          $options['condition'] = ['is_recursive' => 1];
 | |
|       }
 | |
|       // Only add profile if on root entity
 | |
|       if (!isset($_SESSION['glpiactiveentities'][0])) {
 | |
|          $options['addicon'] = false;
 | |
|       }
 | |
|       ChangeTemplate::dropdown($options);
 | |
|       echo "</td>";
 | |
|       echo "</tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_2'>";
 | |
|       echo "<td>".__('Default problem template')."</td><td>";
 | |
|       // Only root entity ones and recursive
 | |
|       $options = ['value'     => $this->fields["problemtemplates_id"],
 | |
|                        'entity'    => 0];
 | |
|       if (Session::isMultiEntitiesMode()) {
 | |
|          $options['condition'] = ['is_recursive' => 1];
 | |
|       }
 | |
|       // Only add profile if on root entity
 | |
|       if (!isset($_SESSION['glpiactiveentities'][0])) {
 | |
|          $options['addicon'] = false;
 | |
|       }
 | |
|       ProblemTemplate::dropdown($options);
 | |
|       echo "</td>";
 | |
|       echo "</tr>\n";
 | |
| 
 | |
|       if ($canedit) {
 | |
|          echo "<tr class='tab_bg_1'>";
 | |
|          echo "<td colspan='4' class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</td></tr>\n";
 | |
|          echo "</table>\n";
 | |
|          Html::closeForm();
 | |
|       } else {
 | |
|          echo "</table>\n";
 | |
|       }
 | |
|       echo "</div>";
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Print the helpdesk right form for the current profile
 | |
|     *
 | |
|     * @since 0.85
 | |
|    **/
 | |
|    function showFormToolsHelpdesk() {
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
|       if ($canedit = Session::haveRightsOr(self::$rightname, [CREATE, UPDATE, PURGE])) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       $matrix_options = ['canedit'       => $canedit,
 | |
|                               'default_class' => 'tab_bg_2'];
 | |
| 
 | |
|       $rights = [['rights'    => Profile::getRightsFor('KnowbaseItem', 'helpdesk'),
 | |
|                             'label'     => __('FAQ'),
 | |
|                             'field'     => 'knowbase'],
 | |
|                       ['rights'  => Profile::getRightsFor('ReservationItem', 'helpdesk'),
 | |
|                             'label'     => _n('Reservation', 'Reservations', Session::getPluralNumber()),
 | |
|                             'field'     => 'reservation'],
 | |
|                       ['rights'    => Profile::getRightsFor('Reminder', 'helpdesk'),
 | |
|                             'label'     => _n('Public reminder', 'Public reminders', Session::getPluralNumber()),
 | |
|                             'field'     => 'reminder_public'],
 | |
|                       ['rights'    => Profile::getRightsFor('RSSFeed', 'helpdesk'),
 | |
|                             'label'     => _n('Public RSS feed', 'Public RSS feeds', Session::getPluralNumber()),
 | |
|                             'field'     => 'rssfeed_public']];
 | |
| 
 | |
|       $matrix_options['title'] = __('Tools');
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       if ($canedit) {
 | |
|          echo "<div class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</div>\n";
 | |
|          Html::closeForm();
 | |
|       }
 | |
|       echo "</div>";
 | |
|    }
 | |
| 
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Print the Asset rights form for the current profile
 | |
|     *
 | |
|     * @since 0.85
 | |
|     *
 | |
|     * @param $openform  boolean open the form (true by default)
 | |
|     * @param $closeform boolean close the form (true by default)
 | |
|     *
 | |
|    **/
 | |
|    function showFormAsset($openform = true, $closeform = true) {
 | |
| 
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
|       if (($canedit = Session::haveRightsOr(self::$rightname, [UPDATE, CREATE, PURGE]))
 | |
|           && $openform) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       $rights = [['itemtype'  => 'Computer',
 | |
|                             'label'     => _n('Computer', 'Computers', Session::getPluralNumber()),
 | |
|                             'field'     => 'computer'],
 | |
|                       ['itemtype'  => 'Monitor',
 | |
|                             'label'     => _n('Monitor', 'Monitors', Session::getPluralNumber()),
 | |
|                             'field'     => 'monitor'],
 | |
|                       ['itemtype'  => 'Software',
 | |
|                             'label'     => _n('Software', 'Software', Session::getPluralNumber()),
 | |
|                             'field'     => 'software'],
 | |
|                       ['itemtype'  => 'NetworkEquipment',
 | |
|                             'label'     => _n('Network', 'Networks', Session::getPluralNumber()),
 | |
|                             'field'     => 'networking'],
 | |
|                       ['itemtype'  => 'Printer',
 | |
|                             'label'     => _n('Printer', 'Printers', Session::getPluralNumber()),
 | |
|                             'field'     => 'printer'],
 | |
|                       ['itemtype'  => 'Cartridge',
 | |
|                             'label'     => _n('Cartridge', 'Cartridges', Session::getPluralNumber()),
 | |
|                             'field'     => 'cartridge'],
 | |
|                       ['itemtype'  => 'Consumable',
 | |
|                             'label'     => _n('Consumable', 'Consumables', Session::getPluralNumber()),
 | |
|                             'field'     => 'consumable'],
 | |
|                       ['itemtype'  => 'Phone',
 | |
|                             'label'     => Phone::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'phone'],
 | |
|                       ['itemtype'  => 'Peripheral',
 | |
|                             'label'     => Peripheral::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'peripheral'],
 | |
|                       ['itemtype'  => 'NetworkName',
 | |
|                             'label'     => __('Internet'),
 | |
|                             'field'     => 'internet'],
 | |
|                       ['itemtype'  => 'DeviceSimcard',
 | |
|                             'label'     => __('Simcard PIN/PUK'),
 | |
|                             'field'     => 'devicesimcard_pinpuk',
 | |
|                             'rights'    => [READ    => __('Read'),
 | |
|                                             UPDATE  => __('Update')]]];
 | |
| 
 | |
|       $this->displayRightsChoiceMatrix($rights, ['canedit'       => $canedit,
 | |
|                                                       'default_class' => 'tab_bg_2',
 | |
|                                                       'title'         => __('Assets')]);
 | |
| 
 | |
|       if ($canedit
 | |
|           && $closeform) {
 | |
|          echo "<div class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</div>\n";
 | |
|          Html::closeForm();
 | |
|       }
 | |
| 
 | |
|       echo "</div>";
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Print the Management rights form for the current profile
 | |
|     *
 | |
|     * @since 0.85 (before showFormInventory)
 | |
|     *
 | |
|     * @param $openform  boolean open the form (true by default)
 | |
|     * @param $closeform boolean close the form (true by default)
 | |
|    **/
 | |
|    function showFormManagement($openform = true, $closeform = true) {
 | |
| 
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
| 
 | |
|       if (($canedit = Session::haveRightsOr(self::$rightname, [UPDATE, CREATE, PURGE]))
 | |
|           && $openform) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       $matrix_options = ['canedit'       => $canedit,
 | |
|                               'default_class' => 'tab_bg_2'];
 | |
| 
 | |
|       $rights = [['itemtype'  => 'SoftwareLicense',
 | |
|                             'label'     => SoftwareLicense::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'license'],
 | |
|                       ['itemtype'  => 'Contact',
 | |
|                             'label'     => _n('Contact', 'Contacts', Session::getPluralNumber())." / ".
 | |
|                                            _n('Supplier', 'Suppliers', Session::getPluralNumber()),
 | |
|                             'field'     => 'contact_enterprise'],
 | |
|                       ['itemtype'  => 'Document',
 | |
|                             'label'     => Document::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'document'],
 | |
|                       ['itemtype'  => 'Contract',
 | |
|                             'label'     => _n('Contract', 'Contracts', Session::getPluralNumber()),
 | |
|                             'field'     => 'contract'],
 | |
|                       ['itemtype'  => 'Infocom',
 | |
|                             'label'     => __('Financial and administratives information'),
 | |
|                             'field'     => 'infocom'],
 | |
|                       ['itemtype'  => 'Budget',
 | |
|                             'label'     => Budget::getTypeName(1),
 | |
|                             'field'     => 'budget'],
 | |
|                       ['itemtype'  => 'Line',
 | |
|                             'label'     => Line::getTypeName(1),
 | |
|                             'field'     => 'line'],
 | |
|                       ['itemtype'  => 'Certificate',
 | |
|                             'label'     => _n('Certificate', 'Certificates',
 | |
|                                               Session::getPluralNumber()),
 | |
|                             'field'     => 'certificate'],
 | |
|                       ['itemtype'  => 'Datacenter',
 | |
|                             'label'     => Datacenter::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'datacenter'],
 | |
|                       ['itemtype'  => 'Cluster',
 | |
|                             'label'     => Cluster::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'cluster'],
 | |
|                       ['itemtype'  => 'Domain',
 | |
|                             'label'     => _n('Domain', 'Domains', Session::getPluralNumber()),
 | |
|                             'field'     => 'domain'],
 | |
|                       ['itemtype'  => 'Appliance',
 | |
|                             'label'     => Appliance::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'appliance'],
 | |
|                   ];
 | |
|       $matrix_options['title'] = __('Management');
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       echo "<div class='tab_cadre_fixehov'>";
 | |
|       echo "<input type='hidden' name='_managed_domainrecordtypes' value='1'>";
 | |
|       $rand = rand();
 | |
|       echo "<label for='dropdown_managed_domainrecordtypes$rand'>".__('Manageable domain records')."</label>";
 | |
|       $values = ['-1' => __('All')];
 | |
|       $values += $this->getDomainRecordTypes();
 | |
|       Dropdown::showFromArray(
 | |
|          'managed_domainrecordtypes',
 | |
|          $values, [
 | |
|             'display'   => true,
 | |
|             'multiple'  => true,
 | |
|             'size'      => 3,
 | |
|             'rand'      => $rand,
 | |
|             'values'    => $this->fields['managed_domainrecordtypes']
 | |
|          ]
 | |
|       );
 | |
|       echo "</div>\n";
 | |
| 
 | |
|       if ($canedit
 | |
|           && $closeform) {
 | |
|          echo "<div class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</div>\n";
 | |
|          Html::closeForm();
 | |
|       }
 | |
|       echo "</div>";
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Print the Tools rights form for the current profile
 | |
|     *
 | |
|     * @since 0.85
 | |
|     *
 | |
|     * @param $openform  boolean open the form (true by default)
 | |
|     * @param $closeform boolean close the form (true by default)
 | |
|    **/
 | |
|    function showFormTools($openform = true, $closeform = true) {
 | |
| 
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
| 
 | |
|       if (($canedit = Session::haveRightsOr(self::$rightname, [UPDATE, CREATE, PURGE]))
 | |
|           && $openform) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       $matrix_options = ['canedit'       => $canedit,
 | |
|                               'default_class' => 'tab_bg_2'];
 | |
| 
 | |
|       $rights = [['itemtype'  => 'Reminder',
 | |
|                             'label'     => _n('Public reminder', 'Public reminders', Session::getPluralNumber()),
 | |
|                             'field'     => 'reminder_public'],
 | |
|                       ['itemtype'  => 'RSSFeed',
 | |
|                             'label'     => _n('Public RSS feed', 'Public RSS feeds', Session::getPluralNumber()),
 | |
|                             'field'     => 'rssfeed_public'],
 | |
|                       ['itemtype'  => 'SavedSearch',
 | |
|                             'label'     => _n('Public saved search', 'Public saved searches', Session::getPluralNumber()),
 | |
|                             'field'     => 'bookmark_public'],
 | |
|                       ['itemtype'  => 'Report',
 | |
|                             'label'     => _n('Report', 'Reports', Session::getPluralNumber()),
 | |
|                             'field'     => 'reports'],
 | |
|                       ['itemtype'  => 'KnowbaseItem',
 | |
|                             'label'     => __('Knowledge base'),
 | |
|                             'field'     => 'knowbase'],
 | |
|                       ['itemtype'  => 'ReservationItem',
 | |
|                             'label'     => __('Administration of reservations'),
 | |
|                             'field'     => 'reservation']];
 | |
|       $matrix_options['title'] = __('Tools');
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       $rights = [['itemtype'   => 'Project',
 | |
|                             'label'      => _n('Project', 'Projects', Session::getPluralNumber()),
 | |
|                             'field'      => 'project'],
 | |
|                       ['itemtype'   => 'ProjectTask',
 | |
|                             'label'      => _n('Task', 'Task', Session::getPluralNumber()),
 | |
|                             'field'      => 'projecttask']];
 | |
|       $matrix_options['title'] = _n('Project', 'Projects', Session::getPluralNumber());
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       if ($canedit
 | |
|           && $closeform) {
 | |
|          echo "<div class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</div>\n";
 | |
|          Html::closeForm();
 | |
|       }
 | |
|       echo "</div>";
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Print the Tracking right form for the current profile
 | |
|     *
 | |
|     * @param $openform     boolean  open the form (true by default)
 | |
|     * @param $closeform    boolean  close the form (true by default)
 | |
|    **/
 | |
|    function showFormTracking($openform = true, $closeform = true) {
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
|       if (($canedit = Session::haveRightsOr(self::$rightname, [CREATE, UPDATE, PURGE]))
 | |
|           && $openform) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       echo "<table class='tab_cadre_fixe'>";
 | |
|       // Assistance / Tracking-helpdesk
 | |
|       echo "<tr class='tab_bg_1'><th colspan='2'>".__('ITIL Templates')."</th></tr>\n";
 | |
| 
 | |
|       foreach (['Ticket', 'Change', 'Problem'] as $itiltype) {
 | |
|          $object = new $itiltype;
 | |
|          echo "<tr class='tab_bg_2'>";
 | |
|          echo "<td>".sprintf(__('Default %1$s template'), $object->getTypeName())."</td><td  width='30%'>";
 | |
|          // Only root entity ones and recursive
 | |
|          $options = [
 | |
|             'value'     => $this->fields[strtolower($itiltype)."templates_id"],
 | |
|             'entity'    => 0];
 | |
|          if (Session::isMultiEntitiesMode()) {
 | |
|             $options['condition'] = ['is_recursive' => 1];
 | |
|          }
 | |
|          // Only add profile if on root entity
 | |
|          if (!isset($_SESSION['glpiactiveentities'][0])) {
 | |
|             $options['addicon'] = false;
 | |
|          }
 | |
| 
 | |
|          $tpl_class = $itiltype . 'Template';
 | |
|          $tpl_class::dropdown($options);
 | |
|          echo "</td></tr>\n";
 | |
|       }
 | |
| 
 | |
|       echo "</table>";
 | |
| 
 | |
|       $matrix_options = ['canedit'       => $canedit,
 | |
|                               'default_class' => 'tab_bg_2'];
 | |
| 
 | |
|       $rights = [['itemtype'  => 'TicketTemplate',
 | |
|                             'label'     => _n('Template', 'Templates', Session::getPluralNumber()),
 | |
|                             'field'     => 'itiltemplate']];
 | |
|       $matrix_options['title'] = _n('ITIL object', 'ITIL objects', Session::getPluralNumber());
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       $rights = [['itemtype'  => 'Ticket',
 | |
|                             'label'     => _n('Ticket', 'Tickets', Session::getPluralNumber()),
 | |
|                             'field'     => 'ticket'],
 | |
|                       ['itemtype'  => 'TicketCost',
 | |
|                             'label'     => _n('Ticket cost', 'Ticket costs', Session::getPluralNumber()),
 | |
|                             'field'     => 'ticketcost'],
 | |
|                       ['itemtype'  => 'TicketRecurrent',
 | |
|                             'label'     => __('Recurrent tickets'),
 | |
|                             'field'     => 'ticketrecurrent']];
 | |
|       $matrix_options['title'] = _n('Ticket', 'Tickets', Session::getPluralNumber());
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       $rights = [['itemtype'  => 'ITILFollowup',
 | |
|                             'label'     => _n('Followup', 'Followups', Session::getPluralNumber()),
 | |
|                             'field'     => 'followup'],
 | |
|                       ['itemtype'  => 'TicketTask',
 | |
|                             'label'     => _n('Task', 'Tasks', Session::getPluralNumber()),
 | |
|                             'field'     => 'task']];
 | |
|       $matrix_options['title'] = _n('Followup', 'Followups', Session::getPluralNumber())." / "._n('Task', 'Tasks', Session::getPluralNumber());
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       $rights = [['itemtype'  => 'TicketValidation',
 | |
|                             'label'     => _n('Validation', 'Validations', Session::getPluralNumber()),
 | |
|                             'field'     => 'ticketvalidation']];
 | |
|       $matrix_options['title'] = _n('Validation', 'Validations', Session::getPluralNumber());
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       echo "<table class='tab_cadre_fixe'>";
 | |
| 
 | |
|       echo "<tr class='tab_bg_5'><th colspan='2'>".__('Association')."</th>";
 | |
|       echo "</tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_2'>";
 | |
|       echo "<td>".__('See hardware of my groups')."</td><td>";
 | |
|       Html::showCheckbox(['name'    => '_show_group_hardware',
 | |
|                                'checked' => $this->fields['show_group_hardware']]);
 | |
|       echo "</td></tr>";
 | |
| 
 | |
|       echo "<tr class='tab_bg_2'>";
 | |
|       echo "<td>".__('Link with items for the creation of tickets')."</td>";
 | |
|       echo "\n<td>";
 | |
|       self::getLinearRightChoice(self::getHelpdeskHardwareTypes(true),
 | |
|                                  ['field' => 'helpdesk_hardware',
 | |
|                                        'value' => $this->fields['helpdesk_hardware']]);
 | |
|       echo "</td></tr>\n";
 | |
| 
 | |
|       echo "<tr class='tab_bg_2'>";
 | |
|       echo "<td>".__('Associable items to a ticket')."</td>";
 | |
|       echo "<td><input type='hidden' name='_helpdesk_item_types' value='1'>";
 | |
|       self::dropdownHelpdeskItemtypes(['values' => $this->fields["helpdesk_item_type"]]);
 | |
|       // Linear_HIT
 | |
|       // self::getLinearRightChoice(self::getHelpdeskItemtypes(),
 | |
|       //                               array('field'         => 'helpdesk_item_type',
 | |
|       //                                     'value'         => $this->fields['helpdesk_item_type'],
 | |
|       //                                     'check_all'     => true,
 | |
|       //                                     'zero_on_empty' => false,
 | |
|       //                                     'max_per_line'  => 4,
 | |
|       //                                     'check_method'  =>
 | |
|       //                                     function ($element, $field) {
 | |
|       //                                        return in_array($element,$field);
 | |
|       //                                     }));
 | |
|       echo "</td>";
 | |
|       echo "</tr>\n";
 | |
|       echo "</table>";
 | |
| 
 | |
|       $rights = [
 | |
|          [
 | |
|             'itemtype'   => 'Stat',
 | |
|             'label'      => __('Statistics'),
 | |
|             'field'      => 'statistic'
 | |
|          ],[
 | |
|             'itemtype'   => 'Planning',
 | |
|             'label'      => __('Planning'),
 | |
|             'field'      => 'planning'
 | |
|          ]
 | |
|       ];
 | |
|       $matrix_options['title'] = __('Visibility');
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       $rights = [
 | |
|          [
 | |
|             'itemtype'   => 'PlanningExternalEvent',
 | |
|             'label'      => PlanningExternalEvent::getTypeName(Session::getPluralNumber()),
 | |
|             'field'      => 'externalevent'
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $matrix_options['title'] = __('Planning');
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       $rights = [['itemtype'   => 'Problem',
 | |
|                             'label'      => Problem::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'      => 'problem']];
 | |
|       $matrix_options['title'] = Problem::getTypeName(Session::getPluralNumber());
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       $rights = [['itemtype'   => 'Change',
 | |
|                             'label'      => _n('Change', 'Changes', Session::getPluralNumber()),
 | |
|                             'field'      => 'change'],
 | |
|                       ['itemtype'  => 'ChangeValidation',
 | |
|                             'label'     => _n('Validation', 'Validations', Session::getPluralNumber()),
 | |
|                             'field'     => 'changevalidation']];
 | |
|       $matrix_options['title'] = _n('Change', 'Changes', Session::getPluralNumber());
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       if ($canedit
 | |
|           && $closeform) {
 | |
|          echo "<div class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</div>\n";
 | |
|          Html::closeForm();
 | |
|       }
 | |
|       echo "</div>";
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Display the matrix of the elements lifecycle of the elements
 | |
|     *
 | |
|     * @since 0.85
 | |
|     *
 | |
|     * @param $title          the kind of lifecycle
 | |
|     * @param $html_field     field that is sent to _POST
 | |
|     * @param $db_field       field inside the DB (to get current state)
 | |
|     * @param $statuses       all available statuses for the given cycle (obj::getAllStatusArray())
 | |
|     * @param $canedit        can we edit the elements ?
 | |
|     *
 | |
|     * @return void
 | |
|    **/
 | |
|    function displayLifeCycleMatrix($title, $html_field, $db_field, $statuses, $canedit) {
 | |
| 
 | |
|       $columns  = [];
 | |
|       $rows     = [];
 | |
| 
 | |
|       foreach ($statuses as $index_1 => $status_1) {
 | |
|          $columns[$index_1] = $status_1;
 | |
|          $row               = ['label'      => $status_1,
 | |
|                                     'columns'    => []];
 | |
| 
 | |
|          foreach ($statuses as $index_2 => $status_2) {
 | |
|             $content = ['checked' => true];
 | |
|             if (isset($this->fields[$db_field][$index_1][$index_2])) {
 | |
|                $content['checked'] = $this->fields[$db_field][$index_1][$index_2];
 | |
|             }
 | |
|             if (($index_1 == $index_2) || (!$canedit)) {
 | |
|                $content['readonly'] = true;
 | |
|             }
 | |
|             $row['columns'][$index_2] = $content;
 | |
|          }
 | |
|          $rows[$html_field."[$index_1]"] = $row;
 | |
|       }
 | |
|       Html::showCheckboxMatrix($columns, $rows,
 | |
|                                ['title'         => $title,
 | |
|                                      'row_check_all' => true,
 | |
|                                      'col_check_all' => true,
 | |
|                                      'first_cell'    => '<b>'.__("From \ To").'</b>']);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|    * Print the Life Cycles form for the current profile
 | |
|    *
 | |
|    * @param $openform   boolean  open the form (true by default)
 | |
|    * @param $closeform  boolean  close the form (true by default)
 | |
|    **/
 | |
|    function showFormLifeCycle($openform = true, $closeform = true) {
 | |
| 
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
| 
 | |
|       if (($canedit = Session::haveRightsOr(self::$rightname, [CREATE, UPDATE, PURGE]))
 | |
|           && $openform) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       $this->displayLifeCycleMatrix(__('Life cycle of tickets'), '_cycle_ticket', 'ticket_status',
 | |
|                                     Ticket::getAllStatusArray(), $canedit);
 | |
| 
 | |
|       $this->displayLifeCycleMatrix(__('Life cycle of problems'), '_cycle_problem',
 | |
|                                     'problem_status', Problem::getAllStatusArray(), $canedit);
 | |
| 
 | |
|       $this->displayLifeCycleMatrix(__('Life cycle of changes'), '_cycle_change', 'change_status',
 | |
|                                     Change::getAllStatusArray(), $canedit);
 | |
| 
 | |
|       if ($canedit
 | |
|           && $closeform) {
 | |
|          echo "<div class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</div>\n";
 | |
|          Html::closeForm();
 | |
|       }
 | |
|       echo "</div>";
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Display the matrix of the elements lifecycle of the elements
 | |
|     *
 | |
|     * @since 0.85
 | |
|     *
 | |
|     * @param $title          the kind of lifecycle
 | |
|     * @param $html_field     field that is sent to _POST
 | |
|     * @param $db_field       field inside the DB (to get current state)
 | |
|     * @param $canedit        can we edit the elements ?
 | |
|     *
 | |
|     * @return void
 | |
|    **/
 | |
|    function displayLifeCycleMatrixTicketHelpdesk($title, $html_field, $db_field, $canedit) {
 | |
| 
 | |
|       $columns     = [];
 | |
|       $rows        = [];
 | |
|       $statuses    = [];
 | |
|       $allstatuses = Ticket::getAllStatusArray();
 | |
|       foreach ([Ticket::INCOMING, Ticket::SOLVED, Ticket::CLOSED] as $val) {
 | |
|          $statuses[$val] = $allstatuses[$val];
 | |
|       }
 | |
|       $alwaysok     = [Ticket::INCOMING => [],
 | |
|                             Ticket::SOLVED   => [Ticket::INCOMING],
 | |
|                             Ticket::CLOSED   => []];
 | |
| 
 | |
|       $allowactions = [Ticket::INCOMING => [],
 | |
|                             Ticket::SOLVED   => [Ticket::CLOSED],
 | |
|                             Ticket::CLOSED   => [Ticket::INCOMING]];
 | |
| 
 | |
|       foreach ($statuses as $index_1 => $status_1) {
 | |
|          $columns[$index_1] = $status_1;
 | |
|          $row               = ['label'      => $status_1,
 | |
|                                     'columns'    => []];
 | |
| 
 | |
|          foreach ($statuses as $index_2 => $status_2) {
 | |
|             $content = ['checked' => true];
 | |
|             if (isset($this->fields[$db_field][$index_1][$index_2])) {
 | |
|                $content['checked'] = $this->fields[$db_field][$index_1][$index_2];
 | |
|             }
 | |
| 
 | |
|             if (in_array($index_2, $alwaysok[$index_1])) {
 | |
|                $content['checked'] = true;
 | |
|             }
 | |
| 
 | |
|             if (($index_1 == $index_2)
 | |
|                 || (!$canedit)
 | |
|                 || !in_array($index_2, $allowactions[$index_1])) {
 | |
|                $content['readonly'] = true;
 | |
|             }
 | |
|             $row['columns'][$index_2] = $content;
 | |
|          }
 | |
|          $rows[$html_field."[$index_1]"] = $row;
 | |
|       }
 | |
|       Html::showCheckboxMatrix($columns, $rows,
 | |
|                                ['title'         => $title,
 | |
|                                      'first_cell'    => '<b>'.__("From \ To").'</b>']);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|    * Print the Life Cycles form for the current profile
 | |
|    *
 | |
|    *  @since 0.85
 | |
|    *
 | |
|    * @param $openform   boolean  open the form (true by default)
 | |
|    * @param $closeform  boolean  close the form (true by default)
 | |
|    **/
 | |
|    function showFormLifeCycleHelpdesk($openform = true, $closeform = true) {
 | |
| 
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
| 
 | |
|       if (($canedit = Session::haveRightsOr(self::$rightname, [CREATE, UPDATE, PURGE]))
 | |
|           && $openform) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       $this->displayLifeCycleMatrixTicketHelpdesk(__('Life cycle of tickets'), '_cycle_ticket',
 | |
|                                                   'ticket_status', $canedit);
 | |
| 
 | |
|       if ($canedit
 | |
|           && $closeform) {
 | |
|          echo "<div class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</div>\n";
 | |
|          Html::closeForm();
 | |
|       }
 | |
|       echo "</div>";
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Print the central form for a profile
 | |
|     *
 | |
|     * @param $openform     boolean  open the form (true by default)
 | |
|     * @param $closeform    boolean  close the form (true by default)
 | |
|    **/
 | |
|    function showFormAdmin($openform = true, $closeform = true) {
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
| 
 | |
|       if (($canedit = Session::haveRightsOr(self::$rightname, [CREATE, UPDATE, PURGE]))
 | |
|           && $openform) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       $matrix_options = ['canedit'       => $canedit,
 | |
|                               'default_class' => 'tab_bg_4'];
 | |
| 
 | |
|       $rights = [['itemtype'  => 'User',
 | |
|                             'label'     => User::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'user',
 | |
|                             'row_class' => 'tab_bg_2'],
 | |
|                       ['itemtype'  => 'Entity',
 | |
|                             'label'     => Entity::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'entity'],
 | |
|                       ['itemtype'  => 'Group',
 | |
|                             'label'     => Group::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'group'],
 | |
|                       ['itemtype'  => 'Profile',
 | |
|                             'label'     => Profile::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'profile'],
 | |
|                       ['itemtype'  => 'QueuedNotification',
 | |
|                             'label'     => __('Notification queue'),
 | |
|                             'field'     => 'queuednotification'],
 | |
|                       ['itemtype'  => 'Log',
 | |
|                             'label'     => Log::getTypeName(Session::getPluralNumber()),
 | |
|                             'field'     => 'logs']];
 | |
|       $matrix_options['title'] = __('Administration');
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       $rights = [['itemtype'  => 'Rule',
 | |
|                             'label'     => __('Authorizations assignment rules'),
 | |
|                             'field'     => 'rule_ldap'],
 | |
|                       ['itemtype'  => 'RuleImportComputer',
 | |
|                             'label'     => __('Rules for assigning a computer to an entity'),
 | |
|                             'field'     => 'rule_import'],
 | |
|                       ['itemtype'  => 'RuleMailCollector',
 | |
|                             'label'     => __('Rules for assigning a ticket created through a mails receiver'),
 | |
|                             'field'     => 'rule_mailcollector'],
 | |
|                       ['itemtype'  => 'RuleSoftwareCategory',
 | |
|                             'label'     => __('Rules for assigning a category to a software'),
 | |
|                             'field'     => 'rule_softwarecategories'],
 | |
|                       ['itemtype'  => 'RuleTicket',
 | |
|                             'label'     => __('Business rules for tickets (entity)'),
 | |
|                             'field'     => 'rule_ticket',
 | |
|                             'row_class' => 'tab_bg_2'],
 | |
|                       ['itemtype'  => 'RuleAsset',
 | |
|                             'label'     => __('Business rules for assets'),
 | |
|                             'field'     => 'rule_asset',
 | |
|                             'row_class' => 'tab_bg_2'],
 | |
|                       ['itemtype'  => 'Transfer',
 | |
|                             'label'     => __('Transfer'),
 | |
|                             'field'     => 'transfer']];
 | |
|       $matrix_options['title'] = _n('Rule', 'Rules', Session::getPluralNumber());
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       $rights = [['itemtype'  => 'RuleDictionnaryDropdown',
 | |
|                             'label'     => __('Dropdowns dictionary'),
 | |
|                             'field'     => 'rule_dictionnary_dropdown'],
 | |
|                       ['itemtype'  => 'RuleDictionnarySoftware',
 | |
|                             'label'     => __('Software dictionary'),
 | |
|                             'field'     => 'rule_dictionnary_software'],
 | |
|                       ['itemtype'  => 'RuleDictionnaryPrinter',
 | |
|                             'label'     => __('Printers dictionnary'),
 | |
|                             'field'     => 'rule_dictionnary_printer']];
 | |
|       $matrix_options['title'] = __('Dropdowns dictionary');
 | |
|       $this->displayRightsChoiceMatrix($rights, $matrix_options);
 | |
| 
 | |
|       if ($canedit
 | |
|           && $closeform) {
 | |
|          echo "<div class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</div>\n";
 | |
|          Html::closeForm();
 | |
|       }
 | |
|       echo "</div>";
 | |
| 
 | |
|       $this->showLegend();
 | |
|    }
 | |
| 
 | |
|    /**
 | |
|     * Print the central form for a profile
 | |
|     *
 | |
|     * @param $openform     boolean  open the form (true by default)
 | |
|     * @param $closeform    boolean  close the form (true by default)
 | |
|    **/
 | |
|    function showFormSetup($openform = true, $closeform = true) {
 | |
| 
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
|       if (($canedit = Session::haveRightsOr(self::$rightname, [CREATE, UPDATE, PURGE]))
 | |
|           && $openform) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       $dropdown_rights = $this->getRights();
 | |
|       unset($dropdown_rights[DELETE]);
 | |
|       unset($dropdown_rights[UNLOCK]);
 | |
| 
 | |
|       $rights = [
 | |
|          [
 | |
|             'itemtype'  => 'Config',
 | |
|             'label'     => __('General setup'),
 | |
|             'field'     => 'config'
 | |
|          ],
 | |
|          [
 | |
|             'rights'  => [
 | |
|                READ    => __('Read'),
 | |
|                UPDATE  => __('Update')
 | |
|             ],
 | |
|             'label'  => __('Personalization'),
 | |
|             'field'  => 'personalization'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'Glpi\Dashboard\Grid',
 | |
|             'label'     => __('All dashboards'),
 | |
|             'field'     => 'dashboard'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'DisplayPreference',
 | |
|             'label'     => __('Search result display'),
 | |
|             'field'     => 'search_config'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'Item_Devices',
 | |
|             'label'     => _n('Component', 'Components', Session::getPluralNumber()),
 | |
|             'field'     => 'device'
 | |
|          ],
 | |
|          [
 | |
|             'rights'    => $dropdown_rights,
 | |
|             'label'     => _n('Global dropdown', 'Global dropdowns', Session::getPluralNumber()),
 | |
|             'field'     => 'dropdown'
 | |
|          ],
 | |
|          __('Entity dropdowns'),
 | |
|          [
 | |
|             'itemtype'  => 'Location',
 | |
|             'label'     => Location::getTypeName(Session::getPluralNumber()),
 | |
|             'field'     => 'location'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'ITILCategory',
 | |
|             'label'     => _n('Ticket category', 'Ticket categories', Session::getPluralNumber()),
 | |
|             'field'     => 'itilcategory'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'KnowbaseItemCategory',
 | |
|             'label'     => _n('Knowledge base category', 'Knowledge base categories', Session::getPluralNumber()),
 | |
|             'field'     => 'knowbasecategory'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'Netpoint',
 | |
|             'label'     => _n('Network outlet', 'Network outlets', Session::getPluralNumber()),
 | |
|             'field'     => 'netpoint'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'TaskCategory',
 | |
|             'label'     => _n('Task category', 'Task categories', Session::getPluralNumber()),
 | |
|             'field'     => 'taskcategory'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'State',
 | |
|             'label'     => _n('Status of items', 'Statuses of items', Session::getPluralNumber()),
 | |
|             'field'     => 'state'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'SolutionTemplate',
 | |
|             'label'     => _n('Solution template', 'Solution templates', Session::getPluralNumber()),
 | |
|             'field'     => 'solutiontemplate'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'Calendar',
 | |
|             'label'     => _n('Calendar', 'Calendars', Session::getPluralNumber()),
 | |
|             'field'     => 'calendar'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'DocumentType',
 | |
|             'label'     => DocumentType::getTypeName(1),
 | |
|             'field'     => 'typedoc'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'Link',
 | |
|             'label'     => _n('External link', 'External links', Session::getPluralNumber()),
 | |
|             'field'     => 'link'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'Notification',
 | |
|             'label'     => _n('Notification', 'Notifications', Session::getPluralNumber()),
 | |
|             'field'     => 'notification'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'SLM',
 | |
|             'label'     => __('SLM'),
 | |
|             'field'     => 'slm'
 | |
|          ],
 | |
|          [
 | |
|             'itemtype'  => 'LineOperator',
 | |
|             'label'     => _n('Line operator', 'Line operators', Session::getPluralNumber()),
 | |
|             'field'     => 'lineoperator'
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $this->displayRightsChoiceMatrix($rights, ['canedit'       => $canedit,
 | |
|                                                       'default_class' => 'tab_bg_2',
 | |
|                                                       'title'         => __('Setup')]);
 | |
| 
 | |
|       if ($canedit
 | |
|           && $closeform) {
 | |
|          echo "<div class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</div>\n";
 | |
|          Html::closeForm();
 | |
|       }
 | |
|       echo "</div>";
 | |
| 
 | |
|       $this->showLegend();
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Print the Setup rights form for a helpdesk profile
 | |
|     *
 | |
|     * @since 9.4.0
 | |
|     *
 | |
|     * @param boolean $openform  open the form (true by default)
 | |
|     * @param boolean $closeform close the form (true by default)
 | |
|     *
 | |
|     * @return void
 | |
|     *
 | |
|    **/
 | |
|    function showFormSetupHelpdesk($openform = true, $closeform = true) {
 | |
| 
 | |
|       if (!self::canView()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       echo "<div class='spaced'>";
 | |
|       if (($canedit = Session::haveRightsOr(self::$rightname, [CREATE, UPDATE, PURGE]))
 | |
|           && $openform) {
 | |
|          echo "<form method='post' action='".$this->getFormURL()."' data-track-changes='true'>";
 | |
|       }
 | |
| 
 | |
|       $rights = [['rights'  => [
 | |
|                      READ    => __('Read'),
 | |
|                      UPDATE  => __('Update')],
 | |
|                   'label'  => __('Personalization'),
 | |
|                   'field'  => 'personalization']];
 | |
| 
 | |
|       $this->displayRightsChoiceMatrix($rights, ['canedit'       => $canedit,
 | |
|                                                       'default_class' => 'tab_bg_2',
 | |
|                                                       'title'         => __('Setup')]);
 | |
| 
 | |
|       if ($canedit
 | |
|           && $closeform) {
 | |
|          echo "<div class='center'>";
 | |
|          echo "<input type='hidden' name='id' value='".$this->fields['id']."'>";
 | |
|          echo "<input type='submit' name='update' value=\""._sx('button', 'Save')."\" class='submit'>";
 | |
|          echo "</div>\n";
 | |
|          Html::closeForm();
 | |
|       }
 | |
|       echo "</div>";
 | |
| 
 | |
|       $this->showLegend();
 | |
|    }
 | |
| 
 | |
| 
 | |
|    function rawSearchOptions() {
 | |
|       $tab = [];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => 'common',
 | |
|          'name'               => __('Characteristics')
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '1',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'name',
 | |
|          'name'               => __('Name'),
 | |
|          'datatype'           => 'itemlink',
 | |
|          'massiveaction'      => false
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '2',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'id',
 | |
|          'name'               => __('ID'),
 | |
|          'massiveaction'      => false,
 | |
|          'datatype'           => 'number'
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '19',
 | |
|          '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
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '5',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'interface',
 | |
|          'name'               => __("Profile's interface"),
 | |
|          'massiveaction'      => false,
 | |
|          'datatype'           => 'specific',
 | |
|          'searchtype'         => ['equals', 'notequals']
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '3',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'is_default',
 | |
|          'name'               => __('Default profile'),
 | |
|          'datatype'           => 'bool',
 | |
|          'massiveaction'      => false
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '118',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'create_ticket_on_login',
 | |
|          'name'               => __('Ticket creation form on login'),
 | |
|          'datatype'           => 'bool'
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '16',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'comment',
 | |
|          'name'               => __('Comments'),
 | |
|          'datatype'           => 'text'
 | |
|       ];
 | |
| 
 | |
|       // add objectlock search options
 | |
|       $tab = array_merge($tab, ObjectLock::rawSearchOptionsToAdd(get_class($this)));
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => 'inventory',
 | |
|          'name'               => __('Assets')
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '20',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Computer', 'Computers', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Computer',
 | |
|          'rightname'          => 'computer',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'computer'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '21',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Monitor', 'Monitors', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Monitor',
 | |
|          'rightname'          => 'monitor',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'monitor'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '22',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Software', 'Software', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Software',
 | |
|          'rightname'          => 'software',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'software'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '23',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Network', 'Networks', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Network',
 | |
|          'rightname'          => 'networking',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'networking'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '24',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Printer', 'Printers', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Printer',
 | |
|          'rightname'          => 'printer',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'printer'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '25',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => Peripheral::getTypeName(Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Peripheral',
 | |
|          'rightname'          => 'peripheral',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'peripheral'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '26',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Cartridge', 'Cartridges', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Cartridge',
 | |
|          'rightname'          => 'cartridge',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'cartridge'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '27',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Consumable', 'Consumables', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Consumable',
 | |
|          'rightname'          => 'consumable',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'consumable'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '28',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => Phone::getTypeName(Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Phone',
 | |
|          'rightname'          => 'phone',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'phone'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '129',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Internet'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'NetworkName',
 | |
|          'rightname'          => 'internet',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'internet'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => 'management',
 | |
|          'name'               => __('Management')
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '30',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => Contact::getTypeName(1)." / ".Supplier::getTypeName(1),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Contact',
 | |
|          'rightname'          => 'contact_entreprise',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'contact_enterprise'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '31',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => Document::getTypeName(Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Document',
 | |
|          'rightname'          => 'document',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'document'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '32',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Contract', 'Contracts', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Contract',
 | |
|          'rightname'          => 'contract',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'contract'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '33',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Financial and administratives information'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Infocom',
 | |
|          'rightname'          => 'infocom',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'infocom'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '101',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => Budget::getTypeName(1),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Budget',
 | |
|          'rightname'          => 'budget',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'budget'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => 'tools',
 | |
|          'name'               => __('Tools')
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '34',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Knowledge base'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'KnowbaseItem',
 | |
|          'rightname'          => 'knowbase',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'knowbase'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '36',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Reservation', 'Reservations', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'ReservationItem',
 | |
|          'rightname'          => 'reservation',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'reservation'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '38',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Report', 'Reports', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Report',
 | |
|          'rightname'          => 'reports',
 | |
|          'nowrite'            => true,
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'reports'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => 'config',
 | |
|          'name'               => __('Setup')
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '42',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Dropdown', 'Dropdowns', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'DropdownTranslation',
 | |
|          'rightname'          => 'dropdown',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'dropdown'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '44',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Component', 'Components', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Item_Devices',
 | |
|          'rightname'          => 'device',
 | |
|          'noread'             => true,
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'device'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '106',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Notification', 'Notifications', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Notification',
 | |
|          'rightname'          => 'notification',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'notification'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '45',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => DocumentType::getTypeName(1),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'DocumentType',
 | |
|          'rightname'          => 'typedoc',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'typedoc'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '46',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('External link', 'External links', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Link',
 | |
|          'rightname'          => 'link',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'link'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '47',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('General setup'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Config',
 | |
|          'rightname'          => 'config',
 | |
|          'noread'             => true,
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'config'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '109',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Personalization'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Config',
 | |
|          'rightname'          => 'personalization',
 | |
|          'noread'             => true,
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'personalization'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '52',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Search result user display'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'DisplayPreference',
 | |
|          'rightname'          => 'search_config',
 | |
|          'noread'             => true,
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'search_config'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '107',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Calendar', 'Calendars', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Calendar',
 | |
|          'rightname'          => 'calendar',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'calendar'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => 'admin',
 | |
|          'name'               => __('Administration')
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '48',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Business rules for tickets'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'RuleTicket',
 | |
|          'rightname'          => 'rule_ticket',
 | |
|          'nowrite'            => true,
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'rule_ticket'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '105',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Rules for assigning a ticket created through a mails receiver'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'RuleMailCollector',
 | |
|          'rightname'          => 'rule_mailcollector',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'rule_mailcollector'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '49',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Rules for assigning a computer to an entity'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'RuleImportComputer',
 | |
|          'rightname'          => 'rule_import',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'rule_import'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '50',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Authorizations assignment rules'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Rule',
 | |
|          'rightname'          => 'rule_ldap',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'rule_ldap'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '51',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Rules for assigning a category to a software'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'RuleSoftwareCategory',
 | |
|          'rightname'          => 'rule_softwarecategories',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'rule_softwarecategories'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '90',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Software dictionary'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'RuleDictionnarySoftware',
 | |
|          'rightname'          => 'rule_dictionnary_software',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'rule_dictionnary_software'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '91',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Dropdowns dictionary'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'RuleDictionnaryDropdown',
 | |
|          'rightname'          => 'rule_dictionnary_dropdown',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'rule_dictionnary_dropdown'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '55',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => self::getTypeName(Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Profile',
 | |
|          'rightname'          => 'profile',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'profile'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '56',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => User::getTypeName(Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'User',
 | |
|          'rightname'          => 'user',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'user'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '58',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => Group::getTypeName(Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Group',
 | |
|          'rightname'          => 'group',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'group'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '59',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => Entity::getTypeName(Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Entity',
 | |
|          'rightname'          => 'entity',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'entity'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '60',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Transfer'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Transfer',
 | |
|          'rightname'          => 'transfer',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'transfer'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '61',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Log', 'Logs', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Log',
 | |
|          'rightname'          => 'logs',
 | |
|          'nowrite'            => true,
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'logs'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '62',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Maintenance'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Backup',
 | |
|          'rightname'          => 'backup',
 | |
|          'noread'             => true,
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'backup'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => 'ticket',
 | |
|          'name'               => __('Assistance')
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '102',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Create a ticket'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Ticket',
 | |
|          'rightname'          => 'ticket',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'ticket'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $newtab = [
 | |
|          'id'                 => '108',
 | |
|          'table'              => 'glpi_tickettemplates',
 | |
|          'field'              => 'name',
 | |
|          'name'               => __('Default ticket template'),
 | |
|          'datatype'           => 'dropdown',
 | |
|       ];
 | |
|       if (Session::isMultiEntitiesMode()) {
 | |
|          $newtab['condition']     = ['entities_id' => 0, 'is_recursive' => 1];
 | |
|       } else {
 | |
|          $newtab['condition']     = ['entities_id' => 0];
 | |
|       }
 | |
|       $tab[] = $newtab;
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '103',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Ticket template', 'Ticket templates', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'TicketTemplate',
 | |
|          'rightname'          => 'tickettemplate',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'tickettemplate'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '79',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Planning'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Planning',
 | |
|          'rightname'          => 'planning',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'planning'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '85',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Statistics'),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Stat',
 | |
|          'rightname'          => 'statistic',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'statistic'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '119',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Ticket cost', 'Ticket costs', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'TicketCost',
 | |
|          'rightname'          => 'ticketcost',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'ticketcost'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '86',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'helpdesk_hardware',
 | |
|          'name'               => __('Link with items for the creation of tickets'),
 | |
|          'massiveaction'      => false,
 | |
|          'datatype'           => 'specific'
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '87',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'helpdesk_item_type',
 | |
|          'name'               => __('Associable items to a ticket'),
 | |
|          'massiveaction'      => false,
 | |
|          'datatype'           => 'specific'
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '88',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'managed_domainrecordtypes',
 | |
|          'name'               => __('Managed domain records types'),
 | |
|          'massiveaction'      => false,
 | |
|          'datatype'           => 'specific'
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '89',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('See hardware of my groups'),
 | |
|          'datatype'           => 'bool',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'show_group_hardware'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '100',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'ticket_status',
 | |
|          'name'               => __('Life cycle of tickets'),
 | |
|          'nosearch'           => true,
 | |
|          'datatype'           => 'text',
 | |
|          'massiveaction'      => false
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '110',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'problem_status',
 | |
|          'name'               => __('Life cycle of problems'),
 | |
|          'nosearch'           => true,
 | |
|          'datatype'           => 'text',
 | |
|          'massiveaction'      => false
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '112',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => Problem::getTypeName(Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Problem',
 | |
|          'rightname'          => 'problem',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'problem'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '111',
 | |
|          'table'              => $this->getTable(),
 | |
|          'field'              => 'change_status',
 | |
|          'name'               => __('Life cycle of changes'),
 | |
|          'nosearch'           => true,
 | |
|          'datatype'           => 'text',
 | |
|          'massiveaction'      => false
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '115',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Change', 'Changes', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Change',
 | |
|          'rightname'          => 'change',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'change'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => 'other',
 | |
|          'name'               => __('Other')
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '4',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => __('Update password'),
 | |
|          'datatype'           => 'bool',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'password_update'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '63',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Public reminder', 'Public reminders', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'Reminder',
 | |
|          'rightname'          => 'reminder_public',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'reminder_public'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '64',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Public saved search', 'Public saved searches', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'SavedSearch',
 | |
|          'rightname'          => 'bookmark_public',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'bookmark_public'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       $tab[] = [
 | |
|          'id'                 => '120',
 | |
|          'table'              => 'glpi_profilerights',
 | |
|          'field'              => 'rights',
 | |
|          'name'               => _n('Public RSS feed', 'Public RSS feeds', Session::getPluralNumber()),
 | |
|          'datatype'           => 'right',
 | |
|          'rightclass'         => 'RSSFeed',
 | |
|          'rightname'          => 'rssfeed_public',
 | |
|          'joinparams'         => [
 | |
|             'jointype'           => 'child',
 | |
|             'condition'          => "AND `NEWTABLE`.`name`= 'rssfeed_public'"
 | |
|          ]
 | |
|       ];
 | |
| 
 | |
|       return $tab;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * @since 0.84
 | |
|     *
 | |
|     * @param $field
 | |
|     * @param $values
 | |
|     * @param $options   array
 | |
|     **/
 | |
|    static function getSpecificValueToDisplay($field, $values, array $options = []) {
 | |
| 
 | |
|       if (!is_array($values)) {
 | |
|          $values = [$field => $values];
 | |
|       }
 | |
|       switch ($field) {
 | |
|          case 'interface':
 | |
|             return self::getInterfaceName($values[$field]);
 | |
| 
 | |
|          case 'helpdesk_hardware':
 | |
|             return self::getHelpdeskHardwareTypeName($values[$field]);
 | |
| 
 | |
|          case "helpdesk_item_type":
 | |
|             $types = explode(',', $values[$field]);
 | |
|             $message = [];
 | |
|             foreach ($types as $type) {
 | |
|                if ($item = getItemForItemtype($type)) {
 | |
|                   $message[] = $item->getTypeName();
 | |
|                }
 | |
|             }
 | |
|             return implode(', ', $message);
 | |
|       }
 | |
|       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 'interface' :
 | |
|             $options['value'] = $values[$field];
 | |
|             return Dropdown::showFromArray($name, self::getInterfaces(), $options);
 | |
| 
 | |
|          case 'helpdesk_hardware' :
 | |
|             $options['value'] = $values[$field];
 | |
|             return Dropdown::showFromArray($name, self::getHelpdeskHardwareTypes(), $options);
 | |
| 
 | |
|          case "helpdesk_item_type":
 | |
|             $options['values'] = explode(',', $values[$field]);
 | |
|             $options['name']   = $name;
 | |
|             return self::dropdownHelpdeskItemtypes($options);
 | |
|       }
 | |
|       return parent::getSpecificValueToSelect($field, $name, $values, $options);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Make a select box for rights
 | |
|     *
 | |
|     * @since 0.85
 | |
|     *
 | |
|     * @param $values    array    of values to display
 | |
|     * @param $name      integer  name of the dropdown
 | |
|     * @param $current   integer  value in database (sum of rights)
 | |
|     * @param $options   array
 | |
|    **/
 | |
|    static function dropdownRights(array $values, $name, $current, $options = []) {
 | |
| 
 | |
|       foreach ($values as $key => $value) {
 | |
|          if (is_array($value)) {
 | |
|             $values[$key] = $value['long'];
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       $param['multiple']= true;
 | |
|       $param['display'] = true;
 | |
|       $param['size']    = count($values);
 | |
|       $tabselect = [];
 | |
|       foreach ($values as $k => $v) {
 | |
|          if ($current & $k) {
 | |
|             $tabselect[] = $k;
 | |
|          }
 | |
|       }
 | |
|       $param['values'] =  $tabselect;
 | |
| 
 | |
|       if (is_array($options) && count($options)) {
 | |
|          foreach ($options as $key => $val) {
 | |
|             $param[$key] = $val;
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       // To allow dropdown with no value to be in prepareInputForUpdate
 | |
|       // without this, you can't have an empty dropdown
 | |
|       // done to avoid define NORIGHT value
 | |
|       if ($param['multiple']) {
 | |
|          echo "<input type='hidden' name='".$name."[]' value='0'>";
 | |
|       }
 | |
|       return Dropdown::showFromArray($name, $values, $param);
 | |
|    }
 | |
| 
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Make a select box for a None Read Write choice
 | |
|     *
 | |
|     * @since 0.84
 | |
|     *
 | |
|     * @param $name          select name
 | |
|     * @param $options array of possible options:
 | |
|     *       - value   : preselected value.
 | |
|     *       - nonone  : hide none choice ? (default false)
 | |
|     *       - noread  : hide read choice ? (default false)
 | |
|     *       - nowrite : hide write choice ? (default false)
 | |
|     *       - display : display or get string (default true)
 | |
|     *       - rand    : specific rand (default is generated one)
 | |
|     *
 | |
|     * @return integer|string
 | |
|     *    integer if option display=true (random part of elements id)
 | |
|     *    string if option display=false (HTML code)
 | |
|    **/
 | |
|    static function dropdownRight($name, $options = []) {
 | |
| 
 | |
|       $param['value']   = '';
 | |
|       $param['display'] = true;
 | |
|       $param['nonone']  = false;
 | |
|       $param['noread']  = false;
 | |
|       $param['nowrite'] = false;
 | |
|       $param['rand']    = mt_rand();
 | |
| 
 | |
|       if (is_array($options) && count($options)) {
 | |
|          foreach ($options as $key => $val) {
 | |
|             $param[$key] = $val;
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       $values = [];
 | |
|       if (!$param['nonone']) {
 | |
|          $values[0] = __('No access');
 | |
|       }
 | |
|       if (!$param['noread']) {
 | |
|          $values[READ] = __('Read');
 | |
|       }
 | |
|       if (!$param['nowrite']) {
 | |
|          $values[CREATE] = __('Write');
 | |
|       }
 | |
|       return Dropdown::showFromArray($name, $values,
 | |
|                                      ['value'   => $param['value'],
 | |
|                                            'rand'    => $param['rand'],
 | |
|                                            'display' => $param['display']]);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Dropdown profiles which have rights under the active one
 | |
|     *
 | |
|     * @param $options array of possible options:
 | |
|     *    - name : string / name of the select (default is profiles_id)
 | |
|     *    - value : integer / preselected value (default 0)
 | |
|     *
 | |
|    **/
 | |
|    static function dropdownUnder($options = []) {
 | |
|       global $DB;
 | |
| 
 | |
|       $p['name']  = 'profiles_id';
 | |
|       $p['value'] = '';
 | |
|       $p['rand']  = mt_rand();
 | |
| 
 | |
|       if (is_array($options) && count($options)) {
 | |
|          foreach ($options as $key => $val) {
 | |
|             $p[$key] = $val;
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       $iterator = $DB->request([
 | |
|          'FROM'   => self::getTable(),
 | |
|          'WHERE'  => self::getUnderActiveProfileRestrictCriteria(),
 | |
|          'ORDER'  => 'name'
 | |
|       ]);
 | |
| 
 | |
|       //New rule -> get the next free ranking
 | |
|       while ($data = $iterator->next()) {
 | |
|          $profiles[$data['id']] = $data['name'];
 | |
|       }
 | |
|       Dropdown::showFromArray($p['name'], $profiles,
 | |
|                               ['value'               => $p['value'],
 | |
|                                'rand'                => $p['rand'],
 | |
|                                'display_emptychoice' => true]);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Get the default Profile for new user
 | |
|     *
 | |
|     * @return integer profiles_id
 | |
|    **/
 | |
|    static function getDefault() {
 | |
|       global $DB;
 | |
| 
 | |
|       foreach ($DB->request('glpi_profiles', ['is_default'=>1]) as $data) {
 | |
|          return $data['id'];
 | |
|       }
 | |
|       return 0;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * @since 0.84
 | |
|    **/
 | |
|    static function getInterfaces() {
 | |
| 
 | |
|       return ['central'  => __('Standard interface'),
 | |
|                    'helpdesk' => __('Simplified interface')];
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * @param $value
 | |
|    **/
 | |
|    static function getInterfaceName($value) {
 | |
| 
 | |
|       $tab = self::getInterfaces();
 | |
|       if (isset($tab[$value])) {
 | |
|          return $tab[$value];
 | |
|       }
 | |
|       return NOT_AVAILABLE;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * @since 0.84
 | |
|     *
 | |
|     * @param $rights   boolean   (false by default)
 | |
|    **/
 | |
|    static function getHelpdeskHardwareTypes($rights = false) {
 | |
| 
 | |
|       if ($rights) {
 | |
|          return [pow(2, Ticket::HELPDESK_MY_HARDWARE)     => __('My devices'),
 | |
|                       pow(2, Ticket::HELPDESK_ALL_HARDWARE)    => __('All items')];
 | |
|       }
 | |
| 
 | |
|       return [0                                        => Dropdown::EMPTY_VALUE,
 | |
|                    pow(2, Ticket::HELPDESK_MY_HARDWARE)     => __('My devices'),
 | |
|                    pow(2, Ticket::HELPDESK_ALL_HARDWARE)    => __('All items'),
 | |
|                    pow(2, Ticket::HELPDESK_MY_HARDWARE)
 | |
|                     + pow(2, Ticket::HELPDESK_ALL_HARDWARE) => __('My devices and all items')];
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * @since 0.84
 | |
|     *
 | |
|     * @param $value
 | |
|    **/
 | |
|    static function getHelpdeskHardwareTypeName($value) {
 | |
| 
 | |
|       $tab = self::getHelpdeskHardwareTypes();
 | |
|       if (isset($tab[$value])) {
 | |
|          return $tab[$value];
 | |
|       }
 | |
|       return NOT_AVAILABLE;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * @since 0.85
 | |
|    **/
 | |
|    static function getHelpdeskItemtypes() {
 | |
|       global $CFG_GLPI;
 | |
| 
 | |
|       $values = [];
 | |
|       foreach ($CFG_GLPI["ticket_types"] as $key => $itemtype) {
 | |
|          if ($item = getItemForItemtype($itemtype)) {
 | |
|             $values[$itemtype] = $item->getTypeName();
 | |
|          } else {
 | |
|             unset($CFG_GLPI["ticket_types"][$key]);
 | |
|          }
 | |
|       }
 | |
|       return $values;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Get domains records types
 | |
|     *
 | |
|     * @return array
 | |
|     */
 | |
|    public function getDomainRecordTypes() {
 | |
|       global $DB;
 | |
| 
 | |
|       $iterator = $DB->request([
 | |
|          'FROM'   => DomainRecordType::getTable(),
 | |
|       ]);
 | |
| 
 | |
|       $types = [];
 | |
|       while ($row = $iterator->next()) {
 | |
|          $types[$row['id']] = $row['name'];
 | |
|       }
 | |
|       return $types;
 | |
|    }
 | |
| 
 | |
|    /**
 | |
|     * Dropdown profiles which have rights under the active one
 | |
|     *
 | |
|     * @since 0.84
 | |
|     *
 | |
|     * @param $options array of possible options:
 | |
|     *    - name : string / name of the select (default is profiles_id)
 | |
|     *    - values : array of values
 | |
|    **/
 | |
|    static function dropdownHelpdeskItemtypes($options) {
 | |
|       $p['name']    = 'helpdesk_item_type';
 | |
|       $p['values']  = [];
 | |
|       $p['display'] = true;
 | |
| 
 | |
|       if (is_array($options) && count($options)) {
 | |
|          foreach ($options as $key => $val) {
 | |
|             $p[$key] = $val;
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       $values = self::getHelpdeskItemtypes();
 | |
| 
 | |
|       $p['multiple'] = true;
 | |
|       $p['size']     = 3;
 | |
|       return Dropdown::showFromArray($p['name'], $values, $p);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Check if user has given right.
 | |
|     *
 | |
|     * @since 0.84
 | |
|     *
 | |
|     * @param $user_id    integer  id of the user
 | |
|     * @param $rightname  string   name of right to check
 | |
|     * @param $rightvalue integer  value of right to check
 | |
|     * @param $entity_id  integer  id of the entity
 | |
|     *
 | |
|     * @return boolean
 | |
|     */
 | |
|    static function haveUserRight($user_id, $rightname, $rightvalue, $entity_id) {
 | |
|       global $DB;
 | |
| 
 | |
|       $result = $DB->request(
 | |
|          [
 | |
|             'COUNT'      => 'cpt',
 | |
|             'FROM'       => 'glpi_profilerights',
 | |
|             'INNER JOIN' => [
 | |
|                'glpi_profiles' => [
 | |
|                   'FKEY' => [
 | |
|                      'glpi_profilerights' => 'profiles_id',
 | |
|                      'glpi_profiles'      => 'id',
 | |
|                   ]
 | |
|                ],
 | |
|                'glpi_profiles_users' => [
 | |
|                   'FKEY' => [
 | |
|                      'glpi_profiles_users' => 'profiles_id',
 | |
|                      'glpi_profiles'       => 'id',
 | |
|                      [
 | |
|                         'AND' => ['glpi_profiles_users.users_id' => $user_id],
 | |
|                      ],
 | |
|                   ]
 | |
|                ],
 | |
|             ],
 | |
|             'WHERE'      => [
 | |
|                'glpi_profilerights.name'   => $rightname,
 | |
|                'glpi_profilerights.rights' => ['&',  $rightvalue],
 | |
|             ] + getEntitiesRestrictCriteria('glpi_profiles_users', '', $entity_id, true),
 | |
|          ]
 | |
|       );
 | |
| 
 | |
|       if (!$data = $result->next()) {
 | |
|          return false;
 | |
|       }
 | |
| 
 | |
|       return $data['cpt'] > 0;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Get rights for an itemtype
 | |
|     *
 | |
|     * @since 0.85
 | |
|     *
 | |
|     * @param $itemtype   string   itemtype
 | |
|     * @param $interface  string   (default 'central')
 | |
|     *
 | |
|     * @return rights
 | |
|    **/
 | |
|    static function getRightsFor($itemtype, $interface = 'central') {
 | |
| 
 | |
|       if (class_exists($itemtype)) {
 | |
|          $item = new $itemtype();
 | |
|          return $item->getRights($interface);
 | |
|       }
 | |
| 
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Display rights choice matrix
 | |
|     *
 | |
|     * @since 0.85
 | |
|     *
 | |
|     * @param $rights array    possible:
 | |
|     *             'itemtype'   => the type of the item to check (as passed to self::getRightsFor())
 | |
|     *             'rights'     => when use of self::getRightsFor() is impossible
 | |
|     *             'label'      => the label for the right
 | |
|     *             'field'      => the name of the field inside the DB and HTML form (prefixed by '_')
 | |
|     *             'html_field' => when $html_field != '_'.$field
 | |
|     * @param $options array   possible:
 | |
|     *             'title'         the title of the matrix
 | |
|     *             'canedit'
 | |
|     *             'default_class' the default CSS class used for the row
 | |
|     *
 | |
|     * @return random value used to generate the ids
 | |
|    **/
 | |
|    function displayRightsChoiceMatrix(array $rights, array $options = []) {
 | |
| 
 | |
|       $param                  = [];
 | |
|       $param['title']         = '';
 | |
|       $param['canedit']       = true;
 | |
|       $param['default_class'] = '';
 | |
| 
 | |
|       if (is_array($options) && count($options)) {
 | |
|          foreach ($options as $key => $val) {
 | |
|             $param[$key] = $val;
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       // To be completed before display to avoid non available rights in DB
 | |
|        $availablerights = ProfileRight::getAllPossibleRights();
 | |
| 
 | |
|       $column_labels = [];
 | |
|       $columns       = [];
 | |
|       $rows          = [];
 | |
| 
 | |
|       foreach ($rights as $info) {
 | |
| 
 | |
|          if (is_string($info)) {
 | |
|             $rows[] = $info;
 | |
|             continue;
 | |
|          }
 | |
|          if (is_array($info)
 | |
|              && ((!empty($info['itemtype'])) || (!empty($info['rights'])))
 | |
|              && (!empty($info['label']))
 | |
|              && (!empty($info['field']))) {
 | |
|             // Add right if it does not exists : security for update
 | |
|             if (!isset($availablerights[$info['field']])) {
 | |
|                ProfileRight::addProfileRights([$info['field']]);
 | |
|             }
 | |
| 
 | |
|             $row = ['label'   => $info['label'],
 | |
|                          'columns' => []];
 | |
|             if (!empty($info['row_class'])) {
 | |
|                $row['class'] = $info['row_class'];
 | |
|             } else {
 | |
|                $row['class'] = $param['default_class'];
 | |
|             }
 | |
|             if (isset($this->fields[$info['field']])) {
 | |
|                $profile_right = $this->fields[$info['field']];
 | |
|             } else {
 | |
|                $profile_right = 0;
 | |
|             }
 | |
| 
 | |
|             if (isset($info['rights'])) {
 | |
|                $itemRights = $info['rights'];
 | |
|             } else {
 | |
|                $itemRights = self::getRightsFor($info['itemtype']);
 | |
|             }
 | |
|             foreach ($itemRights as $right => $label) {
 | |
|                if (!isset($column_labels[$right])) {
 | |
|                   $column_labels[$right] = [];
 | |
|                }
 | |
|                if (is_array($label)) {
 | |
|                   $long_label = $label['long'];
 | |
|                } else {
 | |
|                   $long_label = $label;
 | |
|                }
 | |
|                if (!isset($column_labels[$right][$long_label])) {
 | |
|                   $column_labels[$right][$long_label] = count($column_labels[$right]);
 | |
|                }
 | |
|                $right_value                  = $right.'_'.$column_labels[$right][$long_label];
 | |
| 
 | |
|                $columns[$right_value]        = $label;
 | |
| 
 | |
|                $checked                      = ((($profile_right & $right) == $right) ? 1 : 0);
 | |
|                $row['columns'][$right_value] = ['checked' => $checked];
 | |
|                if (!$param['canedit']) {
 | |
|                   $row['columns'][$right_value]['readonly'] = true;
 | |
|                }
 | |
|             }
 | |
|             if (!empty($info['html_field'])) {
 | |
|                $rows[$info['html_field']] = $row;
 | |
|             } else {
 | |
|                $rows['_'.$info['field']] = $row;
 | |
|             }
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       uksort($columns, function ($a, $b) {
 | |
|          $a = explode('_', $a);
 | |
|          $b = explode('_', $b);
 | |
| 
 | |
|          // For standard rights sort by right
 | |
|          if (($a[0] < 1024) || ($b[0] < 1024)) {
 | |
|             if ($a[0] > $b[0]) {
 | |
|                 return true;
 | |
|             }
 | |
|             if ($a[0] < $b[0]) {
 | |
|                 return false;
 | |
|             }
 | |
|             return ($a[1] > $b[1]);
 | |
|             // For extra right sort by type
 | |
|          }
 | |
|          return ($a[1] > $b[1]);
 | |
|       });
 | |
| 
 | |
|       return Html::showCheckboxMatrix($columns, $rows,
 | |
|                                       ['title'                => $param['title'],
 | |
|                                             'row_check_all'        => count($columns) > 1,
 | |
|                                             'col_check_all'        => count($rows) > 1,
 | |
|                                             'rotate_column_titles' => false]);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    /**
 | |
|     * Get right linear right choice.
 | |
|     *
 | |
|     * @since 0.85
 | |
|     *
 | |
|     * @param $elements  array   all pair identifier => label
 | |
|     * @param $options   array   possible:
 | |
|     *             'canedit'
 | |
|     *             'field'         name of the HTML field
 | |
|     *             'value'         the value inside the database
 | |
|     *             'max_per_line'  maximum number of elements per line
 | |
|     *             'check_all'     add a checkbox to check or uncheck every checkbox
 | |
|     *             'rand'          random value used to generate the ids
 | |
|     *             'zero_on_empty' do we send 0 when checkbox is not checked ?
 | |
|     *             'display'
 | |
|     *             'check_method'  method used to check the right
 | |
|     *
 | |
|     * @return content if !display
 | |
|    **/
 | |
|    static function getLinearRightChoice(array $elements, array $options = []) {
 | |
| 
 | |
|       $param                  = [];
 | |
|       $param['canedit']       = true;
 | |
|       $param['field']         = '';
 | |
|       $param['value']         = '';
 | |
|       $param['max_per_line']  = 10;
 | |
|       $param['check_all']     = false;
 | |
|       $param['rand']          = mt_rand();
 | |
|       $param['zero_on_empty'] = true;
 | |
|       $param['display']       = true;
 | |
|       $param['check_method']  = function ($element, $field) {
 | |
|          return (($field & $element) == $element);
 | |
|       };
 | |
| 
 | |
|       if (is_array($options) && count($options)) {
 | |
|          foreach ($options as $key => $val) {
 | |
|             $param[$key] = $val;
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       if (empty($param['field'])) {
 | |
|          return;
 | |
|       }
 | |
| 
 | |
|       $nb_cbs      = count($elements);
 | |
|       $cb_options  = ['readonly' => !$param['canedit']];
 | |
|       if ($param['check_all']) {
 | |
|          $nb_cbs ++;
 | |
|          $massive_tag                = 'checkall_'.$param['field'].'_'.$param['rand'];
 | |
|          $cb_options['massive_tags'] = $massive_tag;
 | |
|       }
 | |
| 
 | |
|       $nb_lines         = ceil($nb_cbs / $param['max_per_line']);
 | |
|       $nb_item_per_line = ceil($nb_cbs / $nb_lines);
 | |
| 
 | |
|       $out              = '';
 | |
| 
 | |
|       $count            = 0;
 | |
|       $nb_checked       = 0;
 | |
|       foreach ($elements as $element => $label) {
 | |
|          if ($count != 0) {
 | |
|             if (($count % $nb_item_per_line) == 0) {
 | |
|                $out .= "<br>\n";
 | |
|             } else {
 | |
|                $out .= " -\n\t\t ";
 | |
|             }
 | |
|          } else {
 | |
|             $out .= "\n\t\t";
 | |
|          }
 | |
|          $out                        .= $label.' ';
 | |
|          $cb_options['name']          = $param['field'].'['.$element.']';
 | |
|          $cb_options['id']            = Html::cleanId('checkbox_linear_'.$cb_options['name'].
 | |
|                                                       '_'.$param['rand']);
 | |
|          $cb_options['zero_on_empty'] = $param['zero_on_empty'];
 | |
| 
 | |
|          $cb_options['checked']       = $param['check_method']($element,
 | |
|                                                                $param['value']);
 | |
| 
 | |
|          $out                        .= Html::getCheckbox($cb_options);
 | |
|          $count ++;
 | |
|          if ($cb_options['checked']) {
 | |
|             $nb_checked ++;
 | |
|          }
 | |
|       }
 | |
| 
 | |
|       if ($param['check_all']) {
 | |
|          $cb_options = ['criterion' => ['tag_for_massive' => $massive_tag],
 | |
|                              'id'        => Html::cleanId('checkbox_linear_'.$param['rand'])];
 | |
|          if ($nb_checked > (count($elements) / 2)) {
 | |
|             $cb_options['checked'] = true;
 | |
|          }
 | |
|          $out .= " - <i><b>".__('Select/unselect all')."</b></i> ".
 | |
|                   Html::getCheckbox($cb_options);
 | |
|       }
 | |
| 
 | |
|       if (!$param['display']) {
 | |
|          return $out;
 | |
|       }
 | |
| 
 | |
|       echo $out;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    static function getIcon() {
 | |
|       return "fas fa-user-check";
 | |
|    }
 | |
| }
 |