Quick Search:

View

Revision:

Diff

Diff from 1200 to:

Annotations

Annotate by Age | Author | Mixed | None
/fisheye/browse/osCommerce/branches/hpdl/oscommerce/admin/includes/applications/administrators/classes/administrators.php

Annotated File View

hpdl
1200
1 <?php
2 /*
3   $Id: $
4
5   osCommerce, Open Source E-Commerce Solutions
6   http://www.oscommerce.com
7
8   Copyright (c) 2006 osCommerce
9
10   Released under the GNU General Public License
11 */
12
13   define('OSC_ADMINISTRATORS_ACCESS_MODE_ADD', 'add');
14   define('OSC_ADMINISTRATORS_ACCESS_MODE_SET', 'set');
15   define('OSC_ADMINISTRATORS_ACCESS_MODE_REMOVE', 'remove');
16
17   class osC_Administrators_Admin {
18     function getData($id) {
19       global $osC_Database;
20
21       $Qadmin = $osC_Database->query('select id, user_name from :table_administrators where id = :id');
22       $Qadmin->bindTable(':table_administrators', TABLE_ADMINISTRATORS);
23       $Qadmin->bindInt(':id', $id);
24       $Qadmin->execute();
25
26       $modules = array( 'access_modules' => array() );
27
28       $Qaccess = $osC_Database->query('select module from :table_administrators_access where administrators_id = :administrators_id');
29       $Qaccess->bindTable(':table_administrators_access', TABLE_ADMINISTRATORS_ACCESS);
30       $Qaccess->bindInt(':administrators_id', $id);
31       $Qaccess->execute();
32
33       while ( $Qaccess->next() ) {
34         $modules['access_modules'][] = $Qaccess->value('module');
35       }
36
37       $data = array_merge($Qadmin->toArray(), $modules);
38
39       unset($modules);
40       $Qaccess->freeResult();
41       $Qadmin->freeResult();
42
43       return $data;
44     }
45
46     function save($id = null, $data, $modules = null) {
47       global $osC_Database;
48
49       $error = false;
50
51       $Qcheck = $osC_Database->query('select id from :table_administrators where user_name = :user_name');
52
53       if ( is_numeric($id) ) {
54         $Qcheck->appendQuery('and id != :id');
55         $Qcheck->bindInt(':id', $id);
56       }
57
58       $Qcheck->appendQuery('limit 1');
59       $Qcheck->bindTable(':table_administrators', TABLE_ADMINISTRATORS);
60       $Qcheck->bindValue(':user_name', $data['username']);
61       $Qcheck->execute();
62
63       if ($Qcheck->numberOfRows() < 1) {
64         $osC_Database->startTransaction();
65
66         if ( is_numeric($id) ) {
67           $Qadmin = $osC_Database->query('update :table_administrators set user_name = :user_name');
68
69           if ( isset($data['password']) && !empty($data['password']) ) {
70             $Qadmin->appendQuery('and user_password = :user_password');
71             $Qadmin->bindValue(':user_password', osc_encrypt_string(trim($data['password'])));
72           }
73
74           $Qadmin->appendQuery('where id = :id');
75           $Qadmin->bindInt(':id', $id);
76         } else {
77           $Qadmin = $osC_Database->query('insert into :table_administrators (user_name, user_password) values (:user_name, :user_password)');
78           $Qadmin->bindValue(':user_password', osc_encrypt_string(trim($data['password'])));
79         }
80
81         $Qadmin->bindTable(':table_administrators', TABLE_ADMINISTRATORS);
82         $Qadmin->bindValue(':user_name', $data['username']);
83         $Qadmin->execute();
84
85         if ( !$osC_Database->isError() ) {
86           if ( !is_numeric($id) ) {
87             $id = $osC_Database->nextID();
88           }
89         } else {
90           $error = true;
91         }
92
93         if ( $error === false ) {
94           if ( !empty($modules) ) {
95             if ( in_array('*', $modules) ) {
96               $modules = array('*');
97             }
98
99             foreach ($modules as $module) {
100               $Qcheck = $osC_Database->query('select administrators_id from :table_administrators_access where administrators_id = :administrators_id and module = :module limit 1');
101               $Qcheck->bindTable(':table_administrators_access', TABLE_ADMINISTRATORS_ACCESS);
102               $Qcheck->bindInt(':administrators_id', $id);
103               $Qcheck->bindValue(':module', $module);
104               $Qcheck->execute();
105
106               if ( $Qcheck->numberOfRows() < 1 ) {
107                 $Qinsert = $osC_Database->query('insert into :table_administrators_access (administrators_id, module) values (:administrators_id, :module)');
108                 $Qinsert->bindTable(':table_administrators_access', TABLE_ADMINISTRATORS_ACCESS);
109                 $Qinsert->bindInt(':administrators_id', $id);
110                 $Qinsert->bindValue(':module', $module);
111                 $Qinsert->execute();
112
113                 if ( $osC_Database->isError() ) {
114                   $error = true;
115                   break;
116                 }
117               }
118             }
119           }
120         }
121
122         if ( $error === false ) {
123           $Qdel = $osC_Database->query('delete from :table_administrators_access where administrators_id = :administrators_id');
124
125           if ( !empty($modules) ) {
126             $Qdel->appendQuery('and module not in (":module")');
127             $Qdel->bindRaw(':module', implode('", "', $modules));
128           }
129
130           $Qdel->bindTable(':table_administrators_access', TABLE_ADMINISTRATORS_ACCESS);
131           $Qdel->bindInt(':administrators_id', $id);
132           $Qdel->execute();
133
134           if ( $osC_Database->isError() ) {
135             $error = true;
136           }
137         }
138
139         if ( $error === false ) {
140           $osC_Database->commitTransaction();
141
142           return true;
143         } else {
144           $osC_Database->rollbackTransaction();
145
146           return false;
147         }
148       } else {
149         return -1;
150       }
151     }
152
153     function delete($id) {
154       global $osC_Database;
155
156       $osC_Database->startTransaction();
157
158       $Qdel = $osC_Database->query('delete from :table_administrators_access where administrators_id = :administrators_id');
159       $Qdel->bindTable(':table_administrators_access', TABLE_ADMINISTRATORS_ACCESS);
160       $Qdel->bindInt(':administrators_id', $id);
161       $Qdel->execute();
162
163       if ( !$osC_Database->isError() ) {
164         $Qdel = $osC_Database->query('delete from :table_administrators where id = :id');
165         $Qdel->bindTable(':table_administrators', TABLE_ADMINISTRATORS);
166         $Qdel->bindInt(':id', $id);
167         $Qdel->execute();
168
169         if ( !$osC_Database->isError() ) {
170           $osC_Database->commitTransaction();
171
172           return true;
173         }
174       }
175
176       $osC_Database->rollbackTransaction();
177
178       return false;
179     }
180
181     function setAccessLevels($id, $modules, $mode = OSC_ADMINISTRATORS_ACCESS_MODE_ADD) {
182       global $osC_Database;
183
184       $error = false;
185
186       if ( in_array('*', $modules) ) {
187         $modules = array('*');
188       }
189
190       $osC_Database->startTransaction();
191
192       if ( ($mode == OSC_ADMINISTRATORS_ACCESS_MODE_ADD) || ($mode == OSC_ADMINISTRATORS_ACCESS_MODE_SET) ) {
193         foreach ($modules as $module) {
194           $execute = true;
195
196           if ( $module != '*' ) {
197             $Qcheck = $osC_Database->query('select administrators_id from :table_administrators_access where administrators_id = :administrators_id and module = :module limit 1');
198             $Qcheck->bindTable(':table_administrators_access', TABLE_ADMINISTRATORS_ACCESS);
199             $Qcheck->bindInt(':administrators_id', $id);
200             $Qcheck->bindValue(':module', '*');
201             $Qcheck->execute();
202
203             if ( $Qcheck->numberOfRows() === 1 ) {
204               $execute = false;
205             }
206           }
207
208           if ( $execute === true ) {
209             $Qcheck = $osC_Database->query('select administrators_id from :table_administrators_access where administrators_id = :administrators_id and module = :module limit 1');
210             $Qcheck->bindTable(':table_administrators_access', TABLE_ADMINISTRATORS_ACCESS);
211             $Qcheck->bindInt(':administrators_id', $id);
212             $Qcheck->bindValue(':module', $module);
213             $Qcheck->execute();
214
215             if ( $Qcheck->numberOfRows() < 1 ) {
216               $Qinsert = $osC_Database->query('insert into :table_administrators_access (administrators_id, module) values (:administrators_id, :module)');
217               $Qinsert->bindTable(':table_administrators_access', TABLE_ADMINISTRATORS_ACCESS);
218               $Qinsert->bindInt(':administrators_id', $id);
219               $Qinsert->bindValue(':module', $module);
220               $Qinsert->execute();
221
222               if ( $osC_Database->isError() ) {
223                 $error = true;
224                 break;
225               }
226             }
227           }
228         }
229       }
230
231       if ( $error === false ) {
232         if ( ($mode == OSC_ADMINISTRATORS_ACCESS_MODE_REMOVE) || ($mode == OSC_ADMINISTRATORS_ACCESS_MODE_SET) || in_array('*', $modules) ) {
233           if ( !empty($modules) ) {
234             $Qdel = $osC_Database->query('delete from :table_administrators_access where administrators_id = :administrators_id');
235
236             if ( $mode == OSC_ADMINISTRATORS_ACCESS_MODE_REMOVE ) {
237               if ( !in_array('*', $modules) ) {
238                 $Qdel->appendQuery('and module in (":module")');
239                 $Qdel->bindRaw(':module', implode('", "', $modules));
240               }
241             } else {
242               $Qdel->appendQuery('and module not in (":module")');
243               $Qdel->bindRaw(':module', implode('", "', $modules));
244             }
245
246             $Qdel->bindTable(':table_administrators_access', TABLE_ADMINISTRATORS_ACCESS);
247             $Qdel->bindInt(':administrators_id', $id);
248             $Qdel->execute();
249
250             if ( $osC_Database->isError() ) {
251               $error = true;
252               break;
253             }
254           }
255         }
256       }
257
258       if ( $error === false ) {
259         $osC_Database->commitTransaction();
260
261         return true;
262       }
263
264       $osC_Database->rollbackTransaction();
265
266       return false;
267     }
268   }
269 ?>