From d683526c69e4bc40bb6f0ed105e59cc692111521 Mon Sep 17 00:00:00 2001
From: Frank Duncan <frank@kank.net>
Date: Thu, 20 Oct 2022 12:07:44 -0500
Subject: [PATCH] Changes for upgrade to mediawiki 1.38

---
 extension.json                 |  2 +-
 includes/Deliberation.php      | 19 ++++++++++++-------
 includes/DeliberationHooks.php |  4 ++--
 3 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/extension.json b/extension.json
index 211667a..62c6410 100644
--- a/extension.json
+++ b/extension.json
@@ -9,7 +9,7 @@
 	"descriptionmsg": "deliberation-desc",
 	"type": "specialpages",
 	"requires": {
-		"MediaWiki": ">= 1.31.0"
+		"MediaWiki": ">= 1.38.0"
 	},
   "LogHeaders": {
     "deliberation": "deliberationlogpagetext"
diff --git a/includes/Deliberation.php b/includes/Deliberation.php
index 10d6d9c..2c2913a 100644
--- a/includes/Deliberation.php
+++ b/includes/Deliberation.php
@@ -5,13 +5,18 @@ class Deliberation {
     if($title->getArticleID() != 0) {
       $lb = \MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancer();
       $dbw = $lb->getConnectionRef(DB_MASTER);
-      $dbw->upsert("Deliberation", [
-          'page_id' => $title->getArticleID(),
-          'user_id' => $user->getId(),
-          'choice' => $value
-        ],
-        ['page_id', 'user_id'],
-        ['choice' => $value]);
+      $params = ['page_id' => $title->getArticleID(), 'user_id' => $user->getId()];
+      if($dbw->newSelectQueryBuilder()
+        ->select(['id'])
+        ->from('Deliberation')
+        ->where($params)
+        ->fetchRowCount() == 0) {
+
+        $params["choice"] = $value;
+        $dbw->insert("Deliberation", $params);
+      } else {
+        $dbw->update("Deliberation", [ 'choice' => $value ], $params);
+      }
     }
   }
 
diff --git a/includes/DeliberationHooks.php b/includes/DeliberationHooks.php
index 0633991..0333a34 100644
--- a/includes/DeliberationHooks.php
+++ b/includes/DeliberationHooks.php
@@ -6,14 +6,14 @@ class DeliberationHooks {
 
   public static function renderDeliberation($parser) {
     $parser->getOutput()->updateCacheExpiry(0);
-    if($parser->getUser()->isAllowed("deliberation-write")) {
+    if($parser->getUserIdentity()->isAllowed("deliberation-write")) {
       $po = $parser->getOutput();
       $po->addModules('ext.deliberation.js');
       $po->addModuleStyles('ext.deliberation.css');
 
       ob_start();
       $template = new DeliberationWidgetTemplate();
-      $template->set('user', $parser->getUser());
+      $template->set('user', $parser->getUserIdentity());
       $template->set('title', $parser->getTitle());
       $template->execute();
 
-- 
GitLab