Zendesk.class.php 3.43 KB
<?
namespace SH;
use Zendesk\API\Client as ZendeskAPI;

class Zendesk
{
    private $client;

    static function getInstance() {
        static $instance;
        if(!isset($instance)) {
            $instance = new self();
        }
        return $instance;
    }

    private function __construct() {
        spl_autoload_register(function($class) {
            if(strpos($class, 'Zendesk') !== 0) return;
            include BASE_PATH . '/lib/zendesk_api_client_php/src/'.preg_replace('#\\\|_(?!.+\\\)#','/',$class).'.php';
        });

        $subdomain = 'stroyhouse';
//        $username = "st4you@yandex.ru";
        $token = "P9EBid3f7GE7ny3WeEefPjigRpeBoKjzduPXQKNi";
        $username = 'tyrbass@gmail.com';
//        $password = 'sdfhFR$G43vc@';

        $this->client = new ZendeskAPI($subdomain, $username);
        $this->client->setAuth('token', $token);
//        $this->client->setAuth('password', $password);
    }

    function createNewTicket($subject, $body, $hiddenBody, $phone, $email, $userName) {
        $submitterId = $this->genZendeskUserId($phone, $email, $userName);

//        $userFields = array();
//        if($userName) {
//            $userFields['name'] = $userName;
//        }
//        if($email) {
//            $userFields['email'] = $email;
//        }
//        if($phone) {
//            $userFields['phone'] = $phone;
//        }

        $newTicket = $this->client->tickets()->create(array(
            'subject' => $subject,
            'comment' => array(
                'body' => $body
            ),
            'custom_fields' => array(
                22782113 => $phone,//Контактный телефон
            ),
            'priority' => 'normal',
//            'submitter_id' => $submitterId,
            'requester_id' => $submitterId,
//            'requester' => $userFields
        ));

//        AddMessage2Log('created $newTicket ' . print_r($newTicket->ticket->id, true), 'zendesk');

        if($hiddenBody && $newTicket && $newTicket->ticket && $newTicket->ticket->id) {
            $tickedId = $newTicket->ticket->id;
            $changedTicket = $this->client->ticket()->update(array(
                'id' => $tickedId,
                'comment' => array(
                    'public' => false,
                    'body' => $hiddenBody
                )
            ));
        }

        return $newTicket;
    }

    function genZendeskUserId($phone, $email, $userName) {
        $userId = false;

        if($phone) {
            $result = $this->client->users()->search(array('query' => $phone));
            if($result && !empty($result->users)) {
                $userId = $result->users[0]->id;
            }
        }

        if(!$userId && $email) {
            $result = $this->client->users()->search(array('query' => $email));
            if($result && !empty($result->users)) {
                $userId = $result->users[0]->id;
            }
        }

        if(!$userId) {
            $userFields = array(
                'verified' => true
            );
            if($userName) {
                $userFields['name'] = $userName;
            }
            if($email) {
                $userFields['email'] = $email;
            }
            if($phone) {
                $userFields['phone'] = $phone;
            }
            $result = $this->client->users()->create($userFields);
            if ($result) {
                $userId = $result->user->id;
            }
        }

        return $userId;
    }
}