Files
PrestaShop/controllers/admin/AdminHomeController.php
2013-10-07 23:42:26 +03:00

697 lines
27 KiB
PHP

<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
class AdminHomeControllerCore extends AdminController
{
const TIPS_TIMEOUT = 5;
protected function _displayOptimizationTips()
{
$link = $this->context->link;
$content = '';
$rewrite = 0;
if (Configuration::get('PS_REWRITING_SETTINGS'))
{
$rewrite = 2;
if (!file_exists(dirname(__FILE__).'/../../.htaccess'))
$rewrite = 1;
else
{
$stat = stat(dirname(__FILE__).'/../../.htaccess');
if (strtotime(Db::getInstance()->getValue('SELECT date_upd FROM '._DB_PREFIX_.'configuration WHERE name = "PS_REWRITING_SETTINGS"')) > $stat['mtime'])
$rewrite = 0;
}
}
$htaccessAfterUpdate = 2;
$htaccessOptimized = (Configuration::get('PS_HTACCESS_CACHE_CONTROL') ? 2 : 0);
if (!file_exists(dirname(__FILE__).'/../../.htaccess'))
{
if (Configuration::get('PS_HTACCESS_CACHE_CONTROL'))
$htaccessOptimized = 1;
}
else
{
$stat = stat(dirname(__FILE__).'/../../.htaccess');
$dateUpdHtaccess = Db::getInstance()->getValue('SELECT date_upd FROM '._DB_PREFIX_.'configuration WHERE name = "PS_HTACCESS_CACHE_CONTROL"');
if (Configuration::get('PS_HTACCESS_CACHE_CONTROL') && strtotime($dateUpdHtaccess) > $stat['mtime'])
$htaccessOptimized = 1;
$dateUpdate = Configuration::get('PS_LAST_SHOP_UPDATE');
if ($dateUpdate && strtotime($dateUpdate) > $stat['mtime'])
$htaccessAfterUpdate = 0;
}
$indexRebuiltAfterUpdate = 0;
$needRebuild = Configuration::get('PS_NEED_REBUILD_INDEX');
if ($needRebuild != '0');
$indexRebuiltAfterUpdate = 2;
$smartyOptimized = 0;
// Forcing compilation is not good, really slow
if (in_array(Configuration::get('PS_SMARTY_FORCE_COMPILE'), array(_PS_SMARTY_CHECK_COMPILE_, _PS_SMARTY_NO_COMPILE_)))
++$smartyOptimized;
// Enabling cache is better
if (Configuration::get('PS_SMARTY_CACHE'))
++$smartyOptimized;
// If the console is enabled, not good for production
if (Configuration::get('PS_SMARTY_CONSOLE') != _PS_SMARTY_CONSOLE_CLOSE_)
$smartyOptimized = 0;
$cccOptimized = Configuration::get('PS_CSS_THEME_CACHE');
$cccOptimized += Configuration::get('PS_JS_THEME_CACHE');
$cccOptimized += Configuration::get('PS_HTML_THEME_COMPRESSION');
$cccOptimized += Configuration::get('PS_JS_HTML_THEME_COMPRESSION');
if ($cccOptimized == 4)
$cccOptimized = 2;
else
$cccOptimized = 1;
$shopEnabled = (Configuration::get('PS_SHOP_ENABLE') ? 2 : 1);
$lights = array(
0 => array('image'=>'cross.png','color'=>'red'),
1 => array('image'=>'error.png','color'=>'orange'),
2 => array('image'=>'tick.png','color'=>'green'));
$opti_list = array();
if ($rewrite + $htaccessOptimized + $smartyOptimized + $cccOptimized + $shopEnabled + $htaccessAfterUpdate + $indexRebuiltAfterUpdate != 14)
{
$opti_list[] = array(
'title' => $this->l('URL rewriting'),
'href' => $link->getAdminLink('AdminMeta'),
'color' => $lights[$rewrite]['color'],
'image' => $lights[$rewrite]['image'],
);
$opti_list[] = array(
'title' => $this->l('Browser cache & compression'),
'href' => $link->getAdminLink('AdminPerformance'),
'color' => $lights[$htaccessOptimized]['color'],
'image' => $lights[$htaccessOptimized]['image'],
);
$opti_list[] = array(
'title' => $this->l('Smarty optimization'),
'href' => $link->getAdminLink('AdminPerformance'),
'color' => $lights[$smartyOptimized]['color'],
'image' => $lights[$smartyOptimized]['image'],
);
$opti_list[] = array(
'title' => $this->l('Combine, Compress & Cache'),
'href' => $link->getAdminLink('AdminPerformance'),
'color' => $lights[$cccOptimized]['color'],
'image' => $lights[$cccOptimized]['image'],
);
$opti_list[] = array(
'title' => $this->l('Shop enabled'),
'href' => $link->getAdminLink('AdminMaintenance'),
'color' => $lights[$shopEnabled]['color'],
'image' => $lights[$shopEnabled]['image'],
);
$opti_list[] = array(
'title' => $this->l('Index rebuilt after update'),
'href' => $link->getAdminLink('AdminSearchConf'),
'color' => $lights[$indexRebuiltAfterUpdate]['color'],
'image' => $lights[$indexRebuiltAfterUpdate]['image'],
);
$opti_list[] = array(
'title' => $this->l('.htaccess file up-to-date'),
'href' => $link->getAdminLink('AdminMeta'),
'color' => $lights[$htaccessAfterUpdate]['color'],
'image' => $lights[$htaccessAfterUpdate]['image'],
);
}
$this->context->smarty->assign(array(
'opti_list' => $opti_list,
'content' => $content,
'hide_tips' => Configuration::get('PS_HIDE_OPTIMIZATION_TIPS'))
);
$template = $this->createTemplate('optimizationTips.tpl');
return $template->fetch();
}
public function setMedia()
{
parent::setMedia();
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)
$this->addJqueryPlugin('excanvas');
$this->addJqueryPlugin('flot');
$this->addJqueryPlugin('fancybox');
}
protected function warnDomainName()
{
if (Shop::isFeatureActive())
return;
$shop = Context::getContext()->shop;
if ($_SERVER['HTTP_HOST'] != $shop->domain && $_SERVER['HTTP_HOST'] != $shop->domain_ssl && Tools::getValue('ajax') == false)
{
$warning = $this->l('You are currently connected under the following domain name:').' <span style="color: #CC0000;">'.$_SERVER['HTTP_HOST'].'</span><br />';
if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE'))
$warning .= sprintf($this->l('This is different from the shop domain name set in the Multistore settings: "%s".'), $shop->domain).'
'.preg_replace('@{link}(.*){/link}@', '<a href="index.php?controller=AdminShopUrl&id_shop_url='.(int)$shop->id.'&updateshop_url&token='.Tools::getAdminTokenLite('AdminShopUrl').'">$1</a>', $this->l('If this is your main domain, please {link}change it now{/link}.'));
else
$warning .= $this->l('This is different from the domain name set in the "SEO & URLs" tab.').'
'.preg_replace('@{link}(.*){/link}@', '<a href="index.php?controller=AdminMeta&token='.Tools::getAdminTokenLite('AdminMeta').'#conf_id_domain">$1</a>', $this->l('If this is your main domain, please {link}change it now{/link}.'));
$this->displayWarning($warning);
}
}
protected function getQuickLinks()
{
$quick_links = array();
$profile_access = Profile::getProfileAccesses($this->context->employee->id_profile);
if ($profile_access[(int)Tab::getIdFromClassName('AdminStats')]['view'])
$quick_links['first'] = array(
'href' => $this->context->link->getAdminLink('AdminStats').'&amp;module=statsbestproducts',
'title' => $this->l('Recently sold products.'),
'description' => $this->l('Create a new category and organize your catalog.'),
);
if ($profile_access[(int)Tab::getIdFromClassName('AdminOrders')]['add'])
$quick_links['second'] = array(
'href' => $this->context->link->getAdminLink('AdminOrders').'&amp;addorder',
'title' => $this->l('New order'),
'description' => $this->l('Fill your catalog with new products.'),
);
if ($profile_access[(int)Tab::getIdFromClassName('AdminSpecificPriceRule')]['add'])
$quick_links['third'] = array(
'href' => $this->context->link->getAdminLink('AdminSpecificPriceRule').'&amp;addspecific_price_rule',
'title' => $this->l('New price rule for catalog'),
'description' => $this->l('Monitor your activity with a thorough analysis of your shop.'),
);
if ($profile_access[(int)Tab::getIdFromClassName('AdminProducts')]['add'])
$quick_links['fourth'] = array(
'href' => $this->context->link->getAdminLink('AdminProducts').'&amp;addproduct',
'title' => $this->l('New product'),
'description' => $this->l('Add a new employee account and discharge a part of your duties as shop owner.'),
);
if ($profile_access[(int)Tab::getIdFromClassName('AdminModules')]['view'])
$quick_links['fifth'] = array(
'href' => $this->context->link->getAdminLink('AdminModules'),
'title' => $this->l('New module'),
'description' => $this->l('Configure your modules'),
);
if ($profile_access[(int)Tab::getIdFromClassName('AdminCartRules')]['add'])
$quick_links['sixth'] = array(
'href' => $this->context->link->getAdminLink('AdminCartRules').'&amp;addcart_rule',
'title' => $this->l('New price rule for cart'),
'description' => $this->l('Add new cart rule'),
);
if ($profile_access[(int)Tab::getIdFromClassName('AdminCmsContent')]['add'])
$quick_links['seventh'] = array(
'href' => $this->context->link->getAdminLink('AdminCmsContent').'&amp;addcms',
'title' => $this->l('New CMS page'),
'description' => $this->l('Add a new CMS page.'),
);
if ($profile_access[(int)Tab::getIdFromClassName('AdminCarts')]['view'])
$quick_links['eighth'] = array(
'href' => $this->context->link->getAdminLink('AdminCarts').'&amp;id_cart',
'title' => $this->l('Abandoned shopping carts'),
'description' => $this->l('View your customer\'s carts.'),
);
return $quick_links;
}
public function getCustomersService()
{
$all = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT COUNT(*) FROM '._DB_PREFIX_.'customer_thread');
$unread = (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT COUNT(*) FROM `'._DB_PREFIX_.'customer_thread` WHERE `status` = "open"');
$pending = (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT COUNT(*) FROM `'._DB_PREFIX_.'customer_thread` WHERE `status` LIKE "%pending%"');
$close = $all - ($unread + $pending);
$content = '
<div class="table_info" id="table_info_last">
<h5><a href="index.php?tab=AdminCustomerThreads&token='.Tools::getAdminTokenLite('AdminCustomerThreads').'">'.$this->l('View more').'</a> '.$this->l('Customer service').'</h5>
<table class="table_info_details" style="width:100%;">
<colgroup>
<col width="">
<col width="80px">
</colgroup>
<tr class="tr_odd">
<td class="td_align_left">
'.$this->l('Unread threads').'
</td>
<td>
'.$unread.'
</td>
</tr>
<tr>
<td class="td_align_left">
'.$this->l('Pending threads').'
</td>
<td>
'.$pending.'
</td>
</tr>
<tr class="tr_odd">
<td class="td_align_left">
'.$this->l('Closed threads').'
</td>
<td>
'.$close.'
</td>
</tr>
<tr>
<td class="td_align_left">
'.$this->l('Total threads').'
</td>
<td>
'.$all.'
</td>
</tr>
</table>
</div>';
return $content;
}
public function getMonthlyStatistics()
{
$currency = Tools::setCurrency((object)array('id_currency' => null));
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT IFNULL(SUM(`total_paid_real` / conversion_rate), "0") as total_sales, COUNT(*) as total_orders
FROM `'._DB_PREFIX_.'orders`
WHERE valid = 1
AND `invoice_date` BETWEEN \''.date('Y-m').'-01 00:00:00\' AND \''.date('Y-m').'-31 23:59:59\'
'.Shop::addSqlRestriction(Shop::SHARE_ORDER).'
');
$result2 = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT COUNT(`id_customer`) AS total_registrations
FROM `'._DB_PREFIX_.'customer` c
WHERE c.`date_add` BETWEEN \''.date('Y-m').'-01 00:00:00\' AND \''.date('Y-m').'-31 23:59:59\'
'.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).'
');
$result3 = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT SUM(pv.`counter`) AS total_viewed
FROM `'._DB_PREFIX_.'page_viewed` pv
LEFT JOIN `'._DB_PREFIX_.'date_range` dr ON pv.`id_date_range` = dr.`id_date_range`
LEFT JOIN `'._DB_PREFIX_.'page` p ON pv.`id_page` = p.`id_page`
LEFT JOIN `'._DB_PREFIX_.'page_type` pt ON pt.`id_page_type` = p.`id_page_type`
WHERE pt.`name` = \'product\'
AND dr.`time_start` BETWEEN \''.date('Y-m').'-01 00:00:00\' AND \''.date('Y-m').'-31 23:59:59\'
AND dr.`time_end` BETWEEN \''.date('Y-m').'-01 00:00:00\' AND \''.date('Y-m').'-31 23:59:59\'
'.Shop::addSqlRestriction().'
');
$results = array_merge($result, array_merge($result2, $result3));
$content = '<div class="table_info">
<h5><a href="index.php?tab=AdminStats&token='.Tools::getAdminTokenLite('AdminStats').'">'.$this->l('View more').'</a> '.$this->l('This month\'s activity').' </h5>
<table class="table_info_details" style="width:100%;">
<colgroup>
<col width="">
<col width="80px">
</colgroup>
<tr class="tr_odd">
<td class="td_align_left">
'.$this->l('Sales').'
</td>
<td>
'
.Tools::displayPrice($results['total_sales'], $currency)
.'
</td>
</tr>
<tr>
<td class="td_align_left">
'.$this->l('Total registrations').'
</td>
<td>
'.(int)($results['total_registrations']).'
</td>
</tr>
<tr class="tr_odd">
<td class="td_align_left">
'.$this->l('Total orders').'
</td>
<td>
'.(int)($results['total_orders']).'
</td>
</tr>
<tr>
<td class="td_align_left">
'.$this->l('Product pages viewed').'
</td>
<td>
'.(int)($results['total_viewed']).'
</td>
</tr>
</table>
</div>';
return $content;
}
public function getStatsSales()
{
$content = '<div id="table_info_large">
<h5><a href="index.php?tab=AdminStats&token='.Tools::getAdminTokenLite('AdminStats').'">'.$this->l('View more').'</a> <strong>'.$this->l('Statistics').'</strong> / '.$this->l('This week\'s sales').'</h5>
<div id="stat_google">';
$chart = new Chart();
$chart->getCurve(1)->setType('bars');
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT SUM(total_paid / conversion_rate) as total_converted, left(invoice_date, 10) as invoice_date
FROM '._DB_PREFIX_.'orders o
WHERE valid = 1
AND total_paid > 0
AND invoice_date BETWEEN \''.date('Y-m-d', strtotime('-7 DAYS', time())).' 00:00:00\' AND \''.date('Y-m-d H:i:s').'\'
'.Shop::addSqlRestriction(Shop::SHARE_ORDER).'
GROUP BY DATE(invoice_date)
');
foreach ($result as $row)
$chart->getCurve(1)->setPoint(strtotime($row['invoice_date'].' 02:00:00'), $row['total_converted']);
$chart->setSize(580, 170);
$chart->setTimeMode(strtotime('-7 DAYS', time()), time(), 'd');
$currency = Tools::setCurrency((object)array('id_currency' => null));
$chart->getCurve(1)->setLabel($this->l('Sales + Tax').' ('.strtoupper($currency->iso_code).')');
$content .= $chart->fetch();
$content .= ' </div>
</div>';
return $content;
}
public function getLastOrders()
{
$content = '
<table cellpadding="0" cellspacing="0" id="table_customer" style="width:100%;">
<thead>
<tr>
<th class="order_id"><span class="first">'.$this->l('ID').'</span></th>
<th class="order_customer"><span>'.$this->l('Customer Name').'</span></th>
<th class="order_status"><span>'.$this->l('Status').'</span></th>
<th class="order_total"><span>'.$this->l('Total').'</span></th>
<th class="order_action"><span class="last">'.$this->l('Action').'</span></th>
<tr>
</thead>
<tbody>';
$orders = Order::getOrdersWithInformations(10);
$i = 0;
foreach ($orders as $order)
{
$currency = Currency::getCurrency((int)$order['id_currency']);
$content .= '
<tr'.($i % 2 ? ' id="order_line1"' : '').'>
<td class="order_td_first order_id">'.(int)$order['id_order'].'</td>
<td class="order_customer">'.Tools::htmlentitiesUTF8($order['firstname']).' '.Tools::htmlentitiesUTF8($order['lastname']).'</td>
<td class="order_status">'.Tools::htmlentitiesUTF8($order['state_name']).'</td>
<td class="order_total">'.Tools::displayPrice((float)$order['total_paid'], $currency).'</td>
<td class="order_action">
<a href="index.php?tab=AdminOrders&id_order='.(int)$order['id_order'].'&vieworder&token='.Tools::getAdminTokenLite('AdminOrders').'" title="'.$this->l('Details').'"><img src="../img/admin/details.gif" alt="'.$this->l('See').'" /></a>
</td>
</tr>
';
$i++;
}
$content .= '
</tbody>
</table>
';
return $content;
}
public function ajaxProcessRefreshCheckVersion()
{
$upgrade = new Upgrader(true);
if ($upgrade)
{
$json['status'] = 'ok';
$json['upgrade']['need_upgrade'] = $upgrade->need_upgrade;
$json['upgrade']['link'] = $upgrade->link;
$json['upgrade']['version_name'] = $upgrade->version_name;
$this->content = Tools::jsonEncode($json);
}
else
$this->content = '{"status":"error"}';
}
public function ajaxProcessHideOptimizationTips()
{
if (Configuration::updateValue('PS_HIDE_OPTIMIZATION_TIPS', 1))
{
$result['result'] = 'ok';
$result['msg'] = $this->l('Optimization Tips will be hidden by default.');
}
else
{
$result['result'] = 'error';
$result['msg'] = $this->l('an error occurred');
}
$this->content = Tools::jsonEncode($result);
}
public function ajaxProcessGetAdminHomeElement()
{
$this->content_only = true;
$result = array();
$content = '';
$protocol = Tools::getCurrentUrlProtocolPrefix();
$isoUser = Context::getContext()->language->iso_code;
$isoCountry = Context::getContext()->country->iso_code;
$stream_context = @stream_context_create(array('http' => array('method'=> 'GET', 'timeout' => 2)));
// SCREENCAST
$result['screencast'] = 'OK';
// PREACTIVATION
$result['partner_preactivation'] = $this->getBlockPartners();
// DISCOVER PRESTASHOP
$result['discover_prestashop'] = '<div id="block_tips">'.$this->getBlockDiscover().'</div>';
$result['discover_prestashop'] .= '<div class="row-news"><div id="block_discover"><iframe frameborder="no" style="margin: 0px; padding: 0px; width: 100%; height:300px; overflow:hidden;" src="'.$protocol.'api.prestashop.com/rss2/news2.php?v='._PS_VERSION_.'&lang='.$isoUser.'"></iframe></div>';
// SHOW TIPS OF THE DAY
$content = Tools::file_get_contents($protocol.'api.prestashop.com/partner/tipsoftheday/?iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser), false, $stream_context);
$content = explode('|', $content);
if ($content[0] == 'OK' && Validate::isCleanHtml($content[1]))
$result['discover_prestashop'] .= '<div id="block_partner_tips">'.$content[1].'</div></div>';
$this->content = Tools::jsonEncode($result);
}
public function ajaxProcessHideScreencast()
{
if ($employee = new Employee((int)Tools::getValue('id_employee')))
{
$employee->bo_show_screencast = 0;
if ($employee->save())
$this->content = '{"status":"ok"}';
else
$this->content = '{"status":"error","msg":"not saved"}';
}
else
$this->content = '{"status":"error", "msg":"employee does not exists"}';
}
public function getBlockPartners()
{
// Init var
$return = '';
$protocol = Tools::getCurrentUrlProtocolPrefix();
$isoCountry = Context::getContext()->country->iso_code;
$isoUser = Context::getContext()->language->iso_code;
// Refresh preactivation xml file if needed
if (is_writable('../config/xml/') && (!file_exists('../config/xml/preactivation.xml') || (time() - filemtime('../config/xml/preactivation.xml')) > 86400))
{
$stream_context = @stream_context_create(array('http' => array('method'=> 'GET', 'timeout' => AdminHomeController::TIPS_TIMEOUT)));
$content = Tools::file_get_contents($protocol.'api.prestashop.com/partner/premium/get_partners.php?iso_country='.Tools::strtoupper($isoCountry).'&iso_lang='.Tools::strtolower($isoUser).'&ps_version='._PS_VERSION_.'&ps_creation='._PS_CREATION_DATE_.'&host='.urlencode($_SERVER['HTTP_HOST']), false, $stream_context);
@unlink('../config/xml/preactivation.xml');
file_put_contents('../config/xml/preactivation.xml', $content);
}
$count = 0;
libxml_use_internal_errors(true);
// If preactivation xml file exists, we load it
if (file_exists('../config/xml/preactivation.xml') && filesize('../config/xml/preactivation.xml') > 0 && $preactivation = simplexml_load_file('../config/xml/preactivation.xml'))
foreach ($preactivation->partner as $partner)
{
// Cache the logo
if (!file_exists('../img/tmp/preactivation_'.htmlentities((string)$partner->module).'.png'))
{
$logo = Tools::file_get_contents(htmlentities((string)$partner->logo));
if (sizeof($logo) > 0)
file_put_contents('../img/tmp/preactivation_'.htmlentities((string)$partner->module).'.png', $logo);
}
// Check if module is not already installed and configured
$display = 0;
if (file_exists('../config/xml/default_country_modules_list.xml') && filesize('../config/xml/default_country_modules_list.xml') > 10)
foreach ($partner->checkconfiguration->key as $key)
if (Configuration::get(pSQL((string)$key)) == '')
$display = 1;
// Display the module
if ($display == 1 && $count < 2)
{
$label_final = '';
foreach ($partner->labels->label as $label)
if (empty($label_final) || (string)$label->attributes()->iso == $isoUser)
$label_final = (string)$label;
$optional_final = '';
if (isset($partner->optionals))
foreach ($partner->optionals->optional as $optional)
if (empty($optional_final) && (string)$optional->attributes()->iso == $isoUser)
$optional_final = (string)$optional;
$link = 'index.php?controller=adminmodules&install='.Tools::htmlentitiesUTF8((string)$partner->module).'&token='.Tools::getAdminTokenLite('AdminModules').'&module_name='.Tools::htmlentitiesUTF8((string)$partner->module).'&redirect=config';
$return .= '<div style="width:46.5%;min-height:85px;border:1px solid #cccccc;background-color:white;padding-left:5px;padding-right:5px;'.(empty($return) ? 'float:left' : 'float:right').'">
<p align="center">
<a href="'.$link.'" class="preactivationLink" rel="'.Tools::htmlentitiesUTF8((string)$partner->module).'"><img src="../img/tmp/preactivation_'.Tools::htmlentitiesUTF8((string)$partner->module).'.png" alt="'.htmlentities((string)$partner->name).'" border="0" /></a><br />
<b><a href="'.$link.'" class="preactivationLink" rel="'.Tools::htmlentitiesUTF8((string)$partner->module).'">'.Tools::htmlentitiesUTF8($label_final).'</a></b>
'.(($optional_final != '') ? '<a href="'.$link.'" class="preactivationLink" rel="'.Tools::htmlentitiesUTF8((string)$partner->module).'"><img src="'.Tools::htmlentitiesUTF8((string)$optional_final).'" /></a>' : '').'
</p>
</div>';
$count++;
}
}
libxml_clear_errors();
if (!empty($return))
$return .= '<br clear="left" />
<script>
$(".preactivationLink").click(function() {
var module = $(this).attr("rel");
var ajaxCurrentIndex = "'.str_replace('index', 'ajax-tab', self::$currentIndex).'";
try
{
resAjax = $.ajax({
type:"POST",
url : ajaxCurrentIndex,
async: true,
data : {
ajax : "1",
controller : "AdminHome",
action : "savePreactivationRequest",
module : module,
},
success : function(data)
{
},
error: function(res,textStatus,jqXHR)
{
}
});
}
catch(e){}
});
</script>';
return $return;
}
public function ajaxProcessSavePreactivationRequest()
{
$isoUser = Context::getContext()->language->iso_code;
$isoCountry = Context::getContext()->country->iso_code;
$employee = new Employee((int)Context::getContext()->cookie->id_employee);
$firstname = $employee->firstname;
$lastname = $employee->lastname;
$email = $employee->email;
$return = @Tools::file_get_contents('http://api.prestashop.com/partner/premium/set_request.php?iso_country='.strtoupper($isoCountry).'&iso_lang='.strtolower($isoUser).'&host='.urlencode($_SERVER['HTTP_HOST']).'&ps_version='._PS_VERSION_.'&ps_creation='._PS_CREATION_DATE_.'&partner='.htmlentities(Tools::getValue('module')).'&shop='.urlencode(Configuration::get('PS_SHOP_NAME')).'&email='.urlencode($email).'&firstname='.urlencode($firstname).'&lastname='.urlencode($lastname).'&type=home');
die($return);
}
public function getBlockDiscover()
{
$stream_context = @stream_context_create(array('http' => array('method'=> 'GET', 'timeout' => AdminHomeController::TIPS_TIMEOUT)));
$content = '';
$protocol = Tools::usingSecureMode() ? 'https' : 'http';
$isoUser = Context::getContext()->language->iso_code;
$isoCountry = Context::getContext()->country->iso_code;
$content = @Tools::file_get_contents($protocol.'://api.prestashop.com/partner/prestashop/prestashop-link.php?iso_country='.$isoCountry.'&iso_lang='.Tools::strtolower($isoUser).'&id_lang='.(int)Context::getContext()->language->id.'&ps_version='.urlencode(_PS_VERSION_), false, $stream_context);
if (!$content)
return ''; // NOK
else
{
if (strpos($content, '|') !== false)
$content = explode('|', $content);
if ($content[0] == 'OK' && Validate::isCleanHtml($content[1]))
return $content[1];
else
return ''; // NOK
}
}
public function initContent()
{
parent::initContent();
$smarty = $this->context->smarty;
$this->warnDomainName();
$protocol = Tools::usingSecureMode()?'https':'http';
$smarty->assign('protocol', $protocol);
$isoUser = $this->context->language->iso_code;
$smarty->assign('isoUser', $isoUser);
$tpl_vars['refresh_check_version'] = 0;
$upgrade = new Upgrader(true);
// if this information is outdated, the version will be checked after page loading
if (Configuration::get('PS_LAST_VERSION_CHECK') < time() - (3600 * Upgrader::DEFAULT_CHECK_VERSION_DELAY_HOURS))
$tpl_vars['refresh_check_version'] = 1;
if (!$this->isFresh(Module::CACHE_FILE_DEFAULT_COUNTRY_MODULES_LIST, 86400))
file_put_contents(_PS_ROOT_DIR_.Module::CACHE_FILE_DEFAULT_COUNTRY_MODULES_LIST, Tools::addonsRequest('native'));
$tpl_vars['upgrade'] = $upgrade;
if ($this->context->employee->bo_show_screencast)
$tpl_vars['employee_token'] = Tools::getAdminTokenLite('AdminEmployees');
$tpl_vars['employee'] = $this->context->employee;
$tpl_vars['quick_links'] = $this->getQuickLinks();
$tpl_vars['monthly_statistics'] = $this->getMonthlyStatistics();
$tpl_vars['customers_service'] = $this->getCustomersService();
$tpl_vars['stats_sales'] = $this->getStatsSales();
$tpl_vars['last_orders'] = $this->getLastOrders();
$tpl_vars['tips_optimization'] = $this->_displayOptimizationTips();
$smarty->assign($tpl_vars);
}
}