Користувальницькькі налаштування

Налаштування сайту


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації до оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Допомога проекту
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

onepunch

Це стара версія документу!


One-Punch Scripts

Дозволяють вам трішки побути Сайтамою зберігати свої шматочки коду, для відлагодження в консолі розробника чи подальшого виклику їх з RemoteAPI за для розширення функціоналу вашого біллінгу, чи використання їх у ролі звітів “Майстра звітів”. Загалом, це все разом являє собою неймовірно гнучку та зручну систему розширення бізнес-логіки ваших рішень.

Доволі очевидно, що керувати ними ви можезе з “Консолі розробника”. А саме в “PHP консолі”. Так, при створенні та редагуванні скриптів усі поля є обов'язковими. Поле alias має бути унікальним і містити тільки латиницю чи цифри. Ім'я ви пишете тільки для себе, щоб розуміти, що це за шматок коду. За допомогою One-Punch скриптів можна робити практично все, що могли б робити за допомогою якого-небудь модуля.

Собственно вот так мы это вызываем при помощи crontab -e

*/5 * * * *     /bin/ubapi "onepunch&param=test1"

А какие практические кейсы вы можете реализовать? Да какие угдно, для реализации нужной вам бизнес-логки. Например на их базе вы можете сделать свое собственное REST API.

и получать данные о нужных вам полях пользователя, из ваших внешних приложений при помощи соответствующего URL. Для мобилки например так:

?module=remoteapi&key=ВАШ_СЕРИЙНИК&action=onepunch&param=getuserfield&login=sometestuser&field=mobile

Корисні приклади

Щоденний звіт що до діяльності

А можно делать что-то более понятное? Ну да. Вот вам например ежедневная нотификация в Телеграм о произошедших за день штуках:

$telegramChatIds = array('11111111', '22222222');
 
 
$message = '';
$telegram = new UbillingTelegram();
$allUserData = zb_UserGetAllData();
 
 
//user signups
$userreg = new nya_userreg();
$userreg->where('date', 'LIKE', curdate() . '%');
$regsCount = $userreg->getFieldsCount();
$message .= 'Користувачів зареєстровано сьогодні: ' . $regsCount . '\r\n ';
 
//active user stats
if (!empty($allUserData)) {
    $activeUsers = 0;
    foreach ($allUserData as $io => $userData) {
        if (bb_userIsActive($userData) == 1) {
            $activeUsers++;
        }
    }
 
    $message .= 'Всього активних користувачів на даний момент: ' . $activeUsers . '\r\n ';
}
 
//payments stats
$payments = new nya_payments();
$payments->where('date', 'LIKE', curdate() . '%');
$payments->where('summ', '>', '0');
$paymentsCount = $payments->getFieldsCount('id', false);
$paymentsSum = $payments->getFieldsSum('summ');
$message .= 'Сьогодні отримано ' . $paymentsCount . ' платежів на суму ' . $paymentsSum .' грн.'. '\r\n';
 
$payments->where('date', 'LIKE', curdate() . '%');
$payments->where('summ', '>', '0');
$payments->where('cashtypeid','=','1');
$paymentsCount = $payments->getFieldsCount('id', false);
$paymentsSum = $payments->getFieldsSum('summ');
$message .= 'З них готівкою ' . $paymentsCount . ' платежів на суму ' . $paymentsSum .' грн.'. '\r\n';
 
//payments corrections
$paycorr = new nya_paymentscorr();
$paycorr->where('date', 'LIKE', curdate() . '%');
$allCorr = $paycorr->getAll();
if (!empty($allCorr)) {
    $message .= '==========' . '\r\n ';
    $message .= 'Корегування балансу: ' . '\r\n ';
    foreach ($allCorr as $io => $each) {
        if (!ispos($each['note'], 'DDT')) {
            $message .= '- ' . $allUserData[$each['login']]['fulladress'] . ', ' . $each['summ']
                    . ' грн. (було ' . $each['balance'] . ' стало ' . ($each['balance'] + $each['summ']) . ') '
                    . $each['admin'] . ' ' . $each['note'] . ' ' . '\r\n ';
        }
    }
}
 
if (!empty($message)) {
    foreach ($telegramChatIds as $eachChatId) {
        $telegram->sendMessage($eachChatId, $message, false, 'BIGBRO');
        //deb($message);
    }
}
 
function bb_userIsActive($userData) {
    $result = '';
    if (($userData['Cash'] >= '-' . $userData['Credit']) AND ( $userData['AlwaysOnline'] == 1) AND ( $userData['Passive'] == 0) AND ( $userData['Down'] == 0)) {
        $result = 1;
    }
    if (($userData['Cash'] < '-' . $userData['Credit']) AND ( $userData['AlwaysOnline'] == 1) AND ( $userData['Passive'] == 0) AND ( $userData['Down'] == 0)) {
        $result = 0;
    }
    if (($userData['Cash'] < '-' . $userData['Credit']) AND ( $userData['AlwaysOnline'] == 1) AND ( $userData['Passive'] == 0) AND ( $userData['Down'] == 1)) {
        $result = 0;
    }
    if ($userData['Passive'] == 1) {
        $result = -1;
    }
    return ($result);
}

Та відповідно щоденний виклик:

59 19 * * *   /bin/ubapi "onepunch&param=bigbro"

Щорічне нарахування АП згідно якогось тегу

   // Config section
    $serviceTagId = 42; //service tag ID
    $servicePrice = 480; //per-year price
    $chargeMethod = 'add'; //charge operation type
    $paymentTypeId = 1; //payment type ID 
    //end of config
 
    $allUserData = zb_UserGetAllStargazerDataAssoc();
    $currentMonth = date("m");
    $fee = '-' . $servicePrice;
    $tagsDb = new nya_tags();
    $weblogsDb = new nya_weblogs();
    $tagsDb->where('tagid', '=', $serviceTagId);
    $allUsersWithService = $tagsDb->getAll('login');
    $weblogsDb->selectable(array('date', 'event'));
    $eventFilter = 'TAGADD%TAGID [' . $serviceTagId . ']';
    $weblogsDb->where('event', 'LIKE', $eventFilter);
    $weblogsRaw = $weblogsDb->getAll();
 
 
    $allServiceSetupDates = array(); //service setup dates as login=>month
 
    if (!empty($weblogsRaw)) {
        //preprocessing raw logs
        foreach ($weblogsRaw as $io => $each) {
 
            if (preg_match('!\((.*?)\)!si', $each['event'], $tmpMatch)) {
                $extractedLogin = $tmpMatch[1];
                if (!empty($extractedLogin)) {
                    if (isset($allUsersWithService[$extractedLogin]) AND isset($allUserData[$extractedLogin])) {
                        //user exists and have required service set
                        $setupTimeStamp = strtotime($each['date']);
                        $setupMonth = date("m", $setupTimeStamp);
                        $allServiceSetupDates[$extractedLogin] = $setupMonth;
                    }
                }
            }
        }
    }
    //processing fee
    if (!empty($allUsersWithService)) {
        foreach ($allUsersWithService as $eachUserLogin => $eachServiceData) {
            if (isset($allServiceSetupDates[$eachUserLogin])) {
                if ($allServiceSetupDates[$eachUserLogin] == $currentMonth) {
                    //now is required to charge fee
                    zb_CashAdd($eachUserLogin, $fee, $chargeMethod, $paymentTypeId, 'EXTFEE');
                }
            }
        }
    }

Ну и вызов этого, может выглядеть как ежемесячное

50 1 1 * *      /bin/ubapi "onepunch&param=yearcharge"

Примусове зняття повної АП зі всіх абонентів

    set_time_limit(0);
    $tariffPrices = zb_TariffGetPricesAll();
    $users = new nya_users();
    $users->where('Passive', '=', 0);
    $all = $users->getAll();
    $i = 0;
    if (!empty($all)) {
        foreach ($all as $io => $each) {
            $userTariff = $each['Tariff'];
            if (isset($tariffPrices[$userTariff])) {
                $userFee = $tariffPrices[$userTariff];
                if ($userFee > 0) {
                    $feeCharge = '-' . $userFee;
                    // use following method to avoid payments log recording
                    // $billing->addcash($each['login'], $feeCharge);
                    // charging some cash as payment correction
                    zb_CashAdd($each['login'], $feeCharge, 'correct', 1, 'FEE');
                    log_register('CHANGE FixStargazerFee (' . $each['login'] . ') ON ' . $feeCharge);
                }
            } else {
                show_warning(__('Skipping') . ' ' . $each['login']);
            }
            $i++;
        }
        show_info(__('users processed') . ': ' . $i);
    } else {
        show_error(__('No') . ' ' . __('Users'));
    }

Кредит всім абонентам з якимись умовами

set_time_limit (0);
 
$credit = 9000;
$creditexpire='2023-01-06';
$cashlimit=5;
 
$users = new nya_users();
$users->where('Down','=','0');
$users->where('Passive','=','0');
$users->where('Credit','<','10');
$users->where('Cash','<',$cashlimit);
 
 
 
$allUsers = $users->getAll('login');
 
foreach ($allUsers as $io => $userData){
  $billing->setcredit($userData['login'], $credit);
  log_register('CHANGE FixCredit ('.$userData['login'].') ON '.$credit);
  $billing->setcreditexpire($userData['login'],$creditexpire);
  log_register('CHANGE CreditExpire ('.$userData['login'].') ON '.$creditexpire);
}
onepunch.1672418483.txt.gz · Востаннє змінено: 2022/12/30 18:41 повз nightfly