/** * Remind all unpaid members after 7 days. * * @return */ public static function emailReminder($now = null, $allowedDays = '-7 days') { $con = \Propel::getConnection(); if (!$con->beginTransaction()) { throw new \Exception('Could not begin transaction'); } if ($now === null) { $now = time(); } $before7Days = strtotime($allowedDays, $now); $result = ''; try { $unpaidMembers = \MemberQuery::create()->filterByIsExtended(1)->filterByPaidDate(null, \Criteria::ISNULL)->filterBySignupDate($before7Days, \Criteria::LESS_EQUAL)->filterByDeletionDate(null, \Criteria::ISNULL)->joinReservedPaidEventRelatedByPaidId(null, \Criteria::LEFT_JOIN)->where(\ReservedPaidEventPeer::PAID_ID . ' is null', null)->joinMemberData(null, \Criteria::LEFT_JOIN)->with('MemberData')->condition('reminderMailIsNull', 'MemberData.FeeReminderEmail is null', null)->condition('reminderMailEqualZero', 'MemberData.FeeReminderEmail = ?', 0)->where(array('reminderMailIsNull', 'reminderMailEqualZero'), \Criteria::LOGICAL_OR)->find(); $result .= "7 days reminder email job:\n\n"; if (count($unpaidMembers) > 0) { $result .= "Found " . count($unpaidMembers) . " members:\n\n"; } else { $result .= "No member to remind found."; } foreach ($unpaidMembers as $member) { $totalAdvertised = $member->getAdvertisedCountTotal(); $result .= "Member: " . $member->getNum() . "\n"; $result .= "Advertised count: " . $totalAdvertised . "\n"; if ($totalAdvertised === 0) { MailHelper::sendFeeReminder($member); MailHelper::sendFeeReminderReferrer($member->getReferrerMember(), $member); } else { MailHelper::sendFeeReminderWithAdvertisings($member); MailHelper::sendFeeReminderWithAdvertisingsReferrer($member->getReferrerMember(), $member); } $data = $member->getMemberData(); if (!$data) { $data = new \MemberData(); $data->setMemberId($member->getId()); } $data->setFeeReminderEmail(1); $data->save($con); $result .= "---------\n\n"; } if (!$con->commit()) { throw new \Exception('Could not commit transaction'); } } catch (\Exception $e) { $con->rollBack(); throw $e; } return $result; }