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

/**
 * This class provides MODULE management
 *
 * @package    lnApp
 * @subpackage Page/Module
 * @category   Controllers
 * @author     Deon George
 * @copyright  (c) 2010 Deon George
 * @license    http://dev.leenooks.net/license.html
 */
class Controller_Admin_Module extends Controller_Module {
	/**
	 * Our menu method
	 *
	 * We need this method, otherwise we have redirect from our parent
	 */
	public function action_menu() {
		$this->template->content = _('See menu on tree');
	}

	/**
	 * List our installed modules
	 */
	public function action_list() {
		$modules = ORM::factory('module');

		$output = '';

		$output .= View::factory('module/admin/list_header');
		foreach ($modules->find_all() as $mo) {
			$output .= View::factory('module/admin/list_body')
				->set('module',$mo);
		}
		$output .= View::factory('module/admin/list_footer');

		Block::add(array(
			'title'=>_('Currently installed modules'),
			'body'=>$output,
		));
	}

	/**
	 * Edit a Module Configuration
	 *
	 * @param int $mid Module ID
	 * @todo Highlight those methods that have security, but the class does not have auth_required set to YES or the method isnt defined in secure_actions
	 */
	public function action_edit($mid) {
		$mo = ORM::factory('module',$mid);

		if (! $mo->loaded()) {
			SystemMessage::add(array(
				'title'=>_('Invalid Module ID'),
				'type'=>'error',
				'body'=>sprintf(_('Module with ID %s doesnt appear to exist?'),$mid),
			));

			return;
		}

		$output = '';
		$methods = $this->_methods($mo->name);

		// Show methods defined in the DB already.
		$output .= View::factory('module/admin/method_list_header');
		foreach ($mo->module_method->find_all() as $meo) {
			if (($method = array_search($meo->name,$methods)) !== false)
				unset($methods[$method]);

			$output .= View::factory('module/admin/method_list_body')
				->set('method',$meo)
				->set('module',$mo)
				->set('defined',$method !== false);
		}

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

		// Show new methods NOT defined in the DB already.
		foreach ($methods as $method) {
			$meo = ORM::factory('module_method')
				->values(array('name'=>$method,'notes'=>_('Not defined in DB')));

			$output .= View::factory('module/admin/method_list_body')
				->set('method',$meo)
				->set('module',$mo)
				->set('defined',$method === false);
		}
		$output .= View::factory('module/admin/method_list_footer');

		Block::add(array(
			'title'=>sprintf(_('%s Methods'),strtoupper($mo->name)),
			'body'=>$output,
		));
	}
}
?>