From 2d916da79498a43229392a00b5346fa581fe6b0d Mon Sep 17 00:00:00 2001 From: Thomas Steur <tsteur@users.noreply.github.com> Date: Thu, 25 May 2017 02:49:17 +1200 Subject: [PATCH] refs #11721 if a page could not be found, fallback to a first entry in that category (#11727) --- .../common/services/reporting-pages-model.js | 20 ++++++++++++++++++- .../reportingpage.controller.js | 15 ++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js b/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js index 1f0bbd91d7..80f5d08cb6 100644 --- a/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js +++ b/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js @@ -16,18 +16,36 @@ var model = { pages : [], findPage: findPage, + findPageInCategory: findPageInCategory, reloadAllPages : reloadAllPages, getAllPages : getAllPages }; return model; + function findPageInCategory(categoryId) { + var found = null; + + angular.forEach(model.pages, function (page) { + // happens when user switches between sites, in this case check if the same category exists and if so, + // select first entry from that category + if (!found && page && + page.category && page.subcategory && + page.category.id === categoryId && page.subcategory.id) { + found = page; + } + }); + + return found; + } + function findPage(categoryId, subcategoryId) { var found = null; angular.forEach(model.pages, function (page) { - if (page && + if (!found && + page && page.category && page.subcategory && page.category.id === categoryId && ('' + page.subcategory.id) === subcategoryId) { found = page; diff --git a/plugins/CoreHome/angularjs/reporting-page/reportingpage.controller.js b/plugins/CoreHome/angularjs/reporting-page/reportingpage.controller.js index 8bf2590abe..606f30e334 100644 --- a/plugins/CoreHome/angularjs/reporting-page/reportingpage.controller.js +++ b/plugins/CoreHome/angularjs/reporting-page/reportingpage.controller.js @@ -7,9 +7,9 @@ (function () { angular.module('piwikApp').controller('ReportingPageController', ReportingPageController); - ReportingPageController.$inject = ['$scope', 'piwik', '$rootScope', '$location', 'reportingPageModel']; + ReportingPageController.$inject = ['$scope', 'piwik', '$rootScope', '$location', 'reportingPageModel', 'reportingPagesModel']; - function ReportingPageController($scope, piwik, $rootScope, $location, pageModel) { + function ReportingPageController($scope, piwik, $rootScope, $location, pageModel, pagesModel) { pageModel.resetPage(); $scope.pageModel = pageModel; @@ -53,6 +53,17 @@ } pageModel.fetchPage(category, subcategory).then(function () { + + if (!pageModel.page) { + var page = pagesModel.findPageInCategory(category); + if (page && page.subcategory) { + var $search = $location.search(); + $search.subcategory = page.subcategory.id; + $location.search($search); + return; + } + } + $scope.hasNoPage = !pageModel.page; $scope.loading = false; }); -- GitLab