manageDateOnStatusChange() static public method

Fill, if necessary, automatically some dates when status changes
static public manageDateOnStatusChange ( CommonDBTM $item, $action_add = true ) : nothing
$item CommonDBTM
return nothing
 /**
  * Update some elements of an item in the database.
  *
  * @param $input array : the _POST vars returned by the item form when press update
  * @param $history boolean : do history log ?
  * @param options an array with the insert options
  *
  * @return boolean : true on success
  **/
 function update($input, $history = 1, $options = array())
 {
     global $DB, $CFG_GLPI;
     if ($DB->isSlave()) {
         return false;
     }
     if (!$this->getFromDB($input[$this->getIndexName()])) {
         return false;
     }
     // Store input in the object to be available in all sub-method / hook
     $this->input = $input;
     // Plugin hook - $this->input can be altered
     doHook("pre_item_update", $this);
     if ($this->input && is_array($this->input)) {
         $this->input = $this->prepareInputForUpdate($this->input);
         if (isset($this->input['update'])) {
             $this->input['_update'] = $this->input['update'];
             unset($this->input['update']);
         }
         $this->filterValues();
     }
     // Valid input for update
     if ($this->checkUnicity(false, $options)) {
         if ($this->input && is_array($this->input)) {
             // Fill the update-array with changes
             $x = 0;
             $this->updates = array();
             $this->oldvalues = array();
             foreach ($this->input as $key => $val) {
                 if (array_key_exists($key, $this->fields)) {
                     // Prevent history for date statement (for date for example)
                     if (is_null($this->fields[$key]) && $this->input[$key] == 'NULL') {
                         $this->fields[$key] = 'NULL';
                     }
                     if (mysql_real_escape_string($this->fields[$key]) != $this->input[$key]) {
                         if ($key != "id") {
                             // Store old values
                             if (!in_array($key, $this->history_blacklist)) {
                                 $this->oldvalues[$key] = $this->fields[$key];
                             }
                             $this->fields[$key] = $this->input[$key];
                             $this->updates[$x] = $key;
                             $x++;
                         }
                     }
                 }
             }
             if (count($this->updates)) {
                 if (array_key_exists('date_mod', $this->fields)) {
                     // is a non blacklist field exists
                     if (count(array_diff($this->updates, $this->history_blacklist)) > 0) {
                         $this->fields['date_mod'] = $_SESSION["glpi_currenttime"];
                         $this->updates[$x++] = 'date_mod';
                     }
                 }
                 $this->pre_updateInDB();
                 if (count($this->updates)) {
                     if ($this->updateInDB($this->updates, $this->dohistory && $history ? $this->oldvalues : array())) {
                         $this->addMessageOnUpdateAction();
                         doHook("item_update", $this);
                         // forward entity information if needed
                         if (count($this->forward_entity_to) && (in_array("entities_id", $this->updates) || in_array("is_recursive", $this->updates))) {
                             $this->forwardEntityInformations();
                         }
                         // If itemtype is in infocomtype and if states_id field is filled
                         // and item not a template
                         if (in_array($this->getType(), $CFG_GLPI["infocom_types"]) && in_array('states_id', $this->updates) && $this->getField('is_template') != NOT_AVAILABLE) {
                             //Check if we have to automatical fill dates
                             Infocom::manageDateOnStatusChange($this, false);
                         }
                     }
                 }
             }
             $this->post_updateItem($history);
             return true;
         }
     }
     return false;
 }
Esempio n. 2
0
 /**
  * Update some elements of an item in the database.
  *
  * @param $input     array    the _POST vars returned by the item form when press update
  * @param $history   boolean  do history log ? (default 1)
  * @param options    array    with the insert options
  *
  * @return boolean : true on success
  **/
 function update(array $input, $history = 1, $options = array())
 {
     global $DB, $CFG_GLPI;
     if ($DB->isSlave()) {
         return false;
     }
     if (!$this->getFromDB($input[static::getIndexName()])) {
         return false;
     }
     // Store input in the object to be available in all sub-method / hook
     $this->input = $input;
     // Plugin hook - $this->input can be altered
     Plugin::doHook("pre_item_update", $this);
     if ($this->input && is_array($this->input)) {
         $this->input = $this->prepareInputForUpdate($this->input);
         if (isset($this->input['update'])) {
             $this->input['_update'] = $this->input['update'];
             unset($this->input['update']);
         }
         $this->filterValues(!isCommandLine());
     }
     // Valid input for update
     if ($this->checkUnicity(false, $options)) {
         if ($this->input && is_array($this->input)) {
             // Fill the update-array with changes
             $x = 0;
             $this->updates = array();
             $this->oldvalues = array();
             foreach ($this->input as $key => $val) {
                 if (array_key_exists($key, $this->fields)) {
                     // Prevent history for date statement (for date for example)
                     if (is_null($this->fields[$key]) && $this->input[$key] == 'NULL') {
                         $this->fields[$key] = 'NULL';
                     }
                     // Compare item
                     $ischanged = true;
                     $searchopt = $this->getSearchOptionByField('field', $key, $this->getTable());
                     if (isset($searchopt['datatype'])) {
                         switch ($searchopt['datatype']) {
                             case 'string':
                             case 'text':
                                 $ischanged = strcmp($DB->escape($this->fields[$key]), $this->input[$key]) != 0;
                                 break;
                             case 'itemlink':
                                 if ($key == 'name') {
                                     $ischanged = strcmp($DB->escape($this->fields[$key]), $this->input[$key]) != 0;
                                     break;
                                 }
                                 // else default
                             // else default
                             default:
                                 $ischanged = $DB->escape($this->fields[$key]) != $this->input[$key];
                                 break;
                         }
                     } else {
                         // No searchoption case
                         $ischanged = $DB->escape($this->fields[$key]) != $this->input[$key];
                     }
                     if ($ischanged) {
                         if ($key != "id") {
                             // Store old values
                             if (!in_array($key, $this->history_blacklist)) {
                                 $this->oldvalues[$key] = $this->fields[$key];
                             }
                             $this->fields[$key] = $this->input[$key];
                             $this->updates[$x] = $key;
                             $x++;
                         }
                     }
                 }
             }
             if (count($this->updates)) {
                 if (array_key_exists('date_mod', $this->fields)) {
                     // is a non blacklist field exists
                     if (count(array_diff($this->updates, $this->history_blacklist)) > 0) {
                         $this->fields['date_mod'] = $_SESSION["glpi_currenttime"];
                         $this->updates[$x++] = 'date_mod';
                     }
                 }
                 $this->pre_updateInDB();
                 if (count($this->updates)) {
                     if ($this->updateInDB($this->updates, $this->dohistory && $history ? $this->oldvalues : array())) {
                         $this->addMessageOnUpdateAction();
                         Plugin::doHook("item_update", $this);
                         //Fill forward_entity_to array with itemtypes coming from plugins
                         if (isset(self::$plugins_forward_entity[$this->getType()])) {
                             foreach (self::$plugins_forward_entity[$this->getType()] as $itemtype) {
                                 static::$forward_entity_to[] = $itemtype;
                             }
                         }
                         // forward entity information if needed
                         if (count(static::$forward_entity_to) && (in_array("entities_id", $this->updates) || in_array("is_recursive", $this->updates))) {
                             $this->forwardEntityInformations();
                         }
                         // If itemtype is in infocomtype and if states_id field is filled
                         // and item not a template
                         if (InfoCom::canApplyOn($this) && in_array('states_id', $this->updates) && $this->getField('is_template') != NOT_AVAILABLE) {
                             //Check if we have to automatical fill dates
                             Infocom::manageDateOnStatusChange($this, false);
                         }
                     }
                 }
             }
             $this->post_updateItem($history);
             if ($this->mailqueueonaction) {
                 QueuedMail::forceSendFor($this->getType(), $this->fields['id']);
             }
             return true;
         }
     }
     return false;
 }