%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/calendar/jobs/
Upload File :
Create Path :
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);
    }
}

Zerion Mini Shell 1.0