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

136 lines 2.9 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 $this->messages[] = $message;
88
89 set_transient( $this->getTransientName(), $this->messages, self::EXPIRATION );
90 }
91
92 /**
93 * Renders messages.
94 *
95 * @param string $renderer Message renderer.
96 * @param string $context Message context.
97 */
98 public function render( string $renderer = self::RENDERER_WORDPRESS, string $context = '' ): void {
99 // @codingStandardsIgnoreStart
100 echo $this->renderToString( $renderer, $context );
101 // @codingStandardsIgnoreEnd
102 }
103
104 /**
105 * Renders messages.
106 *
107 * @param string $renderer Message renderer.
108 * @param string $context Message context.
109 */
110 public function renderToString( string $renderer = self::RENDERER_WORDPRESS, string $context = '' ): string {
111 $output = '';
112
113 foreach ( $this->messages as $key => $message ) {
114 if ( $message['renderer'] !== $renderer ) {
115 continue;
116 }
117
118 if ( $message['context'] !== $context ) {
119 continue;
120 }
121
122 $output .= $this->latteEngine->renderToString(
123 PACKETERY_PLUGIN_DIR . '/template/admin-notice.latte',
124 [
125 'message' => $message,
126 ]
127 );
128
129 unset( $this->messages[ $key ] );
130 }
131
132 set_transient( $this->getTransientName(), $this->messages, self::EXPIRATION );
133 return $output;
134 }
135 }
136