protected function _generate() { $_common_set = array(); $this->pages_uris = Helper_Page::parse_to_base_uri(ORM::factory('page')->find_all()); $pages = $this->get_pages(); foreach ($pages as $item) { $item = $this->set_default_values($item); $_set = array(); if ($item['type'] == 'static') { $_set[] = $this->_page_item($item); } elseif ($item['type'] == 'module') { switch ($item['data']) { case 'cities': case 'contacts': case 'chart': case 'feedback': case 'playlist': case 'search': $_set[] = $this->_page_item($item); break; case 'news': $_set = $this->_news_items($item); break; case 'programs': $_set = $this->_programs_items($item); break; case 'staff': $_set = $this->_staff_items($item); break; } } if ($item['sm_separate_file'] == 1 and !empty($_set)) { $sitemap = new Sitemap(); foreach ($_set as $_item) { $sitemap_url = new Sitemap_URL(); $sitemap_url->set_loc($_item['loc'])->set_change_frequency($_item['changefreq'])->set_priority(str_replace(',', '.', $_item['priority'])); if (!empty($_item['lastmod'])) { $_unix_time = strtotime($_item['lastmod']); $sitemap_url->set_last_mod($_unix_time); } $sitemap->add($sitemap_url); unset($sitemap_url); } $this->write_to_file($this->sitemap_directory . DIRECTORY_SEPARATOR . 'part_' . uniqid() . '.xml', $sitemap->render()); unset($sitemap); } else { $_common_set = array_merge($_common_set, $_set); } } if (!empty($_common_set)) { $sitemap = new Sitemap(); foreach ($_common_set as $_item) { $sitemap_url = new Sitemap_URL(); $sitemap_url->set_loc($_item['loc'])->set_change_frequency($_item['changefreq'])->set_priority(str_replace(',', '.', $_item['priority'])); if (!empty($_item['lastmod'])) { $_unix_time = strtotime($_item['lastmod']); $sitemap_url->set_last_mod($_unix_time); } $sitemap->add($sitemap_url); unset($sitemap_url); } $this->write_to_file($this->sitemap_directory . DIRECTORY_SEPARATOR . uniqid('common_') . '.xml', $sitemap->render()); unset($sitemap); } }
public function action_edit() { $request = $this->request->current(); $id = (int) $request->param('id'); $helper_orm = ORM_Helper::factory('page'); $orm = $helper_orm->orm(); if ((bool) $id) { $orm->and_where('id', '=', $id)->find(); if (!$this->acl->is_allowed($this->user, $orm, 'edit')) { throw new HTTP_Exception_404(); } $this->title = __('Edit page'); } else { $this->title = __('Add page'); } if (empty($this->back_url)) { $this->back_url = Route::url('admin', array('controller' => 'pages')); } if ($this->is_cancel) { $request->redirect($this->back_url); } $pages_db = ORM::factory('page')->order_by('level', 'asc')->order_by('parent_id', 'asc')->order_by('position', 'asc')->find_all(); $pages = $pages_db->as_array('id'); $errors = array(); $submit = $request->post('submit'); if ($submit) { try { if ((bool) $id) { $orm->updater_id = $this->user->id; $orm->updated = date('Y-m-d H:i:s'); } else { $orm->site_id = SITE_ID; $orm->creator_id = $this->user->id; } $parent_id = (int) $request->post('parent_id'); if ($parent_id > 0 and isset($pages[$parent_id])) { $orm->level = $pages[$parent_id]->level + 1; } else { $orm->level = Model_Page::LEVEL_START; } $values = $this->meta_seo_reset($this->request->current()->post(), 'meta_tags'); if (empty($values['uri'])) { $values['uri'] = transliterate_unique($values['title'], $orm, 'uri', array(array('and', 'parent_id', '=', $parent_id))); } if (!IS_MASTER_SITE) { $values['for_all'] = 0; } if (!IS_MASTER_SITE) { $values['can_hiding'] = 0; } $helper_orm->save($values + $_FILES); Helper_Page::clear_cache(); } catch (ORM_Validation_Exception $e) { $errors = $this->errors_extract($e); } } if (!empty($errors) or $submit != 'save_and_exit') { $relations = $pages_db->as_array('id', 'parent_id'); $modules = array(); $linked_modules = Helper_Module::linked_modules(); $leave_module_types = array(Helper_Module::MODULE_SINGLE, Helper_Module::MODULE_STANDALONE); $this_page = $helper_orm->orm()->as_array(); foreach (Helper_Module::modules() as $key => $value) { $_own_module = ($this_page['type'] == 'module' and $this_page['data'] == $key); if (in_array($key, $linked_modules) and in_array($value['type'], $leave_module_types) and !$_own_module) { continue; } $modules[$key] = __($value['name']); } if ((bool) $id) { $page_list = array_diff_key(Helper_Page::parse_to_list($pages), array_flip($this->_get_childrens($id, $relations))); } else { $page_list = Helper_Page::parse_to_list($pages); } $properties = $helper_orm->property_list(); $this->template->set_filename('pages/edit')->set('errors', $errors)->set('helper_orm', $helper_orm)->set('pages', $page_list)->set('base_uri_list', Helper_Page::parse_to_base_uri($pages))->set('modules', $modules)->set('properties', $properties); } else { $request->redirect($this->back_url); } }