예제 #1
0
파일: sitemap.php 프로젝트: greor/satin-spb
 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);
     }
 }
예제 #2
0
파일: pages.php 프로젝트: greor/satin-spb
 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);
     }
 }