diff --git a/.gitignore b/.gitignore index ce3828b7b39402314b8a843c074286a5d3029875..1d7f134b09f71b9320e2868281c4c862a51bd78b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,13 +6,14 @@ ChangeLog .\#* TAGS *~ -composer.phar -import/solrmarc.log -/solr +/downloads /vendor +composer.phar +import/solrmarc.log* /node_modules /public/swagger-ui /.vagrant +/solr /auth.json /core /.env \ No newline at end of file diff --git a/build.xml b/build.xml index ab82ecddb65e5733489059bc924b1d7fa2608ffd..000a90a820d05a544c64677e4641372a248a5643 100644 --- a/build.xml +++ b/build.xml @@ -29,7 +29,7 @@ <property name="php-cs-fixers" value="no_blank_lines_before_namespaces,function_call_space,trailing_spaces,unused_use,lowercase_keywords,encoding,parenthesis,php_closing_tag,visibility,duplicate_semicolon,extra_empty_lines,no_blank_lines_after_class_opening,no_empty_lines_after_phpdocs,operators_spaces,spaces_before_semicolon,ternary_spaces,concat_with_spaces,short_array_syntax,phpdoc_no_access,remove_leading_slash_use,eof_ending" /> - <property name="version" value="4.1.2" /> + <property name="version" value="4.1.3" /> <!-- We only need the -p switch if the password is non-blank --> <if><not><equals arg1="${mysqlrootpass}" arg2="" /></not><then> diff --git a/composer.json b/composer.json index c1fa9461e60d43e2c3ee7259b319b682851379b7..1514b8ee7c873ec2ef1ed896e424941b80f3dda5 100644 --- a/composer.json +++ b/composer.json @@ -1,91 +1,94 @@ { - "name": "vufind/vufind", - "description": "A flexible discovery layer.", - "authors": [ - { - "name": "Demian Katz", - "email": "demian.katz@villanova.edu" - } - ], - "license": "GPL-2.0", - "config": { - "platform": { - "php": "5.6.0" + "name": "vufind/vufind", + "description": "A flexible discovery layer.", + "authors": [ + { + "name": "Demian Katz", + "email": "demian.katz@villanova.edu" + } + ], + "license": "GPL-2.0", + "config": { + "platform": { + "php": "5.6.0" + } + }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/demiankatz/zend-servicemanager" + } + ], + "require": { + "php": ">=5.6", + "aferrandini/phpqrcode": "1.0.1", + "jasig/phpcas": "1.3.5", + "cap60552/php-sip2": "1.0.0", + "ahand/mobileesp": "dev-master", + "matthiasmullie/minify": "1.3.45", + "ocramius/proxy-manager": "1.0.2", + "oyejorge/less.php": "1.7.0.14", + "pear/file_marc": "1.1.5", + "pear/http_request2": "2.3.0", + "pear/validate_ispn": "dev-master", + "phing/phing": "2.16.0", + "serialssolutions/summon": "1.1.0", + "symfony/yaml": "3.3.2", + "swagger-api/swagger-ui": "2.2.10", + "vufind-org/vufindcode": "1.0.3", + "vufind-org/vufindharvest": "2.3.0", + "vufind-org/vufindhttp": "2.1.1", + "yajra/laravel-pdo-via-oci8": "1.3.1", + "zendframework/zend-cache": "2.7.2", + "zendframework/zend-captcha": "2.7.1", + "zendframework/zend-code": "2.6.3", + "zendframework/zend-config": "2.6.0", + "zendframework/zend-console": "2.7.0", + "zendframework/zend-crypt": "3.2.0", + "zendframework/zend-db": "2.8.2", + "zendframework/zend-dom": "2.6.0", + "zendframework/zend-escaper": "2.5.2", + "zendframework/zend-eventmanager": "3.2.0", + "zendframework/zend-feed": "2.8.0", + "zendframework/zend-http": "2.6.0", + "zendframework/zend-i18n": "2.7.4", + "zendframework/zend-loader": "2.5.1", + "zendframework/zend-log": "2.9.2", + "zendframework/zend-mail": "2.8.0", + "zendframework/zend-modulemanager": "2.8.0", + "zendframework/zend-mvc": "2.7.15", + "zendframework/zend-paginator": "2.7.0", + "zendframework/zend-serializer": "2.8.0", + "zendframework/zend-servicemanager": "dev-master#ae73b1b3affd9c4e3031fb88c84a7082368ca6c3", + "zendframework/zend-session": "2.8.0", + "zendframework/zend-soap": "2.6.0", + "zendframework/zend-stdlib": "2.7.7", + "zendframework/zend-text": "2.6.0", + "zendframework/zend-validator": "2.10.1", + "zendframework/zend-view": "2.9.0", + "zendframework/zendrest": "2.0.2", + "zendframework/zendservice-amazon": "2.3.0", + "zendframework/zendservice-recaptcha": "3.0.0", + "zf-commons/zfc-rbac": "2.6.3", + "ghislainf/zf2-whoops": "dev-master#2649cf7caf400409942ddc3f8fe15b89381fc74e", + "pear/archive_tar": "^1.4", + "sabre/vobject": "3.5.3" + }, + "require-dev": { + "behat/mink": "1.7.1", + "behat/mink-selenium2-driver": "1.3.1", + "friendsofphp/php-cs-fixer": "1.11.6", + "phpdocumentor/phpdocumentor": "2.9.0", + "phploc/phploc": "3.0.1", + "phpmd/phpmd": "2.6.0", + "phpunit/phpunit": "5.7.15", + "sebastian/phpcpd": "2.0.4", + "squizlabs/php_codesniffer": "2.8.1", + "twig/twig": "1.27" }, - "preferred-install": { - "*": "dist" + "scripts": { + "phing-install-dependencies": "phing installsolr installswaggerui", + "post-install-cmd": "@phing-install-dependencies", + "post-update-cmd": "@phing-install-dependencies" } - }, - "require": { - "php": ">=5.6", - "aferrandini/phpqrcode": "1.0.1", - "jasig/phpcas": "1.3.5", - "cap60552/php-sip2": "1.0.0", - "ahand/mobileesp": "dev-master", - "matthiasmullie/minify": "1.3.45", - "ocramius/proxy-manager": "1.0.2", - "oyejorge/less.php": "1.7.0.14", - "pear/file_marc": "1.1.5", - "pear/http_request2": "2.3.0", - "pear/validate_ispn": "dev-master", - "phing/phing": "2.16.0", - "serialssolutions/summon": "1.1.0", - "symfony/yaml": "3.3.2", - "swagger-api/swagger-ui": "2.2.10", - "vufind-org/vufindcode": "1.0.3", - "vufind-org/vufindharvest": "2.3.0", - "vufind-org/vufindhttp": "2.1.1", - "yajra/laravel-pdo-via-oci8": "1.3.1", - "zendframework/zend-cache": "2.7.2", - "zendframework/zend-captcha": "2.7.1", - "sabre/vobject": "^3.4", - "zendframework/zend-code": "2.6.3", - "zendframework/zend-config": "2.6.0", - "zendframework/zend-console": "2.6.0", - "zendframework/zend-crypt": "3.2.0", - "zendframework/zend-db": "2.8.2", - "zendframework/zend-dom": "2.6.0", - "zendframework/zend-escaper": "2.5.2", - "zendframework/zend-eventmanager": "3.2.0", - "zendframework/zend-feed": "2.8.0", - "zendframework/zend-http": "2.6.0", - "zendframework/zend-i18n": "2.7.4", - "zendframework/zend-loader": "2.5.1", - "zendframework/zend-log": "2.9.2", - "zendframework/zend-mail": "2.8.0", - "zendframework/zend-modulemanager": "2.8.0", - "zendframework/zend-mvc": "2.7.12", - "zendframework/zend-paginator": "2.7.0", - "zendframework/zend-serializer": "2.8.0", - "zendframework/zend-servicemanager": "2.7.5", - "zendframework/zend-session": "2.8.0", - "zendframework/zend-soap": "2.6.0", - "zendframework/zend-stdlib": "2.7.7", - "zendframework/zend-text": "2.6.0", - "zendframework/zend-validator": "2.10.1", - "zendframework/zend-view": "2.9.0", - "zendframework/zendrest": "2.0.2", - "zendframework/zendservice-amazon": "2.3.0", - "zendframework/zendservice-recaptcha": "3.0.0", - "zf-commons/zfc-rbac": "2.6.3", - "ghislainf/zf2-whoops": "dev-master#2649cf7caf400409942ddc3f8fe15b89381fc74e", - "pear/archive_tar": "^1.4" - }, - "require-dev": { - "behat/mink": "1.7.1", - "behat/mink-selenium2-driver": "1.3.1", - "friendsofphp/php-cs-fixer": "1.11.6", - "phpdocumentor/phpdocumentor": "2.9.0", - "phploc/phploc": "3.0.1", - "phpmd/phpmd": "2.6.0", - "phpunit/phpunit": "5.7.15", - "sebastian/phpcpd": "2.0.4", - "squizlabs/php_codesniffer": "2.8.1", - "twig/twig": "1.27" - }, - "scripts": { - "phing-install-dependencies": "phing installsolr installswaggerui", - "post-install-cmd": "@phing-install-dependencies", - "post-update-cmd": "@phing-install-dependencies" - } } diff --git a/composer.lock b/composer.lock index 52d4b33d9bee6bb85e35d9a06c57591f7c5184bd..2ce165102a8439bbd22967e968f3263d0507aa61 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "369743a81b9e5d4a8028725aa58d2345", + "content-hash": "5e8ec9f62cb240d5980e6c997443c729", "packages": [ { "name": "aferrandini/phpqrcode", @@ -173,16 +173,16 @@ }, { "name": "filp/whoops", - "version": "2.1.14", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6" + "reference": "181c4502d8f34db7aed7bfe88d4f87875b8e947a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", - "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", + "url": "https://api.github.com/repos/filp/whoops/zipball/181c4502d8f34db7aed7bfe88d4f87875b8e947a", + "reference": "181c4502d8f34db7aed7bfe88d4f87875b8e947a", "shasum": "" }, "require": { @@ -190,9 +190,9 @@ "psr/log": "^1.0.1" }, "require-dev": { - "mockery/mockery": "0.9.*", + "mockery/mockery": "^0.9 || ^1.0", "phpunit/phpunit": "^4.8.35 || ^5.7", - "symfony/var-dumper": "^2.6 || ^3.0" + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0" }, "suggest": { "symfony/var-dumper": "Pretty print complex values better with var-dumper available", @@ -201,7 +201,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -230,7 +230,7 @@ "throwable", "whoops" ], - "time": "2017-11-23T18:22:44+00:00" + "time": "2018-03-03T17:56:25+00:00" }, { "name": "ghislainf/zf2-whoops", @@ -580,16 +580,16 @@ }, { "name": "paragonie/random_compat", - "version": "v2.0.12", + "version": "v2.0.15", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb" + "reference": "10bcb46e8f3d365170f6de9d05245aa066b81f09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb", - "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/10bcb46e8f3d365170f6de9d05245aa066b81f09", + "reference": "10bcb46e8f3d365170f6de9d05245aa066b81f09", "shasum": "" }, "require": { @@ -621,10 +621,11 @@ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", "keywords": [ "csprng", + "polyfill", "pseudorandom", "random" ], - "time": "2018-04-04T21:24:14+00:00" + "time": "2018-06-08T15:26:40+00:00" }, { "name": "pear/archive_tar", @@ -1981,28 +1982,28 @@ }, { "name": "zendframework/zend-console", - "version": "2.6.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-console.git", - "reference": "cbbdfdfa0564aa20d1c6c6ef3daeafe6aec02360" + "reference": "e8aa08da83de3d265256c40ba45cd649115f0e18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-console/zipball/cbbdfdfa0564aa20d1c6c6ef3daeafe6aec02360", - "reference": "cbbdfdfa0564aa20d1c6c6ef3daeafe6aec02360", + "url": "https://api.github.com/repos/zendframework/zend-console/zipball/e8aa08da83de3d265256c40ba45cd649115f0e18", + "reference": "e8aa08da83de3d265256c40ba45cd649115f0e18", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "zendframework/zend-stdlib": "^2.7 || ^3.0" + "php": "^5.6 || ^7.0", + "zendframework/zend-stdlib": "^2.7.7 || ^3.1" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "^4.0", - "zendframework/zend-filter": "^2.6", - "zendframework/zend-json": "^2.6", - "zendframework/zend-validator": "^2.5" + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-filter": "^2.7.2", + "zendframework/zend-json": "^2.6 || ^3.0", + "zendframework/zend-validator": "^2.10.1" }, "suggest": { "zendframework/zend-filter": "To support DefaultRouteMatcher usage", @@ -2011,8 +2012,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev", - "dev-develop": "2.7-dev" + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" } }, "autoload": { @@ -2024,12 +2025,13 @@ "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-console", + "description": "Build console applications using getopt syntax or routing, complete with prompts", "keywords": [ + "ZendFramework", "console", - "zf2" + "zf" ], - "time": "2016-02-09T17:15:12+00:00" + "time": "2018-01-25T19:08:04+00:00" }, { "name": "zendframework/zend-crypt", @@ -2714,37 +2716,34 @@ }, { "name": "zendframework/zend-inputfilter", - "version": "2.8.0", + "version": "2.8.2", "source": { "type": "git", "url": "https://github.com/zendframework/zend-inputfilter.git", - "reference": "e7edd625f2fcdd72a719a7023114c5f4b4f38488" + "reference": "3f02179e014d9ef0faccda2ad6c65d38adc338d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/e7edd625f2fcdd72a719a7023114c5f4b4f38488", - "reference": "e7edd625f2fcdd72a719a7023114c5f4b4f38488", + "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/3f02179e014d9ef0faccda2ad6c65d38adc338d8", + "reference": "3f02179e014d9ef0faccda2ad6c65d38adc338d8", "shasum": "" }, "require": { "php": "^5.6 || ^7.0", "zendframework/zend-filter": "^2.6", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.3.1", "zendframework/zend-stdlib": "^2.7 || ^3.0", "zendframework/zend-validator": "^2.10.1" }, "require-dev": { "phpunit/phpunit": "^5.7.23 || ^6.4.3", - "zendframework/zend-coding-standard": "~1.0.0", - "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" - }, - "suggest": { - "zendframework/zend-servicemanager": "To support plugin manager support" + "zendframework/zend-coding-standard": "~1.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev", - "dev-develop": "2.9-dev" + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" }, "zf": { "component": "Zend\\InputFilter", @@ -2766,7 +2765,7 @@ "inputfilter", "zf" ], - "time": "2017-12-04T21:24:25+00:00" + "time": "2018-05-14T17:38:03+00:00" }, { "name": "zendframework/zend-json", @@ -3157,26 +3156,27 @@ }, { "name": "zendframework/zend-mvc", - "version": "2.7.12", + "version": "2.7.15", "source": { "type": "git", "url": "https://github.com/zendframework/zend-mvc.git", - "reference": "badb5bdbdae0706d1ef8928cbc1088cca0e6a3cb" + "reference": "a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/badb5bdbdae0706d1ef8928cbc1088cca0e6a3cb", - "reference": "badb5bdbdae0706d1ef8928cbc1088cca0e6a3cb", + "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089", + "reference": "a8d45689d37a9e4ff4b75ea0b7478fa3d4f9c089", "shasum": "" }, "require": { "container-interop/container-interop": "^1.1", "php": "^5.5 || ^7.0", - "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", - "zendframework/zend-form": "^2.8.2", - "zendframework/zend-hydrator": "^1.1 || ^2.1", + "zendframework/zend-console": "^2.7", + "zendframework/zend-eventmanager": "^2.6.4 || ^3.0", + "zendframework/zend-form": "^2.11", + "zendframework/zend-hydrator": "^1.1 || ^2.4", "zendframework/zend-psr7bridge": "^0.2", - "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-servicemanager": "^2.7.10 || ^3.0.3", "zendframework/zend-stdlib": "^2.7.5 || ^3.0" }, "replace": { @@ -3184,30 +3184,29 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "^4.5", + "phpunit/phpunit": "^4.8.36", + "sebastian/comparator": "^1.2.4", "sebastian/version": "^1.0.4", - "zendframework/zend-authentication": "^2.5.3", - "zendframework/zend-cache": "^2.6.1", - "zendframework/zend-console": "^2.6", + "zendframework/zend-authentication": "^2.6", + "zendframework/zend-cache": "^2.8", "zendframework/zend-di": "^2.6", - "zendframework/zend-filter": "^2.6.1", - "zendframework/zend-http": "^2.5.4", - "zendframework/zend-i18n": "^2.6", - "zendframework/zend-inputfilter": "^2.6", + "zendframework/zend-filter": "^2.8", + "zendframework/zend-http": "^2.8", + "zendframework/zend-i18n": "^2.8", + "zendframework/zend-inputfilter": "^2.8", "zendframework/zend-json": "^2.6.1", - "zendframework/zend-log": "^2.7.1", - "zendframework/zend-modulemanager": "^2.7.1", - "zendframework/zend-serializer": "^2.6.1", - "zendframework/zend-session": "^2.6.2", - "zendframework/zend-text": "^2.6", - "zendframework/zend-uri": "^2.5", - "zendframework/zend-validator": "^2.6", - "zendframework/zend-view": "^2.6.3" + "zendframework/zend-log": "^2.9.3", + "zendframework/zend-modulemanager": "^2.8", + "zendframework/zend-serializer": "^2.8", + "zendframework/zend-session": "^2.8.1", + "zendframework/zend-text": "^2.7", + "zendframework/zend-uri": "^2.6", + "zendframework/zend-validator": "^2.10", + "zendframework/zend-view": "^2.9" }, "suggest": { "zendframework/zend-authentication": "Zend\\Authentication component for Identity plugin", "zendframework/zend-config": "Zend\\Config component", - "zendframework/zend-console": "Zend\\Console component", "zendframework/zend-di": "Zend\\Di component", "zendframework/zend-filter": "Zend\\Filter component", "zendframework/zend-http": "Zend\\Http component", @@ -3232,6 +3231,9 @@ } }, "autoload": { + "files": [ + "src/autoload.php" + ], "psr-4": { "Zend\\Mvc\\": "src/" } @@ -3245,7 +3247,7 @@ "mvc", "zf2" ], - "time": "2017-04-27T15:44:01+00:00" + "time": "2018-05-03T13:13:41+00:00" }, { "name": "zendframework/zend-paginator", @@ -3466,16 +3468,16 @@ }, { "name": "zendframework/zend-servicemanager", - "version": "2.7.5", + "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-servicemanager.git", - "reference": "fb5b54db5ead533b38e311f14e9c01a79218bf2b" + "url": "https://github.com/demiankatz/zend-servicemanager.git", + "reference": "ae73b1b3affd9c4e3031fb88c84a7082368ca6c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/fb5b54db5ead533b38e311f14e9c01a79218bf2b", - "reference": "fb5b54db5ead533b38e311f14e9c01a79218bf2b", + "url": "https://api.github.com/repos/demiankatz/zend-servicemanager/zipball/ae73b1b3affd9c4e3031fb88c84a7082368ca6c3", + "reference": "ae73b1b3affd9c4e3031fb88c84a7082368ca6c3", "shasum": "" }, "require": { @@ -3505,16 +3507,25 @@ "Zend\\ServiceManager\\": "src/" } }, - "notification-url": "https://packagist.org/downloads/", + "autoload-dev": { + "psr-4": { + "ZendTest\\ServiceManager\\": "test/", + "ZendBench\\ServiceManager\\": "benchmarks/" + } + }, "license": [ "BSD-3-Clause" ], + "description": " ", "homepage": "https://github.com/zendframework/zend-servicemanager", "keywords": [ "servicemanager", "zf2" ], - "time": "2016-02-02T14:11:46+00:00" + "support": { + "source": "https://github.com/demiankatz/zend-servicemanager/tree/master" + }, + "time": "2018-06-08T21:19:09+00:00" }, { "name": "zendframework/zend-session", @@ -5057,22 +5068,22 @@ }, { "name": "jms/serializer", - "version": "1.12.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/schmittjoh/serializer.git", - "reference": "1ea5e0ba68b6b38c327eb3adf5888ac74b587e9c" + "reference": "93d6e03fcb71d45854cc44b5a84d645c02c5d763" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/1ea5e0ba68b6b38c327eb3adf5888ac74b587e9c", - "reference": "1ea5e0ba68b6b38c327eb3adf5888ac74b587e9c", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/93d6e03fcb71d45854cc44b5a84d645c02c5d763", + "reference": "93d6e03fcb71d45854cc44b5a84d645c02c5d763", "shasum": "" }, "require": { "doctrine/annotations": "^1.0", "doctrine/instantiator": "^1.0.3", - "jms/metadata": "~1.1", + "jms/metadata": "^1.3", "jms/parser-lib": "1.*", "php": "^5.5|^7.0", "phpcollection/phpcollection": "~0.1", @@ -5137,7 +5148,7 @@ "serialization", "xml" ], - "time": "2018-05-25T17:01:33+00:00" + "time": "2018-06-01T12:10:12+00:00" }, { "name": "justinrainbow/json-schema", @@ -8245,6 +8256,7 @@ "stability-flags": { "ahand/mobileesp": 20, "pear/validate_ispn": 20, + "zendframework/zend-servicemanager": 20, "ghislainf/zf2-whoops": 20 }, "prefer-stable": false, diff --git a/config/vufind/config.ini b/config/vufind/config.ini index 85d2a6b47d2985b3f9bd608c2b111ab13052e660..99b88405e078ac3752118685dd305fa9a147382b 100644 --- a/config/vufind/config.ini +++ b/config/vufind/config.ini @@ -133,7 +133,7 @@ showBulkOptions = false ; Should users be allowed to save searches in their accounts? allowSavedSearches = true ; Generator value to display in an HTML header <meta> tag: -generator = "VuFind 4.1.2" +generator = "VuFind 4.1.3" ; This section allows you to configure the mechanism used for storing user ; sessions. Available types: File, Memcache, Database. diff --git a/import/browse-indexing.jar b/import/browse-indexing.jar index 33ae93b4edea90d3119419f64b38c41f2e63638f..05d3d6842ff36cfe89f974f4c8254248aa094960 100644 Binary files a/import/browse-indexing.jar and b/import/browse-indexing.jar differ diff --git a/languages/de.ini b/languages/de.ini index da2b8ab160a87771897c41295bfa087249eb15ab..03fab866d8b9330fb834bfa7e558b5775762db73 100644 --- a/languages/de.ini +++ b/languages/de.ini @@ -677,16 +677,16 @@ note_776 = "Parallelausgabe" note_777 = "Enthält Beigabe" note_780_0 = "Fortsetzung von" note_780_1 = "Teilweise Fortsetzung von" -note_780_2 = "Fortgeführt als" -note_780_3 = "Teilweise fortgeführt als" +note_780_2 = "Ersetzt" +note_780_3 = "Ersetzt teilweise" note_780_4 = "Entstanden aus" note_780_5 = "Darin aufgegangen" -note_780_6 = "Teilweise aufgegangen in" +note_780_6 = "Teilweise darin aufgegangen" note_780_7 = "Entstanden aus" note_785_0 = "Fortgesetzt als" note_785_1 = "Teilweise fortgesetzt als" -note_785_2 = "Fortgeführt als" -note_785_3 = "Teilweise fortgeführt als" +note_785_2 = "Ersetzt durch" +note_785_3 = "Teilweise ersetzt durch" note_785_4 = "Aufgegangen in" note_785_5 = "Teilweise aufgegangen in" note_785_6 = "Auftrennung in" diff --git a/languages/it.ini b/languages/it.ini index 519c43bc2c169c9d890c0a566bd7d07202acbdc6..1d4389ae648b46f02ec9fc85e8427bb7271f3476 100644 --- a/languages/it.ini +++ b/languages/it.ini @@ -851,7 +851,7 @@ Search = "Ricerca" Search For = "Ricerca per" Search For Items on Reserve = "Ricerca i documenti (tra i materiali dei corsi)" Search History = "Ultime ricerche" -Search Home = "Home" +Search Home = "Ricerca" Search Mode = "Modalità di ricerca" Search Options = "Opzioni di ricerca" Search Results = "Risultati della ricerca" diff --git a/module/VuFind/src/VuFind/Autocomplete/Solr.php b/module/VuFind/src/VuFind/Autocomplete/Solr.php index 281b6d0f833d3a8efeb3d7272c6fb4ebca3df108..402fde785dd431c009ce57813cd3e20eb1b30f7d 100644 --- a/module/VuFind/src/VuFind/Autocomplete/Solr.php +++ b/module/VuFind/src/VuFind/Autocomplete/Solr.php @@ -126,7 +126,7 @@ class Solr implements AutocompleteInterface $this->sortField = (isset($params[2]) && !empty($params[2])) ? $params[2] : null; $this->filters = []; - if (count($params > 3)) { + if (count($params) > 3) { for ($x = 3; $x < count($params); $x += 2) { if (isset($params[$x + 1])) { $this->filters[] = $params[$x] . ':' . $params[$x + 1]; diff --git a/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php b/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php index 6383f83cc9c735a03e523b873a5ede9ba11439ed..6f5fed38eb6b230bb061ebfb3d3838a0e1d5a0af 100644 --- a/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php +++ b/module/VuFind/src/VuFind/Controller/Plugin/ResultScroller.php @@ -91,8 +91,8 @@ class ResultScroller extends AbstractPlugin */ public function init($searchObject) { - // Do nothing if disabled: - if (!$this->enabled) { + // Do nothing if disabled or search is empty: + if (!$this->enabled || $searchObject->getResultTotal() === 0) { return false; } diff --git a/module/VuFind/src/VuFind/ILS/Driver/NoILS.php b/module/VuFind/src/VuFind/ILS/Driver/NoILS.php index f577f618c08a4ed921f77304ff2129725e2d5b61..262ce0bad5929b5ed99bb209ede8c99e385a28b4 100644 --- a/module/VuFind/src/VuFind/ILS/Driver/NoILS.php +++ b/module/VuFind/src/VuFind/ILS/Driver/NoILS.php @@ -113,7 +113,11 @@ class NoILS extends AbstractBase implements TranslatorAwareInterface { // Add idPrefix condition $idPrefix = $this->getIdPrefix(); - return $this->recordLoader->load(strlen($idPrefix) ? $idPrefix . $id : $id); + return $this->recordLoader->load( + strlen($idPrefix) ? $idPrefix . $id : $id, + DEFAULT_SEARCH_BACKEND, + true // tolerate missing records + ); } /** diff --git a/module/VuFind/src/VuFind/ILS/Driver/SierraRest.php b/module/VuFind/src/VuFind/ILS/Driver/SierraRest.php index cd9c9fcc7fb97041361cf27664cf3342c677ee35..2d7174af27dfb79bc285da638ec4dcd0a53f5fc0 100644 --- a/module/VuFind/src/VuFind/ILS/Driver/SierraRest.php +++ b/module/VuFind/src/VuFind/ILS/Driver/SierraRest.php @@ -379,7 +379,7 @@ class SierraRest extends AbstractBase implements TranslatorAwareInterface, $result = $this->makeRequest( ['v3', 'patrons', $patronId], - [], + ['fields' => 'names,emails'], 'GET', ['cat_username' => $username, 'cat_password' => $password] ); @@ -399,7 +399,7 @@ class SierraRest extends AbstractBase implements TranslatorAwareInterface, 'lastname' => $lastname, 'cat_username' => $username, 'cat_password' => $password, - 'email' => '', + 'email' => !empty($result['emails']) ? $result['emails'][0] : '', 'major' => null, 'college' => null ]; diff --git a/module/VuFind/src/VuFind/ILS/Driver/Unicorn.php b/module/VuFind/src/VuFind/ILS/Driver/Unicorn.php index 9a4a969cec8eb3a58b0cd5519bf23e69cff6ea2f..4e1153cc2df47ee08f3a94297f8068205e968dd5 100644 --- a/module/VuFind/src/VuFind/ILS/Driver/Unicorn.php +++ b/module/VuFind/src/VuFind/ILS/Driver/Unicorn.php @@ -317,14 +317,13 @@ class Unicorn extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf if (!empty($items)) { // sort the items by shelving key in descending order, then ascending by - // copy number; use create_function to create anonymous comparison - // function for php 5.2 compatibility - $cmp = create_function( - '$a,$b', - 'if ($a["shelving_key"] == $b["shelving_key"]) ' - . 'return $a["number"] - $b["number"];' - . 'return $a["shelving_key"] < $b["shelving_key"] ? 1 : -1;' - ); + // copy number + $cmp = function ($a, $b) { + if ($a['shelving_key'] == $b['shelving_key']) { + return $a['number'] - $b['number']; + } + return $a['shelving_key'] < $b['shelving_key'] ? 1 : -1; + }; usort($items, $cmp); } return $items; @@ -817,14 +816,12 @@ class Unicorn extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf if (!empty($items)) { // sort the items by due date - // use create_function to create anonymous comparison - // function for php 5.2 compatibility - $cmp = create_function( - '$a,$b', - 'if ($a["duedate_raw"] == $b["duedate_raw"]) ' - . 'return $a["id"] < $b["id"] ? -1 : 1;' - . 'return $a["duedate_raw"] < $b["duedate_raw"] ? -1 : 1;' - ); + $cmp = function ($a, $b) { + if ($a['duedate_raw'] == $b['duedate_raw']) { + return $a['id'] < $b['id'] ? -1 : 1; + } + return $a['duedate_raw'] < $b['duedate_raw'] ? -1 : 1; + }; usort($items, $cmp); } @@ -1081,7 +1078,7 @@ class Unicorn extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf ) { $availability = 0; $status = $this->config['UnavailableItemTypes'][$item_type]; - } else if (isset($this->config['UnavailableLocations']) + } elseif (isset($this->config['UnavailableLocations']) && isset($this->config['UnavailableLocations'][$currLocCode]) ) { $availability = 0; @@ -1117,7 +1114,7 @@ class Unicorn extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf 'format' => $format ]; - return $item; + return $item; } /** @@ -1381,7 +1378,7 @@ class Unicorn extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf } $linking = $linking[0]; - if (array_key_exists((int) $linking, $textuals)) { + if (array_key_exists((int)$linking, $textuals)) { // Skip coded holdings overridden by textual // holdings continue; @@ -1395,7 +1392,7 @@ class Unicorn extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf $decoded_holding .= ' ' . $subfield->getData(); } - $ndx = (int) ($linking + $ndx = (int)($linking . sprintf("%0{$link_digits}u", $sequence)); $holdings[$ndx] = trim($decoded_holding); } @@ -1406,7 +1403,7 @@ class Unicorn extends AbstractBase implements \VuFindHttp\HttpServiceAwareInterf $textual_holding .= ' ' . $note->getData(); } - $ndx = (int) ($linking . sprintf("%0{$link_digits}u", 0)); + $ndx = (int)($linking . sprintf("%0{$link_digits}u", 0)); $holdings[$ndx] = trim($textual_holding); } diff --git a/module/VuFind/src/VuFind/Log/LoggerFactory.php b/module/VuFind/src/VuFind/Log/LoggerFactory.php index bcc6d393dd7bd84dfe262e0e43fcef5e6fbe97db..807a04a4649e3f3d1e0e3a56a4b0bd146f64f36d 100644 --- a/module/VuFind/src/VuFind/Log/LoggerFactory.php +++ b/module/VuFind/src/VuFind/Log/LoggerFactory.php @@ -116,9 +116,16 @@ class LoggerFactory implements \Zend\ServiceManager\FactoryInterface */ protected function addFileWriters(Logger $logger, $config) { - $parts = explode(':', $config); - $file = $parts[0]; - $error_types = isset($parts[1]) ? $parts[1] : ''; + // Make sure to use only the last ':' after second character to avoid trouble + // with Windows drive letters (e.g. "c:\something\logfile:error-5") + $pos = strrpos($config, ':', 2); + if ($pos > 0) { + $file = substr($config, 0, $pos); + $error_types = substr($config, $pos + 1); + } else { + $file = $config; + $error_types = ''; + } // Make Writers $filters = explode(',', $error_types); diff --git a/module/VuFind/src/VuFind/RecordDriver/EDS.php b/module/VuFind/src/VuFind/RecordDriver/EDS.php index 121ffc3c9341f8372842124136bc592feacd3009..6a77afe19cf3f66f3664095ce7a2e9afac312020 100644 --- a/module/VuFind/src/VuFind/RecordDriver/EDS.php +++ b/module/VuFind/src/VuFind/RecordDriver/EDS.php @@ -408,10 +408,10 @@ class EDS extends SolrDefault { $linkedString = preg_replace_callback( "/\b(https?):\/\/([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]*)\b/i", - create_function( - '$matches', - 'return "<a href=\'".($matches[0])."\'>".($matches[0])."</a>";' - ), + function ($matches) { + return "<a href='" . $matches[0] . "'>" + . htmlentities($matches[0]) . "</a>"; + }, $string ); return $linkedString; diff --git a/module/VuFind/src/VuFind/RecordTab/Factory.php b/module/VuFind/src/VuFind/RecordTab/Factory.php index f4c24ed778e9793b1edd0e3fa219b2882decf323..f68ba6a0fb19e0b2ea42e2ff159ecf6618780c41 100644 --- a/module/VuFind/src/VuFind/RecordTab/Factory.php +++ b/module/VuFind/src/VuFind/RecordTab/Factory.php @@ -263,7 +263,7 @@ class Factory $config = $sm->getServiceLocator()->get('VuFind\Config')->get('config'); $useRecaptcha = isset($config->Captcha) && isset($config->Captcha->forms) && (trim($config->Captcha->forms) === '*' - || strpos($config->Captcha->forms, 'userComments')); + || strpos($config->Captcha->forms, 'userComments') !== false); return new UserComments( 'enabled' === $capabilities->getCommentSetting(), $useRecaptcha diff --git a/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php b/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php index 6f4f6edcb5e6a1afd7828fdebc2131a2d5249084..cde2967b025b58c45c4041a456e690d0241691bd 100644 --- a/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php +++ b/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetListener.php @@ -152,7 +152,7 @@ class HierarchicalFacetListener } $context = $event->getParam('context'); if ($context == 'search' || $context == 'retrieve' - || $context == 'retrieveBatch' + || $context == 'retrieveBatch' || $context == 'similar' ) { $this->processHierarchicalFacets($event); } diff --git a/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php b/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php index 65938234da242532093394bc6f76340f2e570454..72923ad6006961eaeea4a8b409a85dfe8d6d7da6 100644 --- a/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php +++ b/module/VuFind/src/VuFind/Search/SolrAuthor/Params.php @@ -54,9 +54,11 @@ class Params extends \VuFind\Search\Solr\Params return false; } - // Force the search to be a phrase: - $lookfor = '"' . str_replace('"', '\"', $lookfor) . '"'; - + // Force the search to be a phrase if it is not already: + if (!preg_match('/^".*"$/', $lookfor)) { + $lookfor = '"' . str_replace('"', '\"', $lookfor) . '"'; + } + // Set the search (handler is always Author for this module): $this->setBasicSearch($lookfor, 'Author'); return true; diff --git a/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManager.php b/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManager.php index 6e83f1039bcf023d98c3773e43d256c847429094..4c555e8237ffdedad478abf6096bb42a47c64324 100644 --- a/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManager.php +++ b/module/VuFind/src/VuFind/ServiceManager/AbstractPluginManager.php @@ -28,6 +28,7 @@ namespace VuFind\ServiceManager; use Zend\ServiceManager\AbstractPluginManager as Base, Zend\ServiceManager\ConfigInterface, + Zend\ServiceManager\DelegatorFactoryInterface, Zend\ServiceManager\Exception\RuntimeException as ServiceManagerRuntimeException; /** @@ -74,8 +75,12 @@ abstract class AbstractPluginManager extends Base */ public function validatePlugin($plugin) { + if ($plugin instanceof DelegatorFactoryInterface) { + return; + } + $expectedInterface = $this->getExpectedInterface(); - if (!($plugin instanceof $expectedInterface)) { + if (!$plugin instanceof $expectedInterface) { throw new ServiceManagerRuntimeException( 'Plugin ' . get_class($plugin) . ' does not belong to ' . $expectedInterface diff --git a/module/VuFind/src/VuFind/Session/Memcache.php b/module/VuFind/src/VuFind/Session/Memcache.php index 1071c6bcf930b8bc6665c15d4e215e9a3c188337..10d3f12e14ac568678b853a0534e54f8829f36c2 100644 --- a/module/VuFind/src/VuFind/Session/Memcache.php +++ b/module/VuFind/src/VuFind/Session/Memcache.php @@ -86,7 +86,8 @@ class Memcache extends AbstractBase */ public function read($sess_id) { - return $this->getConnection()->get("vufind_sessions/{$sess_id}"); + $value = $this->getConnection()->get("vufind_sessions/{$sess_id}"); + return empty($value) ? '' : $value; } /** diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatter.php b/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatter.php index 80645778afa8c43854b91e72487c35969780d5df..759096c7a62af436f0fcdc65f8d587d82ead8d4c 100644 --- a/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatter.php +++ b/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatter.php @@ -178,7 +178,7 @@ class RecordDataFormatter extends AbstractHelper return $method; } - $useCache = isset($options['cacheData']) && $options['cacheData']; + $useCache = isset($options['useCache']) && $options['useCache']; if ($useCache) { $cacheKey = $driver->getUniqueID() . '|' @@ -282,7 +282,7 @@ class RecordDataFormatter extends AbstractHelper ? $options['separator'] : '<br />'; $retVal = ''; $array = (array)$data; - $remaining = count($data); + $remaining = count($array); foreach ($array as $line) { $remaining--; $text = $escaper($transDomain . $line); diff --git a/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatterFactory.php b/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatterFactory.php index f2da01a84343bf6d659ec0422716d9b71d142832..75e6dba5e6ddec9a19350336387d2f28463f0efa 100644 --- a/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatterFactory.php +++ b/module/VuFind/src/VuFind/View/Helper/Root/RecordDataFormatterFactory.php @@ -72,10 +72,10 @@ class RecordDataFormatterFactory [ 'useCache' => true, 'labelFunction' => function ($data) { - return count($data['main']) > 1 + return count($data['primary']) > 1 ? 'Main Authors' : 'Main Author'; }, - 'context' => ['type' => 'main', 'schemaLabel' => 'author'], + 'context' => ['type' => 'primary', 'schemaLabel' => 'author'], ] ); $spec->setTemplateLine( @@ -140,10 +140,10 @@ class RecordDataFormatterFactory [ 'useCache' => true, 'labelFunction' => function ($data) { - return count($data['main']) > 1 + return count($data['primary']) > 1 ? 'Main Authors' : 'Main Author'; }, - 'context' => ['type' => 'main', 'schemaLabel' => 'author'], + 'context' => ['type' => 'primary', 'schemaLabel' => 'author'], ] ); $spec->setTemplateLine( diff --git a/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/NextPrevNavTest.php b/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/NextPrevNavTest.php new file mode 100644 index 0000000000000000000000000000000000000000..a630e2c33e7e8ee5e0c8b3bc3181422f287ef884 --- /dev/null +++ b/module/VuFind/tests/integration-tests/src/VuFindTest/Mink/NextPrevNavTest.php @@ -0,0 +1,67 @@ +<?php +/** + * Next/previous navigation test class. + * + * PHP version 5 + * + * Copyright (C) Villanova University 2018. + * + * 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 Tests + * @author Conor Sheehan <csheehan@nli.ie> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org Main Page + */ +namespace VuFindTest\Mink; + +/** + * Next/previous navigation test class. + * + * @category VuFind + * @package Tests + * @author Conor Sheehan <csheehan@nli.ie> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org Main Page + */ +class NextPrevNavTest extends \VuFindTest\Unit\MinkTestCase +{ + /** + * if next_prev_navigation and first_last_navigation are set to true + * and a search which returns no results is run + * when a record page is visited no next prev navigation should be shown + * and no exception should be thrown + * + * @return void + */ + public function testEmptySearchResultsCauseNoProblems() + { + $this->changeConfigs(["config" => ["Record" => ["next_prev_navigation" => true, "first_last_navigation" => true]]]); + + // when a search returns no results + // make sure no errors occur when visiting a collection record after + $session = $this->getMinkSession(); + $page = $session->getPage(); + + $session->visit($this->getVuFindUrl() . "/Search/Results?lookfor=__ReturnNoResults__&type=AllField"); + $this->assertEquals($this->findCss($page, ".search-stats > h2")->getText(), "No Results!"); + + // collection should render as normal + $session->visit($this->getVuFindUrl() . "/Record/geo20001"); + + // should fail if exception is thrown + $this->assertContains("Test Publication 20001", $this->findCss($page, "div.media-body > h3[property=name]")->getText()); + } +} diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php index 5b509546d30d6dfa5c84ef646993fb43b0a2dbdf..123c589a64ade4499282835fa5940a4a02968452 100644 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php +++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Controller/Plugin/ResultScrollerTest.php @@ -43,6 +43,29 @@ use Zend\Session\Container; */ class ResultScrollerTest extends TestCase { + /** + * Test next_prev_nav bug + * Expect next_prev to behave like it's disabled if the last search didn't return any results + * + * @return void + */ + public function testNextPrevNavBug() + { + $results = $this->getMockResults(0, 0, 0, true, 'sorted'); + $plugin = $this->getMockResultScroller($results); + $this->assertFalse($plugin->init($results)); + + $expected = [ + 'firstRecord' => null, 'lastRecord' => null, + 'previousRecord' => null, 'nextRecord' => null, + 'currentPosition' => null, 'resultTotal' => null + ]; + + $this->assertEquals($expected, $plugin->getScrollData( + $results->getMockRecordDriver('sorted20')) + ); + } + /** * Test disabled behavior * diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordDataFormatterTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordDataFormatterTest.php index c2b022974910545a427b76abeeb9ed99a0a1b602..23bdb096d76ee3d98f7b22717b8e084c4c6225ae 100644 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordDataFormatterTest.php +++ b/module/VuFind/tests/unit-tests/src/VuFindTest/View/Helper/Root/RecordDataFormatterTest.php @@ -92,8 +92,11 @@ class RecordDataFormatterTest extends \VuFindTest\Unit\ViewHelperTestCase protected function getDriver($overrides = []) { // "Mock out" tag functionality to avoid database access: + $methods = [ + 'getBuilding', 'getDeduplicatedAuthors', 'getContainerTitle', 'getTags' + ]; $record = $this->getMockBuilder('VuFind\RecordDriver\SolrDefault') - ->setMethods(['getBuilding', 'getContainerTitle', 'getTags']) + ->setMethods($methods) ->getMock(); $record->expects($this->any())->method('getTags') ->will($this->returnValue([])); @@ -103,6 +106,15 @@ class RecordDataFormatterTest extends \VuFindTest\Unit\ViewHelperTestCase ->will($this->returnValue(0)); $record->expects($this->any())->method('getContainerTitle') ->will($this->returnValue('0')); + // Expect only one call to getDeduplicatedAuthors to confirm that caching + // works correctly (we need this data more than once, but should only pull + // it from the driver once). + $authors = [ + 'primary' => ['Vico, Giambattista, 1668-1744.' => []], + 'secondary' => ['Pandolfi, Claudia.' => []], + ]; + $record->expects($this->once())->method('getDeduplicatedAuthors') + ->will($this->returnValue($authors)); // Load record data from fixture file: $fixture = json_decode( diff --git a/module/VuFindAdmin/src/VuFindAdmin/Controller/AdminController.php b/module/VuFindAdmin/src/VuFindAdmin/Controller/AdminController.php index 901709eaedd5163fffc206b7a6c6d97e5a0204f7..07c6cc9fd603ffbb84026b0c446b337ce4424b27 100644 --- a/module/VuFindAdmin/src/VuFindAdmin/Controller/AdminController.php +++ b/module/VuFindAdmin/src/VuFindAdmin/Controller/AdminController.php @@ -59,7 +59,7 @@ class AdminController extends AbstractAdmin $xml = false; if (isset($config->Index->url)) { $response = $this->serviceLocator->get('VuFind\Http') - ->get($config->Index->url . '/admin/multicore'); + ->get($config->Index->url . '/admin/cores'); $xml = $response->isSuccess() ? $response->getBody() : false; } $view = $this->createViewModel(); diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Backend.php b/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Backend.php index ca34144ca205d20c7d410d9c8ce3c08711702158..1bedd4c0e00a827024e4ef06904ed38e4b46e19d 100644 --- a/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Backend.php +++ b/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Backend.php @@ -107,8 +107,10 @@ class Backend extends AbstractBackend $e ); } + // Use array_values and array_filter to strip any nulls out of the + // response (these are present sometimes due to an apparent API bug) $results = isset($response['data']) && is_array($response['data']) - ? $response['data'] : []; + ? array_values(array_filter($response['data'])) : []; $collection = $this->createRecordCollection( [ 'offset' => $offset, diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Response/RecordCollectionFactory.php b/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Response/RecordCollectionFactory.php index 27d4b6d2d95487a0ef74f0aa6c9a6cfe0ebebfb7..2a9303dc90b060d70d64eefb3e90639802cff7b0 100644 --- a/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Response/RecordCollectionFactory.php +++ b/module/VuFindSearch/src/VuFindSearch/Backend/BrowZine/Response/RecordCollectionFactory.php @@ -90,7 +90,6 @@ class RecordCollectionFactory implements RecordCollectionFactoryInterface */ public function factory($response) { - if (!is_array($response)) { throw new InvalidArgumentException( sprintf( diff --git a/module/VuFindSearch/src/VuFindSearch/ParamBag.php b/module/VuFindSearch/src/VuFindSearch/ParamBag.php index 2702c40e27eddf41aa2d41b30e45579e4812747f..2c53545c1b3d6f94130e57152a7c8ca180e164f9 100644 --- a/module/VuFindSearch/src/VuFindSearch/ParamBag.php +++ b/module/VuFindSearch/src/VuFindSearch/ParamBag.php @@ -41,7 +41,7 @@ namespace VuFindSearch; * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License * @link https://vufind.org */ -class ParamBag +class ParamBag implements \Countable { /** * Parameters @@ -238,4 +238,14 @@ class ParamBag } return $request; } + + /** + * Get a count of parameters set in the bag. + * + * @return int + */ + public function count() + { + return count($this->params); + } } diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/BrowZine/Response/RecordCollectionFactoryTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/BrowZine/Response/RecordCollectionFactoryTest.php index 068987a61a0531916dfe84179e55374f44dbb05e..a9664e223722a69dd0a2b9168cfdb28d59b15f44 100644 --- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/BrowZine/Response/RecordCollectionFactoryTest.php +++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/BrowZine/Response/RecordCollectionFactoryTest.php @@ -49,7 +49,7 @@ class RecordCollectionFactoryTest extends PHPUnit_Framework_TestCase */ public function testFactory() { - $resp = ['data' => [[], [], []]]; + $resp = ['data' => [['id' => 1], ['id' => 2], ['id' => 3]]]; $fact = new RecordCollectionFactory(); $coll = $fact->factory($resp); $this->assertEquals(3, count($coll)); diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/ParamBagTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/ParamBagTest.php index 4b359057bf8ab14be43856468934559841d2c494..80a3b26160112e3e86a79529a749c9b8d3f9536d 100644 --- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/ParamBagTest.php +++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/ParamBagTest.php @@ -97,4 +97,19 @@ class ParamBagTest extends TestCase $bag3->mergeWithAll([$bag1, $bag2]); $this->assertEquals(['a' => [1], 'b' => [2], 'c' => [3]], $bag3->getArrayCopy()); } + + /** + * Test countability. + * + * @return void + */ + public function testCountability() + { + $bag = new ParamBag(); + $this->assertEquals(0, count($bag)); + $bag->set('foo', 'bar'); + $this->assertEquals(1, count($bag)); + $bag->set('xyzzy', 'baz'); + $this->assertEquals(2, count($bag)); + } } diff --git a/package.json b/package.json index c6999862d959e70958f8143d04740d1890a32350..f203ca6e97058f29854f84dc75a1324c1dedb9f8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vufind", - "version": "4.1.2", + "version": "4.1.3", "description": "Dev tools to handle css preprocessing, js magic, and compression", "repository": { "type": "git", diff --git a/packages/DEBIAN/changelog b/packages/DEBIAN/changelog index 2677ad27668033228f126310fec9a050555d1196..a3c8ec22eae76ade764e19051ae3e36ae13c0d75 100644 --- a/packages/DEBIAN/changelog +++ b/packages/DEBIAN/changelog @@ -1,3 +1,9 @@ +vufind 4.1.3 distribution; urgency=low + + * VuFind 4.1.3 release (see http://vufind.org/wiki/changelog for details) + + -- maintainer VuFind Project Administration Team <vufind-admins@lists.sourceforge.net> Mo 11 Jun 2018 09:32:00 UTC + vufind 4.1.2 distribution; urgency=low * VuFind 4.1.2 release (see http://vufind.org/wiki/changelog for details) diff --git a/packages/DEBIAN/control b/packages/DEBIAN/control index b7f1f9eac7bd00f5a65166f93b9795b645c4182b..377359e674c53f660b54653f853fcc105c9fc0cc 100644 --- a/packages/DEBIAN/control +++ b/packages/DEBIAN/control @@ -1,10 +1,10 @@ Package: vufind -Version: 4.1.2 +Version: 4.1.3 Section: World Wide Web Priority: Optional Architecture: all Depends: apache2, - default-jdk, + openjdk-8-jdk | default-jdk, libapache2-mod-php5 | libapache2-mod-php, libapache2-mod-php5 | php-mbstring, mysql-server | virtual-mysql-server-core, diff --git a/themes/bootstrap3/js/common.js b/themes/bootstrap3/js/common.js index 36310e3dd7b563979aeef2083a984d0090398939..f939ca89802e219fc4c87503370521438226cca3 100644 --- a/themes/bootstrap3/js/common.js +++ b/themes/bootstrap3/js/common.js @@ -250,6 +250,7 @@ function setupAutocomplete() { // Search autocomplete searchbox.autocomplete({ cacheObj: cacheObj, + rtl: $(document.body).hasClass("rtl"), maxResults: 10, loadingString: VuFind.translate('loading') + '...', handler: function vufindACHandler(input, cb) { diff --git a/themes/bootstrap3/js/facets.js b/themes/bootstrap3/js/facets.js index 29573565242720c566573ed3228552e7d05faea3..b8c43dc8f1f8584502424b308d8faa78ae085ada 100644 --- a/themes/bootstrap3/js/facets.js +++ b/themes/bootstrap3/js/facets.js @@ -12,7 +12,7 @@ function buildFacetNodes(data, currentPath, allowExclude, excludeTitle, counts) var excludeURL = currentPath + this.exclude; excludeURL.replace("'", "\\'"); // Just to be safe - html += ' <a href="' + excludeURL + '" onclick="document.location.href=\'' + excludeURL + '\'; return false;" title="' + htmlEncode(excludeTitle) + '"><i class="fa fa-times" title="' + VuFind.translate('Selected') + '"></i></a>'; + html += ' <a href="' + excludeURL + '" onclick="document.location.href=\'' + excludeURL + '\'; return false;" title="' + htmlEncode(excludeTitle) + '"><i class="fa fa-times"></i></a>'; } html += '</span>'; } diff --git a/themes/bootstrap3/js/lib/autocomplete.js b/themes/bootstrap3/js/lib/autocomplete.js index 35ce87424d4dc20a533218bf3a02518b43e03227..e981011e4086149f83030987d93b152a529b03ba 100644 --- a/themes/bootstrap3/js/lib/autocomplete.js +++ b/themes/bootstrap3/js/lib/autocomplete.js @@ -14,10 +14,14 @@ var position = input.offset(); element.css({ top: position.top + input.outerHeight(), - left: position.left, minWidth: input.width() }); - } + if (options.rtl) { + element.css("right", document.body.offsetWidth - position.left - input.outerWidth()); + } else { + element.css("left", position.left); + } + }; var show = function show() { element.removeClass(options.hidingClass); @@ -375,7 +379,8 @@ highlight: true, loadingString: 'Loading...', maxResults: 20, - minLength: 3 + minLength: 3, + rtl: false }; var timer = false; diff --git a/themes/bootstrap3/less/components/js-tree.less b/themes/bootstrap3/less/components/js-tree.less index 98009c64a50c35133a2e0978ed174fe5131792d2..05aa8f2976b797650ceed8f29e9f82d78904bfa7 100644 --- a/themes/bootstrap3/less/components/js-tree.less +++ b/themes/bootstrap3/less/components/js-tree.less @@ -106,13 +106,11 @@ margin-top: 2px; margin-right: 4px; } -.jstree-facet .jstree-container-ul { - padding: 0; - & > li.active, - & > li.active a.jstree-anchor { - background-color: #265680; - color: #fff; - } +.jstree-facet .jstree-container-ul { padding: 0; } +.jstree-facet .active, +.jstree-facet .active a.jstree-anchor { + background-color: @list-group-active-bg; + color: #fff; } li.jstree-facet, li.jstree-node { list-style: none; } diff --git a/themes/bootstrap3/less/components/sidebar.less b/themes/bootstrap3/less/components/sidebar.less index 2303c2a8c7179012244061ecaf1fbc8cb5505688..59ad67a7511176cdb75869d9a7ef51e8a4556c2e 100644 --- a/themes/bootstrap3/less/components/sidebar.less +++ b/themes/bootstrap3/less/components/sidebar.less @@ -87,9 +87,10 @@ .active-filters .facet, .facet-group .active { padding-right: .65rem; - background-color: @brand-primary; + background-color: @list-group-active-bg; color: #fff; + .jstree-icon, a { color: #fff; } } .facet.active .badge, diff --git a/themes/bootstrap3/templates/RecordTab/map.phtml b/themes/bootstrap3/templates/RecordTab/map.phtml index 5b4b2b725fca5b087c5ad11f1e7009d57717410f..f80df20e0f2c1e2aed794f15c08d95bd20890804 100644 --- a/themes/bootstrap3/templates/RecordTab/map.phtml +++ b/themes/bootstrap3/templates/RecordTab/map.phtml @@ -9,7 +9,7 @@ $params = [json_encode($mapTabData), json_encode($popupTitle), json_encode($mapGraticule)]; $jsParams = implode(', ', $params); $jsLoad = "loadMapTab(" . $jsParams . ");"; ?> - <div id="wrap" style="width: 674px; height: 479px"> + <div id="wrap" style="width: inherit; height: 479px"> <div id="map-canvas" style="width: 100%; height: 100%"><div id="popup"></div></div> <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $jsLoad, 'SET');?> </div> diff --git a/themes/bootstrap3/templates/search/advanced/limit.phtml b/themes/bootstrap3/templates/search/advanced/limit.phtml index 2fc51d38e16ecca62e241580df5fc6b6d03fc286..29a25960d9c22a24427fb7913f303f52521cd7a9 100644 --- a/themes/bootstrap3/templates/search/advanced/limit.phtml +++ b/themes/bootstrap3/templates/search/advanced/limit.phtml @@ -11,7 +11,7 @@ <legend><?=$this->transEsc('Results per page')?></legend> <select id="limit" name="limit" class="form-control"> <? foreach ($limitList as $limitVal): ?> - <option value="<?=$this->escapeHtmlAttr($limitVal)?>"<?=($limitVal == $defaultLimit) ? 'selected="selected"' : ''?>><?=$this->escapeHtml($limitVal)?></option> + <option value="<?=$this->escapeHtmlAttr($limitVal)?>" <?=($limitVal == $defaultLimit) ? 'selected="selected"' : ''?>><?=$this->escapeHtml($limitVal)?></option> <? endforeach; ?> </select> </fieldset> diff --git a/themes/bootstrap3/templates/search/facet-list.phtml b/themes/bootstrap3/templates/search/facet-list.phtml index 3b73ba6ed0928f33a7a8d3f6e7b2cff2df714c59..5b87e7d9872f521c2a2a2beec73c626980dae07f 100644 --- a/themes/bootstrap3/templates/search/facet-list.phtml +++ b/themes/bootstrap3/templates/search/facet-list.phtml @@ -40,8 +40,10 @@ <? endif; ?> <? if (!empty($item['displayText'])): ?> <?=$this->escapeHtml($item['displayText']) ?> - <? else: ?> + <? elseif (!empty($item['value'])): ?> <?=$this->escapeHtml($item['value']) ?> + <? else: // prevent empty value inside <a> tag ?> + - <? endif; ?> <? if ($subLinks): ?> </a> diff --git a/themes/root/templates/HelpTranslations/de/search.phtml b/themes/root/templates/HelpTranslations/de/search.phtml index afeb88477d737cb79066720a3b6ff46fd279d7fa..1d15ed68acffe0eeea92dca562d7a825352d9977 100644 --- a/themes/root/templates/HelpTranslations/de/search.phtml +++ b/themes/root/templates/HelpTranslations/de/search.phtml @@ -6,7 +6,7 @@ <li><a href="#Proximity Searches">Suche nach ähnlichen Wörtern</a></li> <li><a href="#Range Searches">Bereichssuche</a></li> <li><a href="#Boosting a Term">Wort gewichten</a></li> - <li><a href="#Boolean operators">Boolsche Operatoren</a> + <li><a href="#Boolean operators">Boolesche Operatoren</a> <ul> <li><a href="#AND">AND</a></li> <li><a href="#+">+</a></li> @@ -29,7 +29,7 @@ <p>Beispiel: Sie wollen nach "Test", "Tests" oder "Tester" suchen, dann geben Sie:</p> <pre class="code">Test*</pre> - <p>ein</p> + <p>ein.</p> <p>Sie können Platzhalter irgendwo platzieren:</p> <pre class="code">Te*t</pre> </dd> @@ -86,19 +86,19 @@ </p> </dd> - <dt><a name="Boolean operators"></a>Boolsche Operatoren</dt> + <dt><a name="Boolean operators"></a>Boolesche Operatoren</dt> <dd> <p> - Boolsche Operatoren erlauben es Wörter, logisch miteinander zu verknüpfen. + Boolesche Operatoren erlauben es, Wörter logisch miteinander zu verknüpfen. Folgende Operatoren sind erlaubt: - <strong>(AND)</strong>, <strong>(+)</strong>, <strong>(OR)</strong>, - <strong>(NOT)</strong> and <strong>(-)</strong>. + <strong>AND</strong>, <strong>+</strong>, <strong>OR</strong>, + <strong>NOT</strong> und <strong>-</strong>. </p> - <p>Hinweis: Boolsche Operatoren müssen groß geschrieben werden!</p> + <p>Hinweis: Boolesche Operatoren müssen großgeschrieben werden!</p> <dl> <dt><a name="AND"></a>AND</dt> <dd> - <p>Die Und-Verknüpfung (<strong>AND</strong>) ist der Standardoperator. Das + <p>Die Und-Verknüpfung <strong>(AND)</strong> ist der Standardoperator. Das bedeutet, dass wenn zwischen zwei Wörtern kein Operator gesetzt wird, die Und-Verknüpfung verwendet wird. Wenn Sie zwei Wörter mit AND verbinden, erhalten Sie Treffer, in denen beide Wörter vorhanden sind. @@ -111,15 +111,15 @@ </dd> <dt><a name="+"></a>+</dt> <dd> - <p>Indem Sie den "+"-Operator vor ein Wort setzen, erhalten Sie - nur Treffer in denen dieses Wort vorkommt. + <p>Indem Sie den <strong>+</strong>-Operator vor ein Wort setzen, erhalten Sie + nur Treffer, in denen dieses Wort vorkommt. </p> <p>Beispiel:</p> <pre class="code">+Ökonomie +Keynes</pre> </dd> <dt><a name="OR"></a>OR</dt> <dd> - <p>Steht eine Oder-Verknüpfung (<strong>(OR)</strong>) zwischen zwei Wörtern, so + <p>Steht eine Oder-Verknüpfung <strong>(OR)</strong> zwischen zwei Wörtern, so erhalten Sie Treffer, in denen eines oder beide Wörter gefunden wurden. </p> <p>Beispiel: Sie suchen nach Titeln, in denen die Phrasen "Ökonomie Keynes" oder @@ -128,10 +128,10 @@ </dd> <dt><a name="NOT"></a>NOT</dt> <dd> - <p>Indem Sie NOT vor ein Wort setzen, schließen Sie Treffer aus, + <p>Indem Sie <strong>NOT</strong> vor ein Wort setzen, schließen Sie Treffer aus, die dieses Wort enthalten.</p> <p>Beispiel: Sie wollen nach Titeln suchen, welche das Wort "Ökonomie" - enthalten aber nicht das Wort "Keynes":</p> + enthalten, aber nicht das Wort "Keynes":</p> <pre class="code">Ökonomie NOT Keynes</pre> <p>Hinweis: NOT muss mit mindestens zwei Wörtern verwendet werden. Beispielsweise liefert folgende Suche keine Treffer:</p> diff --git a/themes/root/templates/HelpTranslations/eu/advsearch.phtml b/themes/root/templates/HelpTranslations/eu/advsearch.phtml new file mode 100644 index 0000000000000000000000000000000000000000..36dc98fa84d38ecf70e65b985e289741bb8267cf --- /dev/null +++ b/themes/root/templates/HelpTranslations/eu/advsearch.phtml @@ -0,0 +1,45 @@ +<h1>Bilaketa Aurreratua</h1> + +<ul class="HelpMenu"> + <li><a href="#Search Fields">Bilaketa-eremuak</a></li> + <li><a href="#Search Groups">Bilaketa-taldeak</a></li> +</ul> + +<dl class="Content"> + <dt><a name="Search Fields"></a>Bilaketa-eremuak</dt> + <dd> + <p> + Lehen aldiz Bilaketa Aurreratua bisitatzen bada hainbat bilaketa-eremu agertzen dira. Eremu bakoitzean sar daitezke nahi diren bilaketa-hitzak. <a href="<?=$this->url('help-home')?>?topic=search">Bilaketa-operadoreak</a> baimentzen dira. + </p> + <p> + Eremu bakoitzean zerrenda baten bidez zehazten da bilatu nahi den datu mota (izenburua, autorea, etab.). Bilaketa aurreratuan nahi diren bilaketa motak doitu eta bateratu daitezke + </p> + <p>Hainbat bilaketa-eremuren arteko erlazioa zehaztu daiteke "Operatzaileak" parametroarekin. + </p> + <ul> + <li>ETA – Bilaketak eremu guztiekin bat egiten dituen emaitzak soilik bueltatzen ditu ( AND Boolearraren parekoa da).</li> + <li>EDO – Bilaketak eremu batekin gutxienez bat egiten dituen emaitzak ematen ditu ( OR Boolearraren parekoa da).</li> + <li>BAINA EZ – Bilaketak eremuetan sartutako terminoak izan ezik, beste emaitza guztiak ematen ditu (NOT Boolearraren parekoa da). + </li> + </ul> + <p> +"Bilaketa bat gehitu" botoiarekin bilaketa-eremu gehiago gehitzen dira orrian. Nahi adina bilaketa-eremu gehitu daitezke. + +</p> + </dd> + + <dt><a name="Search Groups"></a>Bilaketa-taldeak</dt> + <dd> + <p> + Bilaketa konplexuetan, bilaketa-eremu multzo bat eskas gera daiteke. Demagun, Txina edo Indiako historiari buruzko dokumentuak bilatu nahi direla. “ETA" parametroa erabilita Txina, India eta Historia terminoekin, bilaketak Txina eta Indiako historiaren inguruko emaitzak ematen ditu. “EDO" parametroak, berriz, Historia edo India edo Txina-ren inguruko dokumentuak bilatzen ditu – ez Txina eta Indiako historiari buruzkoak.</p> + <p>"Bilaketa-taldeak" aukerari esker askotariko bilaketa-eremu taldetan arakatu dezakegu . Bilaketa-talde bat gehituz gero eremu-talde berria irekitzen da. Nahi ez diren taldeak ezabatzeko "Ezabatu" sakatu behar da. Horretaz gainera, bilaketa-taldeen arteko bateragarritasuna kudeatu daiteke “ETAâ€, “EDO†eta “EZ BAINA†parametroekin. + </p> + + <p>Aurrerago aipatu den adibidea honela ebatzi daiteke:</p> + <ul> + <li>Sartu lehen bilaketa-taldean "India" eta "Txina" eta aukeratu “EDO†parametroa</li> + <li>Gehitu beste bilaketa-talde bat eta sartu “historia†hitza.</li> + <li>Aukeratu “ETA†parametroa</li> + </ul> + </dd> +</dl> diff --git a/themes/root/templates/HelpTranslations/eu/search.phtml b/themes/root/templates/HelpTranslations/eu/search.phtml new file mode 100644 index 0000000000000000000000000000000000000000..db62d848691623f2c7eb717a61e55278a951f04c --- /dev/null +++ b/themes/root/templates/HelpTranslations/eu/search.phtml @@ -0,0 +1,137 @@ +<h1>Konektibo logikoak</h1> + +<ul class="HelpMenu"> + <li><a href="#Wildcard Searches">Komodin-bilaketa</a></li> + <li><a href="#Fuzzy Searches">Bilaketa zehaztugabea</a></li> + <li><a href="#Proximity Searches">Gertutasun-bilaketa</a></li> + <li><a href="#Range Searches">Tarte-bilaketa</a></li> + <li><a href="#Boosting a Term">Hitz bat estimulatu</a></li> + <li><a href="#Boolean operators">Eragile boolearrak</a> + <ul> + <li><a href="#AND">AND</a></li> + <li><a href="#+">+</a></li> + <li><a href="#OR">OR</a></li> + <li><a href="#NOT">NOT</a></li> + <li><a href="#-">-</a></li> + </ul> + </li> +</ul> + + +<dl class="Content"> + <dt><a name="Wildcard Searches"></a>Komodin-bilaketa</dt> + <dd> + <p>Galdera ikurra <strong>(?)</strong> erabili karaktere zehatz bat ordezkatzeko..</p> + <p>Adibidez, “text†edo “test†bilatzeko honako bilaketa hau erabil dezakezu:</p> + <pre class="code">te?t</pre> + + <p>Karkatere anitz ordezteko (zero edo gehiago) erabili izartxoa(<strong>*</strong>).</p> + <p>Adibidez, "test" erroko "tests" edo "tester" bilatzeko, idatzi honako hau: </p> + <pre class="code">test*</pre> + + <p>Hitzaren erdian ere erabil daiteke izartxo (*) komodina:</p> + <pre class="code">te*t</pre> + </dd> + + <dt><a name="Fuzzy Searches"></a>Bilaketa zehaztugabea</dt> + <dd> +<p> + Antzeko grafia duen hitz bat bilatzeko <strong>(~) </strong> azentu-marka jarri hitzaren amaieran. Adibidez, "mono"-ren antzeko grafia duten hitzak bilatzeko</p> + <pre class="code">mono~</pre> + <p>Bilaketa horrek mono, kono edo moko bezalako emaitzak emango ditu.</p> + + <p>0 eta 1 baloreak zehaztuta antzekotasun-parametroa doitu daiteke. 1 baloretik gertuago antzekotasun handiagoa izango du emaitz-hitzak. Adibidez + :</p> + <pre class="code">mono~0.8</pre> + <p>Antzekotasun-parametroa zehazten ez bada, balore estandarra erabiltzen da, hots, 0.5.</p> + </dd> + + <dt><a name="Proximity Searches"></a>Gertutasun-bilaketa</dt> + <dd> + <p> + Gertutasun-bilaketa erabiltzeko <strong>(~)</strong> azentu-marka ipini hitz anitzen bukaeran . Adibidez, "marketing" eta "Meffert" bilatzeko bost hitz baino distantzia txikiagoan, honako bilaketa egin</p> + <pre class="code">"marketing Meffert"~5</pre> + </dd> + + <dt><a name="Range Searches"></a>Tarte-bilaketa</dt> + <dd> + <p> + Kortxeteak <strong>({ })</strong> erabili tarte-bilaketa egiteko. Adibidez, A, B edo C hizkiz hasten diren hitzak bilatzeko, honako hau idatzi</p> + <pre class="code">{A TO C}</pre> + <p> + Zenbakiekin ere aplika daiteke tarte-bilaketa, urteak kasu:</p> + <pre class="code">[2009 TO 2012]</pre> + </dd> + + <dt><a name="Boosting a Term"></a>Hitz bat estimulatu</dt> + <dd> + <p> + Hitz bati garrantzia handiagoa emateko azentu zirkunflexua <strong>(^)</strong> erabili hitz anitzen bilaketan</p> + <pre class="code">marketing Meffert^5</pre> + <p>"Meffert" hitza estimulatuta, hitz hori dutenak emaitzetan baloratuagoak izango dira. + </p> + </dd> + + <dt><a name="Boolean operators"></a>Eragile boolearrak</dt> + <dd> + <p> + Eragile boolearrek hitz eta esaldiak logikoki konektatzea ahalbidetzen dute. Honako eragile hauek daude onartuak:</p> + <pre class="code">AND</pre> + <pre class="code">+</pre> + <pre class="code">OR</pre> + <pre class="code">NOT</pre> + <pre class="code">-</pre> + <p>Eragile boolearrak maiuskulaz idatzi behar dira.</p> + <dl> + + <dt><a name="AND"></a>AND</dt> + <dd> + <p><strong>AND </strong>, eragile lehenetsia da juntagailu gisa . Hau da, <strong> AND </strong> eragilea katalogoak automatikoki erabiliko du bilaketa hitzen artean idatzi beharrik gabe. <strong>AND</strong> eragileak bilaketan zehaztutako hitz guztiak dituzten erregistroak bilatuko ditu. + </p> + <p>Esaterako, "marketing" eta "Meffert" hitzak dituen erregistroak bilatzeko txertatu: + </p> + <pre class="code">marketing Meffert</pre> + <p>o alternativamente</p> + <pre class="code">marketing AND Meffert</pre> + </dd> + + <dt><a name="+"></a>+ (gehi)</dt> + <dd> + <p> +Gehi <strong>(+) </strong>eragileak hitz bat behar du jarraian itsatsita. Horrela, emaitz-erregistroen edozein ataletan hitz hori agertu behar du. +</p> + <p>Adibidez, "marketing" hitza duten baina "Meffert" hitza izan dezaketen erregistroak bilatzeko, honela idatzi behar da:</p> + <pre class="code">+marketing Meffert</pre> + </dd> + + <dt><a name="OR"></a>OR</dt> + <dd> + <p><strong>OR</strong> eragilea aplikatuta, bilaketak hitzetako bat duen emaitzak ematen ditu. + </p> + <p>Esaterako, "marketing" edo "Meffert" hitzak dituzten tituluak bilatzeko, idatzi:</p> + <pre class="code">marketing OR Meffert</pre> + </dd> + + <dt><a name="NOT"></a>NOT</dt> + <dd> + <p> +Bigarren hitza ezik lehena duten erregistroak bilatzeko <strong> NOT </strong> eragilea erabili. +</p> + <p> +Adibidez, "marketing" hitza duten erregistroak baina, era berean, "Meffert" hitza ez dutenak bilatzeko, txertatu: +</p> + <pre class="code">marketing NOT Meffert</pre> + <p>Oharra: <strong>NOT</strong> eragilea bi hitzez soilik osatua dagoen bilaketan erabil daiteke. Beraz, honako bilaketak ez du emaitzik jaulkiko: + </p> + <pre class="code">NOT marketing</pre> + </dd> + + <dt><a name="-"></a>- (ken)</dt> + <dd> + <p>Ken eragilea <strong>(-) </strong>hitz baten aurretik jarrita, hitz hori duten erregistroak baztertzen ditu.</p> + <p>Adibidez:</p> + <pre class="code">marketing -Meffert</pre> + </dd> + </dl> + </dd> +</dl> \ No newline at end of file diff --git a/themes/root/templates/HelpTranslations/fr/search.phtml b/themes/root/templates/HelpTranslations/fr/search.phtml index f1952d8b9e5433f430458daddb6933c209704c98..3ddaa5a43afcf49a490e58f7fdb69c45d58a33d0 100644 --- a/themes/root/templates/HelpTranslations/fr/search.phtml +++ b/themes/root/templates/HelpTranslations/fr/search.phtml @@ -22,18 +22,18 @@ <dd> <p>La troncature est un signe qui remplace une ou plusieurs lettres d'un mot.</p> <p><strong>?</strong> (point d'interrogation) représente n'importe quel caractère unique.</p> - <p>Par example, pour rechercher "texte" ou "teste" vous pouvez utiliser:</p> + <p>Par exemple, pour rechercher "texte" ou "teste" vous pouvez utiliser:</p> <pre class="code">te?t</pre> - <p>Pour remplacer 0 ou plus de letters d'un mot utilisez <strong>*</strong> + <p>Pour remplacer 0 ou plus de lettres d'un mot utilisez <strong>*</strong> (astérisque).</p> - <p>Par example pour rechercher "testes", "teste", "testez" vous pouvez + <p>Par exemple pour rechercher "testes", "teste", "testez" vous pouvez utilisez</p> <pre class="code">test*</pre> <p>L'astérisque représente n'importe quelle chaîne de caractères et peut être placé à n'importe quelle place.</p> <pre class="code">te*t</pre> - <p>Notez: Il n'est pas possible d'utilier l'astérisque ou le point - d'interrogation comme premier signe dans une recherche</p> + <p>Notez: Il n'est pas possible d'utiliser l'astérisque ou le point + d'interrogation comme premier signe dans une recherche.</p> </dd> <dt><a name="Fuzzy Searches"></a>Recherches floues</dt> @@ -41,10 +41,10 @@ <p>Utilisez le tilde <strong>~</strong> à la fin d'un mot. Par exemple, pour chercher un mot semblable à "amant" vous utilisez la recherche floue: <pre class="code">amant~</pre> - <p>Cette recherche trouvera des termes comme diamant ou aimant</p> - <p>Un paramètre suplémentaire définit le niveau de similarité. La + <p>Cette recherche trouvera des termes comme "diamant" ou "aimant"</p> + <p>Un paramètre supplémentaire définit le niveau de similarité. La valeur du paramètre peut être entre 0 et 1. Plus le chiffre est proche - de 1, plus les mots utilisés pour la recherche sont similaire au mot + de 1, plus les mots utilisés pour la recherche sont similaires au mot de départ. Exemple:</p> <pre class="code">amant~0.8</pre> <p>La valeur du paramètre par défaut est 0.5</p> @@ -77,7 +77,7 @@ <dt><a name="Boosting a Term"></a>Valoriser un terme</dt> <dd> <p> - Pour donner à un terme une importance plus élevé dans la recheche utilisez + Pour donner à un terme une importance plus élevé dans la recherche utilisez l'accent circonflexe<strong>^</strong>. Par exemple, si vous essayez la recherche suivante, </p> @@ -90,43 +90,43 @@ <p> Les opérateurs booléens permettent de combiner des recherches afin de les expliciter et/ou de les affiner. Les opérateurs booléens suivant sont - possible: - <strong>AND</strong>, <strong>+</strong>, <strong>OR</strong>, <strong>NOT</strong> and <strong>-</strong>. + possibles: + <strong>AND</strong>, <strong>+</strong>, <strong>OR</strong>, <strong>NOT</strong> et <strong>-</strong>. </p> - <p>Notez: Les opérateurs booléens doivent être ecrit en lettre majuscules</p> + <p>Notez: Les opérateurs booléens doivent être écrit en lettre majuscules</p> <dl> <dt><a name="AND"></a>AND</dt> <dd> - <p>L'oppérateur <strong>AND</strong> est l'opérateur par défaut. Ce - qui veut dire, que si vous faitez une recherche avec deux termes sans - l'opérateur AND, le moteur de recherche utilse automatiquement + <p>L'opérateur AND est l'opérateur par défaut. Ce + qui veut dire, que si vous faites une recherche avec deux termes sans + l'opérateur AND, le moteur de recherche utilise automatiquement l'opérateur AND. - Utilisez <strong>AND</strong> pour croiser plusieurs termes de + Utilisez AND pour croiser plusieurs termes de recherche. Vous obtiendrez les notices bibliographiques qui contiennent tous les mots recherchés. Il permet d'affiner la recherche ou de réduire le nombre de réponses.</p> - <p>Example, les resultats contiendront "Théodore Monod" et "désert" si vous - utilisez la recherche suicante:</p> + <p>Par exemple, les résultats contiendront "Théodore Monod" et "désert" si vous + utilisez la recherche suivante:</p> <pre class="code">"Théodore Monod" désert</pre> <p>ou</p> <pre class="code">"Théodore Monod" AND désert</pre> </dd> <dt><a name="+"></a>+</dt> <dd> - <p>Pour obtenir des resultats avec un certain terme en utilisant plusieurs + <p>Pour obtenir des résultats avec un certain terme en utilisant plusieurs termes dans une recherche, utilisez le signe plus <strong>+</strong>. Placez le signe plus devant le mot que vous voulez rechercher. </p> - <p>Par exemple, si vous voulez des resultats qui contiennent "miau" et + <p>Par exemple, si vous voulez des résultats qui contiennent "miaou" et peut être "chat", utilisez la recherche suivante: </p> - <pre class="code">+miau chat</pre> + <pre class="code">+miaou chat</pre> </dd> <dt><a name="OR"></a>OR</dt> <dd> <p> - Au moins l'un de termes reliès par OR doit être présent dans le + Au moins l'un de termes reliés par OR doit être présent dans le résultat.</p> <p>Pour rechercher un document qui présente le terme "miammiam le croissant" ou seulement le terme "croissant", utilisez la recherche suivante: @@ -136,18 +136,18 @@ <dt><a name="NOT"></a>NOT</dt> <dd> <p>L'opérateur NOT permet d'exclure des termes de la recherche.</p> - <p>Pour obtenir des resultats qui contiennent le terme "raton" mais pas - "laveur", utilisez la recherche suivantes: </p> + <p>Pour obtenir des résultats qui contiennent le terme "raton" mais pas + "laveur", utilisez la recherche suivante: </p> <pre class="code">"raton" NOT "laveur"</pre> <p>Notez: L'opérateur NOT ne peut pas être utilisé avec un seul terme. - L'exemple suivant donne aucun resultat:</p> + L'exemple suivant donne aucun résultat:</p> <pre class="code">NOT inconnus</pre> </dd> <dt><a name="-"></a>-</dt> <dd> <p>Le signe moins <strong>-</strong> permet d'exclure le terme de la - recherche qui se situe derriere l'opérateur.</p> - <p>Pour rechercher tous les documents qui contiennent le term + recherche qui se situe derrière l'opérateur.</p> + <p>Pour rechercher tous les documents qui contiennent le terme "Valéry" mais pas "Giscard" utilisez la recherche suivante: </p> <pre class="code">Valéry -Giscard</pre> </dd> diff --git a/themes/root/templates/RecordDriver/AbstractBase/export-refworks.phtml b/themes/root/templates/RecordDriver/AbstractBase/export-refworks.phtml index 223d7a8dce7b421be4f6b5bf98d5b459d3e7fe81..3404a6ce3b8ece4a48edd3c5a3de6e6c3acf16fb 100644 --- a/themes/root/templates/RecordDriver/AbstractBase/export-refworks.phtml +++ b/themes/root/templates/RecordDriver/AbstractBase/export-refworks.phtml @@ -1,10 +1,12 @@ <? // A driver-specific template may pass in format overrides; check for these before going to the driver itself: $formats = isset($this->overrideFormats) ? $this->overrideFormats : $this->driver->tryMethod('getFormats'); -if (is_array($formats)) { +if (is_array($formats) && !empty($formats)) { foreach ($formats as $format) { echo "RT $format\n"; } +} else { + echo "RT Generic\n"; } $title = rtrim($this->driver->getTitle(), " /"); diff --git a/themes/sandal/less/colors.less b/themes/sandal/less/colors.less index c655c557456b8836c3cb3b28c7777f24ff96be6d..15d419524ace9539ba4c5c91ef84be764d081289 100644 --- a/themes/sandal/less/colors.less +++ b/themes/sandal/less/colors.less @@ -45,5 +45,6 @@ @autocomplete-hover-bg: @header-light; @dropdown-link-hover-bg: @header-light; @dropdown-link-hover-color: @black; +@list-group-active-bg: @brand-secondary; @table-bg-hover: @header-light; @pagination-color: @header-bg; diff --git a/themes/sandal/less/sandal.less b/themes/sandal/less/sandal.less index 4ac1371125203905382222288598da3b800877e1..d04ad964146ccd346abd9011a29d7a1321ccb663 100644 --- a/themes/sandal/less/sandal.less +++ b/themes/sandal/less/sandal.less @@ -165,6 +165,8 @@ header { .facet-group { margin-left: 1rem; margin-right: 1rem; + background-color: @sidebar-item-bg; + color: @sidebar-item-color; } /* Collapsed arrows */ .facet-group .title { @@ -182,10 +184,6 @@ header { .active-filters .title::after, #advSearchForm & .title:after { content: none; } // No arrow on active filter title - .facet { - background-color: @sidebar-item-bg; - color: @sidebar-item-color; - } a.facet:hover, .facet.checkbox:hover { background-color: @sidebar-item-hover-bg; } @@ -193,6 +191,7 @@ header { .facet.active:hover, .active-filters .facet, .active-filters .facet:hover, + .active .jstree-anchor, .jstree-facet .jstree-container-ul > .active { border-color: @sidebar-active-bg; background-color: @sidebar-active-bg;