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('*/*/');
     }
 }
 protected function _beforeDelete()
 {
     AW_Kbase_Helper_Data::removeDirectory(AW_Kbase_Helper_Data::attachmentDirName($this->getId()));
     return parent::_beforeDelete();
 }