loadLayout() ->_setActiveMenu('catalog/system_sitemap') ->_addBreadcrumb( Mage::helper('catalog')->__('Catalog'), Mage::helper('catalog')->__('Catalog')) ->_addBreadcrumb( Mage::helper('sitemap')->__('Google Sitemap'), Mage::helper('sitemap')->__('Google Sitemap')) ; return $this; } /** * Index action */ public function indexAction() { $this->_title($this->__('Catalog'))->_title($this->__('Google Sitemaps')); $this->_initAction() ->_addContent($this->getLayout()->createBlock('adminhtml/sitemap')) ->renderLayout(); } /** * Create new sitemap */ public function newAction() { // the same form is used to create and edit $this->_forward('edit'); } /** * Edit sitemap */ public function editAction() { $this->_title($this->__('Catalog'))->_title($this->__('Google Sitemaps')); // 1. Get ID and create model $id = $this->getRequest()->getParam('sitemap_id'); $model = Mage::getModel('sitemap/sitemap'); // 2. Initial checking if ($id) { $model->load($id); if (! $model->getId()) { Mage::getSingleton('adminhtml/session')->addError( Mage::helper('sitemap')->__('This sitemap no longer exists.')); $this->_redirect('*/*/'); return; } } $this->_title($model->getId() ? $model->getSitemapFilename() : $this->__('New Sitemap')); // 3. Set entered data if was error when we do save $data = Mage::getSingleton('adminhtml/session')->getFormData(true); if (! empty($data)) { $model->setData($data); } // 4. Register model to use later in blocks Mage::register('sitemap_sitemap', $model); // 5. Build edit form $this->_initAction() ->_addBreadcrumb( $id ? Mage::helper('sitemap')->__('Edit Sitemap') : Mage::helper('sitemap')->__('New Sitemap'), $id ? Mage::helper('sitemap')->__('Edit Sitemap') : Mage::helper('sitemap')->__('New Sitemap')) ->_addContent($this->getLayout()->createBlock('adminhtml/sitemap_edit')) ->renderLayout(); } /** * Save action */ public function saveAction() { // check if data sent if ($data = $this->getRequest()->getPost()) { // init model and set data $model = Mage::getModel('sitemap/sitemap'); //validate path to generate if (!empty($data['sitemap_filename']) && !empty($data['sitemap_path'])) { $path = rtrim($data['sitemap_path'], '\\/') . DS . $data['sitemap_filename']; /** @var $validator Mage_Core_Model_File_Validator_AvailablePath */ $validator = Mage::getModel('core/file_validator_availablePath'); /** @var $helper Mage_Adminhtml_Helper_Catalog */ $helper = Mage::helper('adminhtml/catalog'); $validator->setPaths($helper->getSitemapValidPaths()); if (!$validator->isValid($path)) { foreach ($validator->getMessages() as $message) { Mage::getSingleton('adminhtml/session')->addError($message); } // save data in session Mage::getSingleton('adminhtml/session')->setFormData($data); // redirect to edit form $this->_redirect('*/*/edit', array( 'sitemap_id' => $this->getRequest()->getParam('sitemap_id'))); return; } } if ($this->getRequest()->getParam('sitemap_id')) { $model ->load($this->getRequest()->getParam('sitemap_id')); if ($model->getSitemapFilename() && file_exists($model->getPreparedFilename())){ unlink($model->getPreparedFilename()); } } $model->setData($data); // try to save it try { // save the data $model->save(); // display success message Mage::getSingleton('adminhtml/session')->addSuccess( Mage::helper('sitemap')->__('The sitemap has been saved.')); // clear previously saved data from session Mage::getSingleton('adminhtml/session')->setFormData(false); // check if 'Save and Continue' if ($this->getRequest()->getParam('back')) { $this->_redirect('*/*/edit', array('sitemap_id' => $model->getId())); return; } // go to grid or forward to generate action if ($this->getRequest()->getParam('generate')) { $this->getRequest()->setParam('sitemap_id', $model->getId()); $this->_forward('generate'); return; } $this->_redirect('*/*/'); return; } catch (Exception $e) { // display error message Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); // save data in session Mage::getSingleton('adminhtml/session')->setFormData($data); // redirect to edit form $this->_redirect('*/*/edit', array( 'sitemap_id' => $this->getRequest()->getParam('sitemap_id'))); return; } } $this->_redirect('*/*/'); } /** * Delete action */ public function deleteAction() { // check if we know what should be deleted if ($id = $this->getRequest()->getParam('sitemap_id')) { try { // init model and delete $model = Mage::getModel('sitemap/sitemap'); $model->setId($id); // init and load sitemap model /* @var $sitemap Mage_Sitemap_Model_Sitemap */ $model->load($id); // delete file if ($model->getSitemapFilename() && file_exists($model->getPreparedFilename())){ unlink($model->getPreparedFilename()); } $model->delete(); // display success message Mage::getSingleton('adminhtml/session')->addSuccess( Mage::helper('sitemap')->__('The sitemap has been deleted.')); // go to grid $this->_redirect('*/*/'); return; } catch (Exception $e) { // display error message Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); // go back to edit form $this->_redirect('*/*/edit', array('sitemap_id' => $id)); return; } } // display error message Mage::getSingleton('adminhtml/session')->addError( Mage::helper('sitemap')->__('Unable to find a sitemap to delete.')); // go to grid $this->_redirect('*/*/'); } /** * Generate sitemap */ public function generateAction() { // init and load sitemap model $id = $this->getRequest()->getParam('sitemap_id'); $sitemap = Mage::getModel('sitemap/sitemap'); /* @var $sitemap Mage_Sitemap_Model_Sitemap */ $sitemap->load($id); // if sitemap record exists if ($sitemap->getId()) { try { $sitemap->generateXml(); $this->_getSession()->addSuccess( Mage::helper('sitemap')->__('The sitemap "%s" has been generated.', $sitemap->getSitemapFilename())); } catch (Mage_Core_Exception $e) { $this->_getSession()->addError($e->getMessage()); } catch (Exception $e) { $this->_getSession()->addException($e, Mage::helper('sitemap')->__('Unable to generate the sitemap.')); } } else { $this->_getSession()->addError( Mage::helper('sitemap')->__('Unable to find a sitemap to generate.')); } // go to grid $this->_redirect('*/*/'); } /** * Check the permission to run it * * @return boolean */ protected function _isAllowed() { return Mage::getSingleton('admin/session')->isAllowed('catalog/sitemap'); } }