JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
remove obsolete type="text/javascript" from script tags
[wfpl-cms.git] / admin_admins.php
1 <?php
2
3 # Reset password from the commandline: echo -E "update admins set password="$(echo '<?php print(sha1("NEW_PASSWORD"));' | php)" where username='USERNAME';" | mysql DB_NAME_HERE
4
5 define('ADMIN_ADMINS_DB_FIELDS', 'name,username,password,privs');
6
7
8 require_once(INC_WFPL . 'format.php');
9 require_once(INC_WFPL . 'email.php');
10
11 function admin_admins_get_fields() {
12         $data = array();
13
14         $data['name'] = format_oneline(_REQUEST_cut('name'));
15         $data['username'] = format_oneline(_REQUEST_cut('username'));
16         $data['password'] = format_oneline(_REQUEST_cut('password'));
17         if($data['password'] && strlen($data['password']) != 40) {
18                 $data['password'] = sha1($data['password']);
19         }
20         $data['privs'] = format_options(_REQUEST_cut('privs'), 'privs');
21
22         return $data;
23 }
24
25
26 function admin_admins_main() {
27         if(logged_in_as_admin()) {
28                 tem_set('admin_privs');
29         } else {
30                 $_REQUEST['url'] = this_url();
31                 return 'admin_login';
32         }
33
34         $id = _REQUEST_cut('edit_id');
35         if($id) {
36                 return admin_admins_main_form($id);
37         }
38
39         $id = _REQUEST_cut('admin_admins_delete_id');
40         if($id) {
41                 return admin_admins_main_delete($id);
42         }
43
44         if(_REQUEST_cut('new')) {
45                 return admin_admins_main_form();
46         }
47
48         if(_REQUEST_cut('list')) {
49                 return admin_admins_main_listing();
50         }
51
52         if(isset($_POST['username'])) {
53                 return admin_admins_main_form();
54         }
55
56         # default action:
57         return admin_admins_main_listing();
58 }
59
60 function admin_admins_main_delete($id) {
61         db_delete('admins', 'where id=%i', $id);
62         message('Account deleted.');
63         return './admin_admins';
64 }
65
66 function admin_admins_main_listing() {
67         $listing_rows = db_get_assocs('admins', 'id,name,username,privs', 'order by coalesce(nullif("",name),username)');
68         tem_set('listings', $listing_rows);
69 }
70
71 function admin_admins_main_form($id = false) {
72         pulldown('privs', array(
73                 array('', 'None'),
74                 array('admin', 'Admin')
75         ));
76
77         if($id) {
78                 # add hidden field for database id of row we're editing
79                 tem_set('id', $id);
80                 tem_set('editing');
81                 tem_set('edit_msg');
82         } else {
83                 tem_set('new_msg');
84         }
85
86         if(isset($_POST['username'])) {
87                 $data = admin_admins_get_fields();
88
89                 if($data['username']) {
90                         if($id) {
91                                 db_update_assoc('admins', $data, 'where id=%i', $id);
92                                 message('Account updated.');
93                         } else {
94                                 db_insert_assoc('admins', $data);
95                                 message('Account saved.');
96                         }
97                         if($error !== true) {
98                                 return './admin_admins';
99                         }
100                 } else {
101                         message('"username" is required. To disable an account without deleting it, make the password blank');
102                 }
103         } elseif($id) {
104                 # we've recieved an edit id, but no data. So we grab the values to be edited from the database
105                 $data = db_get_assoc('admins', ADMIN_ADMINS_DB_FIELDS, 'where id=%i', $id);
106         } else {
107                 # form not submitted, you can set default values:
108                 $data = array(
109                         'password' => session_generate_key() # [a-zA-Z0-9]{16}
110                 );
111         }
112
113         tem_set('form', $data);
114 }