<?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_modules_main extends ModuleTools
{
	public function __construct()
	{
		if (!access('admin')) return LabCMS::i()->error403();
	}
	
	public function modules()
	{
		$this->_setTpl('list');
		if (!$modules=$this->_getModule()) return;
		$this->_assign('modules', $modules->getAllModules());
	}
	
	public function info()
	{
		if (!$module=$this->_getModule($_GET['var1'])) return;
		addBreadcrumb($module->name);
		$this->_setTpl('info');
		$this->_assign('module', $module);
	}
	
	public function install()
	{
		if (!$module=$this->_getModule($_GET['var1'])) return;
		if ($module->id) return self::_error(_m('Модуль уже установлен'));
		addBreadcrumb($module->name, _url($module->module, 'info'));
		addBreadcrumb("установка модуля");
		$this->_setTpl('edit');
	
		if ($module->depends && !$module->depends->id) {
			return $this->_error(
				sprintf(
					_m(
						'Этот модуль зависит от модуля "<a href="%s">%s</a>" и без него работать не будет'
					),
					_url($module->depends->module, 'info'),
					$module->depends->name
				),
				true
			);
		}
		
		$form=$module->getEditForm();

		if ($form->validate()) {
			if ($module->install($form->getValue())) {
				LabCMS::reset_cache('all');
				refresh();
			}
		}
		self::_assign('form', $this->_renderForm($form));
	}
	
	public function reinstall()
	{
		User::checkToken();
		if (!$module=$this->_getModule($_GET['var1'])) return;
		if (!$module->id) return self::_error(_m('Модуль не установлен'));
		$data=array('name'=>$module->name, 'static'=>$module->static);
		if ($module->install($data)) {
			LabCMS::reset_cache('all');
			refresh();
		}
	}
	
	public function edit()
	{
		if (!$module=$this->_getModule($_GET['var1'])) return;
		$this->_setTpl('edit');
		$form=$module->getEditForm();
		addBreadcrumb($module->name, _url($module->module, 'info'));
		addBreadcrumb("Редактирование модуля");
		
		if ($form->validate()) {
			$module->update($form->getValue());
			LabCMS::reset_cache('all');
			refresh();
		}
		
		self::_assign('form', $this->_renderForm($form));
	}
	
	public function toggle()
	{
		User::checkToken();
		if (!$module=$this->_getModule($_GET['var1'])) return;
		$module->toggle();
		LabCMS::reset_cache('all');
		refresh();
	}
	
	public function delete()
	{
		if (!$module=$this->_getModule($_GET['var1'])) return;
		$this->_setTpl('delete');
		$depends=$module->getDependedModules();
		if ($_SERVER['REQUEST_METHOD']=='POST') {
			$module->delete();
			LabCMS::reset_cache('all');
			refresh();
		}
		self::_assign('module', $module);
		self::_assign('depends', $depends);
	}
	
	protected function _getModule($id=null)
	{
		$module=Factory::create('admin_modules.module', $id);
		if ($id && !$module->module) return $this->_error(_m('Модуль не найден'));
		return $module;
	}
}
