/** * This public static function is used by jnews_cb plugin */ public static function updateCBSubscribers($force = false, $install = false) { $db = JFactory::getDBO(); $time = isset($GLOBALS[JNEWS . 'last_sub_update']) && $GLOBALS[JNEWS . 'last_sub_update'] > 0 ? $GLOBALS[JNEWS . 'last_sub_update'] : 200000; $newTask = mktime(date("H") - 1, date("i"), date("s"), date("m"), date("d"), date("Y")); if ($force or $newTask > $GLOBALS[JNEWS . 'last_sub_update']) { $query = 'UPDATE IGNORE `#__jnews_subscribers` as S LEFT JOIN `#__users` AS U ON U.`id` = S.`user_id` SET S.`name` = U.`name`, S.`email` = U.`email`, S.`confirmed` = 1 - U.`block` WHERE U.`id` > 0 AND S.`user_id` > 0'; $db->setQuery($query); $db->query(); $xf = new jNews_Config(); $newtime = mktime(date("H", $time), date("i", $time), date("s", $time), date("m", $time), date("d", $time) - 2, date("Y", $time)); if ($install) { $newtime = 0; } $oneDay = date('Y-m-d H:i:s', $newtime); $query = 'SELECT M.* FROM `#__users` AS M ' . ' LEFT JOIN `#__jnews_subscribers` AS N ON M.email = N.email '; $query .= ' WHERE M.registerDate > \'' . $oneDay . '\''; $query .= ' AND N.id IS NULL AND M.block=0 '; $db->setQuery($query); $rows = $db->loadObjectList(); if (!empty($rows)) { foreach ($rows as $row) { $query = "INSERT INTO `#__jnews_subscribers` (`user_id`,`subscribe_date`, `name`,`email`,`confirmed`)"; $query .= " VALUES ( {$row->id} , '{$row->registerDate}', '" . addslashes($row->name) . "', '" . addslashes($row->email) . "' , 1 ) "; $db->setQuery($query); $db->query(); $xf->plus('totalsubcribers0', 1); $xf->plus('act_totalsubcribers0', 1); $lists = jNews_Lists::getLists(0, 0, null, '', true, false, false); if (!empty($lists)) { foreach ($lists as $list) { $qid[0] = jNews_Subscribers::getSubscriberId($row->registerDate); $subscriber = jNews_Subscribers::getSubscribersFromId($qid, false); $subId = array(); //if ( isset($subscriber->id) ) { //$subId[0] = $subscriber->id; // jNews_Queue::insertQueuesForNews($subId, $list->id, 29 ); ////$subscriberInfo=jNews_ListsSubs::getListidsSubscribedInfo($subscriber->id); //jNews_Queue::updateQueues($subId, '', $list->id, @$list->acc_id, true); // } } } } } $query = 'SELECT M.* FROM `#__jnews_subscribers` AS M ' . ' LEFT JOIN `#__users` AS N ON N.id = M.user_id '; $query .= ' WHERE N.registerDate > \'' . $oneDay . '\''; $query .= ' AND M.subscribe_date > \'' . $oneDay . '\''; $query .= ' AND N.id IS NULL AND M.user_id>0 ORDER BY N.id '; $db->setQuery($query); $rows = $db->loadObjectList(); if (!empty($rows)) { foreach ($rows as $row) { $query = 'DELETE FROM `#__jnews_subscribers` WHERE `id` = ' . $row->id; $db->setQuery($query); $db->query(); $xf->plus('act_totalsubcribers0', -1); jNews_ListsSubs::removeSubscription($row->id, ''); } } $query = 'SELECT N.id, N.name , N.email , N.block FROM `#__users` AS N ' . ' LEFT JOIN `#__jnews_subscribers` AS M ON N.id = M.user_id '; $query .= ' WHERE N.registerDate > \'' . $oneDay . '\''; $query .= ' AND M.subscribe_date > \'' . $oneDay . '\''; $query .= ' AND M.name != N.name OR M.email != N.email OR N.block = M.confirmed '; $db->setQuery($query); $rows = $db->loadObjectList(); if (!empty($rows)) { foreach ($rows as $row) { if ($row->block == 1) { $status = 0; } else { $status = 1; } $query = "UPDATE IGNORE `#__jnews_subscribers` SET `name` ='" . addslashes($row->name) . "' " . ", `email` = '" . addslashes($row->email) . "' " . ", `confirmed` ='" . $status . "' WHERE `user_id` = " . $row->id; $db->setQuery($query); $db->query(); } } $query = 'SELECT N.id , N.email FROM `#__users` AS N '; $query .= 'LEFT JOIN `#__jnews_subscribers` AS M ON N.email = M.email '; $query .= ' WHERE N.registerDate > \'' . $oneDay . '\''; $query .= ' AND M.subscribe_date > \'' . $oneDay . '\''; $query .= ' AND M.user_id = 0 AND N.block = 0 '; $db->setQuery($query); $rows = $db->loadObjectList(); if (!empty($rows)) { foreach ($rows as $row) { $query = "UPDATE `#__jnews_subscribers` AS S SET `user_id` = " . $row->id; $query .= " WHERE S.email = '{$row->email}'"; $db->setQuery($query); } } $xf->update('last_sub_update', time()); return true; } }