/** * * @param Zend_Controller_Request_Abstract $request * @return void */ public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { if (Axis_Area::isFrontend() && null !== $request->getParam('locale')) { $locale = $request->getParam('locale'); } elseif (isset(Axis::session()->locale)) { $locale = Axis::session()->locale; } else { $locale = Axis_Locale::getDefaultLocale(); } Axis_Locale::setLocale($locale); }
public function preDispatch() { $request = $this->getRequest(); if (Axis_Area::isFrontend()) { if (!Axis::getCustomerId() && $this->getActionController() instanceof Axis_Account_Controller_Abstract) { $request->setModuleName('Axis_Account')->setControllerName('auth')->setActionName('index')->setDispatched(false); } return; } if (!Axis_Area::isBackend()) { return; } $auth = Zend_Auth::getInstance(); $auth->setStorage(new Zend_Auth_Storage_Session('admin')); if (in_array($request->getControllerName(), array('auth', 'forgot')) && 'Axis_Admin' === $request->getModuleName()) { return; } if (!$auth->hasIdentity()) { if ($request->isXmlHttpRequest()) { Axis::message()->addError(Axis::translate('admin')->__('Your session has been expired. Please relogin')); $jsonHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $jsonHelper->sendFailure(); return; } $request->setModuleName('Axis_Admin')->setControllerName('auth')->setActionName('index')->setDispatched(false); return; } $user = Axis::single('admin/user')->find($auth->getIdentity())->current(); if (!$user) { $request->setModuleName('Axis_Admin')->setControllerName('auth')->setActionName('logout')->setDispatched(false); return; } $acl = new Zend_Acl(); // add resources $resources = Axis::model('admin/acl_resource')->toFlatTree(); foreach ($resources as $resource) { $parent = $resource['parent']; try { $acl->addResource($resource['id'], $parent); } catch (Zend_Acl_Exception $e) { Axis::message()->addError($e->getMessage()); } } //add role(s) $role = (string) $user->role_id; $acl->addRole($role); //add permission $rowset = Axis::single('admin/acl_rule')->select('*')->where('role_id = ?', $role)->fetchRowset(); foreach ($rowset as $row) { if (!$acl->has($row->resource_id)) { // $row->delete(); // remove invalid rule continue; } $action = 'deny'; if ('allow' === $row->permission) { $action = 'allow'; } try { $acl->{$action}($row->role_id, $row->resource_id); } catch (Zend_Acl_Exception $e) { Axis::message()->addError($e->getMessage()); } } Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl); Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole($role); if (in_array($request->getControllerName(), array('error')) && 'Axis_Admin' === $request->getModuleName()) { return; } //get current resource by request $request = $this->getRequest(); $inflector = new Zend_Filter_Inflector(); $resource = $inflector->addRules(array(':module' => array('Word_CamelCaseToDash', new Zend_Filter_Word_UnderscoreToSeparator('/'), 'StringToLower'), ':controller' => array('Word_CamelCaseToDash', 'StringToLower', new Zend_Filter_PregReplace('/admin_/', '')), ':action' => array('Word_CamelCaseToDash', 'StringToLower')))->setTarget('admin/:module/:controller/:action')->filter($request->getParams()); if (!$acl->has($resource) || $acl->isAllowed($role, $resource)) { return; } if ($request->isXmlHttpRequest()) { Axis::message()->addError(Axis::translate('admin')->__('You have no permission for this operation')); $jsonHelper = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $jsonHelper->sendFailure(); return; } $request->setModuleName('Axis_Admin')->setControllerName('error')->setActionName('access-denied')->setDispatched(false); }
/** * postDispatch() plugin hook -- render layout * * @param Zend_Controller_Request_Abstract $request * @return void */ public function postDispatch(Zend_Controller_Request_Abstract $request) { $layout = $this->getLayout(); $helper = $this->getLayoutActionHelper(); // Return early if forward detected if (!$request->isDispatched() || $this->getResponse()->isRedirect() || $layout->getMvcSuccessfulActionOnly() && (!empty($helper) && !$helper->isActionControllerSuccessful())) { $layout->setLayout(null); return; } // Return early if layout has been disabled if (!$layout->isEnabled()) { return; } // two logic mix $layoutName = $layout->getLayout(); if (Axis_Area::isFrontend()) { $this->_initPages(); if (empty($layoutName)) { $layoutName = $this->_getLayoutName(); } $this->_initBlockAssigns(); } elseif (empty($layoutName)) { $layoutName = 'layout'; } $layout->setLayout($layoutName, false); $response = $this->getResponse(); $content = $response->getBody(true); $contentKey = $layout->getContentKey(); if (isset($content['default'])) { $content[$contentKey] = $content['default']; } if ('default' != $contentKey) { unset($content['default']); } $layout->assign($content); $fullContent = null; $obStartLevel = ob_get_level(); try { $fullContent = $layout->render(); $response->setBody($fullContent); } catch (Exception $e) { while (ob_get_level() > $obStartLevel) { $fullContent .= ob_get_clean(); } $request->setParam('layoutFullContent', $fullContent); $request->setParam('layoutContent', $layout->content); $response->setBody(null); throw $e; } }
/** * Retrieve locale object * * @static * @return Zend_Locale */ public static function getLocale() { if (!Zend_Registry::isRegistered('Zend_Locale')) { if (Axis_Area::isFrontend() && Axis_Controller_Router_Route_Front::hasLocaleInUrl()) { self::setLocale(Axis_Controller_Router_Route_Front::getCurrentLocale()); } elseif (Axis_Area::isBackend() && isset(Axis::session()->locale)) { self::setLocale(Axis::session()->locale); } elseif (Axis_Area::isInstaller() && isset(Axis::session('install')->current_locale)) { self::setLocale(Axis::session('install')->current_locale); } elseif (Axis_Area::isInstaller()) { self::setLocale(self::DEFAULT_LOCALE); } else { self::setLocale(Axis::config('locale/main/locale')); } } return Zend_Registry::get('Zend_Locale'); }
public function getKeywords() { if (!Axis_Area::isFrontend()) { return array(); } $path = urldecode($this->getRequest()->getPathInfo()); $keywords = explode('/', trim($path, '/')); $route = Zend_Controller_Front::getInstance()->getRouter()->getCurrentRoute(); if ($route->hasLocaleInUrl()) { array_shift($keywords); //remove locale from array } array_shift($keywords); //remove root catalog from array return $keywords; }