Ejemplo n.º 1
0
 public function getDispatchAttrs()
 {
     $attrs = parent::getDispatchAttrs();
     $str = urldecode($attrs[OW_Route::DISPATCH_ATTRS_VARLIST][$this->pathProperty]);
     /* @var $slug OASEO_BOL_Slug */
     $slug = $this->seoService->getSlugForString($this->entityType, $str);
     if ($slug === null) {
         $rnSlug = $this->seoService->findActiveSlugForInactiveOne($this->entityType, $str);
         if ($rnSlug !== null) {
             $generatedUri = '';
             foreach ($this->pathArray as $value) {
                 if (mb_substr($value, 0, 1) !== ':') {
                     $generatedUri .= $value . '/';
                 } else {
                     $varName = mb_substr($value, 1);
                     $generatedUri .= urlencode($varName == $this->pathProperty ? $rnSlug->getString() : $attrs[OW_Route::DISPATCH_ATTRS_VARLIST][$varName]) . '/';
                 }
             }
             throw new RedirectException(OW_URL_HOME . mb_substr($generatedUri, 0, -1));
         } else {
             if (is_numeric($str)) {
                 $slug = $this->seoService->findActiveSlugForEntityItem($this->entityType, $str);
                 if ($slug !== null) {
                     $key = array_search(':' . $this->pathProperty, $this->pathArray);
                     if ($key) {
                         $pathArray = explode('/', OW::getRequest()->getRequestUri());
                         $pathArray[$key] = $slug->getString();
                         $redirectUri = implode('/', $pathArray);
                         OW::getApplication()->redirect(OW_URL_HOME . $redirectUri);
                     }
                 }
             }
         }
     }
     if ($slug !== null) {
         $attrs[OW_Route::DISPATCH_ATTRS_VARLIST][$this->pathProperty] = $slug->getEntityId();
         if (!$this->slugChecked) {
             $this->seoService->checkEntityUpdate($this->entityType, $slug->getEntityId(), $this->serviceCallback, $this->dtoProperty);
             $this->slugChecked = true;
         }
     }
     return $attrs;
 }