<?php
/**
 * MiniMVC
 *
 * Convention-based micro-framework for PHP
 *
 * @package		miniMVC
 * @author 		Timothy J. Warren
 * @copyright	Copyright (c) 2011 - 2012
 * @link 		https://github.com/timw4mail/miniMVC
 * @license 	http://philsturgeon.co.uk/code/dbad-license 
 */

// --------------------------------------------------------------------------

/**
 * Base Controller Class
 *
 * @package miniMVC
 * @subpackage System
 */
class MM_Controller extends miniMVC {
	
	/**
	 * Instance of Page class
	 *
	 * @var Page
	 */
	protected $page;

	/**
	 * Create the controller object
	 *
	 * @return void
	 */
	public function __construct()
	{
		parent::__construct();
		
		// Create the page object
		$this->page = new MM_Page($this);
	}
	
	// --------------------------------------------------------------------------
	
	/**
	 * Function for loading a model into the current class
	 *
	 * @param string $file
	 * @param array $args
	 * @return void
	 */	
	public function load_model($file, $args=[])
	{
		// The module is set via the router
		$module = strtolower(MM_MOD);
		$path = MM_MOD_PATH . "{$module}/models/{$file}.php";

		if (is_file($path))
		{
			require_once($path);
		}		
		
		if ( ! empty($args))
		{
		
			$this->$file = new $file($args);
		}
		else
		{
			$this->$file = new $file;
		}
	}
	
	// --------------------------------------------------------------------------
	
	/**
	 * Function for loading a view
	 *
	 * @param string $file
	 * @param array $data
	 * @param bool $return
	 * @return mixed
	 */
	public function load_view($file, array $data=[], $return=FALSE)
	{
		$path = "";
	
		// The module is set via the router
		$module = strtolower(MM_MOD);
		$path = MM_MOD_PATH . "{$module}/views/{$file}.php";
		
		// If it's not a module, or doesn't exist in the module view folder
		// look in the app view folder
		if ( ! is_file($path))
		{	
			$path = MM_APP_PATH . "views/{$file}.php";
		}
		
		// Contain the content for buffering
		ob_start();
		
		// Extract the data array
		extract($data);
		
		// Include the file
		include($path);
		
		$buffer = ob_get_contents();
		ob_end_clean();
		
		if ($return == TRUE)
		{
			return $buffer;
		}
		else
		{
			$this->output->append_output($buffer);
		}
	}
}
// End of controller.php