From 0fe45573d21b5110a46de7b6dc60cbcec3f99de7 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Thu, 4 Nov 2021 13:25:45 +0000
Subject: [PATCH] fixes #389

---
 app/controllers/consultation/admin.php    | 30 ++++++++++++++++++++---
 lib/models/User.class.php                 |  1 +
 lib/navigation/ConsultationNavigation.php |  1 +
 3 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/app/controllers/consultation/admin.php b/app/controllers/consultation/admin.php
index 5ff0e3781de..12c77a7edb9 100644
--- a/app/controllers/consultation/admin.php
+++ b/app/controllers/consultation/admin.php
@@ -26,6 +26,21 @@ class Consultation_AdminController extends ConsultationController
         $this->range_config = $this->range->getConfiguration();
 
         $this->setupSidebar($action, $this->range_config);
+
+        // Show information about which user is edited when a deputy edits
+        if ($this->range instanceof User && Deputy::isDeputy($GLOBALS['user']->id, $this->range->id, true)) {
+            $message = sprintf(
+                _('Daten von: %1$s (%2$s), Status: %3$s'),
+                htmlReady($this->range->getFullName()),
+                htmlReady($this->range->username),
+                htmlReady($this->range->perms)
+            );
+            PageLayout::postMessage(
+                MessageBox::info($message)
+                , 'settings-user-anncouncement'
+            );
+
+        }
     }
 
     private function groupSlots(array $slots)
@@ -442,7 +457,7 @@ class Consultation_AdminController extends ConsultationController
     {
         if ($what === 'messages') {
             // TODO: Applicable     everywhere?
-            $GLOBALS['user']->cfg->store(
+            $this->getUserConfig()->store(
                 'CONSULTATION_SEND_MESSAGES',
                 (bool) $state
             );
@@ -453,7 +468,7 @@ class Consultation_AdminController extends ConsultationController
                 (bool) $state
             );
         } elseif ($what === 'grouped') {
-            $GLOBALS['user']->cfg->store(
+            $this->getUserConfig()->store(
                 'CONSULTATION_SHOW_GROUPED',
                 (bool) $state
             );
@@ -733,7 +748,7 @@ class Consultation_AdminController extends ConsultationController
         $options = $sidebar->addWidget(new OptionsWidget());
         $options->addCheckbox(
             _('Benachrichtungen über Buchungen'),
-            $GLOBALS['user']->cfg->CONSULTATION_SEND_MESSAGES,
+            $this->getUserConfig()->getValue('CONSULTATION_SEND_MESSAGES'),
             $this->toggleURL('messages/1', $action === 'expired'),
             $this->toggleURL('messages/0', $action === 'expired')
         );
@@ -745,7 +760,7 @@ class Consultation_AdminController extends ConsultationController
         );
         $options->addCheckbox(
             _('Termine gruppiert anzeigen'),
-            $GLOBALS['user']->cfg->CONSULTATION_SHOW_GROUPED,
+            $this->getUserConfig()->getValue('CONSULTATION_SHOW_GROUPED'),
             $this->toggleURL('grouped/1', $action === 'expired'),
             $this->toggleURL('grouped/0', $action === 'expired')
         );
@@ -774,4 +789,11 @@ class Consultation_AdminController extends ConsultationController
             Request::get("{$index}-time")
         ]));
     }
+
+    private function getUserConfig(): RangeConfig
+    {
+        return $this->range instanceof User
+             ? $this->range->getConfiguration()
+             : $GLOBALS['user']->cfg;
+    }
 }
diff --git a/lib/models/User.class.php b/lib/models/User.class.php
index 744ef0618e4..3212b70f7f4 100644
--- a/lib/models/User.class.php
+++ b/lib/models/User.class.php
@@ -1413,6 +1413,7 @@ class User extends AuthUserMd5 implements Range, PrivacyObject
             $user_id = $GLOBALS['user']->id;
         }
         return $user_id === $this->user_id
+            || Deputy::isDeputy($user_id, $this->user_id, true)
             || self::find($user_id)->perms === 'root';
     }
 
diff --git a/lib/navigation/ConsultationNavigation.php b/lib/navigation/ConsultationNavigation.php
index f205882fb93..73aaf5497f5 100644
--- a/lib/navigation/ConsultationNavigation.php
+++ b/lib/navigation/ConsultationNavigation.php
@@ -1,6 +1,7 @@
 <?php
 class ConsultationNavigation extends Navigation
 {
+    /** @var Range */
     protected $range;
 
     public function __construct(Range $range)
-- 
GitLab