pluginName = $aPluginName[1];
$this->strDate = Piwik_Common::getRequestVar('date', 'yesterday', 'string');
try{
// the date looks like YYYY-MM-DD we can build it
$this->date = Piwik_Date::factory($this->strDate);
$this->strDate = $this->date->toString();
} catch(Exception $e){
// the date looks like YYYY-MM-DD,YYYY-MM-DD or other format
$this->date = null;
}
}
/**
* Returns the name of the default method that will be called
* when visiting: index.php?module=PluginName without the action parameter
*
* @return string
*/
function getDefaultAction()
{
return 'index';
}
protected $standardColumnNameToTranslation = array(
'label' => 'General_ColumnLabel',
'nb_visits' => 'General_ColumnNbVisits',
'nb_actions' => 'General_ColumnNbActions',
'max_actions' => 'General_ColumnMaxActions',
'sum_visit_length' => 'General_ColumnSumVisitLength',
'nb_uniq_visitors' => 'General_ColumnNbUniqVisitors',
'nb_actions_per_visit' => 'General_ColumnActionsPerVisit',
'avg_time_on_site' => 'General_ColumnAvgTimeOnSite',
'bounce_rate' => 'General_ColumnBounceRate',
'revenue_per_visit' => 'General_ColumnValuePerVisit',
'goals_conversion_rate' => 'General_ColumnVisitsWithConversions',
);
/**
* Given an Object implementing Piwik_iView interface, we either:
* - echo the output of the rendering if fetch = false
* - returns the output of the rendering if fetch = true
*
* @param Piwik_ViewDataTable $view
* @param bool $fetch
* @return string|void
*/
protected function renderView( Piwik_ViewDataTable $view, $fetch = false)
{
Piwik_PostEvent( 'Controller.renderView',
$this,
array( 'view' => $view,
'controllerName' => $view->getCurrentControllerName(),
'controllerAction' => $view->getCurrentControllerAction(),
'apiMethodToRequestDataTable' => $view->getApiMethodToRequestDataTable(),
'controllerActionCalledWhenRequestSubTable' => $view->getControllerActionCalledWhenRequestSubTable(),
)
);
$standardColumnNameToTranslation = array_map('Piwik_Translate', $this->standardColumnNameToTranslation);
$view->setColumnsTranslations($standardColumnNameToTranslation);
$view->main();
$rendered = $view->getView()->render();
if($fetch)
{
return $rendered;
}
echo $rendered;
}
/**
* Returns a ViewDataTable object of an Evolution graph
* for the last30 days/weeks/etc. of the current period, relative to the current date.
*
* @param string $currentModuleName
* @param string $currentControllerAction
* @param string $apiMethod
* @return Piwik_ViewDataTable_GenerateGraphHTML_ChartEvolution
*/
protected function getLastUnitGraph($currentModuleName, $currentControllerAction, $apiMethod)
{
$view = Piwik_ViewDataTable::factory('graphEvolution');
$view->init( $currentModuleName, $currentControllerAction, $apiMethod );
// if the date is not yet a nicely formatted date range ie. YYYY-MM-DD,YYYY-MM-DD we build it
// otherwise the current controller action is being called with the good date format already so it's fine
// see constructor
if( !is_null($this->date))
{
$view->setParametersToModify(
$this->getGraphParamsModified( array('date' => $this->strDate))
);
}
return $view;
}
/**
* Returns the array of new processed parameters once the parameters are applied.
* For example: if you set range=last30 and date=2008-03-10,
* the date element of the returned array will be "2008-02-10,2008-03-10"
*
* Parameters you can set:
* - range: last30, previous10, etc.
* - date: YYYY-MM-DD, today, yesterday
* - period: day, week, month, year
*
* @param array paramsToSet = array( 'date' => 'last50', 'viewDataTable' =>'sparkline' )
*/
protected function getGraphParamsModified($paramsToSet = array())
{
if(!isset($paramsToSet['range']))
{
$range = 'last30';
}
else
{
$range = $paramsToSet['range'];
}
if(!isset($paramsToSet['date']))
{
$endDate = $this->strDate;
}
else
{
$endDate = $paramsToSet['date'];
}
if(!isset($paramsToSet['period']))
{
$period = Piwik_Common::getRequestVar('period');
}
else
{
$period = $paramsToSet['period'];
}
$last30Relative = new Piwik_Period_Range($period, $range );
$last30Relative->setDefaultEndDate(Piwik_Date::factory($endDate));
$paramDate = $last30Relative->getDateStart()->toString() . "," . $last30Relative->getDateEnd()->toString();
$params = array_merge($paramsToSet , array( 'date' => $paramDate ) );
return $params;
}
/**
* Returns a numeric value from the API.
* Works only for API methods that originally returns numeric values (there is no cast here)
*
* @param string $methodToCall, eg. Referers.getNumberOfDistinctSearchEngines
* @return int|float
*/
protected function getNumericValue( $methodToCall )
{
$requestString = 'method='.$methodToCall.'&format=original';
$request = new Piwik_API_Request($requestString);
return $request->process();
}
/**
* Returns the current URL to use in a img src=X to display a sparkline.
* $action must be the name of a Controller method that requests data using the Piwik_ViewDataTable::factory
* It will automatically build a sparkline by setting the viewDataTable=sparkline parameter in the URL.
* It will also computes automatically the 'date' for the 'last30' days/weeks/etc.
*
* @param string $action, eg. method name of the controller to call in the img src
* @param array array of name => value of parameters to set in the generated GET url
* @return string the generated URL
*/
protected function getUrlSparkline( $action, $customParameters = array() )
{
$params = $this->getGraphParamsModified(
array( 'viewDataTable' => 'sparkline',
'action' => $action,
'module' => $this->pluginName)
+ $customParameters
);
$url = Piwik_Url::getCurrentQueryStringWithParametersModified($params);
return $url;
}
protected function setGeneralVariablesView($view)
{
$view->date = $this->strDate;
try {
$this->setPeriodVariablesView($view);
$period = Piwik_Period::factory(Piwik_Common::getRequestVar('period'), Piwik_Date::factory($this->strDate));
$view->prettyDate = $period->getLocalizedLongString();
$idSite = Piwik_Common::getRequestVar('idSite');
$view->idSite = $idSite;
$site = new Piwik_Site($idSite);
$view->siteName = $site->getName();
$view->siteMainUrl = $site->getMainUrl();
$minDate = $site->getCreationDate();
$view->minDateYear = $minDate->toString('Y');
$view->minDateMonth = $minDate->toString('m');
$view->minDateDay = $minDate->toString('d');
$maxDate = Piwik_Date::factory('today');
$view->maxDateYear = $maxDate->toString('Y');
$view->maxDateMonth = $maxDate->toString('m');
$view->maxDateDay = $maxDate->toString('d');
$view->debugTrackVisitsInsidePiwikUI = Zend_Registry::get('config')->Debug->track_visits_inside_piwik_ui;
$view->isSuperUser = Zend_Registry::get('access')->isSuperUser();
} catch(Exception $e) {
self::redirectToIndex(Piwik::getModule(), Piwik::getAction());
}
}
public static function setPeriodVariablesView($view)
{
if(isset($view->period))
{
return;
}
$currentPeriod = Piwik_Common::getRequestVar('period');
$availablePeriods = array('day', 'week', 'month', 'year');
if(!in_array($currentPeriod,$availablePeriods))
{
throw new Exception("Period must be one of: ".implode(",",$availablePeriods));
}
$periodNames = array(
'day' => array('singular' => Piwik_Translate('CoreHome_PeriodDay'), 'plural' => Piwik_Translate('CoreHome_PeriodDays')),
'week' => array('singular' => Piwik_Translate('CoreHome_PeriodWeek'), 'plural' => Piwik_Translate('CoreHome_PeriodWeeks')),
'month' => array('singular' => Piwik_Translate('CoreHome_PeriodMonth'), 'plural' => Piwik_Translate('CoreHome_PeriodMonths')),
'year' => array('singular' => Piwik_Translate('CoreHome_PeriodYear'), 'plural' => Piwik_Translate('CoreHome_PeriodYears')),
);
$found = array_search($currentPeriod,$availablePeriods);
if($found !== false)
{
unset($availablePeriods[$found]);
}
$view->period = $currentPeriod;
$view->otherPeriods = $availablePeriods;
$view->periodsNames = $periodNames;
}
function redirectToIndex($moduleToRedirect, $actionToRedirect)
{
$sitesId = Piwik_SitesManager_API::getSitesIdWithAtLeastViewAccess();
if(!empty($sitesId))
{
$firstSiteId = $sitesId[0];
$firstSite = new Piwik_Site($firstSiteId);
if ($firstSite->getCreationDate()->isToday())
{
$defaultDate = 'today';
}
else
{
$defaultDate = Zend_Registry::get('config')->General->default_day;
}
$defaultPeriod = Zend_Registry::get('config')->General->default_period;
header("Location:index.php?module=".$moduleToRedirect."&action=".$actionToRedirect."&idSite=$firstSiteId&period=$defaultPeriod&date=$defaultDate");
}
else
{
if(Piwik::isUserIsSuperUser())
{
Piwik_ExitWithMessage("Error: no website were found in this Piwik installation.
Check the table '". Piwik::prefixTable('site') ."' that should contain your Piwik websites.", false, true);
}
$currentLogin = Piwik::getCurrentUserLogin();
if(!empty($currentLogin)
&& $currentLogin != 'anonymous')
{
$errorMessage = sprintf(Piwik_Translate('CoreHome_NoPrivileges'),$currentLogin);
$errorMessage .= "
getName() ."&action=logout'>› ". Piwik_Translate('General_Logout'). "
";
Piwik_ExitWithMessage($errorMessage, false, true);
}
else
{
Piwik_FrontController::dispatch('Login', false);
}
}
exit;
}
}