/** * Process action method * * @return void */ public function process() { if ($this->request->isPost()) { $library = new Model\MediaLibrary(); $library->process($this->request->getPost()); } if (isset($_POST['process_media_libraries'])) { $this->sess->setRequestValue('saved', true); $this->redirect(BASE_PATH . APP_URI . '/media'); } else { $this->sess->setRequestValue('removed', true); $this->redirect(BASE_PATH . APP_URI . '/media/libraries'); } }
/** * Browser action method * * @param int $lid * @return void */ public function browser($lid = null) { if (null !== $this->request->getQuery('editor') && null !== $this->request->getQuery('type')) { $this->prepareView('media/browser.phtml'); $this->view->title = 'Media Browser'; if ($this->request->isPost()) { $library = new Model\MediaLibrary(); $library->getById($lid); $settings = $library->getSettings(); if (count($settings) == 4) { $upload = new \Pop\File\Upload($settings['folder'], $settings['max_filesize'], $settings['disallowed_types'], $settings['allowed_types']); if ($upload->test($_FILES['file'])) { $media = new Model\Media(); $media->save($_FILES['file'], $this->request->getPost()); $this->sess->setRequestValue('saved', true); $this->redirect(str_replace('&error=1', '', $_SERVER['REQUEST_URI'])); } else { $this->redirect(str_replace('&error=1', '', $_SERVER['REQUEST_URI']) . '&error=1'); } } } if (null !== $lid && null !== $this->request->getQuery('asset') && null !== $this->request->getQuery('asset_type')) { $assets = []; $limit = $this->config->pagination; $page = $this->request->getQuery('page'); $pages = null; $library = new Model\MediaLibrary(); if ($this->request->getQuery('asset_type') == 'content' && $this->application->isRegistered('phire-content')) { $type = \Phire\Content\Table\ContentTypes::findById($lid); $content = \Phire\Content\Table\Content::findBy(['type_id' => $lid], ['order' => 'order, id ASC']); foreach ($content->rows() as $c) { $assets[] = ['id' => $c->id, 'title' => $c->title, 'uri' => BASE_PATH . $c->uri]; } if (isset($type->id)) { $this->view->assetType = $type->name; } } else { if ($this->request->getQuery('asset_type') == 'media') { $library->getById($lid); $media = new Model\Media(['lid' => $lid]); if ($this->request->getQuery('asset') == 'file') { $assets = $media->getAll(); } else { if ($this->request->getQuery('asset') == 'image') { $assets = $media->getAllImages(); } } $this->view->assetType = $library->name; } } if (count($assets) > $limit) { $pages = new Paginator(count($assets), $limit); $pages->useInput(true); $offset = null !== $page && (int) $page > 1 ? $page * $limit - $limit : 0; $assets = array_slice($assets, $offset, $limit, true); } $this->view->title = 'Media' . (null !== $this->view->assetType ? ' : ' . $this->view->assetType : null); $this->view->lid = $lid; $this->view->folder = $library->folder; $this->view->sizes = null !== $library->actions ? array_keys($library->actions) : []; $this->view->pages = $pages; $this->view->browserAssets = $assets; } else { $libraries = []; $limit = null; $pages = null; if ($this->request->getQuery('type') == 'file' && $this->application->isRegistered('phire-content')) { $types = \Phire\Content\Table\ContentTypes::findAll(['order' => 'order ASC']); if ($types->hasRows()) { $libraries['Content'] = []; foreach ($types->rows() as $type) { $libraries['Content'][$type->id] = $type->name; } } } $libraries['Media'] = []; $library = new Model\MediaLibrary(); $libs = $library->getAll(); foreach ($libs as $lib) { $libraries['Media'][$lib->id] = $lib->name; } $this->view->title = 'Media'; $this->view->pages = $pages; $this->view->lid = $lid; $this->view->libraries = $libraries; } $this->send(); } else { $this->redirect(BASE_PATH . APP_URI . '/media'); } }
/** * Process batch archive file * * @param string $file * @param array $fields * @return void */ public function processBatch($file, array $fields) { $tmp = $_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/_tmp'; mkdir($tmp); chmod($tmp, 0777); $batchFileName = (new Upload($tmp))->upload($file); $archive = new Archive($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/_tmp/' . $batchFileName); $archive->extract($tmp); if (stripos($archive->getFilename(), '.tar') !== false && $archive->getFilename() != $batchFileName && file_exists($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/_tmp/' . $archive->getFilename())) { unlink($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/_tmp/' . $archive->getFilename()); } if (file_exists($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/_tmp/' . $batchFileName)) { unlink($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/_tmp/' . $batchFileName); } $library = new MediaLibrary(); $library->getById($fields['library_id']); $settings = $library->getSettings(); $dir = new Dir($tmp, ['absolute' => true, 'recursive' => true, 'filesOnly' => true]); $upload = new Upload($settings['folder'], $settings['max_filesize'], $settings['disallowed_types'], $settings['allowed_types']); foreach ($dir->getFiles() as $file) { $basename = basename($file); $testFile = ['name' => $basename, 'size' => filesize($file), 'error' => 0]; if ($upload->test($testFile)) { $fileName = $upload->checkFilename($basename); copy($file, $settings['folder'] . '/' . $fileName); $title = ucwords(str_replace(['_', '-'], [' ', ' '], substr($fileName, 0, strrpos($fileName, '.')))); if (null !== $library->adapter) { $class = 'Pop\\Image\\' . $library->adapter; $formats = array_keys($class::getFormats()); $fileParts = pathinfo($fileName); if (!empty($fileParts['extension']) && in_array(strtolower($fileParts['extension']), $formats)) { $this->processImage($fileName, $library); } } $media = new Table\Media(['library_id' => $fields['library_id'], 'title' => $title, 'file' => $fileName, 'size' => filesize($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . DIRECTORY_SEPARATOR . $library->folder . DIRECTORY_SEPARATOR . $fileName), 'uploaded' => date('Y-m-d H:i:s'), 'order' => 0]); $media->save(); $this->data['ids'][] = $media->id; } } $dir->emptyDir(true); }