Skip to content
Snippets Groups Projects
RequestsProcessing.php 4.13 KiB
Newer Older
<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Handler_RequestsProcessing extends Controller_Handler
xamgore's avatar
xamgore committed
{
    const requestUpdateStatusOk = 0;
PavelBegunkov's avatar
PavelBegunkov committed

    public function action_imageUpload() {
        $data['success'] = false;
        $requestID = $this->sendEmptyRequestWithImg($this->user->ID);
        $uploadFileName = $_FILES['imageFile']['tmp_name'];
        if (is_uploaded_file($uploadFileName)) {
            $saver = new SupportImageSaver($uploadFileName, $requestID);
            if ($saver->saveImage() == SupportImageSaver::savingStatusOk) {
                $data['success'] = true;
                $data['requestID'] = $requestID;
                $data['previewBase64'] = $saver->getPreviewBase64();
            } else {
                $data['error'] = 'Failed to load this file!';
        $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'];
        $requestID = $_POST['requestID'];
        // constructing mail body
xamgore's avatar
xamgore committed
        $to = 'it.lab.mmcs@gmail.com';
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;
        $subject = "Request {$ticket}: rating system report";
        $message = Twig::factory('handler/report', [
            'Title' => $title,
            'Text'  => $text,
            'User'  => $this->user,
        ])->render();
        $headers = [
            'From: RatingSystem@no-reply.mmcs.sfedu.ru',
            'Reply-To: ' . $this->user->EMail,
//            'Content-Type: text/html; charset=UTF-8',
        ];
PavelBegunkov's avatar
PavelBegunkov committed

        mail($to, $subject, $message, implode("\n", $headers));
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;

        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) OR !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) {
ViolettaShevchenko's avatar
ViolettaShevchenko committed
        return Model_Support::createRequest($accountID, $title, $description, false);
xamgore's avatar
xamgore committed
    }
    /** return int  number of created ticket */
    private function sendEmptyRequestWithImg($accountID) {
        return Model_Support::createRequest($accountID, NULL, NULL, true);
    }

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