/** * Get the array of records satisfying the criteria specified in the parameter $options using Zend_Paginator * * @param Zend_Db_Adapter_Abstract $db * @param array $options * @return array Default_Model_DbTable_BlogPost objects */ public static function GetPaginatorPosts($db, $options = array()) { $arrResult = array(); $_config = Zend_Registry::get('config'); $itemCountPerPage = (int) $_config['paginator']['itemCountPerPage']; $pagesInRange = (int) $_config['paginator']['pagesInRange']; //--------------------------------------------------------- // инициализация опций $defaults = array('itemCountPerPage' => $itemCountPerPage, 'pagesInRange' => $pagesInRange, 'page' => 1, 'offset' => 0, 'limit' => 0, 'order' => 'p.ts_created', 'sort' => true); foreach ($defaults as $k => $v) { $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v; } $select = self::_GetBaseQuery($db, $options); // установим поля таблицы для запроса $select->from(null, 'p.*'); // set the offset, limit, and ordering of results if ($options['limit'] > 0) { $select->limit($options['limit'], $options['offset']); } // Установим параметры сортировки для таблицы if ($options['sort']) { $select = self::GetSelectForSort($select, $options); } //------ Создадим обьект Zend_Paginator --------- $strSelect = $select->__toString(); $adapter = new Zend_Paginator_Adapter_DbSelect($select); $count = self::GetPostsCount($db, $options); $adapter->setRowCount($count); $paginator = new Zend_Paginator($adapter); // Установим максимальное количество отображаемых на странице элементов $paginator->setItemCountPerPage($options['itemCountPerPage']); // Установи массив страниц, возвращенный текущим стилем прокрутки $paginator->setPageRange($options['pagesInRange']); // Установим текущую страницу $paginator->setCurrentPageNumber($options['page']); //----- Конфигурирование кеша для Paginator ----- $pgCache = Default_Plugin_SysBox::getCache('paginator'); if ($pgCache->getOption('caching')) { // Установим кеш для Paginator Zend_Paginator::setCache($pgCache); // Очищение кеша if (Default_Plugin_SysBox::isCleanCache()) { $paginator->clearPageItemCache(); } } // получим данные в виде массива обьектов Default_Model_DbTable_BlogPost $posts = self::BuildMultiple($db, __CLASS__, $paginator); $post_ids = array_keys($posts); if (count($post_ids) == 0) { return array(); } // получим данные о загруженных сообщениях $profiles = Default_Model_Profile::BuildMultiple($db, 'Default_Model_DbTable_BlogPostProfile', array($post_ids)); foreach ($posts as $post_id => $post) { if (array_key_exists($post_id, $profiles) && $profiles[$post_id] instanceof Default_Model_DbTable_BlogPostProfile) { $posts[$post_id]->profile = $profiles[$post_id]; } else { $posts[$post_id]->profile->setPostId($post_id); } //!!!!------ Начало установки признака сортировки -----!!!!! if (isset($options['sortColumn'])) { $posts[$post_id]->sortColumn = $options['sortColumn']; } if (isset($options['ascDescFlg'])) { $posts[$post_id]->ascDescFlg = $options['ascDescFlg']; } //!!!!------ Конец установки признака сортировки -----!!!!! } // load the images for each post $options = array('post_id' => $post_ids); $images = Default_Model_DbTable_BlogPostImage::GetImages($db, $options); foreach ($images as $image) { $posts[$image->post_id]->images[$image->getId()] = $image; } // load the locations for each post $locations = Default_Model_DbTable_BlogPostLocation::GetLocations($db, $options); foreach ($locations as $l) { $posts[$l->post_id]->locations[$l->getId()] = $l; } // load the audio for each post $audios = Default_Model_DbTable_BlogPostAudio::GetAudio($db, $options); foreach ($audios as $audio) { $posts[$audio->post_id]->audio[$audio->getId()] = $audio; } // load the video for each post $videos = Default_Model_DbTable_BlogPostVideo::GetVideo($db, $options); foreach ($videos as $video) { $posts[$video->post_id]->video[$video->getId()] = $video; } // load the comments for each post $comments = Default_Model_DbTable_BlogPostComment::GetComments($db, $options); foreach ($comments as $comment) { $posts[$comment->post_id]->comments[$comment->getId()] = $comment; } $arrResult['pages'] = $paginator->getPages(); $arrResult['items'] = $posts; return $arrResult; }
/** * 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); } } }