JoomGallery 3.3.4, vetted clean from live; no 3.3.4 tag upstream → deployed files. Excluded temp/ update-staging (data). Signed-off-by: LÁZÁR Imre <imre@illusion.hu> Assisted-by: claude-code@claude-opus-4-8
1554 lines
47 KiB
PHP
1554 lines
47 KiB
PHP
<?php
|
|
// $HeadURL: https://joomgallery.org/svn/joomgallery/JG-3/JG/trunk/components/com_joomgallery/interface.php $
|
|
// $Id: interface.php 4408 2014-07-12 08:24:56Z erftralle $
|
|
/****************************************************************************************\
|
|
** JoomGallery 3 **
|
|
** By: JoomGallery::ProjectTeam **
|
|
** Copyright (C) 2008 - 2013 JoomGallery::ProjectTeam **
|
|
** Based on: JoomGallery 1.0.0 by JoomGallery::ProjectTeam **
|
|
** Released under GNU GPL Public License **
|
|
** License: http://www.gnu.org/copyleft/gpl.html or have a look **
|
|
** at administrator/components/com_joomgallery/LICENSE.TXT **
|
|
\****************************************************************************************/
|
|
|
|
defined('_JEXEC') or die('Direct Access to this location is not allowed.');
|
|
|
|
/**
|
|
* The JoomGallery interface class provides an interface / API
|
|
* to other Joomla extensions to use functions of the Gallery,
|
|
* e.g. to display thumbnails in a Plugin or Module.
|
|
*
|
|
* You just need to include this file, create an interface object
|
|
* and set some options if you want to adjust the output, before
|
|
* using one of the functions.
|
|
* If you display any HTML output, you should once call getPageHeader()
|
|
* first
|
|
*
|
|
* @package JoomGallery
|
|
* @since 1.0.0
|
|
*/
|
|
class JoomInterface
|
|
{
|
|
/**
|
|
* Holds the interface configuration
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $_config = array();
|
|
|
|
/**
|
|
* JApplication object
|
|
*
|
|
* @var object
|
|
*/
|
|
protected $_mainframe;
|
|
|
|
/**
|
|
* JDatabase object
|
|
*
|
|
* @var object
|
|
*/
|
|
protected $_db;
|
|
|
|
/**
|
|
* JoomAmbit object
|
|
*
|
|
* @var object
|
|
*/
|
|
protected $_ambit;
|
|
|
|
/**
|
|
* Holds the JoomGallery configuration
|
|
*
|
|
* @var object
|
|
*/
|
|
protected $_jg_config = null;
|
|
|
|
/**
|
|
* Holds the stored interface configuration
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $_storedConfig = array();
|
|
|
|
/**
|
|
* JUser object
|
|
*
|
|
* @var object
|
|
*/
|
|
protected $_user;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @return void
|
|
* @since 1.5.5
|
|
*/
|
|
public function __construct()
|
|
{
|
|
// Load JoomGallery defines
|
|
require_once JPATH_ADMINISTRATOR.'/components/com_joomgallery/includes/defines.php';
|
|
// Register some classes
|
|
JLoader::register('JoomConfig', JPATH_ADMINISTRATOR.'/components/'._JOOM_OPTION.'/helpers/config.php');
|
|
JLoader::register('JoomHelper', JPATH_ROOT.'/components/'._JOOM_OPTION.'/helpers/helper.php');
|
|
JLoader::register('JoomAmbit', JPATH_ROOT.'/components/'._JOOM_OPTION.'/helpers/ambit.php');
|
|
// Add include path for JoomGallery tables
|
|
JTable::addIncludePath(JPATH_ADMINISTRATOR.'/components/'._JOOM_OPTION.'/tables');
|
|
// Add include path for JoomGallery HTML functions
|
|
JHtml::addIncludePath(JPATH_ADMINISTRATOR.'/components/'._JOOM_OPTION.'/helpers/html');
|
|
|
|
$this->_mainframe = JFactory::getApplication();
|
|
$this->_db = JFactory::getDBO();
|
|
$this->_ambit = JoomAmbit::getInstance();
|
|
$this->_jg_config = JoomConfig::getInstance();
|
|
$this->_user = JFactory::getUser();
|
|
|
|
// Include language for display
|
|
$language = JFactory::getLanguage();
|
|
$language->load(_JOOM_OPTION);
|
|
|
|
// Load JoomGallery plugins
|
|
JPluginHelper::importPlugin('joomgallery');
|
|
|
|
// Set some default values for options given in global JG config (may be overridden)
|
|
$this->_config['showhits'] = $this->_jg_config->get('jg_showhits');
|
|
$this->_config['showdownloads'] = $this->_jg_config->get('jg_showdownloads');
|
|
$this->_config['showpicasnew'] = $this->_jg_config->get('jg_showpicasnew');
|
|
$this->_config['showtitle'] = $this->_jg_config->get('jg_showtitle');
|
|
$this->_config['showauthor'] = $this->_jg_config->get('jg_showauthor');
|
|
$this->_config['showrate'] = $this->_jg_config->get('jg_showcatrate');
|
|
$this->_config['shownumcomments'] = $this->_jg_config->get('jg_showcatcom');
|
|
$this->_config['showdescription'] = $this->_jg_config->get('jg_showcatdescription');
|
|
|
|
$this->_config['openimage'] = $this->_jg_config->get('jg_detailpic_open');
|
|
|
|
// Further defaults (not given by JG config)
|
|
// - Category path links to category
|
|
$this->_config['showcatlink'] = 1;
|
|
// - Comma-separated list of categories to filter from (empty: all categories, default)
|
|
$this->_config['categoryfilter'] = '';
|
|
// - Display last comment (see Module JoomImages) not implemented yet!
|
|
$this->_config['showlastcomment'] = 0;
|
|
// - Make use of hidden images and images in hidden categories
|
|
$this->_config['showhidden'] = 0;
|
|
|
|
// Store the config for being able to reset it later on (if useful)
|
|
$this->storeConfig();
|
|
}
|
|
|
|
/**
|
|
* Passes a whole array of config items, existing (default)
|
|
* values are overwritten if a new item with the same key
|
|
* is passed.
|
|
*
|
|
* @param array $config An array of settings
|
|
* @return void
|
|
* @since 1.0.0
|
|
*/
|
|
public function setConfig($config)
|
|
{
|
|
foreach($config as $key => $value)
|
|
{
|
|
$config[$key] = $this->_db->escape($value);
|
|
}
|
|
// Merge new array into existing one, overwriting if needed:
|
|
$this->_config = array_merge($this->_config, $config);
|
|
}
|
|
|
|
/**
|
|
* Sets a single option in the interface settings
|
|
* If the key already exists, the setting will be overridden.
|
|
*
|
|
* @param string $key The key of the new setting
|
|
* @param string $value The value of the new setting
|
|
* @return void
|
|
* @since 1.0.0
|
|
*/
|
|
public function addConfig($key, $value = '')
|
|
{
|
|
$this->_config[$key] = $this->_db->escape($value);
|
|
}
|
|
|
|
/**
|
|
* Requests string (e.g. modification of a SQL query or true/false)
|
|
* associated with config option $key.
|
|
* If the according value has not been set with addConfig
|
|
* before, a default is returned. Config options are not used
|
|
* directly for security.
|
|
*
|
|
* @param string $key The key of the requested setting
|
|
* @return string The requested setting, boolean false, if the key was not found
|
|
* @since 1.0.0
|
|
*/
|
|
public function getConfig($key)
|
|
{
|
|
if(array_key_exists($key, $this->_config))
|
|
{
|
|
// Access filtered to special keys (DB query strings)
|
|
if($key == 'hidebackend')
|
|
{
|
|
if( $this->_config['hidebackend'] == 'true'
|
|
|| $this->_config['hidebackend'] === true
|
|
|| $this->_config['hidebackend'] == 1
|
|
)
|
|
{
|
|
return 'jg.owner != 0';
|
|
}
|
|
else
|
|
{
|
|
return '';
|
|
}
|
|
}
|
|
elseif($key == 'categoryfilter')
|
|
{
|
|
$catids = trim($this->_db->escape($this->_config['categoryfilter']));
|
|
if($catids != '')
|
|
{
|
|
return 'jg.catid IN ('.$catids.')';
|
|
}
|
|
else
|
|
{
|
|
return '';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Regular keys
|
|
return $this->_config[$key];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Stores the config in order to be able to reset it later on
|
|
*
|
|
* @return void
|
|
* @since 1.5.0
|
|
*/
|
|
public function storeConfig()
|
|
{
|
|
$this->_storedConfig = $this->_config;
|
|
}
|
|
|
|
/**
|
|
* Resets the config in order to get the settings as they were
|
|
* at the point of time when 'storeConfig' was called lastly.
|
|
*
|
|
* @return void
|
|
* @since 1.5.0
|
|
*/
|
|
public function resetConfig()
|
|
{
|
|
$this->_config = $this->_storedConfig;
|
|
}
|
|
|
|
/**
|
|
* Returns config value associated with config option $key
|
|
* of the global configuration of JoomGallery.
|
|
*
|
|
* @param string $key The key of the requested setting
|
|
* @return string The requested setting, boolean false, if the key was not found
|
|
* @since 1.0.0
|
|
*/
|
|
public function getJConfig($key)
|
|
{
|
|
return $this->_jg_config->get($key);
|
|
}
|
|
|
|
/**
|
|
* Returns the JoomGallery ambit object
|
|
*
|
|
* @return object JoomAmbit object
|
|
* @since 1.5.5
|
|
*/
|
|
public function getAmbit()
|
|
{
|
|
return $this->_ambit;
|
|
}
|
|
|
|
/**
|
|
* Returns version string of installed JoomGallery
|
|
*
|
|
* @return string The version string
|
|
* @since 1.5.0
|
|
*/
|
|
public function getGalleryVersion()
|
|
{
|
|
return '3.3';
|
|
}
|
|
|
|
/**
|
|
* Returns an Itemid associated with the gallery.
|
|
*
|
|
* At first check out, if an Itemid was set via the interface,
|
|
* if not, take the Itemid provided by JoomAmbit.
|
|
*
|
|
* @param boolean $string True, if a string like '&Itemid=X' should be returned.
|
|
* @return int/string The Itemid for use in URLs ('&Itemid=X' or as integer)
|
|
* @since 1.0.0
|
|
*/
|
|
public function getJoomId($string = true)
|
|
{
|
|
if(isset($this->_config['Itemid']) && $this->_config['Itemid'])
|
|
{
|
|
$Itemid = intval($this->_config['Itemid']);
|
|
|
|
return ($string && $Itemid) ? '&Itemid='.$Itemid : $Itemid;
|
|
}
|
|
else
|
|
{
|
|
return $this->_ambit->getItemid($string);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Corrects a link with the right 'option' and 'Itemid' vars of JoomGallery
|
|
*
|
|
* @param string $url The link to complete
|
|
* @param boolean $xhtml True, if all '&' appearances shall be replaced with '&', defaults to true
|
|
* @return string The corrected link
|
|
* @since 1.5.5
|
|
*/
|
|
public function route($url, $xhtml = true)
|
|
{
|
|
// Get the router
|
|
$router = $this->_mainframe->getRouter();
|
|
// Get current values of vars 'option' and 'Itemid'
|
|
$option = $router->getVar('option');
|
|
$Itemid = $router->getVar('Itemid');
|
|
// Set vars 'option' and 'Itemid'
|
|
$router->setVar('option', _JOOM_OPTION);
|
|
$router->setVar('Itemid', $this->getJoomId(false));
|
|
|
|
$url = JRoute::_($url, $xhtml);
|
|
$routervars = $router->getVars();
|
|
if(is_null($option))
|
|
{
|
|
// Delete the var from array
|
|
unset($routervars['option']);
|
|
}
|
|
else
|
|
{
|
|
$routervars['option'] = $option;
|
|
}
|
|
if(is_null($Itemid))
|
|
{
|
|
unset($routervars['Itemid']);
|
|
}
|
|
else
|
|
{
|
|
$routervars['Itemid'] = $Itemid;
|
|
}
|
|
$router->setVars($routervars, false);
|
|
|
|
return $url;
|
|
}
|
|
|
|
/**
|
|
* Simple forwarding of JHTML::_('joomgallery.openimage'):
|
|
* Returns the link to the thumb, detail or original image.
|
|
*
|
|
* @param int/object $img The image ID or the image object to use
|
|
* @param string $type The image type ('thumb', 'img', 'orig')
|
|
* @return string Link to the image
|
|
* @since 1.5.5
|
|
*/
|
|
public function getImageLink($img, $type = false)
|
|
{
|
|
// Get the router
|
|
$router = $this->_mainframe->getRouter();
|
|
// Get current values of vars 'option' and 'Itemid'
|
|
$option = $router->getVar('option');
|
|
$Itemid = $router->getVar('Itemid');
|
|
|
|
// Set vars 'option' and 'Itemid'
|
|
$router->setVar('option', _JOOM_OPTION);
|
|
$router->setVar('Itemid', $this->getJoomId(false));
|
|
|
|
$link = JHTML::_('joomgallery.openimage', $this->_config['openimage'], $img, $type, $this->getConfig('group'));
|
|
if($title = JHtml::_('joomgallery.getTitleforATag', $img, false))
|
|
{
|
|
$link .= '" title="'.$title;
|
|
}
|
|
|
|
// Reset vars 'option' and 'Itemid'
|
|
// if the preserved values are null delete the var formerly setted
|
|
// from array of vars
|
|
$routervars = $router->getVars();
|
|
if(is_null($option))
|
|
{
|
|
// Delete the var from array
|
|
unset($routervars['option']);
|
|
}
|
|
else
|
|
{
|
|
$routervars['option'] = $option;
|
|
}
|
|
if(is_null($Itemid))
|
|
{
|
|
unset($routervars['Itemid']);
|
|
}
|
|
else
|
|
{
|
|
$routervars['Itemid'] = $Itemid;
|
|
}
|
|
$router->setVars($routervars, false);
|
|
|
|
return $link;
|
|
}
|
|
|
|
/**
|
|
* Adds all elements needed to display JoomGallery images
|
|
* properly like CSS. The necessary Javascript is included in
|
|
* the JoomGallery JHTML function openImage().
|
|
*
|
|
* @return void
|
|
* @since 1.5.5
|
|
*/
|
|
public function getPageHeader()
|
|
{
|
|
$document = JFactory::getDocument();
|
|
|
|
// Add the CSS file generated from backend settings
|
|
$document->addStyleSheet($this->_ambit->getStyleSheet('joom_settings.css'));
|
|
|
|
// Add the main CSS file
|
|
$document->addStyleSheet($this->_ambit->getStyleSheet('joomgallery.css'));
|
|
|
|
// Add the RTL CSS file if an RTL language is used
|
|
if(JFactory::getLanguage()->isRTL())
|
|
{
|
|
$document->addStyleSheet($this->_ambit->getStyleSheet('joomgallery_rtl.css'));
|
|
}
|
|
|
|
// Add individual CSS file if it exists
|
|
if(file_exists(JPATH_ROOT.'/media/joomgallery/css/joom_local.css'))
|
|
{
|
|
$document->addStyleSheet($this->_ambit->getStyleSheet('joom_local.css'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Creates HTML for linked thumbnail of one image,
|
|
* with display options and style just like in JG
|
|
*
|
|
* @param object $obj DB-row coming from this interface, e.g. getPicsByCategory
|
|
* @param boolean $linked If true, we will link the thumbnail, defaults to true
|
|
* @param string $class Optional, addional css class name which is assigned to the img tag
|
|
* @param string $div Optional css class name which is assigned to a div around the img tag
|
|
* @param string $extra Optional, adddional HTML code, which is placed in the img tag
|
|
* @param string $type Optional, image type the link shall open (thumb, img, orig)
|
|
* @return string HTML displaying thumbnail (linked, like configured in JG if $linked = true)
|
|
* @since 1.0.0
|
|
*/
|
|
public function displayThumb($obj, $linked = true, $class = null, $div = null, $extra = null, $type = false)
|
|
{
|
|
$output = '';
|
|
if($obj->id != '')
|
|
{
|
|
// Get the router
|
|
$router = $this->_mainframe->getRouter();
|
|
// Get current values of vars 'option' and 'Itemid'
|
|
$option = $router->getVar('option');
|
|
$Itemid = $router->getVar('Itemid');
|
|
// Set vars 'option' and 'Itemid'
|
|
$router->setVar('option', _JOOM_OPTION);
|
|
$router->setVar('Itemid', $this->getJoomId(false));
|
|
|
|
if($div)
|
|
{
|
|
$output .= '<div class="'.$div.'">';
|
|
}
|
|
|
|
if($linked)
|
|
{
|
|
// Check for link to category
|
|
if(isset($this->_config['catlink']) && $this->_config['catlink'] == 1)
|
|
{
|
|
$link = JRoute::_('index.php?&view=category&catid='.$obj->catid);
|
|
}
|
|
else
|
|
{
|
|
$link = JHTML::_('joomgallery.openimage', $this->_config['openimage'], $obj, $type, $this->getConfig('group'));
|
|
if($title = JHtml::_('joomgallery.getTitleforATag', $obj, false))
|
|
{
|
|
$link .= '" title="'.$title;
|
|
}
|
|
}
|
|
|
|
$output .= ' <a href="'.$link.'" class="jg_catelem_photo">';
|
|
}
|
|
if($class)
|
|
{
|
|
$class = ' '.$class;
|
|
}
|
|
if($extra)
|
|
{
|
|
$extra = ' '.$extra;
|
|
}
|
|
$output .= ' <img src="'.$this->_ambit->getImg('thumb_url', $obj).'" class="jg_photo'.$class.'" alt="'.$obj->imgtitle.'"'.$extra.' />';
|
|
if($linked)
|
|
{
|
|
$output .= ' </a>';
|
|
}
|
|
if($div)
|
|
{
|
|
$output .= '</div>';
|
|
}
|
|
$routervars = $router->getVars();
|
|
if(is_null($option))
|
|
{
|
|
// Delete the var from array
|
|
unset($routervars['option']);
|
|
}
|
|
else
|
|
{
|
|
$routervars['option'] = $option;
|
|
}
|
|
if(is_null($Itemid))
|
|
{
|
|
unset($routervars['Itemid']);
|
|
}
|
|
else
|
|
{
|
|
$routervars['Itemid'] = $Itemid;
|
|
}
|
|
$router->setVars($routervars, false);
|
|
}
|
|
else
|
|
{
|
|
$output .= " \n";
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Creates HTML for linked detail image of one picture-$obj,
|
|
* with display options & style just like in JG
|
|
*
|
|
* @param object $obj DB-row coming from this interface, e.g. getPicsByCategory
|
|
* @param boolean $linked If true, we will link the thumbnail, defaults to true
|
|
* @param string $class Optional, addional css class name which is assigned to the img tag
|
|
* @param string $div Optional css class name which is assigned to a div around the img tag
|
|
* @param string $extra Optional, addional HTML code, which is placed in the img tag
|
|
* @param string $type Optional, image type the link shall open (thumb, img, orig)
|
|
* @return string HTML displaying detail image (linked, like configured in JG if $linked = true)
|
|
* @since 1.0.0
|
|
*/
|
|
public function displayDetail($obj, $linked = true, $class = null, $div = null, $extra = null, $type = false)
|
|
{
|
|
$output = '';
|
|
if($obj->id != '')
|
|
{
|
|
// Get the router
|
|
$router = $this->_mainframe->getRouter();
|
|
// Get current values of vars 'option' and 'Itemid'
|
|
$option = $router->getVar('option');
|
|
$Itemid = $router->getVar('Itemid');
|
|
// Set vars 'option' and 'Itemid'
|
|
$router->setVar('option', _JOOM_OPTION);
|
|
$router->setVar('Itemid', $this->getJoomId(false));
|
|
|
|
if($div)
|
|
{
|
|
$output .= '<div class="'.$div.'">';
|
|
}
|
|
if($linked)
|
|
{
|
|
// Check for link to category
|
|
if(isset($this->_config['catlink']) && $this->_config['catlink'] == 1)
|
|
{
|
|
$link = JRoute::_('index.php?&view=category&catid='.$obj->catid);
|
|
}
|
|
else
|
|
{
|
|
$link = JHTML::_('joomgallery.openimage', $this->_config['openimage'], $obj, $type, $this->getConfig('group'));
|
|
if($title = JHtml::_('joomgallery.getTitleforATag', $obj, false))
|
|
{
|
|
$link .= '" title="'.$title;
|
|
}
|
|
}
|
|
|
|
$output .= ' <a href="'.$link.'" class="jg_catelem_photo">';
|
|
}
|
|
if($class)
|
|
{
|
|
$class = ' '.$class;
|
|
}
|
|
if($extra)
|
|
{
|
|
$extra = ' '.$extra;
|
|
}
|
|
$output .= ' <img src="'.$this->_ambit->getImg('img_url', $obj).'" class="jg_photo'.$class.'" alt="'.$obj->imgtitle.'"'.$extra.' />';
|
|
if($linked)
|
|
{
|
|
$output .= ' </a>';
|
|
}
|
|
if($div)
|
|
{
|
|
$output .= '</div>';
|
|
}
|
|
$routervars = $router->getVars();
|
|
if(is_null($option))
|
|
{
|
|
// Delete the var from array
|
|
unset($routervars['option']);
|
|
}
|
|
else
|
|
{
|
|
$routervars['option'] = $option;
|
|
}
|
|
if(is_null($Itemid))
|
|
{
|
|
unset($routervars['Itemid']);
|
|
}
|
|
else
|
|
{
|
|
$routervars['Itemid'] = $Itemid;
|
|
}
|
|
$router->setVars($routervars, false);
|
|
}
|
|
else
|
|
{
|
|
$output .= " \n";
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Creates HTML for description of one image,
|
|
* with display options and style just like in JG.
|
|
* Adjustments are possible via the interface options.
|
|
*
|
|
* @param object $obj DB-row coming from this interface, e.g. getPicsByCategory
|
|
* @return string HTML of thumb description (like configured in JG or in the interface)
|
|
* @since 1.0.0
|
|
*/
|
|
public function displayDesc($obj)
|
|
{
|
|
if($this->getConfig('disable_infos'))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
// Get the router
|
|
$router = $this->_mainframe->getRouter();
|
|
// Get current values of vars 'option' and 'Itemid'
|
|
$option = $router->getVar('option');
|
|
$Itemid = $router->getVar('Itemid');
|
|
// Set vars 'option' and 'Itemid'
|
|
$router->setVar('option', _JOOM_OPTION);
|
|
$router->setVar('Itemid', $this->getJoomId(false));
|
|
|
|
$output = "<ul>\n";
|
|
|
|
if($this->getConfig('showtitle') || $this->getConfig('showpicasnew'))
|
|
{
|
|
$output .= " <li>";
|
|
if($this->getConfig('showtitle'))
|
|
{
|
|
$output .= '<b>'.$obj->imgtitle.'</b>';
|
|
}
|
|
if($this->getConfig('showpicasnew'))
|
|
{
|
|
$output.= JoomHelper::checkNew($obj->imgdate, $this->_jg_config->get('jg_daysnew'));;
|
|
}
|
|
$output .= " </li>\n";
|
|
}
|
|
|
|
if($this->getConfig('showauthor'))
|
|
{
|
|
if($obj->imgauthor)
|
|
{
|
|
$authorowner = $obj->imgauthor;
|
|
}
|
|
else
|
|
{
|
|
$authorowner = JHTML::_('joomgallery.displayname', $obj->owner);
|
|
}
|
|
|
|
$output .= " <li>".JText::sprintf('COM_JOOMGALLERY_COMMON_AUTHOR_VAR', $authorowner);
|
|
$output .= "</li>\n";
|
|
}
|
|
|
|
if($this->getConfig('showcategory'))
|
|
{
|
|
$catpath =
|
|
$output .= " <li>";
|
|
|
|
if($this->getConfig('showcatlink'))
|
|
{
|
|
$catlink = '<a href="'.JRoute::_('index.php?view=category&catid='.$obj->catid)
|
|
.'">'.$obj->cattitle
|
|
.'</a>';
|
|
$output .= JText::sprintf('COM_JOOMGALLERY_COMMON_CATEGORY_VAR',$catlink);
|
|
}
|
|
else
|
|
{
|
|
$output .= JText::sprintf('COM_JOOMGALLERY_COMMON_CATEGORY_VAR',$obj->cattitle);
|
|
}
|
|
$output .= " </li>";
|
|
}
|
|
|
|
if($this->getConfig('showhits'))
|
|
{
|
|
$output .= " <li>".JText::sprintf('COM_JOOMGALLERY_COMMON_HITS_VAR', $obj->hits)."</li>";
|
|
}
|
|
if($this->getConfig('showdownloads'))
|
|
{
|
|
$output .= " <li>".JText::sprintf('COM_JOOMGALLERY_COMMON_DOWNLOADS_VAR', $obj->downloads)."</li>";
|
|
}
|
|
if($this->getConfig('showrate'))
|
|
{
|
|
$output .= ' <li>'.JHTML::_('joomgallery.rating', $obj, false, 'jg_starrating_cat').'</li>';
|
|
}
|
|
if ($this->getConfig('showimgdate'))
|
|
{
|
|
$output .= '<li>'.JText::sprintf('COM_JOOMGALLERY_COMMON_UPLOAD_DATE', '<br />'.JHTML::_('date', $obj->imgdate, JText::_($this->getConfig('dateformat')))).'</li>';
|
|
}
|
|
if($this->getConfig('shownumcomments'))
|
|
{
|
|
$output .=' <li>'. JText::sprintf('COM_JOOMGALLERY_COMMON_COMMENTS_VAR', $obj->cmtcount).'</li>';
|
|
}
|
|
if($this->getConfig('showdescription') && $obj->imgtext)
|
|
{
|
|
$output .= ' <li>'. JText::sprintf('COM_JOOMGALLERY_COMMON_DESCRIPTION_VAR', $obj->imgtext).'</li>';
|
|
}
|
|
if($this->getConfig('showcmtdate') == 1 && !is_null($obj->cmtdate))
|
|
{
|
|
$output .= '<li>'.JText::sprintf('COM_JOOMGALLERY_COMMON_COMMENTS_LASTDATE', JHTML::_('date', $obj->cmtdate, JText::_($this->getConfig('dateformat')))).'</li>';
|
|
}
|
|
if($this->getConfig('showcmttext') == 1 && !is_null($obj->cmtdate))
|
|
{
|
|
// Comment username
|
|
if($obj->cmtuserid != 0)
|
|
{
|
|
$cmtname = JHTML::_('joomgallery.displayname', $obj->cmtuserid);
|
|
}
|
|
else
|
|
{
|
|
$cmtname = $obj->cmtname;
|
|
}
|
|
|
|
// Comment text
|
|
$output .= '<li>'.JText::sprintf('COM_JOOMGALLERY_COMMON_COMMENT_WITH_AUTHOR', $cmtname, $obj->cmttext).'</li>';
|
|
}
|
|
|
|
$results = $this->_mainframe->triggerEvent('onJoomAfterDisplayThumb', array($obj->id));
|
|
$output .= trim(implode('', $results));
|
|
|
|
$output .= '</ul>';
|
|
|
|
$routervars = $router->getVars();
|
|
if(is_null($option))
|
|
{
|
|
// Delete the var from array
|
|
unset($routervars['option']);
|
|
}
|
|
else
|
|
{
|
|
$routervars['option'] = $option;
|
|
}
|
|
if(is_null($Itemid))
|
|
{
|
|
unset($routervars['Itemid']);
|
|
}
|
|
else
|
|
{
|
|
$routervars['Itemid'] = $Itemid;
|
|
}
|
|
$router->setVars($routervars, false);
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Creates HTML for the given thumbnails for displaying them like in category view
|
|
*
|
|
* @param array $rows An array of database objects for the thumbnails
|
|
* @return string The HTML output
|
|
* @since 1.5.5
|
|
*/
|
|
public function displayThumbs($rows)
|
|
{
|
|
if(empty($rows))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
$numcols = $this->getConfig('columns');
|
|
if(!$numcols)
|
|
{
|
|
$numcols = $this->getConfig('default_columns');
|
|
if(!$numcols)
|
|
{
|
|
$numcols = 2;
|
|
}
|
|
}
|
|
|
|
$elem_width = floor(99 / $numcols);
|
|
|
|
$return = '';
|
|
//$return .= "\n".'<div class="gallerytab">'."\n";
|
|
$return .= '<div class="jg_row jg_row1">';
|
|
$rowcount = 0;
|
|
$itemcount = 0;
|
|
|
|
foreach($rows as $row)
|
|
{
|
|
if(($itemcount % $numcols == 0) && ($itemcount != 0))
|
|
{
|
|
$return .='</div><div class="jg_row jg_row'.($rowcount % 2 + 1).'">'."\n";
|
|
$rowcount++;
|
|
}
|
|
|
|
$return .= '<div class="jg_element_cat" style="width:'.$elem_width.'%">'."\n";
|
|
$type = 'img';
|
|
if( (!is_numeric($this->getConfig('openimage')) || $this->getConfig('openimage') > 0)
|
|
&& ($this->getJConfig('jg_lightboxbigpic') || $this->getConfig('type') == 'img' || $this->getConfig('type') == 'orig')
|
|
&& file_exists($this->_ambit->getImg('orig_path', $row))
|
|
)
|
|
{
|
|
$type = 'orig';
|
|
}
|
|
if($this->getConfig('type') == 'img' || $this->getConfig('type') == 'orig')
|
|
{
|
|
$return .= ' '.$this->displayDetail($row, true, null, 'jg_imgalign_catimgs', null, $type);
|
|
}
|
|
else
|
|
{
|
|
$return .= ' '.$this->displayThumb($row, true, null, 'jg_imgalign_catimgs', null, $type);
|
|
}
|
|
|
|
if(!$this->getConfig('disable_infos'))
|
|
{
|
|
$return .= ' <div class ="jg_catelem_txt">'."\n";
|
|
$return .= ' '.$this->displayDesc($row);
|
|
$return .= ' </div>'."\n";
|
|
}
|
|
|
|
$return .= '</div>'."\n";
|
|
|
|
$itemcount++;
|
|
}
|
|
|
|
$return.= '</div>'."\n";//.'</div>';
|
|
|
|
return $return;
|
|
}
|
|
|
|
/**
|
|
* Adds the WHERE conditions for filtering out disallowed images to a query
|
|
*
|
|
* @param $query object The query to extend
|
|
* @param $access array Access levels to filter for, null to use the ones of the current user
|
|
* @return void
|
|
* @since 2.0
|
|
*/
|
|
public function addImageWhere($query, $access = null)
|
|
{
|
|
$query->where('jgc.published = 1')
|
|
->where('jg.approved = 1')
|
|
->where('jg.published = 1');
|
|
|
|
if(!$access)
|
|
{
|
|
$catids = array_keys($this->_ambit->getCategoryStructure());
|
|
$query->where('jg.catid IN ('.implode(',', $catids).')');
|
|
$query->where('jg.access IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')');
|
|
$query->where('jgc.access IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')');
|
|
}
|
|
else
|
|
{
|
|
$query->where('jg.access IN ('.implode(',', $access).')');
|
|
$query->where('jgc.access IN ('.implode(',', $access).')');
|
|
}
|
|
|
|
if(!$this->getConfig('showhidden'))
|
|
{
|
|
$query->where('jgc.hidden = 0')
|
|
->where('jgc.in_hidden = 0')
|
|
->where('jg.hidden = 0');
|
|
}
|
|
|
|
if($categoryfilter = $this->getConfig('categoryfilter'))
|
|
{
|
|
$query->where($categoryfilter);
|
|
}
|
|
|
|
if($hidebackend = $this->getConfig('hidebackend'))
|
|
{
|
|
$query->where($hidebackend);
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
/**
|
|
* Returns the number of images of a user
|
|
*
|
|
* @param int $userId The user ID of the user.
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @return int Number of images the user has uploaded
|
|
* @since 1.0.0
|
|
*/
|
|
public function getNumPicsOfUser($userId, $access = null)
|
|
{
|
|
$userId = intval($userId);
|
|
|
|
$query = $this->_db->getQuery(true)
|
|
->select('COUNT(jg.id)')
|
|
->from(_JOOM_TABLE_IMAGES.' AS jg')
|
|
->leftJoin(_JOOM_TABLE_CATEGORIES.' AS jgc ON jgc.cid = jg.catid')
|
|
->where('jg.owner = '.$userId);
|
|
$this->addImageWhere($query, $access);
|
|
|
|
$this->_db->setQuery($query);
|
|
|
|
return $this->_db->loadResult();
|
|
}
|
|
|
|
/**
|
|
* Returns the number of pictures a user is tagged in
|
|
*
|
|
* @param int $userId The ID of the user.
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @return int Number of images the user is tagged in
|
|
* @since 1.0.0
|
|
*/
|
|
public function getNumPicsUserTagged($userId, $access = null)
|
|
{
|
|
$userId = intval($userId);
|
|
|
|
$query = $this->_db->getQuery(true)
|
|
->select('COUNT(jgn.nid)')
|
|
->from(_JOOM_TABLE_NAMESHIELDS.' AS jgn')
|
|
->leftJoin(_JOOM_TABLE_IMAGES.' AS jg ON jgn.npicid = jg.id')
|
|
->leftJoin(_JOOM_TABLE_CATEGORIES.' AS jgc ON jgc.cid = jg.catid')
|
|
->where('jgn.nuserid = '.$userId);
|
|
$this->addImageWhere($query, $access);
|
|
|
|
$this->_db->setQuery($query);
|
|
|
|
return $this->_db->loadResult();
|
|
}
|
|
|
|
/**
|
|
* Returns the number of images a user has favoured
|
|
*
|
|
* @param int $userId The ID of the user.
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @return int Number of images the user has favoured
|
|
* @since 1.0.0
|
|
*/
|
|
public function getNumPicsUserFavoured($userId, $access = null)
|
|
{
|
|
$userId = intval($userId);
|
|
|
|
$query = $this->_db->getQuery(true)
|
|
->select('piclist')
|
|
->from(_JOOM_TABLE_USERS)
|
|
->where('uuserid = '.$userId);
|
|
|
|
$this->_db->setQuery($query);
|
|
$piclist = $this->_db->loadResult();
|
|
|
|
if(!$piclist)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
$query = $this->_db->getQuery(true)
|
|
->select('COUNT(jg.id)')
|
|
->from(_JOOM_TABLE_IMAGES.' AS jg')
|
|
->leftJoin(_JOOM_TABLE_CATEGORIES.' AS jgc ON jgc.cid = jg.catid')
|
|
->where('jg.id IN ('.$piclist.')');
|
|
$this->addImageWhere($query, $access);
|
|
|
|
$this->_db->setQuery($query);
|
|
|
|
return $this->_db->loadResult();
|
|
}
|
|
|
|
/**
|
|
* Returns the number of images a user has commented on
|
|
*
|
|
* @param int $userId The ID of the user.
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @return int Number of images the user has commented on
|
|
* @since 1.0.0
|
|
*/
|
|
public function getNumCommentsUser($userId, $access = null)
|
|
{
|
|
return $this->getNumComments($access, $userId);
|
|
}
|
|
|
|
/**
|
|
* Returns the total number of comments (published) in the gallery
|
|
*
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @return int The number of comments published in the gallery
|
|
* @since 1.0.0
|
|
*/
|
|
public function getNumComments($access = null, $userId = 0)
|
|
{
|
|
$userId = intval($userId);
|
|
|
|
$query = $this->_db->getQuery(true)
|
|
->select('COUNT(cmtid)')
|
|
->from(_JOOM_TABLE_COMMENTS.' AS jgco')
|
|
->leftJoin(_JOOM_TABLE_IMAGES.' AS jg ON jgco.cmtpic = jg.id')
|
|
->leftJoin(_JOOM_TABLE_CATEGORIES.' AS jgc ON jgc.cid = jg.catid')
|
|
->where('jgco.published = 1')
|
|
->where('jgco.approved = 1');
|
|
|
|
if($userId)
|
|
{
|
|
$query->where('jgco.userid = '.$userId);
|
|
}
|
|
|
|
$this->addImageWhere($query, $access);
|
|
|
|
$this->_db->setQuery($query);
|
|
|
|
return $this->_db->loadResult();
|
|
}
|
|
|
|
/**
|
|
* Returns a query for counting all comments of a specific image.
|
|
* This query has to be used as a sub-query in which context jg.id is defined
|
|
*
|
|
* @return object A JDatabaseQuery object to be used as a sub-query
|
|
* @since 2.0
|
|
*/
|
|
public function getNumCommentsSubQuery()
|
|
{
|
|
return $this->_db->getQuery(true)
|
|
->select('COUNT(cmtid)')
|
|
->from(_JOOM_TABLE_COMMENTS.' AS jgcosub')
|
|
->where('cmtpic = jg.id')
|
|
->where('jgcosub.published = 1')
|
|
->where('jgcosub.approved = 1');
|
|
}
|
|
|
|
/**
|
|
* Returns images of a user
|
|
*
|
|
* @param int $userId Joomla ID of user
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @param string $sorting String for DB sorting
|
|
* @param int $numPics Limit number of pictures, leave away to return all
|
|
* @param int $limitStart Where to start returning $numPics images
|
|
* @return array An array of image objects from the database
|
|
* @since 1.0.0
|
|
*/
|
|
public function getPicsOfUser($userId, $access = null, $sorting = null, $numPics = null, $limitStart = 0)
|
|
{
|
|
// Validation
|
|
$userId = intval($userId);
|
|
|
|
$query = $this->getImagesQuery($access)
|
|
->where('jg.owner = '.$userId);
|
|
|
|
if($sorting)
|
|
{
|
|
$query->order($this->_db->escape($sorting));
|
|
}
|
|
|
|
$this->_db->setQuery($query, $limitStart, $numPics);
|
|
|
|
return $this->_db->loadObjectList();
|
|
}
|
|
|
|
/**
|
|
* Returns images a user is tagged in
|
|
*
|
|
* @param int $userId Joomla ID of user
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @param string $sorting String for DB sorting
|
|
* @param int $numPics Limit number of pictures, leave away to return all
|
|
* @param int $limitStart Where to start returning $numPics pictures
|
|
* @return array An array of image objects from the database
|
|
* @since 1.0.0
|
|
*/
|
|
public function getPicsUserTagged($userId, $access = null, $sorting = null, $numPics = null, $limitStart = 0)
|
|
{
|
|
// Validation
|
|
$userId = intval($userId);
|
|
|
|
$query = $this->_db->getQuery(true);
|
|
|
|
if($this->getConfig('shownumcomments'))
|
|
{
|
|
$query->select('('.$this->getNumCommentsSubQuery().') AS cmtcount');
|
|
}
|
|
|
|
$query->select('jg.id, jg.catid, jg.imgthumbname, jg.imgfilename, jg.owner, jg.imgauthor,
|
|
jg.imgdate, jg.imgtitle, jg.imgtext, jg.hits, jg.downloads, jg.imgvotes,
|
|
'.JoomHelper::getSQLRatingClause('jg').' AS rating,
|
|
jgc.name AS cattitle, jgc.catpath AS catpath')
|
|
->from(_JOOM_TABLE_NAMESHIELDS.' AS jgn')
|
|
->leftJoin(_JOOM_TABLE_IMAGES. ' AS jg ON jgn.npicid = jg.id')
|
|
->leftJoin(_JOOM_TABLE_CATEGORIES.' AS jgc ON jgc.cid = jg.catid')
|
|
->where('jgn.nuserid = '.$userId);
|
|
|
|
if($this->getConfig('showlastcomment'))
|
|
{
|
|
$query->select('jgco.cmttext, jgco.cmtdate, jgco.userid, jgco.cmtid')
|
|
->leftJoin(_JOOM_TABLE_COMMENTS.' AS jgco ON jg.id = jgco.cmtpic')
|
|
->leftJoin(_JOOM_TABLE_COMMENTS.' AS jgco2 ON jgco.cmtpic = jgco2.cmtpic AND jgco.cmtdate < jgco2.cmtdate')
|
|
->where('jgco2.cmtpic IS NULL');
|
|
}
|
|
|
|
$this->addImageWhere($query, $access);
|
|
|
|
if($sorting)
|
|
{
|
|
$query->order($this->_db->escape($sorting));
|
|
}
|
|
|
|
$this->_db->setQuery($query, $limitStart, $numPics);
|
|
|
|
return $this->_db->loadObjectList();
|
|
}
|
|
|
|
/**
|
|
* Returns the images a user has favoured
|
|
*
|
|
* @param int $userId Joomla ID of user
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @param string $sorting String for DB sorting
|
|
* @param int $numPics Limit number of images, leave away to return all
|
|
* @param int $limitStart Where to start returning $numPics images
|
|
* @return array An array of image objects from the database
|
|
* @since 1.0.0
|
|
*/
|
|
public function getPicsUserFavoured($userId, $access = null, $sorting = null, $numPics = null, $limitStart = 0)
|
|
{
|
|
// Validation
|
|
$userId = intval($userId);
|
|
|
|
$query = $this->_db->getQuery(true)
|
|
->select('piclist')
|
|
->from(_JOOM_TABLE_USERS)
|
|
->where('uuserid = '.$userId);
|
|
|
|
$this->_db->setQuery($query);
|
|
$piclist = $this->_db->loadResult();
|
|
|
|
if(!$piclist)
|
|
{
|
|
return array();
|
|
}
|
|
|
|
$query = $this->getImagesQuery($access)
|
|
->where('jg.id IN ('.$piclist.')');
|
|
|
|
if($sorting)
|
|
{
|
|
$query->order($this->_db->escape($sorting));
|
|
}
|
|
|
|
$this->_db->setQuery($query, $limitStart, $numPics);
|
|
|
|
return $this->_db->loadObjectList();
|
|
}
|
|
|
|
/**
|
|
* Returns the comments of a user on images
|
|
*
|
|
* @param int $userId Joomla ID of user
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @param string $sorting String for DB sorting (default: newest by ID)
|
|
* @param int $numComments Limit number of images, leave away to return all
|
|
* @param int $limitStart Where to start returning $numComments images
|
|
* @return array An array of image objects from the database
|
|
* @since 1.0.0
|
|
*/
|
|
public function getCommentsUser($userId, $access = null, $sorting = 'jgco.cmtid DESC', $numComments = null, $limitStart = 0)
|
|
{
|
|
return $this->getComments($access, $sorting, $numComments, $limitStart, $userId);
|
|
}
|
|
|
|
/**
|
|
* Returns all (or some ;) ) comments in the gallery as DB-rows
|
|
*
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @param string $sorting String for DB sorting (default: Newest by ID)
|
|
* @param int $numComments Limit number of comments, leave away to return all
|
|
* @param int $limitStart Where to start returning $numComments comments
|
|
* @param int $userId Joomla ID of user
|
|
* @return array An array of comment objects from the database
|
|
* @since 1.0.0
|
|
*/
|
|
public function getComments($access = null, $sorting = "jgco.cmtid DESC", $numComments = null, $limitStart = 0, $userId = 0)
|
|
{
|
|
$userId = intval($userId);
|
|
|
|
$query = $this->_db->getQuery(true)
|
|
->select('jg.id, jgco.cmttext, jgco.cmtdate, jgco.userid AS cmtuserid')
|
|
->select('jg.catid, jg.imgthumbname, jg.imgfilename, jg.owner, jg.imgauthor,
|
|
jg.imgdate, jg.imgtitle, jg.imgtext, jg.hits, jg.downloads, jg.imgvotes,
|
|
'.JoomHelper::getSQLRatingClause('jg').' AS rating,
|
|
jgc.name AS cattitle, jgc.catpath AS catpath')
|
|
->from(_JOOM_TABLE_COMMENTS.' AS jgco')
|
|
->leftJoin(_JOOM_TABLE_IMAGES.' AS jg ON jgco.cmtpic = jg.id')
|
|
->leftJoin(_JOOM_TABLE_CATEGORIES.' AS jgc ON jgc.cid = jg.catid')
|
|
->where('jgco.published = 1')
|
|
->where('jgco.approved = 1');
|
|
|
|
if($userId)
|
|
{
|
|
$query->where('jgco.userid = '.$userId);
|
|
}
|
|
|
|
$this->addImageWhere($query, $access);
|
|
|
|
$this->_db->setQuery($query, $limitStart, $numComments);
|
|
|
|
return $this->_db->loadObjectList();
|
|
}
|
|
|
|
/**
|
|
* Returns db-row of one image, with optional access verification
|
|
*
|
|
* @param int $picid ID of images in gallery
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @return object The image object from the database
|
|
* @since 1.0.0
|
|
*/
|
|
public function getPicture($picid, $access = null)
|
|
{
|
|
$picid = intval($picid);
|
|
|
|
$query = $this->getImagesQuery($access)
|
|
->where('jg.id = '.$picid);
|
|
|
|
$this->_db->setQuery($query);
|
|
|
|
return $this->_db->loadObject();
|
|
}
|
|
|
|
/**
|
|
* Returns a query object containing the general data for requesting images data
|
|
*
|
|
* @param array $access Array of access levels to filter with
|
|
* @return object A JDatabaseQuery object
|
|
* @since 2.0
|
|
*/
|
|
public function getImagesQuery($access = null)
|
|
{
|
|
$query = $this->_db->getQuery(true);
|
|
|
|
if($this->getConfig('shownumcomments'))
|
|
{
|
|
$query->select('('.$this->getNumCommentsSubQuery().') AS cmtcount');
|
|
}
|
|
|
|
$query->select('jg.id, jg.catid, jg.imgthumbname, jg.imgfilename, jg.owner, jg.imgauthor,
|
|
jg.imgdate, jg.imgtitle, jg.imgtext, jg.hits, jg.downloads, jg.imgvotes,
|
|
'.JoomHelper::getSQLRatingClause('jg').' AS rating,
|
|
jgc.name AS cattitle, jgc.catpath AS catpath')
|
|
->from(_JOOM_TABLE_IMAGES.' AS jg')
|
|
->leftJoin(_JOOM_TABLE_CATEGORIES.' AS jgc ON jgc.cid = jg.catid');
|
|
|
|
if($this->getConfig('showlastcomment'))
|
|
{
|
|
$query->select('jgco.cmttext, jgco.cmtdate, jgco.userid, jgco.cmtid')
|
|
->leftJoin(_JOOM_TABLE_COMMENTS.' AS jgco ON jg.id = jgco.cmtpic')
|
|
->leftJoin(_JOOM_TABLE_COMMENTS.' AS jgco2 ON jgco.cmtpic = jgco2.cmtpic AND jgco.cmtdate < jgco2.cmtdate')
|
|
->where('jgco2.cmtpic IS NULL');
|
|
}
|
|
|
|
$this->addImageWhere($query, $access);
|
|
|
|
return $query;
|
|
}
|
|
|
|
/**
|
|
* Returns the db-row of a random image, to which a user with has access to
|
|
* (e.g. for a simple 1pic module)
|
|
*
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @return object An image object from the database
|
|
* @since 1.0.0
|
|
*/
|
|
public function getRandomPicture($access = null)
|
|
{
|
|
$query = $this->getImagesQuery($access)
|
|
->order('RAND()');
|
|
|
|
$this->_db->setQuery($query);
|
|
|
|
return $this->_db->loadObject();
|
|
}
|
|
|
|
/**
|
|
* Returns the number of images in a category
|
|
*
|
|
* @param int $catid ID of category
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @return int The number of images in the category
|
|
* @since 1.0.0
|
|
*/
|
|
public function getNumPicsByCategory($catid, $access = null)
|
|
{
|
|
$catid = intval($catid);
|
|
|
|
$query = $this->_db->getQuery(true)
|
|
->select('COUNT(jg.id)')
|
|
->from(_JOOM_TABLE_IMAGES.' AS jg')
|
|
->leftJoin(_JOOM_TABLE_CATEGORIES.' AS jgc ON jgc.cid = jg.catid')
|
|
->where('jg.catid = '.$catid);
|
|
|
|
$this->_db->setQuery($query);
|
|
|
|
return $this->_db->loadResult();
|
|
}
|
|
|
|
/**
|
|
* Returns image objects of all images in a category
|
|
*
|
|
* @param int $catid The ID of the category
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @param string $sorting Sorting string
|
|
* @param int $numPics Limit number of images, leave away to return all
|
|
* @param int $limitStart Where to start returning $numPics images
|
|
* @return array An array of comment objects from the database
|
|
* @since 1.0.0
|
|
*/
|
|
public function getPicsByCategory($catid, $access = null, $sorting = null, $numPics = null, $limitStart = 0)
|
|
{
|
|
// Validation
|
|
$catid = intval($catid);
|
|
|
|
$query = $this->getImagesQuery($access)
|
|
->where('jg.catid = '.$catid);
|
|
|
|
if($sorting)
|
|
{
|
|
$query->order($this->_db->escape($sorting));
|
|
}
|
|
|
|
$this->_db->setQuery($query, $limitStart, $numPics);
|
|
|
|
return $this->_db->loadObjectList();
|
|
}
|
|
|
|
/**
|
|
* Extends a query by search conditions
|
|
*
|
|
* @param object $query The query to extend
|
|
* @param string $searchstring The string to search for
|
|
* @return void
|
|
* @since 2.0
|
|
*/
|
|
public function addSearchTerms($query, $searchstring)
|
|
{
|
|
$aliases = array('images' => 'jg', 'categories' => 'jgc');
|
|
$plugins = JDispatcher::getInstance()->trigger('onJoomSearch', array($searchstring, $aliases, _JOOM_OPTION.'.interface'));
|
|
|
|
$searchstring = $this->_db->quote('%'.$this->_db->escape(strtolower(trim($searchstring))).'%');
|
|
|
|
$where = '(jg.imgtitle LIKE '.$searchstring.' OR LOWER(jg.imgtext) LIKE '.$searchstring;
|
|
|
|
foreach($plugins as $plugin)
|
|
{
|
|
if(isset($plugin['images.select']))
|
|
{
|
|
$query->select($plugin['images.select']);
|
|
}
|
|
|
|
if(isset($plugin['images.leftjoin']))
|
|
{
|
|
$query->leftJoin($plugin['images.leftjoin']);
|
|
}
|
|
|
|
if(isset($plugin['images.where']))
|
|
{
|
|
$query->where($plugin['images.where']);
|
|
}
|
|
|
|
if(isset($plugin['images.where.or']))
|
|
{
|
|
$where .= ' OR '.$plugin['images.where.or'];
|
|
}
|
|
}
|
|
|
|
$query->where($where);
|
|
}
|
|
|
|
/**
|
|
* Returns number of images matching the search string
|
|
* (e.g. for pre-filtering, pagination)
|
|
*
|
|
* @param string $searchstring The string to use for the search
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @return int The number of images matching the search string
|
|
* @since 1.0.0
|
|
*/
|
|
public function getNumPicsBySearch($searchstring, $access = null)
|
|
{
|
|
$query = $this->_db->getQuery(true)
|
|
->select('COUNT(jg.id)')
|
|
->from(_JOOM_TABLE_IMAGES.' AS jg')
|
|
->leftJoin(_JOOM_TABLE_CATEGORIES.' AS jgc ON jgc.cid = jg.catid');
|
|
$this->addImageWhere($query);
|
|
$this->addSearchTerms($query);
|
|
|
|
$this->_db->setQuery($query);
|
|
|
|
return $this->_db->loadResult();
|
|
}
|
|
|
|
/**
|
|
* Returns db-rows of images matching the search string
|
|
* E.g. useful for a search mambot
|
|
*
|
|
* @param string $searchstring The string to use for the search
|
|
* @param array $access Access levels to filter for, null to use the ones of the current user
|
|
* @param string $sorting Sorting string
|
|
* @param int $numPics Limit number of images, leave away to return all
|
|
* @param int $limitStart Where to start returning $numPics images
|
|
* @return array An array of image objects from the database
|
|
* @since 1.0.0
|
|
*/
|
|
public function getPicsBySearch($searchstring, $access = null, $sorting = null, $numPics = null, $limitStart = 0)
|
|
{
|
|
$query = $this->getImagesQuery($access);
|
|
|
|
$this->addSearchTerms($query, $searchstring);
|
|
|
|
if($sorting)
|
|
{
|
|
$query->order($this->_db->escape($sorting));
|
|
}
|
|
|
|
$this->_db->setQuery($query, $limitStart, $numPics);
|
|
|
|
return $this->_db->loadObjectList();
|
|
}
|
|
|
|
/**
|
|
* Creates a new category out of the information of the given object
|
|
*
|
|
* @param object $obj Should hold all the information about the new category
|
|
* @param int The ID of the new category, false, if an error occured
|
|
* @since 1.5.0
|
|
*/
|
|
public function createCategory($obj)
|
|
{
|
|
jimport('joomla.filesystem.file');
|
|
JLoader::register('JoomFile', JPATH_ADMINISTRATOR.'/components/'._JOOM_OPTION.'/helpers/file.php');
|
|
|
|
$row = JTable::getInstance('joomgallerycategories', 'Table');
|
|
$row->bind($obj);
|
|
|
|
if(!$row->name)
|
|
{
|
|
$this->_mainframe->enqueueMessage(JText::_('No valid category name given'), 'error');
|
|
|
|
return false;
|
|
}
|
|
|
|
$row->parent_id = (int) $row->parent_id;
|
|
if($row->parent_id < 1)
|
|
{
|
|
$row->parent_id = 1;
|
|
}
|
|
|
|
// Determine location in category tree
|
|
if(!isset($obj->ordering) || !$obj->ordering || $obj->ordering == 'first-child')
|
|
{
|
|
$row->setLocation($row->parent_id, 'first-child');
|
|
}
|
|
else
|
|
{
|
|
if($obj->ordering == 'last-child')
|
|
{
|
|
$row->setLocation($row->parent_id, 'last-child');
|
|
}
|
|
else
|
|
{
|
|
$row->setLocation($obj->ordering, 'after');
|
|
}
|
|
}
|
|
|
|
// Ensure that the data is valid
|
|
if(!$row->check())
|
|
{
|
|
$this->_mainframe->enqueueMessage($row->getError(), 'error');
|
|
|
|
return false;
|
|
}
|
|
|
|
// Store the data in the database
|
|
if(!$row->store())
|
|
{
|
|
$this->_mainframe->enqueueMessage($row->getError(), 'error');
|
|
|
|
return false;
|
|
}
|
|
|
|
// Now we have the ID of the new category
|
|
// and the catpath can be built
|
|
$row->catpath = JoomFile::fixFilename($row->name).'_'.$row->cid;
|
|
if($row->parent_id > 1)
|
|
{
|
|
$row->catpath = JoomHelper::getCatPath($row->parent_id).$row->catpath;
|
|
}
|
|
// So store again, but afore let's create the alias
|
|
$row->check();
|
|
if(!$row->store())
|
|
{
|
|
$this->_mainframe->enqueueMessage($row->getError(), 'error');
|
|
|
|
return false;
|
|
}
|
|
|
|
// Create necessary folders and files
|
|
$origpath = JPATH_ROOT.'/'.$this->_jg_config->get('jg_pathoriginalimages').$row->catpath;
|
|
$imgpath = JPATH_ROOT.'/'.$this->_jg_config->get('jg_pathimages').$row->catpath;
|
|
$thumbpath = JPATH_ROOT.'/'.$this->_jg_config->get('jg_paththumbs').$row->catpath;
|
|
$result = array();
|
|
$result[] = JFolder::create($origpath);
|
|
$result[] = JoomFile::copyIndexHtml($origpath);
|
|
$result[] = JFolder::create($imgpath);
|
|
$result[] = JoomFile::copyIndexHtml($imgpath);
|
|
$result[] = JFolder::create($thumbpath);
|
|
$result[] = JoomFile::copyIndexHtml($thumbpath);
|
|
|
|
if(in_array(false, $result))
|
|
{
|
|
// Delete the just stored database entry
|
|
$row->delete();
|
|
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
// New category successfully created
|
|
return $row->cid;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Is automatically called when an unknown method is called.
|
|
* This will happen if JoomGallery is not uptodate.
|
|
*
|
|
* @param string $name Name of the unknown method
|
|
* @param array $params Array of parameters given to the unknown method
|
|
* @return void
|
|
* @since 1.5.0
|
|
*/
|
|
public function __call($name, $params)
|
|
{
|
|
$this->_mainframe->enqueueMessage('JoomGallery is not uptodate. Function '.$name.' does not exist', 'error');
|
|
}
|
|
} |