function prepareInputForUpdate($input)
{
// Add document if needed
$this->getFromDB($input["id"]);
// entities_id field required
if (!isset($input['_donotadddocs']) || !$input['_donotadddocs']) {
$docadded = $this->addFiles(1, isset($input['_disablenotif']) ? $input['_disablenotif'] : 0);
if (isset($this->input['_forcenotif'])) {
$input['_forcenotif'] = $this->input['_forcenotif'];
unset($input['_disablenotif']);
}
if (isset($this->input['content'])) {
$input['content'] = $this->input['content'];
}
}
if (isset($input["document"]) && $input["document"] > 0) {
$doc = new Document();
if ($doc->getFromDB($input["document"])) {
$docitem = new Document_Item();
if ($docitem->add(array('documents_id' => $input["document"], 'itemtype' => $this->getType(), 'items_id' => $input["id"]))) {
// Force date_mod of tracking
$input["date_mod"] = $_SESSION["glpi_currenttime"];
$input['_doc_added'][] = $doc->fields["name"];
}
}
unset($input["document"]);
}
if (isset($input["date"]) && empty($input["date"])) {
unset($input["date"]);
}
if (isset($input["closedate"]) && empty($input["closedate"])) {
unset($input["closedate"]);
}
if (isset($input["solvedate"]) && empty($input["solvedate"])) {
unset($input["solvedate"]);
}
if (isset($input['_itil_requester'])) {
if (isset($input['_itil_requester']['_type'])) {
$input['_itil_requester']['type'] = CommonITILActor::REQUESTER;
$input['_itil_requester'][$this->getForeignKeyField()] = $input['id'];
switch ($input['_itil_requester']['_type']) {
case "user":
if (isset($input['_itil_requester']['use_notification']) && is_array($input['_itil_requester']['use_notification'])) {
$input['_itil_requester']['use_notification'] = $input['_itil_requester']['use_notification'][0];
}
if (isset($input['_itil_requester']['alternative_email']) && is_array($input['_itil_requester']['alternative_email'])) {
$input['_itil_requester']['alternative_email'] = $input['_itil_requester']['alternative_email'][0];
}
if (!empty($this->userlinkclass)) {
if (isset($input['_itil_requester']['alternative_email']) && $input['_itil_requester']['alternative_email'] && !NotificationMail::isUserAddressValid($input['_itil_requester']['alternative_email'])) {
$input['_itil_requester']['alternative_email'] = '';
Session::addMessageAfterRedirect(__('Invalid email address'), false, ERROR);
}
if (isset($input['_itil_requester']['alternative_email']) && $input['_itil_requester']['alternative_email'] || $input['_itil_requester']['users_id'] > 0) {
$useractors = new $this->userlinkclass();
if (isset($input['_auto_update']) || $useractors->can(-1, CREATE, $input['_itil_requester'])) {
$input['_itil_requester']['_from_object'] = true;
$useractors->add($input['_itil_requester']);
$input['_forcenotif'] = true;
}
}
}
break;
case "group":
if (!empty($this->grouplinkclass) && $input['_itil_requester']['groups_id'] > 0) {
$groupactors = new $this->grouplinkclass();
if (isset($input['_auto_update']) || $groupactors->can(-1, CREATE, $input['_itil_requester'])) {
$input['_itil_requester']['_from_object'] = true;
$groupactors->add($input['_itil_requester']);
$input['_forcenotif'] = true;
}
}
break;
}
}
}
if (isset($input['_itil_observer'])) {
if (isset($input['_itil_observer']['_type'])) {
$input['_itil_observer']['type'] = CommonITILActor::OBSERVER;
$input['_itil_observer'][$this->getForeignKeyField()] = $input['id'];
switch ($input['_itil_observer']['_type']) {
case "user":
if (isset($input['_itil_observer']['use_notification']) && is_array($input['_itil_observer']['use_notification'])) {
$input['_itil_observer']['use_notification'] = $input['_itil_observer']['use_notification'][0];
}
if (isset($input['_itil_observer']['alternative_email']) && is_array($input['_itil_observer']['alternative_email'])) {
$input['_itil_observer']['alternative_email'] = $input['_itil_observer']['alternative_email'][0];
}
if (!empty($this->userlinkclass)) {
if (isset($input['_itil_observer']['alternative_email']) && $input['_itil_observer']['alternative_email'] && !NotificationMail::isUserAddressValid($input['_itil_observer']['alternative_email'])) {
$input['_itil_observer']['alternative_email'] = '';
Session::addMessageAfterRedirect(__('Invalid email address'), false, ERROR);
}
if (isset($input['_itil_observer']['alternative_email']) && $input['_itil_observer']['alternative_email'] || $input['_itil_observer']['users_id'] > 0) {
$useractors = new $this->userlinkclass();
if (isset($input['_auto_update']) || $useractors->can(-1, CREATE, $input['_itil_observer'])) {
$input['_itil_observer']['_from_object'] = true;
$useractors->add($input['_itil_observer']);
$input['_forcenotif'] = true;
}
}
}
break;
case "group":
if (!empty($this->grouplinkclass) && $input['_itil_observer']['groups_id'] > 0) {
$groupactors = new $this->grouplinkclass();
if (isset($input['_auto_update']) || $groupactors->can(-1, CREATE, $input['_itil_observer'])) {
$input['_itil_observer']['_from_object'] = true;
$groupactors->add($input['_itil_observer']);
$input['_forcenotif'] = true;
}
}
break;
}
}
}
if (isset($input['_itil_assign'])) {
if (isset($input['_itil_assign']['_type'])) {
$input['_itil_assign']['type'] = CommonITILActor::ASSIGN;
$input['_itil_assign'][$this->getForeignKeyField()] = $input['id'];
if (isset($input['_itil_assign']['use_notification']) && is_array($input['_itil_assign']['use_notification'])) {
$input['_itil_assign']['use_notification'] = $input['_itil_assign']['use_notification'][0];
}
if (isset($input['_itil_assign']['alternative_email']) && is_array($input['_itil_assign']['alternative_email'])) {
$input['_itil_assign']['alternative_email'] = $input['_itil_assign']['alternative_email'][0];
}
switch ($input['_itil_assign']['_type']) {
case "user":
if (!empty($this->userlinkclass) && $input['_itil_assign']['users_id'] > 0) {
$useractors = new $this->userlinkclass();
if (isset($input['_auto_update']) || $useractors->can(-1, CREATE, $input['_itil_assign'])) {
$input['_itil_assign']['_from_object'] = true;
$useractors->add($input['_itil_assign']);
$input['_forcenotif'] = true;
if (!isset($input['status']) && in_array($this->fields['status'], $this->getNewStatusArray()) || isset($input['status']) && in_array($input['status'], $this->getNewStatusArray())) {
if (in_array(self::ASSIGNED, array_keys($this->getAllStatusArray()))) {
$input['status'] = self::ASSIGNED;
}
}
}
}
break;
case "group":
if (!empty($this->grouplinkclass) && $input['_itil_assign']['groups_id'] > 0) {
$groupactors = new $this->grouplinkclass();
if (isset($input['_auto_update']) || $groupactors->can(-1, CREATE, $input['_itil_assign'])) {
$input['_itil_assign']['_from_object'] = true;
$groupactors->add($input['_itil_assign']);
$input['_forcenotif'] = true;
if (!isset($input['status']) && in_array($this->fields['status'], $this->getNewStatusArray()) || isset($input['status']) && in_array($input['status'], $this->getNewStatusArray())) {
if (in_array(self::ASSIGNED, array_keys($this->getAllStatusArray()))) {
$input['status'] = self::ASSIGNED;
}
}
}
}
break;
case "supplier":
if (!empty($this->supplierlinkclass) && $input['_itil_assign']['suppliers_id'] > 0) {
$supplieractors = new $this->supplierlinkclass();
if (isset($input['_auto_update']) || $supplieractors->can(-1, CREATE, $input['_itil_assign'])) {
$input['_itil_assign']['_from_object'] = true;
$supplieractors->add($input['_itil_assign']);
$input['_forcenotif'] = true;
if (!isset($input['status']) && in_array($this->fields['status'], $this->getNewStatusArray()) || isset($input['status']) && in_array($input['status'], $this->getNewStatusArray())) {
if (in_array(self::ASSIGNED, array_keys($this->getAllStatusArray()))) {
$input['status'] = self::ASSIGNED;
}
}
}
}
break;
}
}
}
$this->addAdditionalActors($input);
// set last updater if interactive user
if (!Session::isCron()) {
$input['users_id_lastupdater'] = Session::getLoginUserID();
}
if (isset($input["status"]) && !in_array($input["status"], array_merge($this->getSolvedStatusArray(), $this->getClosedStatusArray()))) {
$input['solvedate'] = 'NULL';
}
if (isset($input["status"]) && !in_array($input["status"], $this->getClosedStatusArray())) {
$input['closedate'] = 'NULL';
}
return $input;
}