....................................../////.===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//favourites.php
<?php
// $HeadURL: https://joomgallery.org/svn/joomgallery/JG-3/JG/trunk/components/com_joomgallery/models/favourites.php $
// $Id: favourites.php 4331 2013-09-08 08:27:42Z 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.');

/**
 * JoomGallery Favourites Model
 *
 * Handles the favourites of a user and the zip download
 *
 * @package JoomGallery
 * @since   1.5.5
 */
class JoomGalleryModelFavourites extends JoomGalleryModel
{
  /**
   * The ID of the image to work with
   *
   * @var   int
   * @since 1.5.5
   */
  protected $_id;

  /**
   * A comma separated list of favoured images
   *
   * @var   string
   * @since 1.5.5
   */
  protected $piclist;

  /**
   * Determines whether the database is used or the session to store the images
   *
   * @var   boolean
   * @since 1.5.5
   */
  protected $using_database;

  /**
   * Determines whether the current user already has an entry
   * in the database table for the favourites and the zip download
   *
   * @var   boolean
   * @since 1.5.5
   */
  protected $user_exists;

  /**
   * Holds the current layout
   *
   * @var   string
   * @since 1.5.5
   */
  protected $layout;

  /**
   * Holds the prefix of the language constants for the favourites
   *
   * @var   string
   * @since 1.5.5
   */
  protected $_output;

  /**
   * Constructor
   *
   * @return  void
   * @since   1.0.0
   */
  public function __construct()
  {
    parent::__construct();

    // Check access rights
    if(   !$this->_config->get('jg_favourites')
       || (!$this->_config->get('jg_usefavouritesforpubliczip') && !$this->_user->get('id'))
      )
    {
      $this->_mainframe->redirect(JRoute::_('index.php?view=gallery', false), JText::_('COM_JOOMGALLERY_COMMON_PERMISSION_DENIED'), 'notice');
    }

    // Set the image id
    $view = JRequest::getCmd('view');
    $task = JRequest::getCmd('task');
    if(  ($view != 'favourites' || $task == 'removeimage')
      &&  $view != 'downloadzip'
      &&  $task != 'removeall'
      &&  $task != 'switchlayout'
      &&  $task != 'createzip'
      &&  $task != 'addimages'
      )
    {
      $id = JRequest::getInt('id');
      $this->setId($id);
    }

    // Check whether we will work with the database or the session
    if($this->_user->get('id') && $this->_config->get('jg_usefavouritesforzip') != 1)
    {
      $this->using_database = true;
      $this->_output        = 'COM_JOOMGALLERY_FAVOURITES_MSG_';

      $query = $this->_db->getQuery(true)
            ->select('piclist, layout')
            ->from(_JOOM_TABLE_USERS)
            ->where('uuserid = '.$this->_user->get('id'));
      $this->_db->setQuery($query);

      if($row = $this->_db->loadObject())
      {
        $this->user_exists  = true;
        $this->piclist      = $row->piclist;
        $this->layout       = $row->layout;
      }
      else
      {
        $this->user_exists  = false;
        $this->piclist      = null;
        $this->layout       = 0;
      }
    }
    else
    {
      $this->using_database = false;
      $this->_output        = 'COM_JOOMGALLERY_FAVOURITES_ZIP_MSG_';

      $this->piclist = $this->_mainframe->getUserState('joom.favourites.pictures');
      $this->layout  = $this->_mainframe->getUserState('joom.favourites.layout');
    }
  }

  /**
   * Method to set the image id
   *
   * @param   int   Image ID number
   * @return  void
   * @since   1.5.5
   */
  public function setId($id)
  {
    // Set new image ID if valid
    if(!$id)
    {
      JError::raiseError(500, JText::_('COM_JOOMGALLERY_COMMON_NO_IMAGE_SPECIFIED'));
    }
    $this->_id  = $id;
  }

  /**
   * Method to get the identifier
   *
   * @return  int   The image ID
   * @since   1.5.5
   */
  public function getId()
  {
    return $this->_id;
  }

  /**
   * Method to get the current layout
   *
   * @return  string  The name of the current layout
   * @since   1.5.5
   */
  public function getLayout()
  {
    return $this->layout;
  }

  /**
   * Method to add an image to the favourites or the zip download
   *
   * @return  boolean True on success, false otherwise
   * @since   1.0.0
   */
  public function addImage()
  {
    $query = $this->_db->getQuery(true)
          ->select('id')
          ->from(_JOOM_TABLE_IMAGES.' AS a')
          ->leftJoin(_JOOM_TABLE_CATEGORIES.' AS c ON a.catid = c.cid')
          ->where('a.id = '.$this->_id)
          ->where('a.approved = 1')
          ->where('a.published = 1')
          ->where('a.access IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')')
          ->where('c.access IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')')
          ->where('c.published = 1');
    $this->_db->setQuery($query);
    if(!$this->_db->loadResult())
    {
      $this->setError('Stop Hacking attempt!');

      return false;
    }

    if(is_null($this->piclist))
    {
      if($this->using_database)
      {
        if($this->user_exists)
        {
          $query->clear()
                ->update(_JOOM_TABLE_USERS)
                ->set('piclist = '.$this->_db->q($this->_id))
                ->where('uuserid = '.$this->_user->get('id'));
        }
        else
        {
          $query->clear()
                ->insert(_JOOM_TABLE_USERS)
                ->columns('uuserid, piclist')
                ->values($this->_user->get('id').', '.$this->_db->q($this->_id));
        }

        $this->_db->setQuery($query);
        $return = $this->_db->query();
      }
      else
      {
        $this->_mainframe->setUserState('joom.favourites.pictures', $this->_id);
      }
    }
    else
    {
      $piclist_array = explode(',', $this->piclist);

      if(in_array($this->_id, $piclist_array))
      {
        // Image is already in there
        $this->_mainframe->enqueueMessage($this->output('ALREADY_IN'));

        return true;
      }
      if($this->_config->get('jg_maxfavourites') && count($piclist_array) >= $this->_config->get('jg_maxfavourites'))
      {
        // Maximum number of images already reached
        $this->setError($this->output('ALREADY_MAX'));

        return false;
      }

      if($this->using_database)
      {
        $query->clear()
              ->update(_JOOM_TABLE_USERS)
              ->set('piclist = '.$this->_db->q($this->piclist.', '.$this->_id))
              ->where('uuserid = '.$this->_user->get('id'));
        $this->_db->setQuery($query);
        $return = $this->_db->query();
      }
      else
      {
        $this->_mainframe->setUserState('joom.favourites.pictures', $this->piclist.','.$this->_id);
      }
    }

    if(isset($return) && !$return)
    {
      $this->setError($this->_db->getErrorMsg());

      return false;
    }

    $this->_mainframe->enqueueMessage($this->output('SUCCESSFULLY_ADDED'));

    $this->_mainframe->triggerEvent('onJoomAfterAddFavourite', array($this->_id));

    return true;
  }

  /**
   * Method to add all images of a category (but none of the sub-categories) to the favourites or the zip download
   *
   * @param   int     The ID of the category from which all images should be added to the favourites or the zip download
   * @return  boolean True on success, false otherwise
   * @since   1.0.0
   */
  public function addImages($catid)
  {
    $query = $this->_db->getQuery(true)
          ->select('id')
          ->from(_JOOM_TABLE_IMAGES.' AS a')
          ->leftJoin(_JOOM_TABLE_CATEGORIES.' AS c ON a.catid = c.cid')
          ->where('c.cid = '.(int) $catid)
          ->where('a.approved = 1')
          ->where('a.published = 1')
          ->where('a.hidden = 0')
          ->where('a.access IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')')
          ->where('c.access IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')')
          ->where('c.published = 1');
    $this->_db->setQuery($query);
    if(!$images = $this->_db->loadColumn())
    {
      $this->setError(JText::_('COM_JOOMGALLERY_FAVOURITES_NO_IMAGES_TO_ADD'));

      return false;
    }

    if(is_null($this->piclist))
    {
      if($this->_config->get('jg_maxfavourites') && count($images) > $this->_config->get('jg_maxfavourites'))
      {
        $this->setError($this->output('WOULD_EXCEED'));

        return false;
      }

      if($this->using_database)
      {
        if($this->user_exists)
        {
          $query->clear()
                ->update(_JOOM_TABLE_USERS)
                ->set('piclist = '.$this->_db->q(implode(',', $images)))
                ->where('uuserid = '.$this->_user->get('id'));
        }
        else
        {
          $query->clear()
                ->insert(_JOOM_TABLE_USERS)
                ->columns('uuserid, piclist')
                ->values($this->_user->get('id').', '.$this->_db->q(implode(',', $images)));
        }

        $this->_db->setQuery($query);
        $return = $this->_db->query();
      }
      else
      {
        $this->_mainframe->setUserState('joom.favourites.pictures', implode(',', $images));
      }
    }
    else
    {
      $piclist_array = explode(',', $this->piclist);

      $images = array_diff($images, $piclist_array);

      // If there is nothing in the difference we don't have to do anything
      if(!count($images))
      {
        return true;
      }

      $new_piclist_array = array_unique(array_merge($piclist_array, $images));

      if($this->_config->get('jg_maxfavourites') && count($new_piclist_array) > $this->_config->get('jg_maxfavourites'))
      {
        // Maximum number of images already reached
        $this->_mainframe->enqueueMessage($this->output('WOULD_EXCEED'));

        return false;
      }

      if($this->using_database)
      {
        $query->clear()
              ->update(_JOOM_TABLE_USERS)
              ->set('piclist = '.$this->_db->q(implode(',', $new_piclist_array)))
              ->where('uuserid = '.$this->_user->get('id'));
        $this->_db->setQuery($query);
        $return = $this->_db->query();
      }
      else
      {
        $this->_mainframe->setUserState('joom.favourites.pictures', implode(',', $new_piclist_array));
      }
    }

    if(isset($return) && !$return)
    {
      $this->setError($this->_db->getErrorMsg());

      return false;
    }

    $this->_mainframe->triggerEvent('onJoomAfterAddFavourite', $images);

    return true;
  }

  /**
   * Method to remove an image from the favourites or the zip download
   *
   * @return  boolean True on success, false otherwise
   * @since   1.0.0
   */
  public function removeImage()
  {
    $piclist = explode(',', $this->piclist);
    if(!in_array($this->_id, $piclist))
    {
      $this->setError($this->output('NOT_IN'));

      return false;
    }

    $new_piclist = array();
    foreach($piclist as $picid)
    {
      if($picid != $this->_id)
      {
        array_push($new_piclist, $picid);
      }
    }

    $query = $this->_db->getQuery(true);

    if(!count($new_piclist))
    {
      $new_piclist = null;
      $query->set('piclist = NULL');
    }
    else
    {
      $new_piclist = implode(',', $new_piclist);
      $query->set('piclist = '.$this->_db->q($new_piclist));
    }

    if($this->using_database)
    {
      $query->update(_JOOM_TABLE_USERS)
            ->where('uuserid = '.$this->_user->get('id'));
      $this->_db->setQuery($query);
      if(!$this->_db->query())
      {
        $this->setError($this->_db->getErrorMsg());

        return false;
      }
    }
    else
    {
      $this->_mainframe->setUserState('joom.favourites.pictures', $new_piclist);
    }

    $this->_mainframe->triggerEvent('onJoomAfterRemoveFavourite', array($this->_id));

    return true;
  }

  /**
   * Method to remove all images from the favourites or the zip download
   *
   * @return  boolean True on success, false otherwise
   * @since   1.0.0
   */
  public function removeAll()
  {
    if($this->using_database)
    {
      $query = $this->_db->getQuery(true)
            ->update(_JOOM_TABLE_USERS)
            ->set('piclist = NULL')
            ->where('uuserid = '.$this->_user->get('id'));
      $this->_db->setQuery($query);
      if(!$this->_db->query())
      {
        $this->setError($this->_db->getErrorMsg());

        return false;
      }
    }
    else
    {
      $this->_mainframe->setUserState('joom.favourites.pictures', null);
    }

    $this->_mainframe->triggerEvent('onJoomAfterClearFavourites');

    return true;
  }

  /**
   * Method to switch the current layout, currently switches the layout
   * only if the user has already added some images to his list
   *
   * @return  boolean True
   * @since   1.0.0
   */
  public function switchLayout()
  {
    $layout = JRequest::getCmd('layout');
    if(
        ($layout && $layout == 'list')
      ||
         $this->layout
      )
    {
      $new_layout = 0;
    }
    else
    {
      $new_layout = 1;
    }

    if($this->using_database)
    {
      $query = $this->_db->getQuery(true)
            ->update(_JOOM_TABLE_USERS)
            ->set('layout = '.$new_layout)
            ->where('uuserid = '.$this->_user->get('id'));
      $this->_db->setQuery($query);
      $this->_db->query();
    }
    else
    {
      $this->_mainframe->setUserState('joom.favourites.layout', $new_layout);
    }

    return true;
  }

  /**
   * Method to create the zip archive with all selected images
   *
   * @return  boolean True on success, false otherwise
   * @since   1.0.0
   */
  public function createZip()
  {
    jimport('joomla.filesystem.file');
    jimport('joomla.filesystem.folder');
    jimport('joomla.filesystem.archive');

    $zip_adapter = JArchive::getAdapter('zip');

    // Check whether zip download is allowed
    if(    !$this->_config->get('jg_zipdownload')
        && ($this->_user->get('id') || !$this->_config->get('jg_usefavouritesforpubliczip'))
      )
    {
      $this->_mainframe->redirect(JRoute::_('index.php?view=favourites', false), JText::_('COM_JOOMGALLERY_FAVOURITES_MSG_NOT_ALLOWED'), 'notice');
    }

    if(is_null($this->piclist))
    {
      $this->_mainframe->redirect(JRoute::_('index.php?view=favourites', false), $this->output('NO_IMAGES'), 'notice');
    }

    $query = $this->_db->getQuery(true)
          ->select('id')
          ->select('catid')
          ->select('imgfilename')
          ->from(_JOOM_TABLE_IMAGES.' AS a')
          ->from(_JOOM_TABLE_CATEGORIES.' AS c')
          ->where('id IN ('.$this->piclist.')')
          ->where('a.catid      = c.cid')
          ->where('a.published  = 1')
          ->where('a.approved   = 1')
          ->where('c.published  = 1')
          ->where('a.access     IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')')
          ->where('c.access     IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')');

    $this->_db->setQuery($query);
    $rows = $this->_db->loadObjectList();

    if(!count($rows))
    {
      $this->_mainframe->redirect(JRoute::_('index.php?view=favourites', false), $this->output('NO_IMAGES'), 'notice');
    }

    // Name of the zip archive
    $zipname = 'components/'._JOOM_OPTION.'/joomgallery_'.date('d_m_Y').'__';
    if($userid = $this->_user->get('id'))
    {
      $zipname .= $userid.'_';
    }
    $zipname .= mt_rand(10000, 99999).'.zip';

    $files  = array();

    if($this->_config->get('jg_downloadwithwatermark'))
    {
      $include_watermark = true;

      // Get the 'image' model
      $imageModel = parent::getInstance('image', 'joomgallerymodel');

      // Get the temp path for storing the watermarked image temporarily
      if(!JFolder::exists($this->_ambit->get('temp_path')))
      {
        $this->setError(JText::_('COM_JOOMGALLERY_UPLOAD_ERROR_TEMP_MISSING'));

        return false;
      }
      else
      {
        $tmppath = $this->_ambit->get('temp_path');
      }
    }
    else
    {
      $include_watermark = false;
    }

    $categories = $this->_ambit->getCategoryStructure();
    foreach($rows as &$row)
    {
      if(!isset($categories[$row->catid]))
      {
        continue;
      }

      // Get the original image if existent, otherwise the detail image
      $orig = $this->_ambit->getImg('orig_path', $row->id);
      $img = $this->_ambit->getImg('img_path', $row->id);

      if(file_exists($orig))
      {
        $image = $orig;
      }
      else if(file_exists($img))
      {
        $image = $img;
      }
      else
      {
        $image = null;
        continue;
      }
      $files[$row->id]['name'] = $row->imgfilename;

      // Watermark the image before if needed
      if($include_watermark)
      {
        // Get the image resource of watermarked image
        $imgres = $imageModel->includeWatermark($image);

        // Start output buffering
        ob_start();

        // According to mime type output the watermarked image resource to file
        $info = getimagesize($image);
        switch($info[2])
        {
          case 1:
            imagegif($imgres);
            break;
          case 2:
            imagejpeg($imgres);
            break;
          case 3:
            imagepng($imgres);
            break;
          default:
            JError::raiseError(404, JText::sprintf('COM_JOOMGALLERY_COMMON_MSG_MIME_NOT_ALLOWED', $mime));
            break;
        }

        // Read the content from output buffer and fill the array element
        $files[$row->id]['data'] = ob_get_contents();

        // Delete the output buffer
        ob_end_clean();
      }
      else
      {
        $files[$row->id]['data'] = JFile::read($image);
      }

      // Increase download counter for that image
      $this->download($row->id);
    }

    if(!count($files))
    {
      $this->_mainframe->redirect(JRoute::_('index.php?view=favourites', false), $this->output('NO_IMAGES'), 'notice');
    }

    // Trigger event 'onJoomBeforeZipDownload'
    $plugins = $this->_mainframe->triggerEvent('onJoomBeforeZipDownload', array(&$files));
    if(in_array(false, $plugins, true))
    {
      $this->_mainframe->redirect(JRoute::_('index.php?view=favourites', false));
    }

    $createzip = $zip_adapter->create($zipname, $files);

    if(!$createzip)
    {
      // Workaround for servers with wwwwrun problem
      JoomFile::chmod(JPATH_COMPONENT, '0777', true);
      $createzip = $zip_adapter->create( $zipname, $files, 'zip');
      JoomFile::chmod(JPATH_COMPONENT, '0755', true);
    }

    if(!$createzip)
    {
      $this->setError(JText::_('COM_JOOMGALLERY_FAVOURITES_ERROR_CREATEZIP'));

      return false;
    }

    if($this->_user->get('id'))
    {
      if($this->user_exists)
      {
        $query = $this->_db->getQuery(true)
              ->select('zipname')
              ->from(_JOOM_TABLE_USERS)
              ->where('uuserid = '.$this->_user->get('id'));

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

        if($old_zip = $this->_db->loadResult())
        {
          if(file_exists($old_zip))
          {
            jimport('joomla.filesystem.file');
            JFile::delete($old_zip);
          }
        }
        $query = $this->_db->getQuery(true)
              ->update(_JOOM_TABLE_USERS)
              ->set('time = NOW()')
              ->set('zipname = '.$this->_db->q($zipname))
              ->where('uuserid = '.$this->_user->get('id'));

        $this->_db->setQuery($query);
      }
      else
      {
        $query = $this->_db->getQuery(true)
              ->insert(_JOOM_TABLE_USERS)
              ->set('uuserid = '.$this->_user->get('id'))
              ->set('time    = NOW()')
              ->set('zipname = '.$this->_db->q($zipname));

        $this->_db->setQuery($query);
      }
    }
    else
    {
      $query = $this->_db->getQuery(true)
            ->insert(_JOOM_TABLE_USERS)
            ->set('time = NOW()')
            ->set('zipname = '.$this->_db->q($zipname));

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

    $this->_mainframe->setUserState('joom.favourites.zipname', $zipname);

    // Message about new zip download
    if(!$this->_user->get('username'))
    {
      $username = JText::_('COM_JOOMGALLERY_COMMON_GUEST');
    }
    else
    {
      $username = $this->_config->get('jg_realname') ? $this->_user->get('name') : $this->_user->get('username');
    }

    if($this->_config->get('jg_msg_zipdownload'))
    {
      $imagefiles = implode(",\n", $files);
      require_once JPATH_COMPONENT.'/helpers/messenger.php';
      $messenger    = new JoomMessenger();
      $message      = array(
                            'subject'   => JText::_('COM_JOOMGALLERY_MESSAGE_NEW_ZIPDOWNLOAD_SUBJECT'),
                            'body'      => JText::sprintf('COM_JOOMGALLERY_MESSAGE_NEW_ZIPDOWNLOAD_BODY',
                                           $zipname, $username, $imagefiles),
                            'mode'      => 'zipdownload'
                            );
      $messenger->send($message);
    }

    return true;
  }

  /**
   * Method to get all the favourites of the current user
   *
   * @return  array An array of images data
   * @since   1.5.5
   */
  public function getFavourites()
  {
    if($this->_loadFavourites())
    {
      return $this->_favourites;
    }

    return array();
  }

  /**
   * Method to increment the download counter for an image.
   *
   * @param   int     $imgid  Image Id.
   * @return  boolean True on success, false otherwise.
   * @since   3.1
   */
  protected function download($imgid)
  {
    if($imgid)
    {
      $image = $this->getTable('joomgalleryimages');
      $image->download($imgid);
      return true;
    }

    return false;
  }

  /**
   * Method to auto-populate the model state.
   *
   * This method should only be called once per instantiation and is designed
   * to be called on the first call to the getState() method unless the model
   * configuration flag to ignore the request is set.
   *
   * Note. Calling getState in this method will result in recursion.
   *
   * @param   string  $ordering   An optional ordering field.
   * @param   string  $direction  An optional direction (asc|desc).
   * @return  void
   * @since   3.0
   */
  protected function populateState($ordering = 'imgtitle', $direction = 'asc')
  {
    $filter_fields = array( 'imgtitle',
                            'hits',
                            'downloads',
                            'catid'
                          );

    // Check if the ordering field is in the white list, otherwise use the incoming value
    $value = $this->_mainframe->getUserStateFromRequest('joom.favourites.ordercol', 'filter_order', $ordering);
    if(!in_array($value, $filter_fields))
    {
      $value = $ordering;
      $this->_mainframe->setUserState('joom.favourites.ordercol', $value);
    }
    $this->setState('list.ordering', $value);

    // Check if the ordering direction is valid, otherwise use the incoming value
    $value = $this->_mainframe->getUserStateFromRequest('joom.favourites.orderdirn', 'filter_order_Dir', $direction);
    if(!in_array(strtoupper($value), array('ASC', 'DESC', '')))
    {
      $value = $direction;
      $this->_mainframe->setUserState('joom.favourites.orderdirn', strotoupper($value));
    }
    $this->setState('list.direction', $value);
  }

  /**
   * Method to load the image data from the database
   *
   * @return  boolean True on success, false otherwise
   * @since   1.5.5
   */
  protected function _loadFavourites()
  {
    // Load the images if they don't already exist
    if(empty($this->_favourites))
    {
      $query = $this->_db->getQuery(true)
            ->select('*, a.catid, a.owner AS imgowner, '.JoomHelper::getSQLRatingClause('a').' AS rating');
      if($this->_config->get('jg_showcatcom'))
      {
        $subquery = $this->_db->getQuery(true)
                  ->select('COUNT(*)')
                  ->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')
            ->from(_JOOM_TABLE_CATEGORIES.' AS c')
            ->where('a.catid = c.cid')
            ->where('a.published  = 1')
            ->where('a.approved   = 1')
            ->where('c.published  = 1')
            ->where('a.access     IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')')
            ->where('c.access     IN ('.implode(',', $this->_user->getAuthorisedViewLevels()).')')
            ->where('c.hidden     = 0')
            ->where('c.in_hidden  = 0');

      if(is_null($this->piclist))
      {
        $query->where('0');
      }
      else
      {
        $query->where('a.id IN ('.$this->piclist.')');
      }

      $query->order($this->_db->escape($this->getState('list.ordering').' '.$this->getState('list.direction')));
      $this->_db->setQuery($query);

      $rows = $this->_db->loadObjectList();
      if($error = $this->_db->getErrorMsg())
      {
        $this->setError($error);

        return false;
      }

      $categories = $this->_ambit->getCategoryStructure();
      foreach($rows as $key => $row)
      {
        if(!isset($categories[$row->catid]))
        {
          unset($rows[$key]);
        }
      }

      $this->_favourites = $rows;

      // The list of favourites is filtered now, so that only valid images are chosen.
      // So we store this list now in order to delete invalid images from the list.
      if($this->using_database)
      {
        $ids = '';
        foreach($rows as $row)
        {
          $ids .= $row->id.',';
        }
        $query->clear()
              ->update(_JOOM_TABLE_USERS)
              ->set('piclist = '.((count($rows)) ? $this->_db->q(trim($ids, ',')) : 'NULL'))
              ->where('uuserid = '.$this->_user->get('id'));
        $this->_db->setQuery($query);
        $this->_db->query();
      }

      return true;
    }
  }

  /**
   * Returns a language string depending on the used mode for the zip download
   *
   * @param   string  The main part of the language constant to use
   * @return  string  The translated string of the selected and completed language constant
   * @since   1.5.5
   */
  public function output($msg)
  {
    return JText::_($this->_output.$msg);
  }
}

Youez - 2016 - github.com/yon3zu
LinuXploit