Physikerwelt has uploaded a new change for review. https://gerrit.wikimedia.org/r/189448
Change subject: Support regular action purge ...................................................................... Support regular action purge Maybe the purge hook can be used It needs to be proven that this method does not affect the purge speed for pages without math (99%) seriously. Bug: T74537 Change-Id: I105bcbb3c9177f23144fb196141feadbe3ebbd15 --- M Math.hooks.php M Math.php M MathRenderer.php 3 files changed, 57 insertions(+), 9 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Math refs/changes/48/189448/1 diff --git a/Math.hooks.php b/Math.hooks.php index c9e6482..b16e3cb 100644 --- a/Math.hooks.php +++ b/Math.hooks.php @@ -288,4 +288,35 @@ global $wgOut; $wgOut->addModules( array( 'ext.math.editbutton.enabler' ) ); } + + + /** + * @param Article $article + */ + public static function onArticlePurge( &$article ) { + $content = $article->getPage()->getContent()->getNativeData(); + $mathTags = self::extractMathTagsFromWikiText( $content ); + if ( sizeof( $mathTags ) > 0 ){ + $ctx = $article->getContext(); + $parser = ParserOptions::newFromContext( $ctx ); + $mode = (int)$parser->getUser()->getOption( 'math' ); + foreach( $mathTags as $tag ){ + $renderer = MathRenderer::getRenderer( $tag[0], $tag[1], $mode ); + $renderer->deleteFromDatabase(); + } + } + } + + /** + * @param $content + * + * @return array + */ + public static function extractMathTagsFromWikiText( $content ) { + $wikiText = Sanitizer::removeHTMLcomments( $content ); + $wikiText = preg_replace( '#<nowiki>(.*)</nowiki>#', '', $wikiText ); + $math = array(); + Parser::extractTagsAndParams( array( 'math' ), $wikiText, $math ); + return $math; + } } diff --git a/Math.php b/Math.php index 4dca145..0a3bbb1 100644 --- a/Math.php +++ b/Math.php @@ -219,6 +219,7 @@ $wgHooks['UnitTestsList'][] = 'MathHooks::onRegisterUnitTests'; $wgHooks['PageRenderingHash'][] = 'MathHooks::onPageRenderingHash'; $wgHooks['EditPageBeforeEditToolbar'][] = 'MathHooks::onEditPageBeforeEditToolbar'; +$wgHooks['ArticlePurge'][] = 'MathHooks::onArticlePurge'; $dir = __DIR__ . '/'; $wgAutoloadClasses['MathHooks'] = $dir . 'Math.hooks.php'; diff --git a/MathRenderer.php b/MathRenderer.php index 7e69eb1..7916c6c 100644 --- a/MathRenderer.php +++ b/MathRenderer.php @@ -371,6 +371,31 @@ } /** + * @return bool + */ + public function deleteFromDatabase() { + if ( $this->storedInDatabase === null ){ + $this->readFromDatabase(); + } + if ( $this->storedInDatabase === true ){ + if ( wfReadOnly() ) { + return false; + } + $dbw = wfGetDB( DB_MASTER ); + wfDebugLog( 'Math', 'delete entry for $' . $this->tex . '$ from database (hash:' . $this->getMd5() . ")\n" ); + try { + $res = $dbw->delete( $this->getMathTableName(), + array( 'math_inputhash' => $this->getInputHash() ), __METHOD__ ); + return $res === true; + } catch (DBUnexpectedError $e) { + wfDebugLog( 'Math', 'Cannot delete cached entry. The following DB exception occurred'. $e->getMessage() ); + return false; + } + } + + } + + /** * Returns sanitized attributes * * @param string $tag element name @@ -515,15 +540,6 @@ */ function isPurge( ) { if ( $this->purge ) { - return true; - } - $request = RequestContext::getMain()->getRequest(); - // TODO: Figure out if ?action=purge - // $action = $request->getText('action'); //always returns '' - // until this issue is resolved we use ?mathpurge=true instead - $mathpurge = $request->getBool( 'mathpurge', false ); - if ( $mathpurge ) { - wfDebugLog( 'Math', 'Re-Rendering on user request' ); return true; } else { return false; -- To view, visit https://gerrit.wikimedia.org/r/189448 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I105bcbb3c9177f23144fb196141feadbe3ebbd15 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Math Gerrit-Branch: master Gerrit-Owner: Physikerwelt <w...@physikerwelt.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits