public function _new() { parent::_new(); $ticket = $this->_uses[$this->modeltype]; if (isset($this->_data['originator_company_id'])) { $company = new Company(); $company->load($this->_data['originator_company_id']); $this->view->set('originator_company', $company->name); $this->view->set('people', $company->getPeople()); $this->view->set('email', Ticket::getCompanyEmail($this->_data['originator_company_id'])); } else { $company = new Systemcompany(); $company->load(EGS_COMPANY_ID); $this->view->set('originator_company', $company->company); $this->view->set('people', $company->systemcompany->getPeople()); } $ticketreleaseversion = new TicketReleaseVersion(); $releaseversion_cc = new ConstraintChain(); $releaseversion_cc->add(new Constraint('status', '<>', $ticketreleaseversion->releasedStatus())); if (!$ticket->isLoaded()) { $defaults = new TicketConfiguration(); if (isset($this->_data['originator_company_id'])) { $cc = new ConstraintChain(); $cc->add(new Constraint('company_id', '=', $this->_data['originator_company_id'])); $defaults->loadBy($cc); } if (!$defaults->isLoaded()) { $cc = new ConstraintChain(); $cc->add(new Constraint('company_id', '=', EGS_COMPANY_ID)); $defaults->loadBy($cc); } if ($defaults->isLoaded()) { $this->view->set('client_ticket_status_default', $defaults->client_ticket_status_id); $this->view->set('internal_ticket_status_default', $defaults->internal_ticket_status_id); $this->view->set('ticket_queue_default', $defaults->ticket_queue_id); $this->view->set('ticket_category_default', $defaults->ticket_category_id); $this->view->set('client_ticket_severity_default', $defaults->client_ticket_severity_id); $this->view->set('internal_ticket_severity_default', $defaults->internal_ticket_severity_id); $this->view->set('client_ticket_priority_default', $defaults->client_ticket_priority_id); $this->view->set('internal_ticket_priority_default', $defaults->internal_ticket_priority_id); } } if (!empty($this->_data['ticket_release_version_id'])) { $ticket->ticket_release_version_id = $this->_data['ticket_release_version_id']; } if (!is_null($ticket->ticket_release_version_id)) { $releaseversion_cc->add(new Constraint('id', '=', $ticket->ticket_release_version_id), 'OR'); } $ticket->belongsTo['release_version']['cc'] = $releaseversion_cc; }
public function save() { // Fill client hidden sections $user = new User(); $person = new Person(); $user->load(EGS_USERNAME); if (!is_null($user->person_id)) { $person->load($user->person_id); } // Is this quick entry? if ($this->_data['TicketResponse']['type'] == 'quick') { $this->_data['TicketResponse']['type'] = 'site'; $config = new TicketConfigurationCollection(new TicketConfiguration()); $sh = new SearchHandler($config); $sh->AddConstraint(new Constraint('usercompanyid', '=', EGS_COMPANY_ID)); $config->load($sh); $config = $config->getContents(); if (count($config) !== 1) { // Make one. $newConfig['usercompanyid'] = EGS_COMPANY_ID; $priority = self::findDefault(new TicketPriorityCollection(new TicketPriority())); $newConfig['client_ticket_priority_default'] = $priority->id; $newConfig['internal_ticket_priority_default'] = $priority->id; $severity = self::findDefault(new TicketSeverityCollection(new TicketSeverity())); $newConfig['client_ticket_severity_default'] = $severity->id; $newConfig['internal_ticket_severity_default'] = $severity->id; $queue = self::findDefault(new TicketQueueCollection(new TicketQueue())); $newConfig['ticket_queue_default'] = $queue->id; $category = self::findDefault(new TicketCategoryCollection(new TicketCategory())); $newConfig['ticket_category_default'] = $category->id; $status = self::findDefault(new TicketStatusCollection(new TicketStatus())); $newConfig['client_ticket_status_default'] = $status->id; $newConfig['internal_ticket_status_default'] = $status->id; $config = TicketConfiguration::Factory($newConfig); } else { $config = $config[0]; } $this->_data['Ticket']['client_ticket_priority_id'] = $config->client_ticket_priority_default; $this->_data['Ticket']['ticket_queue_id'] = $config->ticket_queue_default; } $this->_data['Ticket']['originator_person_id'] = $user->username; $this->_data['Ticket']['originator_company_id'] = $user->lastcompanylogin; $this->_data['Ticket']['internal_ticket_severity_id'] = $this->_data['Ticket']['client_ticket_severity_id']; $this->_data['Ticket']['internal_ticket_priority_id'] = $this->_data['Ticket']['client_ticket_priority_id']; if (!isset($this->_data['Ticket']['id'])) { // Force 'new' status initialy $ts = new TicketStatusCollection(new TicketStatus()); $sh = new SearchHandler($ts); $sh->addConstraint(new Constraint('usercompanyid', '=', EGS_COMPANY_ID)); $sh->addConstraint(new Constraint('status_code', '=', 'NEW')); $ts->load($sh); $statuses = $ts->getContents(); $status = $statuses[0]; // Should only ever be one status, this should be regulated by earlier validation $this->_data['Ticket']['client_ticket_status_id'] = $status->id; $this->_data['Ticket']['internal_ticket_status_id'] = $status->id; } if (isset($this->_data['Ticket']['id'])) { $originalTicket = new Ticket(); $originalTicket->load($this->_data['Ticket']['id']); $changes = array(array('param' => 'client_ticket_status_id', 'friendly' => 'Status', 'object' => 'TicketStatus'), array('param' => 'client_ticket_priority_id', 'friendly' => 'Priority', 'object' => 'TicketPriority'), array('param' => 'client_ticket_severity_id', 'friendly' => 'Severity', 'object' => 'TicketSeverity'), array('param' => 'ticket_queue_id', 'friendly' => 'Queue', 'object' => 'TicketQueue')); $changeText = array(); foreach ($changes as $change) { if ($this->_data['Ticket'][$change['param']] != $originalTicket->{$change}['param']) { $was = new $change['object'](); $now = new $change['object'](); $was->load($originalTicket->{$change}['param']); $now->load($this->_data['Ticket'][$change['param']]); $changeText[] = $change['friendly'] . ': was ' . $was->name . ' now ' . $now->name . '.'; } } if (count($changeText) > 0) { $errors = array(); $ticketResponse = TicketResponse::Factory(array('ticket_id' => $this->_data['Ticket']['id'], 'internal' => 'false', 'body' => implode("\n", $changeText), 'type' => 'status', 'owner' => EGS_USERNAME), $errors, 'TicketResponse'); $ticketResponse->save(); $queue = new TicketQueue(); $queue->load($originalTicket->ticket_queue_id); // Send mail $headers = array('From' => $queue->email_address); $header_string = ""; foreach ($headers as $header => $value) { $header_string .= $header . ': ' . $value . "\r\n"; } $body = TicketingUtils::StatusPlate($originalTicket) . implode("\n", $changeText); $recipients = TicketingUtils::GetRecipients($originalTicket); foreach ($recipients as $recipient) { mail($recipient, 're: [' . $originalTicket->ticket_queue_id . '-' . $originalTicket->id . '] ' . $originalTicket->summary, $body, $header_string); } } } parent::save('Ticket'); $ticket_id = $this->_data['id']; $this->_data['Ticket']['id'] = $this->_data['id']; if (isset($this->_data['id'])) { $this->_data['TicketResponse']['ticket_id'] = $ticket_id; parent::save('TicketResponse'); } sendTo('Client', 'view', array('ticketing'), array('id' => $ticket_id)); }
private function newRequest(&$data = array(), &$errors = array()) { $config = new TicketConfiguration(); $companyid = $data['Ticket']['originator_company_id']; if (!empty($companyid)) { $cc = new ConstraintChain(); $cc->add(new Constraint('company_id', '=', $companyid)); $config->loadBy($cc); } if (!$config->isLoaded()) { $sc = new Systemcompany(); $sc->load($data['Ticket']['usercompanyid']); if ($sc->isLoaded()) { $cc = new ConstraintChain(); $cc->add(new Constraint('company_id', '=', $sc->company_id)); $config->loadBy($cc); } } if ($config->isLoaded()) { $data['Ticket']['ticket_category_id'] = $config->ticket_category_id; $data['Ticket']['ticket_queue_id'] = $config->ticket_queue_id; $data['Ticket']['client_ticket_priority_id'] = $config->client_ticket_priority_id; $data['Ticket']['internal_ticket_priority_id'] = $config->internal_ticket_priority_id; $data['Ticket']['client_ticket_severity_id'] = $config->client_ticket_severity_id; $data['Ticket']['internal_ticket_severity_id'] = $config->internal_ticket_severity_id; $data['Ticket']['client_ticket_status_id'] = $config->client_ticket_status_id; $data['Ticket']['internal_ticket_status_id'] = $config->internal_ticket_status_id; } else { // 'TicketCategory' - get default $data['Ticket']['ticket_category_id'] = self::getDefault(new TicketCategory()); // 'TicketQueue' - get default $data['Ticket']['ticket_queue_id'] = self::getDefault(new TicketQueue()); // 'TicketPriority' - get default $priority = self::getDefault(new TicketPriority()); $data['Ticket']['client_ticket_priority_id'] = $priority; $data['Ticket']['internal_ticket_priority_id'] = $priority; // 'TicketSeverity' - get default $severity = self::getDefault(new TicketSeverity()); $data['Ticket']['client_ticket_severity_id'] = $severity; $data['Ticket']['internal_ticket_severity_id'] = $severity; // 'TicketStatus' - get default $status = self::getDefault(new TicketStatus()); $data['Ticket']['client_ticket_status_id'] = $status; $data['Ticket']['internal_ticket_status_id'] = $status; } // 'User' - get default assigned to/raised by $data['Ticket']['assigned_to'] = ''; $data['Ticket']['raised_by'] = ''; // 'Person' - get name of person making request $data['Ticket']['originator_person_id'] = ''; $db = DB::Instance(); $db->StartTrans(); $ticket = DataObject::Factory($data['Ticket'], $errors, new Ticket()); if (count($errors) == 0 && !$ticket->save()) { $errors[] = $db->ErrorMsg(); $errors[] = 'Error saving Ticket'; $db->FailTrans(); } if (count($errors) == 0) { $data['TicketResponse']['ticket_id'] = $ticket->id; if (!self::saveResponse($data, $errors)) { $errors[] = $db->ErrorMsg(); $db->FailTrans(); } } if (count($errors) == 0 && count($data['attachments']) > 0) { if (!self::saveAttachments($data, $db, $errors)) { $errors[] = $db->ErrorMsg(); $db->FailTrans(); } } $db->CompleteTrans(); // Build the response. if (count($errors) === 0) { self::emailConfirmation($ticket, $data); $data['message'] = 'This ticket has been assigned to you.'; self::notifyQueueOwner($ticket, $data); } return; }