* @copyright 2007-2011 PrestaShop SA
* @version Release: $Revision$
* @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
{
private function _displayOptimizationTips()
{
$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') AND strtotime($dateUpdHtaccess) > $stat['mtime'])
$htaccessOptimized = 1;
$dateUpdate = Configuration::get('PS_LAST_SHOP_UPDATE');
if ($dateUpdate AND strtotime($dateUpdate) > $stat['mtime'])
$htaccessAfterUpdate = 0;
}
$indexRebuiltAfterUpdate = 0;
$needRebuild=Configuration::get('PS_NEED_REBUILD_INDEX');
if($needRebuild !='0');
$indexRebuiltAfterUpdate = 2;
$smartyOptimized = 0;
if (Configuration::get('PS_SMARTY_FORCE_COMPILE') == _PS_SMARTY_NO_COMPILE_)
++$smartyOptimized;
if (Configuration::get('PS_SMARTY_CACHE'))
++$smartyOptimized;
$cccOptimized = Configuration::get('PS_CSS_THEME_CACHE')
+ Configuration::get('PS_JS_THEME_CACHE')
+ Configuration::get('PS_HTML_THEME_COMPRESSION')
+ 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'=>'error2.png','color'=>'#fbe8e8'),
1 => array('image'=>'warn2.png','color'=>'#fffac6'),
2 => array('image'=>'ok2.png','color'=>'#dffad3'));
if ($rewrite + $htaccessOptimized + $smartyOptimized + $cccOptimized + $shopEnabled + $htaccessAfterUpdate + $indexRebuiltAfterUpdate != 14)
{
$this->content .= '
'.$this->l('A good beginning...')
.'
':'href="?hideOptimizationTips" >
').'
';
$this->content .= '
';
$this->content .= '
';
}
}
public function setMedia()
{
$this->addJS(_PS_JS_DIR_.'jquery/jquery.flot.min.js');
if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE') !== false)
$this->addJS(_PS_JS_DIR_.'jquery/excanvas.min.js');
parent::setMedia();
}
protected function warnDomainName()
{
if ($_SERVER['HTTP_HOST'] != Configuration::get('PS_SHOP_DOMAIN') AND $_SERVER['HTTP_HOST'] != Configuration::get('PS_SHOP_DOMAIN_SSL'))
$this->displayWarning($this->l('Your are currently connected with the following domain name:').' '.$_SERVER['HTTP_HOST'].'
'.
$this->l('This one is different from the main shop domain name set in "Preferences > SEO & URLs":').' '.Configuration::get('PS_SHOP_DOMAIN').'
'.
$this->l('Click here if you want to modify the main shop domain name').'');
}
public function display()
{
$this->warnDomainName();
$tab = get_class();
$protocol = Tools::usingSecureMode()?'https':'http';
$isoUser = $this->context->language->iso_code;
$currency = Tools::setCurrency($this->context->cookie);
$this->content .= '
'.$this->l('Dashboard').'
';
if (@ini_get('allow_url_fopen'))
{
$upgrade = new Upgrader();
if($update = $upgrade->checkPSVersion())
$this->content .= '
';
}
else
{
$this->content .= '
'.$this->l('Update notification unavailable').'
';
$this->content .= '
';
$this->content .= '
'.$this->l('To receive PrestaShop update warnings, you need to activate the allow_url_fopen command in your php.ini config file.').' ['.$this->l('more info').']
';
$this->content .= '
'.$this->l('If you don\'t know how to do that, please contact your host administrator !').'
';
}
$this->content .= '
';
if ($this->context->employee->show_screencast)
$this->content .= '
';
$this->content .= '
-
'.$this->l('Create a new category and organize your products.').'
-
'.$this->l('Fill up your catalog with new articles and attributes.').'
-
'.$this->l('Manage your activity with a thorough analysis of your e-shop.').'
-
'.$this->l('Add a new employee account and discharge a part of your duties of shop owner.').'
';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT SUM(o.`total_paid_real` / o.conversion_rate) as total_sales, COUNT(*) as total_orders
FROM `'._DB_PREFIX_.'orders` o
WHERE o.valid = 1
AND o.`invoice_date` BETWEEN \''.date('Y-m').'-01 00:00:00\' AND \''.date('Y-m').'-31 23:59:59\' ');
$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\'');
$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.php\'
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\'');
$results = array_merge($result, array_merge($result2, $result3));
$this->content .= '
|
'.$this->l('Sales').'
|
'
.Tools::displayPrice($results['total_sales'], $currency)
.'
|
|
'.$this->l('Total registrations').'
|
'.(int)($results['total_registrations']).'
|
|
'.$this->l('Total orders').'
|
'.(int)($results['total_orders']).'
|
|
'.$this->l('Product pages viewed').'
|
'.(int)($results['total_viewed']).'
|
';
$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);
$this->content .= '
|
'.$this->l('Thread unread').'
|
'.$unread.'
|
|
'.$this->l('Thread pending').'
|
'.$pending.'
|
|
'.$this->l('Thread closed').'
|
'.$close.'
|
|
'.$this->l('Total thread').'
|
'.$all.'
|
'.$this->l('View more').' '.$this->l('Statistics').' / '.$this->l('Sales of the week').'
';
define('PS_BASE_URI', __PS_BASE_URI__);
$chart = new Chart();
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT total_paid / conversion_rate as total_converted, invoice_date
FROM '._DB_PREFIX_.'orders o
WHERE valid = 1
AND invoice_date BETWEEN \''.date('Y-m-d', strtotime('-7 DAYS', time())).' 00:00:00\' AND \''.date('Y-m-d H:i:s').'\'');
foreach ($result as $row)
$chart->getCurve(1)->setPoint(strtotime($row['invoice_date']), $row['total_converted']);
$chart->setSize(580, 170);
$chart->setTimeMode(strtotime('-7 DAYS', time()), time(), 'd');
$chart->getCurve(1)->setLabel($this->l('Sales +Tx').' ('.strtoupper($currency->iso_code).')');
$this->content .= $chart->fetch();
$this->content .= '
| '.$this->l('ID').' |
'.$this->l('Customer Name').' |
'.$this->l('Status').' |
'.$this->l('Total').' |
'.$this->l('Action').' |
';
$orders = Order::getOrdersWithInformations(10);
$i = 0;
foreach ($orders AS $order)
{
$currency = Currency::getCurrency((int)$order['id_currency']);
$this->content .= '
| '.(int)$order['id_order'].' |
'.Tools::htmlentitiesUTF8($order['firstname']).' '.Tools::htmlentitiesUTF8($order['lastname']).' |
'.Tools::htmlentitiesUTF8($order['state_name']).' |
'.Tools::displayPrice((float)$order['total_paid'], $currency).' |
|
';
$i++;
}
$this->content .= '
'.$this->l('Loading...').'
';
if (Tools::isSubmit('hideOptimizationTips'))
Configuration::updateValue('PS_HIDE_OPTIMIZATION_TIPS', 1);
$this->_displayOptimizationTips();
$this->content .= '
'.$this->l('Loading...').'
';
$this->content .= Module::hookExec('backOfficeHome');
$this->context->smarty->assign('content', $this->content);
parent::display();
}
}