Back to PhocacartNewsletter class

Method storeSubscriber

public static
storeSubscriber
(mixed $name, mixed $email, mixed $privacy)

Method storeSubscriber - Source code

public static function storeSubscriber($name, $email, $privacy)
{
    // PHOCA EMAIL COMPONENT NEEDED
    $comPhocaemail = PhocacartUtilsExtension::getExtensionInfo('com_phocaemail');
    if ($comPhocaemail) {
        $lang = Factory::getLanguage();
        $lang->load('com_phocaemail');
        if (File::exists(JPATH_ADMINISTRATOR . '/components/com_phocaemail/helpers/phocaemail.php')) {
            require_once JPATH_ADMINISTRATOR . '/components/com_phocaemail/helpers/phocaemail.php';
        }
        if (File::exists(JPATH_ADMINISTRATOR . '/components/com_phocaemail/helpers/phocaemailutils.php')) {
            require_once JPATH_ADMINISTRATOR . '/components/com_phocaemail/helpers/phocaemailutils.php';
        }
        if (File::exists(JPATH_ADMINISTRATOR . '/components/com_phocaemail/helpers/phocaemailsendnewsletteremail.php')) {
            require_once JPATH_ADMINISTRATOR . '/components/com_phocaemail/helpers/phocaemailsendnewsletteremail.php';
        }
        if (File::exists(JPATH_ADMINISTRATOR . '/components/com_phocaemail/tables/phocaemailsubscriber.php')) {
            require_once JPATH_ADMINISTRATOR . '/components/com_phocaemail/tables/phocaemailsubscriber.php';
        }
        Table::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_phocaemail/tables');
        $app = Factory::getApplication();
        $db = Factory::getDBO();
        $pE = ComponentHelper::getParams('com_phocaemail');
        $pC = PhocacartUtils::getComponentParameters();
        $newsletter_enable = $pC->get('newsletter_enable', 0);
        $newsletter_activate = $pC->get('newsletter_activate', 0);
        $newsletter_mailinglist = $pC->get('newsletter_mailinglist', array());
        if ($newsletter_enable == 0) {
            return false;
        }
        $data = array();
        $data['name'] = $name;
        $data['email'] = $email;
        $data['privacy'] = (int) $privacy;
        $data['date'] = gmdate('Y-m-d H:i:s');
        $data['date_register'] = gmdate('Y-m-d H:i:s');
        $data['token'] = PhocaEmailHelper::getToken();
        $data['active'] = 0;
        if ($newsletter_activate == 1) {
            $data['active'] = 1;
            $data['date_active'] = gmdate('Y-m-d H:i:s');
        }
        $data['published'] = 1;
        $data['hits'] = 0;
        $data['type'] = 2;
        // Phoca Cart
        // Test - if there is active user, inactive user with many requests,
        $query = 'SELECT a.id, a.active, a.hits' . ' FROM #__phocaemail_subscribers AS a' . ' WHERE a.email = ' . $db->quote($data['email']) . ' LIMIT 1';
        $db->setQuery($query);
        $userSub = $db->loadObject();
        // X) ACTIVE USER
        if (isset($userSub->active) && $userSub->active == 1) {
            return false;
            //COM_PHOCAEMAIL_YOUR_SUBSCRIPTION_IS_ACTIVE
        }
        // X) UPDATE HITS - ATTEMPTS
        if (isset($userSub->hits) && (int) $userSub->hits > 0) {
            $userSub->hits++;
            // This attempts must be counted
            $data['hits'] = (int) $userSub->hits;
        } else {
            $data['hits'] = 1;
        }
        // X) NOT ACTIVE BUT STORED IN DATABASE
        $allowedHits = (int) $pE->get('count_subscription', 5);
        if (isset($userSub->hits) && (int) $userSub->hits > (int) $allowedHits) {
            return false;
            //COM_PHOCAEMAIL_YOUR_SUBSCRIPTION_IS_BLOCKED_PLEASE_CONTACT_ADMINISTRATOR
        }
        // X) USER EXISTS BUT IS INACTIVE AND ALLOWED TO SUBSCRIBE
        if (isset($userSub->active) && (int) $userSub->active != 1 && isset($userSub->id) && (int) $userSub->id > 0) {
            $data['id'] = (int) $userSub->id;
        }
        // X) SEEMS LIKE USER IS NOT IN DATABASE, ADD IT - user id will be automatically created
        // ... ok
        // X) IF REGISTERED USER - ASSIGN AN ACCOUNT TO HIM/HER
        $query = 'SELECT u.id' . ' FROM #__users AS u' . ' WHERE u.email = ' . $db->quote($data['email']) . ' LIMIT 1';
        $db->setQuery($query);
        $registeredUser = $db->loadObject();
        if (isset($registeredUser->id) && $registeredUser->id > 0) {
            $data['userid'] = (int) $registeredUser->id;
        }
        $row = Table::getInstance('phocaemailsubscriber', 'Table', array());
        if (!$row->bind($data)) {
            $db->setError($row->getError());
            return false;
        }
        if (!$row->check()) {
            $db->setError($row->getError());
            return false;
        }
        if (!$row->store()) {
            $db->setError($row->getError());
            return false;
        }
        if (!empty($newsletter_mailinglist) && (int) $row->id > 0) {
            PhocaEmailSendNewsletterEmail::storeLists((int) $row->id, $newsletter_mailinglist, '#__phocaemail_subscriber_lists', 'id_subscriber');
        }
        if ($newsletter_activate == 2) {
            // Send activation email
            $send = PhocaEmailSendNewsletterEmail::sendNewsLetterEmail($name, $email, 'activate');
            if ($send) {
            } else {
            }
        }
        return true;
    }
}