1058 lines
32 KiB
PHP
1058 lines
32 KiB
PHP
<?php
|
|
/*
|
|
* @package Joomla
|
|
* @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
|
|
*
|
|
* @component Phoca Gallery
|
|
* @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\BaseDatabaseModel;
|
|
use Joomla\CMS\Factory;
|
|
use Joomla\CMS\Object\CMSObject;
|
|
use Joomla\CMS\Language\Text;
|
|
use Joomla\CMS\Plugin\PluginHelper;
|
|
use Joomla\CMS\Filesystem\File;
|
|
jimport('joomla.application.component.model');
|
|
phocagalleryimport('phocagallery.pagination.paginationusersubcat');
|
|
phocagalleryimport('phocagallery.pagination.paginationuserimage');
|
|
use Joomla\String\StringHelper;
|
|
|
|
class PhocagalleryModelUser extends BaseDatabaseModel
|
|
{
|
|
var $_data_subcat = null;
|
|
var $_total_subcat = null;
|
|
var $_pagination_subcat = null;
|
|
var $_context_subcat = 'com_phocagallery.phocagalleryusersubcat';
|
|
|
|
var $_data_image = null;
|
|
var $_total_image = null;
|
|
var $_pagination_image = null;
|
|
var $_context_image = 'com_phocagallery.phocagalleryuserimage';
|
|
|
|
function __construct() {
|
|
parent::__construct();
|
|
|
|
$app = Factory::getApplication();
|
|
// SubCategory
|
|
$limit_subcat = $app->getUserStateFromRequest( $this->_context_subcat.'.list.limitsubcat', 'limitsubcat', 20, 'int' );
|
|
$limitstart_subcat = $app->input->get('limitstartsubcat', 0, 'int');
|
|
$limitstart_subcat = ($limit_subcat != 0 ? (floor($limitstart_subcat / $limit_subcat) * $limit_subcat) : 0);
|
|
$this->setState($this->_context_subcat.'.list.limitsubcat', $limit_subcat);
|
|
$this->setState($this->_context_subcat.'.list.limitstartsubcat', $limitstart_subcat);
|
|
|
|
// Image
|
|
$limit_image = $app->getUserStateFromRequest( $this->_context_image.'.list.limitimage', 'limitimage', 20, 'int' );
|
|
$limitstart_image = $app->input->get('limitstartimage', 0, 'int');
|
|
$limitstart_image = ($limit_image != 0 ? (floor($limitstart_image / $limit_image) * $limit_image) : 0);
|
|
$this->setState($this->_context_image.'.list.limitimage', $limit_image);
|
|
$this->setState($this->_context_image.'.list.limitstartimage', $limitstart_image);
|
|
}
|
|
|
|
function getDataSubcat($userId) {
|
|
$app = Factory::getApplication();
|
|
if (empty($this->_data_subcat)) {
|
|
$query = $this->_buildQuerySubCat($userId);
|
|
$this->_data_subcat = $this->_getList( $query );// We need all data because of tree
|
|
// Order Categories to tree
|
|
$text = ''; // test is tree name e.g. Category >> Subcategory
|
|
$tree = array();
|
|
$filter_catid = $app->getUserStateFromRequest( $this->_context_subcat.'.filter_catid', 'filter_catid', 0, 'int' );
|
|
|
|
if ($filter_catid == 0) {
|
|
$ownerMainCategory = $this->getOwnerMainCategory($userId);
|
|
if (isset($ownerMainCategory->id)) {
|
|
$filter_catid = $ownerMainCategory->id;
|
|
}
|
|
}
|
|
$this->_data_subcat = $this->_categoryTree($this->_data_subcat, $tree,$filter_catid, $text, -1);
|
|
}
|
|
return $this->_data_subcat;
|
|
}
|
|
|
|
function getDataImage($userId) {
|
|
|
|
if (empty($this->_data_image)) {
|
|
$query = $this->_buildQueryImage($userId);
|
|
$this->_data_image = $this->_getList($query, $this->getState($this->_context_image.'.list.limitstartimage'), $this->getState($this->_context_image.'.list.limitimage'));
|
|
}
|
|
return $this->_data_image;
|
|
}
|
|
|
|
/*
|
|
* Is called after setTotal from the view
|
|
*/
|
|
function getTotalSubCat() {
|
|
return $this->_total_subcat;
|
|
}
|
|
function setTotalSubCat($total) {
|
|
$this->_total_subcat = (int)$total;
|
|
}
|
|
function getTotalImage($userId) {
|
|
if (empty($this->_total_image)) {
|
|
$query = $this->_buildQueryImage($userId);
|
|
$this->_total_image = $this->_getListCount($query);
|
|
}
|
|
return $this->_total_image;
|
|
}
|
|
/*
|
|
* Is called after setTotal from the view
|
|
*/
|
|
function getPaginationSubCat($userId) {
|
|
if (empty($this->_pagination_subcat)) {
|
|
jimport('joomla.html.pagination');
|
|
$this->_pagination_subcat = new PhocaGalleryPaginationUserSubCat( $this->getTotalSubCat(), $this->getState($this->_context_subcat.'.list.limitstartsubcat'), $this->getState($this->_context_subcat.'.list.limitsubcat') );
|
|
}
|
|
return $this->_pagination_subcat;
|
|
}
|
|
|
|
function getPaginationImage($userId) {
|
|
if (empty($this->_pagination_image)) {
|
|
jimport('joomla.html.pagination');
|
|
$this->_pagination_image = new PhocaGalleryPaginationUserImage( $this->getTotalImage($userId), $this->getState($this->_context_image.'.list.limitstartimage'), $this->getState($this->_context_image.'.list.limitimage') );
|
|
}
|
|
return $this->_pagination_image;
|
|
}
|
|
|
|
function _buildQuerySubCat($userId) {
|
|
$where = $this->_buildContentWhereSubCat($userId);
|
|
$orderby = $this->_buildContentOrderBySubCat();
|
|
|
|
$query = 'SELECT a.*, a.title AS category, c.countid AS countid,'
|
|
. ' CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(\':\', a.id, a.alias) ELSE a.id END as slug '
|
|
. ' FROM #__phocagallery_categories AS a'
|
|
. ' JOIN (SELECT c.parent_id, count(*) AS countid'
|
|
. ' FROM #__phocagallery_categories AS c'
|
|
.' GROUP BY c.parent_id ) AS c'
|
|
.' ON a.parent_id = c.parent_id'
|
|
. $where
|
|
. $orderby;
|
|
|
|
return $query;
|
|
}
|
|
|
|
function _buildQueryImage($userId) {
|
|
$where = $this->_buildContentWhereImage($userId);
|
|
$orderby = $this->_buildContentOrderByImage();
|
|
|
|
$query = ' SELECT a.*, cc.title AS category,'
|
|
. ' CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(\':\', a.id, a.alias) ELSE a.id END as slug '
|
|
. ' FROM #__phocagallery AS a '
|
|
. ' LEFT JOIN #__phocagallery_categories AS cc ON cc.id = a.catid '
|
|
. $where
|
|
. $orderby;
|
|
return $query;
|
|
}
|
|
|
|
|
|
function _buildContentOrderBySubCat() {
|
|
$app = Factory::getApplication();
|
|
$filter_order = $app->getUserStateFromRequest( $this->_context_subcat.'.filter_order', 'filter_order_subcat', 'a.ordering', 'cmd' );
|
|
$filter_order_Dir = $app->getUserStateFromRequest( $this->_context_subcat.'.filter_order_Dir', 'filter_order_Dir_subcat', '', 'word' );
|
|
if ($filter_order == 'a.ordering'){
|
|
$orderby = ' ORDER BY a.ordering '.$filter_order_Dir;
|
|
} else {
|
|
$orderby = ' ORDER BY '.$filter_order . ' ' . $filter_order_Dir . ' ';
|
|
}
|
|
return $orderby;
|
|
}
|
|
|
|
function _buildContentOrderByImage() {
|
|
$app = Factory::getApplication();
|
|
$filter_order = $app->getUserStateFromRequest( $this->_context_image.'.filter_order', 'filter_order_image', 'a.ordering', 'cmd' );
|
|
$filter_order_Dir = $app->getUserStateFromRequest( $this->_context_image.'.filter_order_Dir', 'filter_order_Dir_image', '', 'word' );
|
|
|
|
if ($filter_order == 'a.ordering'){
|
|
$orderby = ' ORDER BY category, a.ordering '.$filter_order_Dir;
|
|
} else {
|
|
$orderby = ' ORDER BY '.$filter_order.' '.$filter_order_Dir.' , category, a.ordering ';
|
|
}
|
|
return $orderby;
|
|
}
|
|
|
|
function _buildContentWhereSubCat($userId) {
|
|
$app = Factory::getApplication();
|
|
$filter_published = $app->getUserStateFromRequest( $this->_context_subcat.'.filter_published','filter_published_subcat','', 'word' );
|
|
$filter_catid = $app->getUserStateFromRequest( $this->_context_subcat.'.filter_catid','filter_catid_subcat',0,'int' );
|
|
$filter_order = $app->getUserStateFromRequest( $this->_context_subcat.'.filter_order','filter_order_subcat','a.ordering','cmd' );
|
|
$filter_order_Dir = $app->getUserStateFromRequest( $this->_context_subcat.'.filter_order_Dir','filter_order_Dir_subcat', '', 'word' );
|
|
$search = $app->getUserStateFromRequest( $this->_context_subcat.'.search', 'phocagallerysubcatsearch', '', 'string' );
|
|
|
|
if (strpos($search, '"') !== false) {
|
|
$search = str_replace(array('=', '<'), '', $search);
|
|
}
|
|
$search = StringHelper::strtolower( $search );
|
|
|
|
$where = array();
|
|
|
|
$where[] = 'a.parent_id <> 0';// no parent category
|
|
$where[] = 'a.owner_id = '.(int)$userId;
|
|
$where[] = 'a.owner_id > 0'; // Ignore -1
|
|
|
|
/*if ($filter_catid > 0) {
|
|
$where[] = 'a.parent_id = '.(int) $filter_catid;
|
|
}*/
|
|
if ($search) {
|
|
$where[] = 'LOWER(a.title) LIKE '.$this->_db->Quote('%'.$search.'%');
|
|
}
|
|
if ( $filter_published ) {
|
|
if ( $filter_published == 'P' ) {
|
|
$where[] = 'a.published = 1';
|
|
} else if ($filter_published == 'U' ) {
|
|
$where[] = 'a.published = 0';
|
|
}
|
|
}
|
|
$where = ( count( $where ) ? ' WHERE '. implode( ' AND ', $where ) : '' );
|
|
return $where;
|
|
}
|
|
|
|
function _buildContentWhereImage($userId) {
|
|
$app = Factory::getApplication();
|
|
$filter_published = $app->getUserStateFromRequest( $this->_context_image.'.filter_published','filter_published_image','','word' );
|
|
$filter_catid = $app->getUserStateFromRequest( $this->_context_image.'.filter_catid','filter_catid_image',0,'int' );
|
|
$filter_order = $app->getUserStateFromRequest( $this->_context_image.'.filter_order','filter_order_image','a.ordering', 'cmd' );
|
|
$filter_order_Dir = $app->getUserStateFromRequest( $this->_context_image.'.filter_order_Dir','filter_order_Dir_image','', 'word' );
|
|
$search = $app->getUserStateFromRequest( $this->_context_image.'.search', 'phocagalleryimagesearch', '', 'string' );
|
|
$search = StringHelper::strtolower( $search );
|
|
|
|
$where = array();
|
|
|
|
$where[] = 'cc.owner_id = '.(int)$userId;
|
|
$where[] = 'cc.owner_id > 0'; // Ignore -1
|
|
|
|
|
|
if ($filter_catid > 0) {
|
|
$where[] = 'a.catid = '.(int) $filter_catid;
|
|
}
|
|
if ($search) {
|
|
$where[] = 'LOWER(a.title) LIKE '.$this->_db->Quote('%'.$search.'%');
|
|
}
|
|
if ( $filter_published ) {
|
|
if ( $filter_published == 'P' ) {
|
|
$where[] = 'a.published = 1';
|
|
} else if ($filter_published == 'U' ) {
|
|
$where[] = 'a.published = 0';
|
|
}
|
|
}
|
|
$where = ( count( $where ) ? ' WHERE '. implode( ' AND ', $where ) : '' );
|
|
return $where;
|
|
}
|
|
|
|
/*
|
|
* Create category tree
|
|
*/
|
|
function _categoryTree( $data, $tree, $id = 0, $text='', $currentId = 0) {
|
|
|
|
// Ordering
|
|
$countItemsInCat = 0;
|
|
foreach ($data as $key) {
|
|
$show_text = $text . $key->title;
|
|
|
|
static $iCT = 0;// All displayed items
|
|
|
|
if ($key->parent_id == $id && $currentId != $id && $currentId != $key->id ) {
|
|
|
|
$tree[$iCT] = new CMSObject();
|
|
|
|
// Ordering MUST be solved here
|
|
if ($countItemsInCat > 0) {
|
|
$tree[$iCT]->orderup = 1;
|
|
} else {
|
|
$tree[$iCT]->orderup = 0;
|
|
}
|
|
|
|
if ($countItemsInCat < ($key->countid - 1)) {
|
|
$tree[$iCT]->orderdown = 1;
|
|
} else {
|
|
$tree[$iCT]->orderdown = 0;
|
|
}
|
|
|
|
$tree[$iCT]->id = $key->id;
|
|
$tree[$iCT]->title = $show_text;
|
|
$tree[$iCT]->title_self = $key->title;
|
|
$tree[$iCT]->parent_id = $key->parent_id;
|
|
$tree[$iCT]->owner_id = $key->owner_id;
|
|
$tree[$iCT]->name = $key->name;
|
|
$tree[$iCT]->alias = $key->alias;
|
|
$tree[$iCT]->image = $key->image;
|
|
$tree[$iCT]->section = $key->section;
|
|
$tree[$iCT]->image_position = $key->image_position;
|
|
$tree[$iCT]->description = $key->description;
|
|
$tree[$iCT]->published = $key->published;
|
|
$tree[$iCT]->approved = $key->approved;
|
|
$tree[$iCT]->editor = $key->editor;
|
|
$tree[$iCT]->ordering = $key->ordering;
|
|
$tree[$iCT]->access = $key->access;
|
|
$tree[$iCT]->count = $key->count;
|
|
$tree[$iCT]->params = $key->params;
|
|
$tree[$iCT]->checked_out = $key->checked_out;
|
|
$tree[$iCT]->slug = $key->slug;
|
|
$tree[$iCT]->hits = $key->hits;
|
|
$tree[$iCT]->accessuserid = $key->accessuserid;
|
|
$tree[$iCT]->uploaduserid = $key->uploaduserid;
|
|
$tree[$iCT]->deleteuserid = $key->deleteuserid;
|
|
$tree[$iCT]->userfolder = $key->userfolder;
|
|
$tree[$iCT]->latitude = $key->latitude;
|
|
$tree[$iCT]->longitude = $key->longitude;
|
|
$tree[$iCT]->zoom = $key->zoom;
|
|
$tree[$iCT]->geotitle = $key->geotitle;
|
|
$tree[$iCT]->link = '';
|
|
$tree[$iCT]->filename = '';// Will be added in View (after items will be reduced)
|
|
$tree[$iCT]->linkthumbnailpath = '';
|
|
$iCT++;
|
|
$tree = $this->_categoryTree($data, $tree, $key->id, $show_text . " » ", $currentId );
|
|
$countItemsInCat++;
|
|
}
|
|
}
|
|
return($tree);
|
|
}
|
|
|
|
/*
|
|
* AUTHOR - OWNER
|
|
* Get information about owner's category
|
|
*/
|
|
function getOwnerMainCategory($userId) {
|
|
|
|
$query = 'SELECT cc.*'
|
|
. ' FROM #__phocagallery_categories AS cc'
|
|
. ' WHERE cc.owner_id = '.(int)$userId
|
|
//. ' AND cc.id <> '.(int)$categoryId // Check other categories
|
|
. ' AND cc.owner_id > 0' // Ignore -1
|
|
. ' AND cc.parent_id = 0';
|
|
|
|
$this->_db->setQuery( $query );
|
|
$ownerMainCategoryId = $this->_db->loadObject();
|
|
if (isset($ownerMainCategoryId->id)) {
|
|
return $ownerMainCategoryId;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function isOwnerCategory($userId, $categoryId) {
|
|
|
|
$query = 'SELECT cc.id'
|
|
. ' FROM #__phocagallery_categories AS cc'
|
|
. ' WHERE cc.owner_id = '.(int)$userId
|
|
. ' AND cc.id = '.(int)$categoryId;
|
|
|
|
$this->_db->setQuery( $query );
|
|
|
|
$ownerCategoryId = $this->_db->loadObject();
|
|
if (isset($ownerCategoryId->id)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
/*
|
|
* Return false or catid
|
|
* Check if owner category is catid
|
|
*/
|
|
function isOwnerCategorySubCat($userId, $categoryId) {
|
|
|
|
$query = 'SELECT cc.id'
|
|
. ' FROM #__phocagallery_categories AS cc'
|
|
. ' LEFT JOIN #__phocagallery_categories AS s ON s.parent_id = cc.id'
|
|
. ' WHERE cc.owner_id = '.(int)$userId
|
|
. ' AND s.id = '.(int)$categoryId;
|
|
|
|
|
|
$this->_db->setQuery( $query );
|
|
$ownerCategoryId = $this->_db->loadObject();
|
|
if (isset($ownerCategoryId->id)) {
|
|
return $ownerCategoryId->id;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* Return false or catid
|
|
* Check if owner category is catid
|
|
*/
|
|
|
|
function isOwnerCategoryImage($userId, $imageId) {
|
|
|
|
$query = 'SELECT cc.id'
|
|
. ' FROM #__phocagallery_categories AS cc'
|
|
. ' LEFT JOIN #__phocagallery AS a ON a.catid = cc.id'
|
|
. ' WHERE cc.owner_id = '.(int)$userId
|
|
. ' AND a.id = '.(int)$imageId;
|
|
|
|
$this->_db->setQuery( $query );
|
|
$ownerCategoryId = $this->_db->loadObject();
|
|
if (isset($ownerCategoryId->id)) {
|
|
return $ownerCategoryId->id;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
function getCountUserSubCat($userId) {
|
|
$query = 'SELECT count(cc.id) AS countid'
|
|
. ' FROM #__phocagallery_categories AS cc'
|
|
. ' WHERE cc.owner_id = '.(int)$userId
|
|
. ' AND cc.parent_id <> 0';
|
|
|
|
$this->_db->setQuery( $query );
|
|
$categoryCount = $this->_db->loadObject();
|
|
if (isset($categoryCount->countid)) {
|
|
return $categoryCount->countid;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function getCountUserImage($userId) {
|
|
$query = 'SELECT count(a.id) AS count'
|
|
. ' FROM #__phocagallery AS a'
|
|
. ' LEFT JOIN #__phocagallery_categories AS cc ON cc.id = a.catid '
|
|
. ' WHERE cc.owner_id = '.(int)$userId;
|
|
|
|
$this->_db->setQuery( $query );
|
|
$imageCount = $this->_db->loadObject();
|
|
if (isset($imageCount->count)) {
|
|
return $imageCount->count;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function getSumUserImage($userId) {
|
|
$query = 'SELECT sum(a.imgorigsize) AS sum'
|
|
. ' FROM #__phocagallery AS a'
|
|
. ' LEFT JOIN #__phocagallery_categories AS cc ON cc.id = a.catid '
|
|
. ' WHERE cc.owner_id = '.(int)$userId;
|
|
|
|
$this->_db->setQuery( $query );
|
|
$imageSum = $this->_db->loadObject();
|
|
if (isset($imageSum->sum)) {
|
|
return $imageSum->sum;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
* Publish SubCat
|
|
*/
|
|
function publishsubcat($id = 0, $publish = 1) {
|
|
|
|
$user = Factory::getUser();
|
|
$query = 'UPDATE #__phocagallery_categories AS c'
|
|
. ' SET c.published = '.(int) $publish
|
|
. ' WHERE c.id = '.(int)$id
|
|
. ' AND c.owner_id = '.(int) $user->get('id');
|
|
|
|
$this->_db->setQuery( $query );
|
|
$this->_db->execute();
|
|
/*if (!$this->_db->query()) {
|
|
$this->setError('Database Error 2');
|
|
return false;
|
|
}*/
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* Publish Image
|
|
*/
|
|
function publishimage($id = 0, $publish = 1) {
|
|
|
|
$user = Factory::getUser();
|
|
$query = 'UPDATE #__phocagallery AS a'
|
|
. ' LEFT JOIN #__phocagallery_categories AS cc ON cc.id = a.catid '
|
|
. ' SET a.published = '.(int) $publish
|
|
. ' WHERE a.id = '.(int)$id
|
|
. ' AND cc.owner_id = '.(int) $user->get('id');
|
|
|
|
$this->_db->setQuery( $query );
|
|
$this->_db->execute();
|
|
/*if (!$this->_db->query()) {
|
|
$this->setError('Database Error 2');
|
|
return false;
|
|
}*/
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* Move Subcat
|
|
*/
|
|
|
|
function movesubcat($direction, $id) {
|
|
$row = $this->getTable('phocagalleryc', 'Table');
|
|
|
|
if (!$row->load((int)$id)) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
|
|
if (!$row->move( $direction, ' parent_id = '.(int) $row->parent_id.' AND published >= 0 ' )) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* Move Image
|
|
*/
|
|
|
|
function moveimage($direction, $id) {
|
|
$row = $this->getTable('phocagallery', 'Table');
|
|
|
|
if (!$row->load((int)$id)) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
|
|
if (!$row->move( $direction, ' catid = '.(int) $row->catid.' AND published >= 0 ' )) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* Save order subcat
|
|
*/
|
|
function saveordersubcat($cid = array(), $order = array()){
|
|
$row = $this->getTable('phocagalleryc', 'Table');
|
|
$groupings = array();
|
|
|
|
// $catid is null - update ordering values
|
|
for( $i=0; $i < count($cid); $i++ ) {
|
|
$row->load( (int) $cid[$i] );
|
|
$groupings[] = $row->parent_id; // track categories
|
|
|
|
if ($row->ordering != $order[$i]) {
|
|
$row->ordering = $order[$i];
|
|
if (!$row->store()) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// execute updateOrder for each parent group
|
|
$groupings = array_unique( $groupings );
|
|
foreach ($groupings as $group){
|
|
$row->reorder('parent_id = '.(int) $group);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* Save order Image
|
|
*/
|
|
function saveorderimage($cid = array(), $order = array()){
|
|
$row = $this->getTable('phocagallery', 'Table');
|
|
$groupings = array();
|
|
|
|
// $catid is null - update ordering values
|
|
for( $i=0; $i < count($cid); $i++ ) {
|
|
$row->load( (int) $cid[$i] );
|
|
$groupings[] = $row->catid; // track categories
|
|
|
|
if ($row->ordering != $order[$i]) {
|
|
$row->ordering = $order[$i];
|
|
if (!$row->store()) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// execute updateOrder for each parent group
|
|
$groupings = array_unique( $groupings );
|
|
foreach ($groupings as $group){
|
|
$row->reorder('catid = '.(int) $group);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* Delete
|
|
*/
|
|
function delete($id = 0, &$errorMsg = '') {
|
|
|
|
$app = Factory::getApplication();
|
|
|
|
$result = false;
|
|
if ((int)$id > 0) {
|
|
|
|
// FIRST - if there are subcategories - - - - -
|
|
$query = 'SELECT c.id, c.name, c.title, COUNT( s.parent_id ) AS numcat'
|
|
. ' FROM #__phocagallery_categories AS c'
|
|
. ' LEFT JOIN #__phocagallery_categories AS s ON s.parent_id = c.id'
|
|
. ' WHERE c.id ='.(int)$id
|
|
. ' GROUP BY c.id';
|
|
$this->_db->setQuery( $query );
|
|
|
|
if (!($rows2 = $this->_db->loadObjectList())) {
|
|
throw new Exception($this->_db->stderr('Load Data Problem') , 500);
|
|
return false;
|
|
}
|
|
|
|
// Add new CID without categories which have subcategories (we don't delete categories with subcat)
|
|
$err_cat = array();
|
|
$cid = array();
|
|
foreach ($rows2 as $row) {
|
|
if ($row->numcat == 0) {
|
|
$cid[] = (int) $row->id;
|
|
} else {
|
|
$err_cat[] = $row->title;
|
|
}
|
|
}
|
|
// - - - - - - - - - - - - - - -
|
|
|
|
// Images with new cid - - - - -
|
|
$err_img = array();
|
|
if (count( $cid )) {
|
|
\Joomla\Utilities\ArrayHelper::toInteger($cid);
|
|
$cids = implode( ',', $cid );
|
|
|
|
// Select id's from phocagallery tables. If the category has some images, don't delete it
|
|
$query = 'SELECT c.id, c.name, c.title, COUNT( s.catid ) AS numcat'
|
|
. ' FROM #__phocagallery_categories AS c'
|
|
. ' LEFT JOIN #__phocagallery AS s ON s.catid = c.id'
|
|
. ' WHERE c.id IN ( '.$cids.' )'
|
|
. ' GROUP BY c.id';
|
|
|
|
$this->_db->setQuery( $query );
|
|
|
|
if (!($rows = $this->_db->loadObjectList())) {
|
|
|
|
throw new Exception($this->_db->stderr('Load Data Problem') , 500);
|
|
return false;
|
|
}
|
|
|
|
|
|
$cid = array();
|
|
foreach ($rows as $row) {
|
|
if ($row->numcat == 0) {
|
|
$cid[] = (int) $row->id;
|
|
} else {
|
|
$err_img[] = $row->title;
|
|
}
|
|
}
|
|
|
|
if (count( $cid )) {
|
|
$cids = implode( ',', $cid );
|
|
$query = 'DELETE FROM #__phocagallery_categories'
|
|
. ' WHERE id IN ( '.$cids.' )';
|
|
$this->_db->setQuery( $query );
|
|
$this->_db->execute();
|
|
/*if (!$this->_db->query()) {
|
|
|
|
throw new Exception($this->_db->stderr('Delete Data Problem') , 500);
|
|
return false;
|
|
}*/
|
|
|
|
}
|
|
}
|
|
|
|
// There are some images in the category - don't delete it
|
|
$msg = '';
|
|
if (!empty( $err_cat ) || !empty( $err_img )) {
|
|
if (!empty( $err_cat )) {
|
|
$cids_cat = implode( ", ", $err_cat );
|
|
$msg .= Text::sprintf( 'COM_PHOCAGALLERY_ERROR_DELETE_CONTAIN_CAT', $cids_cat );
|
|
}
|
|
|
|
if (!empty( $err_img )) {
|
|
$cids_img = implode( ", ", $err_img );
|
|
$msg .= Text::sprintf( 'COM_PHOCAGALLERY_ERROR_DELETE_CONTAIN_IMG', $cids_img );
|
|
}
|
|
if ($msg != '') {
|
|
$errorMsg = $msg;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function deleteimage($id = 0, &$errorMsg = '') {
|
|
|
|
// Get all filenames we want to delete from database, we delete all thumbnails from server of this file
|
|
$queryd = 'SELECT filename as filename FROM #__phocagallery WHERE id ='.(int)$id;
|
|
|
|
$this->_db->setQuery($queryd);
|
|
$file_object = $this->_db->loadObjectList();
|
|
|
|
/*if(!$this->_db->query()) {
|
|
$this->setError('Database Error 2');
|
|
return false;
|
|
}*/
|
|
|
|
$query = 'DELETE FROM #__phocagallery'
|
|
. ' WHERE id ='.(int)$id;
|
|
|
|
$this->_db->setQuery( $query );
|
|
$this->_db->execute();
|
|
/*if(!$this->_db->query()) {
|
|
$this->setError('Database Error 2');
|
|
return false;
|
|
}*/
|
|
|
|
// Delete thumbnails - medium and large, small from server
|
|
// All id we want to delete - gel all filenames
|
|
|
|
foreach ($file_object as $key => $value) {
|
|
//The file can be stored in other category - don't delete it from server because other category use it
|
|
$querys = "SELECT id as id FROM #__phocagallery WHERE filename='".$value->filename."' ";
|
|
$this->_db->setQuery($queryd);
|
|
$same_file_object = $this->_db->loadObject();
|
|
/*if(!$this->_db->query()) {
|
|
$this->setError('Database Error 2');
|
|
return false;
|
|
}*/
|
|
|
|
//same file in other category doesn't exist - we can delete it
|
|
if (!$same_file_object){
|
|
//Delete all thumbnail files but not original
|
|
PhocaGalleryFileThumbnail::deleteFileThumbnail($value->filename, 1, 1, 1);
|
|
PhocaGalleryFile::deleteFile($value->filename);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
/*
|
|
* Pagination Subcategory
|
|
*/
|
|
function getCountItemSubCat($id = 0, $userId = 0, $catid = 0) {
|
|
|
|
$where = ' WHERE c.id ='.(int)$id;
|
|
if ((int)$catid > 0) {
|
|
// After remove we don't know id, so we take the catid
|
|
$where =' WHERE c.parent_id ='.(int)$catid;
|
|
}
|
|
|
|
$query = 'SELECT COUNT( c.id ) AS numcat'
|
|
. ' FROM #__phocagallery_categories AS c'
|
|
. ' LEFT JOIN #__phocagallery_categories AS s ON s.parent_id = c.id'
|
|
. $where
|
|
. ' AND c.owner_id ='.(int)$userId
|
|
. ' GROUP BY c.parent_id';
|
|
|
|
|
|
|
|
$this->_db->setQuery( $query );
|
|
/*if (!$this->_db->query()) {
|
|
$this->setError('Database Error 3');
|
|
return false;
|
|
}*/
|
|
return $this->_db->loadRow();
|
|
}
|
|
|
|
/*
|
|
* Pagination Image
|
|
*/
|
|
function getCountItemImage($id = 0, $userId = 0, $catid = 0) {
|
|
|
|
$where = ' WHERE a.id ='.(int)$id;
|
|
if ((int)$catid > 0) {
|
|
// After remove we don't know id, so we take the catid
|
|
$where =' WHERE a.catid ='.(int)$catid;
|
|
}
|
|
|
|
$query = 'SELECT COUNT( a.catid ) AS numimg'
|
|
. ' FROM #__phocagallery AS a'
|
|
. ' LEFT JOIN #__phocagallery_categories AS cc ON cc.id = a.catid'
|
|
. $where
|
|
. ' AND cc.owner_id ='.(int)$userId
|
|
. ' GROUP BY a.catid';
|
|
|
|
$this->_db->setQuery( $query );
|
|
/*if (!$this->_db->query()) {
|
|
$this->setError('Database Error 3');
|
|
return false;
|
|
}*/
|
|
return $this->_db->loadRow();
|
|
}
|
|
|
|
function getCategoryList($userId) {
|
|
$query = 'SELECT cc.title AS text, cc.id AS value, cc.parent_id as parentid'
|
|
. ' FROM #__phocagallery_categories AS cc'
|
|
// . ' WHERE cc.published = 1'
|
|
. ' WHERE cc.owner_id = '.(int)$userId
|
|
. ' AND cc.owner_id > 0'; // Ignore -1
|
|
$this->_db->setQuery( $query );
|
|
$categories = $this->_db->loadObjectList();
|
|
|
|
return $categories;
|
|
}
|
|
|
|
/*
|
|
* EDIT - Subcategory - get info about the subcategory
|
|
*/
|
|
|
|
function getCategory($id, $userId) {
|
|
$query = 'SELECT cc.id, cc.title, cc.description'
|
|
. ' FROM #__phocagallery_categories AS cc'
|
|
. ' WHERE cc.owner_id = '.(int)$userId
|
|
. ' AND cc.owner_id > 0' // Ignore -1
|
|
. ' AND cc.id = '.(int)$id;
|
|
$this->_db->setQuery( $query );
|
|
$category = $this->_db->loadObject();
|
|
if(isset($category->id)) {
|
|
return $category;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* EDIT - Image - get info about the image
|
|
*/
|
|
|
|
function getImage($id, $userId) {
|
|
$query = 'SELECT a.id, a.title, a.description'
|
|
. ' FROM #__phocagallery AS a'
|
|
. ' LEFT JOIN #__phocagallery_categories AS c ON c.id = a.catid'
|
|
. ' WHERE c.owner_id = '.(int)$userId
|
|
. ' AND c.owner_id > 0' // Ignore -1
|
|
. ' AND a.id = '.(int)$id;
|
|
$this->_db->setQuery( $query );
|
|
$image = $this->_db->loadObject();
|
|
if(isset($image->id)) {
|
|
return $image;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* Add Category, Add Subcategory, Edit Category, Edit Subcategory
|
|
*/
|
|
function store($data) {
|
|
|
|
if ($data['alias'] == '') {
|
|
$data['alias'] = $data['title'];
|
|
}
|
|
//$data['alias'] = PhocaGalleryText::getAliasName($data['alias']);
|
|
//$data['access'] = 1;
|
|
$row = $this->getTable('phocagalleryc', 'Table');
|
|
|
|
|
|
|
|
if(isset($data['id']) && $data['id'] > 0) {
|
|
if (!$row->load($data['id'])) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Bind the form fields to the table
|
|
if (!$row->bind($data)) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
|
|
if (!$row->date) {
|
|
$row->date = gmdate('Y-m-d H:i:s');
|
|
}
|
|
|
|
// if new item, order last in appropriate group
|
|
if (!$row->id) {
|
|
$where = 'parent_id = ' . (int) $row->parent_id ;
|
|
$row->ordering = $row->getNextOrder( $where );
|
|
}
|
|
|
|
// Make sure the table is valid
|
|
if (!$row->check()) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
|
|
// Store the table to the database
|
|
if (!$row->store()) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
|
|
|
|
return $row->id;
|
|
}
|
|
|
|
/*
|
|
* Add Image
|
|
*/
|
|
function storeimage($data, $return, $edit = false) {
|
|
|
|
if (!$edit) {
|
|
//If this file doesn't exists don't save it
|
|
if (!PhocaGalleryFile::existsFileOriginal($data['filename'])) {
|
|
$this->setError('File not exists');
|
|
return false;
|
|
}
|
|
|
|
$data['imgorigsize'] = PhocaGalleryFile::getFileSize($data['filename'], 0);
|
|
$data['format'] = PhocaGalleryFile::getFileFormat($data['filename']);
|
|
|
|
//If there is no title and no alias, use filename as title and alias
|
|
if (!isset($data['title']) || (isset($data['title']) && $data['title'] == '')) {
|
|
$data['title'] = PhocaGalleryFile::getTitleFromFile($data['filename']);
|
|
}
|
|
|
|
$data['alias'] = $data['title'];
|
|
|
|
if (!isset($data['alias']) || (isset($data['alias']) && $data['alias'] == '')) {
|
|
$data['alias'] = PhocaGalleryFile::getTitleFromFile($data['filename']);
|
|
}
|
|
|
|
//clean alias name (no bad characters)
|
|
//$data['alias'] = PhocaGalleryText::getAliasName($data['alias']);
|
|
|
|
if((!isset($data['longitude']) || (isset($data['longitude']) && $data['longitude'] == '')) ||
|
|
(!isset($data['latitude']) || (isset($data['latitude']) && $data['latitude'] ==''))) {
|
|
phocagalleryimport('phocagallery.geo.geo');
|
|
$coords = PhocaGalleryGeo::getGeoCoords($data['filename']);
|
|
|
|
if (!isset($data['longitude']) || (isset($data['longitude']) && $data['longitude'] =='')){
|
|
$data['longitude'] = $coords['longitude'];
|
|
}
|
|
|
|
if (!isset($data['latitude']) || (isset($data['latitude']) && $data['latitude'] =='')){
|
|
$data['latitude'] = $coords['latitude'];
|
|
}
|
|
|
|
if ((!isset($data['zoom']) || (isset($data['zoom']) && $data['zoom'] == '')) && $data['longitude'] != '' && $data['latitude'] != ''){
|
|
$data['zoom'] = PhocaGallerySettings::getAdvancedSettings('geozoom');
|
|
}
|
|
}
|
|
|
|
|
|
} else {
|
|
$data['alias'] = $data['title'];//PhocaGalleryText::getAliasName($data['title']);
|
|
}
|
|
|
|
$row = $this->getTable('phocagallery', 'Table');
|
|
|
|
|
|
if(isset($data['id']) && $data['id'] > 0) {
|
|
if (!$row->load($data['id'])) {
|
|
$this->setError($this->_db->getErrorMsg());
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Bind the form fields to the Phoca gallery table
|
|
if (!$row->bind($data)) {
|
|
$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(!$edit) {
|
|
//Create thumbnail small, medium, large
|
|
$returnFrontMessage = PhocaGalleryFileThumbnail::getOrCreateThumbnail($row->filename, $return, 1, 1, 1, 1);
|
|
|
|
if ($returnFrontMessage == 'Success') {
|
|
//$dispatcher = JDispatcher::getInstance();
|
|
PluginHelper::importPlugin('phocagallery');
|
|
$results = Factory::getApplication()->triggerEvent('onStoreNewImage', array($row->id, $data['title']) );
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
if (isset($row->id)) {
|
|
return $row->id;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* Get AVATAR
|
|
*/
|
|
function getUserAvatar($userId) {
|
|
$query = 'SELECT a.*'
|
|
. ' FROM #__phocagallery_user AS a'
|
|
. ' WHERE a.userid = '.(int)$userId;
|
|
$this->_db->setQuery( $query );
|
|
$avatar = $this->_db->loadObject();
|
|
if(isset($avatar->id)) {
|
|
return $avatar;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* Store Avatar
|
|
*/
|
|
function storeuser($data) {
|
|
|
|
$row = $this->getTable('phocagalleryuser', 'Table');
|
|
|
|
// Bind the form fields to the table
|
|
if (!$row->bind($data)) {
|
|
$this->setError($row->getError());
|
|
return false;
|
|
}
|
|
|
|
// if new item, order last in appropriate group
|
|
if (!$row->id) {
|
|
|
|
$row->ordering = $row->getNextOrder( );
|
|
}
|
|
|
|
|
|
// Make sure the table is valid
|
|
if (!$row->check()) {
|
|
$this->setError($row->getError());
|
|
return false;
|
|
}
|
|
|
|
// Store the table to the database
|
|
if (!$row->store()) {
|
|
$this->setError($row->getError());
|
|
return false;
|
|
}
|
|
return $row->id;
|
|
}
|
|
|
|
function removeAvatarFromDisc($avatar) {
|
|
jimport( 'joomla.filesystem.file' );
|
|
phocagalleryimport('phocagallery.path.path');
|
|
phocagalleryimport('phocagallery.file.file');
|
|
$path = PhocaGalleryPath::getPath();
|
|
$pathAvatarAbs[] = $path->avatar_abs . $avatar;
|
|
$pathAvatarAbs[] = $path->avatar_abs .'thumbs/phoca_thumb_l_'. $avatar;
|
|
$pathAvatarAbs[] = $path->avatar_abs .'thumbs/phoca_thumb_m_'. $avatar;
|
|
$pathAvatarAbs[] = $path->avatar_abs .'thumbs/phoca_thumb_s_'. $avatar;
|
|
|
|
foreach ($pathAvatarAbs as $value) {
|
|
if (File::exists($value)){
|
|
File::delete($value);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
?>
|