Seanchenldap has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/370774 )
Change subject: Add the ability to notify watchers of parent categories
......................................................................
Add the ability to notify watchers of parent categories
Needs to be tested.
Change-Id: Ic7d32294a573fcb95b96e8c00f6792c39abdb5d8
---
M CategoryWatch.php
M README.md
2 files changed, 100 insertions(+), 4 deletions(-)
Approvals:
Seanchenldap: Looks good to me, approved
jenkins-bot: Verified
diff --git a/CategoryWatch.php b/CategoryWatch.php
index cfd3fca..aca8f23 100644
--- a/CategoryWatch.php
+++ b/CategoryWatch.php
@@ -223,6 +223,97 @@
}
}
}
+
+ global $wgCategoryWatchNotifyParentWatchers;
+ if ( $wgCategoryWatchNotifyParentWatchers ) {
+ self::notifyParentWatchers();
+ }
+ }
+
+ /**
+ * Notify the watchers of parent categories
+ */
+ protected static function notifyParentWatchers() {
+ self::$watcher->allparents = [];
+ self::$watcher->i = 0;
+ self::$watcher->findCategoryParents( self::$watcher->after );
+ ## For each active parent category, send the mail
+ if ( self::$watcher->allparents ) {
+ $page = $article->getTitle();
+ $pageurl = $page->getFullUrl();
+ foreach ( self::$watcher->allparents as $cat ) {
+ $title = Title::newFromText( $cat,
NS_CATEGORY );
+ $message = wfMessage(
+ 'categorywatch-catchange', $page,
+ self::$watcher->friendlyCat( $cat )
+ );
+ self::$watcher->notifyWatchers(
+ $title, $user, $message, $summary,
$medit, $pageurl
+ );
+ }
+ }
+ }
+
+ /**
+ * Recursively find all parents of the given categories
+ *
+ * @param array $catarray the categories
+ */
+ protected function findCategoryParents( array $catarray ) {
+ $this->i++;
+ if ( $this->i == 200 ) {
+ return;
+ }
+
+ if ( $catarray ) {
+ foreach ( $catarray as $catname ) {
+ self::$watcher->allparents[] = $catname;
+ $id = self::$watcher->getCategoryArticleId(
$catname );
+ if ( is_numeric( $id ) ) {
+ $parentCat =
self::$watcher->getParentCategories( $id );
+ if ( $parentCat ) {
+ self::$watcher->allparents[] =
$parentCat;
+
self::$watcher->findCategoryParents( [ $parentCat ] );
+ }
+ }
+ }
+ self::$watcher->allparents = array_unique(
self::$watcher->allparents );
+ }
+ }
+
+ /**
+ * Return the parent categories
+ * @param int $id Category Article id
+ * @return parents
+ */
+ protected function getParentCategories( $id ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $cl = $dbr->tableName( 'categorylinks' );
+ $res = $dbr->select(
+ $cl, 'cl_to', "cl_from = $id", __METHOD__,
+ [ 'ORDER BY' => 'cl_sortkey' ]
+ );
+ $row = $dbr->fetchRow( $res );
+ $dbr->freeResult( $res );
+ if ( empty( $row[0] ) ) {
+ return false;
+ }
+ return $row[0];
+ }
+
+ /**
+ * Load page ID of one category
+ *
+ * @param string $catname name of category
+ * @return int
+ */
+ protected function getCategoryArticleId( $catname ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $cl = $dbr->tableName( 'page' );
+ $res = $dbr->select( $cl, 'page_id', "page_title = '$catname'",
__METHOD__ );
+ $row = $dbr->fetchRow( $res );
+ $dbr->freeResult( $res );
+ return $row[0];
}
/**
diff --git a/README.md b/README.md
index 1fb356e..6433bdf 100644
--- a/README.md
+++ b/README.md
@@ -18,14 +18,19 @@
$wgCategoryWatchNotifyEditor = true;
```
-Set this to give every user a unique category that they're automatically
watching. The format of the category name is defined on the
"categorywatch-autocat" localisation message (i.e.
[[MediaWiki:categorywatch-autocat]])
+Give every user a unique category that they're automatically watching. The
format of the category name is defined on the "categorywatch-autocat"
localisation message (i.e. [[MediaWiki:categorywatch-autocat]])
```php
-$wgCategoryWatchUseAutoCat = false;
+$wgCategoryWatchUseAutoCat = true;
```
-Set this to make the categorisation work by realname instead of username
+Make the categorisation work by realname instead of username
```php
-$wgCategoryWatchUseAutoCatRealName = false;
+$wgCategoryWatchUseAutoCatRealName = true;
+```
+
+Notify watchers of parent categories as well
+```php
+$wgCategoryWatchNotifyParentWatchers = true;
```
## How to debug
--
To view, visit https://gerrit.wikimedia.org/r/370774
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic7d32294a573fcb95b96e8c00f6792c39abdb5d8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CategoryWatch
Gerrit-Branch: master
Gerrit-Owner: MarkAHershberger <[email protected]>
Gerrit-Reviewer: Seanchenldap <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits