<?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.
 * 
 * 
 * Preference form
 *
 *
 *
 *
 *
 **/
class FrmPreference extends GForm
{
    public $tables;
    public $busLibraryUnit;

    function __construct()
    {
        $this->MIOLO = MIOLO::getInstance();
        $this->module = MIOLO::getCurrentModule();
    	$this->setAllFunctions('Preference', null, array('moduleConfig','parameter'), 'parameter');
        $this->busLibraryUnit = $this->MIOLO->getBusiness($this->module, 'BusLibraryUnit');

        parent::__construct();

        if  ( $this->primeiroAcessoAoForm() && ($this->function != 'update') )
        {
            $this->tables['libraryUnitConfig']->clearData();
        }
    }


    public function createFields()
    {
        $moduleConfig = new MTextField('moduleConfig', strtoupper($this->module), _M('Módulo',$this->module), 20);
        $moduleConfig->setReadOnly(true);
        $fields[] = $moduleConfig;
        $validators[] = new MRequiredValidator('moduleConfig');

        if ( $this->function != 'update' )
        {
            $parameter = new MTextField('parameter', $this->parameter->value, _M('Parâmetro',$this->module), FIELD_DESCRIPTION_SIZE);
            #$this->setFocus('parameter');
            $fields[] = $parameter;
            $validators[] = new MRequiredValidator('parameter', '', 255);
        }
        else
        {
            $parameter = new MTextField('parameter', $this->parameter->value, _M('Parâmetro',$this->module), FIELD_DESCRIPTION_SIZE);
            #$this->setFocus('configValue');
            $parameter->setReadOnly(true);
            $fields[] = $parameter;
            $validators[] = new MRequiredValidator('parameter', '', 255);
        }
        $configValue = new MMultiLineField('configValue', $this->getFormValue('configValue',$data->value), _M('Conteúdo',$this->module), 20, 5, FIELD_MULTILINE_COLS_SIZE);
        $fields[] = $configValue;

        $description = new MMultiLineField('description', $this->getFormValue('description',$data->description), _M('Descrição',$this->module), 40, 5, FIELD_MULTILINE_COLS_SIZE);
        $fields[] = $description;
        $validators[] = new MRequiredValidator('description');

        $type = new GSelection('type', $this->getFormValue('type',$data->type), _M('Tipo do campo',$this->module), BusinessGnuteca3BusDomain::listForSelect('PREFERENCE_TYPE') );
        $fields[] = $type;
        $validators[] = new MRequiredValidator('type');

        $fields[] = new GSelection('groupBy', null, _M('Grupo', $this->module), BusinessGnuteca3BusDomain::listForSelect('ABAS_PREFERENCIA')  );

        $fields[] = new MTextField('orderBy', null, _M('Ordem',$this->module), FIELD_ID_SIZE);
        $validators[] = new MIntegerValidator('orderBy', _M('Order by', $this->module));

        $fields[] = new MTextField('label', null, _M('Etiqueta',$this->module), FIELD_DESCRIPTION_SIZE);

        //
        //Library unit config Subdetail
        //
        unset($flds, $columns, $valids);

        $flds[]     = new GSelection('libraryUnitId', null, _M('Unidade de biblioteca', $this->module), $this->busLibraryUnit->listLibraryUnit(null, true));
        $valids[]   = new GnutecaUniqueValidator('libraryUnitId', _M('Unidade de biblioteca', $this->module), 'required');
        $flds[]     = new MMultiLineField('content_', null, _M('Conteúdo', $this->module), 20, 5, FIELD_MULTILINE_COLS_SIZE);
        $valids[]   = new MRequiredValidator('content_', _M('Conteúdo', $this->module));

        $columns[] = new MGridColumn( _M('Código da biblioteca',$this->module),     'left', true, null, false,'libraryUnitId' );
        $columns[] = new MGridColumn( _M('Unidade de biblioteca', $this->module),            'left', true, null, true, 'libraryName' );
        $columns[] = new MGridColumn( _M('Conteúdo', $this->module),                    'left', true, null, true, 'content_' );

        $this->tables['libraryUnitConfig'] = new GRepetitiveField('libraryUnitConfig', _M('Configuração de unidade de biblioteca', $this->module), NULL, NULL, array('edit', 'remove'));
        $this->tables['libraryUnitConfig']->setFields($flds);
        $this->tables['libraryUnitConfig']->setColumns($columns);
        $this->tables['libraryUnitConfig']->setValidators($valids);
        $fields[] = new MSeparator();
        $fields[] = $this->tables['libraryUnitConfig'];
        //Library unit config Subdetail END

        $this->setFields($fields);
        if ( isset($validators) )
        {
            $this->setValidators($validators);
        }
    }

    public function loadFields()
    {
        if (!MIOLO::_REQUEST('moduleConfig') || !MIOLO::_REQUEST('parameter'))
        {
            return;
        }

        $data = $this->business->getPreference( MIOLO::_REQUEST('moduleConfig'), MIOLO::_REQUEST('parameter') );
        $this->setData( $this->business , false );

        $libraries = array();
        $tmpLibraries = $this->busLibraryUnit->listLibraryUnit(false, true);
        if ($tmpLibraries)
        {
            foreach ($tmpLibraries as $key => $val)
            {
                $libraries[] = $val[0];
            }
        }
        $luc = $this->parseLibraryUnitConfig($data->libraryUnitConfig);
        if ($luc)
        {
            $_luc = array();
            foreach ($luc as $key => $val)
            {
                if (in_array($val->libraryUnitId, $libraries)) //Se operador tem acesso a esta biblioteca
                {
                    $val->content_ = $val->value;
                    $_luc[] = $val;
                }
            }
        }
        
        $this->tables['libraryUnitConfig']->setData($_luc);
    }

    public function tbBtnSave_click($sender=NULL)
    {
        $data = $this->getData();

        //Parse penalty data
        $luc = $this->tables['libraryUnitConfig']->getData();
        //$luc = $data->libraryUnitConfig;

        if ($luc)
        {
            foreach ($luc as $key => $val)
            {
                $luc[$key]->parameter = $data->parameter;
                $luc[$key]->value       = $val->content_;
            }
        }
        $data->libraryUnitConfig = $luc;
        $allowed = $this->busLibraryUnit->listLibraryUnit(false, true);
        if ($allowed) //Monta lista de bibilotecas permitidas
        {
            foreach ($allowed as $v)
            {
                $data->allowedLibraryUnitConfig[] = $v[0];
            }
        }

        parent::tbBtnSave_click($sender, $data);
    }

    public function addToTable($args, $forceMode = FALSE)
    {
    	$item = $args->GRepetitiveField;
    	switch($item)
    	{
    		case 'libraryUnitConfig':
                        $args = $this->parseLibraryUnitConfig($args);
                        break;
    	}
    	($forceMode) ? parent::forceAddToTable($args) : parent::addToTable($args);
    }

    public function forceAddToTable($args)
    {
        $this->addToTable($args, TRUE);
    }

    public function parseLibraryUnitConfig($data)
    {
    	if (is_array($data))
    	{
    		$arr = array();
    		foreach ($data as $val)
    		{
    			$arr[] = $this->parseLibraryUnitConfig($val);
    		}
    		return $arr;
    	}
    	else if (is_object($data))
    	{
            $data->libraryName = $this->busLibraryUnit->getLibraryUnit($data->libraryUnitId)->libraryName;
            return $data;
    	}
    }
}
?>