<?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
*/
$mod_template="edit.tpl";
//ключик позволяющий загружать файлы на сервер
if (access('edit')) LabCMS::i()->setAllowFileUpload();

if ($mode=="edit")
{
	$page_info=Db::i()->selectRow("SELECT page_text, page_title, page_description, page_keywords, t.tree_id, path, page_id, use_comments FROM ?_pages p LEFT JOIN ?_tree t ON p.tree_id=t.tree_id WHERE page_id=?", $_GET['var1']);
	Tpl::i()->assign($page_info);
}

if ($_SERVER["REQUEST_METHOD"]=="POST")
{
	User::checkToken();
	$_POST['page_title']=trim($_POST['page_title']);
	$_POST['page_text']=trim($_POST['page_text']);

	if (!$_POST['page_title'])
	{
		LabCMS::i()->error("Не введено название страницы");
	}

	if (!$_POST['page_text'])
	{
		LabCMS::i()->error("Не введен текст страницы");
	}

	if ($_POST['path'])
	{
		$_POST['path']=convert_url($_POST['path']);
	}
	else
	{
		$_POST['path']=convert_url($_POST['page_title']);
	}

	function onlylist()
	{
		$params=Db::i()->selectCell("SELECT params FROM ?_tree WHERE tree_id=?", $_POST['tree_id']);
		if (!$params) return false;
		if (strpos($params, 'onlylist=1')!==false) return true;
		return false;
	}
	
	if (!empty($_POST['save_copy'])) $mode='add';

	//если страница не сохраняется как дочерняя
	if (empty($_POST['child']))
	{
		//проверяем есть ли у данного узла компонент
		if ($component=Db::i()->selectCell("SELECT m.name FROM ?_includes i JOIN ?_modules m ON i.module_id=m.module_id WHERE component=1 AND tree_id=?  AND m.module_id!=? LIMIT 1", $_POST['tree_id'], LabCMS::i()->getModuleId()))
		{
			LabCMS::i()->error(sprintf(_m("Для данного узла уже назначен компонент \"%s\". У узла может быть только один компонент."), $component), true);
		}
		//проверяем есть ли у данного узла текстовая страница
		elseif ($page_title=Db::i()->selectCell("SELECT page_title FROM ?_pages p JOIN ?_tree t ON p.tree_id=t.tree_id WHERE t.tree_id=?{ AND page_id!=?}", $_POST['tree_id'], (($_GET['var1'] && $mode!='add')?$_GET['var1']:DBSIMPLE_SKIP)))
		{
			LabCMS::i()->error(sprintf(_m("Для данного узла уже создана страница \"%s\""), $page_title), true);
		}
		//проверяем не является ли данный узел админкой
		elseif(onlylist() && !$_GET['var1'])
		{
			LabCMS::i()->error("Вы не можете добавить текст к этому узлу.");
		}
	}
	
	if (LabCMS::i()->no_errors)
	{
		if($page_title=Db::i()->selectCell("SELECT tree_name FROM ?_tree WHERE path=? AND symlink=0{ AND tree_id!=?}", $_POST['path'], empty($_POST['child'])?$_POST['tree_id']:DBSIMPLE_SKIP))
		{
			LabCMS::i()->error(sprintf(_m("Данный URL адрес уже используется узлом \"%s\""), $page_title), true);
		}
	}

	if (LabCMS::i()->no_errors)
	{
		$tree_id=getTreeId();

		$query=array('page_title'=>$_POST['page_title'],
			'page_text'=>$_POST['page_text'],
			'page_description'=>$_POST['page_description'],
			'page_keywords'=>$_POST['page_keywords'],
			'tree_id'=>$tree_id,
			'use_comments'=>$_POST['use_comments']?1:0);

		if($mode=="edit")
		{
			//Если переносим страницу с тем же адресом, но в другой узел, то у текущего узла путь обнуляем.
			if ($page_info['tree_id']!=$_POST['tree_id'] && $page_info['path']==$_POST['path'])Db::i()->query("UPDATE ?_tree SET path='' WHERE tree_id=?", $page_info['tree_id']);
			
			Db::i()->query("UPDATE ?_pages SET ?a, date_updated=NOW() WHERE page_id=?", $query, $_GET['var1']);
		}

		if($mode=="add")
		{
			Db::i()->query("INSERT INTO ?_pages SET ?a, date_created=NOW(), date_updated=NOW()", $query);
		}
		//удаляем кэшированную версию
		LabCMS::i()->reset_cache('all');
		if($_POST['path'] && $_GET['var2']!='list') refresh(false, _url(false, false, false, $_POST['path']));
		else refresh(false, _url(false, 'list'));
	}
}

function getTreeId()
{
	if ($_POST['child'])
	{
		$tree_id=Db::i()->query("INSERT INTO ?_tree (parent_id, tree_name, menu, sitemap, path, `show`) VALUES (?, ?, 1, 1, ?, 1)", $_POST['tree_id'], $_POST['page_title'], $_POST['path']);
	}
	else
	{
		Db::i()->query("UPDATE ?_tree SET path=? WHERE tree_id=?", $_POST['path'], $_POST['tree_id']);
		$tree_id=$_POST['tree_id'];
	}
	
	//Подключаем модуль страниц к выбранному узлу. Если узел не менялся, то ничего не произойдет.
	Db::i()->query("INSERT IGNORE INTO ?_includes (tree_id, module_id) VALUES(?, ?)", $tree_id, LabCMS::i()->getModuleId());

	return $tree_id;
}

if ($mode=="add" && empty($page_info['page_id']))
{
	Tpl::i()->assign('path', $_SERVER['PHP_SELF']);
	Tpl::i()->assign('tree_id', LabCMS::i()->id);
	Tpl::i()->assign('page_title', LabCMS::i()->title);
}

if ($mode=="delete")
{
	User::checkToken();
	$tree_id=Db::i()->selectCell("SELECT t.tree_id FROM ?_pages p LEFT JOIN ?_tree t ON p.tree_id=t.tree_id WHERE page_id=?", $_GET['var1']);
	Db::i()->query("DELETE FROM ?_pages WHERE page_id=?", $_GET['var1']);
	LabComments::deleteItem($_GET['var1']);
	LabCMS::i()->reset_cache('all');
	if (!empty($_GET['var2']))
		refresh(false, LabCMS::i()->url(array(), $_GET['var2']));
	else
		refresh();
}

Tpl::i()->assign('tree_select', select_tree());


function select_tree($parent_id=0, $level=0, $tree_select=array())
{
	$result=Db::i()->select("SELECT t.tree_id,  tree_name,  pos FROM ?_tree t WHERE t.parent_id=? ORDER BY pos", $parent_id);
	if (count($result))
	{
		foreach($result as $tree)
		{
			//if ($tree['tree_id']==$page_info['tree_id']) continue;
			$margin="";
			for($i=0; $i<$level*3; $i++) $margin.="&nbsp;";
			$tree_select[$tree['tree_id']]=$margin.$tree['tree_name'];
			$tree_select+=select_tree($tree['tree_id'], $level+1, $tree_select);
		}
		return $tree_select;
	}
	else
	{
		return array();
	}
}

//вставляем css пока они не вставлены глобально
Tpl::i()->assign('css', LabCMS::i()->getSkinCSS());