Файловый менеджер - Редактировать - /home/lmsyaran/public_html/joomla5/plugins/fabrik_cron/php/scripts/fabsubs.php
Назад
<?php // Check to ensure this file is included in Joomla! defined('_JEXEC') or die(); use Joomla\CMS\Table\Table; use Joomla\CMS\Factory; use Joomla\CMS\Utility\Utility; error_reporting(E_ALL); ini_set('max_execution_time', 300); jimport('joomla.mail.helper'); Table::addIncludePath(JPATH_ROOT . '/plugins/fabrik_form/subscriptions/tables'); //Table::addIncludePath(JPATH_ROOT . '/plugins/fabrik_cron/php/scripts/tables'); //require_once JPATH_ROOT . '/plugins/fabrik_cron/php/scripts/ipn.php'; require_once JPATH_ROOT . '/plugins/fabrik_form/subscriptions/scripts/ipn.php'; $db = FabrikWorker::getDbo(); $db->setQuery("SELECT *, CASE WHEN timeunit = 'Y' THEN 365 * time_value WHEN timeunit = 'M' THEN 30 * time_value WHEN timeunit = 'W' THEN 7 * time_value WHEN timeunit = 'D' THEN time_value END as emailday FROM #__fabrik_subs_cron_emails WHERE event_type = 'auto_renewal'"); $auto_renewal_mails = $db->loadObjectList('emailday'); //echo $db->getQuery(); $db->setQuery("SELECT *, CASE WHEN timeunit = 'Y' THEN 365 * time_value WHEN timeunit = 'M' THEN 30 * time_value WHEN timeunit = 'W' THEN 7 * time_value WHEN timeunit = 'D' THEN time_value END as emailday FROM #__fabrik_subs_cron_emails WHERE event_type = 'expiration'"); $expiration_mails = $db->loadObjectList('emailday'); $config = Factory::getApplication()->getConfig(); $sitename = $config->get('sitename'); $mailfrom = $config->get('mailfrom'); $fromname = $config->get('fromname'); $url = str_replace('/administrator', '', JURI::base()); $db->setQuery("SELECT s.id AS subid, p.id AS planid, pbc.duration, p.plan_name AS subscription, pbc.period_unit, u.username, u.email, u.name, s.userid, s.signup_date, '$sitename' AS sitename, '$mailfrom' AS mailfrom, '$url' AS url, '$fromname' AS fromname, s.recurring, s.lastpay_date, CASE WHEN pbc.period_unit = 'Y' THEN date_add(lastpay_date , interval pbc.duration year) WHEN pbc.period_unit = 'M' THEN date_add(lastpay_date , interval pbc.duration month) WHEN pbc.period_unit = 'W' THEN date_add(lastpay_date , interval pbc.duration week) WHEN pbc.period_unit = 'D' THEN date_add(lastpay_date , interval pbc.duration day) END AS renew_date , CASE WHEN pbc.period_unit = 'Y' THEN datediff(date_add(lastpay_date , interval pbc.duration year), now()) WHEN pbc.period_unit = 'M' THEN datediff(date_add(lastpay_date , interval pbc.duration month), now()) WHEN pbc.period_unit = 'W' THEN datediff(date_add(lastpay_date , interval pbc.duration week), now()) WHEN pbc.period_unit = 'D' THEN datediff(date_add(lastpay_date , interval pbc.duration day), now()) END AS daysleft FROM `#__fabrik_subs_subscriptions` AS s LEFT JOIN #__users AS u ON u.id = s.userid INNER JOIN #__fabrik_subs_plans AS p ON p.id = s.plan INNER JOIN #__fabrik_subs_plan_billing_cycle AS pbc ON pbc.id = s.billing_cycle_id INNER JOIN #__fabrik_subs_payment_gateways AS g ON g.id = s.type WHERE s.status = 'Active' AND s.lifetime = 0 and p.free = 0 ORDER BY daysleft "); $res = $db->loadObjectList(); //var_dump($db->getQuery(), $res);exit; foreach ($res as $row) { if (array_key_exists($row->daysleft, $auto_renewal_mails) && $row->recurring == 1) { $mail = clone($auto_renewal_mails[$row->daysleft]); foreach ($row as $k=>$v) { $mail->subject = str_replace('{'.$k.'}', $v, $mail->subject); $mail->body = str_replace('{'.$k.'}', $v, $mail->body); } echo "would mail: " . $row->email; //$res = Utility::sendMail($mailfrom, $fromname, $row->email, $mail->subject, $mail->body, true); } if (array_key_exists($row->daysleft, $expiration_mails) && $row->recurring == 0) { $mail = clone($expiration_mails[$row->daysleft]); foreach ($row as $k=>$v) { $mail->subject = str_replace('{'.$k.'}', $v, $mail->subject); $mail->body = str_replace('{'.$k.'}', $v, $mail->body); } echo "would mail: " . $row->email; //$res = Utility::sendMail($mailfrom, $fromname, $row->email, $mail->subject, $mail->body, true); } } // get list of valid subs users $db->setQuery("SELECT s.userid AS userid, u.username, u.name, u.email, pbc.plan_name, s.recurring FROM `#__fabrik_subs_subscriptions` AS s INNER JOIN #__fabrik_subs_plans AS p ON p.id = s.plan INNER JOIN #__fabrik_subs_plan_billing_cycle AS pbc ON pbc.id = s.billing_cycle_id INNER JOIN #__users AS u ON u.id = s.userid WHERE s.status = 'Active' AND s.lifetime = 0 AND ( CASE WHEN pbc.period_unit = 'Y' THEN datediff(date_add(lastpay_date , interval pbc.duration year), now()) WHEN pbc.period_unit = 'M' THEN datediff(date_add(lastpay_date , interval pbc.duration month), now()) WHEN pbc.period_unit = 'W' THEN datediff(date_add(lastpay_date , interval pbc.duration week), now()) WHEN pbc.period_unit = 'D' THEN datediff(date_add(lastpay_date , interval pbc.duration day), now()) END > 0 OR ( expiration != '0000-00-00 00:00:00' AND CASE WHEN pbc.period_unit = 'Y' THEN datediff(date_add(expiration , interval pbc.duration year), now()) WHEN pbc.period_unit = 'M' THEN datediff(date_add(expiration , interval pbc.duration month), now()) WHEN pbc.period_unit = 'W' THEN datediff(date_add(expiration , interval pbc.duration week), now()) WHEN pbc.period_unit = 'D' THEN datediff(date_add(expiration , interval pbc.duration day), now()) END > 0 ) ) "); $validSubsUserIds = $db->loadObjectList('userid'); //var_dump($validSubsUserIds); //expire subs that have expired. Create fall back plan if required $db->setQuery("SELECT s.userid, u.username, s.lastpay_date, s.id AS subid, pbc.plan_name FROM `#__fabrik_subs_subscriptions` AS s INNER JOIN #__fabrik_subs_plans AS p ON p.id = s.plan INNER JOIN #__fabrik_subs_plan_billing_cycle AS pbc ON pbc.id = s.billing_cycle_id INNER JOIN #__users AS u ON u.id = s.userid WHERE s.status = 'Active' AND s.lifetime = 0 AND ( CASE WHEN pbc.period_unit = 'Y' THEN datediff(date_add(lastpay_date , interval pbc.duration year), now()) WHEN pbc.period_unit = 'M' THEN datediff(date_add(lastpay_date , interval pbc.duration month), now()) WHEN pbc.period_unit = 'W' THEN datediff(date_add(lastpay_date , interval pbc.duration week), now()) WHEN pbc.period_unit = 'D' THEN datediff(date_add(lastpay_date , interval pbc.duration day), now()) END <= 0 OR ( expiration != '0000-00-00 00:00:00' AND CASE WHEN pbc.period_unit = 'Y' THEN datediff(date_add(expiration , interval pbc.duration year), now()) WHEN pbc.period_unit = 'M' THEN datediff(date_add(expiration , interval pbc.duration month), now()) WHEN pbc.period_unit = 'W' THEN datediff(date_add(expiration , interval pbc.duration week), now()) WHEN pbc.period_unit = 'D' THEN datediff(date_add(expiration , interval pbc.duration day), now()) END <= 0 ) ) ORDER BY s.lastpay_date "); $recalibratedUserIds = array(); $ipn = new FabrikSubscriptionsIPN(); $rows = $db->loadObjectList(); //var_dump($db->getQuery(), $rows);exit; $now = Factory::getDate()->toSql(); $sub = FabTable::getInstance('Subscription', 'FabrikTable'); foreach ($rows as $row) { $sub->load($row->subid); $sub->status = 'Expired'; $sub->eot_date = $now; echo "store Expired sub: " . $sub->id . " : " . $row->userid . " : " . $row->plan_name . "<br />\n"; $sub->store(); } foreach ($rows as $row) { echo "recalibrate user: " . $row->username . ' : ' . $row->lastpay_date; echo "<br />\n"; $ipn->recalibrateUser($row->userid); } /* echo "<br />\nActive Subs<br />\n"; foreach ($validSubsUserIds as $v) { //$ipn->recalibrateUser($v->userid); echo $v->username . "(" . $v->name . " - " . $v->email . ") : " . $v->plan_name; if ($v->recurring == 1) { echo " (recurring)"; } echo "<br />\n"; } echo "<br />\nValid subs total: " . count($validSubsUserIds) . "<br />\n"; echo "Recalibrated total: " . count($recalibratedUserIds) . "<br />\n"; $db->setQuery("SELECT s.userid, u.username, s.lastpay_date, s.id AS subid, pbc.plan_name FROM `#__fabrik_subs_subscriptions` AS s INNER JOIN #__fabrik_subs_plans AS p ON p.id = s.plan INNER JOIN #__fabrik_subs_plan_billing_cycle AS pbc ON pbc.id = s.billing_cycle_id INNER JOIN #__users AS u ON u.id = s.userid WHERE s.status = 'Expired' AND s.lifetime = 0 GROUP BY s.userid LIMIT 700,100 "); $rows = $db->loadObjectList(); foreach ($rows as $row) { echo "expired: " . $row->username . "<br />\n"; $ipn->recalibrateUser($row->userid); } echo "total: " . count($rows); */ exit;
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0.02 |
proxy
|
phpinfo
|
Настройка