nineinchnick\nfy\components\DbQueue::unsubscribe PHP Method

unsubscribe() public method

public unsubscribe ( $subscriber_id, $categories = null, boolean $permanent = true )
$permanent boolean if false, the subscription will only be marked as removed and the messages will remain in the storage; if true, everything is removed permanently
    public function unsubscribe($subscriber_id, $categories = null, $permanent = true)
    {
        $trx = models\DbSubscription::getDb()->transaction !== null ? null : models\DbSubscription::getDb()->beginTransaction();
        $subscription = models\DbSubscription::find()->withQueue($this->id)->withSubscriber($subscriber_id)->matchingCategory($categories)->one();
        if ($subscription !== null) {
            $canDelete = true;
            if ($categories !== null) {
                // it may be a case when some (but not all) categories are about to be unsubscribed
                // if that happens and this subscription ends up with some other categories, only given categories
                // should be deleted, not the whole subscription
                $primaryKey = models\DbSubscriptionCategory::primaryKey();
                models\DbSubscriptionCategory::deleteAll([reset($primaryKey) => array_map(function ($c) {
                    return $c->id;
                }, $subscription->categories)]);
                $canDelete = models\DbSubscriptionCategory::find()->where(['subscription_id' => $subscription->id])->count() <= 0;
            }
            if ($canDelete) {
                if ($permanent) {
                    $subscription->delete();
                } else {
                    $subscription->is_deleted = 1;
                    $subscription->update(true, ['is_deleted']);
                }
            }
        }
        if ($trx !== null) {
            $trx->commit();
        }
    }