<?php defined('SYSPATH') or die('No direct access allowed.');

/**
 * This class provides the default template controller for rendering pages.
 *
 * @package    OSB
 * @category   Controllers
 * @author     Deon George
 * @copyright  (c) 2009-2013 Open Source Billing
 * @license    http://dev.osbill.net/license.html
 */
class Controller_TemplateDefault extends lnApp_Controller_TemplateDefault {
	protected $auth_required = TRUE;

	// Our acccount object
	protected $ao;

	public function __construct(Request $request, Response $response) {
		$this->template = Config::theme().'/page';

		return parent::__construct($request,$response);
	}

	public function before() {
		// If our action doesnt exist, no point processing any further.
		if (! method_exists($this,'action_'.Request::current()->action()))
			return;

		if ($this->auth_required) {
			if (! count($this->secure_actions) OR (! isset($this->secure_actions[Request::current()->action()])))
				throw HTTP_Exception::factory(403,'Class has no security defined :class, or no security configured for :method',array(':class'=>get_class($this),':method'=>Request::current()->action()));

			$this->ao = Auth::instance()->get_user();

			if (! is_null($this->ao) AND (is_string($this->ao) OR ! $this->ao->loaded()))
				throw HTTP_Exception::factory(501,'Account doesnt exist :account ?',array(':account'=>(is_string($this->ao) OR is_null($this->ao)) ? $this->ao : Auth::instance()->get_user()->id));
		}

		parent::before();
	}

	// @todo To rework
	public function after() {
		$dc = 'u/welcome/index';
		$m = sprintf('%s/%s',Request::current()->directory(),Request::current()->controller());

		BreadCrumb::URL(Request::current()->directory(),sprintf('%s/%s',Request::current()->directory(),$dc),FALSE);
		BreadCrumb::URL($m,method_exists($this,'action_menu') ? $m.'/menu' : sprintf('%s/%s',Request::current()->directory(),$dc),FALSE);

		parent::after();
	}

	protected function setup(array $config_items=array()) {
		$module = Request::current()->controller();

		if ($_POST AND isset($_POST['module_config'][$module]))
			Config::instance()->module_config($module,$_POST['module_config'][$module])->save();

		if ($config_items) {
			$output = '';
			$mc = Config::instance()->module_config($module);

			$output .= Form::open();
			$output .= View::factory('setup/admin/module/head');

			foreach ($config_items as $k=>$v)
				$output .= View::factory('setup/admin/module/body')
					->set('module',$module)
					->set('mc',$mc)
					->set('key',$k)
					->set('info',$v)
					->set('val',isset($mc[$k]) ? $mc[$k] : '');

			$output .= View::factory('setup/admin/module/foot');

			$output .= Form::submit('submit',_('Submit'),array('class'=>'form_button'));
			$output .= Form::close();

			Block::add(array(
				'title'=>sprintf('%s: %s',strtoupper($module),_('Configuration')),
				'body'=>$output,
			));
		}
	}
}
?>