File Manager

Current Directory: /home/astoriaah/www/old15/components/com_foxcontact/helpers
Viewing File: /home/astoriaah/www/old15/components/com_foxcontact/helpers/jnews.php
<?php defined("_JEXEC") or die(file_get_contents("index.html")); // Program: Fox Contact for Joomla // Copyright (C): 2011 Demis Palma // Thanks to: Lorenzo Milesi (YetOpen S.r.l. maxxer@yetopen.it http://www.yetopen.it/) for his great contribution // Documentation: http://www.fox.ra.it/forum/2-documentation.html // License: Distributed under the terms of the GNU General Public License GNU/GPL v3 http://www.gnu.org/licenses/gpl-3.0.html $inc_dir = realpath(dirname(__FILE__)); require_once($inc_dir . '/fnewsletter.php'); class FJNewsSubscriber extends FNewsletter { public function __construct(&$params, FoxMessageBoard &$messageboard, &$fieldsbuilder) { parent::__construct($params, $messageboard, $fieldsbuilder); $this->Name = "FJNews"; $this->prefix = "jnews"; } public function Process() { // Newsletter component disabled or not found. Aborting. if (!$this->enabled) return true; $config = new jNews_Config(); // Build subscriber object $subscriber = new stdClass; // Lists $cumulative = $this->JInput->post->get("jnews_subscribe_cumulative", NULL, "int"); $checkboxes = $this->JInput->post->get("jnews_subscribe", array(), "array"); $subscriber->list_id = $cumulative ? $checkboxes : array(); // No lists selected. Skip here to avoid annoying the user with email confirmation. It is useless to confirm a subscription to no lists. if (empty($subscriber->list_id)) return true; // Name field may be absent. JNews will assign an empty name to the user. $subscriber->name = isset($this->FieldsBuilder->Fields['sender0']) ? $this->FieldsBuilder->Fields['sender0']['Value'] : ""; $subscriber->email = empty($this->FieldsBuilder->Fields['sender1']['Value']) ? NULL : JMailHelper::cleanAddress($this->FieldsBuilder->Fields['sender1']['Value']); // JNews saves users with empty email address, so we have to check it if (empty($subscriber->email)) { $this->logger->Write(get_class($this) . " Process(): Email address empty. User save aborted."); return true; } // It seems that $subscriber->confirmed defaults to unconfirmed if unset, so we need to read and pass the actual value from the configuration $subscriber->confirmed = !(bool)$config->get('require_confirmation'); $subscriber->receive_html = 1; // Avoid Notice: Undefined property while JNews libraries access undefined properties $subscriber->ip = jNews_Subscribers::getIP(); $subscriber->subscribe_date = jnews::getNow(); $subscriber->language_iso = "eng"; $subscriber->timezone = "00:00:00"; $subscriber->blacklist = 0; $subscriber->user_id = JFactory::getUser()->id; // Subscription $sub_id = null; jNews_Subscribers::saveSubscriber($subscriber, $sub_id, true); if (empty($sub_id)) { // User save failed. Probably email address is empty or invalid $this->logger->Write(get_class($this) . " Process(): User save failed"); return true; } // Subscribe $subscriber to $subscriber->list_id //$subscriber->id = $sub_id; // jNews_ListsSubs::saveToListSubscribers() doesn't work well. When only one list is passed to, it reads the value $listids[0], // but the element 0 is not always the first element of the array. In our case is $listids[1] //jNews_ListsSubs::saveToListSubscribers($subscriber); $this->SaveSubscription($subscriber); // Log $this->logger->Write(get_class($this) . " Process(): subscribed " . $this->FieldsBuilder->Fields['sender0']['Value'] . " (". $this->FieldsBuilder->Fields ['sender1']['Value'] . ") to lists " . implode(",", $subscriber->list_id)); return true; } protected function load_newsletter_config() { if (!(bool)$this->Params->get("jnews")) return $this->enabled = false; // Load JNews classes defined("JNEWS_JPATH_ROOT") or define("JNEWS_JPATH_ROOT", JPATH_ROOT); $mainAdminPathDefined = JPATH_ROOT . '/components/com_jnews/defines.php'; $this->enabled = (bool)@include_once($mainAdminPathDefined); $jnews_include = JNEWS_JPATH_ROOT . '/administrator/components/' . JNEWS_OPTION . '/classes/class.jnews.php'; $this->enabled &= (bool)@include_once($jnews_include); $found = $this->enabled ? " " : " not "; $this->logger->Write(get_class($this) . " Newsletter component" . $found . "found"); } protected function load_newsletter_lists() { // Prepare at least an empty array $this->lists = array(); // Is this newsletter integration enabled in the parameters? if (!$this->enabled) return; // Ensure that the table exists, otherwise an sql error will be raised: #1146 - Table 'db.prefix_newsletter' doesn't exist if (!$this->extension_exists("jnews")) return; // Get the lists selected to be shown. Defaults to a null array $lists = $this->Params->get("jnews_lists", array("NULL")); $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select($db->quoteName("id") . "," . $db->quoteName("hidden") . " as " . $db->quoteName("visible") . "," . $db->quoteName("list_name") . " as " . $db->quoteName("name")); // JNews "hidden" means "visible" $query->from($db->quoteName("#__jnews_lists")); // Condition: Published $query->where($db->quoteName("published") . "=" . $db->quote("1")); // Do not use Visible as condition, so that invisible lists are hidden but usable // Condition: List selected to be shown $query->where($db->quoteName("id") . " IN (" . implode(',', $lists) .")"); $db->setQuery($query); // Get the definitive lists to be shown. Defaults to an empty array $this->lists = $db->loadAssocList() or $this->lists = array(); } function SaveSubscription($subscriber) { if (empty($subscriber->list_id) || empty($subscriber->id)) return false; $db = JFactory::getDBO(); $query = $db->getQuery(true); foreach ($subscriber->list_id as $listid) { $query->clear(); $query->update($db->quoteName("#__jnews_listssubscribers")); $query->set($db->quoteName("subdate") . "=" . time()); $query->set($db->quoteName("unsubdate") . "= 0"); $query->set($db->quoteName("unsubscribe") . "= 0"); $query->where($db->quoteName("list_id") . "=" . (int)$listid); $query->where($db->quoteName("subscriber_id") . "=" . (int)$subscriber->id); $db->setQuery($query); try { $result = $db->execute(); $affected = $db->getAffectedRows(); switch ($affected) { case -1: // Yes, JDatabase::getErrorMsg() is deprecated (use exception handling instead) // but if JDatabase::execute() raised an exception we weren't here :) JFactory::getApplication()->enqueueMessage($db->getErrorMsg(true), "error"); break; case 0: // No records updated. Need to be inserted. $query->clear(); $query->insert($db->quoteName("#__jnews_listssubscribers")); $query->set($db->quoteName("list_id") . "=" . (int)$listid); $query->set($db->quoteName("subscriber_id") . "=" . (int)$subscriber->id); $query->set($db->quoteName("subdate") . "=" . time()); $query->set($db->quoteName("unsubdate") . "= 0"); $query->set($db->quoteName("unsubscribe") . "= 0"); $db->setQuery($query); try { $result = $db->execute(); if (!$result) { // Yes, JDatabase::getErrorMsg() is deprecated (use exception handling instead) // but if JDatabase::execute() raised an exception we weren't here :) JFactory::getApplication()->enqueueMessage($db->getErrorMsg(true), "error"); } } catch (RuntimeException $e) { JFactory::getApplication()->enqueueMessage($e->getMessage(), "error"); } break; //default: // One (or more) records updated. Do nothing. } } catch (RuntimeException $e) { JFactory::getApplication()->enqueueMessage($e->getMessage(), "error"); } } return true; } }