/** * get instance * * * @return Cms_Model_RouteMapper */ public static function getInstance() { if (self::$_instance === null) { self::$_instance = new self(); } return self::$_instance; }
protected function saveRoute($row) { $module = $this->modules[$this->data[$row]['Module']]; //no path - no route if (!$module['path']) { return; } $titles = explode("\n", $this->data[$row]['Name']); $route = new Cms_Model_Route(); $route->set_application_id(1); if (isset($this->data[$row]['page_id'])) { $route->set_page_id($this->data[$row]['page_id']); } $route->set_path($module['path']); if (isset($module['params'])) { $route->set_params($module['params']); } foreach ($this->languages as $langIndex => $lang) { $title = $this->getLangText($titles, $langIndex); $currRow = $row; if (!isset($module['route_uri'])) { $uriParts = array(); while (isset($this->data[$currRow])) { $currTitles = explode("\n", $this->data[$currRow]['Name']); $uriParts[] = $this->seoFilter->filter($currTitles[$langIndex]); if (!isset($this->data[$currRow]['parent'])) { break; } $currRow = $this->data[$currRow]['parent']; } //print_r($uriParts); $uriParts = array_reverse($uriParts); $uri = implode('/', $uriParts); } else { $uri = $module['route_uri']; } //check if route exists $existingRoutes = Cms_Model_RouteMapper::getInstance()->fetchAll(array('uri' => $uri, 'lang' => $lang)); if (count($existingRoutes) > 0) { continue; } $route->set_name($title)->set_lang($lang)->set_uri($uri); $route->set_id(null); //print_r($route); Cms_Model_RouteMapper::getInstance()->save($route); } $this->data[$row]['route_id'] = $route->get_id(); }
/** * Save entity * * @param Cms_Model_MenuItem $item * @param string $language */ public function save(Cms_Model_MenuItem $item, $language = null, $dontSaveRoute = false) { $data = array(); $this->_entityToRow($item, $data); $id = $item->get_id(); if (!isset($id) || $id <= 0) { unset($data['id']); $id = $this->_dbTable->insert($data); $item->set_id($id); } else { //if language is defined, save just untraslated strings if ($language && $language != HCMS_Utils::getDefaultLocale()) { foreach (self::$_translatedFields as $field) { unset($data[$field]); } } $this->_dbTable->update($data, array('id = ?' => $id)); } //save in translation table if ($language) { $this->_saveTranslation('cms_menu_item', $item->get_id(), $item, self::$_translatedFields, $language); if ($item->get_route() != '' && !$dontSaveRoute) { $route = new Cms_Model_Route(); $this->_parseParams(isset($data['params']) ? $data['params'] : "", $item); $this->_parseParams($item->get_params_old() != '' ? $item->get_params_old() : "", $item, true); $paramsOld = $item->get_params_old(); if (isset($paramsOld['page_id']) && $paramsOld['page_id'] == '') { unset($paramsOld['page_id']); } $item->set_params_old($paramsOld); if (!Cms_Model_RouteMapper::getInstance()->findByPath($item->get_path(), $item->get_application_id(), $route, $item->get_params_old(), $language)) { $route->set_lang($language)->set_application_id($item->get_application_id())->set_name($item->get_name())->set_path($item->get_path())->set_page_id($item->get_page_id_new())->set_uri($item->get_route_uri())->set_params($this->unsetParamsPageId($item->get_params())); Cms_Model_RouteMapper::getInstance()->save($route); } else { if ($route->get_uri() != $item->get_route_uri() || $route->get_page_id() != $item->get_page_id_new() || $this->unsetParamsPageId($item->get_params()) != $this->unsetParamsPageId($item->get_params_old())) { $route->set_uri($item->get_route_uri()); $route->set_page_id($item->get_page_id_new()); $route->set_params($this->unsetParamsPageId($item->get_params())); Cms_Model_RouteMapper::getInstance()->save($route); } } } } $this->cleanCache(); }
/** * Assembles a URL path defined by this route * * @param array $data An array of variable and value pairs used as parameters * @param boolean $reset Not used (required by interface) * @param boolean $encode Not used (required by interface) * @param boolean $partial Not used (required by interface) * * @return string|false Route path with user submitted parameters */ public function assemble($data = array(), $reset = false, $encode = false, $partial = false) { $origData = $data; //$this->_log(sprintf("cms route asseble data: %s", json_encode($data)), Zend_Log::DEBUG); if (!isset($data['lang'])) { if (Zend_Registry::isRegistered('Zend_Locale')) { $locale = Zend_Registry::get('Zend_Locale'); $data['lang'] = $locale->getLanguage(); } else { //fallback to default route return $this->_assembleFallback($origData, 'default', $reset, $encode); } } $module = isset($data['module']) ? $data['module'] : $this->getDefault('module'); $controller = isset($data['controller']) ? $data['controller'] : $this->getDefault('controller'); $action = isset($data['action']) ? $data['action'] : $this->getDefault('action'); $path = "{$module}/{$controller}/{$action}"; $lang = $data['lang']; unset($data['module']); unset($data['controller']); unset($data['action']); unset($data['lang']); $route = new Cms_Model_Route(); if (!Cms_Model_RouteMapper::getInstance()->findByPath($path, 1, $route, $data, $lang)) { //fallback to default route return $this->_assembleFallback($origData, 'default', $reset, $encode); } $result = array(); //if singlelang than do not add lang $singleLang = Zend_Controller_Front::getInstance()->getParam('singleLang'); if ((!$singleLang || $singleLang == '') && isset($lang) && $lang != '') { $result[] = $lang; } if (null != $route->get_uri() && '' != $route->get_uri()) { $result[] = $route->get_uri(); } return implode("/", $result); }
/** * Ajax listing of pages */ public function pageListAction() { //criteria $criteria = array('application_id' => $this->_applicationId); if (null != $this->_getParam('langFilter')) { $criteria['lang'] = $this->_getParam('langFilter'); } if (null != $this->_getParam('typeFilter')) { $criteria['type_id'] = $this->_getParam('typeFilter'); } if (null != $this->_getParam('categoryFilter')) { $criteria['category_id'] = $this->_getParam('categoryFilter'); } if (null != $this->_getParam('statusFilter')) { $criteria['status'] = $this->_getParam('statusFilter'); } if (null != $this->_getParam('menuFilter')) { $criteria['menu_item_id'] = $this->_getParam('menuFilter'); } if (null != $this->_getParam('searchFilter')) { $criteria['search_filter'] = $this->_getParam('searchFilter'); } //order $order = $this->_request->getParam('order'); if (isset($order)) { $order = array($order); } else { $order = array("p.title ASC"); } //paging $page = $this->_request->getParam('page'); $perPage = $this->_request->getParam('perPage'); if (!isset($page) || $page < 1) { $page = 1; } if (!isset($perPage) || $perPage < 1 || $perPage > 300) { $perPage = 20; } $paging = array('page' => $page, 'perPage' => $perPage); $records = Cms_Model_PageMapper::getInstance()->fetchAll($criteria, $order, $paging); $data = array('total' => $paging['total'], 'page' => $paging['page'], 'records' => $paging['records'], 'perPage' => $paging['perPage'], 'rows' => array()); /* @var $record Cms_Model_Page */ foreach ($records as $record) { //find route to page $cmsRoute = new Cms_Model_Route(); $lang = null != $this->_getParam('langFilter') ? $this->_getParam('langFilter') : CURR_LANG; if (!Cms_Model_RouteMapper::getInstance()->findByPageId($record->get_id(), $cmsRoute, $lang)) { //default path $module = 'cms'; $controller = 'page'; $action = 'index'; } else { list($module, $controller, $action) = explode("/", $cmsRoute->get_path()); } $urlParams = array('module' => $module, 'controller' => $controller, 'action' => $action, 'page_id' => $record->get_id(), 'lang' => $lang); $data['rows'][] = array('id' => $record->get_id(), 'title' => $record->get_title(), 'code' => $record->get_code(), 'url_id' => $record->get_url_id(), 'type_id' => $record->get_type_id(), 'type_name' => $this->translate($record->get_type_name()), 'type_code' => $record->get_type_name(), 'user_name' => $record->get_user_name(), 'status' => $this->translate($record->get_status()), 'posted' => HCMS_Utils_Time::timeMysql2Local($record->get_posted()), 'url' => $this->view->url($urlParams, 'cms', true)); } $this->_helper->json->sendJson($data); }
public function deleteAction() { $id = $this->_getParam('id'); $id = $this->_getParam('id'); $route = new Cms_Model_Route(); if (!Cms_Model_RouteMapper::getInstance()->find($id, $route)) { $result = array("success" => false, "message" => $this->translate("Route not found.")); } else { $success = Cms_Model_RouteMapper::getInstance()->delete($route); $result = array("success" => $success, "message" => $success ? $this->translate("Route deleted.") : $this->translate("Error deleting Route.")); } return $this->_helper->json($result); }
public function menuEditAction() { $data = $this->getRequest()->getPost('data'); $submit = $this->getRequest()->getPost('submit'); $id = $this->_getParam('id'); $langFilter = $this->_getParam('langFilter'); $menuFilter = $this->_getParam('menuFilter'); /* get routes from application.ini */ $bootstrap = $this->getInvokeArg('bootstrap'); $routes = array_keys($bootstrap->getResource('router')->getRoutes()); /* get all modules */ $criteria['application_id'] = $this->_applicationId; $modules = Application_Model_ModuleMapper::getInstance()->fetchAll($criteria); //check if cancel button is pressed if ($this->_formHelper->isCancel()) { //cancel form return $this->_formHelper->returnCancel($this->view->url(array('action' => 'menu')), $this->translate('Action canceled')); } if (isset($data['path']) && $data['path'] != '') { foreach ($modules as $module) { $moduleData = $module->get_data(); if (isset($moduleData['menus'])) { foreach ($moduleData['menus'] as $path => $menu) { if ($module->get_code() . "/" . $path == $data['path']) { $data['dialog_url'] = $menu['dialog_url']; } } } } } //create form object $form = new Cms_Form_MenuItem($data); $route = new Cms_Model_Route(); //postback - save? if ($this->_formHelper->isSave()) { //check if valid if ($form->isValid()) { $values = $form->getValues(); //create entity object from submitted values, and save $item = new Cms_Model_MenuItem($values); if ($data['route'] == '') { $item->set_path(''); $item->set_page_id(''); $item->set_page_id_new(''); $item->set_params(''); } else { $item->set_uri(''); } //new entity if (!isset($data['id']) || $data['id'] <= 0) { $item->set_application_id($this->_applicationId); } else { $existingMenu = new Cms_Model_MenuItem(); if (!Cms_Model_MenuItemMapper::getInstance()->find($data['id'], $existingMenu)) { throw new Exception("Menu not found"); } if ((int) $existingMenu->get_application_id() != $this->_applicationId) { throw new Exception("Cannot edit this Menu Item."); } } $item->set_application_id($this->_applicationId); Cms_Model_MenuItemMapper::getInstance()->save($item, $langFilter); //save done, return success return $this->_formHelper->returnSuccess($this->view->url(array('action' => 'menu')), $this->translate('Menu Item saved.')); } else { //we have errors - return json or continue $this->_formHelper->returnError($form->getMessages()); } } elseif (!$this->_formHelper->getRequest()->isPost()) { //edit action if (isset($id) && $id > 0) { $item = new Cms_Model_MenuItem(); if (!Cms_Model_MenuItemMapper::getInstance()->find($id, $item, $langFilter)) { throw new Exception("Menu not found"); } Cms_Model_RouteMapper::getInstance()->findByPath($item->get_path(), $this->_applicationId, $route, $item->get_params(), $langFilter != '' ? $langFilter : null); $item->set_route_uri($route->get_uri()); $params = $item->get_params(); $item->set_params(Cms_Model_MenuItemMapper::getInstance()->unsetParamsPageId($params)); //fetch data $data = $item->toArray(); //populate form with data $form->setData($data); } } $this->view->menus = Cms_Model_MenuMapper::getInstance()->getMenus(); $this->view->menuFilter = $menuFilter; $this->view->langFilter = $langFilter; $this->view->routes = $routes; $this->view->modules = $modules; $page = new Cms_Model_Page(); if (isset($data['page_id'])) { Cms_Model_PageMapper::getInstance()->find($data['page_id'], $page); } $this->view->page_title = $page->get_title(); $this->view->data = $data; }