Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
| Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
|
onepunch [2019/03/01 15:10] |
onepunch [2025/03/17 19:05] (поточний) nightfly |
||
|---|---|---|---|
| Рядок 1: | Рядок 1: | ||
| + | ====== One-Punch Scripts ====== | ||
| + | {{ : | ||
| + | |||
| + | Дозволяють вам < | ||
| + | |||
| + | Доволі очевидно, | ||
| + | За допомогою One-Punch скриптів можна робити практично все, що могли б робити за допомогою якого-небудь модуля. Наприклад, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Власне так ми викликатимемо це за допомогою нашого crontab | ||
| + | |||
| + | <code bash> | ||
| + | */5 * * * * / | ||
| + | </ | ||
| + | |||
| + | А які більш практичні кейси ви можете реалізувати One-Punch скриптами? | ||
| + | |||
| + | {{: | ||
| + | |||
| + | і отримувати дані про потрібні вам поля користувача, | ||
| + | < | ||
| + | ? | ||
| + | </ | ||
| + | |||
| + | ===== Корисні приклади ===== | ||
| + | |||
| + | ==== Щоденний звіт що до діяльності ==== | ||
| + | |||
| + | А чи можна робити щось ще зрозуміліше? | ||
| + | <code php> | ||
| + | $telegramChatIds = array(' | ||
| + | |||
| + | |||
| + | $message = ''; | ||
| + | $telegram = new UbillingTelegram(); | ||
| + | $allUserData = zb_UserGetAllData(); | ||
| + | |||
| + | |||
| + | //user signups | ||
| + | $userreg = new nya_userreg(); | ||
| + | $userreg-> | ||
| + | $regsCount = $userreg-> | ||
| + | $message .= ' | ||
| + | |||
| + | //active user stats | ||
| + | if (!empty($allUserData)) { | ||
| + | $activeUsers = 0; | ||
| + | foreach ($allUserData as $io => $userData) { | ||
| + | if (bb_userIsActive($userData) == 1) { | ||
| + | $activeUsers++; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | $message .= ' | ||
| + | } | ||
| + | |||
| + | //payments stats | ||
| + | $payments = new nya_payments(); | ||
| + | $payments-> | ||
| + | $payments-> | ||
| + | $paymentsCount = $payments-> | ||
| + | $paymentsSum = $payments-> | ||
| + | $message .= ' | ||
| + | |||
| + | $payments-> | ||
| + | $payments-> | ||
| + | $payments-> | ||
| + | $paymentsCount = $payments-> | ||
| + | $paymentsSum = $payments-> | ||
| + | $message .= 'З них готівкою ' . $paymentsCount . ' платежів на суму ' . $paymentsSum .' грн.' | ||
| + | |||
| + | //payments corrections | ||
| + | $paycorr = new nya_paymentscorr(); | ||
| + | $paycorr-> | ||
| + | $allCorr = $paycorr-> | ||
| + | if (!empty($allCorr)) { | ||
| + | $message .= ' | ||
| + | $message .= ' | ||
| + | foreach ($allCorr as $io => $each) { | ||
| + | if (!ispos($each[' | ||
| + | $message .= '- ' . $allUserData[$each[' | ||
| + | . ' грн. (було ' . $each[' | ||
| + | . $each[' | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | if (!empty($message)) { | ||
| + | foreach ($telegramChatIds as $eachChatId) { | ||
| + | $telegram-> | ||
| + | // | ||
| + | } | ||
| + | } | ||
| + | |||
| + | function bb_userIsActive($userData) { | ||
| + | $result = ''; | ||
| + | if (($userData[' | ||
| + | $result = 1; | ||
| + | } | ||
| + | if (($userData[' | ||
| + | $result = 0; | ||
| + | } | ||
| + | if (($userData[' | ||
| + | $result = 0; | ||
| + | } | ||
| + | if ($userData[' | ||
| + | $result = -1; | ||
| + | } | ||
| + | return ($result); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Та відповідно щоденний виклик: | ||
| + | |||
| + | <code bash> | ||
| + | 59 19 * * * / | ||
| + | </ | ||
| + | |||
| + | ==== Щорічне нарахування АП згідно якогось тегу ==== | ||
| + | |||
| + | <code php> | ||
| + | // Config section | ||
| + | $serviceTagId = 42; //service tag ID | ||
| + | $servicePrice = 480; //per-year price | ||
| + | $chargeMethod = ' | ||
| + | $paymentTypeId = 1; //payment type ID | ||
| + | //end of config | ||
| + | |||
| + | $allUserData = zb_UserGetAllStargazerDataAssoc(); | ||
| + | $currentMonth = date(" | ||
| + | $fee = ' | ||
| + | $tagsDb = new nya_tags(); | ||
| + | $weblogsDb = new nya_weblogs(); | ||
| + | $tagsDb-> | ||
| + | $allUsersWithService = $tagsDb-> | ||
| + | $weblogsDb-> | ||
| + | $eventFilter = ' | ||
| + | $weblogsDb-> | ||
| + | $weblogsRaw = $weblogsDb-> | ||
| + | |||
| + | |||
| + | $allServiceSetupDates = array(); //service setup dates as login=> | ||
| + | |||
| + | if (!empty($weblogsRaw)) { | ||
| + | // | ||
| + | foreach ($weblogsRaw as $io => $each) { | ||
| + | |||
| + | if (preg_match(' | ||
| + | $extractedLogin = $tmpMatch[1]; | ||
| + | if (!empty($extractedLogin)) { | ||
| + | if (isset($allUsersWithService[$extractedLogin]) AND isset($allUserData[$extractedLogin])) { | ||
| + | //user exists and have required service set | ||
| + | $setupTimeStamp = strtotime($each[' | ||
| + | $setupMonth = date(" | ||
| + | $allServiceSetupDates[$extractedLogin] = $setupMonth; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | // | ||
| + | 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, | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Ну і виклик цього може виглядати як щомісячне | ||
| + | |||
| + | <code bash> | ||
| + | 50 1 1 * * /bin/ubapi " | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Примусове зняття повної АП зі всіх абонентів ==== | ||
| + | <code php> | ||
| + | set_time_limit(0); | ||
| + | $tariffPrices = zb_TariffGetPricesAll(); | ||
| + | $users = new nya_users(); | ||
| + | $users-> | ||
| + | $all = $users-> | ||
| + | $i = 0; | ||
| + | if (!empty($all)) { | ||
| + | foreach ($all as $io => $each) { | ||
| + | $userTariff = $each[' | ||
| + | if (isset($tariffPrices[$userTariff])) { | ||
| + | $userFee = $tariffPrices[$userTariff]; | ||
| + | if ($userFee > 0) { | ||
| + | $feeCharge = ' | ||
| + | // use following method to avoid payments log recording | ||
| + | // $billing-> | ||
| + | // charging some cash as payment correction | ||
| + | zb_CashAdd($each[' | ||
| + | log_register(' | ||
| + | } | ||
| + | } else { | ||
| + | show_warning(__(' | ||
| + | } | ||
| + | $i++; | ||
| + | } | ||
| + | show_info(__(' | ||
| + | } else { | ||
| + | show_error(__(' | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Кредит всім абонентам з якимись умовами ==== | ||
| + | |||
| + | <code php> | ||
| + | set_time_limit (0); | ||
| + | |||
| + | $credit = 9000; | ||
| + | $creditexpire=' | ||
| + | $cashlimit=5; | ||
| + | |||
| + | $users = new nya_users(); | ||
| + | $users-> | ||
| + | $users-> | ||
| + | $users-> | ||
| + | $users-> | ||
| + | |||
| + | |||
| + | |||
| + | $allUsers = $users-> | ||
| + | |||
| + | foreach ($allUsers as $io => $userData){ | ||
| + | $billing-> | ||
| + | log_register(' | ||
| + | $billing-> | ||
| + | log_register(' | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== Примусове зняття АП поденних тарифів за скількись днів ==== | ||
| + | |||
| + | <code php> | ||
| + | set_time_limit(0); | ||
| + | $chargeDays = 5; | ||
| + | $tariffsDb = new NyanORM(' | ||
| + | $tariffsDb-> | ||
| + | $allDailyTariffs = $tariffsDb-> | ||
| + | $allUsers = zb_UserGetAllData(); | ||
| + | if (!empty($allUsers) AND ! empty($allDailyTariffs)) { | ||
| + | foreach ($allUsers as $io => $eachUser) { | ||
| + | if (isset($allDailyTariffs[$eachUser[' | ||
| + | $tariffFee = $allDailyTariffs[$eachUser[' | ||
| + | $chargeFix = ' | ||
| + | zb_CashAdd($eachUser[' | ||
| + | log_register(' | ||
| + | show_warning(' | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== Ресет всіх користувачів на якомусь тарифі ==== | ||
| + | <code php> | ||
| + | set_time_limit(0); | ||
| + | $tariffFilter = ' | ||
| + | |||
| + | $usersDb = new nya_users(); | ||
| + | $usersDb-> | ||
| + | $allUsers = $usersDb-> | ||
| + | if (!empty($allUsers)) { | ||
| + | foreach ($allUsers as $io => $each) { | ||
| + | $billing-> | ||
| + | show_info(__(' | ||
| + | } | ||
| + | } else { | ||
| + | show_warning(__(' | ||
| + | } | ||
| + | </ | ||