From 674feda4a02d437dd835e2069f96e3b1c8a42be5 Mon Sep 17 00:00:00 2001 From: Izhar Aazmi Date: Sat, 23 Jan 2016 17:28:28 +0530 Subject: [PATCH 1/4] Introduce new method isClient($identifier) in JApplicationCms class as a substitute for isSite and isAdmin methods. Hence, remove usage of descendant class reference in the JApplication (legacy) and JApplicationCms for better OO structure and support more extensibility. --- libraries/cms/application/cms.php | 22 ++++++++++++++++-- libraries/legacy/application/application.php | 24 ++++++++++++++++---- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/libraries/cms/application/cms.php b/libraries/cms/application/cms.php index ad46c24904b58..61d2a5de95366 100644 --- a/libraries/cms/application/cms.php +++ b/libraries/cms/application/cms.php @@ -669,10 +669,11 @@ protected function initialiseApp($options = array()) * @return boolean True if this application is administrator. * * @since 3.2 + * @deprecated Use isClient('administrator') or isClient(1) instead. */ public function isAdmin() { - return ($this->getClientId() === 1); + return $this->isClient('administrator'); } /** @@ -681,10 +682,27 @@ public function isAdmin() * @return boolean True if this application is site. * * @since 3.2 + * @deprecated Use isClient('site') or isClient(0) instead. */ public function isSite() { - return ($this->getClientId() === 0); + return $this->isClient('site'); + } + + /** + * Check the client interface by name or client id. + * + * @param string|int $identifier Numeric or string identifier for the application interface + * + * @return boolean True if this application is of the given type client interface. + * + * @since __DEPLOY_VERSION__ + */ + public function isClient($identifier) + { + $match = is_numeric($identifier) ? $this->getClientId() : $this->getName(); + + return $match == $identifier; } /** diff --git a/libraries/legacy/application/application.php b/libraries/legacy/application/application.php index 14940278a861f..679aec7a6ab8f 100644 --- a/libraries/legacy/application/application.php +++ b/libraries/legacy/application/application.php @@ -1123,11 +1123,11 @@ public function getClientId() * @return boolean True if this application is administrator. * * @since 11.1 - * @deprecated 4.0 + * @deprecated 4.0 Use isClient('administrator') or isClient(1) instead. */ public function isAdmin() { - return ($this->_clientId == 1); + return $this->isClient('administrator'); } /** @@ -1136,11 +1136,27 @@ public function isAdmin() * @return boolean True if this application is site. * * @since 11.1 - * @deprecated 4.0 + * @deprecated 4.0 Use isClient('site') or isClient(0) instead. */ public function isSite() { - return ($this->_clientId == 0); + return $this->isClient('site'); + } + + /** + * Check the client interface by name or client id. + * + * @param string|int $identifier Numeric or string identifier for the application interface + * + * @return boolean True if this application is of the given type client interface. + * + * @since __DEPLOY_VERSION__ + */ + public function isClient($identifier) + { + $match = is_numeric($identifier) ? $this->getClientId() : $this->getName(); + + return $match == $identifier; } /** From 615b51fdca964179bde098b95d8391827098c31c Mon Sep 17 00:00:00 2001 From: Izhar Aazmi Date: Sat, 23 Jan 2016 18:09:10 +0530 Subject: [PATCH 2/4] Added unit tests for JApplicationCms::isClient($identifier); --- .../JApplicationAdministratorTest.php | 16 ++++++++++++++++ .../cms/application/JApplicationCmsTest.php | 16 ++++++++++++++++ .../cms/application/JApplicationSiteTest.php | 16 ++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php index d10d119d4faaa..53ddd5bd80f3f 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php @@ -252,6 +252,22 @@ public function testIsSite() $this->assertFalse($this->class->isSite()); } + /** + * Tests the JApplicationCms::isClient method. + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + public function testIsClient() + { + $this->assertTrue($this->class->isClient('administrator')); + $this->assertTrue($this->class->isClient(1)); + + $this->assertFalse($this->class->isClient('site')); + $this->assertFalse($this->class->isClient(0)); + } + /** * Tests the JApplicationCms::render method. * diff --git a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php index 62b0b055fc5e0..2e8cc7a9f5d73 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php @@ -363,6 +363,22 @@ public function testIsSite() $this->assertFalse($this->class->isSite()); } + /** + * Tests the JApplicationCms::isClient method. + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + public function testIsClient() + { + $this->assertFalse($this->class->isClient('administrator')); + $this->assertFalse($this->class->isClient(1)); + + $this->assertFalse($this->class->isClient('site')); + $this->assertFalse($this->class->isClient(0)); + } + /** * Tests the JApplicationCms::redirect method. * diff --git a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php index ef7ddc3771905..406c2b42c0ad3 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php @@ -270,6 +270,22 @@ public function testIsSite() $this->assertTrue($this->class->isSite()); } + /** + * Tests the JApplicationCms::isClient method. + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + public function testIsClient() + { + $this->assertFalse($this->class->isClient('administrator')); + $this->assertFalse($this->class->isClient(1)); + + $this->assertTrue($this->class->isClient('site')); + $this->assertTrue($this->class->isClient(0)); + } + /** * Tests the JApplicationCms::render method. * From f19c1407c726c1ac5b8da4b6e29bb478f9a97dde Mon Sep 17 00:00:00 2001 From: Izhar Aazmi Date: Sat, 23 Jan 2016 18:21:21 +0530 Subject: [PATCH 3/4] Fix, null == 0 passes. Avoiding strict check to allow use of '0' or '1' as string as well as integer. --- libraries/cms/application/cms.php | 2 +- libraries/legacy/application/application.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/cms/application/cms.php b/libraries/cms/application/cms.php index 61d2a5de95366..66cdfdf5ed8c0 100644 --- a/libraries/cms/application/cms.php +++ b/libraries/cms/application/cms.php @@ -702,7 +702,7 @@ public function isClient($identifier) { $match = is_numeric($identifier) ? $this->getClientId() : $this->getName(); - return $match == $identifier; + return isset($match) && $match == $identifier; } /** diff --git a/libraries/legacy/application/application.php b/libraries/legacy/application/application.php index 679aec7a6ab8f..8a093f9625def 100644 --- a/libraries/legacy/application/application.php +++ b/libraries/legacy/application/application.php @@ -1156,7 +1156,7 @@ public function isClient($identifier) { $match = is_numeric($identifier) ? $this->getClientId() : $this->getName(); - return $match == $identifier; + return isset($match) && $match == $identifier; } /** From 84163c526d55141a3fc3b955d98e9e5f02f98981 Mon Sep 17 00:00:00 2001 From: Izhar Aazmi Date: Mon, 25 Jan 2016 21:31:39 +0530 Subject: [PATCH 4/4] Removed support for integer argument which matched client_id as discussed with @mbabker, thanks. --- libraries/cms/application/cms.php | 8 +++----- libraries/legacy/application/application.php | 8 +++----- .../cms/application/JApplicationAdministratorTest.php | 3 --- .../libraries/cms/application/JApplicationCmsTest.php | 3 --- .../libraries/cms/application/JApplicationSiteTest.php | 3 --- 5 files changed, 6 insertions(+), 19 deletions(-) diff --git a/libraries/cms/application/cms.php b/libraries/cms/application/cms.php index 66cdfdf5ed8c0..11e7b0ac7df12 100644 --- a/libraries/cms/application/cms.php +++ b/libraries/cms/application/cms.php @@ -669,7 +669,7 @@ protected function initialiseApp($options = array()) * @return boolean True if this application is administrator. * * @since 3.2 - * @deprecated Use isClient('administrator') or isClient(1) instead. + * @deprecated Use isClient('administrator') instead. */ public function isAdmin() { @@ -682,7 +682,7 @@ public function isAdmin() * @return boolean True if this application is site. * * @since 3.2 - * @deprecated Use isClient('site') or isClient(0) instead. + * @deprecated Use isClient('site') instead. */ public function isSite() { @@ -700,9 +700,7 @@ public function isSite() */ public function isClient($identifier) { - $match = is_numeric($identifier) ? $this->getClientId() : $this->getName(); - - return isset($match) && $match == $identifier; + return $this->getName() == $identifier; } /** diff --git a/libraries/legacy/application/application.php b/libraries/legacy/application/application.php index 8a093f9625def..fa32f20c9fd51 100644 --- a/libraries/legacy/application/application.php +++ b/libraries/legacy/application/application.php @@ -1123,7 +1123,7 @@ public function getClientId() * @return boolean True if this application is administrator. * * @since 11.1 - * @deprecated 4.0 Use isClient('administrator') or isClient(1) instead. + * @deprecated 4.0 Use isClient('administrator') instead. */ public function isAdmin() { @@ -1136,7 +1136,7 @@ public function isAdmin() * @return boolean True if this application is site. * * @since 11.1 - * @deprecated 4.0 Use isClient('site') or isClient(0) instead. + * @deprecated 4.0 Use isClient('site') instead. */ public function isSite() { @@ -1154,9 +1154,7 @@ public function isSite() */ public function isClient($identifier) { - $match = is_numeric($identifier) ? $this->getClientId() : $this->getName(); - - return isset($match) && $match == $identifier; + return $this->getName() == $identifier; } /** diff --git a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php index 53ddd5bd80f3f..9c716d756d201 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationAdministratorTest.php @@ -262,10 +262,7 @@ public function testIsSite() public function testIsClient() { $this->assertTrue($this->class->isClient('administrator')); - $this->assertTrue($this->class->isClient(1)); - $this->assertFalse($this->class->isClient('site')); - $this->assertFalse($this->class->isClient(0)); } /** diff --git a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php index 2e8cc7a9f5d73..f2793f63595b6 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationCmsTest.php @@ -373,10 +373,7 @@ public function testIsSite() public function testIsClient() { $this->assertFalse($this->class->isClient('administrator')); - $this->assertFalse($this->class->isClient(1)); - $this->assertFalse($this->class->isClient('site')); - $this->assertFalse($this->class->isClient(0)); } /** diff --git a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php index 406c2b42c0ad3..4f4eafcafec81 100644 --- a/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php +++ b/tests/unit/suites/libraries/cms/application/JApplicationSiteTest.php @@ -280,10 +280,7 @@ public function testIsSite() public function testIsClient() { $this->assertFalse($this->class->isClient('administrator')); - $this->assertFalse($this->class->isClient(1)); - $this->assertTrue($this->class->isClient('site')); - $this->assertTrue($this->class->isClient(0)); } /**