%PDF- %PDF-
| Direktori : /home/lightco1/luminero.com.au/administrator/components/com_cmc/helpers/ |
| Current File : /home/lightco1/luminero.com.au/administrator/components/com_cmc/helpers/users.php |
<?php
/**
* @package CMC
* @author Compojoom <contact-us@compojoom.com>
* @date 2016-04-15
*
* @copyright Copyright (C) 2008 - 2016 compojoom.com - Daniel Dimitrov, Yves Hoppe. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('_JEXEC') or die('Restricted access');
/**
* Class CmcHelperUsers
*
* @since 1.2
*/
class CmcHelperUsers
{
protected static $bindings = array(
'mc_id' => array(
'column' => 'id'
),
'list_id' => array(),
'email' => array(
'column' => 'email_address'
),
'email_type' => array(),
'ip_signup' => array(),
'timestamp_signup' => array(),
'timestamp_signup' => array(),
'ip_opt' => array(),
'timestamp_opt' => array(),
'member_rating' => array(),
'info_changed' => array(
'column' => 'last_changed'
),
'web_id' => array(
'column' => 'unique_email_id'
),
'language' => array(),
// 'is_gmonkey' => array(),
'geo' => array(
'column' => 'location',
'handle' => 'json_encode'
),
'clients' => array(
'column' => 'email_client'
),
'merges' => array(
'column' => 'merge_fields',
'handle' => 'json_encode'
),
'timestamp' => array(
'column' => 'timestamp_opt'
),
'status' => array(),
'static_segments' => array(
'column' => 'interests',
'handle' => 'json_encode'
)
);
/**
* Saves a batch of users to the db
*
* @param array $users - the users to save in the db
* @param int $jListId - the joomla list id
* @param string $mcListId - the list id
*
* @return mixed
*/
public static function save($users, $jListId, $mcListId)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$members = array();
// Get all e-mails from the array
$emails = array_map(
function ($ar) {
return $ar['email_address'];
}, $users
);
// Find out if the users on the list are already members of the site
$jUsers = self::getJoomlaUsers($emails);
foreach ($users as $member)
{
$item = self::bind($member, $jUsers);
array_walk(
$item,
function(&$value) use ($db) {
// Escape the value
$value = $db->quote($value);
}
);
$members[] = implode(',', $item);
}
$query->insert('#__cmc_users')
->columns(implode(',', array_keys(self::$bindings)) . ', user_id, firstname, lastname,created_user_id,created_time,modified_user_id,modified_time,query_data ')
->values($members);
$db->setQuery($query);
return $db->execute();
}
/**
* Binds the information from the listMemberInfo function to the local user table structure
*
* @param array $member - the member data
* @param array $jUsers - joomla users array with email as key
*
* @return array
*/
public static function bind($member, $jUsers)
{
$user = JFactory::getUser();
$item = array();
// Nuts, just nuts! KISS!
foreach (self::$bindings as $bkey => $bvalue)
{
if (!empty($bvalue))
{
$handle = isset($bvalue['handle']) ? $bvalue['handle'] : "";
if (isset($bvalue['column']) && isset($member[$bvalue['column']]))
{
$item[$bkey] = $handle ? $handle($member[$bvalue['column']]) : $member[$bvalue['column']];
}
else
{
$item[$bkey] = $handle ? $handle($member[$bkey]) : $member[$bkey];
}
}
else
{
$item[$bkey] = $member[$bkey];
}
}
$item['user_id'] = isset($jUsers[$member['email_address']]) ? $jUsers[$member['email_address']]->id : 0;
$item['firstname'] = $member['merge_fields']['FNAME'];
$item['lastname'] = $member['merge_fields']['LNAME'];
$item['created_user_id'] = $user->id;
$item['created_time'] = JFactory::getDate()->toSql();
$item['modified_user_id'] = $user->id;
$item['modified_time'] = JFactory::getDate()->toSql();
$item['query_data'] = json_encode($member);
return $item;
}
/**
* Delete users from the db belonging to the mailchimp list
*
* @param int $listId - the list id
*
* @return mixed
*/
public static function delete($listId)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->delete($db->qn('#__cmc_users'))->where($db->qn('list_id') . '=' . $db->quote($listId));
$db->setQuery($query);
return $db->execute();
}
/**
* Load a user subscription from the db
*
* @param string $email - the email of the user
* @param string $listId - the list id
*
* @return bool|mixed
*/
public static function getSubscription($email, $listId)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__cmc_users')
->where($db->qn('list_id') . '=' . $db->q($listId))
->where($db->qn('email') . '=' . $db->q($email));
$db->setQuery($query);
$subscription = $db->loadObject();
return $subscription ? $subscription : false;
}
/**
* Get the ids of any Joomla users we already have on our list
*
* @param array $emails - emails to search for
*
* @return array|mixed
*/
public static function getJoomlaUsers($emails)
{
$users = array();
if (count($emails))
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('id, email')->from('#__users')->where(CompojoomQueryHelper::in('email', $emails, $db));
$db->setQuery($query);
return $db->loadObjectList('email');
}
return $users;
}
}