"; echo "
"; echo ""; echo ""; echo "
".$LANG['processmaker']['item']['tab']."
"; echo $LANG['processmaker']['item']['selectprocess']." "; echo ""; echo ""; echo ""; echo ""; echo ""; PluginProcessmakerProcess::dropdown( array( 'value' => 0, 'entity' => $_SESSION['glpiactive_entity'], 'name' => 'plugin_processmaker_process_id' )); echo ""; echo ""; echo "
"; Html::closeForm(); } //function showFormHelpdesk($ID, $pmItem, $caseInfo, $ticket_template=false) { // global $DB, $CFG_GLPI; // if (!Ticket::canCreate()) { // return false; // } // if (!$ticket_template // && Session::haveRightsOr('ticketvalidation', TicketValidation::getValidateRights())) { // $opt = array(); // $opt['reset'] = 'reset'; // $opt['criteria'][0]['field'] = 55; // validation status // $opt['criteria'][0]['searchtype'] = 'equals'; // $opt['criteria'][0]['value'] = CommonITILValidation::WAITING; // $opt['criteria'][0]['link'] = 'AND'; // $opt['criteria'][1]['field'] = 59; // validation aprobator // $opt['criteria'][1]['searchtype'] = 'equals'; // $opt['criteria'][1]['value'] = Session::getLoginUserID(); // $opt['criteria'][1]['link'] = 'AND'; // $url_validate = $CFG_GLPI["root_doc"]."/front/ticket.php?".Toolbox::append_params($opt, // '&'); // if (TicketValidation::getNumberToValidate(Session::getLoginUserID()) > 0) { // echo "". // __('Tickets awaiting approval')."

"; // } // } // $email = UserEmail::getDefaultForUser($ID); // $default_use_notif = Entity::getUsedConfig('is_notif_enable_default', $_REQUEST['entities_id'], '', 1); // // Set default values... // $default_values = array('_users_id_requester_notif' // => array('use_notification' // => (($email == "")?0:$default_use_notif)), // 'nodelegate' => 1, // '_users_id_requester' => 0, // '_users_id_observer' => array(0), // '_users_id_observer_notif' // => array('use_notification' => $default_use_notif), // 'name' => '', // 'content' => '', // 'itilcategories_id' => 0, // 'locations_id' => 0, // 'urgency' => 3, // 'items_id' => 0, // 'entities_id' => $_REQUEST['entities_id'], // 'plan' => array(), // 'global_validation' => CommonITILValidation::NONE, // '_add_validation' => 0, // 'type' => Entity::getUsedConfig('tickettype', // $_REQUEST['entities_id'], // '', Ticket::INCIDENT_TYPE), // '_right' => "id", // '_filename' => array(), // '_tag_filename' => array()); // // Get default values from posted values on reload form // if (!$ticket_template) { // if (isset($_POST)) { // $values = Html::cleanPostForTextArea($_POST); // } // } // $ticket = new Ticket(); // // Restore saved value or override with page parameter // if (!function_exists('restoreInput')) { // function restoreInput(Array $default=array()) { // if (isset($_SESSION['saveInput']['Ticket'])) { // $saved = Html::cleanPostForTextArea($_SESSION['saveInput']['Ticket']); // // clear saved data when restored (only need once) // unset($_SESSION['saveInput']['Ticket']); // return $saved; // } // return $default; // } // } // $saved = restoreInput(); // foreach ($default_values as $name => $value) { // if (!isset($values[$name])) { // if (isset($saved[$name])) { // $values[$name] = $saved[$name]; // } else { // $values[$name] = $value; // } // } // } // // Check category / type validity // if ($values['itilcategories_id']) { // $cat = new ITILCategory(); // if ($cat->getFromDB($values['itilcategories_id'])) { // switch ($values['type']) { // case Ticket::INCIDENT_TYPE : // if (!$cat->getField('is_incident')) { // $values['itilcategories_id'] = 0; // } // break; // case Ticket::DEMAND_TYPE : // if (!$cat->getField('is_request')) { // $values['itilcategories_id'] = 0; // } // break; // default : // break; // } // } // } // if (!$ticket_template) { // echo "
"; // } // $delegating = User::getDelegateGroupsForUser($values['entities_id']); // if (count($delegating)) { // echo "
"; // echo ""; // echo ""; // echo "
".__('This ticket concerns me')." "; // $rand = Dropdown::showYesNo("nodelegate", $values['nodelegate']); // $params = array('nodelegate' => '__VALUE__', // 'rand' => $rand, // 'right' => "delegate", // '_users_id_requester' // => $values['_users_id_requester'], // '_users_id_requester_notif' // => $values['_users_id_requester_notif'], // 'use_notification' // => $values['_users_id_requester_notif']['use_notification'], // 'entity_restrict' // => $_REQUEST['entities_id']); // Ajax::UpdateItemOnSelectEvent("dropdown_nodelegate".$rand, "show_result".$rand, // $CFG_GLPI["root_doc"]."/ajax/dropdownDelegationUsers.php", // $params); // $class = 'right'; // if ($CFG_GLPI['use_check_pref'] && $values['nodelegate']) { // echo "".__('Check your personnal information'); // $class = 'center'; // } // echo "
"; // echo "
"; // $self = $ticket; // new self(); // if ($values["_users_id_requester"] == 0) { // $values['_users_id_requester'] = Session::getLoginUserID(); // } else { // $values['_right'] = "delegate"; // } // $self->showActorAddFormOnCreate(CommonITILActor::REQUESTER, $values); // echo "
"; // if ($CFG_GLPI['use_check_pref'] && $values['nodelegate']) { // echo "
"; // User::showPersonalInformation(Session::getLoginUserID()); // } // echo "
"; // echo ""; // } else { // // User as requester // $values['_users_id_requester'] = Session::getLoginUserID(); // if ($CFG_GLPI['use_check_pref']) { // echo "
"; // echo ""; // echo ""; // echo "
".__('Check your personnal information')."
"; // User::showPersonalInformation(Session::getLoginUserID()); // echo "
"; // } // } // echo ""; // echo ""; // // Load ticket template if available : // $tt = $ticket->getTicketTemplateToUse($ticket_template, $values['type'], // $values['itilcategories_id'], // $_REQUEST['entities_id']); // // Predefined fields from template : reset them // if (isset($values['_predefined_fields'])) { // $values['_predefined_fields'] // = Toolbox::decodeArrayFromInput($values['_predefined_fields']); // } else { // $values['_predefined_fields'] = array(); // } // // Store predefined fields to be able not to take into account on change template // $predefined_fields = array(); // if (isset($tt->predefined) && count($tt->predefined)) { // foreach ($tt->predefined as $predeffield => $predefvalue) { // if (isset($values[$predeffield]) && isset($default_values[$predeffield])) { // // Is always default value : not set // // Set if already predefined field // // Set if ticket template change // if (((count($values['_predefined_fields']) == 0) // && ($values[$predeffield] == $default_values[$predeffield])) // || (isset($values['_predefined_fields'][$predeffield]) // && ($values[$predeffield] == $values['_predefined_fields'][$predeffield])) // || (isset($values['_tickettemplates_id']) // && ($values['_tickettemplates_id'] != $tt->getID()))) { // $values[$predeffield] = $predefvalue; // $predefined_fields[$predeffield] = $predefvalue; // } // } else { // Not defined options set as hidden field // echo ""; // } // } // // All predefined override : add option to say predifined exists // if (count($predefined_fields) == 0) { // $predefined_fields['_all_predefined_override'] = 1; // } // } else { // No template load : reset predefined values // if (count($values['_predefined_fields'])) { // foreach ($values['_predefined_fields'] as $predeffield => $predefvalue) { // if ($values[$predeffield] == $predefvalue) { // $values[$predeffield] = $default_values[$predeffield]; // } // } // } // } // if (($CFG_GLPI['urgency_mask'] == (1<<3)) // || $tt->isHiddenField('urgency')) { // // Dont show dropdown if only 1 value enabled or field is hidden // echo ""; // } // // Display predefined fields if hidden // if ($tt->isHiddenField('items_id')) { // if (!empty($values['items_id'])) { // foreach ($values['items_id'] as $itemtype => $items) { // foreach ($items as $items_id) { // echo ""; // } // } // } // } // if ($tt->isHiddenField('locations_id')) { // echo ""; // } // echo ""; // echo ""; // echo "
"; // echo ""; // echo ""; // echo ""; // echo ""; // echo ""; // echo ""; // echo ""; // if ($CFG_GLPI['urgency_mask'] != (1<<3)) { // if (!$tt->isHiddenField('urgency')) { // echo ""; // echo ""; // echo ""; // } // } // if (empty($delegating) // && NotificationTargetTicket::isAuthorMailingActivatedForHelpdesk()) { // echo ""; // echo ""; // echo ""; // } // if (($_SESSION["glpiactiveprofile"]["helpdesk_hardware"] != 0) // && (count($_SESSION["glpiactiveprofile"]["helpdesk_item_type"]))) { // if (!$tt->isHiddenField('itemtype')) { // echo ""; // echo ""; // echo ""; // } // } // if (!$tt->isHiddenField('locations_id')) { // echo ""; // } // if (!$tt->isHiddenField('_users_id_observer') // || $tt->isPredefinedField('_users_id_observer')) { // echo ""; // echo ""; // echo ""; // } // if (!$tt->isHiddenField('name') // || $tt->isPredefinedField('name')) { // echo ""; // echo ""; // } // if (!$tt->isHiddenField('content') // || $tt->isPredefinedField('content')) { // echo ""; // echo ""; // } // echo ""; // echo ""; // // File upload system // $width = '100%'; // if ($CFG_GLPI['use_rich_text']) { // $width = '50%'; // } // echo ""; // echo ""; // echo ""; // echo ""; // echo ""; // echo ""; // echo ""; // if (!$ticket_template) { // echo ""; // echo ""; // } // echo "
".$caseInfo->processName.""; // if (Session::isMultiEntitiesMode()) { // echo "(".Dropdown::getDropdownName("glpi_entities", $_REQUEST['entities_id']).")"; // } // echo "
".sprintf(__('%1$s%2$s'), __('Urgency'), $tt->getMandatoryMark('urgency')). // ""; // Ticket::dropdownUrgency(array('value' => $values["urgency"])); // echo "
".__('Inform me about the actions taken').""; // if ($values["_users_id_requester"] == 0) { // $values['_users_id_requester'] = Session::getLoginUserID(); // } // $_POST['value'] = $values['_users_id_requester']; // $_POST['field'] = '_users_id_requester_notif'; // $_POST['use_notification'] = $values['_users_id_requester_notif']['use_notification']; // include (GLPI_ROOT."/ajax/uemailUpdate.php"); // echo "
".sprintf(__('%1$s%2$s'), _n('Watcher', 'Watchers', 2), // $tt->getMandatoryMark('_users_id_observer')).""; // $values['_right'] = "groups"; // if (!$tt->isHiddenField('_users_id_observer')) { // // Observer // if ($tt->isPredefinedField('_users_id_observer') // && !is_array($values['_users_id_observer'])) { // //convert predefined value to array // $values['_users_id_observer'] = array($values['_users_id_observer']); // $values['_users_id_observer_notif']['use_notification'] = // array($values['_users_id_observer_notif']['use_notification']); // // add new line to permit adding more observers // $values['_users_id_observer'][1] = 0; // $values['_users_id_observer_notif']['use_notification'][1] = 1; // } // echo "
"; // if (isset($values['_users_id_observer'])) { // $observers = $values['_users_id_observer']; // foreach ($observers as $index_observer => $observer) { // $options = array_merge($values, array('_user_index' => $index_observer)); // Ticket::showFormHelpdeskObserver($options); // } // } // echo "
"; // } else { // predefined value // if (isset($values["_users_id_observer"]) && $values["_users_id_observer"]) { // echo Ticket::getActorIcon('user', CommonITILActor::OBSERVER)." "; // echo Dropdown::getDropdownName("glpi_users", $values["_users_id_observer"]); // echo ""; // } // } // echo "
"; // $rand = rand(); // $pmCaseUser = $caseInfo->currentUsers[0]; // by default // $paramsURL = "DEL_INDEX=".$pmCaseUser->delIndex."&action=".$caseInfo->caseStatus; // echo ""; // echo "
".sprintf(__('%1$s (%2$s)'), __('File'), Document::getMaxUploadSize()); // DocumentType::showAvailableTypesLink(); // echo ""; // echo "
"; // echo "
"; // echo ""; // echo ""; // if ($CFG_GLPI['use_rich_text']) { // echo ""; // } // echo "
"; // echo Html::file(array('multiple' => true, // 'values' => array('filename' => $values['_filename'], // 'tag' => $values['_tag_filename']) // )); // // "
"; // echo "
"; // if (!isset($rand)) { // $rand = mt_rand(); // } // echo Html::initImagePasteSystem($content_id, $rand); // echo "
"; // echo "
"; // if (!$ticket_template) { // Html::closeForm(); // } //} function processMakerShowCase( $ID, $from_helpdesk ) { global $CFG_GLPI; $pmItem = new PluginProcessmakerProcessmaker( ); $pmItem->login( ); $caseInfo = $pmItem->getCaseInfo( $_REQUEST['case_id'] ); if ($caseInfo->status_code == 0) { // case is created // Must show it... $rand = rand(); echo ""; $tkt = new Ticket; // as showFormHelpdesk uses $_POST, we must set it $_POST = $_REQUEST; // must be using bare text $save_rich_text = $CFG_GLPI["use_rich_text"]; $CFG_GLPI["use_rich_text"] = false; // to get the HTML code for the helpdesk form $saved_ob_level = ob_get_level(); ob_start(); $tkt->showFormHelpdesk($ID); $buffer = ob_get_clean(); $CFG_GLPI["use_rich_text"] = $save_rich_text; // 9.1 only: hack to fix an issue with the initEditorSystem which calls scriptStart without calling scriptEnd if (ob_get_level() > $saved_ob_level) { $buffer = ob_get_clean().$buffer; } //echo $buffer; //return; // to change this HTML code $dom = new DOMDocument(); // will convert '&' to '&', '<' to '<' and '>' to '>' $buffer = htmlspecialchars($buffer, ENT_NOQUOTES); // will restore '<' to '<' and '>' to '>' // so that only the already escaped entites will get the double encoding // will also change end of bold into a local identifier $endOfBold = 'end_of_bold'.rand(); $buffer = str_replace(['<', '>', ''], ['<', '>', $endOfBold], $buffer); // will convert any UTF-8 char that can't be expressed in ASCII into an HTML entity $buffer = mb_convert_encoding($buffer, 'HTML-ENTITIES'); $dom->loadHTML($buffer, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD ); $xpath = new DOMXPath($dom); // hide some fields $list = [ 'name', 'type', 'locations_id', 'itilcategories_id', 'items_id', 'add' ] ; $xpath_str = '//*[@name="'.implode( '"]/ancestor::tr[1] | //*[@name="', $list ).'"]/ancestor::tr[1]'; $res = $xpath->query($xpath_str); foreach($res as $elt) { $elt->setAttribute( 'style', 'display:none;'); } // add an input for processId in the form // echo ""; $res = $xpath->query('//form[@name="helpdeskform"]'); $input = $res->item(0)->appendChild(new DOMElement('input')); $input->setAttribute('name', 'processId'); $input->setAttribute('type', 'hidden'); $input->setAttribute('value', $caseInfo->processId); // special case for content textarea which is in the same tr than the file upload $res = $xpath->query('//*[@name="content"]/ancestor::div[1] | //*[@name="content"]/ancestor::tr[1]/td[1]'); foreach($res as $elt) { $elt->setAttribute( 'style', 'display:none;'); } $res = $xpath->query('//*[@name="content"]/ancestor::td[1]'); foreach($res as $elt) { // there should be only one td $elt->setAttribute( 'colspan', '2'); } $res = $xpath->query('//*[@name="content"]/ancestor::tr[1]'); //$res = $xpath->query('//*[@name="add"]/ancestor::tr[@class="tab_bg_1"]/preceding-sibling::tr[1]'); $table = $xpath->query('//*[@name="add"]/ancestor::table[1]'); $tr = $table->item(0)->insertBefore(new DOMElement('tr'), $res->item(0)); //$tr = $table->item(0)->appendChild(new DOMElement('tr')); $td = $tr->appendChild(new DOMElement('td')); $td->setAttribute('colspan', '2'); $iframe = $td->appendChild(new DOMElement('iframe')); $pmCaseUser = $caseInfo->currentUsers[0]; // by default $paramsURL = "DEL_INDEX={$pmCaseUser->delIndex}&action={$caseInfo->caseStatus}"; $iframe->setAttribute('id', 'caseiframe' ) ; $iframe->setAttribute('onload', "onLoadFrame( event, '{$caseInfo->caseId}', {$pmCaseUser->delIndex}, {$caseInfo->caseNumber}, '{$caseInfo->processName}') ;" ) ; $iframe->setAttribute('width', '100%' ) ; $iframe->setAttribute('style', 'border:none;' ) ; $iframe->setAttribute('src', "{$pmItem->serverURL}/cases/cases_Open?sid={$_SESSION["pluginprocessmaker"]["session"]["id"]}&APP_UID={$caseInfo->caseId}&{$paramsURL}&rand=$rand&glpi_domain={$pmItem->config->fields['domain']}" ) ; // set the width and the title of the first table th $th = $xpath->query('//*[@name="add"]/ancestor::table[1]/*/th[1]'); $th->item(0)->setAttribute('width', '30%'); $th->item(0)->nodeValue = $caseInfo->processName; $buffer = $dom->saveHTML(); // revert back $buffer = str_replace($endOfBold, '', $buffer); // will revert back any char converted above $buffer = mb_convert_encoding($buffer, 'UTF-8', 'HTML-ENTITIES'); echo $buffer; } } function in_array_recursive($needle, $haystack) { $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($haystack)); foreach ($it AS $element) { if ($element == $needle) { return true; } } return false; } //// redirect if no create ticket right //if (!Session::haveRight('ticket', CREATE )) { // if (Session::haveRight('observe_ticket', 1) || Session::haveRight('validate_ticket', 1)) { // Html::redirect($CFG_GLPI['root_doc']."/front/ticket.php"); // } else if (Session::haveRight('reservation_helpdesk', 1)) { // Html::redirect($CFG_GLPI['root_doc']."/front/reservationitem.php"); // } else if (Session::haveRight('faq', READ)) { // Html::redirect($CFG_GLPI['root_doc']."/front/helpdesk.faq.php"); // } //} //Session::checkHelpdeskAccess(); //Html::helpHeader($LANG['job'][13], $_SERVER['PHP_SELF'], $_SESSION["glpiname"]); // Change profile system if (isset($_POST['newprofile'])) { if (isset($_SESSION["glpiprofiles"][$_POST['newprofile']])) { Session::changeProfile($_POST['newprofile']); if ($_SESSION["glpiactiveprofile"]["interface"] == "central") { Html::redirect($CFG_GLPI['root_doc']."/front/central.php"); } else { Html::redirect($_SERVER['PHP_SELF']); } } else { Html::redirect(preg_replace("/entities_id=.*/", "", $_SERVER['HTTP_REFERER'])); } } // Manage entity change if (isset($_GET["active_entity"])) { if (!isset($_GET["is_recursive"])) { $_GET["is_recursive"] = 0; } if (Session::changeActiveEntities($_GET["active_entity"], $_GET["is_recursive"])) { if ($_GET["active_entity"] == $_SESSION["glpiactive_entity"]) { Html::redirect(preg_replace("/entities_id.*/", "", $_SERVER['HTTP_REFERER'])); } } } // Redirect management if (isset($_GET["redirect"])) { Toolbox::manageRedirect($_GET["redirect"]); } // redirect if no create ticket right if (!Session::haveRight('ticket', CREATE) && !Session::haveRight('reminder_public', READ) && !Session::haveRight("rssfeed_public", READ)) { if (Session::haveRight('followup', TicketFollowup::SEEPUBLIC) || Session::haveRight('task', TicketTask::SEEPUBLIC) || Session::haveRightsOr('ticketvalidation', array(TicketValidation::VALIDATEREQUEST, TicketValidation::VALIDATEINCIDENT))) { Html::redirect($CFG_GLPI['root_doc']."/front/ticket.php"); } else if (Session::haveRight('reservation', ReservationItem::RESERVEANITEM)) { Html::redirect($CFG_GLPI['root_doc']."/front/reservationitem.php"); } else if (Session::haveRight('knowbase', KnowbaseItem::READFAQ)) { Html::redirect($CFG_GLPI['root_doc']."/front/helpdesk.faq.php"); } } Session::checkHelpdeskAccess(); Html::helpHeader(__('New ticket'), $_SERVER['PHP_SELF'], $_SESSION["glpiname"]); if (isset($_REQUEST['case_id'])) { $query = "SELECT * FROM glpi_plugin_processmaker_cases WHERE id='".$_REQUEST['case_id']."'"; $res = $DB->query( $query ); if ($DB->numrows( $res )) { // a ticket already exists for this case, then show new cases processMakerShowProcessList(Session::getLoginUserID(), 1); } else { // before showing the case, we must check the rights for this user to view it, if entity has been changed in the meanwhile // and must check if entity of the ticket is in the tree of authorized entities for current profile $processList = PluginProcessmakerProcessmaker::getProcessesWithCategoryAndProfile( $_REQUEST["itilcategories_id"], $_REQUEST["type"], $_SESSION['glpiactiveprofile']['id'], $_REQUEST['entities_id'] ); if (in_array( $_REQUEST['entities_id'], $_SESSION['glpiactiveentities']) && in_array_recursive( $_REQUEST['process_id'], $processList )) { processMakerShowCase(Session::getLoginUserID(), 1); } else { Html::redirect($CFG_GLPI["root_doc"]."/front/helpdesk.public.php?create_ticket=1"); } } } else { processMakerShowProcessList(Session::getLoginUserID(), 1); } Html::helpFooter();