Esempio n. 1
0
 /**
  *
  * @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);
 }
Esempio n. 2
0
 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);
 }
Esempio n. 3
0
 /**
  * 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;
     }
 }
Esempio n. 4
0
 /**
  * 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');
 }
Esempio n. 5
0
 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;
 }