<?php
/*
* @package LabCMS
* @copyright (c) 2006 Alexander Levin aka Loki (loki_angel@mail.ru)
* @support http://labcms.ru
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*/

class admin_pages_main extends ModuleTools
{
	public function all()
	{
		if (!access('edit')) return LabCMS::i()->error403();
		$page=isset($_GET['var1'])?$_GET['var1']:1;
		$list=Factory::create('admin_pages.list', $page);
		
		if (!isset($_GET['var2'])) $_GET['var2']='';
		if (!empty($_GET['search'])) $_GET['var2']=$_GET['search'];
		
		self::_assign('list', $list->getList($_GET['var2']));
		self::_assign('pager', $list->pager);
		self::_setTpl('list');
	}
	
	public function show()
	{
		self::_setTpl('show');
		//если запрашивают  страницу по id, то на это нужны права
		if (isset($_GET['var1'], $_GET['action']) && $_GET['var1'] && $_GET['action'] && !access('edit')) return LabCMS::i()->error403();
		if (isset($_GET['var1'], $_GET['action']) && $_GET['var1'] && $_GET['action']) {
			$page=Factory::create('admin_pages.page', $_GET['var1']);
			if (!$page->id) return self::_error(_m('Страница не найдена'));
			LabCMS::i()->setSkin(config::get('core.skin'));
			addBreadcrumb("все страницы сайта", _url(false, 'all'));
			addBreadcrumb($page->title, _url($page->id, 'show'));
			config::set('core.title', $page->title);
		} else {
			Factory::load('admin_pages.page');
			if ($page=Cache_Generic::init()->get('admin_page_'.LabCMS::i()->id)) {
				$page->cached=true;
			} else {
				$page=Factory::create('admin_pages.page');
				$page->loadDataByTreeId(LabCMS::i()->id);
				if (!$page->id) {
					$data=array('title'=>config::get('core.title'), 'tree_id'=>LabCMS::i()->id, 'text'=>'');
					$page->addPage($data);
					$page->loadDataById($data['id']);
				}
			}
			
			if ($page->title) LabCMS::i()->setTitle($page->title);
			if ($page->description) LabCMS::i()->setDescription($page->description);
			if ($page->keywords) LabCMS::i()->setKeywords($page->keywords);

			if (config::get('use_comments')	&& $page->use_comments) $this->_assignComments($page->id);
			
			if (!$page->cached) Cache_Generic::init()->set('admin_page_'.LabCMS::i()->id, $page, -1);
			
			//если уже есть кэшированный html, то на этом заканчиваем
			if (LabCMS::i()->is_cached(self::_getTpl(), -1, 'admin_page_'.LabCMS::i()->id)) return;
		}
		
		self::_assign('page', $page);
	}
	
	public function edit()
	{
		if (!access('edit')) return LabCMS::i()->error403();
		if ($_GET['var1']) {
			$page=Factory::create('admin_pages.page', $_GET['var1']);
		} else {
			$page=Factory::create('admin_pages.page');
			$page->loadDataByTreeId(LabCMS::i()->id);
		}
		if (!$page->id) return self::_error(_m('Страница не найдена'));

		addBreadcrumb('Редактирование страницы', _url());
		
		$form=$page->buildEditForm(access('admin'));
		
		if ($form->validate()) {
			$data=$form->getValue();
			if ($data['save_copy'] || !$page->tree_id) {
				if ($new=$page->add($data)) {
					//если мы создавали страницу из удаленной ноды, то старую версию удаляем
					if (!$page->tree_id) $page->delete();
					if ($page->path && $_GET['var2']!='all') refresh(false, _url(false, false, false, $page->path));
					else refresh(false, _url(false, 'all'));
				}
			} else {
				if ($page->update($data)) {
					//удаляем страницу из кэша
					$this->_resetCache($page);
					if ($page->path && $_GET['var2']!='all') refresh(false, _url(false, false, false, $page->path));
					else refresh(false, _url(false, 'all'));
				}
			}

			//если сохранение не прошло, заполняем поле измененным значением
			$form->getElementByName('path')->setValue($page->getPath($data));
		}
		
		self::_assign('form', $this->_renderForm($form));
		self::_setTpl('form');
	}
	
	protected function _resetCache($page)
	{
		LabCMS::i()->clearCache('show.tpl');
	}
	
	public function add()
	{
		if (!access('admin')) return LabCMS::i()->error403();
		$page=Factory::create('admin_pages.page');
		$form=$page->buildEditForm(access('admin'), true);
		
		addBreadcrumb('Создание страницы', _url());
		
		if ($form->validate()) {
			$data=$form->getValue();
			if ($new_page=$page->add($data)) {
				refresh('', _url(false, false, false, $new_page->path));
			}
			//если сохранение не прошло, заполняем поле измененным значением
			$path=$form->getElementByName('path');
			$path->setValue($page->getPath($data));
		}
		
		self::_assign('form', $this->_renderForm($form));
		self::_setTpl('form');
	}
	
	public function delete()
	{
		if (!access('admin')) return LabCMS::i()->error403();
		User::checkToken();
		$page=Factory::create('admin_pages.page', $_GET['var1']);
		if (!$page->id) return self::_error(_m('Страница не найдена'));
		$page->delete();
		$this->_resetCache($page);
		//если удалили текущую страницу - переходим к родителю
		if ($page->tree_id==LabCMS::i()->id) {
			LabCMS::i()->redirectByLocation($page->parent_id?$page->parent_id:'/');
		}
		refresh();
	}
	
	protected function _assignComments($id)
	{
		$mObject=Factory::create('lc_comments.api');
		$item=$mObject->getCommentsItem($id, LabCMS::i()->url, config::get('core.title'));
		$comments=$item->getComments();
		
		self::_assign('comment_votes', $item->getUserItemVotes());
		
		self::_assign('comments_item', $item);
		self::_assign('comments', $comments);
	}
}