Инструменты пользователя

Инструменты сайта


Боковая панель

Разделы

Общее описание
История изменений
Рекомендации к обновлению
Планы на будущее
Известные проблемы
Онлайн демо
Случайная статья
Видео
Помощь проекту
Люди

FAQ



Редактировать сайдбар

onepunch

One-Punch Scripts

Позволяют вам немного побыть Сайтамой сохранять свои заготовки кода, для отладки в консоли разработчика или последующего вызова из RemoteAPI.

Вполне себе очевидно, что управлять ими вы можете в «Консоли разработчика» а именно в «PHP консоли». Также вы можете при желании импортировать ваши старые шаблоны кода, если они у вас были. Важно: после импорта шаблоны кода удаляются из базы. Да, при создании и редактировании скриптов все поля являются обязательными. Поле alias должно быть уникальным и содержать только латиницу и цифры. Имя вы пишете только для себя, чтобы понимать что это за кусок кода.

При помощи One-Punch скриптов вы можете делать практически все, что могли бы делать при помощи любого модуля. Например ресет какого-то юзера раз в 5 минут :)

Собственно вот так мы это вызываем при помощи 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"
onepunch.txt · Последние изменения: 2021/03/29 10:11 — nightfly