diff --git a/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php b/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php index 539e9f6ae41fea3b4650a0f985b47a3ec43a4a3a..c834ad362c7d69741457961ff45938829d04b961 100644 --- a/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php +++ b/module/VuFind/src/VuFind/RecordDriver/AbstractBase.php @@ -334,25 +334,20 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface, */ public function getCitationFormats() { + $formatSetting = $this->mainConfig->Record->citation_formats ?? true; + // Default behavior: use all supported options. - if (!isset($this->mainConfig->Record->citation_formats) - || $this->mainConfig->Record->citation_formats === true - || $this->mainConfig->Record->citation_formats === 'true' - ) { + if ($formatSetting === true || $formatSetting === 'true') { return $this->getSupportedCitationFormats(); } // Citations disabled: - if ($this->mainConfig->Record->citation_formats === false - || $this->mainConfig->Record->citation_formats === 'false' - ) { + if ($formatSetting === false || $formatSetting === 'false') { return []; } // Whitelist: - $whitelist = array_map( - 'trim', explode(',', $this->mainConfig->Record->citation_formats) - ); + $whitelist = array_map('trim', explode(',', $formatSetting)); return array_intersect($whitelist, $this->getSupportedCitationFormats()); } diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php index a119ecf76c682d7192ba99ef8ef95ad16494033b..06a655e8230b5eb5eb5e3656e4d42671fc714112 100644 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php +++ b/module/VuFind/tests/unit-tests/src/VuFindTest/RecordDriver/DefaultRecordTest.php @@ -30,6 +30,7 @@ namespace VuFindTest\RecordDriver; use VuFind\RecordDriver\DefaultRecord; use VuFind\RecordDriver\Response\PublicationDetails; +use Zend\Config\Config; /** * DefaultRecord Record Driver Test Class @@ -383,14 +384,52 @@ class DefaultRecordTest extends \VuFindTest\Unit\TestCase $this->assertEquals($breadcrumb, $this->getDriver()->getBreadcrumb()); } + /** + * Test citation behavior. + * + * @return void + */ + public function testCitationBehavior() + { + // The DefaultRecord driver should have some supported formats: + $driver = $this->getDriver(); + $supported = $this->callMethod($driver, 'getSupportedCitationFormats'); + $this->assertNotEmpty($supported); + + // By default, all supported formats should be enabled: + $this->assertEquals($supported, $driver->getCitationFormats()); + + // Data table (citation_formats config, expected result): + $tests = [ + // No results: + [false, []], + ['false', []], + // All results: + [true, $supported], + ['true', $supported], + // Filtered results: + ['MLA,foo', ['MLA']], + ['bar , APA,MLA', ['APA', 'MLA']], + ]; + foreach ($tests as $current) { + list($input, $output) = $current; + $cfg = new Config(['Record' => ['citation_formats' => $input]]); + $this->assertEquals( + $output, + array_values($this->getDriver([], $cfg)->getCitationFormats()) + ); + } + } + /** * Get a record driver with fake data. * - * @param array $overrides Fixture fields to override. + * @param array $overrides Fixture fields to override. + * @param Config $mainConfig Main configuration (optional). * * @return SolrDefault */ - protected function getDriver($overrides = []) + protected function getDriver($overrides = [], Config $mainConfig = null) { $fixture = json_decode( file_get_contents( @@ -401,7 +440,7 @@ class DefaultRecordTest extends \VuFindTest\Unit\TestCase true ); - $record = new DefaultRecord(); + $record = new DefaultRecord($mainConfig); $record->setRawData($overrides + $fixture['response']['docs'][0]); return $record; }