<?php
/**
 * Copyright 2005-2020 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 BusinessGnuteca3BusDSpace extends GBusiness
{
    public $busMaterial;
    public $busMaterialType;
    public $busDublinCore;

    function __construct()
    {
        parent::__construct();
        $MIOLO = MIOLO::getInstance();

        $this->busMaterial = $MIOLO->getBusiness( 'gnuteca3', 'BusMaterial');
        $this->busMaterialType = $MIOLO->getBusiness('gnuteca3', 'BusMaterialType');
        $this->busDublinCore = $MIOLO->getBusiness('gnuteca3', 'BusDublinCore');
    }

    public function getDSpaceDCTags($controlNumber)
    {
        // Mepaado somente as tags que vão para o DSpace, pois poderá ter tags no cadastro mas que não estão no 
        // schema do DSpace, causando falha na sincronização.
        $dcTags = explode(',', DSPACE_SYNC_TAGS);
        
        $dePara = $this->busDublinCore->getEquivalencyMarcDC();

        $materialDCValues = array();

        foreach ( $dcTags as $dspaceTag )
        {
            $dspaceTag = trim($dspaceTag);

            foreach ( $dePara as $marcTag => $dcTag )
            {
                if ( $dspaceTag == $dcTag )
                {
                    $marcTag = substr($marcTag, 0, stripos($marcTag, '_'));

                    $fieldId = NULL;
                    $subFieldid = NULL;
                    $materialContent = NULL;

                    if ( stripos($marcTag, '008') !== FALSE )
                    {
                        $materialContent = $this->busMaterial->getContent($controlNumber, '008', 'a', NULL, TRUE, TRUE);

                        // Somente uma parte do 008.
                        if ( stripos($marcTag, '(') !== FALSE )
                        {
                            if ( is_array($materialContent) )
                            {
                                preg_match('/\(.*\)/', $marcTag, $matches);
                                $match = str_replace(')', '', str_replace('(', '', $matches[0]));
                                $chars = explode(',', $match);
                                $content = '';

                                if ( is_array($chars) )
                                {
                                    foreach ( $chars as $char )
                                    {
                                        $content .= substr($materialContent[0]->content, $char, 1);
                                    }
                                }

                                $materialContent[0]->content = $content; 
                            }
                        }
                    }
                    elseif ( stripos($marcTag, '.') !== FALSE )
                    {
                        $marcTagParts = explode('.', trim($marcTag));
                        $fieldId = $marcTagParts[0];
                        $subfieldId = $marcTagParts[1];
                        $materialContent = $this->busMaterial->getContent($controlNumber, $fieldId, $subfieldId, NULL, TRUE, TRUE);
                    }
                 
                    if ( is_array($materialContent) )
                    {
                         foreach ( $materialContent as $line )
                         {
                             if ( $marcTag == MARC_MATERIAL_TYPE_TAG )
                             {
                                 $materialType = $this->busMaterialType->getMaterialType($line->content, true);
                                 $line->content = $materialType->description;
                             }

                             if ( $marcTag == '700.a' )
                             {
                                 if ( $line->line == 0 )
                                 {
                                    $dcTag = 'contributor.author';
                                 }
                                 else if ( $line->line == 1)
                                 {
                                    $dcTag = 'contributor.advisor';
                                 }
                                 else if ( $line->line == 2 )
                                 {
                                    $dcTag = 'contributor.advisor-co';
                                 }
                                 else
                                 {
                                     $dcTag = 'contributor.other';
                                 }
                             }

                             $object = new stdClass();
                             $object->key = $dcTag;
                             $object->value = $line->content;
                             $object->language = NULL;
                             $materialDCValues[] = $object; 
                         }
                    }
                }
            }
        }

        return $materialDCValues;
    }

    
    
}
?>
