/** * Set a membership for a member * * @param int $memberID - member that is going to get the membership * @param int $membershipID - membership that is going to be assigned to the member * if $membershipID == MEMBERSHIP_ID_STANDARD then $days * and $startsNow parameters are not used, so Standard * membership is always set immediately and `forever` * * @param int $days - number of days to set membership for * if 0, then the membership is set forever * * @param boolean $startsNow - if true, the membership will start immediately; * if false, the membership will start after the current * membership expires * * @return boolean - true in case of success, false in case of failure * * */ function setMembership($memberID, $membershipID, $days = 0, $startsNow = false, $transactionID = 0) { $memberID = (int) $memberID; $membershipID = (int) $membershipID; $days = (int) $days; $startsNow = $startsNow ? true : false; $SECONDS_IN_DAY = 86400; $transactionID = (int) $transactionID; if ($transactionID <= 0) { $transactionID = 'NULL'; } //check if member exists $res = db_res("SELECT COUNT(ID) FROM Profiles WHERE ID = {$memberID}"); $res = mysql_fetch_row($res); if ($res[0] != 1) { return false; } //check if membership exists $res = db_res("SELECT COUNT(ID) FROM MemLevels WHERE ID = {$membershipID}"); $res = mysql_fetch_row($res); if ($res[0] != 1) { return false; } if ($membershipID == MEMBERSHIP_ID_NON_MEMBER) { return false; } $currentMembership = getMemberMembershipInfo($memberID); $latestMembership = getMemberMembershipInfo_latest($memberID); if ($membershipID == MEMBERSHIP_ID_STANDARD) { //return if already Standard if ($currentMembership['ID'] == MEMBERSHIP_ID_STANDARD) { return true; } //delete any present and future memberships db_res("\r\n\t\t\tDELETE\tFROM ProfileMemLevels\r\n\t\t\tWHERE\tIDMember = {$memberID}\r\n\t\t\t\t\tAND\t(DateExpires IS NULL OR DateExpires > NOW())"); if (mysql_affected_rows() > 0) { return true; } else { return false; } } if ($days < 0) { return false; } $dateStarts = time(); if (!$startsNow) { //make the membership start after the current membership expires if (!is_null($latestMembership['DateExpires'])) { $dateStarts = $latestMembership['DateExpires']; // if membership already exists then it's unlimited - just shift or delete it $res = db_res("\r\n\t\t\t\tSELECT\tIDMember\r\n\t\t\t\tFROM\tProfileMemLevels\r\n\t\t\t\tWHERE\tIDMember = {$memberID}\r\n\t\t\t\t\t\tAND UNIX_TIMESTAMP(DateStarts) = {$dateStarts}\r\n\t\t\t\t\t\tAND IDLevel = {$membershipID}"); $res = mysql_fetch_row($res); if ($res[0]) { if ($days == 0) { db_res("DELETE\tFROM ProfileMemLevels\r\n\t\t\t\t\t\t\tWHERE\tIDMember = {$memberID}\r\n\t\t\t\t\t\t\t\t\tAND UNIX_TIMESTAMP(DateStarts) = {$dateStarts}\r\n\t\t\t\t\t\t\t\t\tAND IDLevel = {$membershipID}"); } else { db_res("UPDATE\tProfileMemLevels\r\n\t\t\t\t\t\t\tSET\t\tDateStarts = FROM_UNIXTIME(" . ((int) $dateStarts + $days * $SECONDS_IN_DAY) . ")\r\n\t\t\t\t\t\t\tWHERE\tIDMember = {$memberID}\r\n\t\t\t\t\t\t\t\t\tAND UNIX_TIMESTAMP(DateStarts) = {$dateStarts}\r\n\t\t\t\t\t\t\t\t\tAND IDLevel = {$membershipID}"); } } } } if ($days == 0) { //if days==0 then set the membership forever $dateExpires = 'NULL'; } else { $dateExpires = (int) $dateStarts + $days * $SECONDS_IN_DAY; } //insert corresponding record into ProfileMemLevels db_res("\r\n\t\tINSERT ProfileMemLevels (IDMember, IDLevel, DateStarts, DateExpires, TransactionID)\r\n\t\tVALUES ({$memberID}, {$membershipID}, FROM_UNIXTIME({$dateStarts}), FROM_UNIXTIME({$dateExpires}), {$transactionID})"); if (mysql_affected_rows() <= 0) { return false; } return true; }
/** * Set a membership for a member * * @param int $iMemberId - member that is going to get the membership * @param int $iMembershipId - membership that is going to be assigned to the member * if $iMembershipId == MEMBERSHIP_ID_STANDARD then $days * and $bStartsNow parameters are not used, so Standard * membership is always set immediately and `forever` * * @param int $days - number of days to set membership for * if 0, then the membership is set forever * * @param boolean $bStartsNow - if true, the membership will start immediately; * if false, the membership will start after the current * membership expires * * @return boolean - true in case of success, false in case of failure * * */ function setMembership($iMemberId, $iMembershipId, $iDays = 0, $bStartsNow = false, $sTransactionId = '', $isSendMail = true) { $iMemberId = (int) $iMemberId; $iMembershipId = (int) $iMembershipId; $iDays = (int) $iDays; $bStartsNow = $bStartsNow ? true : false; $SECONDS_IN_DAY = 86400; if (!$iMemberId) { $iMemberId = -1; } if (empty($sTransactionId)) { $sTransactionId = 'NULL'; } //check if member exists $aProfileInfo = getProfileInfo($iMemberId); if (!$aProfileInfo) { return false; } //check if membership exists $iRes = (int) db_value("SELECT COUNT(`ID`) FROM `sys_acl_levels` WHERE `ID`='" . $iMembershipId . "' LIMIT 1"); if ($iRes != 1) { return false; } if ($iMembershipId == MEMBERSHIP_ID_NON_MEMBER) { return false; } $aMembershipCurrent = getMemberMembershipInfo($iMemberId); $aMembershipLatest = getMemberMembershipInfo_latest($iMemberId); /** * Setting Standard membership level */ if ($iMembershipId == MEMBERSHIP_ID_STANDARD) { if ($aMembershipCurrent['ID'] == MEMBERSHIP_ID_STANDARD) { return true; } //delete any present and future memberships $res = db_res("DELETE FROM `sys_acl_levels_members` WHERE `IDMember`='" . $iMemberId . "' AND (`DateExpires` IS NULL OR `DateExpires`>NOW())"); if (db_affected_rows($res) <= 0) { return false; } } if ($iDays < 0) { return false; } $iDateStarts = time(); if (!$bStartsNow) { /** * make the membership starts after the latest membership expires * or return false if latest membership isn't Standard and is lifetime membership */ if (!is_null($aMembershipLatest['DateExpires'])) { $iDateStarts = $aMembershipLatest['DateExpires']; } else { if (is_null($aMembershipLatest['DateExpires']) && $aMembershipLatest['ID'] != MEMBERSHIP_ID_STANDARD) { return false; } } } else { // delete previous profile's membership level and actions traces db_res("DELETE FROM `sys_acl_levels_members` WHERE `IDMember`='" . $iMemberId . "'"); clearActionsTracksForMember($iMemberId); } /** * set lifetime membership if 0 days is used. */ $iDateExpires = $iDays != 0 ? (int) $iDateStarts + $iDays * $SECONDS_IN_DAY : 'NULL'; $res = db_res("INSERT `sys_acl_levels_members` (`IDMember`, `IDLevel`, `DateStarts`, `DateExpires`, `TransactionID`) VALUES ('" . $iMemberId . "', '" . $iMembershipId . "', FROM_UNIXTIME(" . $iDateStarts . "), FROM_UNIXTIME(" . $iDateExpires . "), '" . $sTransactionId . "')"); if (db_affected_rows($res) <= 0) { return false; } //Set Membership Alert bx_import('BxDolAlerts'); $oZ = new BxDolAlerts('profile', 'set_membership', '', $iMemberId, array('mlevel' => $iMembershipId, 'days' => $iDays, 'starts_now' => $bStartsNow, 'txn_id' => $sTransactionId)); $oZ->alert(); //Notify user about changed membership level bx_import('BxDolEmailTemplates'); $oEmailTemplate = new BxDolEmailTemplates(); $aTemplate = $oEmailTemplate->getTemplate('t_MemChanged', $iMemberId); $aMembershipInfo = getMembershipInfo($iMembershipId); $aTemplateVars = array('MembershipLevel' => $aMembershipInfo['Name']); if ($isSendMail) { sendMail($aProfileInfo['Email'], $aTemplate['Subject'], $aTemplate['Body'], $iMemberId, $aTemplateVars); } //Notify admin about changed user's membership level $aTemplate = $oEmailTemplate->parseTemplate('t_UserMemChanged', $aTemplateVars, $iMemberId); sendMail($GLOBALS['site']['email'], $aTemplate['Subject'], $aTemplate['Body']); return true; }
/** * Set a membership for a member * * @param int $memberID - member that is going to get the membership * @param int $membershipID - membership that is going to be assigned to the member * if $membershipID == MEMBERSHIP_ID_STANDARD then $days * and $startsNow parameters are not used, so Standard * membership is always set immediately and `forever` * * @param int $days - number of days to set membership for * if 0, then the membership is set forever * * @param boolean $startsNow - if true, the membership will start immediately; * if false, the membership will start after the current * membership expires * * @return boolean - true in case of success, false in case of failure * * */ function setMembership($memberID, $membershipID, $days = 0, $startsNow = false, $transactionID = '') { $memberID = (int) $memberID; $membershipID = (int) $membershipID; $days = (int) $days; $startsNow = $startsNow ? true : false; $SECONDS_IN_DAY = 86400; if (!$memberID) { $memberID = -1; } if (empty($transactionID)) { $transactionID = 'NULL'; } //check if member exists $aProfileInfo = getProfileInfo($memberID); if (!$aProfileInfo) { return false; } //check if membership exists $res = db_res("SELECT COUNT(ID) FROM `sys_acl_levels` WHERE ID = {$membershipID}"); $res = mysql_fetch_row($res); if ($res[0] != 1) { return false; } if ($membershipID == MEMBERSHIP_ID_NON_MEMBER) { return false; } $currentMembership = getMemberMembershipInfo($memberID); $latestMembership = getMemberMembershipInfo_latest($memberID); if ($membershipID == MEMBERSHIP_ID_STANDARD) { //return if already Standard if ($currentMembership['ID'] == MEMBERSHIP_ID_STANDARD) { return true; } //delete any present and future memberships db_res("\r\n\t\t\tDELETE\tFROM `sys_acl_levels_members`\r\n\t\t\tWHERE\tIDMember = {$memberID}\r\n\t\t\t\t\tAND\t(DateExpires IS NULL OR DateExpires > NOW())"); if (db_affected_rows() > 0) { return true; } else { return false; } } if ($days < 0) { return false; } $dateStarts = time(); if (!$startsNow) { //make the membership start after the current membership expires if (!is_null($latestMembership['DateExpires'])) { $dateStarts = $latestMembership['DateExpires']; // if membership already exists then it's unlimited - just shift or delete it $res = db_res("\r\n\t\t\t\tSELECT\tIDMember\r\n\t\t\t\tFROM\t`sys_acl_levels_members`\r\n\t\t\t\tWHERE\tIDMember = {$memberID}\r\n\t\t\t\t\t\tAND UNIX_TIMESTAMP(DateStarts) = {$dateStarts}\r\n\t\t\t\t\t\tAND IDLevel = {$membershipID}"); $res = mysql_fetch_row($res); if ($res[0]) { if ($days == 0) { db_res("DELETE\tFROM `sys_acl_levels_members`\r\n\t\t\t\t\t\t\tWHERE\tIDMember = {$memberID}\r\n\t\t\t\t\t\t\t\t\tAND UNIX_TIMESTAMP(DateStarts) = {$dateStarts}\r\n\t\t\t\t\t\t\t\t\tAND IDLevel = {$membershipID}"); } else { db_res("UPDATE\t`sys_acl_levels_members`\r\n\t\t\t\t\t\t\tSET\t\tDateStarts = FROM_UNIXTIME(" . ((int) $dateStarts + $days * $SECONDS_IN_DAY) . ")\r\n\t\t\t\t\t\t\tWHERE\tIDMember = {$memberID}\r\n\t\t\t\t\t\t\t\t\tAND UNIX_TIMESTAMP(DateStarts) = {$dateStarts}\r\n\t\t\t\t\t\t\t\t\tAND IDLevel = {$membershipID}"); } } } } else { //delete previous profile's membership level db_res("DELETE FROM `sys_acl_levels_members` WHERE `IDMember` = {$memberID}"); } if ($days == 0) { //if days==0 then set the membership forever $dateExpires = 'NULL'; } else { $dateExpires = (int) $dateStarts + $days * $SECONDS_IN_DAY; } //insert corresponding record into sys_acl_levels_members db_res("\r\n\t\tINSERT `sys_acl_levels_members` (IDMember, IDLevel, DateStarts, DateExpires, TransactionID)\r\n\t\tVALUES ({$memberID}, {$membershipID}, FROM_UNIXTIME({$dateStarts}), FROM_UNIXTIME({$dateExpires}), '{$transactionID}')"); if (db_affected_rows() <= 0) { return false; } //Set Membership Alert bx_import('BxDolAlerts'); $oZ = new BxDolAlerts('profile', 'set_membership', '', $memberID, array('mlevel' => $membershipID, 'days' => $days, 'starts_now' => $startsNow, 'txn_id' => $transactionID)); $oZ->alert(); return true; }