/** * Billing by all users at 3-30 */ public static function dailyAllUsers() { global $DB; $table = \Hawkart\Megatv\SubscribeTable::getTableName(); $time_update = "03:30:00"; $datetime = new \Bitrix\Main\Type\Datetime(date("Y-m-d " . $time_update), 'Y-m-d H:i:s'); $datetime_next_date = new \Bitrix\Main\Type\Datetime(date('Y-m-d' . $time_update, strtotime('+1 day')), 'Y-m-d H:i:s'); $datetime_from_db = date("d.m.Y " . $time_update); $datetime_to_db = date("d.m.Y " . $time_update, strtotime('+1 day')); /** * Get all users */ $arUsers = array(); $arFilter = array("ACTIVE" => "Y"); $rsUsers = \CUser::GetList($by = "LAST_NAME", $order = "asc", $arFilter); while ($arUser = $rsUsers->GetNext()) { $arUsers[$arUser["ID"]] = $arUser; } /** * Get all priced subscribe for all users */ $arSubscribeUsers = array(); $result = \Hawkart\Megatv\SubscribeTable::getList(array('filter' => array("UF_ACTIVE" => 1, ">UF_CHANNEL_ID" => 0, ">UF_CHANNEL.UF_PRICE_H24" => 0, "<=UF_DATETIME_TO" => $datetime), 'select' => array("ID", "PRICE" => "UF_CHANNEL.UF_PRICE_H24", "UF_USER_ID"))); while ($arSub = $result->fetch()) { $arSubscribeUsers[$arSub["UF_USER_ID"]][] = array("ID" => $arSub["ID"], "PRICE" => $arSub["PRICE"]); } $result = \Hawkart\Megatv\SubscribeTable::getList(array('filter' => array("UF_ACTIVE" => 1, ">UF_SERVICE_ID" => 0, ">UF_SERVICE.UF_PRICE" => 0), 'select' => array("ID", "PRICE" => "UF_SERVICE.UF_PRICE", "UF_USER_ID"))); while ($arSub = $result->fetch()) { $arSubscribeUsers[$arSub["UF_USER_ID"]][] = array("ID" => $arSub["ID"], "PRICE" => $arSub["PRICE"]); } /** * Make transaction for 1 day for all users */ foreach ($arSubscribeUsers as $user_id => $arSubscribes) { $daily_price = 0; foreach ($arSubscribes as $arSubscribe) { $daily_price += $arSubscribe["PRICE"]; } $balance = \CUserEx::getBudget($user_id); if ($balance > 0 && $daily_price > 0) { \CSaleAccountEx::transaction(-1 * $daily_price, $user_id, "Оплата услуг за " . date('d.m.Y')); $strSql = "UPDATE " . $table . " SET UF_DATETIME_TO=curdate() + INTERVAL 1 DAY + INTERVAL 3 HOUR + INTERVAL 30 MINUTE WHERE UF_USER_ID=" . $user_id; $res = $DB->Query($strSql, false, $err_mess . __LINE__); //Send email to user to add money to budget for 3 days if ($balance < $daily_price * 2) { \CEvent::SendImmediate("NOTIFICATION_PAY_AFTER_DAYS", SITE_ID, array("EMAIL_TO" => $arUsers[$user_id]["EMAIL"], "PRICE" => $daily_price * 5)); } } } }
<?php global $USER; if ($USER->IsAuthorized()) { $budget = floatval(\CUserEx::getBudget()); $arUser = \CUserEx::updateAvatar($USER->GetID()); if (floatval($arUser["UF_CAPACITY_BUSY"]) == 0 || floatval($arUser["UF_CAPACITY"]) == 0) { $filledPercent = 0; } else { $filledPercent = round(floatval($arUser["UF_CAPACITY_BUSY"]) / floatval($arUser["UF_CAPACITY"]), 4); } $APPLICATION->AddViewContent('user_budget', number_format($budget, 0, "", " ")); $APPLICATION->AddViewContent('user_filled_space', round($arUser["UF_CAPACITY_BUSY"], 2)); $APPLICATION->AddViewContent('user_filled_space_percent', $filledPercent); $APPLICATION->AddViewContent('user_empty_space', round(floatval($arUser["UF_CAPACITY"] - $arUser["UF_CAPACITY_BUSY"]), 2)); ?> <div class="box-userbar__userbar userbar"> <?php /*<div class="userbar__disk-space disk-space" data-type="fill-disk-space" onclick="window.location.href='/personal/services/';" style="cursor: pointer;"> <div class="disk-space__progress-holder progress-holder" data-progress="<?=$filledPercent?>"></div> <span class="disk-space__label"><?=GetMessage('BUSY')?> <strong class="disk-space__strong"><?=round($arUser["UF_CAPACITY_BUSY"], 2);?> <?=GetMessage('GB')?></strong></span> </div>*/ ?> <nav class="box-userbar__usernav usernav" data-module="user-navigation"> <div class="usernav__user-card"> <a href="/personal/" class="usernav__user-avatar<?php if (!$arUser["PERSONAL_PHOTO"]) { ?> usernav__user-avatar--empty<?php
$arSchedule["UF_DATE_START"] = $arSchedule['UF_DATE_START']->toString(); $arSchedule["UF_DATE_END"] = $arSchedule['UF_DATE_END']->toString(); } //check if schedule in recording yet. Deleted to recordable $update = false; $result = \Hawkart\Megatv\RecordTable::getList(array('filter' => array("=UF_USER_ID" => $USER_ID, "=UF_SCHEDULE_ID" => $prog_time), 'select' => array("ID", "UF_DELETED"), 'limit' => 1)); if ($arRecord = $result->fetch()) { if (intval($arRecord["UF_DELETED"]) == 1) { $update = true; $update_id = $arRecord["ID"]; } else { exit(json_encode(array("status" => "error", "error" => "Такая запись уже есть."))); } } //money check $budget = \CUserEx::getBudget($user_id); if ($budget < 0) { exit(json_encode(array("status" => "error", "error" => "Для записи передачи пополните счет."))); } //Провеим, хватит ли пространства! $duration = strtotime($arSchedule["UF_DATE_END"]) - strtotime($arSchedule["UF_DATE_START"]); $minutes = ceil($duration / 60); $gb = $minutes * 18.5 / 1024; $busy = floatval($arUser["UF_CAPACITY_BUSY"]) + $gb; if ($busy >= floatval($arUser["UF_CAPACITY"])) { exit(json_encode(array("status" => "require-space", "error" => "Не достаточно места на диске для записи"))); } else { if (in_array($arSchedule["UF_CHANNEL_BASE_ID"], $selectedChannels)) { $log_file = "/logs/sotal/sotal_" . date("d_m_Y_H") . ".txt"; \CDev::log(array("ACTION" => "PUT_TO_RECORD", "DATA" => array("SCHEDULE_ID" => $prog_time, "DATE" => date("d.m.Y H:i:s"))), false, $log_file); if ($update) {