* Copyright (C) 2016 Christophe Battarel * Copyright (C) 2018 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/ticket/card.php * \ingroup ticket */ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT . '/ticket/class/actions_ticket.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/html.formticket.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/ticket.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php'; if (!empty($conf->projet->enabled)) { include_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; include_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php'; include_once DOL_DOCUMENT_ROOT . '/core/lib/project.lib.php'; } if (!empty($conf->contrat->enabled)) { include_once DOL_DOCUMENT_ROOT . '/core/lib/contract.lib.php'; include_once DOL_DOCUMENT_ROOT . '/contrat/class/contrat.class.php'; include_once DOL_DOCUMENT_ROOT . '/core/class/html.formcontract.class.php'; } // Load translation files required by the page $langs->loadLangs(array("companies","other","ticket")); // Get parameters $id = GETPOST('id', 'int'); $track_id = GETPOST('track_id', 'alpha', 3); $ref = GETPOST('ref', 'alpha'); $projectid = GETPOST('projectid', 'int'); $cancel = GETPOST('cancel', 'alpha'); $action = GETPOST('action', 'aZ09'); $notifyTiers = GETPOST("notify_tiers_at_create", 'alpha'); // Initialize technical object to manage hooks of ticket. Note that conf->hooks_modules contains array array $hookmanager->initHooks(array('ticketcard','globalcard')); $object = new Ticket($db); $extrafields = new ExtraFields($db); // Fetch optionals attributes and labels $extralabels = $extrafields->fetch_name_optionals_label($object->table_element); $search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); // Initialize array of search criterias $search_all=trim(GETPOST("search_all", 'alpha')); $search=array(); foreach($object->fields as $key => $val) { if (GETPOST('search_'.$key, 'alpha')) $search[$key]=GETPOST('search_'.$key, 'alpha'); } if (empty($action) && empty($id) && empty($ref)) $action='view'; //Select mail models is same action as add_message if (GETPOST('modelselected', 'alpha')) { $action = 'add_message'; } // Load object //include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals if ($id || $track_id || $ref) { $res = $object->fetch($id, $ref, $track_id); if ($res >= 0) { $id = $object->id; $track_id = $object->track_id; } } // Store current page url $url_page_current = DOL_URL_ROOT.'/ticket/card.php'; // Security check - Protection if external user //if ($user->societe_id > 0) access_forbidden(); //if ($user->societe_id > 0) $socid = $user->societe_id; $result = restrictedArea($user, 'ticket', $object->id); $triggermodname = 'TICKETSUP_MODIFY'; $permissiontoadd = $user->rights->ticket->write; $actionobject = new ActionsTicket($db); $now = dol_now(); /* * Actions */ $parameters=array(); $reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if ($cancel) { if (! empty($backtopage)) { header("Location: ".$backtopage); exit; } $action='view'; } // Do action $actionobject->doActions($action, $object); // Action to update one extrafield if ($action == "update_extras" && ! empty($permissiontoadd)) { $object->fetch(GETPOST('id', 'int'), '', GETPOST('track_id', 'alpha')); $attributekey = GETPOST('attribute', 'alpha'); $attributekeylong = 'options_'.$attributekey; $object->array_options['options_'.$attributekey] = GETPOST($attributekeylong, ' alpha'); $result = $object->insertExtraFields(empty($triggermodname)?'':$triggermodname, $user); if ($result > 0) { setEventMessages($langs->trans('RecordSaved'), null, 'mesgs'); $action = 'view'; } else { setEventMessages($object->error, $object->errors, 'errors'); $action = 'edit_extras'; } } if ($action == "change_property" && GETPOST('btn_update_ticket_prop', 'alpha') && $user->rights->ticket->write) { $object->fetch(GETPOST('id', 'int'), '', GETPOST('track_id', 'alpha')); $object->type_code = GETPOST('update_value_type', 'az09'); $object->severity_code = GETPOST('update_value_severity', 'az09'); $object->category_code = GETPOST('update_value_category', 'az09'); $ret = $object->update($user); if ($ret > 0) { $log_action = $langs->trans('TicketLogPropertyChanged', $oldvalue_label, $newvalue_label); setEventMessages($langs->trans('TicketUpdated'), null, 'mesgs'); } $action = 'view'; } $permissiondellink = $user->rights->ticket->write; include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; // Must be include, not include_once /* * View */ $userstat = new User($db); $form = new Form($db); $formticket = new FormTicket($db); if (! empty($conf->projet->enabled)) $formproject = new FormProjets($db); $help_url = 'FR:DocumentationModuleTicket'; $page_title = $actionobject->getTitle($action); llxHeader('', $page_title, $help_url); if ($action == 'create') { $formticket = new FormTicket($db); print load_fiche_titre($langs->trans('NewTicket'), '', 'title_ticket'); $formticket->withfromsocid = $socid ? $socid : $user->societe_id; $formticket->withfromcontactid = $contactid ? $contactid : ''; $formticket->withtitletopic = 1; $formticket->withnotifytiersatcreate = ($notifyTiers?1:0); $formticket->withusercreate = 1; $formticket->withref = 1; $formticket->fk_user_create = $user->id; $formticket->withfile = 2; $formticket->withextrafields = 1; $formticket->param = array('origin' => GETPOST('origin'), 'originid' => GETPOST('originid')); if (empty($defaultref)) { $defaultref = ''; } $formticket->showForm(1); } if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'dellink' || $action == 'add_message' || $action == 'close' || $action == 'delete' || $action == 'editcustomer' || $action == 'progression' || $action == 'reopen' || $action == 'editsubject' || $action == 'edit_extras' || $action == 'update_extras' || $action == 'edit_extrafields' || $action == 'set_extrafields' || $action == 'classify' || $action == 'sel_contract' || $action == 'edit_message_init' || $action == 'set_status' || $action == 'dellink') { if ($res > 0) { // or for unauthorized internals users if (!$user->societe_id && ($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) { accessforbidden('', 0); } // Confirmation close if ($action == 'close') { print $form->formconfirm($url_page_current . "?track_id=" . $object->track_id, $langs->trans("CloseATicket"), $langs->trans("ConfirmCloseAticket"), "confirm_close", '', '', 1); if ($ret == 'html') { print '
'; } } // Confirmation delete if ($action == 'delete') { print $form->formconfirm($url_page_current . "?track_id=" . $object->track_id, $langs->trans("Delete"), $langs->trans("ConfirmDeleteTicket"), "confirm_delete_ticket", '', '', 1); } // Confirm reopen if ($action == 'reopen') { print $form->formconfirm($url_page_current . '?track_id=' . $object->track_id, $langs->trans('ReOpen'), $langs->trans('ConfirmReOpenTicket'), 'confirm_reopen', '', '', 1); } // Confirmation status change if ($action == 'set_status') { $new_status = GETPOST('new_status'); //var_dump($url_page_current . "?track_id=" . $object->track_id); print $form->formconfirm($url_page_current . "?track_id=" . $object->track_id . "&new_status=" . GETPOST('new_status'), $langs->trans("TicketChangeStatus"), $langs->trans("TicketConfirmChangeStatus", $langs->transnoentities($object->statuts_short[$new_status])), "confirm_set_status", '', '', 1); } // project info if ($projectid) { $projectstat = new Project($db); if ($projectstat->fetch($projectid) > 0) { $projectstat->fetch_thirdparty(); // To verify role of users //$userAccess = $object->restrictedProjectArea($user,'read'); $userWrite = $projectstat->restrictedProjectArea($user, 'write'); //$userDelete = $object->restrictedProjectArea($user,'delete'); //print "userAccess=".$userAccess." userWrite=".$userWrite." userDelete=".$userDelete; $head = project_prepare_head($projectstat); dol_fiche_head($head, 'ticket', $langs->trans("Project"), 0, ($projectstat->public ? 'projectpub' : 'project')); /* * Projet synthese pour rappel */ print ''; $linkback = '' . $langs->trans("BackToList") . ''; // Ref print ''; // Label print ''; // Customer print ""; print ''; // Visibility print ''; // Statut print ''; print "
' . $langs->trans('Ref') . ''; // Define a complementary filter for search of next/prev ref. if (!$user->rights->projet->all->lire) { $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0); $projectstat->next_prev_filter = " rowid in (" . (count($objectsListId) ? join(',', array_keys($objectsListId)) : '0') . ")"; } print $form->showrefnav($projectstat, 'ref', $linkback, 1, 'ref', 'ref', ''); print '
' . $langs->trans("Label") . '' . $projectstat->title . '
" . $langs->trans("ThirdParty") . "'; if ($projectstat->thirdparty->id > 0) { print $projectstat->thirdparty->getNomUrl(1); } else { print ' '; } print '
' . $langs->trans("Visibility") . ''; if ($projectstat->public) { print $langs->trans('SharedProject'); } else { print $langs->trans('PrivateProject'); } print '
' . $langs->trans("Status") . '' . $projectstat->getLibStatut(4) . '
"; print ''; } else { print "ErrorRecordNotFound"; } } elseif ($socid > 0) { $object->fetch_thirdparty(); $head = societe_prepare_head($object->thirdparty); dol_fiche_head($head, 'ticket', $langs->trans("ThirdParty"), 0, 'company'); dol_banner_tab($object->thirdparty, 'socid', '', ($user->societe_id ? 0 : 1), 'rowid', 'nom'); dol_fiche_end(); } if (!$user->societe_id && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) { $object->next_prev_filter = "te.fk_user_assign = '" . $user->id . "'"; } elseif ($user->societe_id > 0) { $object->next_prev_filter = "te.fk_soc = '" . $user->societe_id . "'"; } $head = ticket_prepare_head($object); dol_fiche_head($head, 'tabTicket', $langs->trans("Ticket"), -1, 'ticket'); $morehtmlref ='
'; $morehtmlref.= $object->subject; // Author if ($object->fk_user_create > 0) { $morehtmlref .= '
' . $langs->trans("CreatedBy") . ' : '; $langs->load("users"); $fuser = new User($db); $fuser->fetch($object->fk_user_create); $morehtmlref .= $fuser->getNomUrl(0); } if (!empty($object->origin_email)) { $morehtmlref .= '
' . $langs->trans("CreatedBy") . ' : '; $morehtmlref .= $object->origin_email . ' (' . $langs->trans("TicketEmailOriginIssuer") . ')'; } // Thirdparty if (! empty($conf->societe->enabled)) { $morehtmlref.='
'.$langs->trans('ThirdParty') . ' '; if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) { $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 0) . ' : '; } if ($action == 'editcustomer') { $morehtmlref.=$form->form_thirdparty($url_page_current . '?track_id=' . $object->track_id, $object->socid, 'editcustomer', '', 1, 0, 0, array(), 1); } else { $morehtmlref.=$form->form_thirdparty($url_page_current . '?track_id=' . $object->track_id, $object->socid, 'none', '', 1, 0, 0, array(), 1); } } // Project if (! empty($conf->projet->enabled)) { $langs->load("projects"); $morehtmlref.='
'.$langs->trans('Project'); if ($user->rights->ticket->write) { if ($action != 'classify') $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ''; $morehtmlref.=' : '; if ($action == 'classify') { //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); $morehtmlref.='
'; $morehtmlref.=''; $morehtmlref.=''; $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1); $morehtmlref.=''; $morehtmlref.='
'; } else { $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1); } } else { if (! empty($object->fk_project)) { $proj = new Project($db); $proj->fetch($object->fk_project); $morehtmlref.=$proj->getNomUrl(1); } else { $morehtmlref.=''; } } } $morehtmlref.='
'; $linkback = '' . $langs->trans("BackToList") . ' '; dol_banner_tab($object, 'ref', $linkback, ($user->societe_id ? 0 : 1), 'ref', 'ref', $morehtmlref); print '
'; print '
'; print ''; // Track ID print ''; // Subject print ''; // Creation date print ''; // Read date print ''; // Close date print ''; // User assigned print ''; // Progression print ''; print ''; // Timing (Duration sum of linked fichinter) if ($conf->fichinter->enabled) { $object->fetchObjectLinked(); $num = count($object->linkedObjects); $timing = 0; if ($num) { foreach ($object->linkedObjects as $objecttype => $objects) { if ($objecttype = "fichinter") { foreach ($objects as $fichinter) { $timing += $fichinter->duration; } } } } print ''; } // Other attributes include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; print '
' . $langs->trans("TicketTrackId") . ''; if (!empty($object->track_id)) { if (empty($object->ref)) { $object->ref = $object->id; print $form->showrefnav($object, 'id', $linkback, 1, 'rowid', 'track_id'); } else { print $object->track_id; } } else { print $langs->trans('None'); } print '
'; print $form->editfieldkey("Subject", 'subject', $object->subject, $object, $user->rights->ticket->write && !$user->societe_id, 'string'); print ''; print $form->editfieldval("Subject", 'subject', $object->subject, $object, $user->rights->ticket->write && !$user->societe_id, 'string'); print '
' . $langs->trans("DateCreation") . ''; print dol_print_date($object->datec, 'dayhour'); print ' - '.$langs->trans("TimeElapsedSince").': '.''.convertSecondToTime(roundUpToNextMultiple($now - $object->datec, 60)).''; print '
' . $langs->trans("TicketReadOn") . ''; if (!empty($object->date_read)) { print dol_print_date($object->date_read, 'dayhour'); print ' - '.$langs->trans("TicketTimeToRead").': '.convertSecondToTime(roundUpToNextMultiple($object->date_read - $object->datec, 60)).''; print ' - '.$langs->trans("TimeElapsedSince").': '.''.convertSecondToTime(roundUpToNextMultiple($now - $object->date_read, 60)).''; } print '
' . $langs->trans("TicketCloseOn") . ''; if (!empty($object->date_close)) { print dol_print_date($object->date_close, 'dayhour'); } print '
' . $langs->trans("AssignedTo") . ''; if ($object->fk_user_assign > 0) { $userstat->fetch($object->fk_user_assign); print $userstat->getNomUrl(1); } else { print $langs->trans('None'); } // Show user list to assignate one if status is "read" if (GETPOST('set', 'alpha') == "assign_ticket" && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) { print '
'; print ''; print ''; print ''; print ' '; print $form->select_dolusers($user->id, 'fk_user_assign', 1); print ' '; print '
'; } if ($object->fk_statut < 8 && GETPOST('set', 'alpha') != "assign_ticket" && $user->rights->ticket->manage) { print '' . img_picto('', 'edit') . ' ' . $langs->trans('Modify') . ''; } print '
'; print ''; if ($action != 'progression' && $object->fk_statut < 8 && !$user->societe_id) { print ''; } print '
'; print $langs->trans('Progression') . ''; print '' . img_edit($langs->trans('Modify')) . '
'; print '
'; if ($user->rights->ticket->write && $action == 'progression') { print '
'; print ''; print ''; print ''; print ''; print ' '; print '
'; } else { print($object->progress > 0 ? $object->progress : '0') . '%'; } print '
'; print $form->textwithpicto($langs->trans("TicketDurationAuto"), $langs->trans("TicketDurationAutoInfos"), 1); print ''; print convertSecondToTime($timing, 'all', $conf->global->MAIN_DURATION_OF_WORKDAY); print '
'; // Fin colonne gauche et début colonne droite print '
'; // View Original message $actionobject->viewTicketOriginalMessage($user, $action, $object); /*************************************************** * * Classification and actions on ticket * ***************************************************/ print '
'; print ''; print ''; print ''; print ''; print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table print ''; print ''; print ''; print ''; print ''; if (GETPOST('set', 'alpha') == 'properties' && $user->rights->ticket->write) { print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; } else { // Type print ''; // Severity print ''; // Group print ''; } print '
'; print $langs->trans('Properties'); print ''; if (GETPOST('set', 'alpha') == 'properties' && $user->rights->ticket->write) { print ''; } else { // Button to edit Properties if ($object->fk_statut < 5 && $user->rights->ticket->write) { print '' . img_edit($langs->trans('Modify')) . ''; } } print '
'; print $langs->trans('TicketChangeType'); print ''; print $formticket->selectTypesTickets($object->type_code, 'update_value_type', '', 2); print '
'; print $langs->trans('TicketChangeSeverity'); print ''; print $formticket->selectSeveritiesTickets($object->severity_code, 'update_value_severity', '', 2); print '
'; print $langs->trans('TicketChangeCategory'); print ''; print $formticket->selectGroupTickets($object->category_code, 'update_value_category', '', 2); print '
' . $langs->trans("Type") . ''; print $langs->getLabelFromKey($db, $object->type_code, 'c_ticket_type', 'code', 'label'); /*if ($user->admin && !$noadmininfo) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); }*/ print '
' . $langs->trans("TicketSeverity") . ''; print $langs->getLabelFromKey($db, $object->severity_code, 'c_ticket_severity', 'code', 'label'); /*if ($user->admin && !$noadmininfo) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); }*/ print '
' . $langs->trans("TicketGroup") . ''; print $langs->getLabelFromKey($db, $object->category_code, 'c_ticket_category', 'code', 'label'); /*if ($user->admin && !$noadmininfo) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); }*/ print '
'; // End table actions print ''; print '
'; // Display navbar with links to change ticket status print ''; if (!$user->societe_id && $user->rights->ticket->write && $object->fk_status < 8 && GETPOST('set') !== 'properties') { $actionobject->viewStatusActions($object); } if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) { print load_fiche_titre($langs->trans('Contacts'), '', 'title_companies.png'); print '
'; print '
'; print '
'; print '
' . $langs->trans("Source") . '
' . $langs->trans("Company") . '
' . $langs->trans("Contacts") . '
' . $langs->trans("ContactType") . '
' . $langs->trans("Phone") . '
' . $langs->trans("Status") . '
'; print '
'; // Contact list $companystatic = new Societe($db); $contactstatic = new Contact($db); $userstatic = new User($db); foreach (array('internal', 'external') as $source) { $tmpobject = $object; $tab = $tmpobject->listeContact(-1, $source); $num = count($tab); $i = 0; while ($i < $num) { $var = !$var; print '
'; print '
'; if ($tab[$i]['source'] == 'internal') { echo $langs->trans("User"); } if ($tab[$i]['source'] == 'external') { echo $langs->trans("ThirdPartyContact"); } print '
'; print '
'; if ($tab[$i]['socid'] > 0) { $companystatic->fetch($tab[$i]['socid']); echo $companystatic->getNomUrl(1); } if ($tab[$i]['socid'] < 0) { echo $conf->global->MAIN_INFO_SOCIETE_NOM; } if (!$tab[$i]['socid']) { echo ' '; } print '
'; print '
'; if ($tab[$i]['source'] == 'internal') { if ($userstatic->fetch($tab[$i]['id'])) { print $userstatic->getNomUrl(1); } } if ($tab[$i]['source'] == 'external') { if ($contactstatic->fetch($tab[$i]['id'])) { print $contactstatic->getNomUrl(1); } } print '
' . $tab[$i]['libelle'] . '
'; print '
'; print dol_print_phone($tab[$i]['phone'], '', '', '', 'AC_TEL').'
'; if (! empty($tab[$i]['phone_perso'])) { //print img_picto($langs->trans('PhonePerso'),'object_phoning.png','',0,0,0).' '; print '
'.dol_print_phone($tab[$i]['phone_perso'], '', '', '', 'AC_TEL').'
'; } if (! empty($tab[$i]['phone_mobile'])) { //print img_picto($langs->trans('PhoneMobile'),'object_phoning.png','',0,0,0).' '; print dol_print_phone($tab[$i]['phone_mobile'], '', '', '', 'AC_TEL').'
'; } print '
'; print ''; print '
'; $i++; } } print '
'; print '
'; } print '
'; print '
'; dol_fiche_end(); // Buttons for actions if ($action != 'presend' && $action != 'editline') { print '
'."\n"; $parameters=array(); $reshook=$hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if (empty($reshook)) { // Show link to add a message (if read and not closed) if ($object->fk_statut < Ticket::STATUS_CLOSED && $action != "add_message") { print ''; } // Link to create an intervention // socid is needed otherwise fichinter ask it and forgot origin after form submit :\ if (!$object->fk_soc && $user->rights->ficheinter->creer) { print ''; } if ($object->fk_soc > 0 && $object->fk_statut < Ticket::STATUS_CLOSED && $user->rights->ficheinter->creer) { print ''; } // Close ticket if statut is read if ($object->fk_statut > 0 && $object->fk_statut < Ticket::STATUS_CLOSED && $user->rights->ticket->write) { print ''; } // Re-open ticket if (!$user->socid && $object->fk_statut == Ticket::STATUS_CLOSED && !$user->societe_id) { print ''; } // Delete ticket if ($user->rights->ticket->delete && ! $user->societe_id) { print ''; } } print '
'."\n"; } // Select mail models is same action as presend if (GETPOST('modelselected')) { $action = 'presend'; } if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'dellink' || $action == 'delete' || $action == 'edit_message_init') { print '
'; print ''; // ancre // Show links to link elements $linktoelem = $form->showLinkToObjectBlock($object, null, array('ticket')); $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem); print '
'; // Message list print load_fiche_titre($langs->trans('TicketMessagesList'), '', 'messages@ticket'); $show_private_message = ($user->societe_id ? 0 : 1); $actionobject->viewTicketTimelineMessages($show_private_message, true, $object); print '
'; print '
'; print '
'; } elseif ($action == 'add_message') { $action='new_message'; $modelmail='ticket_send'; print '
'; print load_fiche_titre($langs->trans('TicketAddMessage'), '', 'messages@ticket'); print '
'; // Define output language $outputlangs = $langs; $newlang = ''; if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) { $newlang = $_REQUEST['lang_id']; } if ($conf->global->MAIN_MULTILANGS && empty($newlang)) { $newlang = $object->default_lang; } $formticket = new FormTicket($db); $formticket->action = $action; $formticket->track_id = $object->track_id; $formticket->id = $object->id; $formticket->withfile = 2; $formticket->withcancel = 1; $formticket->param = array('fk_user_create' => $user->id); $formticket->param['langsmodels']=(empty($newlang)?$langs->defaultlang:$newlang); // Tableau des parametres complementaires du post $formticket->param['models']=$modelmail; $formticket->param['models_id']=GETPOST('modelmailselected', 'int'); //$formticket->param['socid']=$object->fk_soc; $formticket->param['returnurl']=$_SERVER["PHP_SELF"].'?track_id='.$object->track_id; $formticket->withsubstit = 1; if ($object->fk_soc > 0) { $object->fetch_thirdparty(); $formticket->substit['__THIRDPARTY_NAME__'] = $object->thirdparty->name; } $formticket->substit['__SIGNATURE__'] = $user->signature; $formticket->substit['__TICKETSUP_TRACKID__'] = $object->track_id; $formticket->substit['__TICKETSUP_REF__'] = $object->ref; $formticket->substit['__TICKETSUP_SUBJECT__'] = $object->subject; $formticket->substit['__TICKETSUP_TYPE__'] = $object->type_code; $formticket->substit['__TICKETSUP_SEVERITY__'] = $object->severity_code; $formticket->substit['__TICKETSUP_CATEGORY__'] = $object->category_code; // For backward compatibility $formticket->substit['__TICKETSUP_ANALYTIC_CODE__'] = $object->category_code; $formticket->substit['__TICKETSUP_MESSAGE__'] = $object->message; $formticket->substit['__TICKETSUP_PROGRESSION__'] = $object->progress; if ($object->fk_user_assign > 0) { $userstat->fetch($object->fk_user_assign); $formticket->substit['__TICKETSUP_USER_ASSIGN__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname); } if ($object->fk_user_create > 0) { $userstat->fetch($object->fk_user_create); $formticket->substit['__TICKETSUP_USER_CREATE__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname); } $formticket->showMessageForm('100%'); print '
'; } } } // End of page llxFooter(); $db->close();