/**
  * Check whethere viewer is a member of dynamic group.
  *
  * @param  mixed   $mixedGroupId   dynamic group ID.
  * @param  integer $iObjectOwnerId object owner ID.
  * @param  integer $iViewerId      viewer ID.
  * @return boolean result of operation.
  */
 function isDynamicGroupMember($mixedGroupId, $iObjectOwnerId, $iViewerId, $iObjectId)
 {
     if (preg_match('/^m(\\d+)$/', $mixedGroupId, $m)) {
         $iMembershipId = $m[1];
         require_once BX_DIRECTORY_PATH_INC . 'membership_levels.inc.php';
         $aMembershipInfo = getMemberMembershipInfo($iViewerId);
         return $iMembershipId == $aMembershipInfo['ID'] && (!$aMembershipInfo['DateStarts'] || $aMembershipInfo['DateStarts'] < time()) && (!$aMembershipInfo['DateExpires'] || $aMembershipInfo['DateExpires'] > time()) ? true : false;
     }
     return false;
 }
/**
 * Determines if ticket available to specified member for specified event
 *
 * @param int $memberID					- member ID
 * @param int $eventID					- event ID
 *
 * @return float/bool 					- ticket price if ticket available, false otherwise
 *
 *
 */
function isTicketAvailable($memberID, $eventID)
{
    global $date_format;
    // argument validation
    $memberID = (int) $memberID;
    $eventID = (int) $eventID;
    $memberArr = getProfileInfo($memberID);
    $memberSex = $memberArr['Sex'];
    $membershipArr = getMemberMembershipInfo($memberID);
    $eventArr = db_arr("SELECT `ID`, `Title`, `Place`, `EventStart`, `TicketPriceFemale`, `TicketPriceMale`, `TicketCountFemale`, `TicketCountMale` FROM `SDatingEvents`\n\t\t\t\t\tWHERE `ID` = {$eventID}\n\t\t\t\t\tAND `Status` = 'Active'\n\t\t\t\t\tAND NOW() > `TicketSaleStart` AND NOW() < `TicketSaleEnd`\n\t\t\t\t\tAND FIND_IN_SET('{$memberSex}', `EventSexFilter`)\n\t\t\t\t\tAND ( TO_DAYS('{$memberArr['DateOfBirth']}')\n\t\t\t\t\t\tBETWEEN TO_DAYS(DATE_SUB(NOW(), INTERVAL `EventAgeUpperFilter` YEAR))\n\t\t\t\t\t\tAND TO_DAYS(DATE_SUB(NOW(), INTERVAL `EventAgeLowerFilter` YEAR)) )\n\t\t\t\t\tAND ( INSTR(`EventMembershipFilter`, '\\'all\\'') OR INSTR(`EventMembershipFilter`, '\\'{$membershipArr['ID']}\\'') )");
    $partNumArr = db_arr("SELECT COUNT(*) FROM `SDatingParticipants`\n\t\t\t\t\t\t\t\tLEFT JOIN `Profiles` ON `SDatingParticipants`.`IDMember` = `Profiles`.`ID`\n\t\t\t\t\t\t\t\tWHERE `SDatingParticipants`.`IDEvent` = {$eventID}\n\t\t\t\t\t\t\t\tAND `Profiles`.`Sex` = '{$memberSex}'");
    $ticketsLeft = $memberArr['Sex'] == 'male' ? $eventArr['TicketCountMale'] - $partNumArr[0] : $eventArr['TicketCountFemale'] - $partNumArr[0];
    $ticketPrice = (double) ($memberArr['Sex'] == 'male' ? $eventArr['TicketPriceMale'] : $eventArr['TicketPriceFemale']);
    $ticketPrice = sprintf("%.2f", $ticketPrice);
    if ($eventArr['ID'] && $ticketsLeft > 0) {
        $res = $ticketPrice;
    } else {
        $res = false;
    }
    return $res;
}
/**
 * contr panel "member info"
 */
function contr_panel_member_info_g4()
{
    global $site;
    global $p_arr;
    global $en_sdating;
    $free_mode = getParam("free_mode") == "on" ? 1 : 0;
    // new messages attention
    $new_mess_arr = db_arr("SELECT ID FROM `Messages` WHERE Recipient = {$p_arr['ID']} AND New = '1' ORDER BY Date DESC LIMIT 1");
    if ($new_mess_arr) {
        $mess = $new_mess_arr[ID];
    }
    // new kisses attention
    $new_kiss_arr = db_arr("SELECT ID FROM `VKisses` WHERE Member = {$p_arr['ID']} AND New = '1' LIMIT 1");
    if ($new_kiss_arr) {
        $vkiss = 1;
    }
    // new friends attention
    $new_friend_arr = db_arr("SELECT `ID` FROM `FriendList` WHERE `Profile` = {$p_arr['ID']} AND  `Check` = '0' LIMIT 1");
    if ($new_friend_arr) {
        $frd = 1;
    }
    ob_start();
    ?>
    <table width="100%" cellspacing="0" cellpadding="3" border="0" class="cp_table">

<!-- Profile status -->
    <tr>
	<td valign="middle" class="cp_td" align="left"><img src="<?php 
    echo $site['images'];
    ?>
cp_status.gif"></td>
    <td valign="middle" class="cp_td" align="left"><?php 
    echo _t("_Profile status");
    ?>
: </td>
    <td valign="middle" class="cp_td_r" align="left">
    	<b><font class=prof_stat_<?php 
    echo $p_arr['Status'];
    ?>
>&nbsp;<?php 
    echo _t("__{$p_arr['Status']}");
    ?>
&nbsp;</font></b>
<?php 
    switch ($p_arr['Status']) {
        case 'Unconfirmed':
            echo _t("_ATT_UNCONFIRMED");
            break;
        case 'Approval':
            echo _t("_ATT_APPROVAL");
            break;
        case 'Active':
            echo _t("_ATT_ACTIVE");
            break;
        case 'Rejected':
            echo _t("_ATT_REJECTED");
            break;
        case 'Suspended':
            echo _t("_ATT_SUSPENDED");
            break;
    }
    ?>
    </td>
    </tr>
<!-- Membership -->

<?php 
    if (!$free_mode) {
        ?>
<tr>
	<td valign="top" class="cp_td" width="22" align="left"><img src="<?php 
        echo $site['images'];
        ?>
cp_membership.gif"></td>
	<td valign="top" class="cp_td" align="left" style="padding-top:7px;"><?php 
        echo _t("_Membership2");
        ?>
:</td>
    <td valign="top" class="cp_td_r" align="left">
<?php 
        echo GetMembershipStatus($p_arr['ID']);
        ?>
	</td>
</tr>
<?php 
    }
    ?>
<!-- Last login -->
    <tr>
	<td valign="middle" class="cp_td" align="left"><img src="<?php 
    echo $site['images'];
    ?>
cp_llogin.gif"></td>
    <td valign="middle" class="cp_td" align="left"><?php 
    echo _t("_Last login");
    ?>
: </td>
    <td valign="middle" class="cp_td_r" align="left">
<?php 
    if (!$p_arr['LastLoggedIn'] || $p_arr['LastLoggedIn'] == "0000-00-00 00:00:00") {
        $p_arr['LastLoggedIn'] = _t("_never");
    }
    echo $p_arr['LastLoggedIn'];
    ?>
    </td>
    </tr>

<!-- SpeedDating info -->

<?php 
    if ($en_sdating) {
        ?>
	<tr class="table">
		<td valign="middle" class="cp_td" align="left"><img src="<?php 
        echo $site['images'];
        ?>
cp_lchanges.gif"></td>
		<td valign="middle" class="cp_td" align="left"><?php 
        echo _t('_SpeedDating tickets');
        ?>
: </td>
		<td valign="middle" class="cp_td_r" align="left">
<?php 
        $membership_arr = getMemberMembershipInfo($p_arr['ID']);
        $events_query = "SELECT `SDatingEvents`.`ID`, `Title`, (NOW() > `EventEnd` AND NOW() < DATE_ADD(`EventEnd`, INTERVAL `ChoosePeriod` DAY)) AS `ChooseActive`\r\n\t\t\t\t\tFROM `SDatingEvents`\r\n\t\t\t\t\tLEFT JOIN `SDatingParticipants` ON `SDatingParticipants`.`IDEvent` = `SDatingEvents`.`ID` AND `SDatingParticipants`.`IDMember` = {$p_arr['ID']}\r\n\t\t\t\t\tWHERE `SDatingEvents`.`Status` = 'Active'\r\n\t\t\t\t\tAND `SDatingParticipants`.`ID` IS NOT NULL\r\n\t\t\t\t\tAND NOW() < DATE_ADD(`SDatingEvents`.`EventEnd`, INTERVAL `SDatingEvents`.`ChoosePeriod` DAY)\r\n\t\t\t\t\tAND FIND_IN_SET('{$p_arr['Sex']}', `SDatingEvents`.`EventSexFilter`)\r\n\t\t\t\t\tAND ( TO_DAYS('{$p_arr['DateOfBirth']}')\r\n\t\t\t\t\t\tBETWEEN TO_DAYS(DATE_SUB(NOW(), INTERVAL `SDatingEvents`.`EventAgeUpperFilter` YEAR))\r\n\t\t\t\t\t\tAND TO_DAYS(DATE_SUB(NOW(), INTERVAL `SDatingEvents`.`EventAgeLowerFilter` YEAR)) )\r\n\t\t\t\t\tAND ( INSTR(`SDatingEvents`.`EventMembershipFilter`, '\\'all\\'') OR INSTR(`SDatingEvents`.`EventMembershipFilter`, '\\'{$membership_arr['ID']}\\'') )\r\n\t\t\t\t\tORDER BY `SDatingEvents`.`EventStart` DESC";
        $events_res = db_res($events_query);
        if (mysql_num_rows($events_res) == 0) {
            echo _t('_none');
        } else {
            $events_links = '';
            while ($event_arr = mysql_fetch_assoc($events_res)) {
                $events_links .= strlen($events_links) ? ', ' : '';
                $events_links .= "<a href=\"{$site['url']}events.php?action=show_info&amp;event_id={$event_arr['ID']}\">" . process_line_output($event_arr['Title']) . "</a>";
            }
            echo $events_links;
        }
        ?>
		</td>
	</tr>
<?php 
    }
    ?>
    <tr>
	<td valign="middle" class="cp_td" align="left"><img src="<?php 
    echo $site['images'];
    ?>
cp_messages.gif"></td>
    <td valign="middle" class="cp_td" align="left"><?php 
    echo _t("_Messages");
    ?>
:</td>
    <td valign="middle" class="cp_td_r" align="left"><?php 
    if ($mess) {
        echo _t("_ATT_MESSAGE", $mess, $site['url']);
    } else {
        echo _t("_ATT_MESSAGE_NONE", $site['url']);
    }
    ?>
    </td>
    </tr>
    <tr>
	<td valign="middle" class="cp_td" align="left"><img src="<?php 
    echo $site['images'];
    ?>
cp_kisses.gif"></td>
    <td valign="middle" class="cp_td" align="left"><?php 
    echo _t("_Kisses");
    ?>
:</td>
    <td valign="middle" class="cp_td_r" align="left"><?php 
    if ($vkiss) {
        echo _t("_ATT_VKISS", $site['url']);
    } else {
        echo _t("_ATT_VKISS_NONE", $site['url']);
    }
    ?>
    </td>
    </tr>
    <tr>
	<td valign="middle" class="cp_td" align="left"><img src="<?php 
    echo $site['images'];
    ?>
cp_friends.gif"></td>
    <td valign="middle" class="cp_td" align="left"><?php 
    echo _t("_Friends");
    ?>
:</td>
    <td valign="middle" class="cp_td_r" align="left"><?php 
    if ($frd) {
        echo _t("_ATT_FRIEND", $site['url']);
    } else {
        echo _t("_ATT_FRIEND_NONE", $site['url']);
    }
    ?>
    </td>
    </tr>
	</table>

<?php 
    $ret = ob_get_contents();
    ob_end_clean();
    return $ret;
}
/**
 * Print code for membership status
 * $memberID - member ID
 * $offer_upgrade - will this code be printed at [c]ontrol [p]anel
 * $credits - will print credits status if $credits == 1
 */
function GetMembershipStatus($memberID, $offer_upgrade = true, $credits = 0)
{
    global $oTemplConfig;
    $ret = "";
    $membership_info = getMemberMembershipInfo($memberID);
    $viewMembershipActions = "<br />(<a onclick=\"javascript:window.open('explanation.php?explain=membership&amp;type=" . $membership_info['ID'] . "', '', 'width=500, height=400, menubar=no, status=no, resizable=no, scrollbars=yes, toolbar=no, location=no');\" href=\"javascript:void(0);\">" . _t("_VIEW_MEMBERSHIP_ACTIONS") . "</a>)<br />";
    // Show colored membership name
    if ($membership_info['ID'] == MEMBERSHIP_ID_STANDARD) {
        $ret .= _t("_MEMBERSHIP_STANDARD") . $viewMembershipActions;
        if ($offer_upgrade) {
            $ret .= " " . _t("_MEMBERSHIP_UPGRADE_FROM_STANDARD");
        }
    } else {
        $ret .= "<font color=\"red\">{$membership_info['Name']}</font>{$viewMembershipActions}";
        $days_left = (int) (($membership_info['DateExpires'] - time()) / (24 * 3600));
        if (!is_null($membership_info['DateExpires'])) {
            if ($days_left > 0) {
                $ret .= _t("_MEMBERSHIP_EXPIRES_IN_DAYS", $days_left);
            } else {
                $ret .= _t("_MEMBERSHIP_EXPIRES_TODAY", date("H:i", $membership_info['DateExpires']), date("H:i"));
            }
        } else {
            $ret .= _t("_MEMBERSHIP_EXPIRES_NEVER");
        }
        if ($offer_upgrade && !is_null($membership_info['DateExpires'])) {
            $ret .= " - <a href=\"membership.php\">" . _t("_MEMBERSHIP_BUY_MORE_DAYS") . "</a>";
        }
    }
    if ($credits) {
        $gold_arr_cred_amount = getProfileCredits($memberID);
        $ret .= "<br /><u>" . _t("_MEMBERSHIP_CREDITS") . "</u> (<a href=\"javascript: void(0);\" onClick=\"javascript: window.open('explanation.php?explain=credits', '', 'width={$oTemplConfig->popUpWindowWidth},height={$oTemplConfig->popUpWindowHeight},menubar=no,status=no,resizable=no,scrollbars=yes,toolbar=no, location=no' );\">" . _t("_Explanation") . "</a>)<br />";
        if ($gold_arr_cred_amount) {
            $ret .= _t("_MEMBERSHIP_CREDITS_YES", $gold_arr_cred_amount) . "<br />";
        } else {
            $ret .= _t("_MEMBERSHIP_CREDITS_NO") . "<br />";
        }
        if ($offer_upgrade) {
            $ret .= " - <a href=\"membership.php\">" . _t("_MEMBERSHIP_CREDITS_BUY_MORE") . "</a>";
        }
    }
    return $ret;
}
        $last_timestamp = time() - 24 * 3600;
        $last_membership_arr = getMemberMembershipInfo($row['ID'], $last_timestamp);
        if ($current_membership_arr['ID'] != $last_membership_arr['ID']) {
            modules_update($row['ID']);
            // Handle membership level change
            if ($further_membership_arr['ID'] == MEMBERSHIP_ID_STANDARD) {
                $mail_ret = mem_expiration_letter($row['ID'], $last_membership_arr['Name'], -1);
                if ($mail_ret) {
                    $expire_letters++;
                }
            }
        }
    } elseif ($current_membership_arr['ID'] != MEMBERSHIP_ID_STANDARD) {
        // Calculate further UNIX Timestamp
        $further_timestamp = time() + $expire_notification_days * 24 * 3600;
        $further_membership_arr = getMemberMembershipInfo($row['ID'], $further_timestamp);
        if ($current_membership_arr['ID'] != $further_membership_arr['ID'] && $further_membership_arr['ID'] == MEMBERSHIP_ID_STANDARD) {
            if (!$expire_notify_once || abs($further_timestamp - time()) < 24 * 3600) {
                $mail_ret = mem_expiration_letter($row['ID'], $current_membership_arr['Name'], (int) (($current_membership_arr['DateExpires'] - time()) / (24 * 3600)));
                if ($mail_ret) {
                    $expire_letters++;
                }
            }
        }
    }
}
echo "Send membership expire letters: {$expire_letters} letters\n";
//========================================================================================================================
// clear tmp folder --------------------------------------------------------------------------
del_old_all_files();
// ----------------------------------------------------------------------------------
/**
 * 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;
}
function QueueMessage()
{
    $msg_id = (int) $_POST['msgs_id'];
    $ret = "";
    $query = "SELECT `ID` FROM `NotifyMsgs` WHERE `ID` = {$msg_id}";
    $arr_arr = db_arr($query);
    if (!$arr_arr) {
        return "Failed to queue emails (ID: {$msg_id}).";
    }
    // Initially no emails queued
    $emails = 0;
    // Send to all emails in NotifyEmails table
    if ($_POST['send_to_subscribers'] == 'on') {
        $res_eml = db_res("SELECT `ID` FROM `NotifyEmails`");
        while ($arr_eml = mysql_fetch_array($res_eml)) {
            $res = db_res("SELECT `NotifyEmails`.`Email` FROM `NotifyQueue` INNER JOIN `NotifyEmails` ON (`NotifyQueue`.`Email` = `NotifyEmails`.`ID`) WHERE `NotifyQueue`.`Email` = {$arr_eml['ID']} AND `NotifyQueue`.`Msg` = {$msg_id} AND `From` = 'NotifyEmails'");
            if ($res && ($arr = mysql_fetch_array($res))) {
                $ret .= "Email(notify) <b><u>{$arr['Email']}</u></b> already exists in queue.<br>";
                continue;
            }
            $res = db_res("INSERT INTO `NotifyQueue` SET `Email` = {$arr_eml['ID']}, `Msg` = {$msg_id}, `From` = 'NotifyEmails', `Creation` = NOW()");
            if (!$res) {
                $ret .= "Email <b><u>{$arr['Email']}</u></b> was not added to queue.<br>";
                continue;
            }
            $emails++;
        }
    }
    // Send to all profiles
    if ($_POST['send_to_members'] == 'on') {
        // Sex filter
        $apply_filter = false;
        $arrpd = db_arr("SELECT `extra` FROM `ProfilesDesc` WHERE `name` = 'Sex'");
        $vals = preg_split("/[,\\']+/", $arrpd['extra'], -1, PREG_SPLIT_NO_EMPTY);
        foreach ($vals as $v) {
            if (!isset($_POST["sex_{$v}"]) || $_POST["sex_{$v}"] != 'on') {
                $apply_filter = true;
                break;
            }
        }
        if ($apply_filter) {
            $sex_string_buffer = "'-1'";
            foreach ($vals as $v) {
                if (isset($_POST["sex_{$v}"]) && $_POST["sex_{$v}"] == 'on') {
                    $sex_string_buffer .= ",'{$v}'";
                }
            }
        } else {
            $sex_filter_sql = '';
        }
        // Age filter
        $age_start = (int) $_POST['age_start'];
        $age_end = (int) $_POST['age_end'];
        if ($age_start && $age_end) {
            $date_start = (int) (date("Y") - $age_start);
            $date_end = (int) (date("Y") - $age_end - 1);
            $date_start = $date_start . date("-m-d");
            $date_end = $date_end . date("-m-d");
            $age_filter_sql = "AND (TO_DAYS(`DateOfBirth`) BETWEEN TO_DAYS('{$date_end}') AND (TO_DAYS('{$date_start}')+1))";
        } else {
            $age_filter_sql = '';
        }
        // Country filter
        if ($_POST['country'] != 'all') {
            $country = process_db_input($_POST['country']);
            $country_filter_sql = "AND `Country` = '{$country}'";
        } else {
            $country_filter_sql = '';
        }
        // Membership filter
        if ($_POST['membership'] != 'all') {
            $membershipID = (int) $_POST['membership'];
        } else {
            $membershipID = -1;
        }
        $res_eml = db_res("SELECT `ID` FROM `Profiles` WHERE `Status` <> 'Unconfirmed' AND `EmailNotify` = 'NotifyMe' {$sex_filter_sql} {$age_filter_sql} {$country_filter_sql}");
        while ($arr_eml = mysql_fetch_array($res_eml)) {
            // Dynamic membership filter
            $membership_info = getMemberMembershipInfo($arr_eml['ID']);
            if ($membershipID != -1 && $membership_info['ID'] != $membershipID) {
                continue;
            }
            $res = db_res("SELECT `Profiles`.`Email` FROM `NotifyQueue` INNER JOIN `Profiles` ON (`NotifyQueue`.`Email` = `Profiles`.`ID`) WHERE `NotifyQueue`.`Email` = {$arr_eml['ID']} AND `NotifyQueue`.`Msg` = {$msg_id}  AND `From` = 'Profiles' ");
            if ($res && ($arr = mysql_fetch_array($res))) {
                $ret .= "Email(profiles) <b><u>{$arr['Email']}</u></b> already exists in queue.<br>";
                continue;
            }
            $res = db_res("INSERT INTO `NotifyQueue` SET `Email` = {$arr_eml['ID']}, `Msg` = {$msg_id}, `From` = 'Profiles', `Creation` = NOW()");
            if (!$res) {
                $ret .= "Email <b><u>{$arr['Email']}</u></b> was not added to queue.<br>";
                continue;
            }
            $emails++;
        }
    }
    $ret .= (int) $emails . " emails was successfully added to queue.";
    return $ret;
}
Exemple #8
0
function QueueMessage()
{
    global $MySQL;
    $iEmails = 0;
    $sReturn = "";
    $iMsgId = (int) $_POST['msgs_id'];
    $aOriginalMessage = $MySQL->getRow("SELECT `id`, `subject`, `body` FROM `sys_sbs_messages` WHERE `id`='" . $iMsgId . "' LIMIT 1");
    if (!is_array($aOriginalMessage) || empty($aOriginalMessage)) {
        return _t('_adm_mmail_Failed_to_queue_emails_X', $iMsgId);
    }
    //--- Send to all subscribers
    $oEmailTemplates = new BxDolEmailTemplates();
    if ($_POST['send_to_subscribers'] == 'non') {
        $sSql = "SELECT\n                    `tsu`.`name` AS `user_name`,\n                    `tsu`.`email` AS `user_email`,\n                    `tst`.`template` AS `template_name`\n                FROM `sys_sbs_types` AS `tst`\n                INNER JOIN `sys_sbs_entries` AS `tse` ON `tst`.`id`=`tse`.`subscription_id` AND `tse`.`subscriber_type`='" . BX_DOL_SBS_TYPE_VISITOR . "'\n                INNER JOIN `sys_sbs_users` AS `tsu` ON `tse`.`subscriber_id`=`tsu`.`id`\n                WHERE\n                    `tst`.`unit`='system' AND\n                    `tst`.`action`='mass_mailer'";
        $aSubscribers = $MySQL->getAll($sSql);
        foreach ($aSubscribers as $aSubscriber) {
            if (empty($aSubscriber['user_email'])) {
                continue;
            }
            $aMessage = $oEmailTemplates->parseTemplate($aSubscriber['template_name'], array('RealName' => $aSubscriber['user_name'], 'Email' => $aSubscriber['user_email'], 'MessageSubject' => $aOriginalMessage['subject'], 'MessageText' => $aOriginalMessage['body']));
            $mixedResult = $MySQL->query("INSERT INTO `sys_sbs_queue`(`email`, `subject`, `body`) VALUES('" . $aSubscriber['user_email'] . "', '" . process_db_input($aMessage['subject'], BX_TAGS_STRIP) . "', '" . process_db_input($aMessage['body'], BX_TAGS_VALIDATE) . "')");
            if ($mixedResult === false) {
                $sReturn .= _t('_adm_mmail_Email_not_added_to_queue_X', $aSubscriber['user_email']);
                continue;
            }
            $iEmails++;
        }
    }
    //--- Send to all profiles
    if ($_POST['send_to_members'] == 'memb') {
        //--- Sex filter
        $sex_filter_sql = '';
        if (is_array($_POST['sex']) && !empty($_POST['sex'])) {
            $sex_filter_sql = "AND `Sex` IN ('" . implode("','", $_POST['sex']) . "')";
        }
        //--- Age filter
        $age_filter_sql = '';
        $age = $_POST['age'];
        if ($age != 'all') {
            $age_start = (int) $_POST['age_start'];
            $age_end = (int) $_POST['age_end'];
            if ($age_start && $age_end) {
                $date_start = (int) (date("Y") - $age_start);
                $date_end = (int) (date("Y") - $age_end - 1);
                $date_start = $date_start . date("-m-d");
                $date_end = $date_end . date("-m-d");
                $age_filter_sql = "AND (TO_DAYS(`DateOfBirth`) BETWEEN TO_DAYS('{$date_end}') AND (TO_DAYS('{$date_start}')+1))";
            }
        }
        //--- Country filter
        $country_filter_sql = '';
        if ($_POST['country'] != 'all') {
            $country = process_db_input($_POST['country']);
            $country_filter_sql = "AND `Country` = '{$country}'";
        }
        //--- Membership filter
        $membershipID = $_POST['membership'] != 'all' ? (int) $_POST['membership'] : -1;
        $aMembers = $MySQL->getAll("SELECT `ID` AS `id`, `Email` AS `email` FROM `Profiles` WHERE `Status` <> 'Unconfirmed' AND `EmailNotify` = 1 AND (`Couple` = '0' OR `Couple` > `ID`) {$sex_filter_sql} {$age_filter_sql} {$country_filter_sql}");
        foreach ($aMembers as $aMember) {
            if (empty($aMember['email'])) {
                continue;
            }
            //--- Dynamic membership filter
            if ($membershipID != -1) {
                $membership_info = getMemberMembershipInfo($aMember['id']);
                if ($membership_info['ID'] != $membershipID) {
                    continue;
                }
            }
            $aMessage = $oEmailTemplates->parseTemplate('t_AdminEmail', array('MessageSubject' => $aOriginalMessage['subject'], 'MessageText' => $aOriginalMessage['body']), $aMember['id']);
            $mixedResult = $MySQL->query("INSERT INTO `sys_sbs_queue`(`email`, `subject`, `body`) VALUES('" . $aMember['email'] . "', '" . process_db_input($aMessage['subject'], BX_TAGS_STRIP) . "', '" . process_db_input($aMessage['body'], BX_TAGS_VALIDATE) . "')");
            if ($mixedResult === false) {
                $sReturn .= _t('_adm_mmail_Email_not_added_to_queue_X', $aMember['email']);
                continue;
            }
            $iEmails++;
        }
    }
    $sReturn .= _t('_adm_mmail_X_emails_was_succ_added_to_queue', (int) $iEmails);
    return $sReturn;
}
Exemple #9
0
/**
 * Print code for membership status
 * $memberID - member ID
 * $offer_upgrade - will this code be printed at [c]ontrol [p]anel
 */
function GetMembershipStatus($memberID, $offer_upgrade = true)
{
    $ret = '';
    $membership_info = getMemberMembershipInfo($memberID);
    $viewMembershipActions = "<br />(<a onclick=\"javascript:window.open('explanation.php?explain=membership&amp;type=" . $membership_info['ID'] . "', '', 'width=660, height=500, menubar=no, status=no, resizable=no, scrollbars=yes, toolbar=no, location=no');\" href=\"javascript:void(0);\">" . _t("_VIEW_MEMBERSHIP_ACTIONS") . "</a>)<br />";
    // Show colored membership name
    if ($membership_info['ID'] == MEMBERSHIP_ID_STANDARD) {
        $ret .= _t("_MEMBERSHIP_STANDARD") . $viewMembershipActions;
        if ($offer_upgrade) {
            $ret .= " " . _t("_MEMBERSHIP_UPGRADE_FROM_STANDARD");
        }
    } else {
        $ret .= "<font color=\"red\">{$membership_info['Name']}</font>{$viewMembershipActions}";
        $days_left = (int) (($membership_info['DateExpires'] - time()) / (24 * 3600));
        if (!is_null($membership_info['DateExpires'])) {
            $ret .= $days_left > 0 ? _t("_MEMBERSHIP_EXPIRES_IN_DAYS", $days_left) : _t("_MEMBERSHIP_EXPIRES_TODAY", date("H:i", $membership_info['DateExpires']), date("H:i"));
        } else {
            $ret .= _t("_MEMBERSHIP_EXPIRES_NEVER");
        }
    }
    return $ret;
}
/**
 * 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;
}
 function serviceIsUrlAccessable($sURL, $iUserId = 0)
 {
     if ($iUserId && isRole(BX_DOL_ROLE_ADMIN, $iUserId) || strpos($sURL, '/' . $GLOBALS['admin_dir']) === 0) {
         return true;
     }
     //admin isn't affected by this module also access to admin panel shouldn't ever be protected
     $aMemLevel = getMemberMembershipInfo($iUserId);
     $iMemLevel = $aMemLevel['ID'];
     if ($iMemLevel) {
         $aRules = $this->_oDb->getAllRules();
         foreach ($aRules as $aRule) {
             if ($aRule['MemLevels'][$iMemLevel] && @preg_match('#' . $aRule['Rule'] . '#i', $sURL)) {
                 return false;
             }
         }
     }
     return true;
 }
 function convertEditField2Input($aItem, $aParams, $iPerson)
 {
     $bCouple = $aParams['couple'];
     $aValues = $aParams['values'];
     $aErrors = $aParams['errors'];
     $iPageId = $aParams['page_id'];
     if (!$iPageId) {
         return;
     }
     $aCustomMediaTemplates = $this->generateCustomMediaTemplates($this->_iProfileId, $iPageId, db_value("SELECT `thumb` FROM `ml_clonetwo_main` WHERE `id` = {$iPageId} LIMIT 1"), $aItem['Name']);
     $aCustomYouTubeTemplates = $this->generateCustomYouTubeTemplates($this->_iProfileId, $iPageId, $aItem['Name']);
     $aCustomRssTemplates = $this->generateCustomRssTemplate($this->_iProfileId, $iPageId, $aItem['Name']);
     $aInput = array();
     switch ($aItem['Type']) {
         case 'text':
             $aInput['type'] = 'text';
             $aInput['value'] = $aValues[$iPerson];
             if ($aItem['MediaType'] != 'none') {
                 $aInput['type'] = 'custom';
                 switch ($aItem['MediaType']) {
                     case 'photo':
                         $aInput['content'] = ($aCustomMediaTemplates['photos']['thumb_choice'] ? $aCustomMediaTemplates['photos']['thumb_choice'] . '<br>' . $aCustomMediaTemplates['photos']['choice'] . '<br>' : '') . $aCustomMediaTemplates['photos']['upload'];
                         break;
                     case 'video':
                         $aInput['content'] = ($aCustomMediaTemplates['videos']['choice'] ? $aCustomMediaTemplates['videos']['choice'] . '<br>' : '') . $aCustomMediaTemplates['videos']['upload'];
                         break;
                     case 'sound':
                         $aInput['content'] = ($aCustomMediaTemplates['sounds']['choice'] ? $aCustomMediaTemplates['sounds']['choice'] . '<br>' : '') . $aCustomMediaTemplates['sounds']['upload'];
                         break;
                     case 'file':
                         $aInput['content'] = ($aCustomMediaTemplates['files']['choice'] ? $aCustomMediaTemplates['files']['choice'] . '<br>' : '') . $aCustomMediaTemplates['files']['upload'];
                         break;
                     case 'rss':
                         $aInput['content'] = ($aCustomRssTemplates['choice'] ? $aCustomRssTemplates['choice'] . '<br>' : '') . $aCustomRssTemplates['upload'];
                         break;
                     case 'youtube':
                         $aInput['content'] = ($aCustomYouTubeTemplates['choice'] ? $aCustomYouTubeTemplates['choice'] . '<br>' : '') . $aCustomYouTubeTemplates['upload'];
                         break;
                     case 'editorlog':
                         $aInput['type'] = 'hidden';
                         $aInput['value'] = getLoggedId();
                         break;
                     case 'datelog':
                         $aInput['type'] = 'hidden';
                         $aInput['value'] = time();
                         break;
                 }
             }
             if ($aItem['Name'] == 'title') {
                 $aInput['attrs']['readonly'] = 'true';
             }
             break;
             //case 'text':  $aInput['type'] = 'text';     $aInput['value'] = $aValues[$iPerson]; break;
         //case 'text':  $aInput['type'] = 'text';     $aInput['value'] = $aValues[$iPerson]; break;
         case 'area':
             $aInput['type'] = 'textarea';
             $aInput['value'] = $aValues[$iPerson];
             $aInput['attrs']['counter'] = 'true';
             break;
         case 'html_area':
             $aInput['type'] = 'textarea';
             $aInput['html'] = 2;
             $aInput['value'] = $aValues[$iPerson];
             $aInput['attrs']['counter'] = 'true';
             break;
         case 'date':
             $aInput['type'] = $aItem['WithTime'] ? 'datetime' : 'date';
             $aInput['infodisplay'] = 'filterDate';
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'datetime':
             $aInput['type'] = 'datetime';
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'num':
             $aInput['type'] = 'number';
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'range':
             $aInput['type'] = 'doublerange';
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'pass':
             $aInput['type'] = 'password';
             break;
         case 'bool':
             $aInput['type'] = 'checkbox';
             $aInput['value'] = 'yes';
             $aInput['checked'] = (bool) (int) $aValues[$iPerson];
             break;
         case 'select_one':
             switch ($aItem['Control']) {
                 case 'select':
                     $aInput['type'] = 'select';
                     break;
                 case 'radio':
                     $aInput['type'] = 'radio_set';
                     break;
                 default:
                     return false;
             }
             $aInput['value'] = $aValues[$iPerson] ? $aValues[$iPerson] : $aItem['Default'];
             $aNewValues = $this->convertValues4Input($aItem['Values'], $aItem['UseLKey'], $aItem['Name'], $aItem, $aItem['Default'] ? $aItem['Default'] : $aValues[$iPerson]);
             $aInput['attrs'] = $aValues['attrs'] ? $aValues['attrs'] : '';
             $aInput['values'] = $aNewValues['values'] ? $aNewValues['values'] : $aNewValues;
             break;
         case 'select_set':
             switch ($aItem['Control']) {
                 case 'select':
                     $aInput['type'] = 'select_multiple';
                     break;
                 case 'checkbox':
                     $aInput['type'] = 'checkbox_set';
                     break;
                 default:
                     return false;
             }
             $aInput['values'] = $this->convertValues4Input($aItem['Values'], $aItem['UseLKey'], $aItem['Name'], $aItem, $aInput['value']);
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'photo':
             $aInput['type'] = 'file';
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'system':
             switch ($aItem['Name']) {
                 case 'Featured':
                     $aInput = array('type' => 'checkbox', 'value' => 'yes', 'checked' => $aValues[0]);
                     break;
                 case 'Status':
                     $aInput = array('type' => 'select', 'value' => $aValues[0], 'values' => array());
                     foreach ($aItem['Values'] as $sValue) {
                         $aInput['values'][$sValue] = _t("_FieldValues_{$sValue}");
                     }
                     break;
                 case 'Membership':
                     $aMemberships = getMemberships();
                     $aMembershipInfo = getMemberMembershipInfo($iProfileID);
                     $aInput = array('type' => 'custom', 'content' => $this->getInputMembership($aMemberships, $aMembershipInfo));
                     break;
                 case 'ID':
                 case 'Date':
                 case 'DateLastEdit':
                 case 'DateLastLogin':
                     //non editable
                     return false;
                     break;
                 default:
                     return false;
             }
             break;
         default:
             return false;
     }
     $aInput['name'] = $aItem['Type'] == 'system' ? $aItem['Name'] : $aItem['Name'] . "[{$iPerson}]";
     $aInput['caption'] = _t($aItem['Caption']);
     $aInput['required'] = $aItem['Type'] == 'pass' ? false : $aItem['Mandatory'];
     $aInput['info'] = ($sInfo = _t($aItem['Desc'], $aItem['Min'], $aItem['Max'])) != $aItem['Desc'] ? $sInfo : null;
     if ($aItem['Type'] == 'date') {
         $aInput['attrs']['min'] = $aItem['Max'] ? date('Y') - $aItem['Max'] . '-' . date('m') . '-' . date('d') : date('Y') - 100 . '-' . date('m') . '-' . date('d');
         $aInput['attrs']['max'] = $aItem['Min'] ? date('Y') - $aItem['Min'] . '-' . date('m') . '-' . date('d') : date('Y') + 100 . '-' . date('m') . '-' . date('d');
     } else {
         $aInput['attrs']['min'] = $aItem['Min'];
         $aInput['attrs']['max'] = $aItem['Max'];
     }
     $aInput['error'] = $aErrors[$iPerson];
     if ($aItem['WithPhoto'] || $aItem['MediaType'] == 'map') {
         $aVarsUpload = array('display_form' => 'visible', 'input_name' => $aItem['Name'], 'form_submit' => _t('_ml_fields_builder_form_save'), 'draggable' => 'true', 'form_find' => _t('_ml_fields_builder_form_find'), 'Closest_matching_address' => _t('_ml_fields_builder_matching_address'), 'Current_position' => _t('_ml_fields_builder_position'), 'default_address' => $aInput['value'] ? $aInput['value'] : 'New York');
         $aInput['type'] = 'custom';
         $aInput['content'] = $this->_oMain->_oTemplate->parseHtmlByName('location', $aVarsUpload);
     }
     if ($aItem['Multiplyable'] && $aItem['MediaType'] == 'none') {
         //$aInput['value'] = $aItem['WithPhoto'] ? array() : explode(getParam('ml_clonetwo_multi_divider'), $aInput['value']);
         $aInput['value'] = explode($this->_sDelimeter, $aInput['value']);
         $aInput['name'] = $aItem['Name'] . '[]';
         $aInput['attrs']['multiplyable'] = 'true';
     }
     if ($aItem['Attribute'] == 'addon') {
         $aInput['type'] = 'select_box';
         $aInput['name'] = $aItem['Name'];
         $aInput['value'] = explode($this->_sDelimeter, $aInput['value']);
     }
     //elseif ($aItem['WithPhoto'])
     //$aInput['value'] = '';
     if ($iPerson == 1) {
         $aInput['tr_attrs'] = array('class' => 'hidable', 'style' => 'display: ' . ($bCouple ? 'table-row' : 'none'));
     }
     return $aInput;
 }
Exemple #13
0
    function getBlockCode_Membership()
    {
        if (!isAdmin()) {
            return;
        }
        $sUnlimited = process_line_output(_t('_pfm_unlimited'));
        $this->aFormMembership = array('form_attrs' => array('id' => 'profile_edit_membership', 'name' => 'profile_edit_membership', 'action' => BX_DOL_URL_ROOT . 'pedit.php?ID=' . $this->iProfileID, 'method' => 'post', 'enctype' => 'multipart/form-data'), 'params' => array('db' => array('table' => '', 'key' => '', 'uri' => '', 'uri_title' => '', 'submit_name' => 'save_membership')), 'inputs' => array('doSetMembership' => array('type' => 'hidden', 'name' => 'doSetMembership', 'value' => 'yes'), 'MembershipInfo' => array('type' => 'custom', 'caption' => _t('_Membership_current'), 'content' => ''), 'MembershipID' => array('type' => 'select', 'name' => 'MembershipID', 'caption' => _t('_Membership_name'), 'value' => '', 'values' => array(), 'required' => 0, 'attrs' => array('onchange' => 'checkStandard()'), 'checker' => array('func' => 'avail', 'params' => array(), 'error' => _t('_Membership_name_err_empty')), 'db' => array('pass' => 'Int')), 'MembershipDays' => array('type' => 'text', 'name' => 'MembershipDays', 'caption' => _t('_Membership_days'), 'value' => $sUnlimited, 'required' => 0, 'attrs' => array('onfocus' => "if(MembershipDays.value == '" . $sUnlimited . "') MembershipDays.value = ''", 'onblur' => "if(MembershipDays.value == '') MembershipDays.value = '" . $sUnlimited . "'"), 'info' => _t('_Membership_days_info'), 'db' => array('pass' => 'Xss')), 'MembershipImmediately' => array('type' => 'checkbox', 'name' => 'MembershipImmediately', 'caption' => _t('_Membership_starts'), 'value' => 'on', 'required' => 0, 'db' => array('pass' => 'Xss')), 'save_membership' => array('type' => 'submit', 'name' => 'save_membership', 'value' => _t('_Membership_save'))));
        $aMemberships = getMemberships();
        foreach ($aMemberships as $iId => $sName) {
            if ($iId != MEMBERSHIP_ID_NON_MEMBER) {
                $this->aFormMembership['inputs']['MembershipID']['values'][] = array('key' => $iId, 'value' => $sName);
            }
        }
        $oForm = new BxTemplFormView($this->aFormMembership);
        $oForm->initChecker();
        $sContent = "";
        if ($oForm->isSubmittedAndValid()) {
            $iMshipID = (int) $oForm->getCleanValue('MembershipID');
            $iMshipDays = (int) $oForm->getCleanValue('MembershipDays');
            //0 = unlim
            $bStartsNow = $oForm->getCleanValue('MembershipImmediately') == 'on';
            $bSave = setMembership($this->iProfileID, $iMshipID, $iMshipDays, $bStartsNow);
            $sContent .= MsgBox(_t($bSave ? '_Membership_save_msg_saved' : '_Membership_save_err_saved'), 3);
        }
        /**
         * Retrieve current membership info.
         */
        $aMembershipCurrent = getMemberMembershipInfo($this->iProfileID);
        $sMembershipCurrent = $aMembershipCurrent['Name'];
        if ($aMembershipCurrent['ID'] != MEMBERSHIP_ID_STANDARD) {
            $sMembershipCurrent .= ', ' . (!isset($aMembershipCurrent['DateExpires']) ? _t('_MEMBERSHIP_EXPIRES_NEVER') : _t('_MEMBERSHIP_EXPIRES', defineTimeInterval($aMembershipCurrent['DateExpires'])));
        }
        $oForm->aInputs['MembershipInfo']['content'] = $sMembershipCurrent;
        ob_start();
        ?>
        <script type="text/javascript">
        <!--
        function checkStandard()
        {
            var iId = parseInt($("[name='MembershipID']").val());
            if(iId == <?php 
        echo MEMBERSHIP_ID_STANDARD;
        ?>
) {
                $("[name='MembershipDays']").attr('disabled', 'disabled');
                $("[name='MembershipImmediately']").attr('disabled', 'disabled');
            } else {
                $("[name='MembershipDays']").removeAttr('disabled');
                $("[name='MembershipImmediately']").removeAttr('disabled');
            }
        }
        $(document).ready(function() {
            checkStandard();
        });
        -->
        </script>
<?php 
        $sContent .= ob_get_clean();
        return array($sContent . $oForm->getCode(), array(), array(), false);
    }
    /**
     * page show filer form function
     * @return HTML presentation of data
     */
    function PageSDatingCalendar()
    {
        global $dir;
        global $site;
        global $sdatingThumbWidth;
        global $sdatingThumbHeight;
        global $aPreValues;
        global $oTemplConfig;
        $iPicSize = $this->iIconSize + 15;
        // collect information about current member
        $aMember['ID'] = (int) $_COOKIE['memberID'];
        $aMemberData = getProfileInfo($aMember['ID']);
        $sMemberSex = $aMemberData['Sex'];
        $aMembership = getMemberMembershipInfo($aMember['ID']);
        // now year, month and day
        list($iNowYear, $iNowMonth, $iNowDay) = explode('-', date('Y-m-d'));
        // current year, month, month name, day, days in month
        if (isset($_REQUEST['month'])) {
            list($iCurMonth, $iCurYear) = explode('-', $_REQUEST['month']);
            $iCurMonth = (int) $iCurMonth;
            $iCurYear = (int) $iCurYear;
        } else {
            list($iCurMonth, $iCurYear) = explode('-', date('n-Y'));
        }
        list($sCurMonthName, $iCurDaysInMonth) = explode('-', date('F-t', mktime(0, 0, 0, $iCurMonth, $iNowDay, $iCurYear)));
        // previous month year, month
        $iPrevYear = $iCurYear;
        $iPrevMonth = $iCurMonth - 1;
        if ($iPrevMonth <= 0) {
            $iPrevMonth = 12;
            $iPrevYear--;
        }
        // next month year, month
        $iNextYear = $iCurYear;
        $iNextMonth = $iCurMonth + 1;
        if ($iNextMonth > 12) {
            $iNextMonth = 1;
            $iNextYear++;
        }
        // days in previous month
        $iPrevDaysInMonth = (int) date('t', mktime(0, 0, 0, $iPrevMonth, $iNowDay, $iPrevYear));
        // days-of-week of first day in current month
        $iFirstDayDow = (int) date('w', mktime(0, 0, 0, $iCurMonth, 1, $iCurYear));
        // from which day of previous month calendar starts
        $iPrevShowFrom = $iPrevDaysInMonth - $iFirstDayDow + 1;
        // select events array
        $aCalendarEvents = array();
        $sCountryFilter = 'all';
        $sRCalendarCountry = isset($_REQUEST['calendar_country']) ? $_REQUEST['calendar_country'] : $aMemberData['Country'];
        $sRCalendarCountry = $sRCalendarCountry == '' ? 'all' : $sRCalendarCountry;
        if ($sRCalendarCountry == 'all') {
            $sCountryFilter = '';
        } else {
            $sCountryFilter = 'AND `Country` = \'' . process_db_input($sRCalendarCountry) . '\'';
        }
        //old WHERE data`s
        /*
        AND FIND_IN_SET('{$sMemberSex}', `EventSexFilter`)
        AND ( TO_DAYS('{$aMemberData['DateOfBirth']}')
        BETWEEN TO_DAYS(DATE_SUB(NOW(), INTERVAL `EventAgeUpperFilter` YEAR))
        AND TO_DAYS(DATE_SUB(NOW(), INTERVAL `EventAgeLowerFilter` YEAR)) )
        AND ( INSTR(`EventMembershipFilter`, '\'all\'') OR INSTR(`EventMembershipFilter`, '\'{$aMembership['ID']}\'') )
        */
        $sRequest = "SELECT `ID`, `Title`, `PhotoFilename`, DAYOFMONTH(`EventStart`) AS `EventDay`, MONTH(`EventStart`) AS `EventMonth` FROM `SDatingEvents`\r\n\t\t\t\t\t\t\tWHERE ( MONTH(`EventStart`) = {$iCurMonth} AND YEAR(`EventStart`) = {$iCurYear} OR\r\n\t\t\t\t\t\t\t\t\tMONTH( DATE_ADD(`EventStart`, INTERVAL 1 MONTH) ) = {$iCurMonth} AND YEAR( DATE_ADD(`EventStart`, INTERVAL 1 MONTH) ) = {$iCurYear} OR\r\n\t\t\t\t\t\t\t\t\tMONTH( DATE_SUB(`EventStart`, INTERVAL 1 MONTH) ) = {$iCurMonth} AND YEAR( DATE_SUB(`EventStart`, INTERVAL 1 MONTH) ) = {$iCurYear} )\r\n\t\t\t\t\t\t\t{$sCountryFilter}\r\n\t\t\t\t\t\t\tAND `Status` = 'Active'\r\n\t\t\t\t\t\t\t";
        $vEventsRes = db_res($sRequest);
        while ($aEventData = mysql_fetch_assoc($vEventsRes)) {
            $aCalendarEvents["{$aEventData['EventDay']}-{$aEventData['EventMonth']}"][$aEventData['ID']]['Title'] = $aEventData['Title'];
            $aCalendarEvents["{$aEventData['EventDay']}-{$aEventData['EventMonth']}"][$aEventData['ID']]['PhotoFilename'] = $aEventData['PhotoFilename'];
        }
        // make calendar grid
        $bPreviousMonth = $iFirstDayDow > 0 ? true : false;
        $bNextMonth = false;
        $iCurrentDay = $bPreviousMonth ? $iPrevShowFrom : 1;
        for ($i = 0; $i < 6; $i++) {
            for ($j = 0; $j < 7; $j++) {
                $aCalendarGrid[$i][$j]['day'] = $iCurrentDay;
                $aCalendarGrid[$i][$j]['month'] = $bPreviousMonth ? $iPrevMonth : ($bNextMonth ? $iNextMonth : $iCurMonth);
                $aCalendarGrid[$i][$j]['current'] = !$bPreviousMonth && !$bNextMonth;
                $aCalendarGrid[$i][$j]['today'] = $iNowYear == $iCurYear && $iNowMonth == $iCurMonth && $iNowDay == $iCurrentDay && !$bPreviousMonth && !$bNextMonth;
                // make day increment
                $iCurrentDay++;
                if ($bPreviousMonth && $iCurrentDay > $iPrevDaysInMonth) {
                    $bPreviousMonth = false;
                    $iCurrentDay = 1;
                }
                if (!$bPreviousMonth && !$bNextMonth && $iCurrentDay > $iCurDaysInMonth) {
                    $bNextMonth = true;
                    $iCurrentDay = 1;
                }
            }
        }
        $sShowEventsByCountryC = _t('_Show events by country');
        $sAllC = _t('_All');
        $sPrevC = _t('_Prev');
        $sNextC = _t('_Next');
        $sSundaySC = _t('_Sunday_short');
        $sMondaySC = _t('_Monday_short');
        $sTuesdaySC = _t('_Tuesday_short');
        $sWednesdaySC = _t('_Wednesday_short');
        $sThursdaySC = _t('_Thursday_short');
        $sFridaySC = _t('_Friday_short');
        $sSaturdaySC = _t('_Saturday_short');
        $sNoPhotoC = _t('_No photo');
        $sCalendarC = _t('_Calendar');
        $sCalendarOptions = '';
        $sCalSel = $sRCalendarCountry == 'all' ? 'selected="selected"' : '';
        $sCalendarOptions .= '<option value="all" ' . $sCalSel . " >{$sAllC}</option>";
        foreach ($aPreValues['Country'] as $key => $value) {
            $sCalKeySel = $sRCalendarCountry == "{$key}" ? 'selected="selected"' : '';
            $sCuontryVal = _t($value['LKey']);
            $sCalendarOptions .= "<option value=\"{$key}\" {$sCalKeySel} >{$sCuontryVal}</option>";
        }
        $sCalendarCountry = isset($_REQUEST['calendar_country']) ? '&amp;calendar_country=' . process_pass_data($_REQUEST['calendar_country']) : '';
        $sCalendarPrevHref = $_SERVER['PHP_SELF'] . "?action=calendar&amp;month={$iPrevMonth}-{$iPrevYear}" . $sCalendarCountry;
        $sCurMonYear = _t('_' . $sCurMonthName) . ', ' . $iCurYear;
        $sCalendarNextHref = $_SERVER['PHP_SELF'] . "?action=calendar&amp;month={$iNextMonth}-{$iNextYear}" . $sCalendarCountry;
        $sCalTableTrs = '';
        for ($i = 0; $i < 6; $i++) {
            $sCalTableTrs .= '<tr>';
            for ($j = 0; $j < 7; $j++) {
                if ($aCalendarGrid[$i][$j]['today']) {
                    $sCellClass = 'calendar_today';
                } elseif ($aCalendarGrid[$i][$j]['current']) {
                    $sCellClass = 'calendar_current';
                } else {
                    $sCellClass = 'calendar_non_current';
                }
                $sCalTableTrs .= <<<EOF
<td style="width:100px;height:100px;" class="{$sCellClass}">{$aCalendarGrid[$i][$j]['day']}
EOF;
                $vDayMonthValue = $aCalendarGrid[$i][$j]['day'] . '-' . $aCalendarGrid[$i][$j]['month'];
                if (isset($aCalendarEvents[$vDayMonthValue]) && is_array($aCalendarEvents[$vDayMonthValue])) {
                    foreach ($aCalendarEvents[$vDayMonthValue] as $eventID => $eventArr) {
                        $sEventThumbname = getThumbNameByPictureName($eventArr['PhotoFilename'], true);
                        $sGenUrl = $this->genUrl($eventID, '', 'entry', true);
                        if (strlen(trim($sEventThumbname)) && file_exists($dir['sdatingImage'] . $sEventThumbname)) {
                            $sCalTableTrs .= <<<EOF
<div>
<a href="{$sGenUrl}">
\t<img src="{$site['sdatingImage']}icon_{$eventArr['PhotoFilename']}" border="0" alt="{$eventArr['Title']}" title="{$eventArr['Title']}" style="margin: 2px;" />
</a>
</div>
EOF;
                        } else {
                            global $tmpl;
                            $sSpacerName = $this->sSpacerPath;
                            $sNaname = $site['url'] . 'templates/tmpl_' . $tmpl . '/' . $this->sPicNotAvail;
                            $sCalTableTrs .= <<<EOF
<!-- <div align="center" class="small" title="{$eventArr['Title']}" style="width: {$sdatingThumbWidth}px; height: {$sdatingThumbHeight}px; vertical-align: middle; line-height: {$sdatingThumbHeight}px; border: 1px solid silver; background-color: #FFFFFF; font-weight: normal; margin: 2px; font-size: 80%; cursor: pointer;"> -->
<div>
\t<a href="{$sGenUrl}">
\t\t<img src="{$sSpacerName}" style="width:64px;height:64px; background-image: url({$sNaname});" class="photo1" alt="" />
\t\t<!--<nobr>{$sNoPhotoC}</nobr>-->
\t</a>
</div>
EOF;
                        }
                    }
                }
                $sCalTableTrs .= '</td>';
            }
            $sCalTableTrs .= '</tr>';
        }
        $sRetHtml = <<<EOF
<br />
<div align="center" style="margin-bottom: 10px;">
\t<form id="calendarCountryForm" action="{$_SERVER['PHP_SELF']}" method="get" style="margin: 0px;">
\t\t<input type="hidden" name="action" value="calendar" />
\t\t<input type="hidden" name="month" value="{$iCurMonth}-{$iCurYear}" />
\t\t{$sShowEventsByCountryC}&nbsp;
\t\t<select class="no" name="calendar_country" onchange="javascript: document.forms['calendarCountryForm'].submit();" style="vertical-align: middle;">{$sCalendarOptions}</select>
\t</form>

\t<table cellpadding="1" cellspacing="1" border="0" width="100%" class="text" style="text-align:center;margin-top:10px;">
\t\t<tr>
\t\t\t<td class="calendar_current" style="padding: 3px;">
\t\t\t\t<a href="{$sCalendarPrevHref}">{$sPrevC}</a>
\t\t\t</td>
\t\t\t<td colspan="5" class="calendar_current">{$sCurMonYear}</td>
\t\t\t<td class="calendar_current" style="padding: 3px;">
\t\t\t\t<a href="{$sCalendarNextHref}">{$sNextC}</a>
\t\t\t</td>
\t\t</tr>
\t\t<tr>
\t\t\t<td style="width:{$iPicSize}px;" class="calendar_non_current">{$sSundaySC}</td>
\t\t\t<td style="width:{$iPicSize}px;" class="calendar_non_current">{$sMondaySC}</td>
\t\t\t<td style="width:{$iPicSize}px;" class="calendar_non_current">{$sTuesdaySC}</td>
\t\t\t<td style="width:{$iPicSize}px;" class="calendar_non_current">{$sWednesdaySC}</td>
\t\t\t<td style="width:{$iPicSize}px;" class="calendar_non_current">{$sThursdaySC}</td>
\t\t\t<td style="width:{$iPicSize}px;" class="calendar_non_current">{$sFridaySC}</td>
\t\t\t<td style="width:{$iPicSize}px;" class="calendar_non_current">{$sSaturdaySC}</td>
\t\t</tr>
\t{$sCalTableTrs}
\t</table>
</div>
<br />
EOF;
        return DesignBoxContent($sCalendarC, $sRetHtml, $oTemplConfig->PageSDatingCalendar_db_num);
    }
/**
 * 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;
}
 function processing()
 {
     global $MODE;
     // - Defaults -
     $MODE = "_MAIL_";
     //$MODE = "_LIVE_";
     $DAY = "_OBEY_";
     //$DAY  = "_FORCE_";
     define('NON_VISUAL_PROCESSING', 'YES');
     // - Always finish
     set_time_limit(36000);
     ignore_user_abort();
     // - Parameters check -
     for ($i = 0; strlen($argv[$i]); $i++) {
         switch ($argv[$i]) {
             case "--live":
                 $MODE = "_LIVE_";
                 break;
             case "--mail":
                 $MODE = "_MAIL_";
                 break;
             case "--force-day":
                 $DAY = "_FORCE_";
                 break;
             case "--obey-day":
                 $DAY = "_OBEY_";
                 break;
         }
     }
     if ($MODE != "_LIVE_") {
         ob_start();
     }
     $day = date("d");
     if (getParam("cmdDay") == $day && $DAY == "_OBEY_") {
         echo "Already done today, bailing out\n";
         $this->finish();
         return;
     }
     setParam("cmdDay", $day);
     //========================================================================================================================
     // - Send Admin Stats notification
     $this->processAdminStats();
     // - Membership check -
     unmarkMembershipAsExpiringAll();
     echo "\n- Membership expiration letters -\n";
     $iExpireNotificationDays = (int) getParam("expire_notification_days");
     $bExpireNotifyOnce = getParam("expire_notify_once") == 'on';
     $iExpireLetters = 0;
     $aRow = $GLOBALS['MySQL']->getFirstRow("SELECT `ID` FROM `Profiles`");
     while (!empty($aRow)) {
         $aCurrentMem = getMemberMembershipInfo($aRow['ID']);
         // If expire_notification_days is -1 then notify after expiration
         if ($aCurrentMem['ID'] == MEMBERSHIP_ID_STANDARD && $iExpireNotificationDays == -1) {
             // Calculate last UNIX Timestamp
             $iLastTimestamp = time() - 24 * 3600;
             $aLastMem = getMemberMembershipInfo($aRow['ID'], $iLastTimestamp);
             if ($aCurrentMem['ID'] != $aLastMem['ID']) {
                 $bMailResult = mem_expiration_letter($aRow['ID'], $aLastMem['Name'], -1);
                 if ($bMailResult) {
                     $iExpireLetters++;
                 }
             }
         } else {
             if ($aCurrentMem['ID'] != MEMBERSHIP_ID_STANDARD) {
                 // Calculate further UNIX Timestamp for expiration check
                 $iFurtherTimestamp = time() + 24 * 3600;
                 $aFurtherMem = getMemberMembershipInfo($aRow['ID'], $iFurtherTimestamp);
                 if ($aCurrentMem['ID'] != $aFurtherMem['ID'] && $aFurtherMem['ID'] == MEMBERSHIP_ID_STANDARD) {
                     markMembershipAsExpiring($aRow['ID'], $aCurrentMem['ID'], $aCurrentMem['TransactionID']);
                 }
                 // Calculate further UNIX Timestamp for notification letter
                 $iFurtherTimestamp = time() + $iExpireNotificationDays * 24 * 3600;
                 $aFurtherMem = getMemberMembershipInfo($aRow['ID'], $iFurtherTimestamp);
                 if ($aCurrentMem['ID'] != $aFurtherMem['ID'] && $aFurtherMem['ID'] == MEMBERSHIP_ID_STANDARD) {
                     if (!$bExpireNotifyOnce || abs($iFurtherTimestamp - $aCurrentMem['DateExpires']) < 24 * 3600) {
                         $bMailResult = mem_expiration_letter($aRow['ID'], $aCurrentMem['Name'], (int) (($aCurrentMem['DateExpires'] - time()) / (24 * 3600)));
                         if ($bMailResult) {
                             $iExpireLetters++;
                         }
                     }
                 }
             }
         }
         $aRow = $GLOBALS['MySQL']->getNextRow();
     }
     echo "Send membership expire letters: {$iExpireLetters} letters\n";
     //========================================================================================================================
     // clear tmp folder --------------------------------------------------------------------------
     $this->del_old_all_files();
     // ----------------------------------------------------------------------------------
     $this->clean_database();
     $this->finish();
 }
              <tr>

              <td align=center><a href="<?php 
    echo getProfileLink($profaff_res['ID']);
    ?>
"><?php 
    echo $profaff_arr['NickName'];
    ?>
</a></td>
              <td align=center><?php 
    echo $profaff_arr['aff_num'];
    ?>
</td>
              <td align=center>
                  <?php 
    $membership_info = getMemberMembershipInfo($profaff_arr['ID']);
    echo $membership_info['Name'];
    ?>
              </td>

              </tr>
<?php 
}
?>


</table>
<?php 
ContentBlockFoot();
ContentBlockHead("AFF Approved banners");
?>
Exemple #18
0
while (!empty($aRow)) {
    $aCurrentMem = getMemberMembershipInfo($aRow['ID']);
    // If expire_notification_days is -1 then notify after expiration
    if ($aCurrentMem['ID'] == MEMBERSHIP_ID_STANDARD && $iExpireNotificationDays == -1) {
        // Calculate last UNIX Timestamp
        $iLastTimestamp = time() - 24 * 3600;
        $aLastMem = getMemberMembershipInfo($aRow['ID'], $iLastTimestamp);
        if ($aCurrentMem['ID'] != $aLastMem['ID']) {
            $bMailResult = $oAcl->getExpirationLetter($aRow['ID'], $aLastMem['Name'], -1);
            if ($bMailResult) {
                $iExpireLetters++;
            }
        }
    } else {
        if ($aCurrentMem['ID'] != MEMBERSHIP_ID_STANDARD) {
            // Calculate further UNIX Timestamp
            $iFurtherTimestamp = time() + $iExpireNotificationDays * 24 * 3600;
            $aFurtherMem = getMemberMembershipInfo($aRow['ID'], $iFurtherTimestamp);
            if ($aCurrentMem['ID'] != $aFurtherMem['ID'] && $aFurtherMem['ID'] == MEMBERSHIP_ID_STANDARD) {
                if (!$bExpireNotifyOnce || abs($iFurtherTimestamp - $aCurrentMem['DateExpires']) < 24 * 3600) {
                    $bMailResult = $oAcl->getExpirationLetter($aRow['ID'], $aCurrentMem['Name'], (int) (($aCurrentMem['DateExpires'] - time()) / (24 * 3600)));
                    if ($bMailResult) {
                        $iExpireLetters++;
                    }
                }
            }
        }
    }
    $aRow = $oDb->getNextRow();
}
echo "Send membership expire letters: {$iExpireLetters} letters\n";
/**
 * Print code for membership status
 * $memberID - member ID
 * $offer_upgrade - will this code be printed at [c]ontrol [p]anel
 */
function GetMembershipStatus($memberID, $bOfferUpgrade = true, $bViewActions = true)
{
    $ret = '';
    $aMembership = getMemberMembershipInfo($memberID);
    $sViewActions = $bViewActions ? "<a onclick=\"javascript:loadHtmlInPopup('explanation_popup', '" . BX_DOL_URL_ROOT . "explanation.php?explain=membership&amp;type=" . $aMembership['ID'] . "');\" href=\"javascript:void(0);\">" . _t("_VIEW_MEMBERSHIP_ACTIONS") . "</a>" : "";
    // Show colored membership name
    if ($aMembership['ID'] == MEMBERSHIP_ID_STANDARD) {
        $ret .= $aMembership['Name'];
        if ($bOfferUpgrade && BxDolRequest::serviceExists('membership', 'get_upgrade_url')) {
            $sViewActions = _t('_MEMBERSHIP_UPGRADE_FROM_STANDARD', BxDolService::call('membership', 'get_upgrade_url')) . '<span class="sys-bullet"></span>' . $sViewActions;
        }
        $ret .= '<br />' . $sViewActions;
    } else {
        $ret .= '<font color="red">' . $aMembership['Name'] . '</font>';
        $sExpiration = '';
        if (!is_null($aMembership['DateExpires'])) {
            $sExpiration = _t("_MEMBERSHIP_EXPIRES", defineTimeInterval($aMembership['DateExpires']));
        } else {
            $sExpiration = _t("_MEMBERSHIP_EXPIRES_NEVER");
        }
        $ret .= '<br />' . $sViewActions . '<span class="sys-bullet"></span>' . $sExpiration;
    }
    return $ret;
}
/**
 * page code function
 */
function PageCompPageMainCode()
{
    global $site;
    global $dir;
    global $_page;
    global $p_arr;
    global $p_arr_new;
    global $db_vsbl;
    global $db_editbl;
    global $tab;
    global $autoApproval_ifProfile;
    global $ID;
    global $MEMBER;
    global $ADMIN;
    global $NEW_TO_ADD;
    global $Featured;
    global $pic;
    global $pics;
    global $pic_num;
    global $enable_audio_upload;
    global $enable_video_upload;
    global $sound_file_exist;
    global $video_file_exist;
    global $status_admin_ex;
    global $change_error_text;
    global $result_text;
    global $pictures_text;
    global $membership_message;
    global $max_thumb_height;
    global $max_thumb_width;
    global $enable_ray;
    global $enable_ray_pro;
    ob_start();
    if ($NEW_TO_ADD) {
        $_page['header'] = _t("_New Member");
        $_page['header_text'] = _t("_New Member Add Here");
    } else {
        $_page['header'] = process_line_output($p_arr['NickName']) . ": " . process_line_output(strmaxtextlen($p_arr['DescriptionMe'], 45));
        $_page['header_text'] = "<b>" . process_line_output($p_arr['NickName']) . "</b> - ";
        $_page['header_text'] .= _t('_' . $p_arr['Sex']);
        $_page['header_text'] .= ", " . _t("_y/o", age($p_arr['DateOfBirth'])) . " (ID: {$p_arr['ID']})";
    }
    echo '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td>';
    if ($ADMIN && $status_admin_ex) {
        echo $status_admin_ex;
    }
    if ($change_error_text) {
        echo $change_error_text . '<br />';
    }
    global $moderator;
    if ($ADMIN && !$moderator) {
        echo "<div align=right class=text2><a href=\"{$_SERVER['PHP_SELF']}\">" . _t("_Add New Profile") . "</a></div>";
    }
    if ($result_text) {
        echo '<center>' . $result_text . '</center><br />';
    }
    if ($ADMIN && !$NEW_TO_ADD && $enable_video_upload && $enable_ray && $enable_ray_pro && file_exists($dir['root'] . "ray/modules/video/admin.php")) {
        $sRayHeaderPath = $dir['root'] . "ray/inc/header.inc.php";
        $iId = (int) $p_arr['ID'];
        $aAdmin = db_arr("SELECT `Name`, `Password` FROM `Admins` LIMIT 1");
        $sNick = $aAdmin['Name'];
        $sPassword = $aAdmin['Password'];
        echo "<tr><td><div style=\"width:179px; padding-bottom:10px; margin-left:auto; margin-right:auto;\">";
        require_once $dir['root'] . "ray/modules/video/admin.php";
        echo "</div></td></tr>";
    }
    if ($ADMIN && !$NEW_TO_ADD) {
        // Print membership information and controls
        $memberships_arr = getMemberships();
        $membership_info = getMemberMembershipInfo($ID);
        ?>
    <!-- MEMBERSHIP [BEGIN] -->

	<tr><td>
		<center><?php 
        echo $membership_message;
        ?>
</center>
		<form name="MembershipForm" action="profile_edit.php?ID=<?php 
        echo $p_arr['ID'];
        ?>
" method=post>
		<input type="hidden" name="SetMembership" value="YES">
		<table width=100% cellspacing=0 cellpadding=2 class="text2" border=0>
<?php 
        echo print_rows_set_membership(1, $memberships_arr, $membership_info, 3, "table", "panel", "25%");
        ?>
		</table>
		<center>
			<input class=no type="submit" value="Set" style="width: 50px;">
		</center>
		</form>
    <hr>
    </td></tr>

    <!-- MEMBERSHIP [ END ] -->
<?php 
    }
    ?>
	
    <form name="jform" method="post" action="profile_edit.php?ID=<?php 
    echo $p_arr['ID'];
    ?>
">
<?php 
    if ($NEW_TO_ADD) {
        ?>
		<input type="hidden" name="NewProfile" value="YES" />
	<?php 
    }
    ?>
<input type="hidden" name="SaveChanges" value="YES" />
<?php 
    if ($ADMIN) {
        ?>
	<table cellspacing="0" cellpadding="0" class="small2" align="center">
		<tr>
			<td align="right" width="75%"><?php 
        echo _t("_Mark as Featured");
        ?>
</td>
			<td align="left" width="25%">
				<input type="checkbox" name="Featured"
				  <?php 
        if ($Featured) {
            echo 'checked="checked"';
        }
        ?>
 >
			</td>
		</tr>
	</table>
	<?php 
    }
    ?>
    <table border="0" cellspacing="0" cellpadding="0" width="100%">
    	<tr>
    <td valign="top">

    <table border="0" cellspacing="1" cellpadding="0" width="100%">
    <tr><td align="center" valign="middle">
<?php 
    if ($NEW_TO_ADD) {
        echo _t("_New Member") . '<br /><br />';
    } else {
        ?>
        <table border="0" cellspacing="0" cellpadding="0" width="250">
			<tr>
				<td align="center" valign="middle" style="position:relative; display:block;width:112px;">
					<?php 
        echo get_member_thumbnail($p_arr['ID'], 'none');
        ?>
    	</td>
		<td>
	<?php 
        $yes_ph = 0;
        require_once BX_DIRECTORY_PATH_ROOT . 'profilePhotos.php';
        $oPhoto = new ProfilePhotos($p_arr['ID']);
        $oPhoto->getMediaArray();
        $yes_ph = $oPhoto->iMediaCount;
        if ($yes_ph) {
            ?>
			<a href="<?php 
            echo $site['url'];
            ?>
photos_gallery.php?ID=<?php 
            echo $p_arr['ID'];
            ?>
" ><?php 
            echo _t("_More Photos");
            ?>
</a><br />
		<?php 
        }
        if (!$MEMBER) {
            echo "<div class=small2>" . _t("_Last logged in") . ": ";
            if (!$p_arr['LastLoggedIn'] || $p_arr['LastLoggedIn'] == "0000-00-00 00:00:00") {
                echo _t("_never");
            } else {
                echo $p_arr['LastLoggedIn'];
            }
            echo "</div>";
        } else {
            echo _t("_Profile status");
            ?>
:
		<b><font class=prof_stat_<?php 
            echo $p_arr['Status'];
            ?>
> <?php 
            echo _t("_" . $p_arr['Status']);
            ?>
 </font></b><br />
	<?php 
            if ($MEMBER) {
                switch ($p_arr['Status']) {
                    case 'Active':
                        echo '<a href="change_status.php">' . _t("_Suspend account") . '</a><br />';
                        break;
                    case 'Suspended':
                        echo '<a href="change_status.php">' . _t("_Activate account") . '</a><br />';
                        break;
                }
            }
        }
        ?>
    	</td></tr>
        </table>
	<?php 
    }
    ?>
    </td>
    <td valign="top" align="center" width="100%">

<?php 
    $free_mode = getParam("free_mode") == "on" ? 1 : 0;
    ?>
    </td>

</table>

</td></tr>
<tr><td>

<table class="profile_edit_table"><!-- Profile edit page -->
<?php 
    $first_row = 1;
    $rd = !($ADMIN || $MEMBER);
    $columns = 2;
    $respd = db_res("SELECT *, (`editable` & {$db_editbl}) AS `is_editable` FROM `ProfilesDesc` WHERE `visible` & {$db_vsbl} AND ( FIND_IN_SET('0', `show_on_page`) OR FIND_IN_SET('" . (int) $_page['name_index'] . "', show_on_page)) ORDER BY `order` ASC");
    while ($arrpd = mysql_fetch_array($respd)) {
        $fname = get_input_name($arrpd);
        if ($arrpd['get_value'] && $arrpd['to_db'] == 0) {
            $funcbody = $arrpd['get_value'];
            $func = create_function('$arg0', $funcbody);
            $p_arr[$fname] = $func($p_arr_new);
        }
        if ($arrpd['is_editable'] && isset($p_arr_new[$fname])) {
            $p_arr[$fname] = $p_arr_new[$fname];
        }
        $not_first_row = 0;
        $read_only = !$arrpd['is_editable'];
        switch ($arrpd['type']) {
            case 'set':
                // set of checkboxes
                echo print_row_set($first_row, $arrpd, $p_arr[$fname], "table", $rd, $columns, "", $read_only);
                break;
            case 'rb':
                // radio buttons
                echo print_row_radio_button($first_row, $arrpd, $p_arr[$fname], "table", $rd, $columns, "", $read_only);
                break;
            case 'r':
                // reference to array for combo box
                if ($fname == 'Country') {
                    $onchange = "flagImage = document.getElementById('flagImageId'); flagImage.src = '{$site['flags']}' + this.value.toLowerCase() + '.gif';";
                    if (strlen($p_arr[$fname]) == 0) {
                        $p_arr[$fname] = getParam('default_country');
                    }
                    $imagecode = '<img id="flagImageId" src="' . ($site['flags'] . strtolower($p_arr[$fname])) . '.gif" alt="flag" />';
                } else {
                    $onchange = '';
                    $imagecode = '';
                }
                echo print_row_ref($first_row, $arrpd, $p_arr[$fname], "table", $rd, $columns, "", $read_only, $onchange, $imagecode);
                break;
            case '0':
                // divider
                echo print_row_delim($first_row, $arrpd, "panel", $columns);
                $not_first_row = 1;
                $first_row = 1;
                break;
            case 'e':
                // enum combo box. if field name is 'Sex', than this is simple text, user can not change it
                echo print_row_enum($first_row, $arrpd, $p_arr[$fname], "table", $javascript, $rd, $columns, "", $read_only);
                break;
            case 'en':
                // enum combo box with numbers
                echo print_row_enum_n($first_row, $arrpd, $p_arr[$fname], "table", $rd, $columns, "", $read_only);
                break;
            case 'eny':
                // enum combo box with years
                echo print_row_enum_years($first_row, $arrpd, $p_arr[$fname], "table", $rd, $columns, "", $read_only);
                break;
            case 'a':
                // text Area
                echo print_row_area($first_row, $arrpd, $p_arr[$fname], "table", $rd, $columns, "", $read_only);
                break;
            case 'c':
                // input box
                echo print_row_edit($first_row, $arrpd, $p_arr[$fname], "table", $rd, $columns, "", $read_only);
                break;
            case 'date':
                // date
                echo print_row_date($first_row, $arrpd, $p_arr[$fname], "table", $rd, $columns, "", $read_only);
                break;
            case 'p':
                // input box password
                echo print_row_pwd($first_row, $arrpd, '', "table", $rd, $columns, "", $read_only);
                break;
            default:
                $not_first_row = 1;
        }
        if (!$not_first_row && $first_row == 1) {
            $first_row = 0;
        }
    }
    ?>
</table>
</td></tr>
</table>

<br />
<?php 
    if (!!($ADMIN || $MEMBER)) {
        ?>
<center><input type="submit" value="<?php 
        echo _t("_Save Changes");
        ?>
" /></center>
</form>
<br />
<?php 
        if ($MEMBER && !$NEW_TO_ADD) {
            if (!$autoApproval_ifProfile) {
                attention(_t("_PROFILE_WARNING1", $site['title']));
            }
            attention(_t("_PROFILE_WARNING2", $site['title']));
        }
    }
    echo "</td></tr></table>";
    $ret = ob_get_clean();
    return $ret;
}
Exemple #21
0
 /**
  * Page blocks' methods
  */
 function getCurrentLevelBlock()
 {
     $aUserLevel = getMemberMembershipInfo($this->getUserId());
     return $this->_oTemplate->displayCurrentLevel($aUserLevel);
 }
 function _isAllowedJoinByMembership(&$aEvent)
 {
     if (!$aEvent['EventMembershipFilter']) {
         return true;
     }
     require_once BX_DIRECTORY_PATH_INC . 'membership_levels.inc.php';
     $aMemebrshipInfo = getMemberMembershipInfo($this->_iProfileId);
     return $aEvent['EventMembershipFilter'] == $aMemebrshipInfo['ID'] && $aMemebrshipInfo['DateStarts'] < time() && $aMemebrshipInfo['DateExpires'] > time() ? true : false;
 }
Exemple #23
0
 function processing()
 {
     global $MODE;
     // - Defaults -
     $MODE = "_MAIL_";
     //$MODE = "_LIVE_";
     $DAY = "_OBEY_";
     //$DAY  = "_FORCE_";
     define('NON_VISUAL_PROCESSING', 'YES');
     // - Always finish
     set_time_limit(36000);
     ignore_user_abort();
     // - Parameters check -
     for ($i = 0; strlen($argv[$i]); $i++) {
         switch ($argv[$i]) {
             case "--live":
                 $MODE = "_LIVE_";
                 break;
             case "--mail":
                 $MODE = "_MAIL_";
                 break;
             case "--force-day":
                 $DAY = "_FORCE_";
                 break;
             case "--obey-day":
                 $DAY = "_OBEY_";
                 break;
         }
     }
     if ($MODE != "_LIVE_") {
         ob_start();
     }
     $day = date("d");
     if (getParam("cmdDay") == $day && $DAY == "_OBEY_") {
         echo "Already done today, bailing out\n";
         $this->finish();
         return;
     }
     setParam("cmdDay", $day);
     //========================================================================================================================
     // - Membership check -
     echo "\n- Membership expiration letters -\n";
     $expire_notification_days = getParam("expire_notification_days");
     $expire_notify_once = getParam("expire_notify_once");
     $expire_letters = 0;
     $exp_res = db_res("SELECT `ID` FROM `Profiles`", 0);
     while ($row = mysql_fetch_array($exp_res)) {
         $current_membership_arr = getMemberMembershipInfo($row['ID']);
         // If expire_notification_days is -1 then notify after expiration
         if ($current_membership_arr['ID'] == MEMBERSHIP_ID_STANDARD && $expire_notification_days == -1) {
             // Calculate last UNIX Timestamp
             $last_timestamp = time() - 24 * 3600;
             $last_membership_arr = getMemberMembershipInfo($row['ID'], $last_timestamp);
             if ($current_membership_arr['ID'] != $last_membership_arr['ID']) {
                 if ($further_membership_arr['ID'] == MEMBERSHIP_ID_STANDARD) {
                     $mail_ret = mem_expiration_letter($row['ID'], $last_membership_arr['Name'], -1);
                     if ($mail_ret) {
                         $expire_letters++;
                     }
                 }
             }
         } elseif ($current_membership_arr['ID'] != MEMBERSHIP_ID_STANDARD) {
             // Calculate further UNIX Timestamp
             $further_timestamp = time() + $expire_notification_days * 24 * 3600;
             $further_membership_arr = getMemberMembershipInfo($row['ID'], $further_timestamp);
             if ($current_membership_arr['ID'] != $further_membership_arr['ID'] && $further_membership_arr['ID'] == MEMBERSHIP_ID_STANDARD) {
                 if (!$expire_notify_once || abs($further_timestamp - $current_membership_arr['DateExpires']) < 24 * 3600) {
                     $mail_ret = mem_expiration_letter($row['ID'], $current_membership_arr['Name'], (int) (($current_membership_arr['DateExpires'] - time()) / (24 * 3600)));
                     if ($mail_ret) {
                         $expire_letters++;
                     }
                 }
             }
         }
     }
     echo "Send membership expire letters: {$expire_letters} letters\n";
     //========================================================================================================================
     // clear tmp folder --------------------------------------------------------------------------
     $this->del_old_all_files();
     // ----------------------------------------------------------------------------------
     $this->clean_database();
     $this->finish();
 }
 function convertEditField2Input($aItem, $aParams, $iPerson)
 {
     $bCouple = $aParams['couple'];
     $aValues = $aParams['values'];
     $aErrors = $aParams['errors'];
     $iProfileID = $aParams['profile_id'];
     $aInput = array();
     switch ($aItem['Type']) {
         case 'text':
             $aInput['type'] = 'text';
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'area':
             $aInput['type'] = 'textarea';
             $aInput['value'] = $aValues[$iPerson];
             $aInput['attrs']['counter'] = 'true';
             break;
         case 'html_area':
             $aInput['type'] = 'textarea';
             $aInput['html'] = true;
             $aInput['value'] = $aValues[$iPerson];
             $aInput['attrs']['counter'] = 'true';
             break;
         case 'date':
             $aInput['type'] = 'date';
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'datetime':
             $aInput['type'] = 'datetime';
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'num':
             $aInput['type'] = 'number';
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'range':
             $aInput['type'] = 'doublerange';
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'pass':
             $aInput['type'] = 'password';
             break;
         case 'bool':
             $aInput['type'] = 'checkbox';
             $aInput['value'] = 'yes';
             $aInput['checked'] = (bool) (int) $aValues[$iPerson];
             break;
         case 'select_one':
             switch ($aItem['Control']) {
                 case 'select':
                     $aInput['type'] = 'select';
                     break;
                 case 'radio':
                     $aInput['type'] = 'radio_set';
                     break;
                 default:
                     return false;
             }
             $aInput['values'] = $this->convertValues4Input($aItem['Values'], $aItem['UseLKey']);
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'select_set':
             switch ($aItem['Control']) {
                 case 'select':
                     $aInput['type'] = 'select_multiple';
                     break;
                 case 'checkbox':
                     $aInput['type'] = 'checkbox_set';
                     break;
                 default:
                     return false;
             }
             $aInput['values'] = $this->convertValues4Input($aItem['Values'], $aItem['UseLKey']);
             $aInput['value'] = $aValues[$iPerson];
             break;
         case 'system':
             switch ($aItem['Name']) {
                 case 'Featured':
                     $aInput = array('type' => 'checkbox', 'value' => 'yes', 'checked' => $aValues[0]);
                     break;
                 case 'Status':
                     $aInput = array('type' => 'select', 'value' => $aValues[0], 'values' => array());
                     foreach ($aItem['Values'] as $sValue) {
                         $aInput['values'][$sValue] = _t("_FieldValues_{$sValue}");
                     }
                     break;
                 case 'Membership':
                     $aMemberships = getMemberships();
                     $aMembershipInfo = getMemberMembershipInfo($iProfileID);
                     $aInput = array('type' => 'custom', 'content' => $this->getInputMembership($aMemberships, $aMembershipInfo));
                     break;
                 case 'ID':
                 case 'DateReg':
                 case 'DateLastEdit':
                 case 'DateLastLogin':
                     //non editable
                     return false;
                     break;
                 default:
                     return false;
             }
             break;
         default:
             return false;
     }
     $aInput['name'] = $aItem['Type'] == 'system' ? $aItem['Name'] : $aItem['Name'] . "[{$iPerson}]";
     $aInput['caption'] = _t($aItem['Caption']);
     $aInput['required'] = $aItem['Type'] == 'pass' ? false : $aItem['Mandatory'];
     $aInput['info'] = ($sInfo = _t($aItem['Desc'], $aItem['Min'], $aItem['Max'])) != $aItem['Desc'] ? $sInfo : null;
     if ($aItem['Type'] == 'date') {
         $aInput['attrs']['min'] = $aItem['Max'] ? date('Y') - $aItem['Max'] . '-' . date('m') . '-' . date('d') : date('Y') - 100 . '-' . date('m') . '-' . date('d');
         $aInput['attrs']['max'] = $aItem['Min'] ? date('Y') - $aItem['Min'] . '-' . date('m') . '-' . date('d') : date('Y') + 100 . '-' . date('m') . '-' . date('d');
     } else {
         $aInput['attrs']['min'] = $aItem['Min'];
         $aInput['attrs']['max'] = $aItem['Max'];
     }
     $aInput['error'] = $aErrors[$iPerson];
     if ($iPerson == 1) {
         $aInput['tr_attrs'] = array('class' => 'hidable', 'style' => 'display: ' . ($bCouple ? 'table-row' : 'none'));
     }
     return $aInput;
 }