Skip to content
Extraits de code Groupes Projets
Valider 32f3eb09 rédigé par diosmosis's avatar diosmosis
Parcourir les fichiers

Refactor dashboard JS so links are generated by PHP instead of JS (for adding...

Refactor dashboard JS so links are generated by PHP instead of JS (for adding new links to Dashboard page) and move segment editor HTML generation to new class.
parent a37e0582
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
if (options.layout) { if (options.layout) {
generateLayout(options.layout); generateLayout(options.layout);
buildMenu(); handleMenuClick();
} else { } else {
methods.loadDashboard.apply(this, [dashboardId]); methods.loadDashboard.apply(this, [dashboardId]);
} }
...@@ -85,7 +85,6 @@ ...@@ -85,7 +85,6 @@
* @param {int} dashboardIdToLoad * @param {int} dashboardIdToLoad
*/ */
loadDashboard: function (dashboardIdToLoad) { loadDashboard: function (dashboardIdToLoad) {
$(dashboardElement).empty(); $(dashboardElement).empty();
dashboardName = ''; dashboardName = '';
dashboardLayout = null; dashboardLayout = null;
...@@ -94,7 +93,7 @@ ...@@ -94,7 +93,7 @@
broadcast.updateHashOnly = true; broadcast.updateHashOnly = true;
broadcast.propagateAjax('?idDashboard=' + dashboardIdToLoad); broadcast.propagateAjax('?idDashboard=' + dashboardIdToLoad);
fetchLayout(generateLayout); fetchLayout(generateLayout);
buildMenu(); handleMenuClick();
return this; return this;
}, },
...@@ -427,47 +426,43 @@ ...@@ -427,47 +426,43 @@
} }
/** /**
* Builds the menu for choosing between available dashboards * Handle clicks for menu items for choosing between available dashboards
*/ */
function buildMenu() { function handleMenuClick() {
var $dashboardLinks = $('#Dashboard ul a').filter(function () {
var success = function (dashboards) { return $(this).closest('li').attr('id').indexOf('Dashboard_embeddedIndex') === 0;
var dashboardMenuList = $('#Dashboard').find('> ul'); });
dashboardMenuList.empty();
if (dashboards.length > 1) { // setup each link (remove default onclick behavior, get idDashboard value and style currently selected
dashboardMenuList.show(); // link)
for (var i = 0; i < dashboards.length; i++) { $dashboardLinks.each(function () {
dashboardMenuList.append('<li id="Dashboard_embeddedIndex_' + dashboards[i].iddashboard + '" class="dashboardMenuItem"><a dashboardId="' + dashboards[i].iddashboard + '">' + piwikHelper.htmlEntities(dashboards[i].name) + '</a></li>'); $(this).removeAttr('onclick');
if (dashboards[i].iddashboard == dashboardId) {
dashboardName = dashboards[i].name; var linkIdDashboard = broadcast.getParamValue('idDashboard', $(this).attr('href'));
} $(this).attr('data-idDashboard', linkIdDashboard);
}
$('#Dashboard_embeddedIndex_' + dashboardId).addClass('sfHover'); if (dashboardId == linkIdDashboard) {
} else { $(this).closest('li').addClass('sfHover');
dashboardMenuList.hide();
} }
});
$('.dashboardMenuItem').on('click', function () { $dashboardLinks.click(function (e) {
if (typeof piwikMenu != 'undefined') { e.preventDefault();
piwikMenu.activateMenu('Dashboard', 'embeddedIndex'); e.stopPropagation();
}
$('.dashboardMenuItem').removeClass('sfHover');
if ($(dashboardElement).length) {
$(dashboardElement).dashboard('loadDashboard', $('a', this).attr('dashboardId'));
} else {
broadcast.propagateAjax('module=Dashboard&action=embeddedIndex&idDashboard=' + $('a', this).attr('dashboardId'));
}
$(this).addClass('sfHover');
});
};
var ajaxRequest = new ajaxHelper(); var idDashboard = $(this).attr('data-idDashboard');
ajaxRequest.addParams({
module: 'Dashboard', if (typeof piwikMenu != 'undefined') {
action: 'getAllDashboards' piwikMenu.activateMenu('Dashboard', 'embeddedIndex');
}, 'get'); }
ajaxRequest.setCallback(success); $('#Dashboard ul li').removeClass('sfHover');
ajaxRequest.send(false); if ($(dashboardElement).length) {
$(dashboardElement).dashboard('loadDashboard', idDashboard);
} else {
broadcast.propagateAjax('module=Dashboard&action=embeddedIndex&idDashboard=' + idDashboard);
}
$(this).closest('li').addClass('sfHover');
});
} }
/** /**
...@@ -515,7 +510,7 @@ ...@@ -515,7 +510,7 @@
function () { function () {
if (dashboardChanged) { if (dashboardChanged) {
dashboardChanged = false; dashboardChanged = false;
buildMenu(); handleMenuClick();
} }
} }
); );
......
...@@ -10,86 +10,14 @@ ...@@ -10,86 +10,14 @@
*/ */
namespace Piwik\Plugins\SegmentEditor; namespace Piwik\Plugins\SegmentEditor;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugins\API\API as APIMetadata;
use Piwik\View;
/** /**
* @package SegmentEditor * @package SegmentEditor
*/ */
class Controller extends \Piwik\Plugin\Controller class Controller extends \Piwik\Plugin\Controller
{ {
public function getSelector() public function getSelector()
{ {
$view = new View('@SegmentEditor/getSelector'); $selector = new SegmentSelectorControl();
$idSite = Common::getRequestVar('idSite'); return $selector->render();
$this->setGeneralVariablesView($view);
$segments = APIMetadata::getInstance()->getSegmentsMetadata($idSite);
$segmentsByCategory = $customVariablesSegments = array();
foreach ($segments as $segment) {
if ($segment['category'] == Piwik::translate('General_Visit')
&& ($segment['type'] == 'metric' && $segment['segment'] != 'visitIp')
) {
$metricsLabel = Piwik::translate('General_Metrics');
$metricsLabel[0] = strtolower($metricsLabel[0]);
$segment['category'] .= ' (' . $metricsLabel . ')';
}
$segmentsByCategory[$segment['category']][] = $segment;
}
uksort($segmentsByCategory, array($this, 'sortSegmentCategories'));
$view->segmentsByCategory = $segmentsByCategory;
$savedSegments = API::getInstance()->getAll($idSite);
foreach ($savedSegments as &$savedSegment) {
$savedSegment['name'] = Common::sanitizeInputValue($savedSegment['name']);
}
$view->savedSegmentsJson = Common::json_encode($savedSegments);
$view->authorizedToCreateSegments = !Piwik::isUserIsAnonymous();
$view->segmentTranslations = Common::json_encode($this->getTranslations());
$out = $view->render();
return $out;
}
public function sortSegmentCategories($a, $b)
{
// Custom Variables last
if ($a == Piwik::translate('CustomVariables_CustomVariables')) {
return 1;
}
return 0;
}
private function getTranslations()
{
$translationKeys = array(
'General_OperationEquals',
'General_OperationNotEquals',
'General_OperationAtMost',
'General_OperationAtLeast',
'General_OperationLessThan',
'General_OperationGreaterThan',
'General_OperationContains',
'General_OperationDoesNotContain',
'General_OperationIs',
'General_OperationIsNot',
'General_OperationContains',
'General_OperationDoesNotContain',
'SegmentEditor_DefaultAllVisits',
'General_DefaultAppended',
'SegmentEditor_AddNewSegment',
'General_Edit',
'General_Search',
'General_SearchNoResults',
);
$translations = array();
foreach ($translationKeys as $key) {
$translations[$key] = Piwik::translate($key);
}
return $translations;
} }
} }
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
* @category Piwik_Plugins
* @package SegmentEditor
*/
namespace Piwik\Plugins\SegmentEditor;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugins\API\API as APIMetadata;
use Piwik\View;
use Piwik\Access;
/**
* Generates the HTML for the segment selector control (which includes the segment editor).
*/
class SegmentSelectorControl extends View
{
const TEMPLATE = "@SegmentEditor/_segmentSelector";
/**
* Constructor.
*/
public function __construct()
{
parent::__construct(self::TEMPLATE);
$this->isSuperUser = Access::getInstance()->hasSuperUserAccess();
$this->idSite = Common::getRequestVar('idSite', false, 'int');
$segments = APIMetadata::getInstance()->getSegmentsMetadata($this->idSite);
$segmentsByCategory = $customVariablesSegments = array();
foreach ($segments as $segment) {
if ($segment['category'] == Piwik::translate('General_Visit')
&& ($segment['type'] == 'metric' && $segment['segment'] != 'visitIp')
) {
$metricsLabel = Piwik::translate('General_Metrics');
$metricsLabel[0] = strtolower($metricsLabel[0]);
$segment['category'] .= ' (' . $metricsLabel . ')';
}
$segmentsByCategory[$segment['category']][] = $segment;
}
uksort($segmentsByCategory, array($this, 'sortSegmentCategories'));
$this->segmentsByCategory = $segmentsByCategory;
$savedSegments = API::getInstance()->getAll($this->idSite);
foreach ($savedSegments as &$savedSegment) {
$savedSegment['name'] = Common::sanitizeInputValue($savedSegment['name']);
}
$this->savedSegmentsJson = Common::json_encode($savedSegments);
$this->authorizedToCreateSegments = !Piwik::isUserIsAnonymous();
$this->segmentTranslations = Common::json_encode($this->getTranslations());
}
public function sortSegmentCategories($a, $b)
{
// Custom Variables last
if ($a == Piwik::translate('CustomVariables_CustomVariables')) {
return 1;
}
return 0;
}
private function getTranslations()
{
$translationKeys = array(
'General_OperationEquals',
'General_OperationNotEquals',
'General_OperationAtMost',
'General_OperationAtLeast',
'General_OperationLessThan',
'General_OperationGreaterThan',
'General_OperationContains',
'General_OperationDoesNotContain',
'General_OperationIs',
'General_OperationIsNot',
'General_OperationContains',
'General_OperationDoesNotContain',
'SegmentEditor_DefaultAllVisits',
'General_DefaultAppended',
'SegmentEditor_AddNewSegment',
'General_Edit',
'General_Search',
'General_SearchNoResults',
);
$translations = array();
foreach ($translationKeys as $key) {
$translations[$key] = Piwik::translate($key);
}
return $translations;
}
}
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter