From a52d41f9a34418b28e892f199f24e8ca9350d87a Mon Sep 17 00:00:00 2001
From: mattpiwik <matthieu.aubry@gmail.com>
Date: Wed, 19 Dec 2012 22:13:38 +0000
Subject: [PATCH]  * Fixing bug, when anonymous user is set with some
 permission, it should work  * Also fixing that now adding &debug to the URL
 will display the backtrace as expected

 Refs #3337

git-svn-id: http://dev.piwik.org/svn/trunk@7670 59fd770c-687e-43c8-a1e3-f5a4ff64c105
---
 core/API/ResponseBuilder.php      |  5 +----
 core/Controller.php               |  2 +-
 core/Log/Exception.php            |  2 +-
 plugins/Login/Login.php           |  3 ++-
 plugins/MobileMessaging/API.php   |  4 ++--
 plugins/PDFReports/API.php        |  3 +--
 plugins/PDFReports/PDFReports.php | 23 +++++++++++++++++++----
 7 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/core/API/ResponseBuilder.php b/core/API/ResponseBuilder.php
index 731b030707..c0040e88ff 100644
--- a/core/API/ResponseBuilder.php
+++ b/core/API/ResponseBuilder.php
@@ -121,12 +121,9 @@ class Piwik_API_ResponseBuilder
 			throw $e;
 		}
 		
-		try
-		{
+		try {
 			$renderer = Piwik_DataTable_Renderer::factory($format);
-		
 		} catch (Exception $e) {
-			
 			return "Error: " . $e->getMessage();
 		}
 		
diff --git a/core/Controller.php b/core/Controller.php
index c364e3ad14..0344bcd0ac 100644
--- a/core/Controller.php
+++ b/core/Controller.php
@@ -459,7 +459,7 @@ abstract class Piwik_Controller
 			
 			$this->setBasicVariablesView($view);
 		} catch(Exception $e) {
-			Piwik_ExitWithMessage($e->getMessage());
+			Piwik_ExitWithMessage($e->getMessage(), Piwik::shouldLoggerLog() ? $e->getTraceAsString() : '');
 		}
 	}
 	
diff --git a/core/Log/Exception.php b/core/Log/Exception.php
index d14b367021..ffb424e4c9 100644
--- a/core/Log/Exception.php
+++ b/core/Log/Exception.php
@@ -94,6 +94,6 @@ class Piwik_Log_Exception_Formatter_ScreenFormatter extends Piwik_Log_Formatter_
 		$outputFormat = strtolower(Piwik_Common::getRequestVar('format', 'html', 'string'));
 		$response = new Piwik_API_ResponseBuilder($outputFormat);
 		$message = $response->getResponseException(new Exception($errstr));
-		return parent::format($message);
+		return parent::format($message );
 	}
 }
diff --git a/plugins/Login/Login.php b/plugins/Login/Login.php
index 0e7051c379..66b6ef48bd 100644
--- a/plugins/Login/Login.php
+++ b/plugins/Login/Login.php
@@ -46,11 +46,12 @@ class Piwik_Login extends Piwik_Plugin
 	 */
 	function noAccess( $notification )
 	{
+		/* @var Exception  $exception */
 		$exception  = $notification->getNotificationObject();
 		$exceptionMessage = $exception->getMessage();
 
 		$controller = new Piwik_Login_Controller();
-		$controller->login($exceptionMessage);
+		$controller->login($exceptionMessage, Piwik::shouldLoggerLog() ? $exception->getTraceAsString() : '' );
 	}
 
 	/**
diff --git a/plugins/MobileMessaging/API.php b/plugins/MobileMessaging/API.php
index 2a47f4498b..e79184dc08 100644
--- a/plugins/MobileMessaging/API.php
+++ b/plugins/MobileMessaging/API.php
@@ -52,7 +52,7 @@ class Piwik_MobileMessaging_API
 	 */
 	public function areSMSAPICredentialProvided()
 	{
-		Piwik::checkUserIsNotAnonymous();
+		Piwik::checkUserHasSomeViewAccess();
 
 		$credential = $this->getSMSAPICredential();
 		return isset($credential[Piwik_MobileMessaging::API_KEY_OPTION]);
@@ -472,7 +472,7 @@ class Piwik_MobileMessaging_API
 	 */
 	public function getDelegatedManagement()
 	{
-		Piwik::checkUserIsNotAnonymous();
+		Piwik::checkUserHasSomeViewAccess();
 		return Piwik_GetOption(Piwik_MobileMessaging::DELEGATED_MANAGEMENT_OPTION) == 'true';
 	}
 }
diff --git a/plugins/PDFReports/API.php b/plugins/PDFReports/API.php
index c6bed41a16..043cf53c65 100644
--- a/plugins/PDFReports/API.php
+++ b/plugins/PDFReports/API.php
@@ -213,8 +213,7 @@ class Piwik_PDFReports_API
 	 */
 	public function getReports($idSite = false, $period = false, $idReport = false, $ifSuperUserReturnOnlySuperUserReports = false)
 	{
-		Piwik::checkUserIsNotAnonymous();
-
+		Piwik::checkUserHasSomeViewAccess();
 		$cacheKey = (int)$idSite .'.'. (string)$period .'.'. (int)$idReport .'.'. (int)$ifSuperUserReturnOnlySuperUserReports;
 		if(isset(self::$cache[$cacheKey]))
 		{
diff --git a/plugins/PDFReports/PDFReports.php b/plugins/PDFReports/PDFReports.php
index aa8c4d54d7..cb71b74745 100644
--- a/plugins/PDFReports/PDFReports.php
+++ b/plugins/PDFReports/PDFReports.php
@@ -580,15 +580,28 @@ class Piwik_PDFReports extends Piwik_Plugin
 		if(!Piwik_PluginsManager::getInstance()->isPluginActivated('MobileMessaging'))
 			return self::PDF_REPORTS_TOP_MENU_TRANSLATION_KEY;
 
-		$reports = Piwik_PDFReports_API::getInstance()->getReports();
+		try {
+			// This would fail for anonymous user
+			$reports = Piwik_PDFReports_API::getInstance()->getReports();
+		} catch(Exception $e) {
+			$reports = array();
+		}
 		$reportCount = count($reports);
 
 		// if there are no reports and the mobile account is
 		//  not configured, display 'Email reports'
 		//  configured, display 'Email & SMS reports'
 		if($reportCount == 0)
-		 return Piwik_MobileMessaging_API::getInstance()->areSMSAPICredentialProvided() ?
-			 self::MOBILE_MESSAGING_TOP_MENU_TRANSLATION_KEY : self::PDF_REPORTS_TOP_MENU_TRANSLATION_KEY;
+		{
+			try {
+				return Piwik_MobileMessaging_API::getInstance()->areSMSAPICredentialProvided() ?
+					 self::MOBILE_MESSAGING_TOP_MENU_TRANSLATION_KEY :
+					 self::PDF_REPORTS_TOP_MENU_TRANSLATION_KEY;
+			} catch(Exception $e) {
+				// anonymous user
+				return self::MOBILE_MESSAGING_TOP_MENU_TRANSLATION_KEY;
+			}
+		}
 
 		$anyMobileReport = false;
 		foreach($reports as $report)
@@ -601,7 +614,9 @@ class Piwik_PDFReports extends Piwik_Plugin
 		}
 
 		// if there is at least one sms report, display 'Email & SMS reports'
-		if($anyMobileReport) return self::MOBILE_MESSAGING_TOP_MENU_TRANSLATION_KEY;
+		if($anyMobileReport) {
+			return self::MOBILE_MESSAGING_TOP_MENU_TRANSLATION_KEY;
+		}
 
 		return self::PDF_REPORTS_TOP_MENU_TRANSLATION_KEY;
 	}
-- 
GitLab