Skip to content
Snippets Groups Projects
RequestsProcessing.php 4.36 KiB
Newer Older
<?php defined('SYSPATH') || die('No direct script access.');
xamgore's avatar
xamgore committed
class Controller_Handler_RequestsProcessing extends Controller_Handler {
    const requestUpdateStatusOk = 0;
PavelBegunkov's avatar
PavelBegunkov committed

    public function action_imageUpload() {
xamgore's avatar
xamgore committed
        $requestID = $this->sendEmptyRequestWithImg($this->user->ID); // fixme: returns -1
        $image = $_FILES['imageFile']['tmp_name'];

        $data['success'] = false;
xamgore's avatar
xamgore committed
        if (is_uploaded_file($image)) {
            $saver = new SupportImageSaver($image, $requestID);

            $data = [
                'success'   => $saver->saveImage() == SupportImageSaver::savingStatusOk,
//                'previewBase64' => $saver->getPreviewBase64(),
                'requestID' => $requestID,
            ];
        $this->response->body(json_encode($data));
    }

xamgore's avatar
xamgore committed
    public function action_createRequest() {
        $this->user->checkAccess(User::RIGHTS_STUDENT | User::RIGHTS_TEACHER);
xamgore's avatar
xamgore committed
        $title = $_POST['title'];
        $text = $_POST['text'];
xamgore's avatar
xamgore committed
        $requestID = (int) $_POST['requestID'];
        // constructing mail body
        $to = Model_System::loadConfig('general.json')->SupportServiceEmail;
PavelBegunkov's avatar
PavelBegunkov committed

        $ticket = 0;
VladimirCherkasov's avatar
VladimirCherkasov committed
        if ($requestID <= 0) {
            $ticket = $this->sendNewRequest($this->user->ID, $title, $text);
        } else {
ViolettaShevchenko's avatar
ViolettaShevchenko committed
            $updateStatus = $this->updateExistedRequest($requestID, $title, $text);
            if ($updateStatus == self::requestUpdateStatusOk) {
                $ticket = $requestID;
        if ($ticket === -1) {
            Log::instance()->add(Log::ERROR, '{0} failed to send request: user={1} topic="{2}", {3}', array(
                '{0}' => 'CREATE_REQUEST',
                '{1}' => $this->user->ID,
                '{2}' => $title,
                '{3}' => $text,
            ));
        } else {

            $subject = "Request {$ticket}: rating system report";
            $message = Twig::factory('handler/report', [
                'Title' => $title,
                'Text' => $text,
                'User' => $this->user,
            ])->render();
            $replyToName = $this->user->LastName . ' ' . $this->user->FirstName . ' (' . $this->user->FacultyName . ')';
            SendMail::send($subject, $message, $to, $to, $this->user->EMail, $replyToName);
        }
PavelBegunkov's avatar
PavelBegunkov committed

        $data['success'] = ($ticket > 0);
xamgore's avatar
xamgore committed
        $this->response->body(json_encode($data));
    }
    public function action_setStatus() {
        $this->user->checkAccess(User::RIGHTS_ADMIN);

        $requestID = $_POST['requestID'];
        $status = $_POST['status'];

        $setStatusResult = -1;

xamgore's avatar
xamgore committed
        if ($status == 'closed' || $status == 'opened' || $status == 'processed') {
            $setStatusResult = Model_Support::setStatus($requestID, $status);
        }

        $data['success'] = ($setStatusResult == 0);
        $this->response->body(json_encode($data));
    }

    public function action_view() {
ViolettaShevchenko's avatar
ViolettaShevchenko committed
        $this->user->checkAccess(User::RIGHTS_ADMIN);
        $filename = DOCROOT . SupportImageSaver::directoryToSave .
            $this->request->param('id') . SupportImageSaver::imageExtension;
        $this->responseImage($filename);
    }

    public function action_preview() {
        $filename = DOCROOT . SupportImageSaver::directoryToSave .
            SupportImageSaver::thumbPref . $this->request->param('id') . SupportImageSaver::imageExtension;
        $this->responseImage($filename);
    }

    private function responseImage($filename) {

        if (!file_exists($filename) || !is_file($filename)) {
            throw new HTTP_Exception_404('Picture not found');
        }

        $image = file_get_contents($filename);

        $info = getimagesize($filename);
        $mime = $info['mime'];
        $this->response->headers('Content-Type', $mime)
            ->body($image);
    }
    /** return int  number of created ticket */
    private function sendNewRequest($accountID, $title, $description) {
xamgore's avatar
xamgore committed
        return Model_Support::createRequest($accountID, $title, $description);
xamgore's avatar
xamgore committed
    }
    /** return int  number of created ticket */
    private function sendEmptyRequestWithImg($accountID) {
xamgore's avatar
xamgore committed
        return Model_Support::createRequest($accountID, null, null, $with_image = true);
    }

    /** return int  number status code */
ViolettaShevchenko's avatar
ViolettaShevchenko committed
    private function updateExistedRequest($requestID, $title, $description) {
        return Model_Support::updateRequest($requestID, $title, $description);