%PDF- %PDF-
| Direktori : /home/lightco1/luminero.com.au/administrator/components/com_cmc/controllers/ |
| Current File : /home/lightco1/luminero.com.au/administrator/components/com_cmc/controllers/sync.json.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');
jimport('joomla.application.component.controller');
JLoader::discover('CmcSyncer', JPATH_COMPONENT_ADMINISTRATOR . '/libraries/syncer');
/**
* Class CmcControllerSync
*
* @since 1.2
*/
class CmcControllerSync extends CmcController
{
/**
* Initialize the sync process
*
* @return void
*/
public function start()
{
// Check for a valid token. If invalid, send a 403 with the error message.
JSession::checkToken('request') or $this->sendResponse(new Exception(JText::_('JINVALID_TOKEN'), 403));
// Put in a buffer to silence noise.
ob_start();
// Initiate an empty state
CmcSyncerState::resetState();
$state = CmcSyncerState::getState();
$input = JFactory::getApplication()->input;
$lists = $input->getString('lists');
$chimp = new CmcHelperChimp;
$listStats = $chimp->lists($lists);
$names = array();
foreach ($listStats as $key => $list)
{
$state->lists[$key] = array();
$state->lists[$key]['mc_id'] = $list['id'];
$state->lists[$key]['name'] = $list['name'];
$state->lists[$key]['toSync'] = $list['stats']['member_count'];
$names[] = $list['name'];
// Delete the old list info
CmcHelperList::delete($list['id']);
// Add the new list info
$listModel = $this->getModel('List', 'cmcModel');
$listModel->save($list);
// Add the joomla list id
$state->lists[$key]['id'] = $listModel->getState('list.id');
// Delete users in that list
CmcHelperUsers::delete($list['id']);
}
$state->header = JText::sprintf('COM_CMC_LISTS_TO_SYNC', count($state->lists));
$state->message = JText::sprintf('COM_CMC_LISTS_TO_SYNC_DESC', '"' . implode('", "', $names) . '"', $state->lists[0]['name']);
$state->offset = 0;
CmcSyncerState::setState($state);
$this->sendResponse($state);
}
/**
* Method to handle a send a JSON response. The body parameter
* can be a Exception object for when an error has occurred or
* a JObject for a good response.
*
* @param mixed $data JObject on success, Exception on error. [optional]
*
* @return void
*
* @since 2.51.2
*/
public static function sendResponse($data = null)
{
// Send the assigned error code if we are catching an exception.
if ($data instanceof Exception)
{
JLog::add($data->getMessage(), JLog::ERROR);
JFactory::getApplication()->setHeader('status', $data->getCode());
JFactory::getApplication()->sendHeaders();
}
// Create the response object.
$response = new CmcSyncerResponse($data);
// Add the buffer.
$response->buffer = JDEBUG ? ob_get_contents() : ob_end_clean();
// Send the JSON response.
echo json_encode($response);
// Close the application.
JFactory::getApplication()->close();
}
/**
* Syncs the users of the list
*
* @return void
*/
public function batch()
{
// Check for a valid token. If invalid, send a 403 with the error message.
JSession::checkToken('request') or $this->sendResponse(new Exception(JText::_('JINVALID_TOKEN'), 403));
// Put in a buffer to silence noise.
ob_start();
// Remove the script time limit.
@set_time_limit(0);
$state = CmcSyncerState::getState();
$chimp = new CmcHelperChimp;
$members = $chimp->listMembers($state->lists[0]['mc_id'], 'subscribed', $state->offset * $state->batchSize, $state->batchSize);
// Save the users in our database
CmcHelperUsers::save($members, $state->lists[0]['id'], $state->lists[0]['mc_id']);
$pages = $state->lists[0]['toSync'] / $state->batchSize;
if ($state->offset < $pages)
{
$state->offset = $state->offset + 1;
$state->header = JText::sprintf('COM_CMC_BATCH_SYNC_IN_LIST', $state->lists[0]['name']);
$state->message = JText::sprintf('COM_CMC_BATCH_SYNC_PROGRESS', $state->offset * $state->batchSize, $state->batchSize);
}
if ($state->offset >= $pages)
{
// First list in the array was synced, lets remove it
$oldList = array_shift($state->lists);
// If we still have lists, then let us reset the offset
if (count($state->lists))
{
$state->header = JText::sprintf('COM_CMC_BATCH_SYNC_IN_OLD_LIST_COMPLETE', $oldList['name']);
$state->message = JText::sprintf('COM_CMC_BATCH_SYNC_IN_OLD_LIST_COMPLETE_DESC', $oldList['toSync'], $oldList['name'], $state->lists[0]['name']);
$state->offset = 0;
}
else
{
$state->header = JText::_('COM_CMC_SYNC_COMPLETE');
$state->message = '<div class="alert alert-info">' . JText::_('COM_CMC_SYNC_COMPLETE_DESC') . '</div>';
}
}
CmcSyncerState::setState($state);
$this->sendResponse($state);
}
}