1: <?php
2:
3: /**
4: * Tags modules
5: * @package modules
6: * @subpackage tags
7: */
8:
9: if (!defined('DEBUG_MODE')) { die(); }
10:
11: /**
12: * @subpackage tags/libs
13: */
14: class Hm_Tags {
15: use Hm_Repository;
16:
17: private static $data = array();
18:
19: public static function init($hmod) {
20: self::initRepo('tags', $hmod->user_config, $hmod->session, self::$data);
21: }
22:
23: public static function addMessage($tagId, $serverId, $folder, $messageId) {
24: $folders = self::getFolders($tagId, $serverId);
25: if (!in_array($folder, $folders)) {
26: self::registerFolder($tagId, $serverId, $folder);
27: $folders = self::getFolders($tagId, $serverId);
28: }
29: if (!isset($folders[$folder])) {
30: $folders[$folder] = [];
31: }
32: if (!in_array($messageId, $folders[$folder])) {
33: $folders[$folder][] = $messageId;
34: }
35: $tag = self::get($tagId);
36: $tag['server'][$serverId][$folder] = $folders[$folder];
37: return self::edit($tagId, $tag);
38: }
39:
40: public static function registerFolder($tag_id, $serverId, $folder) {
41: $tag = self::get($tag_id);
42: if (! isset($tag['server'][$serverId][$folder])) {
43: $tag['server'][$serverId][$folder] = [];
44: }
45: self::edit($tag_id, $tag);
46: }
47:
48: public static function getFolders($tag_id, $serverId) {
49: $tag = self::get($tag_id);
50: if (isset($tag['server'][$serverId])) {
51: return $tag['server'][$serverId];
52: }
53: return [];
54: }
55:
56: private static function getTagIdsWithMessage($messageId) {
57: $tags = self::getAll();
58: $tagIds = [];
59: foreach ($tags as $tagId => $tag) {
60: foreach ($tag['server'] as $serverId => $folders) {
61: foreach ($folders as $messages) {
62: // Exclude folder indentifiers
63: if (! is_array($messages)) {
64: continue;
65: }
66: if (in_array($messageId, $messages)) {
67: $tagIds[] = $tagId;
68: }
69: }
70: }
71: }
72: return $tagIds;
73: }
74:
75: public static function moveMessageToADifferentFolder($params) {
76: $oldId = $params['oldId'];
77: $newId = $params['newId'];
78: $oldFolder = $params['oldFolder'];
79: $newFolder = $params['newFolder'];
80: $oldServer = $params['oldServer'];
81: $newServer = $params['newServer'] ?? '';
82:
83: $tagIds = self::getTagIdsWithMessage($oldId);
84: foreach ($tagIds as $tagId) {
85: $tag = self::get($tagId);
86: $folders = $tag['server'][$oldServer];
87: $messages = $folders[$oldFolder];
88: $newMessages = [];
89:
90: foreach ($messages as $messageId) {
91: if ($messageId == $oldId) {
92: continue;
93: }
94: $newMessages[] = $messageId;
95: }
96:
97: $folders[$oldFolder] = $newMessages;
98:
99: if ($newServer) {
100: if (!isset($tag['server'][$newServer])) {
101: $tag['server'][$newServer] = [];
102: }
103: if (!isset($tag['server'][$newServer][$newFolder])) {
104: $tag['server'][$newServer][$newFolder] = [];
105: }
106: $tag['server'][$newServer][$newFolder][] = $newId;
107: } else {
108: if (!isset($folders[$newFolder])) {
109: $folders[$newFolder] = [];
110: }
111: $folders[$newFolder][] = $newId;
112: $tag['server'][$oldServer] = $folders;
113: }
114: self::edit($tagId, $tag);
115: }
116: }
117: }
118: