From 7fd4be5db9f8827227db3847dadb6afa5aa51b33 Mon Sep 17 00:00:00 2001
From: Rasmus Fuhse <fuhse@data-quest.de>
Date: Mon, 19 Aug 2019 18:21:24 +0200
Subject: [PATCH] add assignments and user config

---
 controllers/copy.php | 30 +++++++++++++++++++++++++++++-
 plugin.manifest      |  2 +-
 views/copy/info.php  | 30 +++++++++++++++++++++++++-----
 3 files changed, 55 insertions(+), 7 deletions(-)

diff --git a/controllers/copy.php b/controllers/copy.php
index fdac177..c40e0f4 100755
--- a/controllers/copy.php
+++ b/controllers/copy.php
@@ -14,12 +14,17 @@ class CopyController extends PluginController
                 "OR auth_user_md5.username LIKE :input) " .
                 "AND " . get_vis_query() . " " .
                 "AND auth_user_md5.perms = 'dozent' " .
-            "ORDER BY Vorname, Nachname", _("Dozentennamen eingeben"), "user_id");
+            "ORDER BY Vorname, Nachname", _("Lehrendennamen eingeben"), "user_id");
     }
 
     public function process_action()
     {
         if (Request::isPost()) {
+            foreach (array("semester_id", "dozent_id", "lock_copied_courses", "cycles", "resource_assignments") as $param) {
+                $config_name = "COURSECOPY_SETTINGS_".strtoupper($param);
+                UserConfig::get($GLOBALS['user']->id)->store($config_name, Request::get($param));
+            }
+
             $dozent = null;
             if (Request::option("dozent_id")) {
                 $dozent = User::find(Request::option("dozent_id"));
@@ -126,6 +131,29 @@ class CopyController extends PluginController
                                 $newcycle['mkdate'] = time();
                                 $newcycle['chdate'] = time();
                                 $newcycle->store();
+
+                                if (Request::get("resource_assignments")) {
+                                    $statement = DBManager::get()->prepare("
+                                        SELECT resource_id 
+                                        FROM (
+                                            SELECT resource_id, COUNT(*) AS number
+                                            FROM termine 
+                                                INNER JOIN resources_assign ON (resources_assign.assign_user_id = termine.termin_id)
+                                            WHERE termine.metadate_id = :metadate_id
+                                            GROUP BY resources_assign.resource_id
+                                        ) AS counter
+                                        ORDER BY number DESC
+                                        LIMIT 1
+                                    ");
+                                    $statement->execute(array('metadate_id' => $cycledate->getId()));
+                                    $resource_id = $statement->fetch(PDO::FETCH_COLUMN, 0);
+                                    if ($resource_id) {
+                                        foreach ($newcycle->dates as $newdate) {
+                                            $singledate = new SingleDate($newdate);
+                                            $singledate->bookRoom($resource_id);
+                                        }
+                                    }
+                                }
                             }
                         }
                     }
diff --git a/plugin.manifest b/plugin.manifest
index d0913f8..c5825ae 100755
--- a/plugin.manifest
+++ b/plugin.manifest
@@ -1,6 +1,6 @@
 pluginname=CourseCopy
 pluginclassname=CourseCopy
-version=1.2.0
+version=1.3.0
 origin=data-quest
 studipMinVersion=4.0
 studipMaxVersion=4.99.99
\ No newline at end of file
diff --git a/views/copy/info.php b/views/copy/info.php
index 1e31ee0..b6df41f 100755
--- a/views/copy/info.php
+++ b/views/copy/info.php
@@ -14,22 +14,42 @@
             <select name="semester_id" required>
                 <option value=""></option>
                 <? foreach (array_reverse(Semester::getAll()) as $semester) : ?>
-                    <option value="<?= htmlReady($semester->getId()) ?>"><?= htmlReady($semester['name']) ?></option>
+                    <option value="<?= htmlReady($semester->getId()) ?>"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_SEMESTER_ID == $semester->getId() ? " selected" : "" ?>>
+                        <?= htmlReady($semester['name']) ?>
+                    </option>
                 <? endforeach ?>
             </select>
         </label>
 
         <label>
-            <?= _("Dozenten ersetzen durch ...") ?>
-            <?= QuickSearch::get("dozent_id", $dozentensearch)->render() ?>
+            <?= _("Lehrende ersetzen durch ...") ?>
+            <?
+            $qs = QuickSearch::get("dozent_id", $dozentensearch);
+            if (UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_DOZENT_ID) {
+                $qs->defaultValue(
+                    UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_DOZENT_ID,
+                    get_fullname(UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_DOZENT_ID)
+                );
+            }
+            echo $qs->render()
+            ?>
         </label>
 
         <label>
-            <input type="checkbox" name="cycles" value="1" checked>
+            <input type="checkbox"
+                   name="cycles"
+                   onChange="jQuery('#resource_assignments').toggle();"
+                   value="1"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_CYCLES ? " checked" : "" ?>>
             <?= _("Regelmäßige Termine mit kopieren") ?>
         </label>
+
+        <label id="resource_assignments" style="<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_CYCLES ? "" : "display: none;" ?>">
+            <input type="checkbox" name="resource_assignments" value="1"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_RESOURCE_ASSIGNMENTS ? " checked" : "" ?>>
+            <?= _("Raumbuchungen mit übernehmen") ?>
+        </label>
+
         <label>
-            <input type="checkbox" name="lock_copied_courses" value="1">
+            <input type="checkbox" name="lock_copied_courses" value="1"<?= UserConfig::get($GLOBALS['user']->id)->COURSECOPY_SETTINGS_LOCK_COPIED_COURSES ? " checked" : "" ?>>
             <?= _('Kopierte Veranstaltungen sperren') ?>
         </label>
     </fieldset>
-- 
GitLab