<?

class Sistema_Form_ExcecaoUsuario extends Agro_Form {
	
	public function init() {
		$this->id_usuario = $this->createElement('hidden', 'id_usuario');
		$this->id_usuario->setDecorators($this->buttonDecorator);
		$this->addElement($this->id_usuario);
		
		$this->ds_nome_role = $this->createElement('text', 'ds_nome_role');
		$this->ds_nome_role->setAttrib("disable","disable");
		$this->ds_nome_role->setDecorators($this->elementDecorator);
		$this->ds_nome_role->setLabel("Role");
		$this->addElement($this->ds_nome_role);
		
		$btt = $this->createElement('button', 'salvar', array('type'=>'submit'));
		$btt->setDecorators($this->buttonDecorator);
		$btt->setLabel('Salvar');
		$this->addElement($btt);
		
		$cancel = $this->createElement('button', 'cancelar', array('onclick'=>"location.href='".$_SERVER['HTTP_REFERER']."'"));
		$cancel->setDecorators($this->buttonDecorator);
		$cancel->setLabel('Cancelar');
		$this->addElement($cancel);
		
		$this->addDisplayGroup(array('salvar', 'cancelar'), 'buttons');
	}
	
	public function getMenusUsuario($id_usuario) {
		$htmlMenus = "<ul class='unorderedlisttree' >";
		$htmlMenus .= $this->getMenusContent($htmlMenus,'',$id_usuario);
		$htmlMenus .= "</ul>";
		
		return $htmlMenus;
	}
	
	private function checkAcaoUsuario($item, $id_usuario) {
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();

		$sql = "select * from sistema.usuarios_acao where id_acao = {$item['id']} and id_usuario = $id_usuario";
		$Rs = $Db->FetchAll($sql);
		if (count($Rs)) {
			return $Rs[0]['fl_permitido'];
		} else {
			return $item['fl_permitido'];
		}
	}
	
	private function getMenusContent(&$htmlMenus, $idPai=null, $id_usuario=null) {
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$menu = $this->carregaAcoes($idPai, $id_usuario);
		$Acl = Agro_Acl::getInstance();
		
		if (is_array($menu)) {
			foreach ($menu as $item) {
				$htmlMenus .= "<li>";
				
				//testa pra ver se a ação ja foi cadastrada para o usuario, como uma exceção
				// caso contrario, essa funcao devolve o flag original do item que veio do perfil
				$flag = $this->checkAcaoUsuario($item, $id_usuario);
				if ($flag == True) {
					$permitidoChecked = "checked";
				} else {
					$permitidoChecked = "";
				}
				
				$htmlMenus .= "<input type='checkbox' name='menus[{$item['id']}]' value='1' id='menu_{$item['id']}' $permitidoChecked />
					{$item['ds_label']}";
				
				$htmlMenus .= "<ul>";
				$this->getMenusContent($htmlMenus,$item['id'], $id_usuario);
				$htmlMenus .= "</ul>";

				
				$htmlMenus .= "</li>";
			}
			
		}
	}
	
	private function carregaAcoes($idPai, $id_usuario) {
			$sql = "
				select distinct
					m.id,
					m.ds_nome,
					m.ds_label,
					m.ds_module,
					m.ds_controller,
					m.ds_action,
					rm.fl_permitido,
					m.nr_ordem
				from
					sistema.usuarios u inner join
					sistema.roles_acao rm on u.id_role = rm.id_role inner join
					sistema.acao m on rm.id_acao = m.id
				where
					m.id_parent ".($idPai ? "= $idPai" : ' is null ')." and
					u.id = $id_usuario and
					m.fl_ativo = true
				order by
					m.nr_ordem";
			
			$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
			return $Db->FetchAll($sql);
	}
}