%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/lightco1/luminero.com.au/administrator/components/com_cmc/controllers/
Upload File :
Create Path :
Current File : /home/lightco1/luminero.com.au/administrator/components/com_cmc/controllers/ecommerce.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');

/**
 * Class CmcControllerEcommerce
 *
 * @since  __DEPLOY_VERSION__
 */
class CmcControllerEcommerce extends CmcController
{
	/**
	 * CmcControllerEcommerce constructor.
	 *
	 * @param   array  $config  Optional config params
	 *
	 * @since   __DEPLOY_VERSION__
	 */
	public function __construct($config = array())
	{
		parent::__construct($config);

		// Add logging
		JLog::addLogger(
			array(
				'text_file' => 'com_cmc.errors.php'
			),
			JLog::ERROR,
			array('com_cmc')
		);
	}

	/**
	 * Sync task to be called by JavaScript
	 * index.php?option=com_cmc&task=ecommerce.sync&type=1&action=customers&shopId=shopId&offset=0&limit=100
	 *
	 * @return  void
	 * 
	 * @since   __DEPLOY_VERSION__
	 */
	public function sync()
	{
		$input = JFactory::getApplication()->input;

		$this->loadShop();

		$shopType = $input->getInt('type');
		$shopId   = $input->getInt('shopId');
		$action   = $input->getCmd('action');
		$offset   = $input->getInt('offset', 0);
		$limit    = $input->getInt('limit', 10);

		// TODO switch by type
		$syncer = new CmcShopVirtuemart();

		$method = 'get' . ucfirst($action);

		$results = $syncer->$method($offset, $limit);

		if (empty($results))
		{
			echo json_encode(array('success' => true, 'result' => $results));

			jexit();
		}

		// Sync it to mailChimp
		$chimp = new CmcHelperChimp;
		$shop  = CmcHelperShop::getShop($shopId);

		$errors = array();

		$map = array(
			'products'   => 'product',
			'customers'  => 'customer',
			'orders'     => 'order',
			'categories' => 'category',
			'checkouts'  => 'cart'
		);

		if (empty($shop))
		{
			echo json_encode(array('success' => false, 'errors' => ['No shop found']));

			jexit();
		}

		// Add them
		foreach ($results as $result)
		{
			$method = 'add' . ucfirst($map[$action]);

			$ret = $chimp->$method($shop->shop_id, $result);

			if (!empty($ret['status']) && substr($ret['status'], 0,1) === '4')
			{
				JLog::add('Couldn\'t sync for ' . $shop->shop_id, Jlog::ERROR, 'com_cmc');

				$errors[] = array('item' => $result, 'result' => $ret);
			}
		}

		if (!empty($errors))
		{
			echo json_encode(array('success' => false, 'errors' => $errors));

			jexit();
		}

		echo json_encode(array('success' => true, 'results' => $results));
		jexit();
	}

	/**
	 * Sync task to be called by JavaScript
	 *
	 * @return  void
	 * 
	 * @since   __DEPLOY_VERSION__
	 */
	public function getSyncTotalCount()
	{
		$input = JFactory::getApplication()->input;

		$this->loadShop();

		$shopType = $input->getInt('type');

		// TODO switch by type or plugin
		$syncer = new CmcShopVirtuemart;

		$result = new stdClass;

		$result->productsCount  = $syncer->getTotalProducts();
		$result->ordersCount    = $syncer->getTotalOrders();
		$result->customersCount = $syncer->getTotalCustomers();
		$result->categoriesCount = $syncer->getTotalProductCategories();
		$result->checkoutsCount = $syncer->getTotalCheckouts();

		echo json_encode($result);
		jexit();
	}

	/**
	 * Create a new shop
	 *
	 * @return  void
	 *
	 * @since   __DEPLOY_VERSION__
	 */
	public function createShop()
	{
		$input = JFactory::getApplication()->input;

		$this->loadShop();

		$shopType = $input->getInt('type');
		$list     = $input->getCmd('list');
		$title    = $input->getString('title', '');
		$currency = $input->getString('currency', '');
		$email    = $input->getString('email', '');

		// The shop data
		$shop = new stdClass;

		$shop->name    = $title;
		$shop->list_id = $list;
		$shop->type    = $shopType;
		$shop->synced  = 0;
		$shop->created = JFactory::getDate()->toSql();

		$table = JTable::getInstance('Shops', 'CmcTable');

		$table->save($shop);

		$table->checkIn();

		// TODO type
		$shop->shop_id = 'vm_' . $table->id;

		$table->save($shop);

		// Create a shop in Mailchimp
		$chimp = new CmcHelperChimp;

		$mcShop = new stdClass;

		$mcShop->id       = $shop->shop_id;
		$mcShop->list_id  = $shop->list_id;
		$mcShop->name     = $shop->name;

		// TODO
		$mcShop->platform = 'cmc/vm/' . JUri::getInstance()->getHost();

		$mcShop->is_syncing    = true;
		$mcShop->email_address = $email;
		$mcShop->currency_code = $currency;

		$mcShop->domain = JUri::root();

		$result = $chimp->createShop($mcShop);

		echo json_encode(array('shopId' => $shop->shop_id, 'result' => $result));
		jexit();
	}

	/**
	 * Set the shop sync to done
	 *
	 * @return  void
	 *
	 * @since   __DEPLOY_VERSION__
	 */
	public function finalizeShop()
	{
		$input = JFactory::getApplication()->input;

		$this->loadShop();

		$shopId = $input->getInt('id');

		$shop = CmcHelperShop::getShop($shopId);

		if (empty($shop))
		{
			echo json_encode(array('shopId' => $shop->shop_id, 'success' => false));
			jexit();
		}

		// Create a shop in Mailchimp
		$chimp = new CmcHelperChimp;

		$mcShop = new stdClass;

		$mcShop->id       = $shop->shop_id;
		$mcShop->list_id  = $shop->list_id;
		$mcShop->name     = $shop->name;

		// TODO
		$mcShop->platform = 'VirtueMart';

		$mcShop->is_syncing    = false;

		$mcShop->domain = JUri::root();

		$result = $chimp->updateShop($mcShop);

		echo json_encode(array('shopId' => $shop->shop_id, 'result' => $result));
		jexit();
	}

	/**
	 * Load shop dependencies
	 *
	 * @return  void
	 * 
	 * @since   __DEPLOY_VERSION__
	 */
	private function loadShop()
	{
		// TODO Move to autoloader
		require_once JPATH_COMPONENT_ADMINISTRATOR . '/libraries/shopsync/shopinterface.php';
		require_once JPATH_COMPONENT_ADMINISTRATOR . '/libraries/shopsync/items/product.php';
		require_once JPATH_COMPONENT_ADMINISTRATOR . '/libraries/shopsync/items/customer.php';
		require_once JPATH_COMPONENT_ADMINISTRATOR . '/libraries/shopsync/items/line.php';
		require_once JPATH_COMPONENT_ADMINISTRATOR . '/libraries/shopsync/items/order.php';
		require_once JPATH_COMPONENT_ADMINISTRATOR . '/libraries/shopsync/items/cart.php';
		require_once JPATH_COMPONENT_ADMINISTRATOR . '/libraries/shopsync/shop.php';
		require_once JPATH_COMPONENT_ADMINISTRATOR . '/libraries/shopsync/shops/virtuemart.php';
	}

	/**
	 * Delete a shop
	 *
	 * @return  void
	 *
	 * @since   __DEPLOY_VERSION__
	 */
	public function deleteShop()
	{
		$input = JFactory::getApplication()->input;

		$ids = $input->get('cid', array(), 'array');

		$link = JRoute::_('index.php?option=com_cmc&view=ecommerce');

		if (empty($ids))
		{
			$this->setRedirect($link, 'No shops selected to delete');
		}

		$this->loadShop();

		$db = JFactory::getDbo();

		$chimp = new CmcHelperChimp;

		foreach ($ids as $id)
		{
			$shop = CmcHelperShop::getShop($id);

			if (!$shop)
			{
				throw new Exception('Could not load shop with id ' . $id . ' for deletion!', 500);
			}

			$query = $db->getQuery(true);

			$query->delete('#__cmc_shops')->where('id = ' . (int) $id);

			$db->setQuery($query);
			$db->execute();

			$result = $chimp->deleteShop($shop->shop_id);

			if (!empty($result['status']))
			{
				$this->setRedirect($link, 'Error deleting shop ' . $id . ' Message: ' . $result['title'] , 'error');
			}
		}

		$this->setRedirect($link, JText::_('COM_CMC_SHOP_DELETED_SUCCESSFULLY'), 'info');
	}
}

Zerion Mini Shell 1.0