Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 37
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
CargoTemplateFormat
0.00% covered (danger)
0.00%
0 / 37
0.00% covered (danger)
0.00%
0 / 3
240
0.00% covered (danger)
0.00%
0 / 1
 allowedParameters
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 displayRow
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
42
 display
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 1
72
1<?php
2/**
3 * @author Yaron Koren
4 * @ingroup Cargo
5 */
6
7class CargoTemplateFormat extends CargoDisplayFormat {
8
9    public static function allowedParameters() {
10        return [
11            'template' => [ 'type' => 'string' ],
12            'named args' => [ 'type' => 'boolean' ],
13            'delimiter' => [ 'type' => 'string', 'label' => wfMessage( 'cargo-viewdata-delimiterparam' )->parse() ]
14        ];
15    }
16
17    protected function displayRow( $templateName, $row, $fieldDescriptions, $namedArgs ) {
18        $wikiText = '{{' . $templateName;
19        // If we're not using named arguments, we add the field number
20        // in to the template call, to not mess up values that contain '='.
21        $fieldNum = 1;
22        foreach ( $fieldDescriptions as $fieldName => $fieldDescription ) {
23            if ( array_key_exists( $fieldName, $row ) ) {
24                $paramName = $namedArgs ? $fieldName : $fieldNum;
25                // HTML-decode the Wikitext values, which were
26                // encoded in CargoSQLQuery::run().
27                // We do this only for the "template" format
28                // because it's the only one that uses the
29                // unformatted values - the formatted values
30                // do this HTML-encoding on their own.
31                if ( $fieldDescription->mType == 'Wikitext' || $fieldDescription->mType == 'Wikitext string' ) {
32                    $value = htmlspecialchars_decode( $row[$fieldName] );
33                } else {
34                    $value = $row[$fieldName];
35                }
36                // Escape pipes within the values so that they
37                // aren't interpreted as template pipes.
38                $value = str_replace( '|', '{{!}}', $value );
39                $wikiText .= '|' . $paramName . '=' . $value;
40                $fieldNum++;
41            }
42        }
43        $wikiText .= "\n}}";
44        return $wikiText;
45    }
46
47    /**
48     * @param array $valuesTable
49     * @param array $formattedValuesTable Unused
50     * @param array $fieldDescriptions
51     * @param array $displayParams
52     * @return string
53     * @throws MWException
54     */
55    public function display( $valuesTable, $formattedValuesTable, $fieldDescriptions, $displayParams ) {
56        if ( !array_key_exists( 'template', $displayParams ) ) {
57            throw new MWException( wfMessage( "cargo-query-missingparam", "template", "template" )->parse() );
58        }
59
60        $templateName = $displayParams['template'];
61        $namedArgs = false;
62        if ( array_key_exists( 'named args', $displayParams ) ) {
63            $namedArgs = strtolower( $displayParams['named args'] ) == 'yes';
64        }
65        $delimiter = ( array_key_exists( 'delimiter', $displayParams ) ) ?
66            $displayParams['delimiter'] : '';
67        $delimiter = str_replace( '\n', "\n", $delimiter );
68        $text = '';
69        if ( array_key_exists( 'intro', $displayParams ) ) {
70            $text .= "\n" . $displayParams['intro'] . "\n";
71        }
72        foreach ( $valuesTable as $i => $row ) {
73            if ( $i > 0 ) {
74                $text .= $delimiter;
75            }
76            $text .= $this->displayRow( $templateName, $row, $fieldDescriptions, $namedArgs );
77        }
78        if ( array_key_exists( 'outro', $displayParams ) ) {
79            $text .= "\n" . $displayParams['outro'] . "\n";
80        }
81        return $text;
82    }
83
84}