*/ /** * Required classes */ require_once(dirname(__FILE__) . '/classes/SearchUtilities.class'); /** * @package Search * @subpackage UserInterface */ class SearchShowAllController extends GalleryController { /** * @see GalleryController::handleRequest */ function handleRequest($form) { global $gallery; if (isset($form['action']['scan'])) { $results['delegate']['view'] = 'search:SearchScan'; } else { $results['delegate']['view'] = 'search:SearchShowAll'; } $results['status'] = array(); $results['error'] = array(); return array(GalleryStatus::success(), $results); } } /** * @package Search * @subpackage UserInterface */ class SearchShowAllView extends GalleryView { /** * @see GalleryView::loadTemplate */ function loadTemplate(&$template, &$form) { global $gallery; // TODO: Parameterize this $pageSize = 20; $items = array(); $thumbnails = array(); $results = array(); $searchResultThumbnails = array(); if ($form['formName'] == 'SearchShowAll' || $form['formName'] == 'SearchScan') { if (isset($form['searchCriteria'])) { $form['searchCriteria'] = trim($form['searchCriteria']); } if (empty($form['searchCriteria'])) { $form['error']['searchCriteria']['missing'] = 1; } else { /* If we click next/previous, make sure we don't change search criteria */ if (!empty($form['lastSearchCriteria']) && $form['lastSearchCriteria'] != $form['searchCriteria'] && (isset($form['action']['nextPage']) || isset($form['action']['previousPage']))) { $form['searchCriteria'] = $form['lastSearchCriteria']; } if (isset($form['action']['showAll'])) { $form['moduleId'] = array_pop(array_keys($form['action']['showAll'])); $form['page'] = 1; } /* Reset the page number if we start a new search */ if (isset($form['action']['search'])) { $form['page'] = 1; } if (isset($form['action']['nextPage'])) { $form['page']++; } else if (isset($form['action']['previousPage'])) { $form['page']--; } if ($form['page'] < 1) { $form['page'] = 1; } $moduleId = $form['moduleId']; require_once(dirname(__FILE__) . '/classes/GallerySearchInterface_1_0.class'); list ($ret, $searchInstance) = GalleryCoreApi::newFactoryInstanceById('GallerySearchInterface_1_0', $form['moduleId']); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } if (!isset($searchInstance)) { return array(GalleryStatus::error(ERROR_MISSING_OBJECT, __FILE__, __LINE__), null); } list ($ret, $moduleInfo) = $searchInstance->getSearchModuleInfo(); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } if (isset($form['options'][$moduleId])) { list ($ret, $results) = $searchInstance->search($form['options'][$moduleId], SearchUtilities::sanitizeSearchCriteria($form['searchCriteria']), ($form['page']-1) * $pageSize, $pageSize); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } } $maxPages = ceil($results['count'] / $pageSize); } $itemIds = array(); $thumbnails = array(); if (!empty($results['results'])) { foreach ($results['results'] as $result) { if (isset($result['itemId'])) { $itemIds[$result['itemId']] = 1; } } $itemIds = array_keys($itemIds); if (!empty($itemIds)) { /* Fetch items */ list ($ret, $itemList) = GalleryCoreApi::loadEntitiesById($itemIds); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } foreach ($itemList as $item) { $items[$item->getId()] = $item->getMemberData(); } /* Fetch thumbnails */ list ($ret, $thumbnailList) = GalleryCoreApi::fetchThumbnailsByItemIds($itemIds); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } foreach ($thumbnailList as $thumbnail) { $thumbnails[$thumbnail->getParentId()] = $thumbnail->getMemberData(); } } } } else { $form['searchCriteria'] = ''; } /* Render the HTML body */ $SearchShowAll = array(); $SearchShowAll['maxPages'] = $maxPages; $SearchShowAll['moduleInfo'] = $moduleInfo; $SearchShowAll['moduleId'] = $moduleId; $SearchShowAll['results'] = $results; $SearchShowAll['thumbnails'] = $thumbnails; $SearchShowAll['items'] = $items; $SearchShowAll['controller'] = 'search:SearchShowAll'; $template->setVariable('SearchShowAll', $SearchShowAll); list ($ret, $navigationView) = GalleryView::loadView('core:Navigation'); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } list ($ret, $ignored) = $navigationView->loadTemplate($template, $form); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } list ($ret, $module) = GalleryCoreApi::loadPlugin('module', 'search'); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } $template->title($module->translate('Gallery Search')); return array(GalleryStatus::success(), array('body' => 'modules/search/templates/SearchShowAll.tpl')); } } ?>