summaryrefslogtreecommitdiff
path: root/includes/classes/BitFeedback.php
blob: af31ee2dc3b23522395f4ec3e4a962654c8e7443 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
/**
 * bitweaver feedback system
 *
 * Copyright (c) 2004 bitweaver.org
 * All Rights Reserved. See below for details and a complete list of authors.
 * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See http://www.gnu.org/copyleft/lesser.html for details
 *
 * created 2025/8/23
 *
 * @author spider <spider@steelsun.com>
 * @package  themes
 */

class BitFeedback {
	/**
	 * Adds a feedback message with a specified level for a given page key.
	 * Levels are based on Bootstrap alerts: success, info, warning, danger.
	 *
	 * @param string $level The alert level (success, info, warning, danger).
	 * @param string $message The feedback message.
	 * @param string $pagekey The key identifying the page or section.
	 */
	public static function add( string $message, string $level, string $pagekey): void {
		if (!session_id()) {
			session_start();
		}

		if (!isset($_SESSION['bit_feedback'])) {
			$_SESSION['bit_feedback'] = [];
		}

		if (!isset($_SESSION['bit_feedback'][$pagekey])) {
			$_SESSION['bit_feedback'][$pagekey][$level] = [];
		}

		// Validate level
		$validLevels = ['success', 'info', 'warning', 'danger'];
		if (!in_array($level, $validLevels)) {
			throw new InvalidArgumentException("Invalid level: $level. Must be one of: " . implode(', ', $validLevels));
		}

		$_SESSION['bit_feedback'][$pagekey][$level][] = $message;
	}

	/**
	 * Retrieves and clears all feedback messages for a given page key.
	 *
	 * @param string $pagekey The key identifying the page or section.
	 * @return array An array of feedback messages, each with 'level' and 'message'.
	 */
	public static function get(string $pagekey): array {
		if (!session_id()) {
			session_start();
		}
		session_start();

		$messages = [];

		if (isset($_SESSION['bit_feedback'][$pagekey])) {
			$messages = $_SESSION['bit_feedback'][$pagekey];
			$_SESSION['bit_feedback'][$pagekey] = [];
			unset($_SESSION['bit_feedback'][$pagekey]);
		}

		return $messages;
	}
}