<?php

require_once 'connect.php';
require_once 'inc/messages.php';
require_once 'usuario.php';

function funcionalidade_verificaAcesso($redirect = null) {
  $possui = funcionalidade_possuiAcesso();
  if (!$possui) {
    addError('Acesso negado');
    if ($redirect != null) {
      header("Location:$redirect");
      exit;
    }
  }
}

function funcionalidade_urlByScript() {
  $scriptName = basename($_SERVER["SCRIPT_FILENAME"], '.php');
  $funcionalidade = explode('-', implode('-', explode('_', basename($scriptName))));
  if (count($funcionalidade) > 1) {
    array_pop($funcionalidade);
  }
  // os helpers também podem ter acesso verificado
  if ($funcionalidade[0] === 'helper') {
    $funcionalidade[0] = 'erpc';
  }
  $funcionalidade = implode('_', $funcionalidade);
  return $funcionalidade;
}

// Retorna true se a funcionalidade for aberta a todos, um número com o id da funcionalidade caso tenha permissão, false caso não tenha permissão.
// A funcionalidade é detectada baseada no script requisitado, e com o sufixo retirado. Ele separa cada parte do nome por '-' ou '_', depois junta tudo com '_'
// e procura na base. Por exemplo, no script erpc_parametros_add.php, a url buscada na base é erpc_funcionalidades. Se tiver só uma parte mesmo, como index.php
// ou desktop.php, fica index e desktop respectivamente.
// Quando a funcionalidade está vinculada ao grupo do usuário logado, ou se ela não está vinculada com algum grupo. O 2º caso também considera como possui
// permissão caso esteja logado no sistema.
function funcionalidade_possuiAcesso() {
  global $conexao;
  $ok = true;
  $funcionalidade = funcionalidade_urlByScript();

  // caso a funcionalidade não seja encontrada na base, considera como aberta para todos (logados ou não)
  $sql = 'select f.id
    from erpc_funcionalidades f
    where
    f.ds_path_funcionalidade=?';
  $values[] = $funcionalidade;
  $result = _prepareAndQuery($sql, $values);
  if ($result !== false) {
    if (count($result) > 0) {
      $id_funcionalidade = $result[0]['id'];
      // encontrou a funcionalidade, então verifica se aquela funcionalidade está vinculada ao grupo do usuário logado, ou se ela não está vinculada
      // com nenhum grupo. O 2º caso também considera como possui permissão caso esteja logado no sistema
      $user = getLoggedUser();
      if ($user !== null) {
        $sql = 'select gf.id_funcionalidade as id
          from erpc_grupo_funcionalidade gf
          where gf.id_grupo=? and gf.id_funcionalidade =?
          union
          select f.id
          from erpc_funcionalidades f
          where
          f.id=?
          and f.id not in (select gf.id_funcionalidade from erpc_grupo_funcionalidade gf)';
        $values = array();
        $values[] = $user['id'];
        $values[] = $id_funcionalidade;
        $values[] = $id_funcionalidade;
        $result = _prepareAndQuery($sql, $values);
        if ($result !== false) {
          if (count($result) > 0) {
            $ok = $id_funcionalidade;
          } else {
            $ok = false;
          }
        }
      }
    } else {
      // não encontrou a funcionalidade com base no script, então considero que todos possuem a permissão
      $ok = true;
    }
  }

  return $ok;
}

// retorna array com lista de módulos, ou false se deu erro
function funcionalidade_getAll() {
  global $conexao;
  // $sql = "select * from erpc_funcionalidades where st_ativo=?";
  $sql = "select * from erpc_funcionalidades where 1=?";
  $values[] = '1';
  $result = _prepareAndQuery($sql, $values);

  return $result;
}

// retorna array associativo com objeto, ou false se deu erro/não encontrar
function funcionalidade_getById($id) {
  global $conexao;
  $sql = "select * from erpc_funcionalidades where id=?";
  $values[] = $id;
  $result = _prepareAndQuery($sql, $values);
  if ($result !== false) {
    if (count($result) === 1) {
      $result = $result[0];
    } else {
      $result = false;
      addError('Id não encontrado');
    }
  }

  return $result;
}

// insere novo módulo
function funcionalidade_insert($funcionalidade) {
  global $conexao;
  $ok = false;
  if($funcionalidade['st_menu']==''){
    $funcionalidade['st_menu']=0;
  }
  if($funcionalidade['id_pai']==''){
    $funcionalidade['id_pai']=0;
  }


  $sql = 'insert into erpc_funcionalidades ';
  $campos = array(                'ds_funcionalidade',                  'ds_path_video',                  'ds_path_funcionalidade',                  'st_ativo', 'id_tipo_funcionalidade', 'ds_label', 'st_menu', 'id_pai');
  $values = array($funcionalidade['ds_funcionalidade'], $funcionalidade['ds_path_video'], $funcionalidade['ds_path_funcionalidade'], $funcionalidade['st_ativo'], $funcionalidade['id_tipo_funcionalidade'], $funcionalidade['ds_label'], $funcionalidade['st_menu'], $funcionalidade['id_pai']);
  $sql .= '(' . implode(',', $campos) . ') values (' . trim(str_repeat('?,', count($values)), ',') . ')';

  $ok = _prepareAndExecute($sql, $values);
  if ($ok !== false) {
    addMessage('Inserido com sucesso');
  }
  return $ok;
}

// altera a senha do usuário
function funcionalidade_update($funcionalidade) {
  global $conexao;
  $ok = false;
  if($funcionalidade['st_menu']==''){
    $funcionalidade['st_menu']=0;
  }
  
  /*if($funcionalidade['id_pai']==''){
    $funcionalidade['id_pai']=0;
  }*/
  

  $sql = 'update erpc_funcionalidades set ds_funcionalidade = ?, ds_path_video = ?, ds_path_funcionalidade = ?, id_tipo_funcionalidade=?, ds_label=?, st_menu=?, id_pai=?, st_ativo=?';
  $values = array($funcionalidade['ds_funcionalidade'], $funcionalidade['ds_path_video'], $funcionalidade['ds_path_funcionalidade'], $funcionalidade['id_tipo_funcionalidade'], $funcionalidade['ds_label'], $funcionalidade['st_menu'], $funcionalidade['id_pai'], $funcionalidade['st_ativo']);
  $sql .= ' where id = ?';
  $values[] = $funcionalidade['id'];
  $ok = _prepareAndExecute($sql, $values);
  if ($ok !== false) {
    addMessage('Atualizado com sucesso');
  }
  return $ok;
}

function funcionalidade_delete($funcionalidade) {
  global $conexao;
  $ok = false;
  $sql = 'update erpc_funcionalidades set st_ativo = 0';
  $values = array();
  $sql .= ' where id = ?';
  $values[] = $funcionalidade['id'];
  $ok = _prepareAndExecute($sql, $values);
  if ($ok !== false) {
    addMessage('Removido com sucesso');
  }
  return $ok;
}

function funcionalidade_create() {
  date_default_timezone_set('America/Sao_Paulo');
  $funcionalidade = array(
    'id' => '',
    'id_tipo_funcionalidade' => '',
    'ds_funcionalidade' => '',
    'ds_path_video' => '',
    'ds_path_funcionalidade' => '',
    'ds_label' => '',
    'id_pai'  => '',
    'st_menu' => '',
    'st_ativo' => '1',
  );
  return $funcionalidade;
}
