/**
  * Download action method
  *
  * @param  int $id
  * @return void
  */
 public function download($id)
 {
     if ($this->application->isRegistered('phire-media')) {
         $media = new \Phire\Media\Model\Media();
         $media->getById($id);
         if (isset($media->id)) {
             $click = new Model\Click();
             $click->saveMedia($media->file);
             $ext = strtolower(substr($media->file, strrpos($media->file, '.') + 1));
             $mime = isset($this->mimes[$ext]) ? $this->mimes[$ext] : 'application/octet-stream';
             $size = null;
             if (null !== $this->request->getQuery('size')) {
                 $size = strip_tags($this->request->getQuery('size'));
             }
             if (null !== $size && file_exists($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $media->library_folder . '/' . $size . '/' . $media->file)) {
                 $file = $_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $media->library_folder . '/' . $size . '/' . $media->file;
             } else {
                 $file = $_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/' . $media->library_folder . '/' . $media->file;
             }
             header('Content-Type: ' . $mime);
             if ($this->request->getQuery('download') == 1) {
                 header('Content-Disposition: attachment; filename="' . $media->file . '"');
             }
             echo file_get_contents($file);
         } else {
             if ($this->application->isRegistered('phire-content')) {
                 $controller = new \Phire\Content\Controller\IndexController($this->application, $this->request, $this->response);
                 $controller->error();
             } else {
                 $this->error();
             }
         }
     }
 }
Esempio n. 2
0
 /**
  * Index action method
  *
  * @return void
  */
 public function index($id = null)
 {
     $this->prepareView('image/index.phtml');
     $libraries = [];
     if (class_exists('Phire\\Media\\Table\\MediaLibraries')) {
         $libs = \Phire\Media\Table\MediaLibraries::findAll(['order' => 'order ASC']);
         foreach ($libs->rows() as $lib) {
             $libraries[$lib->id] = $lib->name;
         }
     }
     $this->view->editor_height = $this->application->module('phire-image')['editor_height'];
     $this->view->libraries = $libraries;
     if (null !== $id) {
         $media = new \Phire\Media\Model\Media();
         $media->getById($id);
         $this->view->image_id = $id;
         $this->view->image_file = $media->file;
         $this->view->library_id = $media->library_id;
         $this->view->library_folder = $media->library_folder;
     }
     if ($this->request->isPost()) {
         $image = new Model\Image();
         $image->process($this->request->getPost(), $this->application->module('phire-image')['adapter'], $this->application->module('phire-image')['history']);
         $this->sess->setRequestValue('saved', true);
         $this->redirect(BASE_PATH . APP_URI . '/image/' . $image->image_id);
     } else {
         $this->view->title = 'Image Editor';
     }
     $this->send();
 }
Esempio n. 3
0
 /**
  * Get the feed
  *
  * @param  array               $feedHeaders
  * @param  string              $feedType
  * @param  int                 $feedLimit
  * @param  \Pop\Module\Manager $modules
  * @return Writer
  */
 public function getFeed($feedHeaders, $feedType, $feedLimit, \Pop\Module\Manager $modules)
 {
     $items = [];
     $feed = Table\Feed::findAll();
     foreach ($feed->rows() as $f) {
         if ($f->type == 'content') {
             if ($modules->isRegistered('phire-fields')) {
                 $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Content\\Model\\Content', ['id' => $f->id]);
             } else {
                 $item = new \Phire\Content\Model\Content();
                 $item->getById($f->id);
             }
             if ($item->status == 1 && count($item->roles) == 0) {
                 $items[] = $this->formatItem($item, 'content', $feedType);
             }
         } else {
             if ($f->type == 'media') {
                 if ($modules->isRegistered('phire-fields')) {
                     $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Media\\Model\\Media', ['id' => $f->id]);
                 } else {
                     $item = new \Phire\Media\Model\Media();
                     $item->getById($f->id);
                 }
                 $item->publish = $item->uploaded;
                 $items[] = $this->formatItem($item, 'media', $feedType);
             }
         }
     }
     usort($items, function ($a, $b) {
         $t1 = strtotime($a['publish']);
         $t2 = strtotime($b['publish']);
         return $t2 - $t1;
     });
     if ((int) $feedLimit > 0) {
         if (count($items) > (int) $feedLimit) {
             $items = array_slice($items, 0, (int) $feedLimit);
         }
     }
     $writer = new Writer($feedHeaders, $items);
     if ($feedType == 'atom') {
         $writer->setAtom();
     }
     return $writer;
 }
Esempio n. 4
0
 /**
  * Get category items
  *
  * @param  int    $limit
  * @param  int    $page
  * @return array
  */
 public function getItems($limit = null, $page = null)
 {
     $rows = [];
     $dateFields = ['publish', 'expire', 'created', 'updated', 'uploaded'];
     if (isset($this->data['id'])) {
         $sql = Table\CategoryItems::sql();
         $sql->select([0 => '*', 'content_title' => DB_PREFIX . 'content.title', 'media_title' => DB_PREFIX . 'media.title'])->join(DB_PREFIX . 'content', [DB_PREFIX . 'category_items.content_id' => DB_PREFIX . 'content.id'])->join(DB_PREFIX . 'content_types', [DB_PREFIX . 'content_types.id' => DB_PREFIX . 'content.type_id'])->join(DB_PREFIX . 'media', [DB_PREFIX . 'category_items.media_id' => DB_PREFIX . 'media.id'])->join(DB_PREFIX . 'media_libraries', [DB_PREFIX . 'media_libraries.id' => DB_PREFIX . 'media.library_id'])->where('category_id = :category_id');
         $s = ' AND ((' . $sql->quoteId('media_id') . ' IS NOT NULL) OR ((' . $sql->quoteId('media_id') . ' IS NULL) AND (((' . $sql->quoteId('strict_publishing') . ' = 1) AND (' . $sql->quoteId('publish') . ' <= NOW())) OR (' . $sql->quoteId('strict_publishing') . ' = 0)) AND ((' . $sql->quoteId('expire') . ' IS NULL) OR (' . $sql->quoteId('expire') . ' > NOW())) AND (' . $sql->quoteId('status') . ' = 1)))';
         if (null !== $limit) {
             $page = null !== $page && (int) $page > 1 ? $page * $limit - $limit : null;
             $sql->select()->limit($limit)->offset($page);
         }
         if (isset($this->data['order_by_field']) && isset($this->data['order_by_field'])) {
             $by = $this->data['order_by_field'];
             $order = $this->data['order_by_order'];
         } else {
             $by = DB_PREFIX . 'category_items.order';
             $order = 'ASC';
         }
         $sql->select()->orderBy($by, $order);
         $s = str_replace('ORDER BY', $s . ' ORDER BY', (string) $sql);
         $rows = Table\CategoryItems::execute($s, ['category_id' => $this->id])->rows(false);
     }
     if (count($rows)) {
         foreach ($rows as $key => $value) {
             if (class_exists('Phire\\Fields\\Model\\FieldValue')) {
                 if (!empty($value['media_id'])) {
                     $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Media\\Model\\Media', [$value['media_id']], 'getById', $this->data['filters']);
                 } else {
                     $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Content\\Model\\Content', [$value['content_id']], 'getById', $this->data['filters']);
                 }
                 $value = array_merge((array) $value, $item->toArray());
             } else {
                 if (!empty($value['media_id'])) {
                     $media = new \Phire\Media\Model\Media();
                     $media->getById($value['media_id']);
                     $value = array_merge((array) $value, $media->toArray());
                 }
             }
             foreach ($value as $ky => $vl) {
                 if (in_array($ky, $dateFields)) {
                     $dateValues = $this->formatDateAndTime($vl);
                     foreach ($dateValues as $k => $v) {
                         $value[$ky . '_' . $k] = $v;
                     }
                 }
             }
             $rows[$key] = new \ArrayObject($value, \ArrayObject::ARRAY_AS_PROPS);
         }
     }
     return $rows;
 }
Esempio n. 5
0
 /**
  * Remove any media files
  *
  * @param  Application $application
  * @return void
  */
 public static function removeMedia(Application $application)
 {
     $uploadFolder = BASE_PATH . CONTENT_PATH . '/files';
     $mediaLibrary = $application->module('phire-fields')->config()['media_library'];
     if ($_POST && isset($_POST['rm_media']) && null !== $mediaLibrary && $application->isRegistered('phire-media')) {
         $media = new \Phire\Media\Model\Media();
         $fields = Table\Fields::findBy(['type' => 'file']);
         $fieldIds = [];
         foreach ($fields->rows() as $field) {
             $fieldIds[$field->id] = $field->name;
         }
         foreach ($_POST['rm_media'] as $mid) {
             $media->getById($mid);
             if (isset($media->id) && !empty($media->file)) {
                 $sql = Table\FieldValues::sql();
                 $sql->select()->where('value LIKE :value');
                 $fv = Table\FieldValues::execute((string) $sql, ['value' => '%"' . $media->file . '"%']);
                 // Remove field value media files from EAV field table
                 if ($fv->count() > 0) {
                     if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file)) {
                         unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file);
                     }
                     foreach ($fv->rows() as $val) {
                         $v = json_decode($val->value);
                         if (is_array($v) && in_array($media->file, $v)) {
                             $sql = Table\FieldValues::sql();
                             $sql->select()->where('field_id = :field_id')->where('model_id = :model_id')->where('value LIKE :value');
                             $f = Table\FieldValues::execute((string) $sql, ['field_id' => $val->field_id, 'model_id' => $val->model_id, 'value' => '%"' . $media->file . '"%']);
                             if (isset($f->field_id)) {
                                 unset($v[array_search($media->file, $v)]);
                                 if (count($v) > 0) {
                                     $v = array_values($v);
                                     $f->value = json_encode($v);
                                     $f->save();
                                 } else {
                                     $f->delete();
                                 }
                             }
                         } else {
                             $f = Table\FieldValues::findBy(['field_id' => $val->field_id, 'model_id' => $val->model_id, 'value' => '"' . $media->file . '"']);
                             $f->delete();
                         }
                     }
                 }
                 // Remove field value media files from field tables
                 foreach ($fieldIds as $fieldId => $fieldName) {
                     $fv = new Record();
                     $fv->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('field_' . $fieldName);
                     $sql = $fv->getSql();
                     $sql->select()->where('value LIKE :value');
                     $fv->executeStatement($sql, ['value' => '%"' . $media->file . '"%']);
                     if ($fv->count() > 0) {
                         if (file_exists($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file)) {
                             unlink($_SERVER['DOCUMENT_ROOT'] . $uploadFolder . '/' . $media->file);
                         }
                         foreach ($fv->rows() as $val) {
                             $f = new Record();
                             $f->setPrefix(DB_PREFIX)->setPrimaryKeys(['id'])->setTable('fields_' . $fieldName);
                             $f->findRecordById($val->id);
                             if (isset($f->id)) {
                                 $f->delete();
                             }
                         }
                     }
                 }
             }
         }
     }
 }