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

/**
 * @package    lnApp
 * @subpackage Auth
 * @category   Models
 * @author     Deon George
 * @copyright  (c) 2010 Deon George
 * @license    http://dev.leenooks.net/license.html
 */
class Model_Group extends Model_Auth_RoleDefault {
	// Relationships
	protected $_has_many = array(
		'account'=>array('through'=>'account_group'),
		'module_method'=>array('through'=>'group_method','far_key'=>'method_id'),
	);

	protected $_sorting = array(
		'name'=>'ASC',
	);

	// Validation rules
	protected $_rules = array(
		'name' => array(
			'not_empty'  => NULL,
			'min_length' => array(4),
			'max_length' => array(32),
		),
		'description' => array(
			'max_length' => array(255),
		),
	);

	protected $_display_filters = array(
		'status'=>array(
			array('StaticList_YesNo::display',array(':value')),
		),
	);

	/**
	 * This function will, given a group, list all of the children that
	 * are also related to this group, in the group heirarchy.
	 */
	public function list_childgrps($incParent=FALSE) {
		$return = array();

		if (! $this->loaded())
			return $return;

		foreach (ORM::factory('group')->where('status','=',1)->and_where('parent_id','=',$this)->find_all() as $go) {
			array_push($return,$go);

			$return = array_merge($return,$go->list_childgrps());
		}

		if ($incParent)
			array_push($return,$this);

		return $return;
	}

	/**
	 * This function will, given a group, list all of the parent that
	 * are also related to this group, in the group heirarchy.
	 */
	public function list_parentgrps($incParent=FALSE) {
		$return = array();

		if (! $this->loaded())
			return $return;

		foreach (ORM::factory('group')->where('status','=',1)->and_where('id','=',$this->parent_id)->find_all() as $go) {
			array_push($return,$go);

			$return = array_merge($return,$go->list_parentgrps());
		}

		if ($incParent)
			array_push($return,$this);

		return $return;
	}
}
?>
