Files
2024-12-17 17:34:10 +01:00

175 lines
5.3 KiB
PHP

<?php
/* @package Joomla
* @copyright Copyright (C) Open Source Matters. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* @extension Phoca Extension
* @copyright Copyright (C) Jan Pavelka www.phoca.cz
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/
defined('_JEXEC') or die();
use Joomla\CMS\MVC\Model\AdminModel;
use Joomla\CMS\Table\Table;
use Joomla\CMS\Factory;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Filesystem\Folder;
use Joomla\CMS\Object\CMSObject;
use Joomla\CMS\Filesystem\Path;
jimport('joomla.application.component.modeladmin');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
class PhocaDownloadCpModelPhocaDownloadManager extends AdminModel
{
protected $option = 'com_phocadownload';
protected $text_prefix = 'com_phocadownload';
public $typeAlias = 'com_phocadownload.phocadownloadmanager';
public function getTable($type = 'PhocaDownload', $prefix = 'Table', $config = array())
{
return Table::getInstance($type, $prefix, $config);
}
public function getForm($data = array(), $loadData = true) {
$form = $this->loadForm('com_phocadownload.phocadownloadmanager', 'phocadownloadmanager', array('control' => 'jform', 'load_data' => $loadData));
if (empty($form)) {
return false;
}
return $form;
}
protected function loadFormData()
{
// Check the session for previously entered form data.
$data = Factory::getApplication()->getUserState('com_phocadownloadm.edit.phocadownloadm.data', array());
if (empty($data)) {
$data = $this->getItem();
}
return $data;
}
function getFolderState($property = null) {
static $set;
if (!$set) {
$folder = Factory::getApplication()->input->get( 'folder', '', '', 'path' );
$upload = Factory::getApplication()->input->get( 'upload', '', '', 'int' );
$manager = Factory::getApplication()->input->get( 'manager', '', '', 'path' );
$this->setState('folder', $folder);
$this->setState('manager', $manager);
$parent = str_replace("\\", "/", dirname($folder));
$parent = ($parent == '.') ? null : $parent;
$this->setState('parent', $parent);
$set = true;
}
return parent::getState($property);
}
function getFiles() {
$list = $this->getList();
return $list['files'];
}
function getFolders() {
$list = $this->getList();
return $list['folders'];
}
function getList() {
static $list;
//Params
$params = ComponentHelper::getParams( 'com_phocadownload' );
// Only process the list once per request
if (is_array($list)) {
return $list;
}
// Get current path from request
$current = $this->getState('folder');
// If undefined, set to empty
if ($current == 'undefined') {
$current = '';
}
// File Manager, Icon Manager
$manager = $this->getState('manager');
if ($manager == 'undefined') {
$manager = '';
}
$path = PhocaDownloadPath::getPathSet($manager);
$group = PhocaDownloadSettings::getManagerGroup($manager);
//$path = PhocaDownloadPath::getPathSet();
// Initialize variables
if (strlen($current) > 0) {
$orig_path = $path['orig_abs_ds'].$current;
} else {
$orig_path = $path['orig_abs_ds'];
}
$orig_path_server = str_replace('\\', '/', $path['orig_abs'] .'/');
// Absolute Path defined by user
$absolutePath = $params->get('absolute_path', '');
$absolutePath = str_replace('\\', '/', $absolutePath);
// Be aware - absolute path is not set for images folder and for preview and play folder - see documentation
if ($absolutePath != '' && $group['f'] == 1) {
$orig_path_server = str_replace('\\', '/', JPath::clean($absolutePath .'/') );//$absolutePath ;
}
$files = array ();
$folders = array ();
// Get the list of files and folders from the given folder
$file_list = Folder::files($orig_path);
$folder_list = Folder::folders($orig_path, '', false, false, array());
// Iterate over the files if they exist
//file - abc.img, file_no - folder/abc.img
if ($file_list !== false) {
foreach ($file_list as $file) {
if (is_file($orig_path.'/'.$file) && substr($file, 0, 1) != '.' && strtolower($file) !== 'index.html') {
$tmp = new CMSObject();
$tmp->name = basename($file);
$tmp->path_with_name = str_replace('\\', '/', Path::clean($orig_path . '/' . $file));
$tmp->path_without_name_relative= $path['orig_rel_ds'] . str_replace($orig_path_server, '', $tmp->path_with_name);
$tmp->path_with_name = str_replace('\\', '/', Path::clean($orig_path . '/' . $file));
$tmp->path_with_name_relative_no= str_replace($orig_path_server, '', $tmp->path_with_name);
$files[] = $tmp;
}
}
}
// Iterate over the folders if they exist
if ($folder_list !== false) {
foreach ($folder_list as $folder)
{
$tmp = new CMSObject();
$tmp->name = basename($folder);
$tmp->path_with_name = str_replace('\\', '/', Path::clean($orig_path . '/' . $folder));
$tmp->path_without_name_relative= $path['orig_rel_ds'] . str_replace($orig_path_server, '', $tmp->path_with_name);
$tmp->path_with_name_relative_no= str_replace($orig_path_server, '', $tmp->path_with_name);
$folders[] = $tmp;
}
}
$list = array('folders' => $folders, 'files' => $files);
return $list;
}
}
?>