コード例 #1
0
ファイル: Main.php プロジェクト: Alex300/subscribe
 /**
  * Запуск текущих рассылок
  * php cli.php --a subscribe.main.run > subscribe.log
  * php /path/to/your/site/cli.php --a subscribe.main.run > /path/to/your/site/log/subscribe.log
  */
 public function runAction()
 {
     echo "---------------------------------------------------------------------------\n";
     // Проверка рассылок, выполнение которых могло завершиться ошибкой
     $condition = array(array('next_run', date('Y-m-d H:i:s', cot::$sys['now']), '<='), array('active', 1), array('periodical', 1), array('running', 1));
     $items = subscribe_model_Subscribe::find($condition);
     if (!empty($items)) {
         foreach ($items as $itemRow) {
             $pingTime = 0;
             if (!empty($itemRow->ping)) {
                 $pingTime = strtotime($itemRow->ping);
             }
             // "Запущенная" когда-то рассылка уже ничего не делает более получаса. Вероятно она отвалилась
             if (!$pingTime || cot::$sys['now'] - $pingTime > 1800) {
                 $itemRow->ping = '1970-01-01 00:00:00';
                 $itemRow->running = 0;
                 // Считаем следующий запуск
                 $itemRow->next_run = $itemRow->getNextRunDate();
                 $itemRow->save();
                 unset($itemRow);
                 exit;
             }
         }
         unset($items);
     }
     // Получаем список рассылок:
     $condition = array(array('next_run', date('Y-m-d H:i:s', cot::$sys['now']), '<='), array('SQL', 'last_executed < next_run'), array('active', 1), array('running', 0));
     $items = subscribe_model_Subscribe::find($condition);
     if (!$items) {
         echo "There are no scheduled mailings at this time\n";
         ob_flush();
         exit;
     }
     /* === Hook === */
     foreach (cot_getextplugins('subscribe.run.main') as $pl) {
         include $pl;
     }
     /* ===== */
     /* === Hook - Part1 : Set === */
     $extp = cot_getextplugins('subscribe.run.loop');
     /* ===== */
     foreach ($items as $itemRow) {
         echo "Running: " . htmlspecialchars(strip_tags($itemRow->title)) . "\n";
         ob_flush();
         $lastSent = 0;
         $execute = true;
         /* === Hook - Part2 : Include === */
         foreach ($extp as $pl) {
             include $pl;
         }
         /* ===== */
         if ($execute) {
             // Установить флаг запущенной рассылки
             $itemRow->running = 1;
             $itemRow->save();
             // Запустить рассылку
             $customFunc = '';
             if (!empty($itemRow->alias)) {
                 $customFunc = 'subscribe_run_' . $itemRow->alias;
             }
             if (!empty($customFunc) && function_exists($customFunc)) {
                 $lastSent = $customFunc($itemRow);
             } else {
                 $lastSent = static::subscribeRun($itemRow);
             }
         }
         // Сбросить флаг запущенной рассылки
         $itemRow->running = 0;
         $itemRow->last_sent = $lastSent;
         if ($lastSent !== false) {
             // Время последнего выполнения в случае успешного выполнения
             $itemRow->last_executed = date('Y-m-d H:i:s');
             if ($itemRow->periodical) {
                 $itemRow->next_run = $itemRow->getNextRunDate();
             } else {
                 // Если рассылка не периодическая, после выполнения, отключить ее
                 $itemRow->active = 0;
             }
         }
         if ($lastSent > 0) {
         } elseif ($lastSent === false) {
             echo " - [ERROR] An error occurred during execution\n";
         } else {
             echo " - No letter sent. Error or no subscribers\n";
         }
         $itemRow->save();
     }
     return '';
 }
コード例 #2
0
ファイル: AdminMain.php プロジェクト: Alex300/subscribe
 /**
  * Список рассылок
  * @return string
  * @throws Exception
  */
 public function indexAction()
 {
     global $admintitle, $adminpath, $Ls;
     $admintitle = cot::$L['subscribe_subscribes'];
     $adminpath[] = array(cot_url('admin', array('m' => 'subscribe')), $admintitle);
     $sort = cot_import('s', 'G', 'ALP');
     // order field name
     $way = cot_import('w', 'G', 'ALP', 4);
     // order way (asc, desc)
     $maxrowsperpage = cot::$cfg['maxrowsperpage'];
     if ($maxrowsperpage < 1) {
         $maxrowsperpage = 1;
     }
     list($pg, $d, $durl) = cot_import_pagenav('d', $maxrowsperpage);
     //page number for pages list
     /* === Hook === */
     foreach (cot_getextplugins('subscribe.admin.list.first') as $pl) {
         include $pl;
     }
     /* ===== */
     $sort = empty($sort) ? 'title' : $sort;
     $way = empty($way) || !in_array($way, array('asc', 'desc')) ? 'asc' : $way;
     $urlParams = array('m' => 'subscribe');
     if ($sort != 'title') {
         $urlParams['s'] = $sort;
     }
     if ($way != 'asc') {
         $urlParams['w'] = $way;
     }
     $where = array();
     $states = array(-1 => cot::$R['code_option_empty'], 0 => cot::$L['Disabled'], 1 => cot::$L['Enabled']);
     // Фильтры
     $allowedFilters = array('id', 'title', 'active');
     $f = cot_import('f', 'G', 'ARR');
     $filterForm = array('hidden' => '');
     if (!empty($f)) {
         foreach ($f as $key => $val) {
             if (!in_array($key, $allowedFilters)) {
                 unset($f[$key]);
             }
         }
         if (!empty($f['id'])) {
             $where['id'] = array('id', $f['id']);
             $urlParams['f[id]'] = $f['id'];
         }
         $f['active'] = isset($_GET['f']['active']) ? cot_import($_GET['f']['active'], 'D', 'INT') : -2;
         if ($f['active'] == -1) {
             unset($where['active']);
         } elseif ($f['active'] >= 0 && $f['active'] < 2) {
             $where['active'] = array('active', $f['active']);
             $urlParams['f[active]'] = $f['active'];
         }
         if (!empty($f['title'])) {
             $where['title'] = array('title', '*' . $f['title'] . '*');
             $urlParams['f[title]'] = $f['title'];
         }
     }
     if (isset(cot::$cfg['plugin']['urleditor']) && cot::$cfg['plugin']['urleditor']['preset'] != 'handy') {
         $filterForm['hidden'] .= cot_inputbox('hidden', 'm', 'brs');
     }
     $condition = array();
     foreach ($where as $key => $val) {
         $condition[] = $val;
     }
     $order = array(array($sort, $way));
     /* === Hook === */
     foreach (cot_getextplugins('subscribe.admin.list.query') as $pl) {
         include $pl;
     }
     /* ===== */
     $totallines = subscribe_model_Subscribe::count($condition);
     $items = null;
     if ($totallines > 0) {
         $items = subscribe_model_Subscribe::find($condition, $maxrowsperpage, $d, $order);
     }
     // Если передан номер страницы превышающий максимальный
     if (empty($items) && $totallines > 0 && $pg > 1) {
         $totalpages = ceil($totallines / $maxrowsperpage);
         $args = $urlParams;
         if ($totalpages > 1) {
             if (cot::$cfg['easypagenav']) {
                 $args['d'] = $totalpages;
             } else {
                 $args['d'] = ($totalpages - 1) * $maxrowsperpage;
             }
         }
         cot_redirect(cot_url('admin', $args, '', true));
     }
     $addNewUrl = cot_url('admin', array('m' => 'subscribe', 'a' => 'edit'));
     /* === Hook === */
     foreach (cot_getextplugins('subscribe.admin.list.main') as $pl) {
         include $pl;
     }
     /* ===== */
     $pagenav = cot_pagenav('admin', $urlParams, $d, $totallines, $maxrowsperpage, 'd', '', true);
     if (empty($pagenav['current'])) {
         $pagenav['current'] = 1;
     }
     $pagenav['page'] = $pagenav['current'];
     if (!cot::$cfg['easypagenav']) {
         $pagenav['page'] = ($pagenav['current'] - 1) * $maxrowsperpage;
     }
     $template = array('subscribe', 'admin', 'list');
     $view = new View();
     $view->page_title = $admintitle;
     $view->fistNumber = $d + 1;
     $view->items = $items;
     $view->totalitems = $totallines;
     $view->filterForm = $filterForm;
     $view->pagenav = $pagenav;
     $view->addNewUrl = $addNewUrl;
     $view->urlParams = $urlParams;
     $view->filter = $f;
     $view->states = $states;
     /* === Hook === */
     foreach (cot_getextplugins('subscribe.admin.list.view') as $pl) {
         include $pl;
     }
     /* ===== */
     return $view->render($template);
 }
コード例 #3
0
ファイル: User.php プロジェクト: Alex300/subscribe
 /**
  * Список рассылок
  *
  * @return string
  * @throws Exception
  */
 public function indexAction()
 {
     $uid = cot_import('uid', 'G', 'INT');
     if (!$uid || !cot::$usr['isadmin']) {
         $uid = cot::$usr['id'];
     }
     // Мои подписки - только для авторизованных пользователей
     if (!$uid) {
         cot_die_message('404');
     }
     $user = cot_user_data($uid);
     if (!$user) {
         cot_die_message('404');
     }
     cot::$out['canonical_uri'] = cot_url('subscribe', array('m' => 'user', 'uid' => $uid));
     $urlParams = array('m' => 'user');
     if ($uid != cot::$usr['id']) {
         $urlParams['uid'] = $uid;
     }
     $crumbs = array();
     if ($uid != cot::$usr['id']) {
         cot::$out['subtitle'] = $title = cot::$L['subscribe_user_subscribes'] . ': ' . cot_user_full_name($user);
         $crumbs[] = array(cot_url("users"), cot::$L['Users']);
         $crumbs[] = array(cot_url("users", "m=details&id=" . $user["user_id"] . "&u=" . $user["user_name"]), cot_user_full_name($user));
         $crumbs[] = cot::$L['subscribe_user_subscribes'];
         $urlParams['uid'] = $user['user_id'];
     } else {
         cot::$out['subtitle'] = $title = cot::$L['subscribe_my'];
         $crumbs[] = array(cot_url('users', array('m' => 'details')), cot::$L['subscribe_my_page']);
         $crumbs[] = cot::$L['subscribe_my'];
     }
     /* === Hook === */
     foreach (cot_getextplugins('subscribe.user.list.query') as $pl) {
         include $pl;
     }
     /* ===== */
     // Все подписки данного пользователя
     $userSubscribes = subscribe_model_Subscriber::find(array(array('user', $uid), array('email', $user['user_email'], '=', 'OR')), 0, 0, array(array('active', 'desc')));
     $subIds = array();
     $totallines = 0;
     if ($userSubscribes) {
         $totallines = count($userSubscribes);
         foreach ($userSubscribes as $subscriberRow) {
             $subIds[] = $subscriberRow->rawValue('subscribe');
         }
     }
     $subscribes = null;
     if (!empty($subIds)) {
         $subIds = array_unique($subIds);
         $subscribes = subscribe_model_Subscribe::find(array(array('id', $subIds)), 0, 0, array(array('title', 'asc')));
         if (!empty($subscribes)) {
             foreach ($userSubscribes as $key => $subscriberRow) {
                 // маловероятная ситуация, но все же
                 if (!isset($subscribes[$subscriberRow->rawValue('subscribe')])) {
                     // Рассылки больше не существует.
                     // Удалить подписку
                     $subscriberRow->delete();
                     unset($userSubscribes[$key]);
                 }
             }
         }
     }
     Resources::linkFileFooter(cot::$cfg['modules_dir'] . '/subscribe/js/subscriber.js');
     $breadcrumbs = '';
     if (!empty($crumbs)) {
         $breadcrumbs = cot_breadcrumbs($crumbs, cot::$cfg['homebreadcrumb'], true);
     }
     $template = array('subscribe', 'user', 'list');
     $view = new View();
     $view->breadcrumbs = $breadcrumbs;
     $view->page_title = htmlspecialchars($title);
     $view->fistNumber = 1;
     $view->userSubscribes = $userSubscribes;
     $view->subscribes = $subscribes;
     $view->totalitems = $totallines;
     $view->user = $user;
     /* === Hook === */
     foreach (cot_getextplugins('subscribe.user.list.view') as $pl) {
         include $pl;
     }
     /* ===== */
     return $view->render($template);
 }