Skip to content
Snippets Groups Projects
GetIt.php 16.2 KiB
Newer Older
<?php
/**
 * Get It box view helper
 *
 * PHP version 7
 *
 * Copyright (C) Leipzig University Library 2019.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2,
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category VuFind
 * @package  View_Helpers
 * @author   Gregor Gawol <gawol@ub.uni-leipzig.de>
 * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
 * @link     https://vufind.org/wiki/development Wiki
 */
namespace fid\View\Helper\Root;

use VuFind\I18n\Translator\TranslatorAwareTrait;
use VuFind\RecordDriver\AbstractBase;
use VuFind\View\Helper\Root\Config;
use Zend\View\Helper\AbstractHelper;

/**
 * Get It box view helper
 *
 * @category VuFind
 * @package  View_Helpers
 * @author   Gregor Gawol <gawol@ub.uni-leipzig.de>
 * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
 * @link     https://vufind.org/wiki/development Wiki
 */
class GetIt extends AbstractHelper
{
    use TranslatorAwareTrait;

    /**
     * @var \Zend\Config\Config
     */
    protected $config;

    /**
     * @var AbstractBase
     */
    protected $driver;

    /**
     * FID API Client
     *
     * @var \fid\Service\Client
     */
    protected $fidClient;
    protected $sid;
    protected $format;
    protected $facetAvail;
    protected $multipart;
    protected $isCollection;
    protected $institution;
    protected $megacollection;
    protected $collection;
    protected $isbn;
    protected $issn;

    /**
     * GetIt constructor.
     *
     * @param Config $getItConfig Get It box Configuration
     */
    public function __construct($getItConfig, $fidClient)
    {
        $this->config = $getItConfig;
        $this->fidClient = $fidClient;
    }

    /**
     * @param $driver
     */
    public function __invoke($driver)
    {
        $this->driver = $driver;
        $this->sid = $this->driver->tryMethod('getSourceID');
        $this->format = $this->driver->tryMethod('getFormats');
        $this->facetAvail = $this->driver->tryMethod('getFacetAvail');
        //$this->multipart = $this->driver->tryMethod('isMultiPartSet');
        $this->isCollection = $this->driver->tryMethod('hasChildren');
        $this->institution = $this->driver->tryMethod('getInstitutions');
        $this->megacollection = $this->driver->tryMethod('getMegaCollection');
        $this->collection = $this->driver->tryMethod('getCollection');
        $this->isbn = $this->driver->tryMethod('getISBNs');
        $this->issn = $this->driver->tryMethod('getISSNs');

        return $this;
    }

    /**
     * @param $value
     *
     * @return array
     */
    private function _getSourceIds($value)
    {
        $sids = $this->config->SourceIds;
        return isset($sids->$value) ? explode(',', $sids->$value) : [];
    }

    /**
     * @param $value
     *
     * @return string
     */
    private function _getNonSourceIds($value)
    {
        $sids = $this->config->NonSourceIds;
        return isset($sids->$value) ? $sids->$value : '';
    }

    /**
     * @param $defaultval
     * @param $additionalval
     *
     * @return mixed
     */
    private function _accordeon($defaultval, $additionalval)
    {
        if (in_array($this->sid, $this->_getSourceIds('source_idsV1'))) {
            return $additionalval;
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV3'))) {
            return $additionalval;
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV5'))) {
            return $additionalval;
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV7'))) {
            return $additionalval;
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV8'))) {
            if (in_array('Free', $this->facetAvail)) {
                return $additionalval;
            } elseif (in_array('Online', $this->facetAvail)
                && (preg_grep($this->_getNonSourceIds('source_idsV8_5'), $this->format)
                    || preg_grep($this->_getNonSourceIds('source_idsV8_6'), $this->format)
                    || preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format))
            ) {
                return $additionalval;
            }
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV10'))) {
            return $additionalval;
        }
        return $defaultval;
    }

    /**
     * @return string
     */
    public function getAccordeonColor()
    {
        return $this->_accordeon('azure', 'amber');
    }

    /**
     * @return mixed
     */
    public function getAccordeonHeadline()
    {
        $links = $this->translate('getit_links');
        $infos = $this->translate('getit_infos');
        return $this->_accordeon($infos, $links);
    }

    /**
     * @return string
     */
    public function getBoxHeadline()
    {
        if (in_array($this->sid, $this->_getSourceIds('source_idsV3'))) {
            if (!$this->fidClient->isLoggedOn()) {
                return $this->translate('getit_logged_not');
            }
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV4'))) {
            if (!$this->fidClient->isLoggedOn()) {
                return $this->translate('getit_logged_not');
            }
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV5'))) {
            if (!$this->fidClient->isLoggedOn()) {
                return $this->translate('getit_logged_not');
            }
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV8'))) {
            $isLogin = false;
            if (in_array('Local', $this->facetAvail)
                && ((preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format)
                    && !in_array($this->_getNonSourceIds('source_idsV8_1'), $this->institution))
                    || preg_grep($this->_getNonSourceIds('source_idsV8_3'), $this->format)
                )
            ) {
                $isLogin = true;
            } elseif (in_array('Online', $this->facetAvail)
                && !in_array('Free', $this->facetAvail)
                && (preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format))
            ) {
                $isLogin = true;
            }
            if (in_array($this->sid, $this->_getSourceIds('source_idsV9'))
                && preg_grep($this->_getNonSourceIds('source_idsV8_8'), $this->format)
            ) {
                $isLogin = true;
            }
            if ($isLogin && !$this->fidClient->isLoggedOn()) {
                return $this->translate('getit_logged_not');
            }
        }
        return $this->translate('Get it');
    }

    /**
     * @return string
     */
    public function getNotices()
    {
        if (in_array($this->sid, $this->_getSourceIds('source_idsV1'))) {
            return $this->translate('getit_text_1');
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV3'))) {
            return;
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV4'))) {
            if (!$this->fidClient->isLoggedOn()) {
                return $this->translate('getit_text_2');
            } else {
                return $this->translate('getit_text_12');
            }
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV5'))) {
            if (!$this->fidClient->isLoggedOn()) {
                return $this->translate('getit_text_3_1');
            } else {
                return $this->translate('getit_text_13');
            }
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV6'))) {
            return $this->translate('getit_text_4');
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV7'))) {
            return $this->translate('getit_text_5');
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV10'))) {
            return $this->translate('getit_text_6');
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV11'))) {
            return $this->translate('getit_text_7');
        } elseif (in_array($this->sid, $this->_getSourceIds('source_idsV8'))) {
            if (in_array($this->sid, $this->_getSourceIds('source_idsV9'))) {
                if (preg_grep($this->_getNonSourceIds('source_idsV8_8'), $this->collection)) {
                    if (!$this->fidClient->isLoggedOn()) {
                        return $this->translate('getit_text_3_1');
                    } else {
                        return $this->translate('getit_text_13');
                    }
                }
                if ($this->isCollection) {
                    return $this->translate('getit_text_11',['%%hierarchy_tree%%' => $this->translate('hierarchy_tree')]);
                }
                if (preg_grep($this->_getNonSourceIds('source_idsV8_7'), $this->megacollection)
                ) {
                    return $this->translate('getit_text_1');
                }
                if (in_array('Local', $this->facetAvail)
                    && (preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format)
                        || preg_grep($this->_getNonSourceIds('source_idsV8_3'), $this->format))
                ) {
                    if (!$this->fidClient->isLoggedOn()) {
                        return $this->translate('getit_text_10');
                    } elseif (preg_grep($this->_getNonSourceIds('source_idsV8_3'), $this->format)) {
                        return $this->translate('getit_text_14');
                    } else {
                        return '';
                    }
                }
                if (in_array('Local', $this->facetAvail)
                    && preg_grep($this->_getNonSourceIds('source_idsV8_2'), $this->format)
                ) {
                    return $this->translate('getit_text_8');
                }
                if (in_array('Free', $this->facetAvail)) {
                    return $this->translate('getit_text_1');
                }
                if (in_array('Online', $this->facetAvail)
                    && (preg_grep($this->_getNonSourceIds('source_idsV8_5'), $this->format)
                        || preg_grep($this->_getNonSourceIds('source_idsV8_6'), $this->format))
                ) {
                    return $this->translate('getit_text_9');
                } elseif (in_array('Online', $this->facetAvail)
                    && preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format)
                ) {
                    if (!$this->fidClient->isLoggedOn()) {
                        return $this->translate('getit_text_10');
                    } else {
                        return $this->translate('getit_text_15');
                    }
                }
            } elseif ($this->isCollection) {
                return $this->translate('getit_text_11',['%%hierarchy_tree%%' => $this->translate('hierarchy_tree')]);
            } elseif (in_array('Local', $this->facetAvail)
                && preg_grep($this->_getNonSourceIds('source_idsV8_2'), $this->format)
            ) {
                return $this->translate('getit_text_8');
            } elseif (in_array('Local', $this->facetAvail)) {
                if (!$this->fidClient->isLoggedOn()) {
                    return $this->translate('getit_text_10');
                } elseif (preg_grep($this->_getNonSourceIds('source_idsV8_3'), $this->format)) {
                    return $this->translate('getit_text_14');
                } else {
                    return '';
                }
            } elseif (in_array('Free', $this->facetAvail)) {
                return $this->translate('getit_text_1');
            } elseif (in_array('Online', $this->facetAvail)
                && (preg_grep($this->_getNonSourceIds('source_idsV8_5'), $this->format)
                    || preg_grep($this->_getNonSourceIds('source_idsV8_6'), $this->format))
            ) {
                return $this->translate('getit_text_9');
            } elseif (in_array('Online', $this->facetAvail)
                && preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format)
            ) {
                if (!$this->fidClient->isLoggedOn()) {
                    return $this->translate('getit_text_10');
                } else {
                    return $this->translate('getit_text_15');
                }
            }
        }
        return $this->translate('getit_text_default');
    }

    /**
     * @return bool
     */
    public function showLinks()
    {
        if (in_array($this->sid, $this->_getSourceIds('source_idsV5'))
            || (in_array($this->sid, $this->_getSourceIds('source_idsV9'))
                && preg_grep($this->_getNonSourceIds('source_idsV8_8'), $this->collection))
        ) {
            if (!$this->fidClient->isLoggedOn()) {
                return false;
            }
        }
        return true;
    }

    /**
     * @return bool
     */
    public function showOrderButton()
    {
        if (in_array($this->sid, $this->_getSourceIds('source_idsV9'))
            && preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format)
            && !in_array($this->_getNonSourceIds('source_idsV8_9'), $this->institution)
            && !$this->isCollection
            && !preg_grep($this->_getNonSourceIds('source_idsV8_8'), $this->collection)
        ) {
            return true;
        }
        return false;
    }

    /**
     * @return bool
     */
    public function showPartCopyButton()
    {
        if (!in_array('Free', $this->facetAvail)
            && in_array($this->sid, $this->_getSourceIds('source_idsV8'))
            && preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format)
            && !$this->isCollection
            && !preg_grep($this->_getNonSourceIds('source_idsV8_8'), $this->collection)
        ) {
            return true;
        }
        return false;
    }

    /**
     * @return bool
     */
    public function showBOSSData()
    {
        if (!in_array('Free', $this->facetAvail)
            && in_array($this->sid, $this->_getSourceIds('source_idsV8'))
            //&& (!empty($this->isbn) || !empty($this->issn))
            && !preg_grep($this->_getNonSourceIds('source_idsV8_8'), $this->collection)
        ) {
            if (preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format)
            ) {
                return true;
            } elseif (in_array('Local', $this->facetAvail)
                && preg_grep($this->_getNonSourceIds('source_idsV8_3'), $this->format)
            ) {
                return true;
            }
        }
        return false;
    }

    public function isEBCEBooks()
    {
        if (in_array('Online', $this->facetAvail)
            && in_array($this->sid, $this->_getSourceIds('source_idsV9'))
            && preg_grep($this->_getNonSourceIds('source_idsV8_8'), $this->collection)
        ) {
            return true;
        }
        return false;
    }

    public function hideNotice()
    {
        if (in_array($this->sid, $this->_getSourceIds('source_idsV8'))) {
            if (in_array('Online', $this->facetAvail)
Dorian Merz's avatar
Dorian Merz committed
                && (preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format)
                    || preg_grep($this->_getNonSourceIds('source_idsV8_5'), $this->format)
                    || preg_grep($this->_getNonSourceIds('source_idsV8_6'), $this->format))
            ) {
                return false;
            } elseif (in_array('Local', $this->facetAvail)
                && (preg_grep($this->_getNonSourceIds('source_idsV8_3'), $this->format)
                    || preg_grep($this->_getNonSourceIds('source_idsV8_2'), $this->format))
            } elseif (in_array('Local', $this->facetAvail)
                && preg_grep($this->_getNonSourceIds('source_idsV8_1'), $this->format)
            ) {
                return false;