コード例 #1
0
 /**
  * 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);
         }
     }
 }