Esempio n. 1
0
 /**
  * {@inheritDoc}
  */
 public function switchInstance(InstanceInterface $instance)
 {
     $container = $this->getContainer();
     $container->offsetSet('instance', $instance->getId());
     $url = $this->router->assemble($this->routeMatch->getParams(), ['name' => $this->routeMatch->getMatchedRouteName()]);
     $this->redirect($url);
 }
Esempio n. 2
0
 /**
  * {@inheritDoc}
  */
 public function switchInstance(InstanceInterface $instance)
 {
     if (!array_key_exists('HTTP_HOST', (array) $_SERVER)) {
         throw new Exception\RuntimeException(sprintf('Host not set.'));
     }
     $url = $this->router->assemble($this->routeMatch->getParams(), ['name' => $this->routeMatch->getMatchedRouteName()]);
     $hostNames = explode('.', $_SERVER['HTTP_HOST']);
     $tld = $hostNames[count($hostNames) - 2] . "." . $hostNames[count($hostNames) - 1];
     $url = 'http://' . $instance->getSubdomain() . '.' . $tld . $url;
     $this->redirect($url);
 }
Esempio n. 3
0
 public function onBootstrap(MvcEvent $e)
 {
     $callback = function (MvcEvent $event) {
         $view = $event->getApplication()->getServiceManager()->get('ViewRenderer');
         $config = $event->getApplication()->getConfig();
         $controller = $event->getTarget();
         $rm = $event->getRouteMatch();
         if (!$rm instanceof RouteMatch) {
             $rm = new RouteMatch(array('module' => 'Application', '__NAMESPACE__' => 'Application\\Controller', '__CONTROLLER__' => 'index', 'controller' => 'Application\\Controller\\Index', 'action' => 'index'));
         }
         $params = $rm->getParams();
         $modulo = "";
         if (isset($params['__NAMESPACE__'])) {
             $paramsArray = explode("\\", $params['__NAMESPACE__']);
             $modulo = $paramsArray[0];
         }
         $controller = isset($params['__CONTROLLER__']) ? $params['__CONTROLLER__'] : "";
         $action = isset($params['action']) ? $params['action'] : null;
         $app = $event->getParam('application');
         $sm = $app->getServiceManager();
         $paramsConfig = ['modulo' => strtolower($modulo), 'controller' => strtolower($controller), 'action' => strtolower($action), 'baseHost' => $view->base_path("/"), 'cssStaticHost' => "", 'jsStaticHost' => "", 'statHost' => "", 'eHost' => "", 'statVers' => '?', 'min' => '', 'AppCore' => [], 'AppSandbox' => [], 'AppSchema' => ['modules' => [], 'requires' => []]];
         $view->inlineScript()->appendScript("var yOSON=" . json_encode($paramsConfig, JSON_FORCE_OBJECT));
     };
     $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\\Mvc\\Controller\\AbstractActionController', MvcEvent::EVENT_DISPATCH, $callback, 100);
     $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\\Mvc\\Application', MvcEvent::EVENT_DISPATCH_ERROR, $callback, 100);
 }
Esempio n. 4
0
 /**
  * Returns whether page should be considered active or not
  *
  * This method will compare the page properties against the route matches
  * composed in the object.
  *
  * @param  bool $recursive  [optional] whether page should be considered
  *                          active if any child pages are active. Default is
  *                          false.
  * @return bool             whether page should be considered active or not
  */
 public function isActive($recursive = false)
 {
     if (!$this->active) {
         $reqParams = array();
         if ($this->routeMatch instanceof RouteMatch) {
             $reqParams = $this->routeMatch->getParams();
             if ($this->routeMatch->getMatchedRouteName() === $this->getRoute()) {
                 $this->active = true;
                 return true;
             }
         }
         $myParams = $this->params;
         if (null !== $this->controller) {
             $myParams['controller'] = $this->controller;
         } else {
             /**
              * @todo In ZF1, this was configurable and pulled from the front controller
              */
             $myParams['controller'] = 'index';
         }
         if (null !== $this->action) {
             $myParams['action'] = $this->action;
         } else {
             /**
              * @todo In ZF1, this was configurable and pulled from the front controller
              */
             $myParams['action'] = 'action';
         }
         if (count(array_intersect_assoc($reqParams, $myParams)) == count($myParams)) {
             $this->active = true;
             return true;
         }
     }
     return parent::isActive($recursive);
 }
 /**
  * {@inheritDoc}
  */
 public function isExcluded()
 {
     $matchedRouteName = $this->routeMatch->getMatchedRouteName();
     $matchedRouteParams = $this->routeMatch->getParams();
     $matchedRoutePath = $this->getRoutePath($matchedRouteParams);
     foreach ($this->routes as $route) {
         if (is_string($route) && $route == $matchedRouteName) {
             return true;
         } elseif (is_array($route)) {
             if (isset($route['action']) && $this->getRoutePath($route) == $matchedRoutePath) {
                 return true;
             } elseif (!isset($route['action']) && $route['controller'] == $matchedRouteParams['controller']) {
                 return true;
             }
         }
     }
     return false;
 }
Esempio n. 6
0
 public static function fromRoute(\Zend\Mvc\Router\RouteMatch $route)
 {
     $internalRoute = new self();
     $internalRoute->setRoute($route->getMatchedRouteName());
     $internalRoute->setParams($route->getParams());
     if ($_GET) {
         $internalRoute->setOptions(array('query' => $_GET));
     }
     return $internalRoute;
 }
Esempio n. 7
0
 /**
  * Generates a url given the name of a route.
  *
  * @see Zend\Mvc\Router\RouteInterface::assemble()
  * @see Zend\Router\RouteInterface::assemble()
  * @param  string $name Name of the route
  * @param  array $params Parameters for the link
  * @param  array|Traversable $options Options for the route
  * @param  bool $reuseMatchedParams Whether to reuse matched parameters
  * @return string Url For the link href attribute
  * @throws Exception\RuntimeException If no RouteStackInterface was
  *     provided
  * @throws Exception\RuntimeException If no RouteMatch was provided
  * @throws Exception\RuntimeException If RouteMatch didn't contain a
  *     matched route name
  * @throws Exception\InvalidArgumentException If the params object was not
  *     an array or Traversable object.
  */
 public function __invoke($name = null, $params = [], $options = [], $reuseMatchedParams = false)
 {
     if (null === $this->router) {
         throw new Exception\RuntimeException('No RouteStackInterface instance provided');
     }
     if (3 == func_num_args() && is_bool($options)) {
         $reuseMatchedParams = $options;
         $options = [];
     }
     if ($name === null) {
         if ($this->routeMatch === null) {
             throw new Exception\RuntimeException('No RouteMatch instance provided');
         }
         $name = $this->routeMatch->getMatchedRouteName();
         if ($name === null) {
             throw new Exception\RuntimeException('RouteMatch does not contain a matched route name');
         }
     }
     if (!is_array($params)) {
         if (!$params instanceof Traversable) {
             throw new Exception\InvalidArgumentException('Params is expected to be an array or a Traversable object');
         }
         $params = iterator_to_array($params);
     }
     if ($reuseMatchedParams && $this->routeMatch !== null) {
         $routeMatchParams = $this->routeMatch->getParams();
         if (isset($routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER])) {
             $routeMatchParams['controller'] = $routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER];
             unset($routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER]);
         }
         if (isset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE])) {
             unset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE]);
         }
         $params = array_merge($routeMatchParams, $params);
     }
     $options['name'] = $name;
     return $this->router->assemble($params, $options);
 }
Esempio n. 8
0
 /**
  * Returns whether page should be considered active or not
  *
  * This method will compare the page properties against the route matches
  * composed in the object.
  *
  * @param  bool $recursive  [optional] whether page should be considered
  *                          active if any child pages are active. Default is
  *                          false.
  * @return bool             whether page should be considered active or not
  */
 public function isActive($recursive = false)
 {
     if (!$this->active) {
         $reqParams = array();
         if ($this->routeMatch instanceof RouteMatch) {
             $reqParams = $this->routeMatch->getParams();
             if (isset($reqParams[ModuleRouteListener::ORIGINAL_CONTROLLER])) {
                 $reqParams['controller'] = $reqParams[ModuleRouteListener::ORIGINAL_CONTROLLER];
             }
             $pageParams = $this->params;
             if (null !== $this->controller) {
                 $pageParams['controller'] = $this->controller;
             }
             if (null !== $this->action) {
                 $pageParams['action'] = $this->action;
             }
             if (null !== $this->getRoute()) {
                 if ($this->routeMatch->getMatchedRouteName() === $this->getRoute() && count(array_intersect_assoc($reqParams, $pageParams)) == count($pageParams)) {
                     $this->active = true;
                     return $this->active;
                 } else {
                     return parent::isActive($recursive);
                 }
             }
         }
         $pageParams = $this->params;
         if (null !== $this->controller) {
             $pageParams['controller'] = $this->controller;
         } else {
             /**
              * @todo In ZF1, this was configurable and pulled from the front controller
              */
             $pageParams['controller'] = 'index';
         }
         if (null !== $this->action) {
             $pageParams['action'] = $this->action;
         } else {
             /**
              * @todo In ZF1, this was configurable and pulled from the front controller
              */
             $pageParams['action'] = 'index';
         }
         if (count(array_intersect_assoc($reqParams, $pageParams)) == count($pageParams)) {
             $this->active = true;
             return true;
         }
     }
     return parent::isActive($recursive);
 }
Esempio n. 9
0
 /**
  * Mimics zf1 Request::getParam behavior
  *
  * Route match -> GET -> POST
  */
 public static function staticGetParam(RouteMatch $routeMatch, Request $request, $param = null, $default = null)
 {
     if ($param === null) {
         $params = (array) $routeMatch->getParams();
         if ($request instanceof ConsoleRequest) {
             return $params + (array) $request->getParams();
         }
         return $params + $request->getQuery()->toArray() + $request->getPost()->toArray();
     }
     if ($request instanceof ConsoleRequest) {
         $default = $request->getParam($param, $default);
     } else {
         $default = $request->getQuery($param, $request->getPost($param, $default));
     }
     return $routeMatch->getParam($param, $default);
 }
Esempio n. 10
0
 /**
  * @param MVCEvent $e MVC event Object
  * @return Array nombre de module, controller y action con datos adicionales.
  */
 private function getNamesMVC(MvcEvent $e)
 {
     $rm = $e->getRouteMatch();
     if (!$rm instanceof RouteMatch) {
         $rm = new RouteMatch(array('module' => 'Application', '__NAMESPACE__' => 'Application\\Controller', '__CONTROLLER__' => 'index', 'controller' => 'Application\\Controller\\Index', 'action' => 'index'));
     }
     $params = $rm->getParams();
     $modulo = isset($params['__NAMESPACE__']) ? $params['__NAMESPACE__'] : "";
     $controller = isset($params['__CONTROLLER__']) ? $params['__CONTROLLER__'] : "";
     if (isset($params['controller'])) {
         $paramsArray = explode("\\", $params['controller']);
         $modulo = $paramsArray[0];
         $controller = $paramsArray[2];
     }
     $action = isset($params['action']) ? $params['action'] : null;
     return array('modulo' => strtolower($modulo), 'controller' => strtolower($controller), 'action' => strtolower($action), 'min' => '', 'AppCore' => [], 'AppSandbox' => [], 'AppSchema' => ['modules' => [], 'requires' => []]);
 }
Esempio n. 11
0
 /**
  * Create a successful RouteResult from the given RouteMatch.
  *
  * @param RouteMatch $match
  * @return RouteResult
  */
 private function marshalSuccessResultFromRouteMatch(RouteMatch $match)
 {
     $params = $match->getParams();
     if (array_key_exists(self::METHOD_NOT_ALLOWED_ROUTE, $params)) {
         return RouteResult::fromRouteFailure($this->allowedMethodsByPath[$params[self::METHOD_NOT_ALLOWED_ROUTE]]);
     }
     return RouteResult::fromRouteMatch($this->getMatchedRouteName($match->getMatchedRouteName()), $params['middleware'], $params);
 }
Esempio n. 12
0
 private function prepareParams(RouteMatch $routeMatch, $lang)
 {
     $params = $routeMatch->getParams();
     $params['lang'] = $lang;
     // We want to avoid this situation ie. : "/en/auth/login/index"
     // Otherwise we get: "/en/auth/login", nice and clear
     if ($params['action'] === 'index') {
         $params['action'] = null;
     }
     // We need to set this, because otherwise we achieve this:
     // "/en/auth/Module\\Auth\\Controller\\LoginController"
     $params['controller'] = $params['__CONTROLLER__'];
     return $params;
 }
 /**
  * true if the routeMatch passed has the ACCESS_DQL_PARAM_NAME key
  * as a parameter and the value of the key is an array with elements
  * or a string that is not empty
  *
  * @param RouteMatch $routeMatch
  *
  * @return boolean
  */
 private function hasAccessDqlConfig(RouteMatch $routeMatch)
 {
     if (array_key_exists(self::ACCESS_DQL_PARAM_NAME, $routeMatch->getParams())) {
         $paramValue = $routeMatch->getParam(self::ACCESS_DQL_PARAM_NAME);
         switch (true) {
             case is_array($paramValue):
                 if (count($paramValue) == 0) {
                     return false;
                 } else {
                     return true;
                 }
             case is_string($paramValue):
                 if (empty($paramValue)) {
                     return false;
                 } else {
                     return true;
                 }
             default:
                 return false;
         }
     } else {
         return false;
     }
 }
Esempio n. 14
0
 /**
  * Merge parameters from another match.
  * 
  * @param  RouteMatch $match
  * @return void
  */
 public function merge(self $match)
 {
     $this->params = array_merge($this->params, $match->getParams());
 }
Esempio n. 15
0
 public function testSetParam()
 {
     $match = new RouteMatch(array());
     $match->setParam('foo', 'bar');
     $this->assertEquals(array('foo' => 'bar'), $match->getParams());
 }
Esempio n. 16
0
 /**
  * Load comment data for rendering against matched route
  *
  * Data array:
  * - root: [id, ]module, type, item, active
  * - count
  * - posts: id, uid, ip, content, time, active
  * - users: uid, name, avatar, url
  * - url_list
  * - url_submit
  * - url_ajax
  *
  * @param RouteMatch|array|string $routeMatch
  * @param array $options
  *
  * @return array|bool
  */
 public function load($routeMatch, array $options = array())
 {
     if ($routeMatch instanceof RouteMatch) {
         $params = $routeMatch->getParams();
     } else {
         $params = (array) $routeMatch;
     }
     $limit = Pi::config('leading_limit', 'comment') ?: 5;
     // Look up root against route data
     $root = array();
     $module = $params['module'];
     $controller = $params['controller'];
     $action = $params['action'];
     $typeList = Pi::registry('type', 'comment')->read($module, '', null);
     if (isset($typeList['route'][$controller][$action])) {
         $lookupList = $typeList['route'][$controller][$action];
     } elseif (isset($typeList['locator'])) {
         $lookupList = $typeList['locator'];
     } else {
         return false;
     }
     $active = true;
     $lookup = function ($data) use($params, &$active) {
         // Look up via locator callback
         if (!empty($data['locator'])) {
             $locator = new $data['locator']($params['module']);
             $item = $locator->locate($params);
             $active = $data['active'];
             return $item;
         }
         // Look up via route
         if (!isset($params[$data['identifier']])) {
             return false;
         }
         $item = $params[$data['identifier']];
         if ($data['params']) {
             foreach ($data['params'] as $param => $value) {
                 if (!isset($params[$param]) || $value != $params[$param]) {
                     return false;
                 }
             }
         }
         $active = $data['active'];
         return $item;
     };
     // Look up against controller-action
     foreach ($lookupList as $key => $data) {
         $item = $lookup($data, $active);
         if ($item) {
             $root = array('module' => $module, 'type' => $key, 'item' => $item);
             break;
         }
     }
     if (!$root) {
         return false;
     }
     // Load translations
     Pi::service('i18n')->load('module/comment:default');
     $rootData = $this->getRoot($root);
     if (!$active) {
         $root['active'] = 0;
         $rootData['active'] = 0;
     }
     // Check against cache
     if ($rootData['id']) {
         $result = Pi::service('comment')->loadCache($rootData['id']);
         if ($result) {
             if (Pi::service()->hasService('log')) {
                 Pi::service('log')->info(sprintf('Comment root %d is cached.', $rootData['id']));
             }
             if (!$active) {
                 $result['root']['active'] = 0;
             }
             return $result;
         }
     }
     $result = array('root' => $rootData ?: $root, 'count' => 0, 'posts' => array(), 'users' => array(), 'url_list' => '', 'url_submit' => $this->getUrl('submit'));
     if ($rootData) {
         $result['count'] = $this->getCount($rootData['id']);
         //vd($result['count']);
         if ($result['count']) {
             $posts = $this->getList($rootData['id'], $limit);
             $opOption = isset($options['display_operation']) ? $options['display_operation'] : Pi::service('config')->module('display_operation', 'comment');
             $avatarOption = isset($options['avatar']) ? $options['avatar'] : 'medium';
             $renderOptions = array('target' => false, 'operation' => $opOption, 'user' => array('avatar' => $avatarOption));
             $posts = $this->renderList($posts, $renderOptions);
             $result['posts'] = $posts;
             $result['url_list'] = $this->getUrl('root', array('root' => $rootData['id']));
             $status = Pi::service('comment')->saveCache($rootData['id'], $result);
             if ($status && Pi::service()->hasService('log')) {
                 Pi::service('log')->info(sprintf('Comment root %d is saved to cache.', $rootData['id']));
             }
         }
     }
     return $result;
 }
Esempio n. 17
0
 /**
  * @param \Zend\Mvc\Router\RouteMatch $match
  */
 public function genCacheName(RouteMatch $match)
 {
     $params = $match->getParams();
     $pageId = (int) $params['pageId'];
     return $pageId;
 }
Esempio n. 18
0
 /**
  * Generates valid page cache key
  *
  * @param RouteMatch $match
  * @param string $prefix
  * @return string
  */
 protected function pageCacheKey(RouteMatch $match, $prefix = 'pagecache_')
 {
     return $prefix . str_replace('/', '-', $match->getMatchedRouteName()) . '_' . md5(serialize($match->getParams()));
 }
Esempio n. 19
0
 /**
  * Create a succesful RouteResult from the given RouteMatch.
  *
  * @param RouteMatch $match
  * @return RouteResult
  */
 private function marshalSuccessResultFromRouteMatch(RouteMatch $match)
 {
     $params = $match->getParams();
     $middleware = isset($params['middleware']) ? $params['middleware'] : $this->getMiddlewareFromRoute($match->getMatchedRouteName());
     return RouteResult::fromRouteMatch($match->getMatchedRouteName(), $middleware, $params);
 }
Esempio n. 20
0
 /**
  * Translate a routematch
  * Will be used by the Module bootstrap
  *
  * @param RouteMatch $routeMatch
  * @return void
  */
 public function translateRouteMatch(RouteMatch $routeMatch)
 {
     $params = $routeMatch->getParams();
     $routeName = $routeMatch->getMatchedRouteName();
     $result = $this->translate($routeName, self::NAMESPACE_ROUTE_MATCH);
     if ($result === $routeName) {
         return;
     }
     foreach ($params as $key => $value) {
         $translateKey = "{$routeName}.{$key}.{$value}";
         $result = $this->translate($translateKey, self::NAMESPACE_ROUTE_MATCH);
         if ($result !== $translateKey) {
             $routeMatch->setParam($key, $result);
         }
     }
 }