<?php
/**
 * AgileBill - Open Billing Software
 *
 * This body of work is free software; you can redistribute it and/or
 * modify it under the terms of the Open AgileBill License
 * License as published at http://www.agileco.com/agilebill/license1-4.txt
 *
 * Originally authored by Tony Landis, AgileBill LLC
 *
 * Recent modifications by Deon George
 *
 * @author Deon George <deonATleenooksDOTnet>
 * @copyright 2009 Deon George
 * @link http://osb.leenooks.net
 *
 * @link http://www.agileco.com/
 * @copyright 2004-2008 Agileco, LLC.
 * @license http://www.agileco.com/agilebill/license1-4.txt
 * @author Tony Landis <tony@agileco.com>
 * @package AgileBill
 * @subpackage Module:Method
 */

/**
 * The main AgileBill Module Method Class
 *
 * @package AgileBill
 * @subpackage Module:Method
 */
class module_method extends OSB_module {
	/**
	 * View methods
	 */
	public function view_methods($VAR) {
		$type = 'search';
		$this->method[$type] = explode(',',$this->method[$type]);
		$db = new CORE_database;

		$this->this_search_show($VAR,$this,$type);
	}

	##############################
	##	VIEW METHODS p.2     #####
	##############################
	function this_search_show($VAR,$construct,$type) {
		global $VAR;

		# Get the list of parents for this group
		$this->group_parent_list($VAR['module_method_group_id']);

		# Generate the full query
		$db = &DB();
		$result = $db->Execute(sqlSelect($db,'module_method','*',array('module_id'=>$VAR['module_method_module_id'])));

		# Put the results into a smarty accessable array
		$i = 0;
		$class_name = true;

		while (! $result->EOF) {
			$smart[$i] = $result->fields;
			$method_id = $smart[$i]['id'];

			# Get the auth status for this method & group
			$resulta = $db->Execute(sqlSelect($db,'group_method','id',array('method_id'=>$smart[$i]['id'],'group_id'=>$VAR['module_method_group_id'])));

			# Authorized by current group
			if ($resulta->RecordCount() >= 1) {
				$smart[$i]['checked'] = '1';

			} else {
				# Get the parent group id(s) for this group
				$match = false;
				for ($ii=0; $ii < count($this->group); $ii++) {
					if ($match == false && $this->group[$ii] != $VAR['module_method_group_id']) {
						$resultb = $db->Execute(sqlSelect($db,'group_method','id',array('method_id'=>$method_id,'group_id'=>$this->group[$ii])));

						if ($resultb->RecordCount() >= 1)
						  $match = true;
					}
				}

				# authorized by parent
				if ($match)
					$smart[$i]['checked'] = '2';
				else
					$smart[$i]['checked'] = '3';
			}

			if ($class_name) {
				$smart[$i]['_C'] = 'row2';
				$class_name = false;

			} else {
				$smart[$i]['_C'] = 'row1';
				$class_name = true;
			}

			$result->MoveNext();
			$i++;
		}

		# get any linked fields
		if ($i > 0) {
			$db_join = new CORE_database;
			$this->result = $db_join->join_fields($smart, $this->linked);
		} else {
			$this->result = $smart;
		}

		# get the result count:
		$results = $result->RecordCount();
		# define the DB vars as a Smarty accessible block
		global $smarty;
		# define the results
		$smarty->assign($construct->table,$this->result);
		$smarty->assign('page',$VAR['page']);
		$smarty->assign('order',1111);
		$smarty->assign('sort',1111);
		$smarty->assign('limit',1111);
		$smarty->assign('search_id',1111);
		$smarty->assign('results',$results);

		# get the total pages for this search:
		$this->pages = 1;
		if ($search->results % $search->limit)
			$this->pages++;

		# total pages
		$smarty->assign('pages',$this->pages);
		# current page
		$smarty->assign('page',$current_page);
		$page_arr = '';
		for ($i=0; $i <= $this->pages; $i++)
			if ($this->page != $i)
				$page_arr[] = $i;

		# page array for menu
		$smarty->assign('page_arr',$page_arr);
	}

	/**
	* Get any inherited groups (parent) for a specified group
	* @return 	void
	* @since 	Version 1.0
	* @param 	int Group Id
	*/
	function group_parent_list($group) {
		# check if this group is a child with an active parent
		$db = &DB();
		$result = $db->Execute(sqlSelect($db,'group','id,parent_id',array('id'=>$group)));

		# error handling
		if ($result === false) {
			global $C_debug;

			$C_debug->error(__FILE__,__METHOD__,$db->ErrorMsg());
		}

		# loop through the results
		while (! $result->EOF) {
			# add this group to the list
			$this->group[] = $result->fields['id'];

			# get inherited groups and check that the associated
			# group is active before adding to the list of authorized groups.
			if ($result->fields['parent_id'] != 0)
				$this->group_parent_list($result->fields['parent_id']);

			# move to next record
			$result->MoveNext();
		}
	}

	/**
	* Mass add methods to a specific group
	* @return 	void
	* @since 	Version 1.0
	* @param 	int Group Id
	*/
	function update_relations() {
		global $VAR;
		$db = &DB();

		if (isset($VAR['id']) && $VAR['id'] != '')
			$arr = explode(',',$VAR['id']);
		else
			return;

		for ($i=0; $i<count($arr); $i++) {
			# Clear the entries first
			if ($i == 0)
				$db->Execute(sqlDelete($db,'group_method',array('module_id'=>$VAR['module_method_module_id'],'group_id'=>$VAR['module_method_group_id'])));

			if ($arr[$i] == 0)
				return;

			$db->Execute(sqlInsert($db,'group_method',array('method_id'=>$arr[$i],'module_id'=>$VAR['module_method_module_id'],'group_id'=>$VAR['module_method_group_id'])));
		}
	}
}
?>