예제 #1
0
 public function preparePage()
 {
     $this->addBreadcrumb($this->__('Home'), Mage::getBaseUrl(), $this->__('Go to Home Page'))->addBreadcrumb(Mage::getStoreConfig('kbase/general/title'), AW_Kbase_Helper_Url::getUrl(AW_Kbase_Helper_Url::URL_TYPE_MAIN), $this->__('Go to %s homepage', Mage::getStoreConfig('kbase/general/title')));
     $category = $this->getCategory();
     if ($category) {
         $this->addBreadcrumb($category->getCategoryName(), AW_Kbase_Helper_Url::getUrl(AW_Kbase_Helper_Url::URL_TYPE_CATEGORY, $category->getData()));
     }
     $article = $this->getArticle();
     $this->addBreadcrumb($article->getArticleTitle(), false);
     $headBlock = $this->getLayout()->getBlock('head');
     $breadcrumbs = $this->getChild('kbase_breadcrumbs');
     if ($headBlock) {
         $title = $article->getMetaTitle();
         if ($title) {
             $headBlock->setTitle($title);
         } elseif ($breadcrumbs) {
             $headBlock->setTitle($breadcrumbs->getPageTitle());
         }
         $keywords = $article->getMetaKeywords();
         if ($keywords) {
             $headBlock->setKeywords($keywords);
         }
         $description = $article->getMetaDescription();
         if ($description) {
             $headBlock->setDescription($description);
         }
     }
     return $this;
 }
예제 #2
0
 public function match(Zend_Controller_Request_Http $request)
 {
     if (!Mage::app()->isInstalled()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('install'))->sendResponse();
         exit;
     }
     return AW_Kbase_Helper_Url::matchUrl($request);
 }
 public function saveAction()
 {
     $session = Mage::getSingleton('adminhtml/session');
     if ($data = $this->getRequest()->getPost()) {
         try {
             $id = $this->getRequest()->getParam('id');
             // checking store IDs
             if (!isset($data['category_store_ids'])) {
                 $data['category_store_ids'] = Mage::getSingleton('core/store')->getGroup()->getStoreIds();
             }
             if (!is_array($data['category_store_ids'])) {
                 $data['category_store_ids'] = implode(',', $data['category_store_ids']);
             }
             if (in_array(0, $data['category_store_ids'])) {
                 $data['category_store_ids'] = array_keys(Mage::app()->getStores(false));
             }
             // checking URL key
             if (!isset($data['category_url_key']) || !$data['category_url_key']) {
                 $data['category_url_key'] = $data['category_name'];
             }
             $data['category_url_key'] = AW_Kbase_Helper_Url::nameToUrlKey($data['category_url_key']);
             $model = Mage::getModel('kbase/category')->setData($data)->setId($id);
             if ($model->isUrlKeyUsed()) {
                 $session->addError($this->__('URL key is not unique within category store views'));
                 $session->setKBaseCategoryData($data);
                 $this->_redirect('*/*/edit', array('id' => $id));
                 return;
             }
             $model->save();
             $session->addSuccess($this->__('Category was successfully saved'));
             $session->setKBaseCategoryData(false);
             if ($this->getRequest()->getParam('back')) {
                 $this->_redirect('*/*/edit', array('id' => $model->getId()));
                 return;
             }
             $this->_redirect('*/*/');
             return;
         } catch (Exception $e) {
             Mage::logException($e);
             $session->addError($e->getMessage());
             $session->setKBaseCategoryData($data);
             $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
             return;
         }
     } else {
         $session->addError($this->__('Unable to find an category to save'));
         $this->_redirect('*/*/');
     }
 }
예제 #4
0
 public static function getSorterUrl($params)
 {
     return AW_Kbase_Helper_Url::getUrlWithParams($params);
 }
 public function searchAction()
 {
     $this->_checkRegistered();
     $this->_checkFrontendEnabled();
     if (!($query = ($key = AW_Kbase_Helper_Url::getParam(AW_Kbase_Helper_Url::URL_PARAM_NAME_QUERY)) ? $key : $this->getRequest()->getParam(AW_Kbase_Helper_Url::URL_PARAM_NAME_QUERY))) {
         $this->redirectHome();
         return;
     }
     $this->loadLayout()->getLayout()->getBlock('kbase_search')->setQuery($query)->preparePage();
     $this->renderLayout();
 }
 public function saveAction()
 {
     $session = Mage::getSingleton('adminhtml/session');
     if ($data = $this->getRequest()->getPost()) {
         try {
             $data['article_tags'] = implode(', ', Mage::helper('kbase')->prepareTags($data['article_tags']));
             $id = $this->getRequest()->getParam('id');
             $_article = Mage::getModel('kbase/article')->load($id);
             $_oldSelectedCategories = $_article->getData('category_ids');
             $_currentAllCategories = AW_Kbase_Model_Mysql4_Category::toOptionArray();
             $_currentAllCategoriesFlat = array();
             foreach ($_currentAllCategories as $k => $v) {
                 if (isset($v['value'])) {
                     $_currentAllCategoriesFlat[] = $v['value'];
                 }
             }
             $data['category_ids'] = array_merge($data['category_ids'], array_values(array_diff($_oldSelectedCategories, $_currentAllCategoriesFlat)));
             unset($_article);
             $fileUploadNeeded = isset($_FILES['article_attachment']['name']) && $_FILES['article_attachment']['name'];
             // delete file if checkbox checked
             if (isset($data['article_attachment_delete']) && isset($data['article_attachment_old']) && $data['article_attachment_old']) {
                 @unlink(AW_Kbase_Helper_Data::attachmentDirName($id) . DS . $data['article_attachment_old']);
                 $data['article_attachment'] = '';
             }
             // checking creation & updating date
             if (!isset($data['article_date_created']) || !$data['article_date_created']) {
                 $data['article_date_created'] = now();
             }
             $data['article_date_updated'] = now();
             // end of time checking
             // checking rating
             $data['article_rating_votes'] = abs($data['article_rating_votes']);
             if (1 > $data['article_rating'] || 5 < $data['article_rating']) {
                 $session->addError($this->__('Rating should be between 1 and 5'));
                 $session->setKBaseArticleData($data);
                 $this->_redirect('*/*/edit', array('id' => $id, 'tab' => 'rating'));
                 return;
             }
             // checking URL key
             if (!isset($data['article_url_key']) || !$data['article_url_key']) {
                 $data['article_url_key'] = $data['article_title'];
             }
             $data['article_url_key'] = AW_Kbase_Helper_Url::nameToUrlKey($data['article_url_key']);
             $model = Mage::getModel('kbase/article')->setData($data)->setId($id);
             //checking URL keys uniqueness
             $_origUrlKey = $data['article_url_key'];
             $_cnt = 1;
             $_categoryModel = Mage::getModel('kbase/category');
             $_categoryModel->setCategoryStoreIds($model->getResource()->getCategorySetStoreIds($model->getCategoryIds()))->setCategoryUrlKey($data['article_url_key']);
             while ($model->isUrlKeyUsed() || $_categoryModel->isUrlKeyUsed()) {
                 $model->setData('article_url_key', sprintf("%s-%d", $_origUrlKey, $_cnt));
                 $_categoryModel->setCategoryUrlKey(sprintf("%s-%d", $_origUrlKey, $_cnt++));
             }
             if (!$id && $fileUploadNeeded) {
                 $model->save();
                 $id = $model->getId();
             }
             if ($fileUploadNeeded) {
                 $uploader = new Varien_File_Uploader('article_attachment');
                 $uploader->setAllowedExtensions(null)->setAllowRenameFiles(false)->setAllowCreateFolders(true)->setFilesDispersion(false);
                 $uploader->save(AW_Kbase_Helper_Data::attachmentDirName($id), $_FILES['article_attachment']['name']);
                 $model->setArticleAttachment($uploader->getUploadedFileName());
             }
             $model->save();
             $session->addSuccess($this->__('Article was successfully saved'));
             $session->setKBaseArticleData(false);
             if ($this->getRequest()->getParam('back')) {
                 $this->_redirect('*/*/edit', array('id' => $model->getId()));
                 return;
             }
             $this->_redirect('*/*/');
             return;
         } catch (Exception $e) {
             Mage::logException($e);
             $session->addError($e->getMessage());
             $session->setKBaseArticleData($data);
             $this->_redirect('*/*/edit', array('id' => $id));
             return;
         }
     } else {
         $session->addError($this->__('Unable to find an article to save'));
         $this->_redirect('*/*/');
     }
 }
예제 #7
0
 public static function matchUrl(Zend_Controller_Request_Http $request)
 {
     if (AW_Kbase_Helper_Data::isModuleOutputDisabled() || !AW_Kbase_Helper_Data::getFrontendEnabled()) {
         return false;
     }
     $urlKey = self::getModuleUrlKey();
     $pathInfo = $request->getPathInfo();
     $requestUri = $request->getRequestUri();
     if ($request->getParam('___from_store')) {
         $_fromStore = Mage::app()->getSafeStore($request->getParam('___from_store'));
         if ($_fromStore->getData()) {
             $_oldUrlKey = self::getModuleUrlKeyFromConfig($_fromStore);
             if (strpos($pathInfo, '/' . $_oldUrlKey) === 0 && $_oldUrlKey != $urlKey) {
                 $_newUrl = self::secureUrl(Mage::getBaseUrl() . $urlKey . '/');
                 $response = Mage::app()->getResponse();
                 $response->setRedirect($_newUrl);
                 $response->sendHeaders();
                 $request->setDispatched(true);
                 return true;
             }
         }
     }
     if (0 !== strpos($pathInfo, '/' . $urlKey . '/')) {
         // if path does not begin with /kbase/
         return false;
     }
     $pathInfo = substr($pathInfo, strlen($urlKey) + 2);
     $request->setModuleName('kbase')->setControllerName('article');
     if (!strlen($pathInfo)) {
         $request->setActionName('index');
         return AW_Kbase_Helper_Data::getFrontendEnabled() && self::cacheRewrite($request->getPathInfo(), 'kbase/article/index');
     }
     $urlKeySuffix = self::getUrlKeySuffix();
     $isArticle = false;
     if (!$urlKeySuffix) {
         $_path = explode('/', $pathInfo);
         $_aUrl = false;
         if (count($_path) == 1) {
             $_aUrl = $_path[0];
         }
         if (count($_path) == 2) {
             $_aUrl = $_path[1];
         }
         if ($_aUrl) {
             $_aUrl = urldecode($_aUrl);
             $_aId = Mage::getModel('kbase/article')->getResource()->getIdByUrlKey($_aUrl);
             if (!$_aId) {
                 $_aId = Mage::getModel('kbase/article')->getResource()->getIdByUrlKey($_aUrl, true);
             }
             if ($_aId) {
                 $isArticle = true;
             }
         }
     }
     /**
      * Checking is customer comes from other store view
      * having various article suffix id in comparison
      * with current
      */
     if ($request->getParam('___from_store') && !$isArticle) {
         if (!isset($_fromStore)) {
             $_fromStore = Mage::app()->getSafeStore($request->getParam('___from_store'));
         }
         if ($_fromStore->getData()) {
             $_oldUrlSuffix = self::getUrlKeySuffixFromConfig($_fromStore);
             if ($urlKeySuffix != $_oldUrlSuffix) {
                 $_path = explode('/', $pathInfo);
                 $_aUrl = false;
                 if (count($_path) == 1) {
                     $_aUrl = $_path[0];
                 }
                 if (count($_path) == 2) {
                     $_aUrl = $_path[1];
                 }
                 if ($_aUrl) {
                     $_articleUrlKey = substr($_aUrl, 0, strpos($_aUrl, $_oldUrlSuffix));
                     $_aId = Mage::getModel('kbase/article')->getResource()->getIdByUrlKey($_articleUrlKey);
                     if (!$_aId) {
                         $_aId = Mage::getModel('kbase/article')->getResource()->getIdByUrlKey($_articleUrlKey, true);
                     }
                     if ($_aId) {
                         $_storeIds = Mage::getModel('kbase/article')->getResource()->getArticleStoreIds($_aId);
                         if (in_array(Mage::app()->getStore()->getId(), $_storeIds)) {
                             $_newUrl = self::secureUrl(Mage::getBaseUrl() . $urlKey . '/' . $_articleUrlKey . $urlKeySuffix);
                             $response = Mage::app()->getResponse();
                             $response->setRedirect($_newUrl);
                             $response->sendHeaders();
                             $request->setDispatched(true);
                             return true;
                         }
                     }
                 }
             }
         }
     }
     if ($urlKeySuffix && '/' != $urlKeySuffix && $urlKeySuffix == substr($pathInfo, -strlen($urlKeySuffix)) || $isArticle) {
         $pathInfo = substr($pathInfo, 0, strlen($pathInfo) - strlen($urlKeySuffix));
         $path = explode('/', $pathInfo);
         if (count($path) == 1) {
             $request->setActionName('article');
             self::$_queryParams[self::URL_PARAM_NAME_ARTICLE] = $path[0];
             return self::cacheRewrite($request->getPathInfo(), 'kbase/article/article/' . self::URL_PARAM_NAME_ARTICLE . '/' . $path[0]);
         } elseif (count($path) == 2) {
             $request->setActionName('article');
             self::$_queryParams[self::URL_PARAM_NAME_CATEGORY] = $path[0];
             self::$_queryParams[self::URL_PARAM_NAME_ARTICLE] = $path[1];
             return self::cacheRewrite($request->getPathInfo(), 'kbase/article/article/' . self::URL_PARAM_NAME_CATEGORY . '/' . $path[0] . '/' . self::URL_PARAM_NAME_ARTICLE . '/' . $path[1]);
         }
         return false;
     }
     // since further there will be listing pages only, we should check the condition here
     if (!Mage::getStoreConfig('kbase/general/frontent_enabled')) {
         return false;
     }
     // init parameters with optional ones
     self::$_queryParams = array(self::URL_PARAM_NAME_LIMIT => false, self::URL_PARAM_NAME_PAGE => false, self::URL_PARAM_NAME_SORT => false, self::URL_PARAM_NAME_SORT_DIR => false, self::URL_PARAM_NAME_QUERY => false);
     $pathInfo = substr($pathInfo, 0, strlen($pathInfo) - 1);
     $path = explode('/', $pathInfo);
     for ($i = count($path) - 1; $i > 0; $i -= 2) {
         $paramName = $path[$i - 1];
         if (array_key_exists($paramName, self::$_queryParams)) {
             //                for(; $path[$i] != $decoded = urldecode($path[$i]); $path[$i] = $decoded);
             //                self::$_queryParams[$paramName] = $path[$i];
             self::$_queryParams[$paramName] = urldecode($path[$i]);
             unset($path[$i]);
             unset($path[$i - 1]);
         }
     }
     foreach (self::$_queryParams as $paramName => $value) {
         if ($value = self::getQueryParam($requestUri, $paramName)) {
             self::$_queryParams[$paramName] = urldecode($value);
             $requestUri = self::unsetQueryParam($requestUri, $paramName);
         }
     }
     if (1 == count($path)) {
         if ('search' == $path[0]) {
             // if there were known parameters passed as query params
             if ($requestUri != $request->getRequestUri()) {
                 foreach (self::$_queryParams as $name => $value) {
                     if ($value) {
                         self::$_queryParams[$name] = self::encodeSpecialChars($value);
                     }
                 }
                 Mage::app()->getFrontController()->getResponse()->setRedirect(self::getUrl(self::URL_TYPE_SEARCH, self::$_queryParams))->sendResponse();
                 exit;
             }
             $request->setActionName('search');
             return true;
         }
         $request->setActionName('category');
         self::$_queryParams[self::URL_PARAM_NAME_CATEGORY] = $path[0];
         return true;
     } elseif (2 == count($path) && 'tag' == $path[0] && $path[1]) {
         $request->setActionName('tag');
         self::$_queryParams[self::URL_PARAM_NAME_TAG] = $path[1];
         return true;
     }
     return false;
 }
예제 #8
0
 public function getLimit()
 {
     if ($this->_limit !== null) {
         return $this->_limit;
     }
     $limits = $this->getAvailableLimit();
     $session = Mage::getSingleton('core/session');
     $saveToSession = false;
     if ($limit = (int) AW_Kbase_Helper_Url::getParam($this->getLimitVarName())) {
         $saveToSession = true;
     } elseif ($limit = $this->getRequest()->getParam($this->getLimitVarName())) {
         $saveToSession = true;
     } else {
         $limit = $session->getKbasePagerLimit();
     }
     if ($limit && isset($limits[$limit])) {
         if ($saveToSession) {
             $session->setKbasePagerLimit($limit);
         }
         return $limit;
     }
     $limits = array_keys($limits);
     return $limits[0];
 }
예제 #9
0
 protected function _preparePage()
 {
     $this->addBreadcrumb($this->__('Home'), Mage::getBaseUrl(), $this->__('Go to Home Page'))->addBreadcrumb($this->__(Mage::getStoreConfig('kbase/general/title')), AW_Kbase_Helper_Url::getUrl(AW_Kbase_Helper_Url::URL_TYPE_MAIN), $this->__('Go to Knowledge Base Home Page'));
     return $this;
 }