<?php

class Sistema_Model_UsuarioAcao extends Agro_Db_Table_Abstract {
	protected $_primary = array('id_usuario', 'id_acao');
	protected $_name = 'usuarios_acao';
	protected $_schema = 'sistema';

	public function checkPermission($idUsuario, $idAcao) {
		$Row = $this->find($idUsuario, $idAcao)->current();
		return $Row->fl_permitido;
	}

	public function getPrivileges($user, array $acoesRestricoesIgnorar = null) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('a' => 'sistema.acao'), array('ds_module', 'ds_controller', 'ds_action'));
		$Select->join(array('u' => 'sistema.usuarios_acao'), 'a.id = u.id_acao', ['id_acao, fl_permitido']);
		$Select->where('u.id_usuario = ?', $user);

		if (!empty($acoesRestricoesIgnorar)) {
		    $Select->where('u.id_acao not in (?)', $acoesRestricoesIgnorar);
        }

		return $this->fetchAll($Select);
	}

	public function getExcecoes($id_usuario) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('ua' => 'sistema.usuarios_acao'));
		$Select->where('ua.id_usuario = ?', $id_usuario);

		$Rs = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchAll($Select);
		return count($Rs);
	}

	public function clear($idUsuario) {
		return $this->getDefaultAdapter()->query("delete from sistema.usuarios_acao ua where ua.id_usuario = $idUsuario");
	}

    public function deletarByUsuarioAcao(int $idUsuario, int $idAcao)
    {
        return $this->getDefaultAdapter()->query("DELETE FROM sistema.usuarios_acao WHERE id_usuario = {$idUsuario} AND id_acao = {$idAcao}");
    }
}