<?php

class Sistema_Model_RolesAcao extends Agro_Db_Table_Abstract {
	protected $_schema = 'sistema';
	protected $_name = 'roles_acao';
	protected $_primary = array('id_role', 'id_acao');
	protected $_sequence = false;
	
	public function save(array $data) {
		$Row = $this->find($data['id_role'], $data['id_acao'])->current();
		if (!$Row){
			$Row = $this->createRow();
		}
		
		$Row->id_role = $data['id_role'];
		$Row->id_acao = $data['id_acao'];
		$Row->fl_permitido = $data['fl_permitido'];
		
		return $Row->save();
	}
	
	//nega todas as ações que nao estao no array para um determinado perfil
	public function denyActions($acoes, $perfil) {
		$acao = implode(',', $acoes);
		
		$sql = "update sistema.roles_acao set fl_permitido = false where id_role = $perfil and id_acao NOT IN ($acao)";
		$this->_db->query($sql);
	}
	
	public function clear($idRole) {
		$this->getDefaultAdapter()->query("delete from sistema.roles_acao where id_role = $idRole");
	}
	
	public function checkPermission($idRole, $idAcao) {
		$Row = $this->find($idRole, $idAcao)->current();
		return $Row->fl_permitido;
	}
	
	public function getPrivileges($role) {
		if ($role != 'ADMIN') {
			$Select = $this->select()->setIntegrityCheck(false)->distinct();
			$Select->from(array('ra' => 'sistema.roles_acao'), 'fl_permitido');
			$Select->join(array('r' => 'sistema.roles'), 'ra.id_role = r.id', false);
			$Select->join(array('a' => 'sistema.acao'), 'ra.id_acao = a.id', array('ds_module', 'ds_controller', 'ds_action'));
			$Select->where('r.ds_chave = ?', $role);

			return $this->fetchAll($Select);
		}
		
		return;
	}
}