<?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.
 * 
 * 
 *
 *
 *
 *
 * */
class FrmAnalytics extends GForm
{

    /** @var BusinessGnuteca3BusLibraryUnit */
    public $business;
    public $valor;

    public function __construct()
    {
        $this->setAllFunctions('Analytics', null, 'analyticsId', 'analyticsId');
        parent::__construct();
    }

    public function mainFields()
    {
        $date = GDate::now();
        //Define campos da data.
        $controls[] = new MLabel(_M('Data/hora', $this->module));
        $controls[] = new MCalendarField('date', $date->getDate(GDate::MASK_DATE_DB));
        $controls[] = new MTextField('hour', ($date->getHour() . ":" . $date->getMinute()));
        $busAnalytics = $this->MIOLO->getBusiness($this->module, 'BusAnalytics');
        $busLibrarynUnit = $this->MIOLO->getBusiness($this->module, 'BusLibraryUnit');

        if ($this->function == 'update')
        {
            $fields[] = new MIntegerField('analyticsId', null, _M('Código', $this->module), FIELD_ID_SIZE, null, null, true);
        }

        $fields[] = new MTextField('query', NULL, _M('Query', $this->module), FIELD_DESCRIPTION_SIZE);
        $fields[] = new MTextField('__action', NULL, _M('Ação', $this->module), FIELD_DESCRIPTION_SIZE);
        $fields[] = $evento = new MTextField('__event', NULL, _M('Evento', $this->module), FIELD_DESCRIPTION_SIZE);
        $fields[] = new GSelection('libraryUnitId', NULL, _M('Unidade de biblioteca', $this->module), $busLibrarynUnit->listLibraryUnit());
        $fields[] = new GSelection('operator', NULL, _M('Operador', $this->module), GOperator::listOperators());
        $fields[] = new MTextField('personId', NULL, _M('Pessoa', $this->module), FIELD_DESCRIPTION_SIZE);
        $fields[] = new GContainer('timeContainer', $controls);
        $fields[] = new MTextField('ip', NULL, _M('Ip', $this->module), FIELD_DESCRIPTION_SIZE);
        $fields[] = new MFloatField('timeSpent', NULL, _M('Tempo gasto', $this->module), FIELD_TIME_SIZE);
        $fields[] = new MTextField('browser', NULL, _M('Navegador', $this->module), FIELD_DESCRIPTION_SIZE);
        $fields[] = new GSelection('logLevel', NULL, _M('Nível de log', $this->module), $this->business->listLogLevel());
        $fields[] = new GSelection('accessType', NULL, _M('Tipo de acesso', $this->module), $this->business->listAccessType());
        $fields[] = new MTextField('menu', NULL, _M('Menu', $this->module), FIELD_DESCRIPTION_SIZE);
        $this->setFields($fields);

        $validators[] = new MTIMEValidator('hour');
        $validators[] = new MRequiredValidator('logLevel');
        $validators[] = new MDATEDMYValidator('date');
        $validators[] = new MFloatValidator('timeSpent');

        $this->setFields($fields);
        $this->setValidators($validators);
        
        $this->valor = $evento->getValue();
        
        if ( $this->function == 'insert' )
        {
            // Obtém os dados em tempo real.
            $data = BusinessGnuteca3BusAnalytics::getRealTimeAnalytics();
            
            // Define os dados no formulário.
            $this->setData($data);
        }
    }

    /**
     * Repassa para o busAnalytics o $data->time no formato correto.
     *
     * @return object $data
     */
    public function getData()
    {
        $data = parent::getData();

        //só concatena caso exista
        if ($data->date && $data->hour)
        {
            $data->time = $data->date . ' ' . $data->hour;
        }
        
        $data->action = $data->__action;
        $data->event = $data->__event;

        return $data;
    }

    /**
     * @param object $data
     */
    public function setData($data)
    {
        $time = new GDate($data->time);
        $data->hour = $time->getHour() . ':' . $time->getMinute();
        $data->date = $time->getDate(GDate::MASK_DATE_USER);
        
        $data->__event = $data->event;
        $data->__action = $data->action;

        parent::setData($data, true);
    }

}

?>