Get predefined fields for a template
public getPredefinedFields ( $ID, $withtypeandcategory = false ) : an | ||
$ID | integer the template ID | |
$withtypeandcategory | boolean with type and category (false by default) | |
리턴 | an | array of predefined fields |
/** * Retrieve an item from the database with additional datas * * @since version 0.83 * * @param $ID integer ID of the item to get * @param $withtypeandcategory boolean with type and category (true by default) * * @return true if succeed else false **/ function getFromDBWithDatas($ID, $withtypeandcategory = true) { global $DB; if ($this->getFromDB($ID)) { $ticket = new Ticket(); $tth = new TicketTemplateHiddenField(); $this->hidden = $tth->getHiddenFields($ID, $withtypeandcategory); // Force items_id if itemtype is defined if (isset($this->hidden['itemtype']) && !isset($this->hidden['items_id'])) { $this->hidden['items_id'] = $ticket->getSearchOptionIDByField('field', 'items_id', 'glpi_tickets'); } // Always get all mandatory fields $ttm = new TicketTemplateMandatoryField(); $this->mandatory = $ttm->getMandatoryFields($ID); // Force items_id if itemtype is defined if (isset($this->mandatory['itemtype']) && !isset($this->mandatory['items_id'])) { $this->mandatory['items_id'] = $ticket->getSearchOptionIDByField('field', 'items_id', 'glpi_tickets'); } $ttp = new TicketTemplatePredefinedField(); $this->predefined = $ttp->getPredefinedFields($ID, $withtypeandcategory); // Compute due_date if (isset($this->predefined['due_date'])) { $this->predefined['due_date'] = Html::computeGenericDateTimeSearch($this->predefined['due_date'], false); } // Compute date if (isset($this->predefined['date'])) { $this->predefined['date'] = Html::computeGenericDateTimeSearch($this->predefined['date'], false); } return true; } return false; }
public function save($form, $input) { $datas = array(); $ticket = new Ticket(); $docItem = new Document_Item(); // Get default request type $query = "SELECT id FROM `glpi_requesttypes` WHERE `name` LIKE 'Formcreator';"; $result = $GLOBALS['DB']->query($query) or die($DB->error()); list($requesttypes_id) = $GLOBALS['DB']->fetch_array($result); $datas['requesttypes_id'] = $requesttypes_id; // Get predefined Fields $ttp = new TicketTemplatePredefinedField(); $predefined_fields = $ttp->getPredefinedFields($this->fields['tickettemplates_id'], true); $datas = array_merge($datas, $predefined_fields); $datas['name'] = $this->parseTags($this->fields['name'], $form, $input); $datas['content'] = $this->parseTags($this->fields['comment'], $form, $input); $datas['entities_id'] = isset($_SESSION['glpiactive_entity']) ? $_SESSION['glpiactive_entity'] : $form->fields['entities_id']; $ticketID = $ticket->add($datas); if (!empty($_SESSION['formcreator_documents'])) { foreach ($_SESSION['formcreator_documents'] as $docID) { $docItem->add(array('documents_id' => $docID, 'itemtype' => 'Ticket', 'items_id' => $ticketID)); } } }
/** * Create a ticket based on ticket recurrent infos * * @param $data array data of a entry of glpi_ticketrecurrents * * @return boolean **/ static function createTicket($data) { $result = false; $tt = new TicketTemplate(); // Create ticket based on ticket template and entity information of ticketrecurrent if ($tt->getFromDB($data['tickettemplates_id'])) { // Get default values for ticket $input = Ticket::getDefaultValues($data['entities_id']); // Apply tickettemplates predefined values $ttp = new TicketTemplatePredefinedField(); $predefined = $ttp->getPredefinedFields($data['tickettemplates_id'], true); if (count($predefined)) { foreach ($predefined as $predeffield => $predefvalue) { $input[$predeffield] = $predefvalue; } } // Set date to creation date $createtime = strtotime($data['next_creation_date']) + $data['create_before']; $input['date'] = date('Y-m-d H:i:s', $createtime); if (isset($predefined['date'])) { $input['date'] = Html::computeGenericDateTimeSearch($predefined['date'], false, $createtime); } // Compute due_date if predefined based on create date if (isset($predefined['due_date'])) { $input['due_date'] = Html::computeGenericDateTimeSearch($predefined['due_date'], false, $createtime); } // Set entity $input['entities_id'] = $data['entities_id']; $input['_auto_import'] = true; $ticket = new Ticket(); $input = Toolbox::addslashes_deep($input); if ($tid = $ticket->add($input)) { $msg = sprintf(__('Ticket %d successfully created'), $tid); $result = true; } else { $msg = __('Ticket creation failed (check mandatory fields)'); } } else { $msg = __('Ticket creation failed (no template)'); } $changes[0] = 0; $changes[1] = ''; $changes[2] = addslashes($msg); Log::history($data['id'], __CLASS__, $changes, '', Log::HISTORY_LOG_SIMPLE_MESSAGE); // Compute next creation date $tr = new self(); if ($tr->getFromDB($data['id'])) { $input = array(); $input['id'] = $data['id']; $input['next_creation_date'] = $tr->computeNextCreationDate($data['begin_date'], $data['end_date'], $data['periodicity'], $data['create_before'], $data['calendars_id']); $tr->update($input); } return $result; }
public function generateNewItem($params) { global $DB; // Retrieve plugin configuration $config = new PluginOrderConfig(); $reference = new PluginOrderReference(); foreach ($params["id"] as $tmp => $values) { //If itemtype cannot be generated, go to the new occurence if (in_array($values['itemtype'], self::getTypesThanCannotBeGenerared())) { continue; } $entity = $values["entities_id"]; //------------- Template management -----------------------// //Look for a template in the entity $templateID = $reference->checkIfTemplateExistsInEntity($values["id"], $values["itemtype"], $entity); $item = new $values["itemtype"](); if ($values['itemtype']) { $order = new PluginOrderOrder(); } $order->getFromDB($values["plugin_order_orders_id"]); $reference->getFromDB($params["plugin_order_references_id"]); if ($templateID) { $item->getFromDB($templateID); unset($item->fields["is_template"]); unset($item->fields["date_mod"]); $fields = array(); foreach ($item->fields as $key => $value) { if ($value != '' && (!isset($fields[$key]) || $fields[$key] == '' || $fields[$key] == 0)) { $input[$key] = $value; } } if ($config->getGeneratedAssetState()) { $input["states_id"] = $config->getGeneratedAssetState(); } $input["entities_id"] = $entity; $input["serial"] = $values["serial"]; if ($item->fields['name']) { $input["name"] = autoName($item->fields["name"], "name", $templateID, $values["itemtype"], $entity); } else { $input["name"] = $values["name"]; } if ($item->getField('otherserial') != NOT_AVAILABLE) { if ($item->fields['otherserial']) { $input["otherserial"] = autoName($item->fields["otherserial"], "otherserial", $templateID, $values["itemtype"], $entity); } else { $input["otherserial"] = $values["otherserial"]; } } if ($config->canAddLocation()) { $input['locations_id'] = $order->fields['locations_id']; } } elseif ($values["itemtype"] == 'Contract') { $input["name"] = $values["name"]; $input["entities_id"] = $entity; $input['contracttypes_id'] = $reference->fields['types_id']; } else { if ($config->getGeneratedAssetState()) { $input["states_id"] = $config->getGeneratedAssetState(); } else { $input["states_id"] = 0; } $input["entities_id"] = $entity; $input["serial"] = $values["serial"]; $input["otherserial"] = $values["otherserial"]; $input["name"] = $values["name"]; // Get bill data if ($config->canAddLocation()) { $input['locations_id'] = $order->fields['locations_id']; } $input["manufacturers_id"] = $reference->fields["manufacturers_id"]; $typefield = getForeignKeyFieldForTable(getTableForItemType($values["itemtype"] . "Type")); $input[$typefield] = $reference->fields["types_id"]; $modelfield = getForeignKeyFieldForTable(getTableForItemType($values["itemtype"] . "Model")); $input[$modelfield] = $reference->fields["models_id"]; } $input = Toolbox::addslashes_deep($input); $newID = $item->add($input); // Attach new ticket if option is on if (isset($params['generate_ticket'])) { $tkt = new TicketTemplate(); if ($tkt->getFromDB($params['generate_ticket']['tickettemplates_id'])) { $input = array(); $input = Ticket::getDefaultValues($entity); $ttp = new TicketTemplatePredefinedField(); $predefined = $ttp->getPredefinedFields($params['generate_ticket']['tickettemplates_id'], true); if (count($predefined)) { foreach ($predefined as $predeffield => $predefvalue) { $input[$predeffield] = $predefvalue; } } $input['entities_id'] = $entity; $input['_users_id_requester'] = empty($order->fields['users_id']) ? Session::getLoginUserID() : $order->fields['users_id']; $input['items_id'] = $newID; $input['itemtype'] = $values["itemtype"]; $ticket = new Ticket(); $ticketID = $ticket->add($input); } } //-------------- End template management ---------------------------------// $result = $this->createLinkWithItem($values["id"], $newID, $values["itemtype"], $values["plugin_order_orders_id"], $entity, $templateID, false, false); //Add item's history $new_value = __("Item generated by using order", "order") . ' : ' . $order->fields["name"]; $order->addHistory($values["itemtype"], '', $new_value, $newID); //Add order's history $new_value = __("Item generated by using order", "order") . ' : '; $new_value .= $item->getTypeName() . " -> " . $item->getField("name"); $order->addHistory('PluginOrderOrder', '', $new_value, $values["plugin_order_orders_id"]); //Copy order documents if needed self::copyDocuments($values['itemtype'], $newID, $values["plugin_order_orders_id"], $entity); Session::addMessageAfterRedirect(__("Item successfully selected", "order"), true); } }
/** * Save form datas to the target * * @param PluginFormcreatorFormanswer $formanswer Answers previously saved */ public function save(PluginFormcreatorFormanswer $formanswer) { $datas = array(); $ticket = new Ticket(); $docItem = new Document_Item(); $form = new PluginFormcreatorForm(); $form->getFromDB($formanswer->fields['plugin_formcreator_forms_id']); // Get default request type $query = "SELECT id FROM `glpi_requesttypes` WHERE `name` LIKE 'Formcreator';"; $result = $GLOBALS['DB']->query($query) or die($GLOBALS['DB']->error()); list($requesttypes_id) = $GLOBALS['DB']->fetch_array($result); $datas['requesttypes_id'] = $requesttypes_id; // Get predefined Fields $ttp = new TicketTemplatePredefinedField(); $predefined_fields = $ttp->getPredefinedFields($this->fields['tickettemplates_id'], true); $datas = array_merge($datas, $predefined_fields); // Parse datas and tags $datas['name'] = addslashes($this->parseTags($this->fields['name'], $formanswer)); $datas['content'] = htmlentities($this->parseTags($this->fields['comment'], $formanswer)); $datas['entities_id'] = isset($_SESSION['glpiactive_entity']) ? $_SESSION['glpiactive_entity'] : $form->fields['entities_id']; $datas['_users_id_requester'] = 0; $datas['_users_id_recipient'] = $_SESSION['glpiID']; $datas['_tickettemplates_id'] = $this->fields['tickettemplates_id']; // Define due date $answer = new PluginFormcreatorAnswer(); $found = $answer->find('plugin_formcreator_formanwers_id = ' . (int) $formanswer->fields['id'] . ' AND plugin_formcreator_question_id = ' . (int) $this->fields['due_date_question']); $date = array_shift($found); $str = "+" . $this->fields['due_date_value'] . " " . $this->fields['due_date_period']; switch ($this->fields['due_date_rule']) { case 'answer': $due_date = $date['answer']; break; case 'ticket': $due_date = date('Y-m-d H:i:s', strtotime($str)); break; case 'calcul': $due_date = date('Y-m-d H:i:s', strtotime($date['answer'] . " " . $str)); break; default: $due_date = null; break; } if (!is_null($due_date)) { $datas['due_date'] = $due_date; } // Select ticket actors $query = "SELECT id, actor_type, actor_value, use_notification\n FROM glpi_plugin_formcreator_targettickets_actors\n WHERE plugin_formcreator_targettickets_id = " . $this->getID() . "\n AND actor_role = 'requester'"; $result = $GLOBALS['DB']->query($query); // If there is only one requester add it on creation, otherwize we will add them later if ($GLOBALS['DB']->numrows($result) == 1) { $actor = $GLOBALS['DB']->fetch_array($result); switch ($actor['actor_type']) { case 'creator': $user_id = $formanswer->fields['requester_id']; break; case 'validator': $user_id = $formanswer->fields['validator_id']; break; case 'person': case 'group': case 'supplier': $user_id = $actor['actor_value']; break; case 'question_person': case 'question_group': case 'question_supplier': $answer = new PluginFormcreatorAnswer(); $found = $answer->find('`plugin_formcreator_question_id` = ' . (int) $actor['actor_value'] . ' AND `plugin_formcreator_formanwers_id` = ' . (int) $formanswer->fields['id']); $found = array_shift($found); if (empty($found['answer'])) { continue; } else { $user_id = (int) $found['answer']; } break; } $datas['_users_id_requester'] = $user_id; } // Create the target ticket if (!($ticketID = $ticket->add($datas))) { return false; } // Add link between Ticket and FormAnswer $itemlink = new Item_Ticket(); $itemlink->add(array('itemtype' => 'PluginFormcreatorFormanswer', 'items_id' => $formanswer->fields['id'], 'tickets_id' => $ticketID)); // Add actors to ticket $query = "SELECT id, actor_role, actor_type, actor_value, use_notification\n FROM glpi_plugin_formcreator_targettickets_actors\n WHERE plugin_formcreator_targettickets_id = " . $this->getID(); $result = $GLOBALS['DB']->query($query); while ($actor = $GLOBALS['DB']->fetch_array($result)) { // If actor type is validator and if the form doesn't have a validator, continue to other actors if ($actor['actor_type'] == 'validator' && !$form->fields['validation_required']) { continue; } switch ($actor['actor_role']) { case 'requester': $role = CommonITILActor::REQUESTER; break; case 'observer': $role = CommonITILActor::OBSERVER; break; case 'assigned': $role = CommonITILActor::ASSIGN; break; } switch ($actor['actor_type']) { case 'creator': $user_id = $formanswer->fields['requester_id']; break; case 'validator': $user_id = $formanswer->fields['validator_id']; break; case 'person': case 'group': case 'supplier': $user_id = $actor['actor_value']; break; case 'question_person': case 'question_group': case 'question_supplier': $answer = new PluginFormcreatorAnswer(); $found = $answer->find('`plugin_formcreator_question_id` = ' . (int) $actor['actor_value'] . ' AND `plugin_formcreator_formanwers_id` = ' . (int) $formanswer->fields['id']); $found = array_shift($found); if (empty($found['answer'])) { continue; } else { $user_id = (int) $found['answer']; } break; } switch ($actor['actor_type']) { case 'creator': case 'validator': case 'person': case 'question_person': $obj = new Ticket_User(); $obj->add(array('tickets_id' => $ticketID, 'users_id' => $user_id, 'type' => $role, 'use_notification' => $actor['use_notification'])); break; case 'group': case 'question_group': $obj = new Group_Ticket(); $obj->add(array('tickets_id' => $ticketID, 'groups_id' => $user_id, 'type' => $role, 'use_notification' => $actor['use_notification'])); break; case 'supplier': case 'question_supplier': $obj = new Supplier_Ticket(); $obj->add(array('tickets_id' => $ticketID, 'suppliers_id' => $user_id, 'type' => $role, 'use_notification' => $actor['use_notification'])); break; } } // Attach documents to ticket $found = $docItem->find("itemtype = 'PluginFormcreatorFormanswer' AND items_id = " . (int) $formanswer->getID()); if (count($found) > 0) { foreach ($found as $document) { $docItem->add(array('documents_id' => $document['documents_id'], 'itemtype' => 'Ticket', 'items_id' => $ticketID)); } } // Attach validation message as first ticket followup if validation is required and // if is set in ticket target configuration // /!\ Followup is directly saved to the database to avoid double notification on ticket // creation and add followup if ($form->fields['validation_required'] && $this->fields['validation_followup']) { $message = addslashes(__('Your form have been accepted by the validator', 'formcreator')); if (!empty($formanswer->fields['comment'])) { $message .= "\n" . addslashes($formanswer->fields['comment']); } $query = "INSERT INTO `glpi_ticketfollowups` SET\n `tickets_id` = {$ticketID},\n `date` = NOW(),\n `users_id` = {$_SESSION['glpiID']},\n `content` = \"{$message}\""; $GLOBALS['DB']->query($query); } return true; }
static function updateTicketFromForm($idform, $idticket) { global $DB; $datas = array(); $templates_id = PluginFormcreatorForm::getTemplateTicketFromForm($idform); $ttp = new TicketTemplatePredefinedField(); $predefined_fields = $ttp->getPredefinedFields($templates_id, true); $Ticket = new Ticket(); $listaObjetos = $Ticket->find("id = '{$idticket}'"); //$listaobjetos es un array que contiene, por cada ticket que comple la condición del find, un array con los campos del ticket $clave = array_keys($listaObjetos); if (isset($clave[0])) { if (isset($listaObjetos[$clave[0]])) { $datas = $listaObjetos[$clave[0]]; unset($datas['urgency']); // unset($datas['priority']); // unset($datas['type']); // unset($datas['itilcategories_id']); // unset($datas['slas_id']); // $datas = array_merge($datas, $predefined_fields); $Ticket->update($datas); } } }
$template_id = $tickettemplates_id_incident; break; case "2": // formulaire par defaut pour les demandes de la catégorie; $template_id = $tickettemplates_id_demand; break; default: // sans précision le formulaire est indiqué par défaut; $template_id = "1"; //formulaire par defaut; break; } $tt = new TicketTemplate(); $tt->getFromDBWithDatas($template_id, true); $ttp = new TicketTemplatePredefinedField(); $predefined = $ttp->getPredefinedFields($template_id, true); if (isset($predefined['itemtype'])) { $ticket['itemtype'] = $predefined['itemtype']; } if (isset($predefined['items_id'])) { $ticket['items_id'] = $predefined['items_id']; } if (isset($predefined['_users_id_observer'])) { $ticket['_users_id_observer'] = $predefined['_users_id_observer']; } if (isset($predefined['_users_id_assign'])) { $ticket['_users_id_assign'] = $predefined['_users_id_assign']; } if (isset($predefined['_users_id_requester'])) { $ticket['_users_id_requester'] = $predefined['_users_id_requester']; }
static function createTicket($data) { $result = false; $tt = new TicketTemplate(); // Create ticket based on ticket template and entity informations of ticketrecurrent if ($tt->getFromDB($data['tickettemplates_id'])) { // Get default values for ticket $input = Ticket::getDefaultValues($data['entities_id']); // Apply tickettemplates predefined values $ttp = new TicketTemplatePredefinedField(); $predefined = $ttp->getPredefinedFields($data['tickettemplates_id'], true); if (count($predefined)) { foreach ($predefined as $predeffield => $predefvalue) { $input[$predeffield] = $predefvalue; } } // Set date to creation date $createtime = date('Y-m-d H:i:s'); $input['date'] = $createtime; // Compute due_date if predefined based on create date if (isset($predefined['due_date'])) { $input['due_date'] = Html::computeGenericDateTimeSearch($predefined['due_date'], false, $createtime); } // Set entity $input['entities_id'] = $data['entities_id']; $input['actiontime'] = $data['actiontime']; $res = new PluginResourcesResource(); if ($res->getFromDB($data['plugin_resources_resources_id'])) { $input['users_id_recipient'] = $res->fields['users_id_recipient']; $input['_users_id_requester'] = $res->fields['users_id_recipient']; if (isset($res->fields['users_id'])) { $input['_users_id_observer'] = $res->fields['users_id']; } $input['_users_id_assign'] = Session::getLoginUserID(); $input["itemtype"] = "PluginResourcesResource"; $input["items_id"] = $data['plugin_resources_resources_id']; $input["name"] .= addslashes(" " . PluginResourcesResource::getResourceName($data['plugin_resources_resources_id'])); } //TODO : ADD checklist lists or add config into plugin ? $input["content"] .= addslashes("\n\n"); $input['status'] = Ticket::CLOSED; $ticket = new Ticket(); $input = Toolbox::addslashes_deep($input); if ($tid = $ticket->add($input)) { $msg = __('Create a end treatment ticket', 'resources') . " OK - ({$tid})"; // Success $result = true; } else { $msg = __('Failed operation'); // Failure } } else { $msg = __('No selected element or badly defined operation'); // Not defined } if ($tid) { $changes[0] = 0; $changes[1] = ''; $changes[2] = addslashes($msg); Log::history($data['plugin_resources_resources_id'], "PluginResourcesResource", $changes, '', Log::HISTORY_LOG_SIMPLE_MESSAGE); } return $result; }