<?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.
 * 
 * 
 *
 * Spreadsheet form
 *
 *
 *
 *
 *
 **/
class FrmSpreadsheet extends GForm
{
    public $MIOLO;
    public $module;
    public $busMarcTagListingOption;

    public function __construct()
    {
        $this->MIOLO    = MIOLO::getInstance();
        $this->module   = MIOLO::getCurrentModule();
        $this->busMarcTagListingOption = $this->MIOLO->getBusiness($this->module, 'BusMarcTagListingOption');
       
        if (!$_REQUEST['level'])
        {
            $_REQUEST['level'] = '#';
        }
        $this->setAllFunctions('Spreadsheet', null, array('category', 'level'), array('category', 'level'));
        parent::__construct();
    }

    public function mainFields()
    {
        if ($this->function == 'update')
        {
            $fields[] = new MTextField('category', $this->category->value, _M('Categoria', $this->module),FIELD_ID_SIZE,null, null, true);
            $fields[] = new MTextField('level', $this->level->value, _M('Nível', $this->module),FIELD_ID_SIZE, null, null, true);
        }
        else if ($this->function == 'insert')
        {
            $listCategory = $this->busMarcTagListingOption->listMarcTagListingOption('CATEGORY');
            $fields[] = new GSelection('category', $this->category->value, _M('Categoria', $this->module), $listCategory, true);
            $validators[] = new MRequiredValidator('category');

            $listLevel = $this->busMarcTagListingOption->listMarcTagListingOption('LEVEL');
            $fields[] = new GSelection('level', $this->level->value, _M('Nível', $this->module), $listLevel, true);
            $validators[] = new MRequiredValidator('level');
        }

        $fields[] = new MTextField('menuName',    null, _M('Nome',   $this->module), FIELD_DESCRIPTION_SIZE);
        $fields[] = new MTextField('menuLevel',   null, _M('Ordem do menu',   $this->module), FIELD_ID_SIZE);        
        $fields[] = new MMultiLIneField('field', $this->field->value, _M('Campo', $this->module), null, FIELD_MULTILINE_ROWS_SIZE, FIELD_MULTILINE_COLS_SIZE);

        $validators[] = new MRequiredValidator('field');

        // REQUIRED BOX
        $requiredLabel  = new MLabel( _M('Validador da obra', $this->module) . ':' );
        $requiredLabel  ->setWidth(FIELD_LABEL_SIZE);
        $required       = new MMultiLIneField   ('required', $this->required->value, null, null, FIELD_MULTILINE_ROWS_SIZE, FIELD_MULTILINE_COLS_SIZE);
        $fields[]       = new GContainer       ("requiredContainer", array($requiredLabel, $required));

        $repeatFieldRequiredLabel   = new MLabel( _M('Validador de campos repetitivos', $this->module) . ':' );
        $repeatFieldRequiredLabel   ->setWidth(FIELD_LABEL_SIZE);
        $repeatFieldRequired        = new MMultiLIneField   ('repeatFieldRequired', $this->repeatFieldRequired->value, null, null, FIELD_MULTILINE_ROWS_SIZE, FIELD_MULTILINE_COLS_SIZE);
        $fields[]                   = new GContainer       ("repeatFieldRequiredContainer", array($repeatFieldRequiredLabel, $repeatFieldRequired));

        // DEFAULT VALUE BOX
        $defaultValueLabel  = new MLabel( _M('Valor padrão', $this->module) . ':' );
        $defaultValueLabel  ->setWidth(FIELD_LABEL_SIZE);
        $defaultValue       = new MMultiLIneField   ('defaultValue', $this->defaultValue->value, null, null, FIELD_MULTILINE_ROWS_SIZE, FIELD_MULTILINE_COLS_SIZE);
        $fields[]           = new GContainer       ("defaultValueContainer", array($defaultValueLabel, $defaultValue));

        // MENU BASE GROUP
        $lblMenuName = new MLabel( _M('Nome do menu',   $this->module) . ':' );
        $lblMenuLevel = new MLabel( _M('Nível',       $this->module) . ':' );
        $lblMenuOption = new MLabel( _M('Opção',      $this->module) . ':' );

        $lblMenuName->setWidth(FIELD_LABEL_SIZE);
        $lblMenuLevel->setWidth(FIELD_LABEL_SIZE);
        $lblMenuOption->setWidth(FIELD_LABEL_SIZE);

        $this->setFields($fields);
        $this->setValidators($validators);

    }
    
    /**
     * Método reescrito para validar os valores do campo "campo" do formulario.
     */
    public function tbBtnSave_click()
    {
        $needed = array('949.1','949.3','949.c','949.d');
        
        $data = $this->getData();
        $fields = $data->field;
        
        // Valida somente para as planilhas que já tiverem aba de exemplares.
        if ( stripos($fields, '949') )
        {
            $lines = explode("\n", $fields);

            $find = array();

            // Percorre as linhas obtendo os campo necessários.
            foreach ( $lines as $line )
            {
                $val = explode('=', $line);
                $values = explode(',', $val[1]);

                foreach( $values as $value )
                {
                    if ( in_array($value, $needed) )
                    {
                        $find[] = $value;
                    }
                }
            }

            // Compara os arrays.
            $diff = array_diff($needed, $find );

            // Caso tenha diferença entre os arrays, quer dizer que estão faltando alguns campos.
            if ( count($diff) > 0 )
            {
                $this->error(_M('É necessário inserir o(s) campo(s) "@1"', $this->module, implode(',', $diff)));
            
                return false;
            }
        }
        
        parent::tbBtnSave_click(); 
        
    }
}
?>