/** * Action - image * display images in the predetermined size or in the natural size * * Access to the action is possible in the following paths: * - /utility/image * * @return void */ public function imageAction() { $request = $this->getRequest(); $response = $this->getResponse(); $username = $request->getQuery('username'); $id = (int) $request->getQuery('id'); $w = (int) $request->getQuery('w'); $h = (int) $request->getQuery('h'); $hash = $request->getQuery('hash'); $realHash = Default_Model_DbTable_BlogPostImage::GetImageHash($id, $w, $h); // disable autorendering since we're outputting an image $this->_helper->viewRenderer->setNoRender(); $image = new Default_Model_DbTable_BlogPostImage($this->db); if ($hash != $realHash || !$image->load($id)) { // image not found $response->setHttpResponseCode(404); return; } try { $fullpath = $image->createThumbnail($w, $h, $username); } catch (Exception $ex) { $fullpath = $image->getFullPath($username); } $info = getImageSize($fullpath); $response->setHeader('content-type', $info['mime']); $response->setHeader('content-length', filesize($fullpath)); echo file_get_contents($fullpath); }
/** * Action - images * upload/download/ordering images * * Access to the action is possible in the following paths: * - /blogmanager/images * * @return void */ public function imagesAction() { $json = array(); $filterSanitize = new Default_Form_Filter_Sanitize(); //----------------------- // Получим обьект записи $request = $this->getRequest(); $post_id = (int) $request->getPost('id'); if (!$post_id) { $post_id = (int) $request->getParam('id'); } $post = new Default_Model_DbTable_BlogPost($this->db); // Если конкретной записи нет, то перейдем к странице по умолчанию if (!$post->loadForUser($this->_identity->user_id, $post_id)) { $this->_redirect('/blogmanager'); } // Определим тип операции над изображением: 'upload', 'reorder', 'delete' // и выполним ее if ($request->getPost('upload')) { // Загрузка файла через форму, если javascript отключен... $allParams = $this->_getAllParams(); $formBlogPostImage = new Default_Form_BlogPostImage($post->getId()); $result = $formBlogPostImage->isValid($allParams); if ($result) { // Проверим загружен ли файл? if ($formBlogPostImage->image->receive()) { // Создадим обьект изображения для базы данных $image = new Default_Model_DbTable_BlogPostImage($post->getDb()); $image->post_id = $post->getId(); $filename = $formBlogPostImage->image->getFileName(); if (!is_array($filename)) { $image->uploadFile($filename); $image->filename = basename($filename); $image->comment = $request->getPost('comment'); $image->save(); // Определим признак ajax_upload $this->_flashMessenger->addMessage($this->Translate('Изображение загружено')); } else { $class_message = 'warning'; $message = $this->Translate('Файл не выбран'); $this->_flashMessenger->addMessage($this->Translate('Файл не выбран')); } } else { $class_message = 'warning'; $message = $this->Translate('Ошибка получения файла'); $this->_flashMessenger->addMessage($this->Translate('Ошибка загрузки файла')); } } else { // Ошибка загрузки изображения $class_message = 'warning'; $message = $this->getFormMessagesToString($formBlogPostImage); $this->_flashMessenger->addMessage($this->Translate('Ошибка формы! Неверно введены данные в форму.')); } // Загрузить файл с помощью FileUploader } else { if (Default_Plugin_FileUploader::isFileUploader()) { // Загрузка файла через FileUploader, если javascript включен... // Получим вид загрузчика - Iframe или Xhr $fileUploader = Default_Plugin_FileUploader::isFileUploader(); // list of valid extensions, ex. array("jpeg", "xml", "bmp") $allowedExtensions = explode(';', $request->getParam('allowedExtensions')); // max file size in bytes $sizeLimit = (int) $request->getParam('sizeLimit'); // Получим обьект загрузчика файлов try { $uploader = new Default_Plugin_FileUploader($allowedExtensions, $sizeLimit); // Определим путь загрузки файлов $path = Default_Model_DbTable_BlogPostImage::GetUploadPath(); $path .= '/'; //Загрузим файлы $result = $uploader->handleUpload($path); } catch (Exception $e) { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка загрузки файла') . '</em>', Default_Plugin_SysBox::getMessageError($e))); if ($fileUploader == 'Iframe') { $this->sendJson_Html($json); } else { $this->sendJson($json); } return; } if (isset($result['success'])) { // OK // Создадим обьект изображения try { $image = new Default_Model_DbTable_BlogPostImage($post->getDb()); $image->post_id = $post->getId(); $filename = $path . $uploader->file->getName(); $image->uploadFile($filename); $image->filename = basename($filename); $image->save(); $json['success'] = $result['success']; $json['image_id'] = $image->getId(); $json['filename'] = $image->filename; $json['post_id'] = $image->post_id; $json['url_image'] = $image->createThumbnail(200, 65); $json['form_action'] = $this->getUrl('images', 'blogmanager'); } catch (Exception $e) { $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка загрузки файла') . '</em>', Default_Plugin_SysBox::getMessageError($e))); if ($fileUploader == 'Iframe') { $this->sendJson_Html($json); } else { $this->sendJson($json); } return; } } else { // Error $json = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка загрузки файла') . '</em>', $result['error'])); if ($fileUploader == 'Iframe') { $this->sendJson_Html($json); } else { $this->sendJson($json); } return; } } else { if ($request->getPost('reorder')) { $order = $request->getPost('preview-images'); $post->setImageOrder($order); } else { if ($request->getPost('delete')) { $image_id = (int) $request->getPost('image'); $image = new Default_Model_DbTable_BlogPostImage($this->db); if ($image->loadForPost($post->getId(), $image_id)) { $image->delete(); // Определим кол. оставшихся изображений $count_images = count($post->images) - 1; if ($this->_isAjaxRequest) { $json = array('deleted' => true, 'image_id' => $image_id, 'count_images' => $count_images); } else { $this->_flashMessenger->addMessage($this->Translate('Изображение удалено')); } } } else { if ($request->getPost('comment_update')) { $image_id = (int) $request->getPost('image'); $image = new Default_Model_DbTable_BlogPostImage($this->db); if ($image->loadForPost($post->getId(), $image_id)) { $comment = $request->getPost('comment'); $comment = $filterSanitize->filter($comment); $image->comment = $comment; $image->save(); if ($this->_isAjaxRequest) { $json = array('commented' => true, 'title' => '', 'comment' => $image->comment); } else { $this->_flashMessenger->addMessage($this->Translate('Комментарий к изображению обновился')); } } } else { if ($request->getPost('download_images')) { // Загрузим изображения в виде HTML на страницу // Получим изображения для статьи $images = Default_Model_DbTable_BlogPostImage::GetImages($this->db, array('post_id' => $post_id)); // Создадим обьект шаблона $templater = Default_Plugin_SysBox::createViewSmarty(); //Установим параметры шаблона $templater->images = $images; $templater->post_id = $post_id; // Получим результат шаблона $html = $templater->render('blogmanager/lib/download-images.tpl'); if ($this->_isAjaxRequest) { $json = array('downloaded' => true, 'html' => $html); } } } } } } } if ($this->_isAjaxRequest) { $this->sendJson($json); } else { if (Default_Plugin_FileUploader::isFileUploader() == 'Iframe') { $this->sendJson_Html($json); } else { if ($message) { $getParams = '?id=' . $post->getId() . '&message=' . $message . '&class_message=' . $class_message; } else { $getParams = '?id=' . $post->getId(); } $this->_redirect('/blogmanager/preview' . $getParams); } } }