diff --git a/composer.json b/composer.json
index 67e599cab..2f76c0917 100644
--- a/composer.json
+++ b/composer.json
@@ -23,11 +23,16 @@
{
"type": "path",
"url": "modules.local/ppcp-wc-gateway"
+ },
+ {
+ "type": "path",
+ "url": "modules.local/ppcp-admin-notices"
}
],
"require": {
"dhii/module-interface": "0.2.x-dev",
"psr/container": "^1.0",
+ "inpsyde/ppcp-admin-notices": "dev-master",
"inpsyde/ppcp-button": "dev-master",
"inpsyde/ppcp-wc-gateway": "dev-master",
"oomphinc/composer-installers-extender": "^1.1",
diff --git a/modules.local/ppcp-admin-notices/composer.json b/modules.local/ppcp-admin-notices/composer.json
new file mode 100644
index 000000000..b5fd1e948
--- /dev/null
+++ b/modules.local/ppcp-admin-notices/composer.json
@@ -0,0 +1,12 @@
+{
+ "name": "inpsyde/ppcp-admin-notices",
+ "type": "inpsyde-module",
+ "require": {
+ "dhii/module-interface": "0.2.x-dev"
+ },
+ "autoload": {
+ "psr-4": {
+ "Inpsyde\\PayPalCommerce\\AdminNotices\\": "src/"
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules.local/ppcp-admin-notices/extensions.php b/modules.local/ppcp-admin-notices/extensions.php
new file mode 100644
index 000000000..5989f2eb7
--- /dev/null
+++ b/modules.local/ppcp-admin-notices/extensions.php
@@ -0,0 +1,5 @@
+ function(ContainerInterface $container) : RendererInterface {
+
+ $repository = $container->get('admin-notices.repository');
+ return new Renderer($repository);
+ },
+ 'admin-notices.repository' => function(ContainerInterface $container) : RepositoryInterface {
+
+ return new Repository();
+ }
+];
diff --git a/modules.local/ppcp-admin-notices/src/AdminNotices.php b/modules.local/ppcp-admin-notices/src/AdminNotices.php
new file mode 100644
index 000000000..436fe118a
--- /dev/null
+++ b/modules.local/ppcp-admin-notices/src/AdminNotices.php
@@ -0,0 +1,37 @@
+get('admin-notices.renderer');
+ $renderer->render();
+ }
+ );
+ }
+}
\ No newline at end of file
diff --git a/modules.local/ppcp-admin-notices/src/Entity/Message.php b/modules.local/ppcp-admin-notices/src/Entity/Message.php
new file mode 100644
index 000000000..a1b6a3811
--- /dev/null
+++ b/modules.local/ppcp-admin-notices/src/Entity/Message.php
@@ -0,0 +1,34 @@
+type = $type;
+ $this->message = $message;
+ $this->dismissable = $dismissable;
+ }
+
+ public function message() : string
+ {
+ return $this->message;
+ }
+
+ public function type() : string
+ {
+ return $this->type;
+ }
+
+ public function isDismissable() : bool
+ {
+ return $this->dismissable;
+ }
+}
\ No newline at end of file
diff --git a/modules.local/ppcp-admin-notices/src/Renderer/Renderer.php b/modules.local/ppcp-admin-notices/src/Renderer/Renderer.php
new file mode 100644
index 000000000..3aa864500
--- /dev/null
+++ b/modules.local/ppcp-admin-notices/src/Renderer/Renderer.php
@@ -0,0 +1,31 @@
+repository = $repository;
+ }
+
+ public function render(): bool
+ {
+ $messages = $this->repository->currentMessages();
+ foreach ($messages as $message) {
+ printf(
+ '
',
+ $message->type(),
+ ($message->isDismissable()) ? 'is-dismissible' : '',
+ wp_kses_post($message->message())
+ );
+ }
+
+ return (bool) count($messages);
+ }
+}
\ No newline at end of file
diff --git a/modules.local/ppcp-admin-notices/src/Renderer/RendererInterface.php b/modules.local/ppcp-admin-notices/src/Renderer/RendererInterface.php
new file mode 100644
index 000000000..5f3c87c03
--- /dev/null
+++ b/modules.local/ppcp-admin-notices/src/Renderer/RendererInterface.php
@@ -0,0 +1,11 @@
+getMessage();
+ if (! $message) {
+ return null;
+ }
- return $messages;
+ return new Message($message['message'], $message['type']);
+ }
+
+ public function getMessage(): array
+ {
+ $messages[self::NO_INFO] = [
+ 'message' => __(
+ 'Could not retrieve information. Try again later.',
+ 'woocommerce-paypal-gateway'
+ ),
+ 'type' => 'error',
+ ];
+ $messages[self::ALREADY_CAPTURED] = [
+ 'message' => __(
+ 'Payment already captured.',
+ 'woocommerce-paypal-gateway'
+ ),
+ 'type' => 'error',
+ ];
+ $messages[self::FAILED] = [
+ 'message' => __(
+ 'Failed to capture. Try again later.',
+ 'woocommerce-paypal-gateway'
+ ),
+ 'type' => 'error',
+ ];
+ $messages[self::NOT_FOUND] = [
+ 'message' => __(
+ 'Could not find payment to process.',
+ 'woocommerce-paypal-gateway'
+ ),
+ 'type' => 'error',
+ ];
+ $messages[self::SUCCESS] = [
+ 'message' => __(
+ 'Payment successfully captured.',
+ 'woocommerce-paypal-gateway'
+ ),
+ 'type' => 'success',
+ ];
+
+ if (! isset($_GET['ppcp-message'])) {
+ return [];
+ }
+ $messageId = absint($_GET[self::QUERY_PARAM]);
+ return (isset($messages[$messageId])) ? $messages[$messageId] : [];
}
public static function displayMessage(int $messageCode): void
@@ -43,7 +75,7 @@ class AuthorizeOrderActionNotice
'redirect_post_location',
function ($location) use ($messageCode) {
return add_query_arg(
- 'message',
+ self::QUERY_PARAM,
$messageCode,
$location
);
diff --git a/modules.local/ppcp-wc-gateway/src/Notice/ConnectAdminNotice.php b/modules.local/ppcp-wc-gateway/src/Notice/ConnectAdminNotice.php
index dc71c469e..014a94927 100644
--- a/modules.local/ppcp-wc-gateway/src/Notice/ConnectAdminNotice.php
+++ b/modules.local/ppcp-wc-gateway/src/Notice/ConnectAdminNotice.php
@@ -3,6 +3,7 @@ declare(strict_types=1);
namespace Inpsyde\PayPalCommerce\WcGateway\Notice;
+use Inpsyde\PayPalCommerce\AdminNotices\Entity\Message;
use Inpsyde\PayPalCommerce\WcGateway\Settings\Settings;
class ConnectAdminNotice
@@ -14,26 +15,23 @@ class ConnectAdminNotice
$this->settings = $settings;
}
- public function display()
+ public function connectMessage() : ?Message
{
if (!$this->shouldDisplay()) {
- return;
+ return null;
}
- echo sprintf(
- '',
- wp_kses_post(
- sprintf(
- /* translators: %1$s the gateway name */
- __(
- '%1$s is almost ready. To get started, connect your account.',
- 'woocommerce-paypal-commerce-gateway'
- ),
- $this->settings->get('title'),
- // TODO: find a better way to get the url
- admin_url('admin.php?page=wc-settings&tab=checkout§ion=ppcp-gateway')
- )
- )
+
+ $message = sprintf(
+ /* translators: %1$s the gateway name */
+ __(
+ '%1$s is almost ready. To get started, connect your account.',
+ 'woocommerce-paypal-commerce-gateway'
+ ),
+ $this->settings->get('title'),
+ // TODO: find a better way to get the url
+ admin_url('admin.php?page=wc-settings&tab=checkout§ion=ppcp-gateway')
);
+ return new Message( $message, 'warning');
}
protected function shouldDisplay(): bool
diff --git a/modules.local/ppcp-wc-gateway/src/WcGatewayModule.php b/modules.local/ppcp-wc-gateway/src/WcGatewayModule.php
index ff5975626..7ca5ec01a 100644
--- a/modules.local/ppcp-wc-gateway/src/WcGatewayModule.php
+++ b/modules.local/ppcp-wc-gateway/src/WcGatewayModule.php
@@ -6,6 +6,7 @@ namespace Inpsyde\PayPalCommerce\WcGateway;
use Dhii\Container\ServiceProvider;
use Dhii\Modular\Module\ModuleInterface;
+use Inpsyde\PayPalCommerce\AdminNotices\Repository\Repository;
use Inpsyde\PayPalCommerce\WcGateway\Admin\OrderDetail;
use Inpsyde\PayPalCommerce\WcGateway\Admin\OrderTablePaymentStatusColumn;
use Inpsyde\PayPalCommerce\WcGateway\Admin\PaymentStatusOrderDetail;
@@ -47,14 +48,24 @@ class WcGatewayModule implements ModuleInterface
}
);
- add_action(
- 'admin_notices',
- function () use ($container) : void {
+ add_filter(
+ Repository::NOTICES_FILTER,
+ function ($notices) use ($container) : array {
$notice = $container->get('wcgateway.notice.connect');
/**
* @var ConnectAdminNotice $notice
*/
- $notice->display();
+ $connectMessage = $notice->connectMessage();
+ if ($connectMessage) {
+ $notices[] = $connectMessage;
+ }
+ $authorizeOrderAction = $container->get('wcgateway.notice.authorize-order-action');
+ $authorizedMessage = $authorizeOrderAction->message();
+ if ($authorizedMessage) {
+ $notices[] = $authorizedMessage;
+ }
+
+ return $notices;
}
);
@@ -80,18 +91,6 @@ class WcGatewayModule implements ModuleInterface
}
);
- add_filter(
- 'post_updated_messages',
- function ($messages) use ($container) {
- /**
- * @var AuthorizeOrderActionNotice $authorizeOrderAction
- */
- $authorizeOrderAction = $container->get('wcgateway.notice.authorize-order-action');
- return $authorizeOrderAction->registerMessages($messages);
- },
- 20
- );
-
add_action(
'woocommerce_order_actions_start',
function ($wcOrderId) use ($container) {