<?php defined('SYSPATH') || die('No direct script access.'); class Controller_Handler_RequestsProcessing extends Controller_Handler { const requestUpdateStatusOk = 0; public function action_imageUpload() { $requestID = $this->sendEmptyRequestWithImg($this->user->ID); // fixme: returns -1 $image = $_FILES['imageFile']['tmp_name']; $data['success'] = false; 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)); } public function action_createRequest() { $this->user->checkAccess(User::RIGHTS_STUDENT | User::RIGHTS_TEACHER); $title = $_POST['title']; $text = $_POST['text']; $requestID = (int) $_POST['requestID']; // constructing mail body $to = Model_System::loadConfig('general.json')->SupportServiceEmail; $ticket = 0; if ($requestID <= 0) { $ticket = $this->sendNewRequest($this->user->ID, $title, $text); } else { $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); } $data['success'] = ($ticket > 0); $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() { $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) { return Model_Support::createRequest($accountID, $title, $description); } /** return int number of created ticket */ private function sendEmptyRequestWithImg($accountID) { return Model_Support::createRequest($accountID, null, null, $with_image = true); } /** return int number status code */ private function updateExistedRequest($requestID, $title, $description) { return Model_Support::updateRequest($requestID, $title, $description); } }