diff --git a/admin-dev/drawer.php b/admin-dev/drawer.php index 27fe85f1b..af602d49f 100644 --- a/admin-dev/drawer.php +++ b/admin-dev/drawer.php @@ -25,6 +25,7 @@ * International Registered Trademark & Property of PrestaShop SA */ +define('PS_ADMIN_DIR', getcwd()); include_once(dirname(__FILE__).'/../config/config.inc.php'); $cookie = new Cookie('psAdmin'); diff --git a/admin-dev/tabs/AdminCustomers.php b/admin-dev/tabs/AdminCustomers.php index 1a0f8c824..e9860808b 100644 --- a/admin-dev/tabs/AdminCustomers.php +++ b/admin-dev/tabs/AdminCustomers.php @@ -287,9 +287,7 @@ class AdminCustomers extends AdminTab } else $countBetterCustomers = '-'; - - $shop = new Shop((int)$customer->id_shop); - + echo '
'.$customer->firstname.' '.$customer->lastname.' @@ -299,7 +297,7 @@ class AdminCustomers extends AdminTab '.$this->l('Registration date:').' '.Tools::displayDate($customer->date_add, (int)($cookie->id_lang), true).'
'.$this->l('Last visit:').' '.($customerStats['last_visit'] ? Tools::displayDate($customerStats['last_visit'], (int)($cookie->id_lang), true) : $this->l('never')).'
'.($countBetterCustomers != '-' ? $this->l('Rank: #').' '.(int)$countBetterCustomers.'
' : '') - .(Tools::isMultiShopActivated() ? '
'.$this->l('Shop:').' '.$shop->name : '').' + .(Tools::isMultiShopActivated() ? '
'.$this->l('Shop:').' '.Shop::getInstance($customer->id_shop)->name : '').'
@@ -662,6 +660,7 @@ class AdminCustomers extends AdminTab '; echo '
 
'; } + if (sizeof($referrers)) { echo '

'.$this->l('Referrers').'

@@ -669,11 +668,13 @@ class AdminCustomers extends AdminTab '.$this->l('Date').' '.$this->l('Name').' + '.((Tools::isMultiShopActivated())? ''.$this->l('Shop').'' : '').' '; foreach ($referrers as $referrer) echo ' '.Tools::displayDate($referrer['date_add'], (int)($cookie->id_lang), true).' '.$referrer['name'].' + '.((Tools::isMultiShopActivated())? ''.$referrer['shop_name'].'' : '').' '; echo '
 
'; } diff --git a/admin-dev/tabs/AdminReferrers.php b/admin-dev/tabs/AdminReferrers.php index 973289ac7..984e66061 100644 --- a/admin-dev/tabs/AdminReferrers.php +++ b/admin-dev/tabs/AdminReferrers.php @@ -59,7 +59,12 @@ class AdminReferrers extends AdminTab $this->edit = true; $this->delete = true; - $this->_select = 'IF(cache_orders > 0, ROUND(cache_sales/cache_orders, 2), 0) as cart, (cache_visits*click_fee) as fee0, (cache_orders*base_fee) as fee1, (cache_sales*percent_fee/100) as fee2'; + $this->_select = 'SUM(rs.cache_visitors) AS cache_visitors, SUM(rs.cache_visits) AS cache_visits, SUM(rs.cache_pages) AS cache_pages, + SUM(rs.cache_registrations) AS cache_registrations, SUM(rs.cache_orders) AS cache_orders, SUM(rs.cache_sales) AS cache_sales, + IF(rs.cache_orders > 0, ROUND(rs.cache_sales/rs.cache_orders, 2), 0) as cart, (rs.cache_visits*click_fee) as fee0, + (rs.cache_orders*base_fee) as fee1, (rs.cache_sales*percent_fee/100) as fee2'; + $this->_join = 'LEFT JOIN '._DB_PREFIX_.'referrer_shop rs ON a.id_referrer = rs.id_referrer '.Shop::sqlRestriction(false, 'rs'); + $this->_group = 'GROUP BY rs.id_referrer'; $this->fieldsDisplay = array( 'id_referrer' => array('title' => $this->l('ID'), 'width' => 25, 'align' => 'center'), 'name' => array('title' => $this->l('Name'), 'width' => 80), @@ -263,8 +268,14 @@ class AdminReferrers extends AdminTab

'.$this->l('Percent of the sales.').'

-
-
+ '; + if (Tools::isMultiShopActivated()) + { + echo '
'; + $this->displayAssoShop(); + echo '
'; + } + echo '
'.$this->l('Help').'
+
'; } diff --git a/classes/AdminTab.php b/classes/AdminTab.php index a63496ae1..cf8a506fc 100644 --- a/classes/AdminTab.php +++ b/classes/AdminTab.php @@ -2053,7 +2053,7 @@ abstract class AdminTabCore $html = ''; foreach ($shops AS $shop) - $html .= ''; + $html .= ''; $html .= '
'.$this->l('Shop').''.$this->l('Association').'
'.$shop['name'].'id, $assos[$shop['id_shop']])) ? 'checked="checked"' : '').'>
'.$shop['name'].'_object->id, $assos[$shop['id_shop']])) || !$this->_object->id) ? 'checked="checked"' : '').'>
'; } echo $html; diff --git a/classes/ConnectionsSource.php b/classes/ConnectionsSource.php index 2d3c23f90..7574c08bf 100644 --- a/classes/ConnectionsSource.php +++ b/classes/ConnectionsSource.php @@ -54,7 +54,7 @@ class ConnectionsSourceCore extends ObjectModel public function add($autodate = true, $nullValues = false) { - if($result = parent::add($autodate, $nullValues)) + if ($result = parent::add($autodate, $nullValues)) Referrer::cacheNewSource($this->id); return $result; } @@ -108,5 +108,3 @@ class ConnectionsSourceCore extends ObjectModel ORDER BY cos.date_add DESC'); } } - - diff --git a/classes/Page.php b/classes/Page.php index aa493cffd..1ea98ee03 100644 --- a/classes/Page.php +++ b/classes/Page.php @@ -51,15 +51,16 @@ class PageCore extends ObjectModel */ public static function getCurrentId() { - $phpSelf = isset($_SERVER['PHP_SELF']) ? substr($_SERVER['PHP_SELF'], strlen(__PS_BASE_URI__)) : ''; - $pageTypeID = Page::getPageTypeByName($phpSelf); + $controller = Dispatcher::$controller; + $pageTypeID = Page::getPageTypeByName($controller); // Some pages must be distinguished in order to record exactly what is being seen + // @todo dispatcher module $specialArray = array( - 'product.php' => 'id_product', - 'category.php' => 'id_category', - 'order.php' => 'step', - 'manufacturer.php' => 'id_manufacturer', + 'product' => 'id_product', + 'category' => 'id_category', + 'order' => 'step', + 'manufacturer' => 'id_manufacturer', ); $where = ''; @@ -67,9 +68,9 @@ class PageCore extends ObjectModel 'id_page_type' => $pageTypeID, ); - if (array_key_exists($phpSelf, $specialArray)) + if (array_key_exists($controller, $specialArray)) { - $objectID = Tools::getValue($specialArray[$phpSelf]); + $objectID = Tools::getValue($specialArray[$controller]); $where = ' AND `id_object` = '.(int)$objectID; $insertData['id_object'] = $objectID; } diff --git a/classes/Referrer.php b/classes/Referrer.php index c7bf50201..731954b6d 100644 --- a/classes/Referrer.php +++ b/classes/Referrer.php @@ -27,6 +27,7 @@ class ReferrerCore extends ObjectModel { + public $id_shop; public $name; public $passwd; @@ -43,26 +44,16 @@ class ReferrerCore extends ObjectModel public $percent_fee; public $click_fee; - public $cache_visitors; - public $cache_visits; - public $cache_pages; - public $cache_registrations; - public $cache_orders; - public $cache_sales; - public $cache_reg_rate; - public $cache_order_rate; - public $date_add; protected $fieldsRequired = array('name'); protected $fieldsSize = array('name' => 64, 'http_referer_regexp' => 64, 'request_uri_regexp' => 64, 'http_referer_like' => 64, 'request_uri_like' => 64, 'passwd' => 32); protected $fieldsValidate = array( + 'id_shop' => 'isUnsignedInt', 'name' => 'isGenericName', 'passwd' => 'isPasswd', 'http_referer_regexp' => 'isCleanHtml', 'request_uri_regexp' => 'isCleanHtml', 'http_referer_like' => 'isCleanHtml', 'request_uri_like' => 'isCleanHtml', 'http_referer_regexp_not' => 'isCleanHtml', 'request_uri_regexp_not' => 'isCleanHtml', 'http_referer_like_not' => 'isCleanHtml', 'request_uri_like_not' => 'isCleanHtml', - 'base_fee' => 'isFloat', 'percent_fee' => 'isFloat', 'click_fee' => 'isFloat', - 'cache_visitors' => 'isUnsignedInt', 'cache_visits' => 'isUnsignedInt', 'cache_pages' => 'isUnsignedInt', 'cache_registrations' => 'isUnsignedInt', - 'cache_orders' => 'isUnsignedInt', 'cache_sales' => 'isOptFloat', 'cache_reg_rate' => 'isOptFloat', 'cache_order_rate' => 'isOptFloat'); + 'base_fee' => 'isFloat', 'percent_fee' => 'isFloat', 'click_fee' => 'isFloat'); protected $table = 'referrer'; protected $identifier = 'id_referrer'; @@ -79,6 +70,8 @@ class ReferrerCore extends ObjectModel public function getFields() { parent::validateFields(); + + $fields['id_shop'] = (!$this->id_shop) ? Shop::getCurrentShop(true) : (int)$this->id_shop; $fields['name'] = pSQL($this->name); $fields['passwd'] = pSQL($this->passwd); $fields['http_referer_regexp'] = pSQL($this->http_referer_regexp, true); @@ -92,14 +85,6 @@ class ReferrerCore extends ObjectModel $fields['base_fee'] = number_format($this->base_fee, 2, '.', ''); $fields['percent_fee'] = number_format($this->percent_fee, 2, '.', ''); $fields['click_fee'] = number_format($this->click_fee, 2, '.', ''); - $fields['cache_visitors'] = (int)($this->cache_visitors); - $fields['cache_visits'] = (int)($this->cache_visits); - $fields['cache_pages'] = (int)($this->cache_pages); - $fields['cache_registrations'] = (int)($this->cache_registrations); - $fields['cache_orders'] = (int)($this->cache_orders); - $fields['cache_sales'] = number_format($this->cache_sales, 2, '.', ''); - $fields['cache_reg_rate'] = $this->cache_reg_rate > 1 ? 1 : number_format((float)($this->cache_reg_rate), 4, '.', ''); - $fields['cache_order_rate'] = $this->cache_order_rate > 1 ? 1 : number_format((float)($this->cache_order_rate), 4, '.', ''); $fields['date_add'] = pSQL($this->date_add); return $fields; } @@ -108,109 +93,152 @@ class ReferrerCore extends ObjectModel { if (!($result = parent::add($autodate, $nullValues))) return false; - $this->refreshCache(array(array('id_referrer' => $this->id))); - $this->refreshIndex(array(array('id_referrer' => $this->id))); + Referrer::refreshCache(array(array('id_referrer' => $this->id))); + Referrer::refreshIndex(array(array('id_referrer' => $this->id))); return $result; } - + public static function cacheNewSource($id_connections_source) { - Db::getInstance()->Execute(' - INSERT INTO '._DB_PREFIX_.'referrer_cache (id_referrer, id_connections_source) ( - SELECT id_referrer, id_connections_source - FROM '._DB_PREFIX_.'referrer r - LEFT JOIN '._DB_PREFIX_.'connections_source cs ON ('.self::$_join.') - WHERE id_connections_source = '.(int)($id_connections_source).' - )'); + if (!$id_connections_source) + return; + + $sql = 'INSERT INTO '._DB_PREFIX_.'referrer_cache (id_referrer, id_connections_source) ( + SELECT id_referrer, id_connections_source + FROM '._DB_PREFIX_.'referrer r + LEFT JOIN '._DB_PREFIX_.'connections_source cs ON ('.self::$_join.') + WHERE id_connections_source = '.(int)($id_connections_source).' + )'; + Db::getInstance()->Execute($sql); } + /** + * Get list of referrers connections of a customer + * + * @param int $id_customer + */ public static function getReferrers($id_customer) { - return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' - SELECT DISTINCT c.date_add, r.name - FROM '._DB_PREFIX_.'guest g - LEFT JOIN '._DB_PREFIX_.'connections c ON c.id_guest = g.id_guest - LEFT JOIN '._DB_PREFIX_.'connections_source cs ON c.id_connections = cs.id_connections - LEFT JOIN '._DB_PREFIX_.'referrer r ON ('.self::$_join.') - WHERE g.id_customer = '.(int)($id_customer).' - AND r.name IS NOT NULL'); + $sql = 'SELECT DISTINCT c.date_add, r.name, s.name AS shop_name + FROM '._DB_PREFIX_.'guest g + LEFT JOIN '._DB_PREFIX_.'connections c ON c.id_guest = g.id_guest + LEFT JOIN '._DB_PREFIX_.'connections_source cs ON c.id_connections = cs.id_connections + LEFT JOIN '._DB_PREFIX_.'referrer r ON ('.self::$_join.') + LEFT JOIN '._DB_PREFIX_.'shop s ON s.id_shop = c.id_shop + WHERE g.id_customer = '.(int)($id_customer).' + AND r.name IS NOT NULL + ORDER BY c.date_add DESC'; + return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); } - - public function getStatsVisits($id_product = null, $employee = null) + + /** + * Get some statistics on visitors connection for current referrer + * + * @param int $id_product + * @param int $employee + * @param int $shopID Since 1.5.0 + */ + public function getStatsVisits($id_product = null, $employee = null, $shopID = null) { - list($join, $where) = array('',''); - if ((int)($id_product)) + $join = $where = ''; + if ($id_product) { $join = 'LEFT JOIN `'._DB_PREFIX_.'page` p ON cp.`id_page` = p.`id_page` LEFT JOIN `'._DB_PREFIX_.'page_type` pt ON pt.`id_page_type` = p.`id_page_type`'; - $where = 'AND pt.`name` = \'product.php\' + $where = ' AND pt.`name` = \'product\' AND p.`id_object` = '.(int)($id_product); } - return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' - SELECT COUNT(DISTINCT cs.id_connections_source) AS visits, - COUNT(DISTINCT cs.id_connections) as visitors, - COUNT(DISTINCT c.id_guest) as uniqs, - COUNT(DISTINCT cp.time_start) as pages - FROM '._DB_PREFIX_.'referrer_cache rc - LEFT JOIN '._DB_PREFIX_.'connections_source cs ON rc.id_connections_source = cs.id_connections_source - LEFT JOIN '._DB_PREFIX_.'connections c ON cs.id_connections = c.id_connections - LEFT JOIN '._DB_PREFIX_.'connections_page cp ON cp.id_connections = c.id_connections - '.$join.' - WHERE cs.date_add BETWEEN '.ModuleGraph::getDateBetween($employee).' - AND rc.id_referrer = '.(int)($this->id).' - '.$where); + $sql = 'SELECT COUNT(DISTINCT cs.id_connections_source) AS visits, + COUNT(DISTINCT cs.id_connections) as visitors, + COUNT(DISTINCT c.id_guest) as uniqs, + COUNT(DISTINCT cp.time_start) as pages + FROM '._DB_PREFIX_.'referrer_cache rc + LEFT JOIN '._DB_PREFIX_.'referrer r ON rc.id_referrer = r.id_referrer + LEFT JOIN '._DB_PREFIX_.'referrer_shop rs ON r.id_referrer = rs.id_referrer + LEFT JOIN '._DB_PREFIX_.'connections_source cs ON rc.id_connections_source = cs.id_connections_source + LEFT JOIN '._DB_PREFIX_.'connections c ON cs.id_connections = c.id_connections + LEFT JOIN '._DB_PREFIX_.'connections_page cp ON cp.id_connections = c.id_connections + '.$join.' + WHERE cs.date_add BETWEEN '.ModuleGraph::getDateBetween($employee).' + '.Shop::sqlRestriction(false, 'rs', $shopID).' + '.Shop::sqlRestriction(false, 'c', $shopID).' + AND rc.id_referrer = '.(int)$this->id + .$where; + return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql); } - - public function getRegistrations($id_product = null, $employee = null) + + /** + * Get some statistics on customers registrations for current referrer + * + * @param int $id_product + * @param int $employee + * @param int $shopID Since 1.5.0 + */ + public function getRegistrations($id_product = null, $employee = null, $shopID = null) { - list($join, $where) = array('',''); - if ((int)($id_product)) + $join = $where = ''; + if ($id_product) { $join = 'LEFT JOIN '._DB_PREFIX_.'connections_page cp ON cp.id_connections = c.id_connections LEFT JOIN `'._DB_PREFIX_.'page` p ON cp.`id_page` = p.`id_page` LEFT JOIN `'._DB_PREFIX_.'page_type` pt ON pt.`id_page_type` = p.`id_page_type`'; - $where = 'AND pt.`name` = \'product.php\' + $where = ' AND pt.`name` = \'product\' AND p.`id_object` = '.(int)($id_product); } - $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' - SELECT COUNT(DISTINCT cu.id_customer) AS registrations - FROM '._DB_PREFIX_.'referrer_cache rc - LEFT JOIN '._DB_PREFIX_.'connections_source cs ON rc.id_connections_source = cs.id_connections_source - LEFT JOIN '._DB_PREFIX_.'connections c ON cs.id_connections = c.id_connections - LEFT JOIN '._DB_PREFIX_.'guest g ON g.id_guest = c.id_guest - LEFT JOIN '._DB_PREFIX_.'customer cu ON cu.id_customer = g.id_customer - '.$join.' - WHERE cu.date_add BETWEEN '.ModuleGraph::getDateBetween($employee).' - AND cu.date_add > cs.date_add - AND rc.id_referrer = '.(int)($this->id).' - '.$where); - return $result['registrations']; + $sql = 'SELECT COUNT(DISTINCT cu.id_customer) AS registrations + FROM '._DB_PREFIX_.'referrer_cache rc + LEFT JOIN '._DB_PREFIX_.'referrer_shop rs ON rc.id_referrer = rs.id_referrer + LEFT JOIN '._DB_PREFIX_.'connections_source cs ON rc.id_connections_source = cs.id_connections_source + LEFT JOIN '._DB_PREFIX_.'connections c ON cs.id_connections = c.id_connections + LEFT JOIN '._DB_PREFIX_.'guest g ON g.id_guest = c.id_guest + LEFT JOIN '._DB_PREFIX_.'customer cu ON cu.id_customer = g.id_customer + '.$join.' + WHERE cu.date_add BETWEEN '.ModuleGraph::getDateBetween($employee).' + '.Shop::sqlRestriction(false, 'rs', $shopID).' + '.Shop::sqlRestriction(false, 'c', $shopID).' + '.Shop::sqlRestriction(true, 'cu', $shopID).' + AND cu.date_add > cs.date_add + AND rc.id_referrer = '.(int)($this->id) + .$where; + $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql); + return (int)$result['registrations']; } - - public function getStatsSales($id_product = null, $employee = null) + + /** + * Get some statistics on orders for current referrer + * + * @param int $id_product + * @param int $employee + * @param int $shopID Since 1.5.0 + */ + public function getStatsSales($id_product = null, $employee = null, $shopID = null) { - list($join, $where) = array('',''); - if ((int)($id_product)) + $join = $where = ''; + if ($id_product) { $join = 'LEFT JOIN '._DB_PREFIX_.'order_detail od ON oo.id_order = od.id_order'; - $where = 'AND od.product_id = '.(int)($id_product); + $where = ' AND od.product_id = '.(int)($id_product); } - $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' - SELECT oo.id_order - FROM '._DB_PREFIX_.'referrer_cache rc - INNER JOIN '._DB_PREFIX_.'connections_source cs ON rc.id_connections_source = cs.id_connections_source - INNER JOIN '._DB_PREFIX_.'connections c ON cs.id_connections = c.id_connections - INNER JOIN '._DB_PREFIX_.'guest g ON g.id_guest = c.id_guest - LEFT JOIN '._DB_PREFIX_.'orders oo ON oo.id_customer = g.id_customer - '.$join.' - WHERE oo.invoice_date BETWEEN '.ModuleGraph::getDateBetween($employee).' - AND oo.date_add > cs.date_add - AND rc.id_referrer = '.(int)($this->id).' - AND oo.valid = 1 - '.$where); + $sql = 'SELECT oo.id_order + FROM '._DB_PREFIX_.'referrer_cache rc + LEFT JOIN '._DB_PREFIX_.'referrer_shop rs ON rc.id_referrer = rs.id_referrer + INNER JOIN '._DB_PREFIX_.'connections_source cs ON rc.id_connections_source = cs.id_connections_source + INNER JOIN '._DB_PREFIX_.'connections c ON cs.id_connections = c.id_connections + INNER JOIN '._DB_PREFIX_.'guest g ON g.id_guest = c.id_guest + LEFT JOIN '._DB_PREFIX_.'orders oo ON oo.id_customer = g.id_customer + '.$join.' + WHERE oo.invoice_date BETWEEN '.ModuleGraph::getDateBetween($employee).' + '.Shop::sqlRestriction(false, 'rs', $shopID).' + '.Shop::sqlRestriction(false, 'c', $shopID).' + '.Shop::sqlRestriction(true, 'oo', $shopID).' + AND oo.date_add > cs.date_add + AND rc.id_referrer = '.(int)($this->id).' + AND oo.valid = 1' + .$where; + $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); $implode = array(); foreach ($result as $row) @@ -218,41 +246,63 @@ class ReferrerCore extends ObjectModel $implode[] = (int)$row['id_order']; if ($implode) - return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' - SELECT COUNT(o.id_order) AS orders, SUM(o.total_paid_real / o.conversion_rate) AS sales - FROM '._DB_PREFIX_.'orders o - WHERE o.id_order IN ('.implode($implode, ',').') - AND o.valid = 1'); + { + $sql = 'SELECT COUNT(id_order) AS orders, SUM(total_paid_real / conversion_rate) AS sales + FROM '._DB_PREFIX_.'orders + WHERE id_order IN ('.implode($implode, ',').') + '.Shop::sqlRestriction(true, '', $shopID).' + AND valid = 1'; + return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql); + } else return array('orders' => 0, 'sales' => 0); } + /** + * Refresh cache data of referrer statistics in referrer_shop table + * + * @param array $referrers + * @param int $employee + */ public static function refreshCache($referrers = null, $employee = null) { if (!$referrers OR !is_array($referrers)) $referrers = Db::getInstance()->ExecuteS('SELECT id_referrer FROM '._DB_PREFIX_.'referrer'); foreach ($referrers as $row) { - $referrer = new Referrer((int)($row['id_referrer'])); - $statsVisits = $referrer->getStatsVisits(null, $employee); - $referrer->cache_visitors = $statsVisits['uniqs']; - $referrer->cache_visits = $statsVisits['visits']; - $referrer->cache_pages = $statsVisits['pages']; - $registrations = $referrer->getRegistrations(null, $employee); - $referrer->cache_registrations = (int)($registrations); - $statsSales = $referrer->getStatsSales(null, $employee); - $referrer->cache_orders = (int)($statsSales['orders']); - $referrer->cache_sales = number_format($statsSales['sales'], 2, '.', ''); - $referrer->cache_reg_rate = $statsVisits['uniqs'] ? (int)($registrations) / $statsVisits['uniqs'] : 0; - $referrer->cache_order_rate = $statsVisits['uniqs'] ? (int)($statsSales['orders']) / $statsVisits['uniqs'] : 0; - if (!$referrer->update()) - Tools::dieObject(mysql_error()); - Configuration::updateValue('PS_REFERRERS_CACHE_LIKE', ModuleGraph::getDateBetween($employee)); - Configuration::updateValue('PS_REFERRERS_CACHE_DATE', date('Y-m-d H:i:s')); + $referrer = new Referrer($row['id_referrer']); + foreach (Shop::getShops(true, null, true) as $shopID) + { + if (!$referrer->isAssociatedToShop($shopID)) + continue; + + $statsVisits = $referrer->getStatsVisits(null, $employee, $shopID); + $registrations = $referrer->getRegistrations(null, $employee, $shopID); + $statsSales = $referrer->getStatsSales(null, $employee, $shopID); + + Db::getInstance()->autoExecute(_DB_PREFIX_.'referrer_shop', array( + 'cache_visitors' => $statsVisits['uniqs'], + 'cache_visits' => $statsVisits['visits'], + 'cache_pages' => $statsVisits['pages'], + 'cache_registrations' =>$registrations, + 'cache_orders' => $statsSales['orders'], + 'cache_sales' => number_format($statsSales['sales'], 2, '.', ''), + 'cache_reg_rate' => $statsVisits['uniqs'] ? $registrations / $statsVisits['uniqs'] : 0, + 'cache_order_rate' => $statsVisits['uniqs'] ? $statsSales['orders'] / $statsVisits['uniqs'] : 0, + ), 'UPDATE', 'id_referrer = '.$referrer->id.' AND id_shop = '.$shopID); + } } + + Configuration::updateValue('PS_REFERRERS_CACHE_LIKE', ModuleGraph::getDateBetween($employee)); + Configuration::updateValue('PS_REFERRERS_CACHE_DATE', date('Y-m-d H:i:s')); return true; } + /** + * Cache liaison between connections_source data and referrers data + * + * @param array $referrers + */ public static function refreshIndex($referrers = null) { if (!$referrers OR !is_array($referrers)) @@ -310,6 +360,4 @@ class ReferrerCore extends ObjectModel $jsonArray[] = '"percent_fee":"'.Tools::displayPrice($statsSales['sales'] * $referrer->percent_fee / 100, $currency).'"'; die ('[{'.implode(',', $jsonArray).'}]'); } -} - - +} \ No newline at end of file diff --git a/classes/Shop.php b/classes/Shop.php index bacee6ef0..9549a12f4 100644 --- a/classes/Shop.php +++ b/classes/Shop.php @@ -71,6 +71,7 @@ class ShopCore extends ObjectModel 'stock' => array('type' => 'fk_shop', 'primary' => 'id_stock'), 'product' => array('type' => 'shop'), 'product_lang' => array('type' => 'fk_shop'), + 'referrer' => array('type' => 'shop'), 'store' => array('type' => 'shop'), 'webservice_account' => array('type' => 'shop'), ); @@ -103,6 +104,17 @@ class ShopCore extends ObjectModel return $fields; } + /** + * Get an instance of a shop + * + * @param int $id shop ID + * @return Shop + */ + public static function getInstance($id) + { + return new Shop($id); + } + public static function getAssoTables() { return self::$assoTables; diff --git a/css/admin.css b/css/admin.css index 1dedfd1b4..b52cb94ca 100644 --- a/css/admin.css +++ b/css/admin.css @@ -915,7 +915,7 @@ table.permissions td { } #header_shoplist select.shopList{ - background-image: url("../../../img/t/AdminShop.gif"); + background-image: url("../img/t/AdminShop.gif"); background-position: 1px 50%; background-repeat: no-repeat; padding: 1px 1px 1px 14px; diff --git a/install-dev/sql/db.sql b/install-dev/sql/db.sql index 3506654e4..730c657c6 100644 --- a/install-dev/sql/db.sql +++ b/install-dev/sql/db.sql @@ -1313,14 +1313,6 @@ CREATE TABLE `PREFIX_referrer` ( `base_fee` decimal(5,2) NOT NULL default '0.00', `percent_fee` decimal(5,2) NOT NULL default '0.00', `click_fee` decimal(5,2) NOT NULL default '0.00', - `cache_visitors` int(11) default NULL, - `cache_visits` int(11) default NULL, - `cache_pages` int(11) default NULL, - `cache_registrations` int(11) default NULL, - `cache_orders` int(11) default NULL, - `cache_sales` decimal(17,2) default NULL, - `cache_reg_rate` decimal(5,4) default NULL, - `cache_order_rate` decimal(5,4) default NULL, `date_add` datetime NOT NULL, PRIMARY KEY (`id_referrer`) ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8; @@ -1331,6 +1323,20 @@ CREATE TABLE `PREFIX_referrer_cache` ( PRIMARY KEY (`id_connections_source`, `id_referrer`) ) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8; +CREATE TABLE `PREFIX_referrer_shop` ( + `id_referrer` int(10) unsigned NOT NULL auto_increment, + `id_shop` int(10) unsigned NOT NULL default '1', + `cache_visitors` int(11) default NULL, + `cache_visits` int(11) default NULL, + `cache_pages` int(11) default NULL, + `cache_registrations` int(11) default NULL, + `cache_orders` int(11) default NULL, + `cache_sales` decimal(17,2) default NULL, + `cache_reg_rate` decimal(5,4) default NULL, + `cache_order_rate` decimal(5,4) default NULL, + PRIMARY KEY (`id_referrer`, `id_shop`) +) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8; + CREATE TABLE `PREFIX_scene` ( `id_scene` int(10) unsigned NOT NULL auto_increment, `active` tinyint(1) NOT NULL default '1', diff --git a/install-dev/sql/upgrade/1.5.0.0.sql b/install-dev/sql/upgrade/1.5.0.0.sql index f7cdde61c..2bca42913 100755 --- a/install-dev/sql/upgrade/1.5.0.0.sql +++ b/install-dev/sql/upgrade/1.5.0.0.sql @@ -284,4 +284,20 @@ INSERT INTO PREFIX_stock (id_product, id_product_attribute, id_group_shop, id_sh UPDATE PREFIX_stock_mvt sm SET sm.id_stock = (SELECT s.id_stock FROM PREFIX_stock s WHERE s.id_product = sm.id_product AND s.id_product_attribute = sm.id_product_attribute); ALTER TABLE PREFIX_stock_mvt DROP id_product, DROP id_product_attribute; +CREATE TABLE `PREFIX_referrer_shop` ( + `id_referrer` int(10) unsigned NOT NULL auto_increment, + `id_shop` int(10) unsigned NOT NULL default '1', + `cache_visitors` int(11) default NULL, + `cache_visits` int(11) default NULL, + `cache_pages` int(11) default NULL, + `cache_registrations` int(11) default NULL, + `cache_orders` int(11) default NULL, + `cache_sales` decimal(17,2) default NULL, + `cache_reg_rate` decimal(5,4) default NULL, + `cache_order_rate` decimal(5,4) default NULL, + PRIMARY KEY (`id_referrer`, `id_shop`) +) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8; +INSERT INTO `PREFIX_referrer_shop` (`id_referrer`, `id_shop`) SELECT `id_referrer`, 1 FROM `PREFIX_referrer`; +ALTER TABLE `PREFIX_referrer` DROP `cache_visitors`, DROP `cache_visits`, DROP `cache_pages`, DROP `cache_registrations`, DROP `cache_orders`, DROP `cache_sales`, DROP `cache_reg_rate`, DROP `cache_order_rate`; + /* PHP:create_multistore(); */