From 5fe59ff1d37812dc671e6b085f71e53b014ad488 Mon Sep 17 00:00:00 2001 From: Roland Schneider Date: Sun, 10 Oct 2021 10:08:31 +0200 Subject: [PATCH] copy only events with assigned trainers in timetable copy-week --- common/modules/event/manager/EventManager.php | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/common/modules/event/manager/EventManager.php b/common/modules/event/manager/EventManager.php index e9253ff..3d6ddb8 100644 --- a/common/modules/event/manager/EventManager.php +++ b/common/modules/event/manager/EventManager.php @@ -2,8 +2,11 @@ namespace common\modules\event\manager; +use common\components\RoleDefinition; use common\models\Event; use common\models\EventRegistration; +use common\models\Trainer; +use common\models\User; use common\modules\event\models\timetable\TimeTableMonth; use common\modules\event\models\timetable\TimeTableMonthDay; use common\modules\event\models\timetable\TimeTableMonthWeek; @@ -88,7 +91,12 @@ class EventManager } // get events between active dates - $events = $this->getEvents($dateTimeFrom, $dateTimeTo); + $trainers = null; + if ( RoleDefinition::isTrainer() ){ + $trainers = $this->getAssignedTrainerIDs(\Yii::$app->user->id); + } + + $events = $this->getEvents($dateTimeFrom, $dateTimeTo,$trainers); // set events per day /** @var Event $event */ @@ -113,9 +121,12 @@ class EventManager * Get all active events between the to dates * @param DateTime $fromInc from date inclusive (>=) * @param DateTime $toExcl to date exclusive (<) + * @param int[] trainers if set, load only events assigend to the given trainers + * if the array is set, but emtpy, + * then no sql will be executed, empty array will be returned * @return Event[] */ - public function getEvents($fromInc, $toExcl) + public function getEvents($fromInc, $toExcl,$trainers = null) { $query = Event::find(); @@ -129,6 +140,12 @@ class EventManager ->orderBy([ 'event.start' => SORT_ASC ]); + if ( isset($trainers)){ + if ( count($trainers) == 0 ){ + return []; + } + $query->andWhere(['in','id_trainer',$trainers]); + } $query = $this->withEventConditions($query); return $query ->all(); @@ -210,4 +227,23 @@ class EventManager ->andWhere(['event.active' => '1'])->all(); } + public function getAssignedTrainers($idUser){ + return Trainer::find() + ->innerJoinWith('userTrainerAssignments') + ->andWhere(['user_trainer_assignment.id_user' => $idUser]) + ->all(); + } + + public function getAssignedTrainerIDs($idUser){ + $trainerObjects = $this->getAssignedTrainers($idUser); + + $trainers = []; + foreach ($trainerObjects as $trainerObject){ + $trainers[] = $trainerObject->id; + } + return $trainers; + } + + + }