コード例 #1
0
    public function display()
    {
        global $cookie;
        $this->warnDomainName();
        $tab = get_class();
        $protocol = Tools::usingSecureMode() ? 'https' : 'http';
        $isoDefault = Language::getIsoById(intval(Configuration::get('PS_LANG_DEFAULT')));
        $isoUser = Language::getIsoById(intval($cookie->id_lang));
        $isoCountry = Country::getIsoById(Configuration::get('PS_COUNTRY_DEFAULT'));
        $currency = new Currency((int) Configuration::get('PS_CURRENCY_DEFAULT'));
        $employee = new Employee($cookie->id_employee);
        echo '<div>
		<h1>' . $this->l('Dashboard') . '</h1>
		<hr style="background-color: #812143;color: #812143;" />
		<br />';
        if (@ini_get('allow_url_fopen')) {
            $upgrade = new Upgrader();
            if ($update = $upgrade->checkPSVersion()) {
                echo '<div class="warning warn" style="margin-bottom:30px;"><h3>' . $this->l('New PrestaShop version available') . ' : <a style="text-decoration: underline;" href="' . $update['link'] . '" target="_blank">' . $this->l('Download') . '&nbsp;' . $update['name'] . '</a> !</h3></div>';
            }
        } else {
            echo '<p>' . $this->l('Update notification unavailable') . '</p>';
            echo '<p>&nbsp;</p>';
            echo '<p>' . $this->l('To receive PrestaShop update warnings, you need to activate the <b>allow_url_fopen</b> command in your <b>php.ini</b> config file.') . ' [<a href="http://www.php.net/manual/' . $isoUser . '/ref.filesystem.php">' . $this->l('more info') . '</a>]</p>';
            echo '<p>' . $this->l('If you don\'t know how to do that, please contact your host administrator !') . '</p><br>';
        }
        echo '</div>';
        if ($employee->bo_show_screencast) {
            echo '
			<div id="adminpresentation">
				<iframe src="' . $protocol . '://screencasts.prestashop.com/screencast.php?iso_lang=' . Tools::strtolower($isoUser) . '" style="border:none;width:100%;height:420px;" scrolling="no"></iframe>
				<div id="footer_iframe_home">
					<!--<a href="#">' . $this->l('View more video tutorials') . '</a>-->
					<input type="checkbox" id="screencast_dont_show_again"><label for="screencast_dont_show_again">' . $this->l('don\'t show again') . '</label>
				</div>
			</div>
			<script type="text/javascript">
			$(document).ready(function() {
				$(\'#screencast_dont_show_again\').click(function() {
					if ($(this).is(\':checked\'))
					{
						$.ajax({
							type: \'POST\',
							async: true,
							url: \'ajax.php?toggleScreencast\',
							success: function(data) {
								$(\'#adminpresentation\').slideUp(\'slow\');
							}
						});
					}
				});
			});
			</script>
			<div class="clear"></div><br />';
        }
        echo '
		<div id="column_left">
			<ul class="F_list clearfix">
				<li id="first_block">
					<h4><a href="index.php?tab=AdminCatalog&addcategory&token=' . Tools::getAdminTokenLite('AdminCatalog') . '">' . $this->l('New category') . '</a></h4>
					<p>' . $this->l('Create a new category and organize your products.') . '</p>
				</li>
				<li id="second_block">
					<h4><a href="index.php?tab=AdminCatalog&id_category=1&addproduct&token=' . Tools::getAdminTokenLite('AdminCatalog') . '">' . $this->l('New product') . '</a></h4>
					<p>' . $this->l('Fill up your catalog with new articles and attributes.') . '</p>
				</li>
				<li id="third_block">
					<h4><a href="index.php?tab=AdminStats&token=' . Tools::getAdminTokenLite('AdminStats') . '">' . $this->l('Statistics') . '</a></h4>
					<p>' . $this->l('Manage your activity with a thorough analysis of your e-shop.') . '</p>
				</li>
				<li id="fourth_block">
					<h4><a href="index.php?tab=AdminEmployees&addemployee&token=' . Tools::getAdminTokenLite('AdminEmployees') . '">' . $this->l('New employee') . '</a></h4>
					<p>' . $this->l('Add a new employee account and discharge a part of your duties of shop owner.') . '</p>
				</li>
			</ul>
			';
        $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));
        echo '
			<div class="table_info">
				<h5><a href="index.php?tab=AdminStats&token=' . Tools::getAdminTokenLite('AdminStats') . '">' . $this->l('View more') . '</a> ' . $this->l('Monthly Statistics') . ' </h5>
				<table class="table_info_details">
					<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>
			';
        $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);
        echo '
			<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('Customers service') . '</h5>
				<table class="table_info_details">
					<tr class="tr_odd">
						<td class="td_align_left">
						' . $this->l('Thread unread') . '
						</td>
						<td>
							' . $unread . '
						</td>
					</tr>
					<tr>
						<td class="td_align_left">
							' . $this->l('Thread pending') . '
						</td>
						<td>
							' . $pending . '
						</td>
					</tr>
					<tr class="tr_odd">
						<td class="td_align_left">
							' . $this->l('Thread closed') . '
						</td>
						<td>
							' . $close . '
						</td>
					</tr>
					<tr>
						<td class="td_align_left">
							' . $this->l('Total thread') . '
						</td>
						<td>
							' . $all . '
						</td>
					</tr>
				</table>
			</div>

			<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('Sales of the week') . '</h5>
				<div id="stat_google">';
        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) . ')');
        $chart->display();
        echo '	</div>
			</div>
			<table cellpadding="0" cellspacing="0" id="table_customer">
				<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']);
            echo '
					<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((double) $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++;
        }
        echo '
				</tbody>
			</table>
		</div>
		<div id="column_right">
			<script type="text/javascript">
				$(document).ready(function() {
					$.ajax({
						url: "ajax.php",
						dataType: "json",
						data: "getAdminHomeElement",
						success: function(json) {
							if (json.screencast != \'NOK\')
								$(\'#adminpresentation\').fadeIn(\'slow\');
							else
								$(\'#adminpresentation\').fadeOut(\'slow\');

							$(\'#partner_preactivation\').fadeOut(\'slow\', function() {
								if (json.partner_preactivation != \'NOK\')
									$(\'#partner_preactivation\').html(json.partner_preactivation);
								else
									$(\'#partner_preactivation\').html(\'\');
								$(\'#partner_preactivation\').fadeIn(\'slow\');
							});

							$(\'#discover_prestashop\').fadeOut(\'slow\', function() {
								if (json.discover_prestashop != \'NOK\')
									$(\'#discover_prestashop\').html(json.discover_prestashop);
								else
									$(\'#discover_prestashop\').html(\'\');
								$(\'#discover_prestashop\').fadeIn(\'slow\');
							});
						},
						error: function(XMLHttpRequest, textStatus, errorThrown)
						{
							$(\'#adminpresentation\').fadeOut(\'slow\');
							$(\'#partner_preactivation\').fadeOut(\'slow\');
							$(\'#discover_prestashop\').fadeOut(\'slow\');
						}
					});
				});
			</script>
			<div id="partner_preactivation">
				<p class="center"><img src="../img/loader.gif" alt="" /> ' . translate('Loading...') . '</p>
			</div>
		';
        if (Tools::isSubmit('hideOptimizationTips')) {
            Configuration::updateValue('PS_HIDE_OPTIMIZATION_TIPS', 1);
        }
        $this->_displayOptimizationTips();
        echo '
			<div id="discover_prestashop">
				<p class="center"><img src="../img/loader.gif" alt="" /> ' . translate('Loading...') . '</p>
			</div>
		</div>
		<div class="clear"></div>';
        echo Module::hookExec('backOfficeHome');
    }