*/ /** * Required classes */ GalleryCoreApi::requireOnce(dirname(__FILE__) . '/classes/CartHelper.class'); /** * This view will allow users to view their individual carts * * @package Comment * @subpackage UserInterface */ class ViewCartView extends GalleryView { /** * @see GalleryView::loadTemplate */ function loadTemplate(&$template, &$form) { global $gallery; list ($ret, $itemList) = CartHelper::loadCartItems(); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } list ($ret, $cartItemIds) = CartHelper::fetchCartItemCounts(); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } if ($form['formName'] != 'ViewCart') { /* First time around, initialize the cart counts */ foreach ($cartItemIds as $itemId => $count) { $form['counts'][$itemId] = $count; } $form['formName'] = 'ViewCart'; } $ViewCart = array(); /* Bring in the root album information for the breadcrumb */ list ($ret, $rootAlbumId) = GalleryCoreApi::getPluginParameter('module', 'core', 'id.rootAlbum'); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } list ($ret, $rootAlbum) = GalleryCoreApi::loadEntitiesById($rootAlbumId); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } $ViewCart['rootAlbum'] = $rootAlbum->getMemberData(); /* Get system links */ list ($ret, $moduleSystemLinks) = $this->_getModuleSystemLinks(); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } /* Find all our cart plugins */ GalleryCoreApi::requireOnce(dirname(__FILE__) . '/classes/CartPluginInterface_1_0.class'); list ($ret, $ids) = GalleryCoreApi::getAllFactoryImplementationIds('CartPluginInterface_1_0'); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } $plugins = array(); foreach ($ids as $id => $className) { list ($ret, $instances[$id]) = GalleryCoreApi::newFactoryInstance('CartPluginInterface_1_0', $className); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } /* * Figure out what types each plugin can handle so that we can cue the UI * to only send it the ones of the appropriate types. */ $plugins[$id]['supportedItemTypes'] = $instances[$id]->getSupportedItemTypes(); list ($ret, $plugins[$id]['actionDisplayName']) = $instances[$id]->getActionDisplayName(); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } } $items = array(); $thumbnails = array(); $itemTypeNames = array(); if (!empty($cartItemIds)) { foreach ($itemList as $item) { $items[$item->getId()] = $item->getMemberData(); /* TODO: This is a O(N^3) operation -- probably should be optimized */ foreach ($plugins as $pluginId => $pluginData) { foreach ($pluginData['supportedItemTypes'] as $type) { if ($type == '*') { $plugins[$id]['supported'][$item->getId()] = 1; break; } else { if (GalleryUtilities::isA($item, $type)) { $plugins[$id]['supported'][$item->getId()] = 1; break; } } } } $itemTypeNames[$item->getId()] = $item->itemTypeName(); } /* Fetch thumbnails */ list ($ret, $thumbnailList) = GalleryCoreApi::fetchThumbnailsByItemIds(array_keys($cartItemIds)); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } foreach ($thumbnailList as $thumbnail) { $thumbnails[$thumbnail->getParentId()] = $thumbnail->getMemberData(); } } $ViewCart['moduleSystemLinks'] = $moduleSystemLinks; $ViewCart['items'] = $items; $ViewCart['itemTypeNames'] = $itemTypeNames; $ViewCart['thumbnails'] = $thumbnails; $ViewCart['plugins'] = $plugins; $ViewCart['controller'] = 'cart:ModifyCart'; $template->setVariable('ViewCart', $ViewCart); 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', 'cart'); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } $template->title($module->translate('View Your Cart')); return array(GalleryStatus::success(), array('body' => 'modules/cart/templates/ViewCart.tpl')); } /** * @see GalleryView::getViewDescription() */ function getViewDescription() { list ($ret, $module) = GalleryCoreApi::loadPlugin('module', 'cart'); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null, null); } return array(GalleryStatus::success(), $module->translate('view cart')); } } ?>