Newer
Older
<?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));
}
$this->user->checkAccess(User::RIGHTS_STUDENT | User::RIGHTS_TEACHER);
$hasImage = $_POST['hasImage'];
$to = Model_System::loadConfig('general.json')->SupportServiceEmail;
if ($requestID <= 0) {
$ticket = $this->sendNewRequest($this->user->ID, $title, $text);
} else {
$updateStatus = $this->updateExistedRequest($requestID, $title, $text);
if ($updateStatus == self::requestUpdateStatusOk) {
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}: {$title}";
$message = Twig::factory('handler/report', [
'Title' => $title,
'Text' => $text,
'User' => $this->user,
])->render();
$replyToName = $this->user->LastName . ' ' . $this->user->FirstName . ' (' . $this->user->FacultyName . ')';
$replyToNameShort = $this->user->LastName . ' ' . $this->user->FirstName;
SendMail::send($subject, $message, $to, $to, $this->user->EMail, $replyToNameShort, $replyToName, $hasImage, $ticket);
VladimirCherkasov
committed
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') {
VladimirCherkasov
committed
$setStatusResult = Model_Support::setStatus($requestID, $status);
}
$data['success'] = ($setStatusResult == 0);
$this->response->body(json_encode($data));
}
$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);
}
VladimirCherkasov
committed
/** 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);