* * Gallery is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. * * Gallery is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * Gallery; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA * * @package gallery */ /** * The main Gallery snippet. * * @var modX $modx * @var Gallery $gallery * * @package gallery */ $gallery = $modx->getService('gallery','Gallery',$modx->getOption('gallery.core_path',null,$modx->getOption('core_path').'components/gallery/').'model/gallery/',$scriptProperties); if (!($gallery instanceof Gallery)) return ''; $modx->lexicon->load('gallery:web'); /* check for REQUEST vars if property set */ $imageGetParam = $modx->getOption('imageGetParam',$scriptProperties,'galItem'); $albumRequestVar = $modx->getOption('albumRequestVar',$scriptProperties,'galAlbum'); $tagRequestVar = $modx->getOption('tagRequestVar',$scriptProperties,'galTag'); if ($modx->getOption('checkForRequestAlbumVar',$scriptProperties,true)) { if (!empty($_REQUEST[$albumRequestVar])) $scriptProperties['album'] = $_REQUEST[$albumRequestVar]; } if ($modx->getOption('checkForRequestTagVar',$scriptProperties,true)) { if (!empty($_REQUEST[$tagRequestVar])) $scriptProperties['tag'] = $_REQUEST[$tagRequestVar]; } if (empty($scriptProperties['album']) && empty($scriptProperties['tag'])) return ''; $data = $modx->call('galItem','getList',array(&$modx,$scriptProperties)); $totalVar = $modx->getOption('totalVar', $scriptProperties, 'total'); $modx->setPlaceholder($totalVar,$data['total']); /* load plugins */ $plugin = $modx->getOption('plugin',$scriptProperties,''); if (!empty($plugin)) { $pluginPath = $modx->getOption('pluginPath',$scriptProperties,''); if (empty($pluginPath)) { $pluginPath = $gallery->config['modelPath'].'gallery/plugins/'; } /** @var GalleryPlugin $plugin */ if (($className = $modx->loadClass($plugin,$pluginPath,true,true))) { $plugin = new $className($gallery,$scriptProperties); $plugin->load(); $scriptProperties = $plugin->adjustSettings($scriptProperties); } else { return $modx->lexicon('gallery.plugin_err_load',array('name' => $plugin,'path' => $pluginPath)); } } else { if ($modx->getOption('useCss',$scriptProperties,true)) { $modx->regClientCSS($gallery->config['cssUrl'].'web.css'); } } /* iterate */ $imageProperties = $modx->getOption('imageProperties',$scriptProperties,''); $imageProperties = !empty($imageProperties) ? $modx->fromJSON($imageProperties) : array(); $imageProperties = array_merge(array( 'w' => (int)$modx->getOption('imageWidth',$scriptProperties,500), 'h' => (int)$modx->getOption('imageHeight',$scriptProperties,500), 'zc' => (boolean)$modx->getOption('imageZoomCrop',$scriptProperties,0), 'far' => (string)$modx->getOption('imageFar',$scriptProperties,false), 'q' => (int)$modx->getOption('imageQuality',$scriptProperties,90), ),$imageProperties); $thumbProperties = $modx->getOption('thumbProperties',$scriptProperties,''); $thumbProperties = !empty($thumbProperties) ? $modx->fromJSON($thumbProperties) : array(); $thumbProperties = array_merge(array( 'w' => (int)$modx->getOption('thumbWidth',$scriptProperties,100), 'h' => (int)$modx->getOption('thumbHeight',$scriptProperties,100), 'zc' => (boolean)$modx->getOption('thumbZoomCrop',$scriptProperties,1), 'far' => (string)$modx->getOption('thumbFar',$scriptProperties,'C'), 'q' => (int)$modx->getOption('thumbQuality',$scriptProperties,90), ),$thumbProperties); $idx = 0; $output = array(); $filesUrl = $modx->call('galAlbum','getFilesUrl',array(&$modx)); $filesPath = $modx->call('galAlbum','getFilesPath',array(&$modx)); $itemCls = $modx->getOption('itemCls',$scriptProperties,'gal-item'); $imageAttributes = $modx->getOption('imageAttributes',$scriptProperties,''); $linkAttributes = $modx->getOption('linkAttributes',$scriptProperties,''); $linkToImage = $modx->getOption('linkToImage',$scriptProperties,false); $activeCls = $modx->getOption('activeCls',$scriptProperties,'gal-item-active'); $highlightItem = $modx->getOption($imageGetParam,$_REQUEST,false); $defaultThumbTpl = $modx->getOption('thumbTpl',$scriptProperties,'galItemThumb'); /** @var galItem $item */ if (!is_array($data)) return ''; // prep for &thumbTpl_N $keys = array_keys($scriptProperties); $nthTpls = array(); foreach($keys as $key) { $keyBits = $gallery->explodeAndClean($key, '_'); if (isset($keyBits[0]) && $keyBits[0] === 'thumbTpl') { if ($i = (int) $keyBits[1]) $nthTpls[$i] = $scriptProperties[$key]; } } ksort($nthTpls); foreach ($data['items'] as $item) { $itemArray = $item->toArray(); $itemArray['idx'] = $idx; $itemArray['cls'] = $itemCls; if ($itemArray['id'] == $highlightItem) { $itemArray['cls'] .= ' '.$activeCls; } $itemArray['filename'] = basename($item->get('filename')); $itemArray['image_absolute'] = $item->get('base_url').$filesUrl.$item->get('filename'); $itemArray['fileurl'] = $itemArray['image_absolute']; $itemArray['filepath'] = $filesPath.$item->get('filename'); $itemArray['filesize'] = $item->get('filesize'); $itemArray['thumbnail'] = $item->get('thumbnail',$thumbProperties); $itemArray['image'] = $item->get('thumbnail',$imageProperties); $itemArray['image_attributes'] = $imageAttributes; $itemArray['link_attributes'] = $linkAttributes; if (!empty($scriptProperties['album'])) $itemArray['album'] = $scriptProperties['album']; if (!empty($scriptProperties['tag'])) $itemArray['tag'] = $scriptProperties['tag']; $itemArray['linkToImage'] = $linkToImage; $itemArray['url'] = $item->get('url'); $itemArray['imageGetParam'] = $imageGetParam; $itemArray['albumRequestVar'] = $albumRequestVar; $itemArray['tagRequestVar'] = $tagRequestVar; $itemArray['tag'] = ''; if ($plugin) { $plugin->renderItem($itemArray); } $thumbTpl = $defaultThumbTpl; if (isset($nthTpls[$idx])) { $thumbTpl = $nthTpls[$idx]; } else { foreach ($nthTpls as $int => $tpl) { if ( ($idx % $int) === 0 ) $thumbTpl = $tpl; } } $output[] = $gallery->getChunk($thumbTpl,$itemArray); $idx++; } $output = implode("\n",$output); /* if set, place in a container tpl */ $containerTpl = $modx->getOption('containerTpl',$scriptProperties,false); if (!empty($containerTpl)) { $ct = $gallery->getChunk($containerTpl,array( 'thumbnails' => $output, 'album_name' => $data['album']['name'], 'album_description' => $data['album']['description'], 'album_year' => isset($data['album']['year']) ? $data['album']['year'] : '', 'albumRequestVar' => $albumRequestVar, 'albumId' => $data['album']['id'], )); if (!empty($ct)) $output = $ct; } /* set to placeholders or output directly */ $toPlaceholder = $modx->getOption('toPlaceholder',$scriptProperties,false); if (!empty($toPlaceholder)) { $modx->toPlaceholders(array( $toPlaceholder => $output, $toPlaceholder.'.id' => $data['album']['id'], $toPlaceholder.'.name' => $data['album']['name'], $toPlaceholder.'.year' => isset($data['album']['year']) ? $data['album']['year'] : '', $toPlaceholder.'.description' => $data['album']['description'], $toPlaceholder.'.total' => $data['total'], $toPlaceholder.'.next' => $data['album']['id'] + 1, $toPlaceholder.'.prev' => $data['album']['id'] - 1, )); } else { $placeholderPrefix = $modx->getOption('placeholderPrefix',$scriptProperties,'gallery.'); $modx->toPlaceholders(array( $placeholderPrefix.'id' => $data['album']['id'], $placeholderPrefix.'name' => $data['album']['name'], $placeholderPrefix.'year' => isset($data['album']['year']) ? $data['album']['year'] : '', $placeholderPrefix.'description' => $data['album']['description'], $placeholderPrefix.'total' => $data['total'], $placeholderPrefix.'next' => $data['album']['id'] + 1, $placeholderPrefix.'prev' => $data['album']['id'] - 1, )); return $output; } return ''; return;