* @copyright 2007-2014 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
if (!defined('_PS_ADMIN_DIR_')) define('_PS_ADMIN_DIR_', getcwd().'/..');
if (Tools::getValue('token') == Tools::getAdminToken('AdminReferrers'.(int)Tab::getIdFromClassName('AdminReferrers').(int)Tools::getValue('id_employee')))
{
if (Tools::isSubmit('ajaxProductFilter'))
Referrer::getAjaxProduct(
(int)Tools::getValue('id_referrer'),
(int)Tools::getValue('id_product'),
new Employee((int)Tools::getValue('id_employee'))
);
else if (Tools::isSubmit('ajaxFillProducts'))
{
$json_array = array();
$result = Db::getInstance()->executeS('
SELECT p.id_product, pl.name
FROM '._DB_PREFIX_.'product p
LEFT JOIN '._DB_PREFIX_.'product_lang pl
ON (p.id_product = pl.id_product AND pl.id_lang = '.(int)Tools::getValue('id_lang').')
'.(Tools::getValue('filter') != 'undefined' ? 'WHERE name LIKE "%'.pSQL(Tools::getValue('filter')).'%"' : '')
);
foreach ($result as $row)
$json_array[] = '{id_product:'.(int)$row['id_product'].',name:\''.addslashes($row['name']).'\'}';
die ('['.implode(',', $json_array).']');
}
}
class AdminReferrersControllerCore extends AdminController
{
public function __construct()
{
$this->bootstrap = true;
$this->table = 'referrer';
$this->className = 'Referrer';
$this->fields_list = array(
'id_referrer' => array(
'title' => $this->l('ID'),
'width' => 25,
'align' => 'center'
),
'name' => array(
'title' => $this->l('Name'),
'width' => 80
),
'cache_visitors' => array(
'title' => $this->l('Visitors'),
'width' => 30,
'align' => 'center'
),
'cache_visits' => array(
'title' => $this->l('Visits'),
'width' => 30,
'align' => 'center'
),
'cache_pages' => array(
'title' => $this->l('Pages'),
'width' => 30,
'align' => 'center'
),
'cache_registrations' => array(
'title' => $this->l('Reg.'),
'width' => 30,
'align' => 'center'
),
'cache_orders' => array(
'title' => $this->l('Orders'),
'width' => 30,
'align' => 'center'
),
'cache_sales' => array(
'title' => $this->l('Sales'),
'width' => 80,
'align' => 'right',
'prefix' => '',
'suffix' => '',
'price' => true
),
'cart' => array(
'title' => $this->l('Avg. cart'),
'width' => 50,
'align' => 'right',
'price' => true,
'havingFilter' => true
),
'cache_reg_rate' => array(
'title' => $this->l('Reg. rate'),
'width' => 30,
'align' => 'center'
),
'cache_order_rate' => array(
'title' => $this->l('Order rate'),
'width' => 30,
'align' => 'center'
),
'fee0' => array(
'title' => $this->l('Click'),
'width' => 30,
'align' => 'right',
'price' => true,
'havingFilter' => true
),
'fee1' => array(
'title' => $this->l('Base'),
'width' => 30,
'align' => 'right',
'price' => true,
'havingFilter' => true
),
'fee2' => array(
'title' => $this->l('Percent'),
'width' => 30,
'align' => 'right',
'price' => true,
'havingFilter' => true
)
);
$this->bulk_actions = array(
'delete' => array(
'text' => $this->l('Delete selected'),
'confirm' => $this->l('Delete selected items?'),
'icon' => 'icon-trash'
)
);
parent::__construct();
}
public function setMedia()
{
parent::setMedia();
$this->context->controller->addJqueryUI('ui.datepicker');
}
public function initPageHeaderToolbar()
{
if(empty($this->display))
$this->page_header_toolbar_btn['new_referrer'] = array(
'href' => self::$currentIndex.'&addreferrer&token='.$this->token,
'desc' => $this->l('Add new referrer', null, null, false),
'icon' => 'process-icon-new'
);
parent::initPageHeaderToolbar();
}
public function renderList()
{
// Display list Referrers:
$this->addRowAction('view');
$this->addRowAction('edit');
$this->addRowAction('delete');
$this->_select = 'SUM(sa.cache_visitors) AS cache_visitors, SUM(sa.cache_visits) AS cache_visits, SUM(sa.cache_pages) AS cache_pages,
SUM(sa.cache_registrations) AS cache_registrations, SUM(sa.cache_orders) AS cache_orders, SUM(sa.cache_sales) AS cache_sales,
IF(sa.cache_orders > 0, ROUND(sa.cache_sales/sa.cache_orders, 2), 0) as cart, (sa.cache_visits*click_fee) as fee0,
(sa.cache_orders*base_fee) as fee1, (sa.cache_sales*percent_fee/100) as fee2';
$this->_join = '
LEFT JOIN `'._DB_PREFIX_.'referrer_shop` sa
ON (sa.'.$this->identifier.' = a.'.$this->identifier.' AND sa.id_shop IN ('.implode(', ', Shop::getContextListShopID()).'))';
$this->_group = 'GROUP BY sa.id_referrer';
$this->tpl_list_vars = array(
'enable_calendar' => $this->enableCalendar(),
'calendar_form' => $this->displayCalendar(),
'settings_form' => $this->displaySettings()
);
return parent::renderList();
}
public function renderForm()
{
$uri = Tools::getHttpHost(true, true).__PS_BASE_URI__;
$this->fields_form[0] = array('form' => array(
'legend' => array(
'title' => $this->l('Affiliate'),
'icon' => 'icon-group'
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Name'),
'name' => 'name',
'required' => true,
'autocomplete' => false
),
array(
'type' => 'password',
'label' => $this->l('Password'),
'name' => 'passwd',
'desc' => $this->l('Leave blank if no change.'),
'autocomplete' => false
)
),
'submit' => array('title' => $this->l('Save')),
));
if (Module::isInstalled('trackingfront'))
$this->fields_form[0]['form']['desc'] = array(
$this->l('Affiliates can access their data with this name and password.'),
$this->l('Front access:').' '.$uri.'modules/trackingfront/stats.php'
);
else
$this->fields_form[0]['form']['desc'] = array(
sprintf($this->l('Please install the "%s" module in order to give your affiliates access their own statistics.'), Module::getModuleName('trackingfront'))
);
$this->fields_form[1] = array('form' => array(
'legend' => array(
'title' => $this->l('Commission plan'),
'icon' => 'icon-dollar'
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Click fee'),
'name' => 'click_fee',
'desc' => $this->l('Fee given for each visit.')
),
array(
'type' => 'text',
'label' => $this->l('Base fee'),
'name' => 'base_fee',
'desc' => $this->l('Fee given for each order placed.')
),
array(
'type' => 'text',
'label' => $this->l('Percent fee'),
'name' => 'percent_fee',
'desc' => $this->l('Percent of the sales.')
)
),
'submit' => array('title' => $this->l('Save'))
));
if (Shop::isFeatureActive())
{
$this->fields_form[1]['form']['input'][] = array(
'type' => 'shop',
'label' => $this->l('Shop association'),
'name' => 'checkBoxShopAsso',
);
}
$this->fields_form[2] = array('form' => array(
'legend' => array(
'title' => $this->l('Technical information -- Simple mode'),
'icon' => 'icon-cogs'
),
'help' => true,
'input' => array(
array(
'type' => 'textarea',
'label' => $this->l('Include'),
'name' => 'http_referer_like',
'cols' => 40,
'rows' => 1,
'legend' => $this->l('HTTP referrer')
),
array(
'type' => 'textarea',
'label' => $this->l('Exclude'),
'name' => 'http_referer_like_not',
'cols' => 40,
'rows' => 1
),
array(
'type' => 'textarea',
'label' => $this->l('Include'),
'name' => 'request_uri_like',
'cols' => 40,
'rows' => 1,
'legend' => $this->l('Request URI')
),
array(
'type' => 'textarea',
'label' => $this->l('Exclude'),
'name' => 'request_uri_like_not',
'cols' => 40,
'rows' => 1
)
),
'desc' => $this->l('If you know how to use MySQL regular expressions, you can use the').'
'.$this->l('expert mode').'.',
'submit' => array(
'title' => $this->l('Save'),
)
));
$this->fields_form[3] = array('form' => array(
'legend' => array(
'title' => $this->l('Technical information -- Expert mode'),
'icon' => 'icon-cogs'
),
'input' => array(
array(
'type' => 'textarea',
'label' => $this->l('Include'),
'name' => 'http_referer_regexp',
'cols' => 40,
'rows' => 1,
'legend' => $this->l('HTTP referrer')
),
array(
'type' => 'textarea',
'label' => $this->l('Exclude'),
'name' => 'http_referer_regexp_not',
'cols' => 40,
'rows' => 1
),
array(
'type' => 'textarea',
'label' => $this->l('Include'),
'name' => 'request_uri_regexp',
'cols' => 40,
'rows' => 1,
'legend' => $this->l('Request URI')
),
array(
'type' => 'textarea',
'label' => $this->l('Exclude'),
'name' => 'request_uri_regexp_not',
'cols' => 40,
'rows' => 1
)
)
));
$this->multiple_fieldsets = true;
if (!($obj = $this->loadObject(true)))
return;
$this->fields_value = array(
'click_fee' => number_format((float)($this->getFieldValue($obj, 'click_fee')), 2),
'base_fee' => number_format((float)($this->getFieldValue($obj, 'base_fee')), 2),
'percent_fee' => number_format((float)($this->getFieldValue($obj, 'percent_fee')), 2),
'http_referer_like' => str_replace('\\', '\\\\', htmlentities($this->getFieldValue($obj, 'http_referer_like'), ENT_COMPAT, 'UTF-8')),
'http_referer_like_not' => str_replace('\\', '\\\\', htmlentities($this->getFieldValue($obj, 'http_referer_like_not'), ENT_COMPAT, 'UTF-8')),
'request_uri_like' => str_replace('\\', '\\\\', htmlentities($this->getFieldValue($obj, 'request_uri_like'), ENT_COMPAT, 'UTF-8')),
'request_uri_like_not' => str_replace('\\', '\\\\', htmlentities($this->getFieldValue($obj, 'request_uri_like_not'), ENT_COMPAT, 'UTF-8'))
);
$this->tpl_form_vars = array('uri' => $uri);
return parent::renderForm();
}
public function displayCalendar($action = null, $table = null, $identifier = null, $id = null)
{
return AdminReferrersController::displayCalendarForm(array(
'Calendar' => $this->l('Calendar'),
'Day' => $this->l('Today'),
'Month' => $this->l('Month'),
'Year' => $this->l('Year')
), $this->token, $action, $table, $identifier, $id);
}
public static function displayCalendarForm($translations, $token, $action = null, $table = null, $identifier = null, $id = null)
{
$context = Context::getContext();
$tpl = $context->controller->createTemplate('calendar.tpl');
$context->controller->addJqueryUI('ui.datepicker');
$tpl->assign(array(
'current' => self::$currentIndex,
'token' => $token,
'action' => $action,
'table' => $table,
'identifier' => $identifier,
'id' => $id,
'translations' => $translations,
'datepickerFrom' => Tools::getValue('datepickerFrom', $context->employee->stats_date_from),
'datepickerTo' => Tools::getValue('datepickerTo', $context->employee->stats_date_to)
));
return $tpl->fetch();
}
public function displaySettings()
{
if (!Tools::isSubmit('viewreferrer'))
{
$tpl = $this->createTemplate('form_settings.tpl');
$statsdata = Module::getInstanceByName('statsdata');
$statsdata_name = false;
if (Validate::isLoadedObject($statsdata))
$statsdata_name = $statsdata->displayName;
$tpl->assign(array(
'statsdata_name' => $statsdata_name,
'current' => self::$currentIndex,
'token' => $this->token,
'tracking_dt' => (int)Tools::getValue('tracking_dt', Configuration::get('TRACKING_DIRECT_TRAFFIC'))
));
return $tpl->fetch();
}
}
protected function enableCalendar()
{
return (!Tools::isSubmit('add'.$this->table) && !Tools::isSubmit('submitAdd'.$this->table) && !Tools::isSubmit('update'.$this->table));
}
public function postProcess()
{
if ($this->enableCalendar())
{
// Warning, instantiating a controller here changes the controller in the Context...
$calendar_tab = new AdminStatsController();
$calendar_tab->postProcess();
// ...so we set it back to the correct one here
$this->context->controller = $this;
}
if (Tools::isSubmit('submitSettings'))
if ($this->tabAccess['edit'] === '1')
if (Configuration::updateValue('TRACKING_DIRECT_TRAFFIC', (int)Tools::getValue('tracking_dt')))
Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.Tools::getValue('token'));
if (ModuleGraph::getDateBetween() != Configuration::get('PS_REFERRERS_CACHE_LIKE') || Tools::isSubmit('submitRefreshCache'))
Referrer::refreshCache();
if (Tools::isSubmit('submitRefreshIndex'))
Referrer::refreshIndex();
return parent::postProcess();
}
public function renderView()
{
$referrer = new Referrer((int)Tools::getValue('id_referrer'));
$display_tab = array(
'uniqs' => $this->l('Unique visitors'),
'visitors' => $this->l('Visitors'),
'visits' => $this->l('Visits'),
'pages' => $this->l('Pages viewed'),
'registrations' => $this->l('Registrations'),
'orders' => $this->l('Orders'),
'sales' => $this->l('Sales'),
'reg_rate' => $this->l('Registration rate'),
'order_rate' => $this->l('Order rate'),
'click_fee' => $this->l('Click fee'),
'base_fee' => $this->l('Base fee'),
'percent_fee' => $this->l('Percent fee'));
$this->tpl_view_vars = array(
'enable_calendar' => $this->enableCalendar(),
'calendar_form' => $this->displayCalendar($this->action, $this->table, $this->identifier, (int)Tools::getValue($this->identifier)),
'referrer' => new Referrer((int)Tools::getValue('id_referrer')),
'display_tab' => $display_tab,
'id_employee' => (int)$this->context->employee->id,
'id_lang' => (int)$this->context->language->id
);
return parent::renderView();
}
}