Skip to content
Code-Schnipsel Gruppen Projekte
Cron.php 2,72 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    
    namespace QUI\Memberships;
    
    use QUI;
    use QUI\Memberships\Users\Handler as MembershipUsersHandler;
    use QUI\Memberships\Users\MembershipUser;
    
    /**
     * Class Cron
     *
     * Automatically checks memberships and cancels or extends them
     */
    class Cron
    {
        public static function checkMembershipUsers()
        {
            $MembershipUsers = MembershipUsersHandler::getInstance();
    
    
            $result = QUI::getDataBase()->fetch([
                'select' => [
    
                'from'   => $MembershipUsers->getDataBaseTableName(),
    
    
            $now = time();
    
            foreach ($result as $row) {
    
    Patrick Müller's avatar
    Patrick Müller committed
                try {
                    /** @var MembershipUser $MembershipUser */
                    $MembershipUser = $MembershipUsers->getChild($row['id']);
                    $Membership     = $MembershipUser->getMembership();
    
                    try {
                        $MembershipUser->getUser();
                    } catch (QUI\Users\Exception $Exception) {
                        // archive MembershipUser if QUIQQER User cannot be found
                        if ($Exception->getCode() === 404) {
                            $MembershipUser->archive(MembershipUsersHandler::ARCHIVE_REASON_USER_DELETED);
                        }
    
                        continue;
    
                    }
    
                    // never expire a membership with infinite duration
                    if ($Membership->isInfinite()) {
                        continue;
    
    Patrick Müller's avatar
    Patrick Müller committed
                    // check if membership has expired
    
                    $endTimestamp = strtotime($MembershipUser->getAttribute('endDate'));
    
    Patrick Müller's avatar
    Patrick Müller committed
                        continue;
                    }
    
    Patrick Müller's avatar
    Patrick Müller committed
                    // if membership has been cancelled -> archive it immediately
                    if ($MembershipUser->isCancelled()) {
    
                        $cancelEndDate = $MembershipUser->getAttribute('cancelEndDate');
                        $cancelEndTime = strtotime($cancelEndDate);
    
                        if ($now >= $cancelEndTime) {
                            $MembershipUser->cancel();
                            continue;
                        }
    
    Patrick Müller's avatar
    Patrick Müller committed
                    }
    
                    // extend if membership is extended automatically
                    if ($Membership->isAutoExtend()) {
                        $MembershipUser->extend();
                        continue;
                    }
    
    Patrick Müller's avatar
    Patrick Müller committed
                    // expire membership
                    $MembershipUser->expire();
                } catch (\Exception $Exception) {
                    QUI\System\Log::addError(
    
                        self::class.' :: checkMembershipUsers() -> '.$Exception->getMessage()
    
    Patrick Müller's avatar
    Patrick Müller committed
                    );
    
    
                    QUI\System\Log::writeException($Exception);