<?php
/**
 * Copyright 2005-2021 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 GSaraivaImport, extends the default gIso2709.
 *
 *
 *
 *
 *
 **/

$MIOLO->getClass('gnuteca3', 'GBibliotecaDigitalImport');
class GMinhaBibliotecaImport extends GBibliotecaDigitalImport
{
    
    /**
     * Executa a exportação dos materiais
     * @return boolean true se importou com sucesso 
     */
    public function execute()
    {
        $MIOLO = MIOLO::getInstance();
        $ok = array();
        $formValues = new stdClass();
        $repetitiveControl = array();
        $urlCover = null;
        
        if ( is_array($this->tags) && ($this->tags[0] instanceof stdClass) )
        {
            $isbn = null;
            $controlNumber = null;
            
            // Obtém ISBN.
            foreach( $this->tags as $l => $tag )
            {
                if ( $tag->fieldid . '.' . $tag->subfieldid == MARC_ISBN_TAG )
                {
                    $isbn = $tag->content;
                    $controlNumber = $this->obterMaterial($isbn, 'Minha Biblioteca');
                    break;
                }
            }

            $this->busCatalogue->setLoadFields();

            if ( $controlNumber )
            {
                $this->busCatalogue->controlNumber = $controlNumber;
                $this->busCatalogue->function = 'update';
                $formValues->controlNumber = $controlNumber;
                $this->log("Minha Biblioteca - {$isbn} - Nº controle {$controlNumber} - (editar)");
            }
            else
            {
                $this->log("Minha Biblioteca - {$isbn} - sem número de controle - (inserir)");
            }

            $formValues->leaderString = '00000nam**22000004**4500';
            $formValues->marcLeader = '00000nam**22000004**4500';
            $formValues->firstOperator = GOperator::getOperatorId();
            $formValues->lastOperator = GOperator::getOperatorId();

            $tagFonteCatalogacao = new stdClass();
            $tagFonteCatalogacao->fieldid = '040'; 
            $tagFonteCatalogacao->subfieldid = 'a';
            $tagFonteCatalogacao->line = 0;
            $tagFonteCatalogacao->indicator1 = null;
            $tagFonteCatalogacao->indicator2 = null;
            $tagFonteCatalogacao->content = 'Minha Biblioteca';
            $this->tags[] = $tagFonteCatalogacao;

            foreach( $this->tags as $l => $tag )
            {
                if($tag->fieldid != '001')
                {        
                    //trata as strings convertendo em UTF-8
                    $tag->content = str_replace('—', '-', $tag->content);
                    $tag->content = str_replace('“', '"', $tag->content);
                    $tag->content = str_replace('”', '"', $tag->content);
                    $tag->content = GString::construct($tag->content);
                    
                    //caso for um campo de controle adiciona o valor "a" no subcampo
                    if ( self::isControlField($tag->fieldid) )
                    {
                        $tag->content->replace(' ', '#'); //troca o espaço pela hash "#"
                        $tag->subfieldid = 'a';
                    }

                    if ( $tag->fieldid . '.' . $tag->subfieldid == '020.6' )
                    {
                        $urlCover = $tag->content;
                    }

                    $tag->content = addslashes($tag->content->getString()); //obtém a string e escapa os "'"

                    //trata os indicadores
                    $tag->indicator1 = GString::construct($tag->indicator1)->replace(' ', ''); //tira espaço do indicador 1
                    $tag->indicator1 = $tag->indicator1->getString(); //obtém string
                    $tag->indicator2 = GString::construct($tag->indicator2)->replace(' ', '');//tira espaço do indicador 2
                    $tag->indicator2 = $tag->indicator2->getString(); //obtém string

                    $formValues->{'spreeadsheetField_' . $tag->fieldid . '_' . $tag->subfieldid} = $tag->content;
                    $formValues->{'spreeadsheetField_' . $tag->fieldid . '_I1'} = $tag->indicator1;
                    $formValues->{'spreeadsheetField_' . $tag->fieldid . '_I2'} = $tag->indicator2;

                    // Campo repetitivo.

                    if ( in_array($tag->fieldid . '.' . $tag->subfieldid, $this->repetitiveTags) )
                    {
                        $repetitiveControl[$tag->fieldid][$tag->subfieldid][0] = $tag->content;
                    }
                }
            }

            // Simula repetitivefield.
            if ( count($repetitiveControl) > 0 )
            {
                foreach ( $repetitiveControl as $fieldid => $subfields )
                {
                    foreach ( $subfields as $subfieldid => $values )
                    {
                        foreach ( $values as $line => $value )
                        {
                            if ( is_object($formValues->{"gtcRepeatField_$fieldid"}[$line]) )
                            {
                                $formValues->{'gtcRepeatField_' . $fieldid}[$line]->{'spreeadsheetField_' . $fieldid . '_' . $subfieldid} = $value;
                                $formValues->{'gtcRepeatField_' . $fieldid}[$line]->arrayItem = $line;
                            }
                            else
                            {
                                $formValues->{"gtcRepeatField_$fieldid"}[$line] = new stdClass();
                                $formValues->{'gtcRepeatField_' . $fieldid}[$line]->{'spreeadsheetField_' . $fieldid . '_' . $subfieldid} = $value;
                                $formValues->{'gtcRepeatField_' . $fieldid}[$line]->arrayItem = $line;
                            }
                        }
                    }
                }
            }

            $leaderObject = new stdClass();
            $leaderObject->leaderString = '00000nam**22000004**4500';
            $leaderObject->{'000-5'} = 'n';
            $leaderObject->{'000-6'} = 'a';
            $leaderObject->{'000-7'} = 'm';
            $leaderObject->{'000-8'} = '#';
            $leaderObject->{'000-17'} = '4';
            $leaderObject->{'000-18'} = '#';
            $leaderObject->{'000-19'} = '#';
            $leaderObject->leaderFields = true;

            $this->busCatalogue->getLeaderFields();
            $this->busCatalogue->setFormValueLeaderFields($leaderObject);
            $this->busCatalogue->getLeaderString();

            $this->busCatalogue->getSpreadsheet();
            $this->busCatalogue->setFormValues($formValues);
            $newControlNumber = $this->busCatalogue->save();

            $this->savedRecords++;

            if ( $newControlNumber )
            {
                // Download da capa.
                $this->log("Minha Biblioteca - {$isbn} - obra inserida - número de controle {$newControlNumber}");
                
                $coverData = file_get_contents($urlCover);
                $folderPath = $this->busFile->getAbsoluteServerPath(true) . '/cover/';

                $capa = file_put_contents($folderPath . $newControlNumber . '.jpeg', $coverData);

                if ( $capa )
                {
                    $this->log("Minha Biblioteca - {$isbn} - capa salva - arquivo  {$newControlNumber}.jpeg");
                }
            }
            else
            {
                $this->log("Minha Biblioteca - {$isbn} - não foi possível inserir a obra");
            }

            $this->log("\n");
        }
        
        return true;
    }
}

?>