From 08f9e74a5914590637cd1967e0aa19b7c2e37b8e Mon Sep 17 00:00:00 2001
From: Peter Thienel <thienel@data-quest.de>
Date: Wed, 19 Oct 2022 09:14:27 +0000
Subject: [PATCH] Resolve unselect last study area if at least one lv group is
 assigned, re #1681

Closes #1681

Merge request studip/studip!1085
---
 app/controllers/course/study_areas.php | 22 ++++++++++++++++++----
 app/views/course/study_areas/show.php  |  6 ++++--
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/app/controllers/course/study_areas.php b/app/controllers/course/study_areas.php
index e7365f1cb63..3643309d4bc 100644
--- a/app/controllers/course/study_areas.php
+++ b/app/controllers/course/study_areas.php
@@ -71,7 +71,8 @@ class Course_StudyAreasController extends AuthenticatedController
         if (Request::get('open_node')) {
             $this->values[get_class($this->step)]['open_node'] = Request::get('open_node');
         }
-        $this->must_have_studyareas = $this->is_required();
+        $this->is_activated = $this->is_activated();
+        $this->is_required  = $this->is_required();
 
         $this->values[get_class($this->step)]['locked'] = $this->locked;
         $this->tree                                     = $this->step->getStepTemplate($this->values, 0, 0);
@@ -122,7 +123,6 @@ class Course_StudyAreasController extends AuthenticatedController
                 $msg = $this->unassign();
             }
 
-
         } else {
             $studyareas = Request::getArray('studyareas');
 
@@ -131,13 +131,12 @@ class Course_StudyAreasController extends AuthenticatedController
                 $this->redirect($url);
                 return;
             }
-            if (!empty($studyareas) && !$this->is_required()) {
+            if (!empty($studyareas) && !$this->is_activated()) {
                 PageLayout::postError(_('Sie dürfen keine Studienbereiche zuweisen.'));
                 $this->redirect($url);
                 return;
             }
 
-
             try {
                 $this->course->setStudyAreas($studyareas);
             } catch (UnexpectedValueException $e) {
@@ -200,6 +199,21 @@ class Course_StudyAreasController extends AuthenticatedController
      * @return boolean True if required.
      */
     private function is_required()
+    {
+        $sem_class = $this->course->getSemClass();
+        if (get_class($this->step) === 'StudyAreasLVGroupsCombinedWizardStep') {
+            if ($sem_class['module']) {
+                $lv_gruppen = Lvgruppe::findBySeminar($this->course->id);
+                if (count($lv_gruppen)) {
+                    return false;
+                }
+            }
+        }
+
+        return (bool) $sem_class['bereiche'];
+    }
+
+    private function is_activated()
     {
         $sem_class = $this->course->getSemClass();
         return (bool) $sem_class['bereiche'];
diff --git a/app/views/course/study_areas/show.php b/app/views/course/study_areas/show.php
index a56521c1630..efec1b45025 100644
--- a/app/views/course/study_areas/show.php
+++ b/app/views/course/study_areas/show.php
@@ -3,8 +3,10 @@
 <? endif?>
     <?= $tree ?>
     <div style="text-align: center;">
-    <? if ($must_have_studyareas) : ?>
-        <?= _("Die Veranstaltung muss <b>mindestens einen</b> Studienbereich haben.") ?>
+    <? if ($is_activated) : ?>
+        <? if ($is_required) : ?>
+            <?= _("Die Veranstaltung muss <b>mindestens einen</b> Studienbereich haben.") ?>
+        <? endif ?>
     <? else : ?>
         <?= _("Die Veranstaltung darf <b>keine</b> Studienbereiche haben.") ?>
     <? endif ?>
-- 
GitLab