validate()->isOK(); } /** * Pretty-print JSON. * * If called before validation, it may return JSON "null". * * @return string */ public function beautifyJSON() { // @todo we should normalize entries in module.scripts and module.styles return FormatJson::encode( $this->getAssocArray(), "\t", FormatJson::UTF8_OK ); } /** * Register some links * * @param Title $title * @param int $revId * @param ParserOptions $options * @param bool $generateHtml * @param ParserOutput &$output */ protected function fillParserOutput( Title $title, $revId, ParserOptions $options, $generateHtml, ParserOutput &$output ) { parent::fillParserOutput( $title, $revId, $options, $generateHtml, $output ); $assoc = $this->getAssocArray(); foreach ( [ 'scripts', 'styles' ] as $type ) { foreach ( $assoc['module'][$type] as $page ) { $title = Title::makeTitleSafe( NS_GADGET, $page ); if ( $title ) { $output->addLink( $title ); } } } } /** * @return Status */ public function validate() { if ( !parent::isValid() ) { return $this->getData(); } $validator = new GadgetDefinitionValidator(); return $validator->validate( $this->getAssocArray() ); } /** * Get the JSON content as an associative array with * all fields filled out, populating defaults as necessary. * * @return array */ public function getAssocArray() { $info = wfObjectToArray( $this->getData()->getValue() ); /** @var GadgetDefinitionContentHandler $handler */ $handler = $this->getContentHandler(); $info = wfArrayPlus2d( $info, $handler->getDefaultMetadata() ); return $info; } /** * @param WikiPage $page * @param ParserOutput $parserOutput * @return DataUpdate[] */ public function getDeletionUpdates( WikiPage $page, ParserOutput $parserOutput = null ) { return array_merge( parent::getDeletionUpdates( $page, $parserOutput ), [ new GadgetDefinitionDeletionUpdate( $page->getTitle()->getText() ) ] ); } /** * @param Title $title * @param Content $old * @param bool $recursive * @param ParserOutput $parserOutput * @return DataUpdate[] */ public function getSecondaryDataUpdates( Title $title, Content $old = null, $recursive = true, ParserOutput $parserOutput = null ) { return array_merge( parent::getSecondaryDataUpdates( $title, $old, $recursive, $parserOutput ), [ new GadgetDefinitionSecondaryDataUpdate( $title->getText() ) ] ); } }