PluginProbe
Packeta / trunk
Packeta vtrunk
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
packeta / src / Packetery / Module / MessageManager.php

MessageManager.php in Packeta trunk, at src/Packetery/Module/MessageManager.php

165 lines 3.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class Message_Manager
4 *
5 * @package Packetery
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module;
11
12 use Packetery\Latte\Engine;
13 use Packetery\Module\Framework\WpAdapter;
14
15 /**
16 * Class Message_Manager
17 *
18 * @package Packetery
19 */
20 class MessageManager {
21
22 public const TYPE_ERROR = 'error';
23 public const TYPE_SUCCESS = 'success';
24 public const TYPE_INFO = 'info';
25
26 public const RENDERER_WORDPRESS = 'wordpress';
27 public const RENDERER_PACKETERY = 'packetery';
28
29 private const EXPIRATION = 120;
30
31 /**
32 * PacketeryLatte engine.
33 *
34 * @var Engine
35 */
36 private $latteEngine;
37
38 /**
39 * @var WpAdapter
40 */
41 private $wpAdapter;
42
43 /**
44 * Messages to be displayed.
45 *
46 * @var array<array<string, string>>
47 */
48 private $messages = [];
49
50 public function __construct(
51 Engine $latteEngine,
52 WpAdapter $wpAdapter
53 ) {
54 $this->latteEngine = $latteEngine;
55 $this->wpAdapter = $wpAdapter;
56 }
57
58 /**
59 * Inits manager on plugin load.
60 */
61 public function init(): void {
62 $messages = $this->wpAdapter->getTransient( $this->getTransientName() );
63 if ( $messages === false ) {
64 $messages = [];
65 }
66
67 $this->messages = $messages;
68 }
69
70 /**
71 * Gets transient name.
72 */
73 private function getTransientName(): string {
74 return Transients::MESSAGE_MANAGER_MESSAGES_PREFIX . $this->wpAdapter->getSessionToken();
75 }
76
77 /**
78 * Flashes messages to end user.
79 *
80 * @param string $message Text.
81 * @param string $type Type of message.
82 * @param string $renderer Renderer of message.
83 * @param string $context Message context.
84 */
85 public function flash_message( string $message, string $type = self::TYPE_SUCCESS, string $renderer = self::RENDERER_WORDPRESS, string $context = '' ): void {
86 $message = [
87 'type' => $type,
88 'message' => $message,
89 'renderer' => $renderer,
90 'context' => $context,
91 ];
92
93 $this->flashMessageArray( $message );
94 }
95
96 /**
97 * Flash message.
98 *
99 * @param Message $message Message.
100 *
101 * @return void
102 */
103 public function flashMessageObject( Message $message ): void {
104 $this->flashMessageArray( $message->toArray() );
105 }
106
107 /**
108 * Adds message.
109 *
110 * @param array $message Message.
111 *
112 * @return void
113 */
114 private function flashMessageArray( array $message ): void {
115 $this->messages[] = $message;
116
117 $this->wpAdapter->setTransient( $this->getTransientName(), $this->messages, self::EXPIRATION );
118 }
119
120 /**
121 * Renders messages.
122 *
123 * @param string $renderer Message renderer.
124 * @param string $context Message context.
125 */
126 public function render( string $renderer, string $context = '' ): void {
127 // @codingStandardsIgnoreStart
128 echo $this->renderToString( $renderer, $context );
129 // @codingStandardsIgnoreEnd
130 }
131
132 /**
133 * Renders messages.
134 *
135 * @param string $renderer Message renderer.
136 * @param string $context Message context.
137 */
138 public function renderToString( string $renderer, string $context ): string {
139 $output = '';
140
141 foreach ( $this->messages as $key => $message ) {
142 if ( $message['renderer'] !== $renderer ) {
143 continue;
144 }
145
146 if ( $message['context'] !== $context ) {
147 continue;
148 }
149
150 $output .= $this->latteEngine->renderToString(
151 PACKETERY_PLUGIN_DIR . '/template/admin-notice.latte',
152 [
153 'message' => $message,
154 ]
155 );
156
157 unset( $this->messages[ $key ] );
158 }
159
160 $this->wpAdapter->setTransient( $this->getTransientName(), $this->messages, self::EXPIRATION );
161
162 return $output;
163 }
164 }
165