/[drupal]/contributions/modules/membership/membership.module
ViewVC logotype

Diff of /contributions/modules/membership/membership.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.1.2.2, Tue Jun 24 11:41:33 2008 UTC revision 1.1.2.3, Tue Oct 21 07:13:11 2008 UTC
# Line 1  Line 1 
1  <?php  <?php
2  // $Id: membership.module,v 1.1.2.1 2008/05/06 09:00:44 boobaa Exp $  // $Id: membership.module,v 1.1 2008/02/17 16:50:46 boobaa Exp $
3    
4  /**  /**
5   * @file   * @file
# Line 13  Line 13 
13   */   */
14  function membership_help($section = '') {  function membership_help($section = '') {
15    $output = '';    $output = '';
16    switch($section) {    switch ($section) {
17    case 'admin/help#membership':    case 'admin/help#membership':
18      $output = '<p>'. t('Provides easy time-limited membership management.') . '</p>';      $output = '<p>'. t('Provides easy time-limited membership management.') .'</p>';
19      break;      break;
20    }    }
21    return $output;    return $output;
22  }  }
23    
24  /**  /**
25   * Implementation of hook_menu()   * Implementation of hook_menu().
26   */   */
27  function membership_menu() {  function membership_menu() {
28    $items[] = array(    $items[] = array(
29      'path'                                      => 'admin/settings/membership',      'path' => 'admin/settings/membership',
30      'title'                                     => t('Membership management'),      'title' => t('Membership management'),
31      'description'                       => t('Configure time-limited membership management.'),      'description' => t('Configure time-limited membership management.'),
32      'callback'                          => 'drupal_get_form',      'callback' => 'drupal_get_form',
33      'callback arguments'        => 'membership_admin_settings',      'callback arguments' => 'membership_admin_settings',
34      'access'                            => user_access('administer membership'),      'access' => user_access('administer membership'),
35      'type'                                      => MENU_NORMAL_ITEM,      'type' => MENU_NORMAL_ITEM,
36    );    );
37    $items[] = array(    $items[] = array(
38      'path'                                      => 'admin/user/membership',      'path' => 'admin/user/membership',
39      'title'                                     => t('Membership management'),      'title' => t('Membership management'),
40      'description'                       => t('Easy time-limited membership management.'),      'description' => t('Easy time-limited membership management.'),
41      'callback'                          => 'membership_edit',      'callback' => 'membership_edit',
42      'access'                            => user_access('access membership'),      'access' => user_access('access membership'),
43      'type'                                      => MENU_NORMAL_ITEM,      'type' => MENU_NORMAL_ITEM,
44    );    );
45    return $items;    return $items;
46  }  }
47    
48  /**  /**
49   * Implementation of hook_perm()   * Implementation of hook_perm().
50   */   */
51  function membership_perm() {  function membership_perm() {
52    return array('access membership', 'administer membership');    return array('access membership', 'administer membership');
53  }  }
54    
55  function membership_list_form() {  function membership_list_form() {
56      $membership_role = variable_get('membership_role', 0);
57      if ($membership_role == 0) {
58        drupal_set_message(t('The module has not been set up yet; go <a href="%url">set it up</a>.', array('%url' => url('admin/settings/membership'))), 'error');
59        drupal_goto('');
60      }
61    $pagelen = 25;    $pagelen = 25;
62    $header = array(    $header = array(
63      array('data' => t('Username'), 'field' => 'name'),      array('data' => t('Username'), 'field' => 'name'),
# Line 64  function membership_list_form() { Line 69  function membership_list_form() {
69    $sql .= tablesort_sql($header);    $sql .= tablesort_sql($header);
70    $result = pager_query($sql, $pagelen, 0, NULL);    $result = pager_query($sql, $pagelen, 0, NULL);
71    $form = array();    $form = array();
72    if(db_num_rows($result)) {    if (db_num_rows($result)) {
73      while($user = db_fetch_object($result)) {      while ($user = db_fetch_object($result)) {
74        $form['name'][$user->uid] = array('#value' => theme('username', $user));        $form['name'][$user->uid] = array('#value' => theme('username', $user));
75        $form['lastmod'][$user->uid] = array('#value' => format_date($user->lastmod, 'custom', t('Y-m-d')));        $form['lastmod'][$user->uid] = array('#value' => format_date($user->lastmod, 'custom', t('Y-m-d')));
76        $form['expires'][$user->uid] = array('#value' => format_date($user->expires, 'custom', t('Y-m-d')));        $form['expires'][$user->uid] = array('#value' => format_date($user->expires, 'custom', t('Y-m-d')));
77        $form['expire_now'][$user->uid] = array('#value' => l(t('Expire now'), 'admin/user/membership/expire/' . $user->uid) . ' - '.        $form['expire_now'][$user->uid] = array('#value' => l(t('Expire now'), 'admin/user/membership/expire/'. $user->uid) .' - '.
78          l(t('Edit membership'), 'admin/user/membership/edit/' . $user->uid));          l(t('Edit membership'), 'admin/user/membership/edit/'. $user->uid));
79      }      }
80      $form['pager'] = array('#value' => theme('pager', NULL, $pagelen, 0));      $form['pager'] = array('#value' => theme('pager', NULL, $pagelen, 0));
81    }    }
82    $form['newmember'] = array(    $form['newmember'] = array(
83      '#type'                     => 'fieldset',      '#type' => 'fieldset',
84      '#title'            => t('Add a new member'),      '#title' => t('Add a new member'),
85      '#tree'                     => TRUE,      '#tree' => TRUE,
86      '#collapsible'      => TRUE,      '#collapsible' => TRUE,
87    );    );
88    $form['newmember']['member'] = array(    $form['newmember']['member'] = array(
89      '#type'             => 'textfield',      '#type' => 'textfield',
90      '#title'    => t('New member'),      '#title' => t('New member'),
91      '#autocomplete_path'        => 'user/autocomplete',      '#autocomplete_path' => 'user/autocomplete',
92    );    );
93    $form['newmember']['expires'] = array(    $form['newmember']['expires'] = array(
94      '#type'                             => 'date',      '#type' => 'date',
95      '#title'                    => t('Expires'),      '#title' => t('Expires'),
96      '#default_value'    => array(       // XXX: is there any nicer way to set it to "tomorrow"?      '#default_value' => array( // XXX: is there any nicer way to set it to "tomorrow"?
97        'year'    => date('Y',strtotime('now') + 60*60*24),        'year' => date('Y', time() + 60*60*24),
98        'month'   => date('n',strtotime('now') + 60*60*24),        'month' => date('n', time() + 60*60*24),
99        'day'     => date('j',strtotime('now') + 60*60*24),        'day' => date('j', time() + 60*60*24),
100      ),      ),
101    );    );
102    $form['newmember']['submit'] = array(    $form['newmember']['submit'] = array(
103      '#type' => 'submit',      '#type' => 'submit',
104      '#value' => t('Submit'),      '#value' => t('Submit'),
105      '#weight'   => 1,      '#weight' => 1,
106    );    );
107    return $form;    return $form;
108  }  }
109    
110  function membership_list_form_validate($form_id, $form_values) {  function membership_list_form_validate($form_id, $form_values) {
111    if(empty($form_values['newmember']['member'])) {    if (empty($form_values['newmember']['member'])) {
112      form_set_error('newmember][member', t('A username must be given.'));      form_set_error('newmember][member', t('A username must be given.'));
113    }    }
114    else {    else {
115      // FIXME: user_load() wouldn't be better?      // FIXME: user_load() wouldn't be better?
116      $result = db_query("SELECT uid FROM {users} WHERE name = '%s'", $form_values['newmember']['member']);      $result = db_query("SELECT uid FROM {users} WHERE name = '%s'", $form_values['newmember']['member']);
117      if(db_num_rows($result) == 0) {      if (db_num_rows($result) == 0) {
118        form_set_error('newmember][member', t('Nonexistent username.'));        form_set_error('newmember][member', t('Nonexistent username.'));
119      }      }
120      else {      else {
121        $roles = user_roles(TRUE);        // XXX: wouldn't it be faster without TRUE?        $roles = user_roles(TRUE); // XXX: wouldn't it be faster without TRUE?
122        $row = db_fetch_object($result);        $row = db_fetch_object($result);
123        $result = db_fetch_object(db_query("SELECT COUNT(mid) AS mid_cnt FROM {membership} WHERE uid = %d", $row->uid));        $result = db_fetch_object(db_query("SELECT COUNT(mid) AS mid_cnt FROM {membership} WHERE uid = %d", $row->uid));
124        if($result->mid_cnt > 0) {        if ($result->mid_cnt > 0) {
125          form_set_error('newmember][member', t('This user is already a member of the %role role.',          form_set_error('newmember][member', t('This user is already a member of the %role role.',
126            array('%role' => $roles[variable_get('membership_role', 0)])));            array('%role' => $roles[variable_get('membership_role', 0)])));
127        }        }
128      }      }
129    }    }
130    $form_time = strtotime($form_values['newmember']['expires']['year'] . '-' . $form_values['newmember']['expires']['month'] . '-'.    $form_time = strtotime($form_values['newmember']['expires']['year'] .'-'. $form_values['newmember']['expires']['month'] .'-'.
131      $form_values['newmember']['expires']['day']);      $form_values['newmember']['expires']['day']);
132    $sys_time = strtotime(date('Y-n-j'));    if ($form_time < (time() + 60*60*24)) {
   if($form_time < ($sys_time + 60*60*24)) {  
133      form_set_error('newmember][expires][year', t('Expires should be in the future.'));      form_set_error('newmember][expires][year', t('Expires should be in the future.'));
134      // XXX: form_set_error DOES NOT set error on all the children of newmember][expires - so we must use this hack :S      // XXX: form_set_error DOES NOT set error on all the children of newmember][expires - so we must use this hack :S
135      form_set_error('newmember][expires][month', ' ');      form_set_error('newmember][expires][month', ' ');
# Line 142  function membership_list_form_submit($fo Line 146  function membership_list_form_submit($fo
146    db_query('INSERT INTO {membership} (mid, uid, oid, lastmod, expires) VALUES (%d, %d, %d, %d, %d)', $next_mid, $member->uid, $user->uid,    db_query('INSERT INTO {membership} (mid, uid, oid, lastmod, expires) VALUES (%d, %d, %d, %d, %d)', $next_mid, $member->uid, $user->uid,
147      mktime(), $datestamp);      mktime(), $datestamp);
148    db_query('INSERT INTO {users_roles} (uid, rid) VALUES (%d, %d)', $member->uid, variable_get('membership_role', 0));    db_query('INSERT INTO {users_roles} (uid, rid) VALUES (%d, %d)', $member->uid, variable_get('membership_role', 0));
149    $roles = user_roles(TRUE);    // XXX: wouldn't it be faster without TRUE?    $roles = user_roles(TRUE); // XXX: wouldn't it be faster without TRUE?
150    $variables = array(    $variables = array(
151      '!member'   => $form_values['newmember']['member'],      '!member' => $form_values['newmember']['member'],
152      '%member'   => $form_values['newmember']['member'],      '%member' => $form_values['newmember']['member'],
153      '!role'             => $roles[variable_get('membership_role', 0)],      '!role' => $roles[variable_get('membership_role', 0)],
154      '%role'             => $roles[variable_get('membership_role', 0)],      '%role' => $roles[variable_get('membership_role', 0)],
155      '!site'             => variable_get('site_name', t('an unknown site')),      '!site' => variable_get('site_name', t('an unknown site')),
156      '!url'              => $base_url,      '!url' => $base_url,
157      '!date'             => format_date($datestamp, 'custom', 'Y-m-d'),      '!date' => format_date($datestamp, 'custom', 'Y-m-d'),
158      '%date'             => format_date($datestamp, 'custom', 'Y-m-d'),      '%date' => format_date($datestamp, 'custom', 'Y-m-d'),
159      '!owner'    => $user->name,      '!owner' => $user->name,
160      '%owner'    => $user->name,      '%owner' => $user->name,
161    );    );
162    // send a mail to the new member    // send a mail to the new member
163    membership_mail('member_add', $member->mail, t('New membership'), t('Dear !member,    membership_mail('member_add', $member->mail, t('New membership'), t('Dear !member,
164    
165  you have just been added to the !role role at !site (!url). Your membership expires at !date.      you have just been added to the !role role at !site (!url). Your membership expires at !date.
166    
167  Sincerely: !owner'), $variables);      Sincerely: !owner'), $variables);
168    // send a mail to the manager (if exists)    // send a mail to the manager (if exists)
169    if(($uid = variable_get('membership_manager', 0)) != 0) {    if (($uid = variable_get('membership_manager', 0)) != 0) {
170      $manager = user_load(array('uid' => $uid));      $manager = user_load(array('uid' => $uid));
171      membership_mail('managed_add', $manager->mail, t('New membership'), t('Dear Power Manager,      membership_mail('managed_add', $manager->mail, t('New membership'), t('Dear Power Manager,
172    
173  !owner has just added !member to the !role role at !site (!url). This new membership expires at !date.'), $variables);        !owner has just added !member to the !role role at !site (!url). This new membership expires at !date.'), $variables);
174    }    }
175    watchdog('membership', t('%owner added %member to %role, membership expires at %date.', $variables));    watchdog('membership', t('%owner added %member to %role, membership expires at %date.', $variables));
176  }  }
# Line 178  function theme_membership_list_form($for Line 182  function theme_membership_list_form($for
182      array('data' => t('Expires'), 'field' => 'expires'),      array('data' => t('Expires'), 'field' => 'expires'),
183      t('Operations'),      t('Operations'),
184    );    );
185    if(isset($form['name']) && is_array($form['name'])) {    if (isset($form['name']) && is_array($form['name'])) {
186      foreach(element_children($form['name']) as $key) {      foreach (element_children($form['name']) as $key) {
187        $rows[] = array(        $rows[] = array(
188          drupal_render($form['name'][$key]),          drupal_render($form['name'][$key]),
189          drupal_render($form['lastmod'][$key]),          drupal_render($form['lastmod'][$key]),
# Line 192  function theme_membership_list_form($for Line 196  function theme_membership_list_form($for
196      $rows[] = array(array('data' => t('There are no members.'), 'colspan' => '4'));      $rows[] = array(array('data' => t('There are no members.'), 'colspan' => '4'));
197    }    }
198    $output = theme('table', $header, $rows);    $output = theme('table', $header, $rows);
199    if($form['pager']['#value']) {    if ($form['pager']['#value']) {
200      $output .= drupal_render($form['pager']);      $output .= drupal_render($form['pager']);
201    }    }
202    $output .= drupal_render($form);    $output .= drupal_render($form);
# Line 203  function membership_expire($uid) { Line 207  function membership_expire($uid) {
207    global $user, $base_url;    global $user, $base_url;
208    $member = user_load(array('uid' => $uid));    $member = user_load(array('uid' => $uid));
209    // TODO: check whether the user exists and/or has membership info.    // TODO: check whether the user exists and/or has membership info.
210    $roles = user_roles(TRUE);    // XXX: wouldn't it be faster without TRUE?    $roles = user_roles(TRUE); // XXX: wouldn't it be faster without TRUE?
211    $variables = array(    $variables = array(
212      '!member'   => check_plain($member->name),      '!member' => check_plain($member->name),
213      '%member'   => check_plain($member->name),      '%member' => check_plain($member->name),
214      '!role'             => $roles[variable_get('membership_role', 0)],      '!role' => $roles[variable_get('membership_role', 0)],
215      '%role'             => $roles[variable_get('membership_role', 0)],      '%role' => $roles[variable_get('membership_role', 0)],
216      '!site'             => variable_get('site_name', t('an unknown site')),      '!site' => variable_get('site_name', t('an unknown site')),
217      '!url'              => $base_url,      '!url' => $base_url,
218      '!owner'    => $user->name,      '!owner' => $user->name,
219      '%owner'    => $user->name,      '%owner' => $user->name,
220    );    );
221    // send a mail to the ex-member    // send a mail to the ex-member
222    membership_mail('member_del', $member->mail, t('Deleted membership'), t('Dear !member,    membership_mail('member_del', $member->mail, t('Deleted membership'), t('Dear !member,
223    
224  you have just been removed from the !role role at !site (!url).      you have just been removed from the !role role at !site (!url).
225    
226  Sincerely: !owner'), $variables);      Sincerely: !owner'), $variables);
227    // send a mail to the manager (if exists)    // send a mail to the manager (if exists)
228    if(($manager_uid = variable_get('membership_manager', 0)) != 0) {    if (($manager_uid = variable_get('membership_manager', 0)) != 0) {
229      $manager = user_load(array('uid' => $manager_uid));      $manager = user_load(array('uid' => $manager_uid));
230      membership_mail('managed_del', $manager->mail, t('Deleted membership'), t('Dear Power Manager,      membership_mail('managed_del', $manager->mail, t('Deleted membership'), t('Dear Power Manager,
231    
232  !owner has just removed !member from the !role role at !site (!url).'), $variables);        !owner has just removed !member from the !role role at !site (!url).'), $variables);
233    }    }
234    // mail should be sent before delete, as we need some info for it    // mail should be sent before delete, as we need some info for it
235    db_query('DELETE FROM {membership} WHERE uid = %d', $uid);    db_query('DELETE FROM {membership} WHERE uid = %d', $uid);
# Line 236  Sincerely: !owner'), $variables); Line 240  Sincerely: !owner'), $variables);
240  function membership_edit_form() {  function membership_edit_form() {
241    $uid = arg(4);    $uid = arg(4);
242    $result = db_query('SELECT expires FROM {membership} WHERE uid = %d', $uid);    $result = db_query('SELECT expires FROM {membership} WHERE uid = %d', $uid);
243    if(db_num_rows($result) <= 0) {    if (db_num_rows($result) <= 0) {
244      drupal_set_message(t('There is no such member.'), 'error');      drupal_set_message(t('There is no such member.'), 'error');
245      drupal_goto('admin/user/membership');      drupal_goto('admin/user/membership');
246    }    }
# Line 244  function membership_edit_form() { Line 248  function membership_edit_form() {
248    $user = user_load(array('uid' => $uid));    $user = user_load(array('uid' => $uid));
249    $form = array();    $form = array();
250    $form['expires'] = array(    $form['expires'] = array(
251      '#type'                             => 'date',      '#type' => 'date',
252      '#title'                    => t('Expire date of !member', array('!member' => theme('username', $user))),      '#title' => t('Expire date of !member', array('!member' => theme('username', $user))),
253      '#default_value'    => array(      '#default_value' => array(
254        'year'    => date('Y', $member->expires),        'year' => date('Y', $member->expires),
255        'month'   => date('n', $member->expires),        'month' => date('n', $member->expires),
256        'day'     => date('j', $member->expires),        'day' => date('j', $member->expires),
257      ),      ),
258    );    );
259    $form['submit'] = array(    $form['submit'] = array(
# Line 260  function membership_edit_form() { Line 264  function membership_edit_form() {
264  }  }
265    
266  function membership_edit_form_validate($form_id, $form_values) {  function membership_edit_form_validate($form_id, $form_values) {
267    $form_time = strtotime($form_values['expires']['year'] . '-' . $form_values['expires']['month'] . '-' . $form_values['expires']['day']);    $form_time = strtotime($form_values['expires']['year'] .'-'. $form_values['expires']['month'] .'-'. $form_values['expires']['day']);
268    $sys_time = strtotime(date('Y-n-j'));    if ($form_time < (time() + 60*60*24)) {
   if($form_time < ($sys_time + 60*60*24)) {  
269      form_set_error('expires', t('Expires should be in the future.'));      form_set_error('expires', t('Expires should be in the future.'));
270    }    }
271  }  }
# Line 272  function membership_edit_form_submit($fo Line 275  function membership_edit_form_submit($fo
275    $datestamp = mktime(0, 0, 0, $form_values['expires']['month'], $form_values['expires']['day'], $form_values['expires']['year']);    $datestamp = mktime(0, 0, 0, $form_values['expires']['month'], $form_values['expires']['day'], $form_values['expires']['year']);
276    db_query('UPDATE {membership} SET oid = %d, lastmod = %d, expires = %d WHERE uid = %d', $user->uid, mktime(), $datestamp, arg(4));    db_query('UPDATE {membership} SET oid = %d, lastmod = %d, expires = %d WHERE uid = %d', $user->uid, mktime(), $datestamp, arg(4));
277    $member = user_load(array('uid' => arg(4)));    $member = user_load(array('uid' => arg(4)));
278    $roles = user_roles(TRUE);    // XXX: wouldn't it be faster without TRUE?    $roles = user_roles(TRUE); // XXX: wouldn't it be faster without TRUE?
279    $variables = array(    $variables = array(
280      '!member'   => check_plain($member->name),      '!member' => check_plain($member->name),
281      '%member'   => check_plain($member->name),      '%member' => check_plain($member->name),
282      '!role'             => $roles[variable_get('membership_role', 0)],      '!role' => $roles[variable_get('membership_role', 0)],
283      '%role'             => $roles[variable_get('membership_role', 0)],      '%role' => $roles[variable_get('membership_role', 0)],
284      '!site'             => variable_get('site_name', t('an unknown site')),      '!site' => variable_get('site_name', t('an unknown site')),
285      '!url'              => $base_url,      '!url' => $base_url,
286      '!date'             => format_date($datestamp, 'custom', 'Y-m-d'),      '!date' => format_date($datestamp, 'custom', 'Y-m-d'),
287      '%date'             => format_date($datestamp, 'custom', 'Y-m-d'),      '%date' => format_date($datestamp, 'custom', 'Y-m-d'),
288      '!owner'    => $user->name,      '!owner' => $user->name,
289      '%owner'    => $user->name,      '%owner' => $user->name,
290    );    );
291    // send a mail to the new member    // send a mail to the new member
292    membership_mail('member_mod', $member->mail, t('Modified membership'), t('Dear !member,    membership_mail('member_mod', $member->mail, t('Modified membership'), t('Dear !member,
293    
294  your membership of the !role role has just been modified at !site (!url): it expires at !date.      your membership of the !role role has just been modified at !site (!url): it expires at !date.
295    
296  Sincerely: !owner'), $variables);      Sincerely: !owner'), $variables);
297    // send a mail to the manager (if exists)    // send a mail to the manager (if exists)
298    if(($uid = variable_get('membership_manager', 0)) != 0) {    if (($uid = variable_get('membership_manager', 0)) != 0) {
299      $manager = user_load(array('uid' => $uid));      $manager = user_load(array('uid' => $uid));
300      membership_mail('managed_mod', $manager->mail, t('Modified membership'), t('Dear Power Manager,      membership_mail('managed_mod', $manager->mail, t('Modified membership'), t('Dear Power Manager,
301    
302  !owner has just modified the membership of !member regarding to the !role role at !site (!url): it expires at !date.'), $variables);        !owner has just modified the membership of !member regarding to the !role role at !site (!url): it expires at !date.'), $variables);
303    }    }
304    watchdog('membership', t('%owner modified membership of %member in %role, expires at %date.', $variables));    watchdog('membership', t('%owner modified membership of %member in %role, expires at %date.', $variables));
305    drupal_goto('admin/user/membership');    drupal_goto('admin/user/membership');
306  }  }
307    
308  function membership_edit() {  function membership_edit() {
309    if(variable_get('membership_role', 0) == 0) {    if (variable_get('membership_role', 0) == 0) {
310      return t('The module has not been set up yet.');      drupal_set_message(t('The module has not been set up yet; go <a href="@url">set it up</a>.', array('@url' => url('admin/settings/membership'))), 'error');
311        return FALSE;
312    }    }
313    switch(arg(3)) {    switch (arg(3)) {
314    case NULL:    case NULL:
315      $form = drupal_get_form('membership_list_form');      $form = drupal_get_form('membership_list_form');
316      break;      break;
# Line 318  function membership_edit() { Line 322  function membership_edit() {
322      $form = drupal_get_form('membership_edit_form');      $form = drupal_get_form('membership_edit_form');
323      break;      break;
324    default:    default:
325      $form = 'Op: ' . arg(3) . ', uid: ' . arg(4);      $form = 'Op: '. arg(3) .', uid: '. arg(4);
326      break;      break;
327    }    }
328    return $form;    return $form;
# Line 328  function membership_admin_settings() { Line 332  function membership_admin_settings() {
332    $roles = user_roles(TRUE);    $roles = user_roles(TRUE);
333    $keys = array_keys($roles, 'authenticated user');    $keys = array_keys($roles, 'authenticated user');
334    unset($roles[$keys[0]]);    unset($roles[$keys[0]]);
335      if (count($roles) == 0) {
336        drupal_set_message(t('There is no point in using membership module without any non-standard roles, go <a href="@url">create</a> some.', array('@url' => url('admin/user/roles'))), 'error');
337        return FALSE;
338      }
339    $form['membership_role'] = array(    $form['membership_role'] = array(
340      '#type'                             => 'radios',      '#type' => 'radios',
341      '#title'                    => t('Membership-managed role') . $foo,      '#title' => t('Membership-managed role') . $foo,
342      '#default_value'    => variable_get('membership_role', 0),      '#default_value' => variable_get('membership_role', 0),
343      '#options'                  => $roles,      '#options' => $roles,
344      '#description'              => t('Select the role whose members should be managed in a time-limited manner.'),      '#description' => t('Select the role whose members should be managed in a time-limited manner.'),
345    );    );
346    $cnt = db_fetch_object(db_query('SELECT COUNT(uid) AS uid_cnt FROM {users_roles} WHERE rid = %d', variable_get('membership_role', 0)));    $cnt = db_fetch_object(db_query('SELECT COUNT(uid) AS uid_cnt FROM {users_roles} WHERE rid = %d', variable_get('membership_role', 0)));
347    if($cnt->uid_cnt != 0) {    if ($cnt->uid_cnt != 0) {
348      $form['membership_role']['#disabled'] = 'disabled';      $form['membership_role']['#disabled'] = 'disabled';
349      $form['membership_role']['#description'] = t('Membership-managed role cannot be changed as it already has members.');      $form['membership_role']['#description'] = t('Membership-managed role cannot be changed as it already has members.');
350    }    }
351    $result = db_query('SELECT DISTINCT u.uid AS uid, name FROM {permission} AS p INNER JOIN {users_roles} AS ur ON ur.rid = p.rid '.    $result = db_query('SELECT DISTINCT u.uid AS uid, name FROM {permission} AS p INNER JOIN {users_roles} AS ur ON ur.rid = p.rid '.
352      'INNER JOIN {users} AS u ON ur.uid = u.uid WHERE p.perm LIKE "%access membership%" AND status != 0 AND access != 0 ORDER BY name');      'INNER JOIN {users} AS u ON ur.uid = u.uid WHERE p.perm LIKE "%access membership%" AND status != 0 AND access != 0 ORDER BY name');
353    if(db_num_rows($result)) {    if (db_num_rows($result)) {
354      $users = array('0' => t('none'));      $users = array('0' => t('none'));
355      while($account = db_fetch_object($result)) {      while ($account = db_fetch_object($result)) {
356        // XXX: is it the intended way to output usernames into a dropdown select?        // XXX: is it the intended way to output usernames into a dropdown select?
357        $users[$account->uid] = check_plain($account->name);        $users[$account->uid] = check_plain($account->name);
358        $userlist[] = $account;        $userlist[] = $account;
359      }      }
360      $form['membership_manager'] = array(      $form['membership_manager'] = array(
361        '#type'                           => 'select',        '#type' => 'select',
362        '#title'                  => t('Membership Power Manager'),        '#title' => t('Membership Power Manager'),
363        '#default_value'  => variable_get('membership_manager', 1),        '#default_value' => variable_get('membership_manager', 1),
364        '#options'                        => $users,        '#options' => $users,
365        '#description'            => t('Select the Power Manager who will receive emails on every membership change.'),        '#description' => t('Select the Power Manager who will receive emails on every membership change.'),
366      );      );
367    }    }
368    else {    else {
369      $form['membership_manager'] = array(      $form['membership_manager'] = array(
370        '#type'           => 'markup',        '#type' => 'markup',
371        '#value'  => t('Power Manager cannot be specified as there are no roles with %priv privilege.',        '#value' => t('Power Manager cannot be specified as there are no roles with %priv privilege.',
372        array('%priv' => t('access membership'))) . '<br />',        array('%priv' => t('access membership'))) .'<br />',
373      );      );
374    }    }
375    return system_settings_form($form);    return system_settings_form($form);
# Line 370  function membership_admin_settings() { Line 378  function membership_admin_settings() {
378  function membership_mail($id, $recipient, $subject, $message, $variables = NULL) {  function membership_mail($id, $recipient, $subject, $message, $variables = NULL) {
379    $from = variable_get('site_mail', ini_get('sendmail_from'));    $from = variable_get('site_mail', ini_get('sendmail_from'));
380    $headers = array(    $headers = array(
381      'Reply-to'          => $from,      'Reply-to' => $from,
382      'Return-path'       => "<$from>",      'Return-path' => "<$from>",
383      'Errors-to'         => $from,      'Errors-to' => $from,
384    );    );
385    if(is_array($variables)) {    if (is_array($variables)) {
386      $message = strtr($message, $variables);      $message = strtr($message, $variables);
387    }    }
388    drupal_mail('membership_' . $id, trim($recipient), $subject, wordwrap($message, 80), $from, $headers);    drupal_mail('membership_'. $id, trim($recipient), $subject, wordwrap($message, 80), $from, $headers);
389  }  }
390    
391  function membership_cron() {  function membership_cron() {
392    global $base_url;    global $base_url;
393    $result = db_query('SELECT mid, uid FROM {membership} WHERE expires < %d', mktime());    $result = db_query('SELECT mid, uid FROM {membership} WHERE expires < %d', mktime());
394    if(db_num_rows($result)) {    if (db_num_rows($result)) {
395      $roles = user_roles(TRUE);  // XXX: wouldn't it be faster without TRUE?      $roles = user_roles(TRUE); // XXX: wouldn't it be faster without TRUE?
396      $membership_role = variable_get('membership_role', 0);      $membership_role = variable_get('membership_role', 0);
397      $variables = array(      $variables = array(
398        '!role'           => $roles[$membership_role],        '!role' => $roles[$membership_role],
399        '%role'           => $roles[$membership_role],        '%role' => $roles[$membership_role],
400        '!site'           => variable_get('site_name', t('an unknown site')),        '!site' => variable_get('site_name', t('an unknown site')),
401        '!url'            => $base_url,        '!url' => $base_url,
402      );      );
403      if(($manager_uid = variable_get('membership_manager', 0)) != 0) {      if (($manager_uid = variable_get('membership_manager', 0)) != 0) {
404        $manager = user_load(array('uid' => $manager_uid));        $manager = user_load(array('uid' => $manager_uid));
405      }      }
406      while($row = db_fetch_object($result)) {      while ($row = db_fetch_object($result)) {
407        // XXX: wouldn't it be faster if we fetch the name & mail with the membership info?        // XXX: wouldn't it be faster if we fetch the name & mail with the membership info?
408        $member = user_load(array('uid' => $row->uid));        $member = user_load(array('uid' => $row->uid));
409        $variables['!member'] = check_plain($member->name);        $variables['!member'] = check_plain($member->name);
# Line 403  function membership_cron() { Line 411  function membership_cron() {
411        // send a mail to the ex-member        // send a mail to the ex-member
412        membership_mail('member_exp', $member->mail, t('Expired membership'), t('Dear !member,        membership_mail('member_exp', $member->mail, t('Expired membership'), t('Dear !member,
413    
414  you have just been removed from the !role role at !site (!url) because your membership has expired.'), $variables);          you have just been removed from the !role role at !site (!url) because your membership has expired.'), $variables);
415        // send a mail to the manager (if exists)        // send a mail to the manager (if exists)
416        if($manager) {        if ($manager) {
417          membership_mail('managed_del', $manager->mail, t('Expired membership'), t('Dear Power Manager,          membership_mail('managed_del', $manager->mail, t('Expired membership'), t('Dear Power Manager,
418    
419  !member has just been removed from the !role role at !site (!url) because of membership expiration.'), $variables);            !member has just been removed from the !role role at !site (!url) because of membership expiration.'), $variables);
420        }        }
421        // mail should be sent before delete, as we need some info for it        // mail should be sent before delete, as we need some info for it
422        db_query('DELETE FROM {membership} WHERE uid = %d', $row->uid);        db_query('DELETE FROM {membership} WHERE uid = %d', $row->uid);
# Line 447  function membership_views_tables() { Line 455  function membership_views_tables() {
455    return $tables;    return $tables;
456  }  }
457    
458    function membership_form_alter($form_id, &$form) {
459      if ($form_id == 'user_admin_account') {
460        // Remove membership-administered role from admin/user/user form's dropdown.
461        $membership_role = variable_get('membership_role', 0);
462        $add_role = 'add_role-'. $membership_role;
463        $remove_role = 'remove_role-'. $membership_role;
464        foreach ($form['options']['operation']['#options'] as $key => $value) {
465          if (is_array($value)) {
466            foreach ($value as $rkey => $rvalue) {
467              if (($rkey == $add_role) || ($rkey == $remove_role)) {
468                unset($form['options']['operation']['#options'][$key][$rkey]);
469              }
470            }
471          }
472        }
473      }
474      elseif ($form_id == 'user_edit') {
475        // Remove membership-administered role from user/%uid/edit form's dropdown.
476        $membership_role = variable_get('membership_role', 0);
477        if ($membership_role != 0) {
478          unset($form['account']['roles']['#options'][$membership_role]);
479        }
480        // Get rid of the role chooser if there is no role to choose from.
481        if (count($form['account']['roles']['#options']) == 0) {
482          unset($form['account']['roles']);
483        }
484        if (user_access('access membership')) {
485          $form['account']['membership'] = array(
486            '#type' => 'markup',
487            '#value' => t('Should you wish to add this user to the membership-managed role, go to the <a href="@url">list page</a>.', array('@url' => url('admin/user/membership'))),
488          );
489        }
490      }
491      elseif ($form_id == 'user_admin_role') {
492        $membership_role = variable_get('membership_role', 0);
493        if ($membership_role && ($form['rid']['#value'] == $membership_role)) {
494          $form['delete'] = array(
495            '#type' => 'markup',
496            '#value' => t('Deleting the membership-managed role is not allowed.'),
497          );
498        }
499      }
500    }
501    
502  // vim: set ft=php syntax=php expandtab ts=2 sw=2 autoindent smartindent:  // vim: set ft=php syntax=php expandtab ts=2 sw=2 autoindent smartindent:

Legend:
Removed from v.1.1.2.2  
changed lines
  Added in v.1.1.2.3

  ViewVC Help
Powered by ViewVC 1.1.2