Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 17 additions & 15 deletions webserver/html/ropewiki/extensions/SemanticDependency/src/Hooks.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,9 @@
namespace MediaWiki\Extension\SemanticDependency;

use MediaWiki\MediaWikiServices;
use MediaWiki\Revision\RevisionRecord;
use MediaWiki\Storage\EditResult;
use MediaWiki\User\UserIdentity;
use Parser;
use SMWUpdateJob;
use Title;
use WikiPage;

class Hooks {

Expand Down Expand Up @@ -62,31 +58,37 @@ public static function onPageSaveComplete(
return;
}

foreach ( self::$pagesToRefresh as $title ) {
// Capture the pages to refresh and clear the static array immediately
$pagesToRefresh = self::$pagesToRefresh;
self::$pagesToRefresh = [];

// Push SMWUpdateJobs to the job queue instead of running them immediately
// This allows SMW to process the current page's semantic data first
// (via its own queued jobs) before dependent pages query for it
$jobQueueGroup = MediaWikiServices::getInstance()->getJobQueueGroup();

foreach ( $pagesToRefresh as $title ) {
if ( !$title->exists() ) {
self::log( "Skipping non-existent page: " . $title->getText() );
continue;
}

$targetTitle = $title->getText();
self::log( "Starting update job for dependent page: {$targetTitle}" );
self::log( "Pushing SMWUpdateJob to queue for dependent page: {$targetTitle}" );

try {
$updateJob = new SMWUpdateJob( $title );
$result = $updateJob->run();

if ( $result ) {
self::log( "Successfully completed update job for: {$targetTitle}" );
} else {
self::log( "WARNING: Update job returned false for: {$targetTitle}" );
}
// Add a release timestamp to delay job execution by 5 seconds
// This ensures SMW's own jobs for the current page run first
$updateJob->setDelay( 5 );
$jobQueueGroup->push( $updateJob );
self::log( "Successfully queued update job with 5s delay for: {$targetTitle}" );
} catch ( \Exception $e ) {
self::log( "ERROR updating {$targetTitle}: " . $e->getMessage() );
self::log( "ERROR queueing job for {$targetTitle}: " . $e->getMessage() );
}
}

self::log( "PageSaveComplete hook completed for: {$articleTitle}" );
self::$pagesToRefresh = [];
}

private static function log( string $message ): void {
Expand Down
Loading