Code rewritings, load base config improved and many minor fixes...
[mailer.git] / 0.2.1 / inc / modules / admin / what-config_admins.php
1 <?php\r
2 /************************************************************************\r
3  * MXChange v0.2.1                                    Start: 06/30/2004 *\r
4  * ================                             Last change: 07/02/2004 *\r
5  *                                                                      *\r
6  * -------------------------------------------------------------------- *\r
7  * File: what-config_admins.php                                         *\r
8  * -------------------------------------------------------------------- *\r
9  * Short description : Configure admin ACLs                             *\r
10  * -------------------------------------------------------------------- *\r
11  * Kurzbeschreibung  : Admin-ACLs einstellen                            *\r
12  * -------------------------------------------------------------------- *\r
13  *                                                                      *\r
14  * -------------------------------------------------------------------- *\r
15  * Copyright (c) 2003 - 2008 by Roland Haeder                           *\r
16  * For more information visit: http://www.mxchange.org                  *\r
17  *                                                                      *\r
18  * This program is free software; you can redistribute it and/or modify *\r
19  * it under the terms of the GNU General Public License as published by *\r
20  * the Free Software Foundation; either version 2 of the License, or    *\r
21  * (at your option) any later version.                                  *\r
22  *                                                                      *\r
23  * This program is distributed in the hope that it will be useful,      *\r
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *\r
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *\r
26  * GNU General Public License for more details.                         *\r
27  *                                                                      *\r
28  * You should have received a copy of the GNU General Public License    *\r
29  * along with this program; if not, write to the Free Software          *\r
30  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *\r
31  * MA  02110-1301  USA                                                  *\r
32  ************************************************************************/\r
33 \r
34 // Some security stuff...\r
35 if ((ereg(basename(__FILE__), $_SERVER['PHP_SELF'])) || (!IS_ADMIN()))\r
36 {\r
37         $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php";\r
38         require($INC);\r
39 }\r
40 // Add description as navigation point\r
41 ADD_DESCR("admin", basename(__FILE__));\r
42 \r
43 $SEL = 0;\r
44 if (!empty($_POST['sel'])) $SEL = SELECTION_COUNT($_POST['sel']);\r
45 \r
46 if ((isset($_POST['edit'])) && ($SEL > 0))\r
47 {\r
48         // Edit ACLs\r
49         $SW = 2; $OUT = "";\r
50         foreach ($_POST['sel'] as $id=>$sel)\r
51         {\r
52                 // Load data for the ID\r
53                 $result = SQL_QUERY_ESC("SELECT admin_id, action_menu, what_menu, access_mode FROM "._MYSQL_PREFIX."_admins_acls WHERE id=%d LIMIT 1",\r
54                  array(bigintval($id)), __FILE__, __LINE__);\r
55                 list($aid, $act, $wht, $mode) = SQL_FETCHROW($result);\r
56                 SQL_FREERESULT($result);\r
57 \r
58                 // Prepare data for the row template\r
59                 $content = array(\r
60                         'sw'               => $SW,\r
61                         'id'               => $id,\r
62                         'admins_selection' => ADD_OPTION_LINES("admins", "id", "login", $aid, "default_acl"),\r
63                         'action_selection' => ADMIN_MENU_SELECTION("action", $act, $id),\r
64                         'what_selection'   => ADMIN_MENU_SELECTION("what", $wht, $id),\r
65                         'mode_options'     => ADD_OPTION_LINES(\r
66                                 "/ARRAY/",\r
67                                 array("allow", "deny"),\r
68                                 array(ADMINS_ALLOW_MODE, ADMINS_DENY_MODE),\r
69                                 $mode\r
70                         ),\r
71                 );\r
72 \r
73                 // Load row template\r
74                 $OUT .= LOAD_TEMPLATE("admin_config_admins_edit_row", true, $content);\r
75                 $SW = 3 - $SW;\r
76         }\r
77         define('__ACL_ROWS', $OUT);\r
78 \r
79         // Load main template\r
80         LOAD_TEMPLATE("admin_config_admins_edit");\r
81 }\r
82  elseif ((isset($_POST['change'])) && ($SEL > 0))\r
83 {\r
84         // Change entries\r
85         foreach ($_POST['sel'] as $id=>$sel)\r
86         {\r
87                 // Secure ID\r
88                 $id = bigintval($id);\r
89 \r
90                 // Update entries\r
91                 $result = SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_admins_acls SET admin_id=%d, action_menu='%s', what_menu='%s', access_mode='%s' WHERE id=%d LIMIT 1",\r
92                  array($_POST['admin'][$id], $_POST['action_menu'][$id], $_POST['what_menu'][$id], $_POST['mode'][$id], $id),__FILE__, __LINE__);\r
93         }\r
94 \r
95         // Update cache when installed\r
96         if (EXT_IS_ACTIVE("cache"))\r
97         {\r
98                 if ($CACHE->cache_file("admins_acls", true) == true) $CACHE->cache_destroy();\r
99         }\r
100 \r
101         // Entries changed\r
102         LOAD_TEMPLATE("admin_settings_saved", false, ADMIN_ADMINS_ENTRIES_CHANGED);\r
103 }\r
104  elseif ((isset($_POST['del'])) && ($SEL > 0))\r
105 {\r
106         // Delete ACLs\r
107         $SW = 2; $OUT = "";\r
108         foreach ($_POST['sel'] as $id=>$sel)\r
109         {\r
110                 // Load data for the ID\r
111                 $result = SQL_QUERY_ESC("SELECT admin_id, action_menu, what_menu, access_mode FROM "._MYSQL_PREFIX."_admins_acls WHERE id=%d LIMIT 1",\r
112                  array(bigintval($id)), __FILE__, __LINE__);\r
113                 list($admin, $act, $wht, $mode) = SQL_FETCHROW($result);\r
114                 SQL_FREERESULT($result);\r
115 \r
116                 // Prepare variables\r
117                 if (empty($act)) $act = "---";\r
118                 if (empty($wht))   $wht   = "---";\r
119                 $eval = "\$mode = ADMINS_".strtoupper($mode)."_MODE;";\r
120                 eval($eval);\r
121 \r
122                 // Load admin's data\r
123                 $login = GET_ADMIN_LOGIN($admin);\r
124                 if ($login != "***")\r
125                 {\r
126                         // Admin found\r
127                         $admin = "<A href=\"".URL."/modules.php?module=admin&amp;what=admins_contct&amp;admin=".$admin."\">".$login."</A>";\r
128                 }\r
129                  else\r
130                 {\r
131                         // Maybe deleted?\r
132                         $admin = "<FONT class=\"admin_note\">".ADMIN_ID_404_1.$admin.ADMIN_ID_404_2."</FONT>";\r
133                 }\r
134 \r
135                 // Prepare data for the row template\r
136                 $content = array(\r
137                         'sw'     => $SW,\r
138                         'id'     => $id,\r
139                         'admin'  => $admin,\r
140                         'action' => $act,\r
141                         'what'   => $wht,\r
142                         'mode'   => $mode,\r
143                 );\r
144 \r
145                 // Load row template and switch colors\r
146                 $OUT .= LOAD_TEMPLATE("admin_config_admins_del_row", true, $content);\r
147                 $SW = 3 - $SW;\r
148         }\r
149         define('__ACL_ROWS', $OUT);\r
150 \r
151         // Load main template\r
152         LOAD_TEMPLATE("admin_config_admins_del");\r
153 }\r
154  elseif ((isset($_POST['remove'])) && ($SEL > 0))\r
155 {\r
156         // Remove entries\r
157         foreach ($_POST['sel'] as $id=>$sel)\r
158         {\r
159                 $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_admins_acls WHERE id=%d LIMIT 1",\r
160                  array(bigintval($id)),__FILE__, __LINE__);\r
161         }\r
162 \r
163         // Update cache when installed\r
164         if (EXT_IS_ACTIVE("cache"))\r
165         {\r
166                 if ($CACHE->cache_file("admins_acls", true) == true) $CACHE->cache_destroy();\r
167         }\r
168 \r
169         // Entries deleted\r
170         LOAD_TEMPLATE("admin_settings_saved", false, ADMIN_ADMINS_ENTRIES_DELETED);\r
171 }\r
172  elseif (isset($_POST['add']))\r
173 {\r
174         // Check if everything is fine...\r
175         $result = SQL_QUERY_ESC("SELECT default_acl FROM "._MYSQL_PREFIX."_admins WHERE id=%d LIMIT 1",\r
176          array(bigintval($_POST['admin_id'])), __FILE__, __LINE__);\r
177         list($mode) = SQL_FETCHROW($result);\r
178         SQL_FREERESULT($result);\r
179 \r
180         // Default ACL is false\r
181         $ACL = false;\r
182         if (!empty($_POST['what_menu']))\r
183         {\r
184                 // Check parent ACL\r
185                 $ACL = ADMINS_CHECK_ACL(GET_ACTION("admin", $_POST['what_menu']), "");\r
186         }\r
187 \r
188         if ($mode != $_POST['mode'] || ($ACL))\r
189         {\r
190                 // Mode is fine\r
191                 $BOTH = ((!empty($_POST['action_menu'])) && (!empty($_POST['what_menu'])));\r
192                 if (((!empty($_POST['action_menu'])) || (!empty($_POST['what_menu']))) && (!$BOTH))\r
193                 {\r
194                         // Main or sub menu selected\r
195                         $result = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_admins_acls WHERE admin_id=%d AND action_menu='%s' AND what_menu='%s' LIMIT 1",\r
196                          array(bigintval($_POST['admin_id']), $_POST['action_menu'], $_POST['what_menu']), __FILE__, __LINE__);\r
197                         if (SQL_NUMROWS($result) == 0)\r
198                         {\r
199                                 // Finally add the new ACL\r
200                                 $result = SQL_QUERY_ESC("INSERT INTO "._MYSQL_PREFIX."_admins_acls (admin_id, action_menu, what_menu, access_mode)\r
201 VALUES ('%s', '%s', '%s', '%s')",\r
202  array(\r
203         $_POST['admin_id'],\r
204         $_POST['action_menu'],\r
205         $_POST['what_menu'],\r
206         $_POST['mode']\r
207 ), __FILE__, __LINE__);\r
208                                 $content = ADMIN_ADMINS_ACL_SAVED;\r
209 \r
210                                 // Update cache when installed\r
211                                 if (EXT_IS_ACTIVE("cache"))\r
212                                 {\r
213                                         if ($CACHE->cache_file("admins_acls", true) == true) $CACHE->cache_destroy();\r
214                                 }\r
215                         }\r
216                          else\r
217                         {\r
218                                 // ACL does already exist!\r
219                                 $content = ADMIN_ADMINS_ACL_ALREADY_ADDED;\r
220                         }\r
221 \r
222                         // Free memory\r
223                         SQL_FREERESULT($result);\r
224                 }\r
225                  else\r
226                 {\r
227                         // No menu selected makes also no sence...\r
228                         $content = ADMIN_ADMINS_SELECT_ACTION_WHAT;\r
229                 }\r
230         }\r
231          else\r
232         {\r
233                 // Same mode makes no sence...\r
234                 $content = ADMIN_ADMINS_SAME_MODE_SELECTED;\r
235         }\r
236 \r
237         // Display message\r
238         LOAD_TEMPLATE("admin_settings_saved", false, $content);\r
239 }\r
240  else\r
241 {\r
242         // List all ACLs\r
243         $result_acls = SQL_QUERY("SELECT id, admin_id, action_menu, what_menu, access_mode FROM "._MYSQL_PREFIX."_admins_acls ORDER BY admin_id, id", __FILE__, __LINE__);\r
244         if (SQL_NUMROWS($result_acls) > 0)\r
245         {\r
246                 // List ACLs\r
247                 $SW = 2; $OUT = "";\r
248                 while(list($id, $admin, $act, $wht, $mode) = SQL_FETCHROW($result_acls))\r
249                 {\r
250                         // Prepare variables\r
251                         if (empty($act)) $act = "---";\r
252                         if (empty($wht))   $wht   = "---";\r
253                         $eval = "\$mode = ADMINS_".strtoupper($mode)."_MODE;";\r
254                         eval($eval);\r
255 \r
256                         // Load admin's data\r
257                         $login = GET_ADMIN_LOGIN($admin);\r
258                         if ($login != "***")\r
259                         {\r
260                                 // Admin found\r
261                                 $admin = "<A href=\"".URL."/modules.php?module=admin&amp;what=admins_contct&amp;admin=".$admin."\">".$login."</A>";\r
262                         }\r
263                          else\r
264                         {\r
265                                 // Maybe deleted?\r
266                                 $admin = "<FONT class=\"admin_note\">".ADMIN_ID_404_1.$admin.ADMIN_ID_404_2."</FONT>";\r
267                         }\r
268 \r
269                         // Prepare data for the row template\r
270                         $content = array(\r
271                                 'sw'     => $SW,\r
272                                 'id'     => $id,\r
273                                 'admin'  => $admin,\r
274                                 'action' => $act,\r
275                                 'what'   => $wht,\r
276                                 'mode'   => $mode,\r
277                         );\r
278 \r
279                         // Load row template and switch colors\r
280                         $OUT .= LOAD_TEMPLATE("admin_config_admins_row", true, $content);\r
281                         $SW = 3 - $SW;\r
282                 }\r
283 \r
284                 // Free memory\r
285                 SQL_FREERESULT($result);\r
286                 define('__ACL_ROWS', $OUT);\r
287 \r
288                 // Load main template\r
289                 LOAD_TEMPLATE("admin_config_admins");\r
290         }\r
291 \r
292         // Prepare some constants for the template\r
293         define('_ADMINS_SELECTION', ADD_OPTION_LINES("admins", "id", "login", "", "default_acl"));\r
294         define('_ACTION_SELECTION', ADMIN_MENU_SELECTION("action"));\r
295         define('_WHAT_SELECTION'  , ADMIN_MENU_SELECTION("what"));\r
296         define('_MODE_OPTIONS'    , ADD_OPTION_LINES("/ARRAY/", array("allow", "deny"), array(ADMINS_ALLOW_MODE, ADMINS_DENY_MODE)));\r
297 \r
298         // Load template for adding new ACL\r
299         LOAD_TEMPLATE("admin_admins_add_acl");\r
300 }\r
301 //\r
302 ?>\r