Advanced Search

Search Results (Searched for: partner program)

23 Sep 2020 12:12

Front-end access toHikashop Orders

Category: Install & Update

Hi,

If you configure a menu item of the type HikaShop affiliate program, when a partner access that page, he will see statistics about his affiliate account. And if the "Display affiliates advanced statistics" setting of the HikaShop configuration is activated, he will see the amount of his sales and there will be a button to open a popup with his sales.
Note that the system will take into account the "Minimum delay before paying the affiliate commission" setting to only display the orders after that delay.
23 Jan 2020 09:17

Affiliate not tracking sales

Category: Affilation

Will try. But I dont have that code. Now I have (complete file):
<?php
/**
 * @package	HikaShop for Joomla!
 * @version	4.2.2
 * @author	hikashop.com
 * @copyright	(C) 2010-2019 HIKARI SOFTWARE. All rights reserved.
 * @license	GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 */
defined('_JEXEC') or die('Restricted access');
?><?php
if(!defined('DS'))
	define('DS',DIRECTORY_SEPARATOR);
jimport('joomla.plugin.plugin');

class plgSystemHikashopaffiliate extends JPlugin {
	public function __construct(&$subject, $config) {
		parent::__construct($subject, $config);
		if(isset($this->params))
			return;

		$plugin = JPluginHelper::getPlugin('system', 'hikashopaffiliate');
		$this->params = new JRegistry(@$plugin->params);
	}

	public function afterInitialise() {
		return $this->onAfterInitialise();
	}

	public function onAfterInitialise() {
		$do = $this->params->get('after_init','1');
		if($do)
			return $this->onAfterRoute();
		return true;
	}

	public function afterRoute() {
		return $this->onAfterRoute();
	}

	public function onAfterRoute() {
		$app = JFactory::getApplication();

		if(version_compare(JVERSION,'4.0','>=') && $app->isClient('administrator'))
			return true;
		if(version_compare(JVERSION,'4.0','<') && $app->isAdmin())
			return true;
		if(@$_REQUEST['option'] == 'com_gcalendar')
			return true;

		$key_name = $this->params->get('partner_key_name', 'partner_id');
		if(version_compare(JVERSION,'3.0','>='))
			$partner_id = $app->input->getCmd($key_name, 0);
		else
			$partner_id = JRequest::getCmd($key_name, 0);

		if(empty($partner_id))
			return true;

		static $done = false;
		if($done)
			return true;
		$done = true;

		if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikashop'.DS.'helpers'.DS.'helper.php'))
			return true;
		$partner_id = hikashop_decode($partner_id,'partner');

		$userClass = hikashop_get('class.user');
		$user = $userClass->get($partner_id);

		if(empty($user->user_partner_activated))
			return true;

		$config = hikashop_config();
		$cookie = true;
		if($config->get('no_affiliation_if_cart_present')) {
			$cart_id = $app->getUserState(HIKASHOP_COMPONENT.'.cart_id', 0, 'int');
			if($cart_id)
				$cookie = false;
		}
		$exclude_referers = explode(',', $config->get('affiliation_exclude_domains', ''));
		if(!empty($exclude_referers)) {
			$referer = null;
			if(!empty($_SERVER['HTTP_REFERER']) && preg_match('#^https?://.*#i',$_SERVER['HTTP_REFERER']))
				$referer = str_replace(array('"', '<', '>', "'"), '', @$_SERVER['HTTP_REFERER']);
			if(!empty($referer)) {
				foreach($exclude_referers as $ref) {
					$ref = trim($ref);
					if(strpos($referer, $ref) !== false)
						$cookie = false;
				}
			}
		}
		if($cookie)
			setcookie('hikashop_affiliate', hikashop_encode($partner_id,'partner'), time() + $config->get('click_validity_period', 2592000), '/');

		$ip = hikashop_getIP();
		$clickClass = hikashop_get('class.click');
		$latest = $clickClass->getLatest($partner_id, $ip, $config->get('click_min_delay', 86400));

		if(empty($user->user_params->user_custom_fee)) {
			$user->user_params->partner_click_fee = $config->get('partner_click_fee',0);
			$user->user_params->partner_fee_currency = $config->get('partner_currency',1);
		} else {
			$user->user_params->partner_click_fee = $user->user_params->user_partner_click_fee;
		}

		if(!$config->get('allow_currency_selection',0) || empty($user->user_currency_id))
			$user->user_currency_id =  $config->get('partner_currency',1);

		if(bccomp($user->user_params->partner_click_fee,0,5) && $user->user_currency_id!=$user->user_params->partner_fee_currency)
			$user->user_params->partner_click_fee = $this->_convert($user->user_params->partner_click_fee,$user->user_params->partner_fee_currency,$user->user_currency_id);

		if(!empty($latest))
			$user->user_params->partner_click_fee = 0;

		$click = new stdClass();
		$click->click_partner_id = $partner_id;
		$click->click_ip = $ip;
		$click->click_partner_price = $user->user_params->partner_click_fee;
		$click->click_partner_currency_id = $user->user_currency_id;
		$clickClass->save($click);

		return true;
	}

	public function onBeforeOrderUpdate(&$order,&$do){
		if(!empty($order->order_type) && $order->order_type != 'sale')
			return;
		if(!empty($order->old->order_type) && $order->old->order_type != 'sale')
			return;

		if(!empty($order->order_partner_paid))
			return true;

		if(!isset($order->order_full_price))
			return true;

		if(!empty($order->old)) {
			if(!empty($order->old->order_partner_paid))
				return true;

			if(floatval($order->old->order_full_price) == floatval($order->order_full_price))
				return true;

			if(empty($order->order_partner_id))
				$order->order_partner_id = $order->old->order_partner_id;

			return $this->onBeforeOrderCreate($order, $do);
		}

		return true;
	}

	public function getPartner(&$order) {
		$config =& hikashop_config();
		if($config->get('add_partner_to_user_account', 0) && !empty($order->order_user_id)) {
			$class = hikashop_get('class.user');
			$user = $class->get($order->order_user_id);
			if(!empty($user->user_partner_id))
				return $user->user_partner_id;
		}
		return hikashop_decode(hikaInput::get()->cookie->getCmd('hikashop_affiliate', 0), 'partner');
	}

	public function onBeforeOrderCreate(&$order, &$do) {
		$app = JFactory::getApplication();
		if(!empty($order->order_type) && $order->order_type != 'sale')
			return;

		if(empty($order->order_partner_id)) {
			if(hikashop_isClient('administrator'))
				return true;

			if(!empty($order->order_discount_code)) {
				$discountClass = hikashop_get('class.discount');
				$coupon = $discountClass->load($order->order_discount_code);

				if(isset($coupon->discount_affiliate) && $coupon->discount_affiliate == -1) {
					return true;
				} elseif(isset($coupon->discount_affiliate) && $coupon->discount_affiliate) {
					$partner_id = $coupon->discount_affiliate;
					$userClass = hikashop_get('class.user');
					$user = $userClass->get($order->order_user_id);
					if($user->user_cms_id) {
						$this->addPartnerToUser($user->user_cms_id, $partner_id);
					}
				} else {
					$partner_id = $this->getPartner($order);
				}
			} else {
				$partner_id = $this->getPartner($order);
			}

			if(empty($partner_id))
				return true;

		} else {
			$partner_id = $order->order_partner_id;
		}

		$config =& hikashop_config();
		if($config->get('no_self_affiliation', 0) && $order->order_user_id == $partner_id)
			return true;

		$userClass = hikashop_get('class.user');
		$user = $userClass->get($partner_id);

		if(empty($user))
			return true;

		if(empty($user->user_partner_activated))
			return true;

		$order->order_partner_id = $partner_id;

		if(empty($user->user_params->user_custom_fee)) {
			$user->user_params->partner_percent_fee = $config->get('partner_percent_fee',0);
			$user->user_params->partner_flat_fee = $config->get('partner_flat_fee',0);
			$user->user_params->partner_fee_currency = $config->get('partner_currency',1);
		} else {
			$user->user_params->partner_percent_fee = $user->user_params->user_partner_percent_fee;
			$user->user_params->partner_flat_fee =$user->user_params->user_partner_flat_fee;
		}

		if(!$config->get('allow_currency_selection',0) || empty($user->user_currency_id))
			$user->user_currency_id =  $config->get('partner_currency',1);

		if(bccomp($user->user_params->partner_flat_fee,0,5) && $user->user_currency_id!=$user->user_params->partner_fee_currency)
			$user->user_params->partner_flat_fee = $this->_convert($user->user_params->partner_flat_fee,$user->user_params->partner_fee_currency,$user->user_currency_id);

		if(bccomp($user->user_params->partner_percent_fee, 0, 5) || bccomp($user->user_params->partner_flat_fee, 0, 5)) {
			if(bccomp($user->user_params->partner_percent_fee, 0, 5)) {
				$order_price = $order->order_full_price;
				if($config->get('affiliate_fee_exclude_shipping', 0)) {
					$order_price = $order_price - $order->order_shipping_price;
				}
				$fees = $order_price*$user->user_params->partner_percent_fee/100;
			} else {
				$fees = 0;
			}

			if($order->order_currency_id!=$user->user_currency_id)
				$fees = $this->_convert($fees,$order->order_currency_id,$user->user_currency_id);

			$order->order_partner_price = $fees + $user->user_params->partner_flat_fee;
			$order->order_partner_currency_id = $user->user_currency_id;
		}

		return true;
	}

	protected function _convert($amount,$src_id,$dst_id) {
		$currencyClass = hikashop_get('class.currency');
		$config =& hikashop_config();
		$setcurrencies = null;
		$main_currency = (int)$config->get('main_currency',1);
		$ids[$src_id] = $src_id;
		$ids[$dst_id] = $dst_id;
		$ids[$main_currency] = $main_currency;
		$currencies = $currencyClass->getCurrencies($ids,$setcurrencies);
		$srcCurrency = $currencies[$src_id];
		$dstCurrency = $currencies[$dst_id];
		$mainCurrency =  $currencies[$main_currency];

		if($srcCurrency->currency_id != $mainCurrency->currency_id) {
			$amount = floatval($amount) / floatval($srcCurrency->currency_rate);
			$amount += $amount * floatval($srcCurrency->currency_percent_fee) / 100.0;
		}

		if($dstCurrency->currency_id != $mainCurrency->currency_id) {
			$amount = floatval($amount) * floatval($dstCurrency->currency_rate);
			$amount += $amount * floatval($dstCurrency->currency_percent_fee)/100.0;
		}
		return $amount;
	}

	public function onUserAfterSave($user, $isnew, $success, $msg) {
		return $this->onAfterStoreUser($user, $isnew, $success, $msg);
	}

	public function onAfterStoreUser($user, $isnew, $success, $msg){
		if($success === false)
			return false;

		$app = JFactory::getApplication();

		$admin = false;
		if(version_compare(JVERSION,'4.0','>=') && $app->isClient('administrator'))
			$admin = true;
		if(version_compare(JVERSION,'4.0','<') && $app->isAdmin())
			$admin = true;
		if($admin || !$isnew)
			return true;

		if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_hikashop'.DS.'helpers'.DS.'helper.php'))
			return true;

		$partner_id = hikaInput::get()->cookie->getCmd('hikashop_affiliate', 0);
		if(empty($partner_id))
			return true;

		$partner_id = hikashop_decode($partner_id,'partner');

		$this->addPartnerToUser($user['id'], $partner_id);

		return true;
	}

	public function onBeforeHikaUserRegistration(&$ret, $input_data, $mode) {
		$config = hikashop_config();
		$formData = hikaInput::get()->get('data', array(), 'array');
		if($config->get('affiliate_registration', 0) && !empty($formData['affiliate'])) {
			$ret['userData']->user_partner_activated = 1;
			$ret['registerData']->user_partner_activated = 1;
		}
	}

	protected function addPartnerToUser($user_id, $partner_id){
		$userClass = hikashop_get('class.user');
		$partner = $userClass->get($partner_id);
		if(empty($partner->user_partner_activated))
			return true;

		$config =& hikashop_config();
		if(empty($partner->user_params->user_custom_fee)) {
			$partner->user_params->partner_lead_fee = $config->get('partner_lead_fee',0);
			$partner->user_params->partner_fee_currency = $config->get('partner_currency',1);
		} else {
			$partner->user_params->partner_lead_fee = $partner->user_params->user_partner_lead_fee;
		}

		if(!$config->get('allow_currency_selection',0) || empty($partner->user_currency_id))
			$partner->user_currency_id = $config->get('partner_currency',1);

		if(bccomp($partner->user_params->partner_lead_fee,0,5) && $partner->user_currency_id!=$partner->user_params->partner_fee_currency)
			$partner->user_params->partner_lead_fee = $this->_convert($partner->user_params->partner_lead_fee,$partner->user_params->partner_fee_currency,$partner->user_currency_id);

		$ip = hikashop_getIP();
		$clickClass = hikashop_get('class.click');
		$latest = $clickClass->getLatest($partner_id,$ip,$config->get('lead_min_delay',24));

		if($config->get('add_partner_to_user_account',0) || (empty($latest) && bccomp($partner->user_params->partner_lead_fee,0,5))) {
			$userDataInDb = $userClass->get($user_id,'cms');
			$userData = new stdClass();
			$userData->user_id = @$userDataInDb->user_id;
			$userData->user_cms_id = $user_id;
			$userData->user_partner_id = $partner_id;
			$userData->user_partner_price = @$partner->user_params->partner_lead_fee;
			$userData->user_partner_currency_id = $partner->user_currency_id;
			$userClass->save($userData);
		}
	}

	public function onUserAccountDisplay(&$buttons) {
		$button = $this->params->get('button_on_control_panel','1');
		if(!$button)
			return;
		global $Itemid;
		$url_itemid = '';
		if(!empty($Itemid))
			$url_itemid = '&Itemid=' . $Itemid;

		$buttons['affiliate'] = array(
			'link' => hikashop_completeLink('affiliate'.$url_itemid),
			'level' => 1,
			'image' => 'affiliate',
			'text' => JText::_('AFFILIATE'),
			'description' => JText::_('AFFILIATE_PROGRAM'),
			'fontawesome' => ''.
				'<i class="fas fa-user fa-stack-2x"></i>'.
				'<i class="fas fa-circle fa-stack-1x fa-inverse" style="top:30%;left:30%;"></i>'.
				'<i class="fas fa-dollar-sign fa-stack-1x" style="top:30%;left:30%;"></i>'
		);
		return true;
	}

	public function onBeforeOrderListing($paramBase, &$extrafilters, &$pageInfo, &$filters) {
		$app = JFactory::getApplication();
		if(!hikashop_isClient('administrator'))
			return;
		$pageInfo->filter->filter_partner = $app->getUserStateFromRequest($paramBase.".filter_partner",'filter_partner','','int');
		$extrafilters['filter_partner'] =& $this;

		if(!empty($pageInfo->filter->filter_partner)) {
			if($pageInfo->filter->filter_partner == 1) {
				$filters[] = 'b.order_partner_id != 0';
			} else {
				$filters[] = 'b.order_partner_id = 0';
			}
		}
	}

	public function onAfterOrderListing(&$rows, &$extrafields, $pageInfo) {
		$app = JFactory::getApplication();
		if(!hikashop_isClient('administrator'))
			return;
		$myextrafield = new stdClass();
		$myextrafield->name = JText::_('PARTNER');
		$myextrafield->obj =& $this;
		$extrafields['partner'] = $myextrafield;
	}

	public function displayFilter($name, $filter) {
		$partner = hikashop_get('type.user_partner');
		return $partner->display('filter_partner', $filter->filter_partner, false);
	}

	public function showField($container, $name, &$row) {
		if(!bccomp($row->order_partner_price, 0, 5))
			return '';
		$ret = $container->currencyHelper->format($row->order_partner_price,$row->order_partner_currency_id);
		if(empty($row->order_partner_paid)) {
			$ret .= JText::_('NOT_PAID');
		} else {
			$ret .= JText::_('PAID').'<img src="'.HIKASHOP_IMAGES.'ok.png" />';
		}
		return $ret;
	}

	public function onDiscountBlocksDisplay(&$discount, &$html) {
		$options = array(
			JHTML::_('select.option', -1, JText::_('NO_PARTNER')),
			JHTML::_('select.option', 0, JText::_('CURRENT_CUSTOMER_PARTNER'))
		);
		$db = JFactory::getDBO();
		$db->setQuery('SELECT a.user_id, b.name, b.username FROM #__hikashop_user AS a LEFT JOIN #__users AS b ON a.user_cms_id = b.id WHERE a.user_partner_activated = 1 ORDER BY b.username', 0, 250);
		$partners = $db->loadObjectList();
		if(!empty($partners)) {
			foreach($partners as $partner) {
				$options[] = JHTML::_('select.option', $partner->user_id, $partner->username.' ('.$partner->name.')');
			}
		}
		$html[] = '<dt data-discount-display="coupon"><label>'. JText::_('FORCE_AFFILIATION_TO') .'</label></dt><dd data-discount-display="coupon">'.
				JHTML::_('hikaselect.genericlist', $options, 'data[discount][discount_affiliate]' , 'class="custom-select"', 'value', 'text', @$discount->discount_affiliate ).
				'</dd>';
	}

	function onOrderStatusListingLoad( &$orderstatus_columns, &$rows){
		$orderstatus_columns['affiliate'] = array(
			'text' => JText::_('AFFILIATE'),
			'title' => JText::_('VALID_ORDER_STATUS'),
			'description' => JText::_('AFFILIATE_DESC'),
			'key' => 'partner_valid_status',
			'default' => 'confirmed,shipped',
			'type' => 'toggle',
			'trigger' => 'plg.system.hikashopaffiliate.affiliateStatusUpdate'
		);
	}

	function affiliateStatusUpdate(&$controller, $elementPkey, $value, $extra){
		return $controller->configstatus($elementPkey,$value, $extra);
	}
}
Displaying 1 - 2 out of 2 results.
Time to create page: 0.393 seconds
Powered by Kunena Forum