Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
onepunch [2018/07/20 01:10] |
onepunch [2024/07/02 13:51] (поточний) 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(__(' | ||
+ | } | ||
+ | </ |