PluginProbe
Packeta / 1.4.2
Packeta v1.4.2
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 1.4.2, at src/Packetery/Module/MessageManager.php

148 lines 3.0 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 PacketeryLatte\Engine;
13
14 /**
15 * Class Message_Manager
16 *
17 * @package Packetery
18 */
19 class MessageManager {
20
21 public const TYPE_ERROR = 'error';
22 public const TYPE_SUCCESS = 'success';
23 public const TYPE_INFO = 'info';
24
25 public const RENDERER_WORDPRESS = 'wordpress';
26 public const RENDERER_PACKETERY = 'packetery';
27
28 private const EXPIRATION = 120;
29
30 /**
31 * PacketeryLatte engine.
32 *
33 * @var Engine
34 */
35 private $latteEngine;
36
37 /**
38 * Messages to be displayed.
39 *
40 * @var array
41 */
42 private $messages = [];
43
44 /**
45 * Message_Manager constructor.
46 *
47 * @param Engine $latteEngine PacketeryLatte engine.
48 */
49 public function __construct( Engine $latteEngine ) {
50 $this->latteEngine = $latteEngine;
51 }
52
53 /**
54 * Inits manager on plugin load.
55 */
56 public function init(): void {
57 $messages = get_transient( $this->getTransientName() );
58 if ( ! $messages ) {
59 $messages = [];
60 }
61
62 $this->messages = $messages;
63 }
64
65 /**
66 * Gets transient name.
67 */
68 private function getTransientName(): string {
69 return 'packetery_message_manager_messages_' . wp_get_session_token();
70 }
71
72 /**
73 * Flashes messages to end user.
74 *
75 * @param string $message Text.
76 * @param string $type Type of message.
77 * @param string $renderer Renderer of message.
78 * @param string $context Message context.
79 */
80 public function flash_message( string $message, string $type = self::TYPE_SUCCESS, string $renderer = self::RENDERER_WORDPRESS, string $context = '' ): void {
81 $message = [
82 'type' => $type,
83 'message' => $message,
84 'renderer' => $renderer,
85 'context' => $context,
86 ];
87
88 $this->addMessage( $message );
89 }
90
91 /**
92 * Adds message.
93 *
94 * @param array $message Message.
95 *
96 * @return void
97 */
98 private function addMessage( array $message ): void {
99 $this->messages[] = $message;
100
101 set_transient( $this->getTransientName(), $this->messages, self::EXPIRATION );
102 }
103
104 /**
105 * Renders messages.
106 *
107 * @param string $renderer Message renderer.
108 * @param string $context Message context.
109 */
110 public function render( string $renderer = self::RENDERER_WORDPRESS, string $context = '' ): void {
111 // @codingStandardsIgnoreStart
112 echo $this->renderToString( $renderer, $context );
113 // @codingStandardsIgnoreEnd
114 }
115
116 /**
117 * Renders messages.
118 *
119 * @param string $renderer Message renderer.
120 * @param string $context Message context.
121 */
122 public function renderToString( string $renderer = self::RENDERER_WORDPRESS, string $context = '' ): string {
123 $output = '';
124
125 foreach ( $this->messages as $key => $message ) {
126 if ( $message['renderer'] !== $renderer ) {
127 continue;
128 }
129
130 if ( $message['context'] !== $context ) {
131 continue;
132 }
133
134 $output .= $this->latteEngine->renderToString(
135 PACKETERY_PLUGIN_DIR . '/template/admin-notice.latte',
136 [
137 'message' => $message,
138 ]
139 );
140
141 unset( $this->messages[ $key ] );
142 }
143
144 set_transient( $this->getTransientName(), $this->messages, self::EXPIRATION );
145 return $output;
146 }
147 }
148