<?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
 *
 *
 *
 *
 *
 **/

class GPersonLookup extends GContainer
{
    public $personLabel; //não mudar o nome do atributo para "label", pois não funciona no formulário o atributo vem vazio, em alguma classe pai o atributo é limpado

    private $lookup;

    //FIXME: permitir passar controls ou mudar o id do campo descrição
    function __construct($fieldId = 'personId', $label = 'Pessoa', $lookup = 'activePerson')
    {
        $module = 'gnuteca3';

        //label do lookup
        $fields[] = $this->personLabel = new MLabel($label . ':');
        $this->personLabel->setWidth(FIELD_LABEL_SIZE);

        //campo lookup
        $fields[] = $this->lookup = new GPersonLookupTextField($fieldId, '', '', FIELD_LOOKUPFIELD_SIZE, NULL, NULL, 'personIdDescription,linkId, linkDesc', $module, $lookup);

        //descrição do lookup
        $fields[] = $personIdDesc = new MTextField('personIdDescription', null, NULL, FIELD_DESCRIPTION_LOOKUP_SIZE);
        $personIdDesc->setReadOnly(true);

        //string de campos relacionados
        $related =  $fieldId . ',personIdDescription';

        //adiciona campos especificos somente quando for um lookup activePerson
        if ($lookup == 'activePerson') {
            $related .= ',linkId,linkDesc'; //campos relacionados do activePerson

            //demais campos relacionados
            $fields[] = new MHiddenField('linkId');
            $fields[] = $linkDesc = new MTextField('linkDesc');
            $linkDesc->setReadOnly(true);
        }

        //seta o contexto para o lookup (ficou em baixo pois precisa montar a string de campos relacionados $related)
        $this->lookup->setContext($module, $module, $lookup, 'filler', $related, '', true);

        parent::__construct('pContainer_' . $fieldId, $fields);
    }

    /**
     * Seta o lookup de pessoa como readOnly
     * @param boolean $readOnly para setar o lookup interno como somente leitura 
     */
    public function setReadOnly($readOnly = false)
    {
        $this->lookup->setReadOnly($readOnly);
    }
}

class GPersonLookupTextField extends GLookupTextField
{
    public function setValue($value)
    {
        $MIOLO = MIOLO::getInstance();
        $module = MIOLO::getCurrentModule();

        $authenticateType = MY_LIBRARY_AUTHENTICATE_TYPE == BusinessGnuteca3BusAuthenticate::TYPE_AUTHENTICATE_LOGIN_BASE
            || MY_LIBRARY_AUTHENTICATE_TYPE == BusinessGnuteca3BusAuthenticate::TYPE_AUTHENTICATE_LOGIN
            || MY_LIBRARY_AUTHENTICATE_TYPE == BusinessGnuteca3BusAuthenticate::TYPE_AUTHENTICATE_AZURE;

        if (strlen($value) > 0 && $authenticateType) {
            $business = $MIOLO->getBusiness($module, 'BusPerson');
            $person = $business->getPerson($value);
            $value = $person->login;
        }

        parent::setValue($value);
    }
}
