diff --git a/includes/Cite.php b/includes/Cite.php index 07e014f3c..1692a8c34 100644 --- a/includes/Cite.php +++ b/includes/Cite.php @@ -233,7 +233,7 @@ class Cite { $this->mParser = $parser; # The key here is the "name" attribute. - list( $key, $group, $follow, $dir ) = $this->refArg( $argv ); + list( $key, $group, $follow, $dir, $refines ) = $this->refArg( $argv ); // empty string indicate invalid dir if ( $dir === '' && $text !== '' ) { $text .= $this->plainError( 'cite_error_ref_invalid_dir', $argv['dir'] ); @@ -397,6 +397,7 @@ class Cite { $key = null; $follow = null; $dir = null; + $refines = null; if ( isset( $argv['dir'] ) ) { // compare the dir attribute value against an explicit whitelist. @@ -411,11 +412,11 @@ class Cite { if ( $argv === [] ) { // No key - return [ null, null, false, $dir ]; + return [ null, null, false, $dir, null ]; } if ( isset( $argv['name'] ) && isset( $argv['follow'] ) ) { - return [ false, false, false, false ]; + return [ false, false, false, false, false ]; } if ( isset( $argv['name'] ) ) { @@ -434,17 +435,16 @@ class Cite { unset( $argv['group'] ); } if ( $wgCiteBookReferencing && isset( $argv[self::REFINES_ATTRIBUTE] ) ) { - // TODO: Extract the name and return it. - // $refines = trim( $argv[self::REFINES_ATTRIBUTE] ); + $refines = trim( $argv[self::REFINES_ATTRIBUTE] ); unset( $argv[self::REFINES_ATTRIBUTE] ); } if ( $argv !== [] ) { // Unexpected invalid attribute. - return [ false, false, false, false ]; + return [ false, false, false, false, false ]; } - return [ $key, $group, $follow, $dir ]; + return [ $key, $group, $follow, $dir, $refines ]; } /** diff --git a/tests/phpunit/CiteTest.php b/tests/phpunit/CiteTest.php index 082d27467..bfea5b235 100644 --- a/tests/phpunit/CiteTest.php +++ b/tests/phpunit/CiteTest.php @@ -28,28 +28,28 @@ class CiteTest extends MediaWikiTestCase { public function provideRefAttributes() { return [ - [ [], [ null, null, false, null ] ], + [ [], [ null, null, false, null, null ] ], // One attribute only - [ [ 'dir' => 'invalid' ], [ null, null, false, '' ] ], - [ [ 'dir' => 'rtl' ], [ null, null, false, ' class="mw-cite-dir-rtl"' ] ], - [ [ 'follow' => 'f' ], [ null, null, 'f', null ] ], - [ [ 'group' => 'g' ], [ null, 'g', null, null ] ], - [ [ 'invalid' => 'i' ], [ false, false, false, false ] ], - [ [ 'name' => 'n' ], [ 'n', null, null, null ] ], - [ [ 'name' => null ], [ false, false, false, false ] ], - [ [ 'refines' => 'r' ], [ null, null, null, null ] ], + [ [ 'dir' => 'invalid' ], [ null, null, false, '', null ] ], + [ [ 'dir' => 'rtl' ], [ null, null, false, ' class="mw-cite-dir-rtl"', null ] ], + [ [ 'follow' => 'f' ], [ null, null, 'f', null, null ] ], + [ [ 'group' => 'g' ], [ null, 'g', null, null, null ] ], + [ [ 'invalid' => 'i' ], [ false, false, false, false, false ] ], + [ [ 'name' => 'n' ], [ 'n', null, null, null, null ] ], + [ [ 'name' => null ], [ false, false, false, false, false ] ], + [ [ 'refines' => 'r' ], [ null, null, null, null, 'r' ] ], // Pairs - [ [ 'follow' => 'f', 'name' => 'n' ], [ false, false, false, false ] ], - [ [ 'follow' => null, 'name' => null ], [ false, false, false, false ] ], - [ [ 'follow' => 'f', 'refines' => 'r' ], [ null, null, 'f', null ] ], - [ [ 'group' => 'r', 'name' => 'n' ], [ 'n', 'r', null, null ] ], + [ [ 'follow' => 'f', 'name' => 'n' ], [ false, false, false, false, false ] ], + [ [ 'follow' => null, 'name' => null ], [ false, false, false, false, false ] ], + [ [ 'follow' => 'f', 'refines' => 'r' ], [ null, null, 'f', null, 'r' ] ], + [ [ 'group' => 'g', 'name' => 'n' ], [ 'n', 'g', null, null, null ] ], // Combinations of 3 or more attributes [ - [ 'group' => 'r', 'name' => 'n', 'refines' => 'f', 'dir' => 'rtl' ], - [ 'n', 'r', null, ' class="mw-cite-dir-rtl"' ] + [ 'group' => 'g', 'name' => 'n', 'refines' => 'r', 'dir' => 'rtl' ], + [ 'n', 'g', null, ' class="mw-cite-dir-rtl"', 'r' ] ], ]; }