Beispiel #1
0
 public function getContactMethods($type = '', $cc = '')
 {
     $cms = new PartyContactMethodCollection();
     $sh = new SearchHandler($cms, false);
     $sh->setOrderby(array('type', 'name'));
     if (!empty($type)) {
         $sh->addConstraint(new Constraint('type', '=', $type));
     }
     $sh->addConstraint(new Constraint('party_id', '=', $this->party_id));
     if (!empty($cc) && $cc instanceof ConstraintChain) {
         $sh->addConstraintChain($cc);
     }
     $cms->load($sh);
     return $cms;
 }
Beispiel #2
0
 function request($params)
 {
     $errors = array();
     // Parse parameters.
     $p1 = $params->getParam(0);
     $subject = $p1->scalarval();
     $p2 = $params->getParam(1);
     $from_email = $p2->scalarval();
     $p3 = $params->getParam(2);
     $parts = array();
     foreach ($p3->scalarval() as $body) {
         $parts[] = $body->scalarval();
     }
     $content = $parts[0]['content'];
     $request = $content->scalarval();
     unset($parts[0]);
     $p4 = $params->getParam(3);
     $to_email = $p4->scalarval();
     /*
     - mandatory fields
      summary character varying NOT NULL,
       client_ticket_priority_id bigint NOT NULL,
       client_ticket_severity_id bigint NOT NULL,
       ticket_queue_id bigint NOT NULL,
       ticket_category_id bigint NOT NULL,
       internal_ticket_priority_id bigint NOT NULL,
       internal_ticket_severity_id bigint NOT NULL,
       internal_ticket_status_id bigint NOT NULL,
       client_ticket_status_id bigint NOT NULL,
     
     - optional fields
      originator_person_id character varying,
       originator_company_id bigint,
       company_sla_id bigint,
       action_code character varying(4),
       originator_email_address character varying,
       assigned_to character varying,
     */
     $config = Config::Instance();
     $companyid = '';
     $contact = new PartyContactMethodCollection(new PartyContactMethod());
     $sh = new SearchHandler($contact, false, false);
     $sh->addConstraint(new Constraint('name', '=', $config->get('TICKET_SUPPORT')));
     $sh->addConstraint(new Constraint('type', '=', 'E'));
     $sh->addConstraint(new Constraint('technical', 'is', TRUE));
     $sh->addConstraint(new Constraint('contact', '=', $to_email));
     $contact->load($sh);
     if ($contact->count() > 0) {
         $party_ids = array();
         foreach ($contact as $party) {
             $party_ids[] = $party->party_id;
             $usercompanyid = $party->usercompanyid;
         }
         if (!defined('EGS_COMPANY_ID')) {
             define('EGS_COMPANY_ID', $usercompanyid);
         }
         $company = new Company();
         $cc = new ConstraintChain();
         $cc->add(new Constraint('party_id', 'in', '(' . implode(',', $party_ids) . ')'));
         $companylist = $company->getAll($cc);
         if (count($companylist) != 1) {
             $errors[] = '1) Unable to find your support details - please contact technical support';
         } else {
             $company->load(key($companylist), true);
             $companyid = $company->id;
             $usercompanyid = $company->usercompanyid;
         }
     } else {
         $errors[] = '2) Unable to find your support details - please contact technical support';
     }
     $data['attachments'] = $parts;
     $data['TicketResponse']['body'] = $request;
     $data['TicketResponse']['type'] = 'site';
     $data['Ticket']['originator_company_id'] = $companyid;
     $data['reply_address'] = $to_email;
     $start = strpos($subject, '[');
     $end = strpos($subject, ']');
     $mid = strpos($subject, '-');
     if ($start > 0 && $mid > 0 && $end > 0 && $start < $end && $start < $mid && $mid < $end) {
         $ticket = substr($subject, $mid + 1, $end - $mid - 1);
     }
     if (empty($request)) {
         $errors[] = 'No request details submitted';
     } elseif (count($errors) == 0) {
         if (isset($ticket) && is_numeric($ticket)) {
             $data['TicketResponse']['ticket_id'] = $ticket;
             self::updateRequest($data, $errors);
             $response = "Your response for Ticket " . $ticket . " has been received. The person dealing with your query has been notified.";
         } else {
             $data['Ticket']['summary'] = $subject;
             $data['Ticket']['originator_email_address'] = $from_email;
             $data['Ticket']['usercompanyid'] = $usercompanyid;
             self::newRequest($data, $errors);
             $response = "Your request has been received and assigned ticket no. " . $data['TicketResponse']['ticket_id'] . ". A confirmation email has been sent.";
         }
     }
     if (count($errors) > 0) {
         $errors[] = $sh->constraints->__toString();
         $result = "ERROR\n";
         $response = "Subject:" . $subject . "\n";
         $response .= 'Email:' . $from_email . "\n";
         $response .= 'Request:' . $request . ";\n\n";
         $response .= "Errors:\n";
         $response .= implode(";\n", $errors);
     } else {
         $result = 'SUCCESS';
     }
     $struct = array('result' => new xmlrpcval($result, 'string'), 'response' => new xmlrpcval($response, 'string'));
     return new xmlrpcresp(new xmlrpcval($struct, 'struct'));
 }