function prepareInputForAdd($input) { global $CFG_GLPI; // save value before clean; $title = ltrim($input['name']); // Standard clean datas $input = parent::prepareInputForAdd($input); // Do not check mandatory on auto import (mailgates) if (!isset($input['_auto_import'])) { if (isset($input['_tickettemplates_id']) && $input['_tickettemplates_id']) { $tt = new TicketTemplate(); if ($tt->getFromDBWithDatas($input['_tickettemplates_id'])) { if (count($tt->mandatory)) { $mandatory_missing = array(); $fieldsname = $tt->getAllowedFieldsNames(true); foreach ($tt->mandatory as $key => $val) { // for title if mandatory (restore initial value) if ($key == 'name') { $input['name'] = $title; } // Check only defined values : Not defined not in form if (isset($input[$key])) { // If content is also predefined need to be different from predefined value if ($key == 'content' && isset($tt->predefined['content'])) { // Clean new lines to be fix encoding if (strcmp(preg_replace("/\r?\n/", "", Html::cleanPostForTextArea($input[$key])), preg_replace("/\r?\n/", "", $tt->predefined['content'])) == 0) { $mandatory_missing[$key] = $fieldsname[$val]; } } if (empty($input[$key]) || $input[$key] == 'NULL' || is_array($input[$key]) && $input[$key] === array(0 => "0")) { $mandatory_missing[$key] = $fieldsname[$val]; } } if ($key == '_add_validation' && !empty($input['users_id_validate']) && isset($input['users_id_validate'][0]) && $input['users_id_validate'][0] > 0) { unset($mandatory_missing['_add_validation']); } // For due_date and time_to_own : check also slts foreach (array(SLT::TTR, SLT::TTO) as $sltType) { list($dateField, $sltField) = SLT::getSltFieldNames($sltType); if ($key == $dateField && isset($input[$sltField]) && $input[$sltField] > 0 && isset($mandatory_missing[$dateField])) { unset($mandatory_missing[$dateField]); } } // For document mandatory if ($key == '_documents_id' && !isset($input['_filename']) && !isset($input['_tag_filename']) && !isset($input['_stock_image']) && !isset($input['_tag_stock_image'])) { $mandatory_missing[$key] = $fieldsname[$val]; } } if (count($mandatory_missing)) { //TRANS: %s are the fields concerned $message = sprintf(__('Mandatory fields are not filled. Please correct: %s'), implode(", ", $mandatory_missing)); Session::addMessageAfterRedirect($message, false, ERROR); return false; } } } } } if (!isset($input["requesttypes_id"])) { $input["requesttypes_id"] = RequestType::getDefault('helpdesk'); } if (!isset($input['global_validation'])) { $input['global_validation'] = CommonITILValidation::NONE; } // Set additional default dropdown $dropdown_fields = array('users_locations', 'items_locations'); foreach ($dropdown_fields as $field) { if (!isset($input[$field])) { $input[$field] = 0; } } if (!isset($input['itemtype']) || !isset($input['items_id']) || !($input['items_id'] > 0)) { $input['itemtype'] = ''; } // Get first item location $item = NULL; if (isset($input["items_id"]) && is_array($input["items_id"]) && count($input["items_id"]) > 0) { foreach ($input["items_id"] as $itemtype => $items) { foreach ($items as $items_id) { if ($item = getItemForItemtype($itemtype)) { $item->getFromDB($items_id); $input['items_locations'] = $item->fields['locations_id']; $input['items_groups'] = $item->fields['groups_id']; break 2; } } } } // Business Rules do not override manual SLT $manual_slts_id = array(); foreach (array(SLT::TTR, SLT::TTO) as $sltType) { list($dateField, $sltField) = SLT::getSltFieldNames($sltType); if (isset($input[$sltField]) && $input[$sltField] > 0) { $manual_slts_id[$sltType] = $input[$sltField]; } } // Process Business Rules $rules = new RuleTicketCollection($input['entities_id']); // Set unset variables with are needed $user = new User(); if (isset($input["_users_id_requester"]) && !is_array($input["_users_id_requester"]) && $user->getFromDB($input["_users_id_requester"])) { $input['users_locations'] = $user->fields['locations_id']; $tmprequester = $input["_users_id_requester"]; } else { $tmprequester = 0; } // Clean new lines before passing to rules if (isset($input["content"])) { $input["content"] = preg_replace('/\\\\r\\\\n/', "\n", $input['content']); $input["content"] = preg_replace('/\\\\n/', "\n", $input['content']); if (!$CFG_GLPI['use_rich_text']) { $input["content"] = Html::entity_decode_deep($input["content"]); $input["content"] = Html::entity_decode_deep($input["content"]); $input["content"] = Html::clean($input["content"]); } } $input = $rules->processAllRules(Toolbox::stripslashes_deep($input), Toolbox::stripslashes_deep($input), array('recursive' => true), array('condition' => RuleTicket::ONADD)); // Recompute default values based on values computed by rules $input = $this->computeDefaultValuesForAdd($input); if (isset($input['_users_id_requester']) && !is_array($input['_users_id_requester']) && $input['_users_id_requester'] != $tmprequester) { // if requester set by rule, clear address from mailcollector unset($input['_users_id_requester_notif']); } // Manage auto assign $auto_assign_mode = Entity::getUsedConfig('auto_assign_mode', $input['entities_id']); switch ($auto_assign_mode) { case Entity::CONFIG_NEVER: break; case Entity::AUTO_ASSIGN_HARDWARE_CATEGORY: if ($item != NULL) { // Auto assign tech from item if ((!isset($input['_users_id_assign']) || $input['_users_id_assign'] == 0) && $item->isField('users_id_tech')) { $input['_users_id_assign'] = $item->getField('users_id_tech'); } // Auto assign group from item if ((!isset($input['_groups_id_assign']) || $input['_groups_id_assign'] == 0) && $item->isField('groups_id_tech')) { $input['_groups_id_assign'] = $item->getField('groups_id_tech'); } } // Auto assign tech/group from Category if ($input['itilcategories_id'] > 0 && (!isset($input['_users_id_assign']) || !$input['_users_id_assign'] || (!isset($input['_groups_id_assign']) || !$input['_groups_id_assign']))) { $cat = new ITILCategory(); $cat->getFromDB($input['itilcategories_id']); if ((!isset($input['_users_id_assign']) || !$input['_users_id_assign']) && $cat->isField('users_id')) { $input['_users_id_assign'] = $cat->getField('users_id'); } if ((!isset($input['_groups_id_assign']) || !$input['_groups_id_assign']) && $cat->isField('groups_id')) { $input['_groups_id_assign'] = $cat->getField('groups_id'); } } break; case Entity::AUTO_ASSIGN_CATEGORY_HARDWARE: // Auto assign tech/group from Category if ($input['itilcategories_id'] > 0 && (!isset($input['_users_id_assign']) || !$input['_users_id_assign'] || (!isset($input['_groups_id_assign']) || !$input['_groups_id_assign']))) { $cat = new ITILCategory(); $cat->getFromDB($input['itilcategories_id']); if ((!isset($input['_users_id_assign']) || !$input['_users_id_assign']) && $cat->isField('users_id')) { $input['_users_id_assign'] = $cat->getField('users_id'); } if ((!isset($input['_groups_id_assign']) || !$input['_groups_id_assign']) && $cat->isField('groups_id')) { $input['_groups_id_assign'] = $cat->getField('groups_id'); } } if ($item != NULL) { // Auto assign tech from item if ((!isset($input['_users_id_assign']) || $input['_users_id_assign'] == 0) && $item->isField('users_id_tech')) { $input['_users_id_assign'] = $item->getField('users_id_tech'); } // Auto assign group from item if ((!isset($input['_groups_id_assign']) || $input['_groups_id_assign'] == 0) && $item->isField('groups_id_tech')) { $input['_groups_id_assign'] = $item->getField('groups_id_tech'); } } break; } // Replay setting auto assign if set in rules engine or by auto_assign_mode if ((isset($input["_users_id_assign"]) && (!is_array($input['_users_id_assign']) && $input["_users_id_assign"] > 0 || is_array($input['_users_id_assign']) && count($input['_users_id_assign']) > 0) || isset($input["_groups_id_assign"]) && (!is_array($input['_groups_id_assign']) && $input["_groups_id_assign"] > 0 || is_array($input['_groups_id_assign']) && count($input['_groups_id_assign']) > 0) || isset($input["_suppliers_id_assign"]) && (!is_array($input['_suppliers_id_assign']) && $input["_suppliers_id_assign"] > 0 || is_array($input['_suppliers_id_assign']) && count($input['_suppliers_id_assign']) > 0)) && in_array($input['status'], $this->getNewStatusArray())) { $input["status"] = self::ASSIGNED; } // Manage SLT signment // Manual SLT defined : reset due date // No manual SLT and due date defined : reset auto SLT foreach (array(SLT::TTR, SLT::TTO) as $sltType) { $this->sltAffect($sltType, $input, $manual_slts_id); } // auto set type if not set if (!isset($input["type"])) { $input['type'] = Entity::getUsedConfig('tickettype', $input['entities_id'], '', Ticket::INCIDENT_TYPE); } return $input; }
/** * @see CommonDBTM::prepareInputForAdd() **/ function prepareInputForAdd($input) { // Avoid duplicate entry $restrict = " `tickets_id` = '" . $input['tickets_id'] . "'\n AND `itemtype` = '" . $input['itemtype'] . "'\n AND `items_id` = '" . $input['items_id'] . "'"; if (countElementsInTable($this->getTable(), $restrict) > 0) { return false; } $ticket = new Ticket(); $ticket->getFromDB($input['tickets_id']); // Get item location if location is not already set in ticket if (empty($ticket->fields['locations_id'])) { if ($input["items_id"] > 0 && !empty($input["itemtype"])) { if ($item = getItemForItemtype($input["itemtype"])) { if ($item->getFromDB($input["items_id"])) { if ($item->isField('locations_id')) { $ticket->fields['items_locations'] = $item->fields['locations_id']; // Process Business Rules $rules = new RuleTicketCollection($ticket->fields['entities_id']); $ticket->fields = $rules->processAllRules(Toolbox::stripslashes_deep($ticket->fields), Toolbox::stripslashes_deep($ticket->fields), array('recursive' => true)); unset($ticket->fields['items_locations']); $ticket->updateInDB(array('locations_id')); } } } } } $group = new Group_Ticket(); $groups = $group->find("`tickets_id` = " . $input['tickets_id'] . " AND `type` = " . CommonITILActor::REQUESTER); if (count($groups) <= 0) { if ($input["items_id"] > 0 && !empty($input["itemtype"])) { if ($item = getItemForItemtype($input["itemtype"])) { if ($item->getFromDB($input["items_id"])) { if ($item->isField('groups_id')) { $ticket->fields['items_groups'] = $item->fields['groups_id']; // Process Business Rules $rules = new RuleTicketCollection($ticket->fields['entities_id']); $ticket->fields = $rules->processAllRules(Toolbox::stripslashes_deep($ticket->fields), Toolbox::stripslashes_deep($ticket->fields), array('recursive' => true)); unset($ticket->fields['items_groups']); $group->add(array('tickets_id' => $input['tickets_id'], 'groups_id' => $item->fields['groups_id'], 'type' => CommonITILActor::REQUESTER)); } } } } } return parent::prepareInputForAdd($input); }
function prepareInputForAdd($input) { global $CFG_GLPI, $LANG; // Check mandatory $mandatory_ok = true; // Do not check mandatory on auto import (mailgates) if (!isset($input['_auto_import'])) { $_SESSION["helpdeskSaved"] = $input; if (!isset($input["urgency"])) { addMessageAfterRedirect($LANG['tracking'][4], false, ERROR); $mandatory_ok = false; } if ($CFG_GLPI["is_ticket_content_mandatory"] && (!isset($input['content']) || empty($input['content']))) { addMessageAfterRedirect($LANG['tracking'][8], false, ERROR); $mandatory_ok = false; } if ($CFG_GLPI["is_ticket_title_mandatory"] && (!isset($input['name']) || empty($input['name']))) { addMessageAfterRedirect($LANG['help'][40], false, ERROR); $mandatory_ok = false; } if ($CFG_GLPI["is_ticket_category_mandatory"] && (!isset($input['ticketcategories_id']) || empty($input['ticketcategories_id']))) { addMessageAfterRedirect($LANG['help'][41], false, ERROR); $mandatory_ok = false; } // if (isset($input['use_email_notification']) && $input['use_email_notification'] // && (!isset($input['user_email']) || empty($input['user_email']))) { // // addMessageAfterRedirect($LANG['help'][16], false, ERROR); // $mandatory_ok = false; // } if (!$mandatory_ok) { return false; } } if (!isset($input["urgency"]) || !($CFG_GLPI['urgency_mask'] & 1 << $input["urgency"])) { $input["urgency"] = 3; } if (!isset($input["impact"]) || !($CFG_GLPI['impact_mask'] & 1 << $input["impact"])) { $input["impact"] = 3; } if (!isset($input["priority"])) { $input["priority"] = $this->computePriority($input["urgency"], $input["impact"]); } unset($_SESSION["helpdeskSaved"]); // No Auto set Import for external source if (!isset($input['_auto_import'])) { if (!isset($input["_users_id_requester"])) { if ($uid = getLoginUserID()) { $input["_users_id_requester"] = $uid; } } } // set last updater if ($lastupdater = getLoginUserID(true)) { $input['users_id_lastupdater'] = $lastupdater; } // No Auto set Import for external source if (($uid = getLoginUserID()) && !isset($input['_auto_import'])) { $input["users_id_recipient"] = $uid; } else { if (isset($input["_users_id_requester"]) && $input["_users_id_requester"]) { $input["users_id_recipient"] = $input["_users_id_requester"]; } } if (!isset($input["requesttypes_id"])) { $input["requesttypes_id"] = RequestType::getDefault('helpdesk'); } if (!isset($input["status"])) { $input["status"] = "new"; } if (!isset($input['global_validation'])) { $input['global_validation'] = 'none'; } if (!isset($input["date"]) || empty($input["date"])) { $input["date"] = $_SESSION["glpi_currenttime"]; } if (!isset($input["_users_id_assign"])) { $input["_users_id_assign"] = 0; } if (!isset($input["_groups_id_assign"])) { $input["_groups_id_assign"] = 0; } // Set default dropdown $dropdown_fields = array('entities_id', 'items_id', 'suppliers_id_assign', 'ticketcategories_id'); foreach ($dropdown_fields as $field) { if (!isset($input[$field])) { $input[$field] = 0; } } if (!isset($input['itemtype']) || !($input['items_id'] > 0)) { $input['itemtype'] = ''; } $item = NULL; if ($input["items_id"] > 0 && !empty($input["itemtype"])) { if (class_exists($input["itemtype"])) { $item = new $input["itemtype"](); if (!$item->getFromDB($input["items_id"])) { $item = NULL; } } } // Auto group define from item // if ($item != NULL) { // if ($item->isField('groups_id') // && (!isset($input["_groups_id_requester"]) || $input["_groups_id_requester"]==0)) { // $input["_groups_id_requester"] = $item->getField('groups_id'); // } // } // Manage auto assign $entitydata = new EntityData(); $auto_assign_mode = $CFG_GLPI['auto_assign_mode']; if ($entitydata->getFromDB($input['entities_id'])) { $auto_assign_mode = $entitydata->getField('auto_assign_mode'); // Set global config value if ($auto_assign_mode == -1) { $auto_assign_mode = $CFG_GLPI['auto_assign_mode']; } } switch ($auto_assign_mode) { case NO_AUTO_ASSIGN: break; case AUTO_ASSIGN_HARDWARE_CATEGORY: // Auto assign tech from item if ($input["_users_id_assign"] == 0 && $item != NULL) { if ($item->isField('users_id_tech')) { $input["_users_id_assign"] = $item->getField('users_id_tech'); if ($input["_users_id_assign"] > 0) { $input["status"] = "assign"; } } } // Auto assign tech/group from Category if ($input['ticketcategories_id'] > 0 && (!$input['_users_id_assign'] || !$input['_groups_id_assign'])) { $cat = new TicketCategory(); $cat->getFromDB($input['ticketcategories_id']); if (!$input['_users_id_assign'] && $cat->isField('users_id')) { $input['_users_id_assign'] = $cat->getField('users_id'); } if (!$input['_groups_id_assign'] && $cat->isField('groups_id')) { $input['_groups_id_assign'] = $cat->getField('groups_id'); } } break; case AUTO_ASSIGN_CATEGORY_HARDWARE: // Auto assign tech/group from Category if ($input['ticketcategories_id'] > 0 && (!$input['_users_id_assign'] || !$input['_groups_id_assign'])) { $cat = new TicketCategory(); $cat->getFromDB($input['ticketcategories_id']); if (!$input['_users_id_assign'] && $cat->isField('users_id')) { $input['_users_id_assign'] = $cat->getField('users_id'); } if (!$input['_groups_id_assign'] && $cat->isField('groups_id')) { $input['_groups_id_assign'] = $cat->getField('groups_id'); } } // Auto assign tech from item if ($input["_users_id_assign"] == 0 && $item != NULL) { if ($item->isField('users_id_tech')) { $input["_users_id_assign"] = $item->getField('users_id_tech'); if ($input["_users_id_assign"] > 0) { $input["status"] = "assign"; } } } break; } // Process Business Rules $rules = new RuleTicketCollection($input['entities_id']); // Set unset variables with are needed $user = new User(); if (isset($input["_users_id_requester"]) && $user->getFromDB($input["_users_id_requester"])) { $input['users_locations'] = $user->fields['locations_id']; } $input = $rules->processAllRules($input, $input, array('recursive' => true)); // if (isset($input["use_email_notification"]) // && $input["use_email_notification"] // && empty($input["user_email"])) { // // if ($user->getFromDB($input["users_id"])) { // $input["user_email"] = $user->fields["email"]; // } // } if ((isset($input["_users_id_assign"]) && $input["_users_id_assign"] > 0 || isset($input["_groups_id_assign"]) && $input["_groups_id_assign"] > 0 || isset($input["suppliers_id_assign"]) && $input["suppliers_id_assign"] > 0) && $input["status"] == "new") { $input["status"] = "assign"; } if (isset($input["hour"]) && isset($input["minute"])) { $input["actiontime"] = $input["hour"] * HOUR_TIMESTAMP + $input["minute"] * MINUTE_TIMESTAMP; $input["_hour"] = $input["hour"]; $input["_minute"] = $input["minute"]; unset($input["hour"]); unset($input["minute"]); } if (isset($input["status"]) && $input["status"] == "solved") { if (isset($input["date"])) { $input["solvedate"] = $input["date"]; } else { $input["solvedate"] = $_SESSION["glpi_currenttime"]; } } if (isset($input["status"]) && $input["status"] == "closed") { if (isset($input["date"])) { $input["closedate"] = $input["date"]; } else { $input["closedate"] = $_SESSION["glpi_currenttime"]; } $input['solvedate'] = $input["closedate"]; } // Set begin waiting time if status is waiting if (isset($input["status"]) && $input["status"] == "waiting") { $input['begin_waiting_date'] = $input['date']; } // No name set name if (empty($input["name"])) { $input["name"] = preg_replace('/\\r\\n/', ' ', $input['content']); $input["name"] = preg_replace('/\\n/', ' ', $input['name']); $input["name"] = utf8_substr($input['name'], 0, 70); } //// Manage SLA assignment // due date defined : no SLA if (isset($input["due_date"]) && $input['due_date'] != 'NULL') { // Valid due date if ($input['due_date'] > $input['date']) { if (isset($input["slas_id"])) { unset($input["slas_id"]); } } else { // Unset due date unset($input["due_date"]); } } if (isset($input["slas_id"]) && $input["slas_id"] > 0) { $sla = new SLA(); if ($sla->getFromDB($input["slas_id"])) { // Get first SLA Level $input["slalevels_id"] = SlaLevel::getFirstSlaLevel($input["slas_id"]); // Compute due_date $input['due_date'] = $sla->computeDueDate($input['date']); $input['sla_waiting_duration'] = 0; } else { $input["slalevels_id"] = 0; $input["slas_id"] = 0; $input['sla_waiting_duration'] = 0; } } // auto set type if not set if (!isset($input["type"])) { $input['type'] = EntityData::getUsedConfig('tickettype', $input['entities_id']); } return $input; }
$checklist->GetfromDB($key); $input["content"] = addslashes($checklist->fields["comment"]); $input["name"] = addslashes($checklist->fields["name"]); $input["itemtype"] = "PluginResourcesResource"; $input["items_id"] = $checklist->fields["plugin_resources_resources_id"]; $input["requesttypes_id"] = "6"; $input["urgency"] = "3"; $input["_users_id_assign"] = 0; $input['_groups_id_assign'] = 0; $input["entities_id"] = $checklist->fields["entities_id"]; if ($cat->getfromDB(1)) { $input["itilcategories_id"] = $cat->fields["ticketcategories_id"]; } else { $input["itilcategories_id"] = 0; } $rules = new RuleTicketCollection(); $input = $rules->processAllRules($input, $input); $Ticket = new Ticket(); $Ticket->add($input); } } } } Html::redirect(Toolbox::getItemTypeFormURL('PluginResourcesResource') . "?id=" . $_POST["plugin_resources_resources_id"]); } else { if (isset($_POST["report"])) { $restrict = "`itemtype` = 'User' AND `plugin_resources_resources_id` = '" . $_POST["id"] . "'"; $linkeduser = getAllDatasFromTable('glpi_plugin_resources_resources_items', $restrict); if (!empty($linkeduser)) { $resource->sendReport($_POST); Session::addMessageAfterRedirect(__('Creation report sent', 'resources'), true);