From 7eab943a07f6d2fbc78e0f5ff062b52415f19a52 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Tue, 30 Nov 2021 14:26:34 -0800 Subject: [PATCH] mixin/menu-xml - Import --- .../example/CRM/Shimmy/Page/FooBar.php | 14 +++++ .../templates/CRM/Shimmy/Page/FooBar.tpl | 7 +++ .../example/tests/mixin/MenuXmlTest.php | 56 +++++++++++++++++++ mixin/menu-xml@1/example/xml/Menu/shimmy.xml | 9 +++ mixin/menu-xml@1/mixin.php | 31 ++++++++++ 5 files changed, 117 insertions(+) create mode 100644 mixin/menu-xml@1/example/CRM/Shimmy/Page/FooBar.php create mode 100644 mixin/menu-xml@1/example/templates/CRM/Shimmy/Page/FooBar.tpl create mode 100644 mixin/menu-xml@1/example/tests/mixin/MenuXmlTest.php create mode 100644 mixin/menu-xml@1/example/xml/Menu/shimmy.xml create mode 100644 mixin/menu-xml@1/mixin.php diff --git a/mixin/menu-xml@1/example/CRM/Shimmy/Page/FooBar.php b/mixin/menu-xml@1/example/CRM/Shimmy/Page/FooBar.php new file mode 100644 index 0000000000..a552140916 --- /dev/null +++ b/mixin/menu-xml@1/example/CRM/Shimmy/Page/FooBar.php @@ -0,0 +1,14 @@ +withHeader('Content-Type', 'text/plain') + ->withBody(\GuzzleHttp\Psr7\stream_for('hello world ' . microtime(1))); + + CRM_Utils_System::sendResponse($response); + + parent::run(); + } + +} diff --git a/mixin/menu-xml@1/example/templates/CRM/Shimmy/Page/FooBar.tpl b/mixin/menu-xml@1/example/templates/CRM/Shimmy/Page/FooBar.tpl new file mode 100644 index 0000000000..424100a866 --- /dev/null +++ b/mixin/menu-xml@1/example/templates/CRM/Shimmy/Page/FooBar.tpl @@ -0,0 +1,7 @@ +

This new page is generated by CRM/Shimmy/Page/FooBar.php

+ +{* Example: Display a variable directly *} +

The current time is {$currentTime}

+ +{* Example: Display a translated string -- which happens to include a variable *} +

{ts 1=$currentTime}(In your native language) The current time is %1.{/ts}

diff --git a/mixin/menu-xml@1/example/tests/mixin/MenuXmlTest.php b/mixin/menu-xml@1/example/tests/mixin/MenuXmlTest.php new file mode 100644 index 0000000000..fc56b83969 --- /dev/null +++ b/mixin/menu-xml@1/example/tests/mixin/MenuXmlTest.php @@ -0,0 +1,56 @@ +assertFileExists(static::getPath('/xml/Menu/shimmy.xml'), 'The shimmy extension must have a Menu XML file.'); + } + + public function testInstalled($cv) { + // The menu item is registered... + $items = $cv->api4('Route', 'get', ['where' => [['path', '=', 'civicrm/shimmy/foobar']]]); + $this->assertEquals('CRM_Shimmy_Page_FooBar', $items[0]['page_callback']); + + // And the menu item works... + $this->url = cv('url civicrm/shimmy/foobar'); + $this->assertTrue(is_string($this->url)); + $response = file_get_contents($this->url); + $this->assertRegExp(';hello world;', $response); + } + + public function testDisabled($cv) { + $items = $cv->api4('Route', 'get', ['where' => [['path', '=', 'civicrm/shimmy/foobar']]]); + $this->assertEmpty($items); + + $this->assertNotEmpty($this->url); + $response = file_get_contents($this->url, FALSE, stream_context_create(['http' => ['ignore_errors' => TRUE]])); + $this->assertNotRegExp(';hello world;', $response); + $this->assertNotRegExp(';HTTP.*200.*;', $http_response_header[0]); + } + + public function testUninstalled($cv) { + // Same as disabled. + $this->testDisabled($cv); + } + + protected static function getPath($suffix = ''): string { + return dirname(__DIR__, 2) . $suffix; + } + +} diff --git a/mixin/menu-xml@1/example/xml/Menu/shimmy.xml b/mixin/menu-xml@1/example/xml/Menu/shimmy.xml new file mode 100644 index 0000000000..a0a852dc67 --- /dev/null +++ b/mixin/menu-xml@1/example/xml/Menu/shimmy.xml @@ -0,0 +1,9 @@ + + + + civicrm/shimmy/foobar + CRM_Shimmy_Page_FooBar + FooBar + *always allow* + + diff --git a/mixin/menu-xml@1/mixin.php b/mixin/menu-xml@1/mixin.php new file mode 100644 index 0000000000..4c0b2276c0 --- /dev/null +++ b/mixin/menu-xml@1/mixin.php @@ -0,0 +1,31 @@ +addListener('hook_civicrm_xmlMenu', function ($e) use ($mixInfo) { + if (!$mixInfo->isActive()) { + return; + } + + $files = (array) glob($mixInfo->getPath('xml/Menu/*.xml')); + foreach ($files as $file) { + $e->files[] = $file; + } + }); + +}; -- 2.25.1