+YUCHENG HU+ git-svn-id: https://svn.code.sf.net/p/hawebs/svn@484 a2543c7e-f6e9-4f8a-8bff-1ffc34733512
224 lines
5.7 KiB
PHP
224 lines
5.7 KiB
PHP
<?php
|
|
/**
|
|
* Piwik - Open source web analytics
|
|
*
|
|
* @link http://piwik.org
|
|
* @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later
|
|
* @version $Id: Controller.php 2352 2010-06-22 22:42:37Z matt $
|
|
*
|
|
* @category Piwik_Plugins
|
|
* @package Piwik_Dashboard
|
|
*/
|
|
|
|
/**
|
|
*
|
|
* @package Piwik_Dashboard
|
|
*/
|
|
class Piwik_Dashboard_Controller extends Piwik_Controller
|
|
{
|
|
protected function getDashboardView($template)
|
|
{
|
|
$view = Piwik_View::factory($template);
|
|
$this->setGeneralVariablesView($view);
|
|
|
|
$view->availableWidgets = json_encode(Piwik_GetWidgetsList());
|
|
$layout = $this->getLayout();
|
|
if(empty($layout)) {
|
|
$layout = $this->getDefaultLayout();
|
|
}
|
|
$view->layout = $layout;
|
|
return $view;
|
|
}
|
|
|
|
public function embeddedIndex()
|
|
{
|
|
$view = $this->getDashboardView('index');
|
|
echo $view->render();
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$view = $this->getDashboardView('standalone');
|
|
echo $view->render();
|
|
}
|
|
|
|
/**
|
|
* Records the layout in the DB for the given user.
|
|
*
|
|
* @param string $login
|
|
* @param int $idDashboard
|
|
* @param string $layout
|
|
*/
|
|
protected function saveLayoutForUser( $login, $idDashboard, $layout)
|
|
{
|
|
$paramsBind = array($login, $idDashboard, $layout, $layout);
|
|
Piwik_Query('INSERT INTO '.Piwik_Common::prefixTable('user_dashboard') .
|
|
' (login, iddashboard, layout)
|
|
VALUES (?,?,?)
|
|
ON DUPLICATE KEY UPDATE layout=?',
|
|
$paramsBind);
|
|
}
|
|
|
|
/**
|
|
* Returns the layout in the DB for the given user, or false if the layout has not been set yet.
|
|
* Parameters must be checked BEFORE this function call
|
|
*
|
|
* @param string $login
|
|
* @param int $idDashboard
|
|
* @param string|false $layout
|
|
*/
|
|
protected function getLayoutForUser( $login, $idDashboard)
|
|
{
|
|
$paramsBind = array($login, $idDashboard);
|
|
$return = Piwik_FetchAll('SELECT layout FROM '.Piwik_Common::prefixTable('user_dashboard') .
|
|
' WHERE login = ? AND iddashboard = ?', $paramsBind);
|
|
if(count($return) == 0)
|
|
{
|
|
return false;
|
|
}
|
|
return $return[0]['layout'];
|
|
}
|
|
|
|
/**
|
|
* Saves the layout for the current user
|
|
* anonymous = in the session
|
|
* authenticated user = in the DB
|
|
*/
|
|
public function saveLayout()
|
|
{
|
|
$this->checkTokenInUrl();
|
|
$layout = Piwik_Common::getRequestVar('layout');
|
|
$idDashboard = Piwik_Common::getRequestVar('idDashboard', 1, 'int' );
|
|
$currentUser = Piwik::getCurrentUserLogin();
|
|
if($currentUser == 'anonymous')
|
|
{
|
|
$session = new Zend_Session_Namespace("Piwik_Dashboard");
|
|
$session->dashboardLayout = $layout;
|
|
}
|
|
else
|
|
{
|
|
$this->saveLayoutForUser($currentUser,$idDashboard, $layout);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the dashboard layout for the current user (anonymous or loggued user)
|
|
*
|
|
* @return string $layout
|
|
*/
|
|
protected function getLayout()
|
|
{
|
|
$idDashboard = Piwik_Common::getRequestVar('idDashboard', 1, 'int' );
|
|
$currentUser = Piwik::getCurrentUserLogin();
|
|
|
|
if($currentUser == 'anonymous')
|
|
{
|
|
$session = new Zend_Session_Namespace("Piwik_Dashboard");
|
|
|
|
if(!isset($session->dashboardLayout))
|
|
{
|
|
return false;
|
|
}
|
|
$layout = $session->dashboardLayout;
|
|
}
|
|
else
|
|
{
|
|
$layout = $this->getLayoutForUser($currentUser,$idDashboard);
|
|
}
|
|
|
|
// layout was JSON.stringified
|
|
$layout = html_entity_decode($layout);
|
|
$layout = str_replace("\\\"", "\"", $layout);
|
|
|
|
// compatibility with the old layout format
|
|
if(!empty($layout)
|
|
&& strstr($layout, '[[') == false) {
|
|
$layout = "'$layout'";
|
|
}
|
|
$layout = $this->removeDisabledPluginFromLayout($layout);
|
|
return $layout;
|
|
}
|
|
|
|
protected function removeDisabledPluginFromLayout($layout)
|
|
{
|
|
$layout = str_replace("\n", "", $layout);
|
|
// if the json decoding works (ie. new Json format)
|
|
// we will only return the widgets that are from enabled plugins
|
|
if($layoutObject = json_decode($layout, $assoc = false))
|
|
{
|
|
foreach($layoutObject as &$row)
|
|
{
|
|
if(!is_array($row))
|
|
{
|
|
$row = array();
|
|
continue;
|
|
}
|
|
|
|
foreach($row as $widgetId => $widget)
|
|
{
|
|
if(isset($widget->parameters->module)) {
|
|
$controllerName = $widget->parameters->module;
|
|
$controllerAction = $widget->parameters->action;
|
|
if(!Piwik_IsWidgetDefined($controllerName, $controllerAction))
|
|
{
|
|
unset($row[$widgetId]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$layout = json_encode($layoutObject);
|
|
}
|
|
return $layout;
|
|
}
|
|
|
|
protected function getDefaultLayout()
|
|
{
|
|
$defaultLayout = '[
|
|
[
|
|
{"uniqueId":"widgetVisitsSummarygetEvolutionGraphcolumnsArray","parameters":{"module":"VisitsSummary","action":"getEvolutionGraph","columns":["nb_visits"]}},
|
|
{"uniqueId":"widgetVisitorInterestgetNumberOfVisitsPerVisitDuration","parameters":{"module":"VisitorInterest","action":"getNumberOfVisitsPerVisitDuration"}},
|
|
{"uniqueId":"widgetUserSettingsgetBrowser","parameters":{"module":"UserSettings","action":"getBrowser"}},
|
|
{"uniqueId":"widgetUserCountrygetCountry","parameters":{"module":"UserCountry","action":"getCountry"}},
|
|
{"uniqueId":"widgetExampleFeedburnerfeedburner","parameters":{"module":"ExampleFeedburner","action":"feedburner"}}
|
|
],
|
|
[
|
|
{"uniqueId":"widgetReferersgetKeywords","parameters":{"module":"Referers","action":"getKeywords"}},
|
|
{"uniqueId":"widgetReferersgetWebsites","parameters":{"module":"Referers","action":"getWebsites"}}
|
|
],
|
|
[
|
|
{"uniqueId":"widgetReferersgetSearchEngines","parameters":{"module":"Referers","action":"getSearchEngines"}},
|
|
{"uniqueId":"widgetVisitTimegetVisitInformationPerServerTime","parameters":{"module":"VisitTime","action":"getVisitInformationPerServerTime"}},
|
|
{"uniqueId":"widgetExampleRssWidgetrssPiwik","parameters":{"module":"ExampleRssWidget","action":"rssPiwik"}}
|
|
]
|
|
]';
|
|
$defaultLayout = $this->removeDisabledPluginFromLayout($defaultLayout);
|
|
return $defaultLayout;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|