aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/coursewizardsteps/BasicDataWizardStep.php
diff options
context:
space:
mode:
authorMoritz Strohm <strohm@data-quest.de>2024-09-02 07:50:49 +0000
committerMoritz Strohm <strohm@data-quest.de>2024-09-02 07:50:49 +0000
commitf00164f6f8b823872d0934830a466aeb2af7114b (patch)
treee810d56f7ad1ec8f1e1dd17affd0954f5a54aaf0 /lib/classes/coursewizardsteps/BasicDataWizardStep.php
parentafadde64a6a2017eabb36a3bdef412bb2d2692ba (diff)
StEP 3209, re #3209
Merge request studip/studip!2179
Diffstat (limited to 'lib/classes/coursewizardsteps/BasicDataWizardStep.php')
-rw-r--r--lib/classes/coursewizardsteps/BasicDataWizardStep.php162
1 files changed, 33 insertions, 129 deletions
diff --git a/lib/classes/coursewizardsteps/BasicDataWizardStep.php b/lib/classes/coursewizardsteps/BasicDataWizardStep.php
index 18ae671..d9e7960 100644
--- a/lib/classes/coursewizardsteps/BasicDataWizardStep.php
+++ b/lib/classes/coursewizardsteps/BasicDataWizardStep.php
@@ -402,7 +402,6 @@ class BasicDataWizardStep implements CourseWizardStep
// We only need our own stored values here.
$values = $values[__CLASS__];
- $seminar = new Seminar($course);
if ($source_id && $copy_basic_data) {
$this->copyBasicData(
@@ -418,7 +417,7 @@ class BasicDataWizardStep implements CourseWizardStep
$course->start_semester = Semester::findByTimestamp($values['start_time']);
$course->institut_id = $values['institute'];
- $semclass = $seminar->getSemClass();
+ $semclass = $course->getSemClass();
$course->visible = $semclass['visible'];
$course->admission_prelim = $semclass['admission_prelim_default'];
$course->lesezugriff = $semclass['default_read_level'] ?: 1;
@@ -447,19 +446,39 @@ class BasicDataWizardStep implements CourseWizardStep
}
StudipLog::log('SEM_CREATE', $course->id, null, 'Veranstaltung mit Assistent angelegt');
- $institutes = [$values['institute']];
+ $institute_ids = [$values['institute']];
if (isset($values['participating']) && is_array($values['participating'])) {
- $institutes = array_merge($institutes, array_keys($values['participating']));
+ $institute_ids = array_merge($institute_ids, array_keys($values['participating']));
+ }
+ $institutes = Institute::findMany($institute_ids);
+ $course->institutes = $institutes;
+ if ($course->isDirty()) {
+ $course->store();
}
- $seminar->setInstitutes($institutes);
if (isset($values['lecturers']) && is_array($values['lecturers'])) {
foreach (array_keys($values['lecturers']) as $user_id) {
- $seminar->addMember($user_id, 'dozent');
+ $user = User::find($user_id);
+ if (!$user) {
+ continue;
+ }
+ try {
+ $course->addMember($user, 'dozent');
+ } catch (\Studip\Exception $e) {
+ //Nothing here.
+ }
}
}
if (isset($values['tutors']) && is_array($values['tutors'])) {
foreach (array_keys($values['tutors']) as $user_id) {
- $seminar->addMember($user_id, 'tutor');
+ $user = User::find($user_id);
+ if (!$user) {
+ continue;
+ }
+ try {
+ $course->addMember($user, 'tutor');
+ } catch (\Studip\Exception $e) {
+ //Nothing here.
+ }
}
}
if (Config::get()->DEPUTIES_ENABLE && isset($values['deputies']) && is_array($values['deputies'])) {
@@ -472,10 +491,6 @@ class BasicDataWizardStep implements CourseWizardStep
CourseSet::addCourseToSet($course_set_id, $course->id);
}
- if ($source_id && ($copy_participants || $copy_groups || $copy_members)) {
- self::copyParticipantsAndGroups($course, $source_id, $copy_participants, $copy_groups, $copy_members);
- }
-
return $course;
}
@@ -484,7 +499,7 @@ class BasicDataWizardStep implements CourseWizardStep
* to already given values. A good example are study areas which
* are only needed for certain sem_classes.
*
- * @param array $values values specified from previous steps
+ * @param Array $values values specified from previous steps
* @return bool Is the current step required for a new course?
*/
public function isRequired($values)
@@ -495,7 +510,7 @@ class BasicDataWizardStep implements CourseWizardStep
/**
* Copy values for basic data wizard step from given course.
* @param Course $course
- * @param array $values
+ * @param Array $values
*/
public function copy($course, $values)
{
@@ -528,17 +543,17 @@ class BasicDataWizardStep implements CourseWizardStep
* Fetches the default deputies for a given person if the necessary
* config options are set.
* @param $user_id user whose default deputies to get
- * @return array Default deputy user_ids.
+ * @return Array Default deputy user_ids.
*/
public function getDefaultDeputies($user_id)
{
if (Config::get()->DEPUTIES_ENABLE && Config::get()->DEPUTIES_DEFAULTENTRY_ENABLE) {
- return Deputy::findDeputies($user_id)->map(function (Deputy $deputy): array {
+ return Deputy::findDeputies($user_id)->map(function($deputy) {
return ['id' => $deputy->user_id, 'name' => $deputy->getDeputyFullname()];
});
+ } else {
+ return [];
}
-
- return [];
}
public function getSearch($course_type, $institute_ids, $exclude_lecturers = [],$exclude_tutors = [])
@@ -627,121 +642,10 @@ class BasicDataWizardStep implements CourseWizardStep
}
}
- } else {
- foreach ($indices as $index) {
- $values[$index] = $values[$index] ?? '';
- }
+
}
return $values;
}
- private function copyBasicData(
- Course $course,
- string $source_id
- ): void {
- $source = Course::find($source_id);
- $course->setData($source->toArray('untertitel ort sonstiges art teilnehmer vorrausetzungen lernorga leistungsnachweis ects admission_turnout modules'));
- foreach ($source->datafields as $one) {
- $df = $one->getTypedDatafield();
- if ($df->isEditable()) {
- $course->datafields->findOneBy('datafield_id', $one->datafield_id)->content = $one->content;
- }
- }
- }
-
- /**
- * Copies participants and/or groups from one course to another.
- */
- public static function copyParticipantsAndGroups(
- Course $course,
- string $source_id,
- bool $with_participants = true,
- bool $with_groups = true,
- bool $with_members = true,
- bool|array $group_ids = false
- ): void {
- $source = Course::find($source_id);
-
- if (!$with_participants && !$with_groups) {
- return;
- }
-
- if ($with_participants || ($with_groups && $with_members)) {
- $member_ids = false;
- if (!$with_participants && $with_members) {
- $member_ids = [];
- $source->statusgruppen->filter(function (Statusgruppen $group) use ($group_ids): bool {
- return $group_ids === false
- || in_array($group->id, $group_ids);
- })->each(function (Statusgruppen $group) use (&$member_ids): void {
- $group->members->each(function (StatusgruppeUser $member) use (&$member_ids): void {
- if (!in_array($member->user_id, $member_ids)) {
- $member_ids[] = $member->user_id;
- }
- });
- });
- }
-
- $source->getMembersWithStatus(['user', 'autor', 'tutor'], true)
- ->filter(function (CourseMember $member) use ($course, $member_ids): bool {
- return ($member_ids === false || in_array($member->user_id, $member_ids))
- && !CourseMember::exists([$course->id, $member->user_id]);
- })->each(function (CourseMember $member) use ($course): void {
- CourseMember::insertCourseMember(
- $course->id,
- $member->user_id,
- $member->status,
- );
- });
- }
-
- if (!$with_groups) {
- return;
- }
-
- $source->statusgruppen->filter(function (Statusgruppen $group) use ($group_ids): bool {
- return $group_ids === false
- || in_array($group->id, $group_ids);
- })->each(function (Statusgruppen $group) use ($course, $with_members, $group_ids): void {
- $g = Statusgruppen::findOneBySQL(
- 'range_id = ? AND name = ?',
- [$course->id, $group->name]
- );
-
- if (!$g) {
- $g = Statusgruppen::createOrUpdate(
- null,
- $group->name,
- $group->position,
- $course->id,
- $group->size,
- $group->selfassign,
- $group->selfassign_start,
- $group->selfassign_end,
- $group->hasFolder(),
- null,
- $group->hasBlubber()
- );
- }
-
- if (!$with_members) {
- return;
- }
-
- $group->members->filter(function (StatusgruppeUser $member) use ($g): bool {
- return !StatusgruppeUser::exists([$g->id, $member->user_id]);
- })->each(function (StatusgruppeUser $member) use ($g): void {
- StatusgruppeUser::create([
- 'statusgruppe_id' => $g->id,
- ...$member->toArray([
- 'user_id',
- 'position',
- 'visible',
- 'inherit',
- ])
- ]);
- });
- });
- }
}