1: <?php
2:
3: namespace Budabot\Core;
4:
5: use stdClass;
6:
7: 8: 9:
10: class HelpManager {
11:
12:
13: public $db;
14:
15:
16: public $accessManager;
17:
18:
19: public $configController;
20:
21:
22: public $chatBot;
23:
24:
25: public $util;
26:
27:
28: public $logger;
29:
30: 31: 32: 33:
34: public function register($module, $command, $filename, $admin, $description) {
35: $this->logger->log('DEBUG', "Registering $module:help($command) Helpfile:($filename)");
36:
37: $command = strtolower($command);
38:
39:
40: $actual_filename = $this->util->verifyFilename($module . '/' . $filename);
41: if ($actual_filename == '') {
42: $this->logger->log('ERROR', "Error in registering the File $filename for Help command $module:help($command). The file doesn't exist!");
43: return;
44: }
45:
46: if (isset($this->chatBot->existing_helps[$command])) {
47: $sql = "UPDATE hlpcfg_<myname> SET `verify` = 1, `file` = ?, `module` = ?, `description` = ? WHERE `name` = ?";
48: $this->db->exec($sql, $actual_filename, $module, $description, $command);
49: } else {
50: $sql = "INSERT INTO hlpcfg_<myname> (`name`, `module`, `file`, `description`, `admin`, `verify`) VALUES (?, ?, ?, ?, ?, ?)";
51: $this->db->exec($sql, $command, $module, $actual_filename, $description, $admin, '1');
52: }
53:
54: $row = $this->db->queryRow("SELECT * FROM hlpcfg_<myname> WHERE `name` = ?", $command);
55: }
56:
57: 58: 59: 60:
61: public function find($helpcmd, $char) {
62: $helpcmd = strtolower($helpcmd);
63:
64: $sql = "
65: SELECT module, file, name, GROUP_CONCAT(admin) AS admin_list FROM
66: (SELECT module, admin, cmd AS name, help AS file FROM cmdcfg_<myname> WHERE cmdevent = 'cmd' AND cmd = ? AND status = 1 AND help != ''
67: UNION
68: SELECT module, admin, name, help AS file FROM settings_<myname> WHERE name = ? AND help != ''
69: UNION
70: SELECT module, admin, name, file FROM hlpcfg_<myname> WHERE name = ? AND file != '') t
71: GROUP BY module, file";
72: $data = $this->db->query($sql, $helpcmd, $helpcmd, $helpcmd);
73:
74: if (count($data) == 0) {
75: $helpcmd = strtoupper($helpcmd);
76: $sql = "
77: SELECT module, file, name, GROUP_CONCAT(admin) AS admin_list FROM
78: (SELECT module, admin, cmd AS name, help AS file FROM cmdcfg_<myname> WHERE cmdevent = 'cmd' AND module = ? AND status = 1 AND help != ''
79: UNION
80: SELECT module, admin, name, help AS file FROM settings_<myname> WHERE module = ? AND help != ''
81: UNION
82: SELECT module, admin, name, file FROM hlpcfg_<myname> WHERE module = ? AND file != '') t
83: GROUP BY module, file";
84: $data = $this->db->query($sql, $helpcmd, $helpcmd, $helpcmd);
85: }
86:
87: $accessLevel = $this->accessManager->getAccessLevelForCharacter($char);
88:
89: $output = '';
90: forEach ($data as $row) {
91: if ($this->checkAccessLevels($accessLevel, explode(",", $row->admin_list))) {
92: $output .= $this->configController->getAliasInfo($row->name);
93: $output .= trim(file_get_contents($row->file)) . "\n\n";
94: }
95: }
96:
97: return (empty($output) ? false : $output);
98: }
99:
100: public function update($helpTopic, $admin) {
101: $helpTopic = strtolower($helpTopic);
102: $admin = strtolower($admin);
103:
104: $this->db->exec("UPDATE hlpcfg_<myname> SET `admin` = ? WHERE `name` = ?", $admin, $helpTopic);
105: }
106:
107: public function checkForHelpFile($module, $file) {
108: $actualFilename = $this->util->verifyFilename($module . '/' . $file);
109: if ($actualFilename == '') {
110: $this->logger->log('WARN', "Error in registering the help file {$module}/{$file}. The file doesn't exist!");
111: }
112: return $actualFilename;
113: }
114:
115: public function getAllHelpTopics($char) {
116: $sql = "
117: SELECT module, file, name, description, sort, GROUP_CONCAT(admin) AS admin_list FROM (
118: SELECT module, admin, help AS file, name, description, 3 AS sort FROM settings_<myname> WHERE help != ''
119: UNION
120: SELECT module, admin, help AS file, cmd AS name, description, 2 AS sort FROM cmdcfg_<myname> WHERE `cmdevent` = 'cmd' AND status = 1 AND help != ''
121: UNION
122: SELECT module, admin, file, name, description, 1 AS sort FROM hlpcfg_<myname>) t
123: GROUP BY module, file, name, description, sort
124: ORDER BY module, name, sort DESC, description";
125: $data = $this->db->query($sql);
126:
127: if ($char !== null) {
128: $accessLevel = $this->accessManager->getAccessLevelForCharacter($char);
129: }
130:
131: $topics = array();
132: forEach ($data as $row) {
133: if ($char === null || $this->checkAccessLevels($accessLevel, explode(",", $row->admin_list))) {
134: $obj = new stdClass;
135: $obj->module = $row->module;
136: $obj->name = $row->name;
137: $obj->description = $row->description;
138: $topics []= $obj;
139: }
140: }
141:
142: return $topics;
143: }
144:
145: public function checkAccessLevels($accessLevel1, $accessLevelsArray) {
146: forEach ($accessLevelsArray as $accessLevel2) {
147: if ($this->accessManager->compareAccessLevels($accessLevel1, $accessLevel2) >= 0) {
148: return true;
149: }
150: }
151: return false;
152: }
153: }
154: