%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/calendar/jobs/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/calendar/jobs/ForceParticipation.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*
*/
namespace humhub\modules\calendar\jobs;
use humhub\modules\calendar\models\CalendarEntry;
use humhub\modules\calendar\models\CalendarEntryParticipant;
use humhub\modules\calendar\models\participation\CalendarEntryParticipation;
use humhub\modules\calendar\notifications\ForceAdd;
use humhub\modules\queue\ActiveJob;
use humhub\modules\space\models\Membership;
use humhub\modules\space\models\Space;
use humhub\modules\user\models\User;
use yii\base\InvalidConfigException;
class ForceParticipation extends ActiveJob
{
public $entry_id;
public $originator_id;
public $status;
/**
* @throws \yii\base\InvalidConfigException
* @throws \Throwable
*/
public function run()
{
/* @var $entry CalendarEntry */
$entry = CalendarEntry::findOne(['id' => $this->entry_id]);
$originator = User::findOne(['id' => $this->originator_id]);
$status = isset($this->status) ? $this->status : CalendarEntryParticipation::PARTICIPATION_STATUS_ACCEPTED;
if(!$entry || !$originator || !($entry->content->container instanceof Space) ||
!CalendarEntryParticipation::isAllowedStatus($status)) {
throw new InvalidConfigException('Could not force calendar event participation due to invalid config ('.$this->entry_id.', '.$this->originator_id.', '.$status.')');
}
$subQuery = CalendarEntryParticipant::find()
->where(['calendar_entry_id' => $this->entry_id])
->andWhere('calendar_entry_participant.user_id = space_membership.user_id');
/* @var Membership[] $remainingMemberships */
$remainingMemberships = Membership::find()
->joinWith('user')
->where(['space_id' => $entry->content->container->id])
->andWhere(['space_membership.status' => Membership::STATUS_MEMBER])
->andWhere(['user.status' => User::STATUS_ENABLED])
->andWhere(['NOT EXISTS', $subQuery])->all();
$users = [];
foreach ($remainingMemberships as $membership) {
$entry->participation->setParticipationStatus($membership->user, $status);
$users[] = $membership->user;
}
ForceAdd::instance()->from($originator)->about($entry)->sendBulk($users);
}
}