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; }
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')); }