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