<?php
/**
 * Copyright 2005-2017 de Solis Soluções Livres Ltda.
 *
 * Este arquivo é parte do programa Gnuteca.
 *
 * O Gnuteca é um software de propriedade da SOLIS, sendo desenvolvido
 * e mantido exclusivamente por esta empresa.
 *
 * A licença de uso está disponível mediante aquisição exclusiva junto à
 * SOLIS. A licença é concedida sem caráter de exclusividade ao licenciado.
 * Os direitos de uso são perpétuos.
 *
 * Embora os códigos fontes sejam fornecidos, o software é de propriedade
 * da SOLIS, não sendo permitido ao adquirente da licença a sua revenda,
 * empréstimo ou cessão (onerosa ou não) à terceiros. Também não é permitido,
 * a qualquer título e tempo, promover no software qualquer tipo de alienação,
 * reprodução, distribuição, divulgação, registro, licenciamento, transferência
 * ou qualquer outro ato que prejudique ou comprometa os direitos de propriedade
 * de software, o nome e a imagem da sua proprietária e do próprio software,
 * além de configurar concorrência à SOLIS.
 *
 * O licenciado, com o acesso ao código fonte do software, terá o direito de
 * promover mudanças no respectivo código. No entanto, nas situações em que ele
 * contar com o suporte oficial prestado pela SOLIS, não poderá promover mudanças
 * no código fonte, sob pena de perda do referido suporte.
 *
 * Para conhecer em detalhes o Termo de Licenciamento do Software Gnuteca
 * leia o arquivo “LICENCA.txt” disponível junto ao código deste software.
 * 
 * 
 *
 * This file handles the connection and actions for basConfig table
 *
 *
 *
 *
 *
 **/

class BusinessGnuteca3BusOperatorGroup extends GBusiness
{
    public $MIOLO,
           $idGroup,
           $groupName,
           $group,
           $access,
           $groupNameS;
    
    private $busGroup,
            $dbAcess;


    public function __construct()
    {
        $this->MIOLO = MIOLO::getInstance();
        $this->busGroup = $this->MIOLO->getBusiness('admin', 'group');
        $this->busAccess = $this->MIOLO->getBusiness('admin', 'access');
        parent::__construct();
    }

    /**
     * Obtém grupo de operador
     * 
     * @param (integer) $idGroup
     * @return BusinessGnuteca3BusOperatorGroup
     */
    public function getOperatorGroup($idGroup)
    {
        $this->busGroup->getById( $idGroup ); //obtém grupo
        $this->setData( $this->busGroup ); //seta os dados do business grupo nesse business
        $this->groupName = $this->group;
        
        $perms = $this->MIOLO->getPerms()->perms;
        $access = $this->busGroup->listAccessByIdGroup( $this->idGroup )->result;

        if ( is_array($access) )
        {
            $newAccess = array();
            foreach( $access as $i=> $value )
            {
                $newAccess[$value[0]]->idTransaction = $value[0];
                
                foreach( $perms as $keyPerm => $perm)
                {
                    if ( $keyPerm == $value[1] )
                    {
                        $newAccess[$value[0]]->$perm = DB_TRUE;
                    }
                }
            }
        }

        $this->access = $newAccess;

        return $this;
    }

    /**
     * Busca grupos de operadores
     *
     * @return (array) de dados
     */
    public function searchOperatorGroup()
    {
        //FIXME: filtrar pelo módulo gnuteca3
        
        $filter = new stdClass();
        $filter->group = strtoupper($this->groupNameS);
        $filter->idModule = 'gnuteca3';
        
        return $this->busGroup->listByFilters( $filter )->result;
    }

    /**
     * Insere grupo
     * 
     * @return (boolean) true caso for sucesso 
     */
    public function insertOperatorGroup()
    {
        //FIXME faz setData manual, pois o setData do group chama um método desnecessário
        $this->busGroup->idGroup = $this->idGroup;
        $this->busGroup->group = $this->groupName;
        $this->busGroup->idModule = 'gnuteca3';
        
        $this->busGroup->save();

        $idGroup = $this->busGroup->getId();

        if ( ($idGroup) && ( is_array($this->access)) )
        {
            $this->busAccess->updateGroupAccess( $idGroup, $this->access );
        }

        return $idGroup ? true : false;
    }

    /**
     * Atualiza operador
     * 
     * @return BusinessGnuteca3BusOperatorGroup
     */
    public function updateOperatorGroup()
    {
        //FIXME faz setData manual, pois o setData do group chama um método desnecessário
        $this->busGroup->idGroup = $this->idGroup;
        $this->busGroup->group = $this->groupName;
        $this->busGroup->idModule = 'gnuteca3';
        
        $this->busGroup->setPersistent( true );
        $this->busGroup->save();

        if ( is_array($this->access) )
        {
            $this->busAccess->updateGroupAccess( $this->idGroup, $this->access );
        }

        return $this->idGroup ? true : false;
    }

    /**
     * Deleta grupo
     *
     * @param (integer) $idGroup
     * @return (boolean)
     */
    public function deleteOperatorGroup($idGroup)
    {
        //apaga o grupo
        $this->busGroup->getById( $idGroup );
        $this->busGroup->delete();

        //apaga as permissões
        $this->busAccess->deleteAccessByGroup( $idGroup );

        return true;
    }
    
    /**
     * Lista todas as transações trazendo o id e nome
     * 
     * @return (array) de transações 
     */
    public static function listTransactions()
    {
        $MIOLO = MIOLO::getInstance();
        $MIOLO->uses('db/BusMaterial.class.php', 'gnuteca3');
        
        $busTransaction = $MIOLO->getBusiness('admin', 'transaction');
        $transactions =  $busTransaction->listByModule('gnuteca3')->result; //lista as transações do módulo gnuteca3
        
        //ordernação do vetor
        $newValue = array();
        if ( is_array($transactions) )
        {
            foreach( $transactions as $key => $transaction )
            {
                // Traz a transação caso não tenha descrição de transação.
                $newValue[$transaction[0]] = $transaction[3] ? $transaction[3] : $transaction[1];
                $orderValue[$transaction[0]] = BusinessGnuteca3BusMaterial::prepareTopographicIndex($newValue[$transaction[0]]);
            }
        }
        
        $transactions = $newValue;
        array_multisort( $orderValue, $transactions ); //ordena o array, mas acaba destruindo as chaves
        
        //coloca a chave correta novamente
        $newTransaction = array();
        foreach( $transactions as $key => $value )
        {
            foreach($newValue as $key2 => $value2 )
            {
                if ( $value == $value2 )
                {
                    $newTransaction[$key2] = $value2;
                }
            }
        }
        
        return $newTransaction;
    }

}
?>
