Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
38.89% covered (danger)
38.89%
7 / 18
71.43% covered (warning)
71.43%
5 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
FallbackContentHandler
41.18% covered (danger)
41.18%
7 / 17
71.43% covered (warning)
71.43%
5 / 7
16.97
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 serializeContent
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 unserializeContent
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 makeEmptyContent
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 supportsDirectEditing
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 fillParserOutput
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 getSlotDiffRendererInternal
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * Base content handler class for flat text contents.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 * http://www.gnu.org/copyleft/gpl.html
19 *
20 * @since 1.36 (As UnknownContentHandler in 1.34)
21 *
22 * @file
23 * @ingroup Content
24 */
25
26namespace MediaWiki\Content;
27
28use Content;
29use ContentHandler;
30use MediaWiki\Content\Renderer\ContentParseParams;
31use MediaWiki\Context\IContextSource;
32use MediaWiki\Html\Html;
33use MediaWiki\Parser\ParserOutput;
34use SlotDiffRenderer;
35use UnsupportedSlotDiffRenderer;
36
37/**
38 * Content handler implementation for unknown content.
39 *
40 * This can be used to handle content for which no ContentHandler exists on the system,
41 * perhaps because the extension that provided it has been removed.
42 *
43 * @ingroup Content
44 */
45class FallbackContentHandler extends ContentHandler {
46
47    /**
48     * Constructs an FallbackContentHandler. Since FallbackContentHandler can be registered
49     * for multiple model IDs on a system, multiple instances of FallbackContentHandler may
50     * coexist.
51     *
52     * To preserve the serialization format of the original content model, it must be supplied
53     * to the constructor via the $formats parameter. If not given, the default format is
54     * reported as 'application/octet-stream'.
55     *
56     * @param string $modelId
57     * @param string[]|null $formats
58     */
59    public function __construct( $modelId, $formats = null ) {
60        parent::__construct(
61            $modelId,
62            $formats ?? [
63                'application/octet-stream',
64                'application/unknown',
65                'application/x-binary',
66                'text/unknown',
67                'unknown/unknown',
68            ]
69        );
70    }
71
72    /**
73     * Returns the content's data as-is.
74     *
75     * @param Content $content
76     * @param string|null $format The serialization format to check
77     *
78     * @return mixed
79     */
80    public function serializeContent( Content $content, $format = null ) {
81        /** @var FallbackContent $content */
82        '@phan-var FallbackContent $content';
83        return $content->getData();
84    }
85
86    /**
87     * Constructs an FallbackContent instance wrapping the given data.
88     *
89     * @since 1.21
90     *
91     * @param string $blob serialized content in an unknown format
92     * @param string|null $format ignored
93     *
94     * @return Content The FallbackContent object wrapping $data
95     */
96    public function unserializeContent( $blob, $format = null ) {
97        return new FallbackContent( $blob, $this->getModelID() );
98    }
99
100    /**
101     * Creates an empty FallbackContent object.
102     *
103     * @since 1.21
104     *
105     * @return Content A new FallbackContent object with empty text.
106     */
107    public function makeEmptyContent() {
108        return $this->unserializeContent( '' );
109    }
110
111    /**
112     * @return false
113     */
114    public function supportsDirectEditing() {
115        return false;
116    }
117
118    /**
119     * Fills the ParserOutput with an error message.
120     * @since 1.38
121     * @param Content $content
122     * @param ContentParseParams $cpoParams
123     * @param ParserOutput &$output The output object to fill (reference).
124     *
125     */
126    protected function fillParserOutput(
127        Content $content,
128        ContentParseParams $cpoParams,
129        ParserOutput &$output
130    ) {
131        '@phan-var FallbackContent $content';
132        $msg = wfMessage( 'unsupported-content-model', [ $content->getModel() ] );
133        $html = Html::rawElement( 'div', [ 'class' => 'error' ], $msg->inContentLanguage()->parse() );
134        $output->setRawText( $html );
135    }
136
137    /**
138     * @param IContextSource $context
139     *
140     * @return SlotDiffRenderer
141     */
142    protected function getSlotDiffRendererInternal( IContextSource $context ) {
143        return new UnsupportedSlotDiffRenderer( $context );
144    }
145}
146/** @deprecated class alias since 1.43 */
147class_alias( FallbackContentHandler::class, 'FallbackContentHandler' );