Skip to content
Snippets Groups Projects
module.config.php 17.4 KiB
Newer Older
<?php
/**
 * Copyright (C) 2019 Leipzig University Library
 *
 * 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.
 *
 * @author  Sebastian Kehr <kehr@ub.uni-leipzig.de>
 * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2
 */

use fid\Controller\RecordController;
use fid\Controller\RecordControllerDelegatorFactory;
use fid\Controller\UserController;
use fid\Controller\UserControllerFactory;
use fid\Filter\PermissionsFilter;
use fid\Filter\PermissionsFilterFactory;
use fid\FormModel\PasswordChangeModel;
use fid\FormModel\PasswordResetModel;
use fid\FormModel\UsernameChangeModel;
use fid\Helper\FormLabel;
use fid\Helper\TranslatorDelegator;
use fid\Hydrator\OrderHydrator;
use fid\Hydrator\UserHydrator;
use fid\Hydrator\UserHydratorDelegatorFactory;
use fid\Listener\ErrorListener;
use fid\Listener\ErrorListenerFactory;
use fid\Listener\LocaleListener;
use fid\Serializer\OrderCreationRequestUserNormalizer;
use fid\Service\Client;
use fid\Service\ClientFactory;
use fid\VuFind\Auth\Authenticator;
use fid\VuFind\Auth\AuthenticatorFactory;
use fid\VuFind\Auth\ILSAuthenticator;
use fid\VuFind\Auth\ILSAuthenticatorFactory;
use fid\VuFind\Db\Row\User;
use fid\VuFind\Db\Row\UserDelegatorFactory;
use fid\VuFind\ILS\Fid;
use fid\VuFind\ILS\FidFactory;
use fid\VuFind\Resolver\Driver\Ezb;
use fid\VuFind\Resolver\Driver\EzbDelegatorFactory;
use finc\Resolver\Driver\FincResolverDriverFactory;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
use VuFind\Auth\ILSAuthenticator as BaseILSAuthenticator;
use VuFind\Controller\AbstractBaseWithConfigFactory;
use VuFind\Db\Row\User as BaseUser;
use VuFind\Db\Row\UserFactory;
use Zend\Mvc\I18n\Translator;
use Zend\Mvc\Plugin\FlashMessenger\FlashMessenger;
use Zend\ServiceManager\Factory\InvokableFactory;

$config = [
        'user-init-form'                           => require 'user-init-form.php',
        'user-create-form'                         => require 'user-create-form.php',
        'user-update-form'                         => require 'user-update-form.php',
        'admin-edit-form'                          => require 'admin-edit-form.php',
        'fid-acquisition-form'                     => require 'fid-acquisition-form.php',
        'fid-acquisition-subito-partial-copy-form' => require 'fid-acquisition-subito-partial-copy-form.php',
        PasswordResetModel::class                  => require 'password-reset-form.php',
        PasswordChangeModel::class                 => require 'password-change-form.php',
        UsernameChangeModel::class                 => require 'username-change-form.php',
    ],
    'filters'            => [
        'factories' => [
            PermissionsFilter::class => PermissionsFilterFactory::class,
        ]
    ],
    'hydrators'          => [
        'factories'  => [
            UserHydrator::class  => InvokableFactory::class,
            OrderHydrator::class => InvokableFactory::class,
        ],
        'delegators' => [
            UserHydrator::class => [
                UserHydratorDelegatorFactory::class,
            ],
        ],
            RecordController::class => AbstractBaseWithConfigFactory::class,
            UserController::class   => UserControllerFactory::class,
            \VuFind\Controller\RecordController::class => RecordController::class,
        ],
        'delegators' => [
            RecordController::class => [
        ErrorListener::class,
        LocaleListener::class,
    // TODO: issue PR to add alias to vufind core
    'controller_plugins' => [
        'aliases' => [
            'flashmessenger' => FlashMessenger::class,
        ]
    ],
        'aliases'    => [
            BaseILSAuthenticator::class => ILSAuthenticator::class,
            'MvcTranslator'             => Translator::class,
        ],
        'delegators' => [
            ILSAuthenticator::class => [
                ILSAuthenticatorFactory::class,
            ],
            Translator::class       => [
                TranslatorDelegator::class,
            ],
        ],
        'factories'  => [
            Client::class           => ClientFactory::class,
            ErrorListener::class    => InvokableFactory::  class,
            ILSAuthenticator::class => ILSAuthenticatorFactory::class,
            LocaleListener::class   => InvokableFactory::class,
            BaseUrlListener::class => InvokableFactory::class
    'view_helpers'       => [
        'aliases'   => [
            'formLabel' => FormLabel::class,
        ],
        'factories' => [
            FormLabel::class => InvokableFactory::class,
        ],
    ],
        'plugin_managers' => [
                'factories' => [
                    'fid\AjaxHandler\GetResolverLinks' =>
                        'fid\AjaxHandler\GetResolverLinksFactory'
                ],
                    'getResolverLinks' =>
                        'fid\AjaxHandler\GetResolverLinks'
                ]
            ],
                'aliases'   => [
                    'fid' => Authenticator::class,
                ],
                'factories' => [
                    Authenticator::class => AuthenticatorFactory::class,
                ],
            ],
                'aliases'    => [
                    BaseUser::class => User::class,
                ],
                'delegators' => [
                    User::class => [
                        UserDelegatorFactory::class,
                    ],
                ],
                'factories'  => [
                    User::class => UserFactory::class,
                ],
            ],
                'aliases'   => [
                    'fid' => Fid::class,
                ],
                'factories' => [
                    Fid::class => FidFactory::class,
                ],
            ],
                'invokables' => [
                    'worldcat' => 'fid\RecordTab\Worldcat',
                ],
            ],
            'resolver_driver' => [
                        FincResolverDriverFactory::class,
                ],
                'delegators' => [
                    Ezb::class => [
                        EzbDelegatorFactory::class,
                    ],
                ],
                    'ezb' => Ezb::class,
    // Authorization configuration:
        'vufind_permission_provider_manager' => [
            'factories' => [
                'fid\Role\PermissionProvider\FidApiPermission' =>
                    'fid\Role\PermissionProvider\Factory::getFidApiPermission'
            ],
                'FidApiPermission' => 'fid\Role\PermissionProvider\FidApiPermission'
            ]
        ]
    ],
        'routes' => [
            'fid'                => [
                'type'          => 'literal',
                'may_terminate' => false,
                'options'       => [
                    'route' => '/fid',
                ],
                'child_routes'  => [
                        'may_terminate' => false,
                        'type'          => 'literal',
                        'options'       => [
                            'route' => '/user',
                        ],
                        'child_routes'  => [
                                'may_terminate' => true,
                                'type'          => 'literal',
                                'options'       => [
                                    'route'    => '/init',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'init',
                                    ],
                                ],
                            ],
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/create',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'create',
                                    ],
                                ],
                            ],
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/update',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'update',
                                    ],
                                ],
                            ],
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/policy',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'policy',
                                    ],
                                ],
                            ],
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/terms',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'terms',
                                    ],
                                ],
                            ],
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/reset-password',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'resetPassword',
                                    ],
                                ],
                            ],
                            'change-password' => [
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/change-password',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'changePassword',
                                    ],
                                ],
                            ],
                            'change-username' => [
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/change-username',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'changeUsername',
                                    ],
                                ],
                            ],
                            'update-username' => [
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/update-username',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'updateUsername',
                                    ],
                                ],
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/orders',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'orders',
                                    ],
                                ],
                            ],
                        'may_terminate' => false,
                        'type'          => 'literal',
                        'options'       => [
                            'route' => '/admin'
                        ],
                        'child_routes'  => [
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/list',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'list',
                                    ],
                                ],
                            ],
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/exportList',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'exportList',
                                    ],
                                ],
                            ],
                                'type'    => 'Zend\Router\Http\Segment',
                                'options' => [
                                    'route'    => '/edit/[:userid]',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'edit',
                                        'userid'     => null
                                    ],
                                ],
                            ],
                                'type'    => 'literal',
                                'options' => [
                                    'route'    => '/orders',
                                    'defaults' => [
                                        'controller' => UserController::class,
                                        'action'     => 'adminOrders',
                                    ],
                                ],
                            ],
                ],
            ],
            'myresearch-account' => [
                'options' => [
                    'defaults' => [
                        'controller' => UserController::class,
                        'action'     => 'init',
                    ],
                ],
            ],
            'myresearch-recover' => [
                'options' => [
                    'defaults' => [
                        'controller' => UserController::class,
                        'action'     => 'resetPassword',
                    ]
                ]
            ]
    'symfony_serializer' => [
        'normalizers' => [
            // TODO: add DateTimeNormalizer to finc/symfony-zend-serializer-bridge
            DateTimeNormalizer::class                 => 2000,
            OrderCreationRequestUserNormalizer::class => 1000,
        ],
    ],

$nonTabRecordActions = [
];

// Define record view routes -- route name => controller
// Define record view routes once again to add new nonTabRecordActions
$recordRoutes = [
    'record' => 'Record'
];

$routeGenerator = new \VuFind\Route\RouteGenerator($nonTabRecordActions);
$routeGenerator->addRecordRoutes($config, $recordRoutes);

return $config;