3 namespace MediaWiki\Rest\Handler\Helper
;
5 use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface
;
6 use MediaWiki\Config\ServiceOptions
;
7 use MediaWiki\Content\IContentHandlerFactory
;
8 use MediaWiki\Edit\ParsoidOutputStash
;
9 use MediaWiki\Languages\LanguageConverterFactory
;
10 use MediaWiki\Languages\LanguageFactory
;
11 use MediaWiki\Page\PageIdentity
;
12 use MediaWiki\Page\PageLookup
;
13 use MediaWiki\Page\ParserOutputAccess
;
14 use MediaWiki\Page\RedirectStore
;
15 use MediaWiki\Parser\Parsoid\Config\SiteConfig
as ParsoidSiteConfig
;
16 use MediaWiki\Parser\Parsoid\HtmlTransformFactory
;
17 use MediaWiki\Permissions\Authority
;
18 use MediaWiki\Rest\RequestInterface
;
19 use MediaWiki\Rest\ResponseFactory
;
20 use MediaWiki\Rest\Router
;
21 use MediaWiki\Revision\RevisionLookup
;
22 use MediaWiki\Revision\RevisionRecord
;
23 use MediaWiki\Revision\RevisionRenderer
;
24 use MediaWiki\Title\TitleFormatter
;
25 use Wikimedia\Bcp47Code\Bcp47Code
;
28 * @since 1.40 Factory for helper objects designed for sharing logic between REST handlers that deal with page content.
29 * @unstable during Parsoid migration
31 class PageRestHelperFactory
{
36 public const CONSTRUCTOR_OPTIONS
= PageContentHelper
::CONSTRUCTOR_OPTIONS
;
38 private ServiceOptions
$options;
39 private RevisionLookup
$revisionLookup;
40 private RevisionRenderer
$revisionRenderer;
41 private TitleFormatter
$titleFormatter;
42 private PageLookup
$pageLookup;
43 private ParsoidOutputStash
$parsoidOutputStash;
44 private StatsdDataFactoryInterface
$stats;
45 private ParserOutputAccess
$parserOutputAccess;
46 private ParsoidSiteConfig
$parsoidSiteConfig;
47 private HtmlTransformFactory
$htmlTransformFactory;
48 private IContentHandlerFactory
$contentHandlerFactory;
49 private LanguageFactory
$languageFactory;
50 private RedirectStore
$redirectStore;
51 private LanguageConverterFactory
$languageConverterFactory;
54 * @param ServiceOptions $options
55 * @param RevisionLookup $revisionLookup
56 * @param RevisionRenderer $revisionRenderer
57 * @param TitleFormatter $titleFormatter
58 * @param PageLookup $pageLookup
59 * @param ParsoidOutputStash $parsoidOutputStash
60 * @param StatsdDataFactoryInterface $statsDataFactory
61 * @param ParserOutputAccess $parserOutputAccess
62 * @param ParsoidSiteConfig $parsoidSiteConfig
63 * @param HtmlTransformFactory $htmlTransformFactory
64 * @param IContentHandlerFactory $contentHandlerFactory
65 * @param LanguageFactory $languageFactory
66 * @param RedirectStore $redirectStore
67 * @param LanguageConverterFactory $languageConverterFactory
69 public function __construct(
70 ServiceOptions
$options,
71 RevisionLookup
$revisionLookup,
72 RevisionRenderer
$revisionRenderer,
73 TitleFormatter
$titleFormatter,
74 PageLookup
$pageLookup,
75 ParsoidOutputStash
$parsoidOutputStash,
76 StatsdDataFactoryInterface
$statsDataFactory,
77 ParserOutputAccess
$parserOutputAccess,
78 ParsoidSiteConfig
$parsoidSiteConfig,
79 HtmlTransformFactory
$htmlTransformFactory,
80 IContentHandlerFactory
$contentHandlerFactory,
81 LanguageFactory
$languageFactory,
82 RedirectStore
$redirectStore,
83 LanguageConverterFactory
$languageConverterFactory
85 $this->options
= $options;
86 $this->revisionLookup
= $revisionLookup;
87 $this->revisionRenderer
= $revisionRenderer;
88 $this->titleFormatter
= $titleFormatter;
89 $this->pageLookup
= $pageLookup;
90 $this->parsoidOutputStash
= $parsoidOutputStash;
91 $this->stats
= $statsDataFactory;
92 $this->parserOutputAccess
= $parserOutputAccess;
93 $this->parsoidSiteConfig
= $parsoidSiteConfig;
94 $this->htmlTransformFactory
= $htmlTransformFactory;
95 $this->contentHandlerFactory
= $contentHandlerFactory;
96 $this->languageFactory
= $languageFactory;
97 $this->redirectStore
= $redirectStore;
98 $this->languageConverterFactory
= $languageConverterFactory;
101 public function newRevisionContentHelper(): RevisionContentHelper
{
102 return new RevisionContentHelper(
104 $this->revisionLookup
,
105 $this->titleFormatter
,
110 public function newPageContentHelper(): PageContentHelper
{
111 return new PageContentHelper(
113 $this->revisionLookup
,
114 $this->titleFormatter
,
120 * Should we ignore page id mismatches between page and revision objects
121 * in HTML/pagebundle requests? Mismatches arise because of page moves.
122 * This is recommended only for handling calls to internal APIs.
123 * @note Since 1.43, passing 'null' for $page has been deprecated.
124 * @note Since 1.43, passing 'null' for $authority has been deprecated.
125 * @note Since 1.43, passing $lenientRevHandling as the first parameter
126 * has been deprecated.
127 * @param bool|PageIdentity|null $page
128 * If `false`, this argument is used as the value for $lenientRevHandling,
129 * for backward-compatibility.
130 * @param array $parameters
131 * @param ?Authority $authority
132 * @param int|RevisionRecord|null $revision
133 * @param bool $lenientRevHandling
135 public function newHtmlOutputRendererHelper(
137 array $parameters = [],
138 ?Authority
$authority = null,
140 bool $lenientRevHandling = false
141 ): HtmlOutputRendererHelper
{
142 if ( is_bool( $page ) ) {
143 // Backward compatibility w/ pre-1.43 (deprecated)
144 $lenientRevHandling = $page;
146 wfDeprecated( __METHOD__
. ' with boolean first parameter', '1.43' );
148 if ( $page === null ) {
149 wfDeprecated( __METHOD__
. ' with null $page', '1.43' );
151 if ( $authority === null ) {
152 wfDeprecated( __METHOD__
. ' with null $authority', '1.43' );
154 return new HtmlOutputRendererHelper(
155 $this->parsoidOutputStash
,
157 $this->parserOutputAccess
,
159 $this->revisionLookup
,
160 $this->revisionRenderer
,
161 $this->parsoidSiteConfig
,
162 $this->htmlTransformFactory
,
163 $this->contentHandlerFactory
,
164 $this->languageFactory
,
174 * @note Since 1.43, passing a null $page is deprecated.
176 public function newHtmlMessageOutputHelper( ?PageIdentity
$page = null ): HtmlMessageOutputHelper
{
177 if ( $page === null ) {
178 wfDeprecated( __METHOD__
. ' with null $page', '1.43' );
180 return new HtmlMessageOutputHelper( $page );
183 public function newHtmlInputTransformHelper(
185 ?PageIdentity
$page = null,
187 array $parameters = [],
188 ?RevisionRecord
$originalRevision = null,
189 ?Bcp47Code
$pageLanguage = null
190 ): HtmlInputTransformHelper
{
191 if ( $page === null ||
$body === null ) {
192 wfDeprecated( __METHOD__
. ' without $page or $body' );
194 return new HtmlInputTransformHelper(
196 $this->htmlTransformFactory
,
197 $this->parsoidOutputStash
,
198 $this->parserOutputAccess
,
200 $this->revisionLookup
,
213 public function newPageRedirectHelper(
214 ResponseFactory
$responseFactory,
217 RequestInterface
$request
218 ): PageRedirectHelper
{
219 return new PageRedirectHelper(
220 $this->redirectStore
,
221 $this->titleFormatter
,
226 $this->languageConverterFactory