/[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, Sun Feb 17 16:50:46 2008 UTC revision 1.2, Wed Feb 20 20:01:15 2008 UTC
# Line 1  Line 1 
1  <?php  <?php
2  // $Id$  // $Id: membership.module,v 1.1 2008/02/17 16:50:46 boobaa Exp $
3    
4  /**  /**
5   * @file   * @file
# Line 7  Line 7 
7   */   */
8    
9  /**  /**
10   * Display help and module information   * Implementation of hook_help().
  * @param section which section of the site we're displaying help  
  * @return help text for section  
11   */   */
12  function membership_help($section = '') {  function membership_help($path, $arg) {
13    $output = '';    $output = '';
14    switch($section) {    switch($path) {
15    case 'admin/help#membership':    case 'admin/help#membership':
16      $output = '<p>'. t('Provides easy time-limited membership management.') . '</p>';      $output = '<p>'. t('Provides easy time-limited membership management.') . '</p>';
17      break;      break;
# Line 25  function membership_help($section = '') Line 23  function membership_help($section = '')
23   * Implementation of hook_menu()   * Implementation of hook_menu()
24   */   */
25  function membership_menu() {  function membership_menu() {
26    $items[] = array(    $items = array();
27      'path'                                      => 'admin/settings/membership',    $items['admin/settings/membership'] = array(
28      'title'                                     => t('Membership management'),      'title'            => t('Membership management'),
29      'description'                       => t('Configure time-limited membership management.'),      'description'      => t('Configure time-limited membership management.'),
30      'callback'                          => 'drupal_get_form',      'page callback'    => 'drupal_get_form',
31      'callback arguments'        => 'membership_admin_settings',      'page arguments'   => array('membership_admin_settings'),
32      'access'                            => user_access('administer membership'),      'access arguments' => array('administer membership'),
33      'type'                                      => MENU_NORMAL_ITEM,      'type'             => MENU_NORMAL_ITEM,
34    );    );
35    $items[] = array(    $items['admin/user/membership'] = array(
36      'path'                                      => 'admin/user/membership',      'title'            => t('Membership management'),
37      'title'                                     => t('Membership management'),      'description'      => t('Easy time-limited membership management.'),
38      'description'                       => t('Easy time-limited membership management.'),      'page callback'    => 'membership_edit',
39      'callback'                          => 'membership_edit',      'access arguments' => array('access membership'),
40      'access'                            => user_access('access membership'),      'type'             => MENU_NORMAL_ITEM,
     'type'                                      => MENU_NORMAL_ITEM,  
41    );    );
42    return $items;    return $items;
43  }  }
# Line 64  function membership_list_form() { Line 61  function membership_list_form() {
61    $sql .= tablesort_sql($header);    $sql .= tablesort_sql($header);
62    $result = pager_query($sql, $pagelen, 0, NULL);    $result = pager_query($sql, $pagelen, 0, NULL);
63    $form = array();    $form = array();
64    if(db_num_rows($result)) {    while($user = db_fetch_object($result)) {
65      while($user = db_fetch_object($result)) {      $form['name'][$user->uid]       = array('#value' => theme('username', $user));
66        $form['name'][$user->uid] = array('#value' => theme('username', $user));      $form['lastmod'][$user->uid]    = array('#value' => format_date($user->lastmod, 'custom', t('Y-m-d')));
67        $form['lastmod'][$user->uid] = array('#value' => format_date($user->lastmod, 'custom', t('Y-m-d')));      $form['expires'][$user->uid]    = array('#value' => format_date($user->expires, 'custom', t('Y-m-d')));
68        $form['expires'][$user->uid] = array('#value' => format_date($user->expires, 'custom', t('Y-m-d')));      $form['expire_now'][$user->uid] = array('#value' => l(t('Expire now'), 'admin/user/membership/expire/' . $user->uid) . ' - '.
69        $form['expire_now'][$user->uid] = array('#value' => l(t('Expire now'), 'admin/user/membership/expire/' . $user->uid) . ' - '.        l(t('Edit membership'), 'admin/user/membership/edit/' . $user->uid));
70          l(t('Edit membership'), 'admin/user/membership/edit/' . $user->uid));    }
71      }    if($form['name']) {
72      $form['pager'] = array('#value' => theme('pager', NULL, $pagelen, 0));      $form['pager'] = array('#value' => theme('pager', NULL, $pagelen, 0));
73    }    }
74    $form['newmember'] = array(    $form['newmember'] = array(
75      '#type'                     => 'fieldset',      '#type'        => 'fieldset',
76      '#title'            => t('Add a new member'),      '#title'       => t('Add a new member'),
77      '#tree'                     => TRUE,      '#tree'        => TRUE,
78      '#collapsible'      => TRUE,      '#collapsible' => TRUE,
79    );    );
80    $form['newmember']['member'] = array(    $form['newmember']['member'] = array(
81      '#type'             => 'textfield',      '#type'              => 'textfield',
82      '#title'    => t('New member'),      '#title'             => t('New member'),
83      '#autocomplete_path'        => 'user/autocomplete',      '#autocomplete_path' => 'user/autocomplete',
84    );    );
85    $form['newmember']['expires'] = array(    $form['newmember']['expires'] = array(
86      '#type'                             => 'date',      '#type'          => 'date',
87      '#title'                    => t('Expires'),      '#title'         => t('Expires'),
88      '#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"?
89        'year'    => date('Y',strtotime('now') + 60*60*24),        'year'  => date('Y',strtotime('now') + 60*60*24),
90        'month'   => date('n',strtotime('now') + 60*60*24),        'month' => date('n',strtotime('now') + 60*60*24),
91        'day'     => date('j',strtotime('now') + 60*60*24),        'day'   => date('j',strtotime('now') + 60*60*24),
92      ),      ),
93    );    );
94    $form['newmember']['submit'] = array(    $form['newmember']['submit'] = array(
95      '#type' => 'submit',      '#type'   => 'submit',
96      '#value' => t('Submit'),      '#value'  => t('Save'),
97      '#weight'   => 1,      '#weight' => 1,
98    );    );
99    return $form;    return $form;
100  }  }
101    
102  function membership_list_form_validate($form_id, $form_values) {  function membership_list_form_validate($form_id, &$form_state) {
103    if(empty($form_values['newmember']['member'])) {    if(empty($form_state['values']['newmember']['member'])) {
104      form_set_error('newmember][member', t('A username must be given.'));      form_set_error('newmember][member', t('A username must be given.'));
105    }    }
106    else {    else {
107      // FIXME: user_load() wouldn't be better?      // FIXME: user_load() wouldn't be better?
108      $result = db_query("SELECT uid FROM {users} WHERE name = '%s'", $form_values['newmember']['member']);      $user = db_fetch_object(db_query("SELECT uid FROM {users} WHERE name = '%s'", $form_state['values']['newmember']['member']));
109      if(db_num_rows($result) == 0) {      if($user) {
110        form_set_error('newmember][member', t('Nonexistent username.'));        $roles = user_roles(TRUE); // XXX: wouldn't it be faster without TRUE?
111      }        $result = db_fetch_object(db_query("SELECT COUNT(mid) AS mid_cnt FROM {membership} WHERE uid = %d", $user->uid));
     else {  
       $roles = user_roles(TRUE);        // XXX: wouldn't it be faster without TRUE?  
       $row = db_fetch_object($result);  
       $result = db_fetch_object(db_query("SELECT COUNT(mid) AS mid_cnt FROM {membership} WHERE uid = %d", $row->uid));  
112        if($result->mid_cnt > 0) {        if($result->mid_cnt > 0) {
113          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.',
114            array('%role' => $roles[variable_get('membership_role', 0)])));            array('%role' => $roles[variable_get('membership_role', 0)])));
115        }        }
116      }      }
117        else {
118          form_set_error('newmember][member', t('Nonexistent username.'));
119        }
120    }    }
121    $form_time = strtotime($form_values['newmember']['expires']['year'] . '-' . $form_values['newmember']['expires']['month'] . '-'.    $form_time = strtotime($form_state['values']['newmember']['expires']['year'] . '-'.
122      $form_values['newmember']['expires']['day']);      $form_state['values']['newmember']['expires']['month'] . '-' . $form_state['values']['newmember']['expires']['day']);
123    $sys_time = strtotime(date('Y-n-j'));    $sys_time = strtotime(date('Y-n-j'));
124    if($form_time < ($sys_time + 60*60*24)) {    if($form_time < ($sys_time + 60*60*24)) {
125      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.'));
# Line 133  function membership_list_form_validate($ Line 129  function membership_list_form_validate($
129    }    }
130  }  }
131    
132  function membership_list_form_submit($form_id, $form_values) {  function membership_list_form_submit($form_id, &$form_state) {
133    global $user, $base_url;    global $user;
134    $next_mid = db_next_id("{membership_id}");    $role = variable_get('membership_role', 0);
135    $member = user_load(array('name' => $form_values['newmember']['member']));    $member = user_load(array('name' => $form_state['values']['newmember']['member']));
136    $datestamp = mktime(0, 0, 0, $form_values['newmember']['expires']['month'], $form_values['newmember']['expires']['day'],    $datestamp = mktime(0, 0, 0, $form_state['values']['newmember']['expires']['month'], $form_state['values']['newmember']['expires']['day'],
137      $form_values['newmember']['expires']['year']);      $form_state['values']['newmember']['expires']['year']);
138    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} (uid, oid, lastmod, expires) VALUES (%d, %d, %d, %d)', $member->uid, $user->uid, mktime(),
139      mktime(), $datestamp);      $datestamp);
140    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, $role);
141    $roles = user_roles(TRUE);    // XXX: wouldn't it be faster without TRUE?    $roles = user_roles(TRUE); // XXX: wouldn't it be faster without TRUE?
142    $variables = array(    $params['variables'] = array(
143      '!member'   => $form_values['newmember']['member'],      '!member' => $form_state['values']['newmember']['member'],
144      '!role'             => $roles[variable_get('membership_role', 0)],      '!role'   => $roles[$role],
145      '!site'             => variable_get('site_name', t('an unknown site')),      '!expire' => format_date($datestamp, 'custom', t('Y-m-d')),
146      '!url'              => $base_url,      '!owner'  => $user->name,
     '!date'             => format_date($datestamp, 'custom', 'Y-m-d'),  
     '!owner'    => $user->name,  
147    );    );
148    // send a mail to the new member    // send a mail to the new member
149    membership_mail('member_add', $member->mail, t('New membership'), t('Dear !member,    $params['account'] = $member;
150      drupal_mail('membership', 'member_add', $member->mail, user_preferred_language($member), $params);
 you have just been added to the !role role at !site (!url). Your membership expires at !date.  
   
 Sincerely: !owner'), $variables);  
151    // send a mail to the manager (if exists)    // send a mail to the manager (if exists)
152    if(($uid = variable_get('membership_manager', 0)) != 0) {    if(($uid = variable_get('membership_manager', 0)) != 0) {
153      $manager = user_load(array('uid' => $uid));      $manager = user_load(array('uid' => $uid));
154      membership_mail('managed_add', $manager->mail, t('New membership'), t('Dear Power Manager,      $params['account'] = $manager;
155        drupal_mail('membership', 'managed_add', $manager->mail, user_preferred_language($manager), $params);
 !owner has just added !member to the !role role at !site (!url). This new membership expires at !date.'), $variables);  
156    }    }
157  }  }
158    
159    /**
160     * Implementation of hook_theme().
161     */
162    function membership_theme() {
163      return array(
164        'membership_list_form' => array(
165          'arguments' => array('form' => NULL),
166        ),
167      );
168    }
169    
170  function theme_membership_list_form($form) {  function theme_membership_list_form($form) {
171    $header = array(    $header = array(
172      array('data' => t('Username'), 'field' => 'name'),      array('data' => t('Username'), 'field' => 'name'),
# Line 195  function theme_membership_list_form($for Line 196  function theme_membership_list_form($for
196  }  }
197    
198  function membership_expire($uid) {  function membership_expire($uid) {
199    global $user, $base_url;    global $user;
200    $member = user_load(array('uid' => $uid));    $member = user_load(array('uid' => $uid));
201    $roles = user_roles(TRUE);    // XXX: wouldn't it be faster without TRUE?    $role = variable_get('membership_role', 0);
202    $variables = array(    $roles = user_roles(TRUE); // XXX: wouldn't it be faster without TRUE?
203      '!member'   => check_plain($member->name),    $params['variables'] = array(
204      '!role'             => $roles[variable_get('membership_role', 0)],      '!member' => check_plain($member->name),
205      '!site'             => variable_get('site_name', t('an unknown site')),      '!role'   => $roles[$role],
206      '!url'              => $base_url,      '!owner'  => $user->name,
     '!owner'    => $user->name,  
207    );    );
208    // send a mail to the ex-member    // send a mail to the ex-member
209    membership_mail('member_del', $member->mail, t('Deleted membership'), t('Dear !member,    $params['account'] = $member;
210      drupal_mail('membership', 'member_del', $member->mail, user_preferred_language($member), $params);
 you have just been removed from the !role role at !site (!url).  
   
 Sincerely: !owner'), $variables);  
211    // send a mail to the manager (if exists)    // send a mail to the manager (if exists)
212    if(($manager_uid = variable_get('membership_manager', 0)) != 0) {    if(($manager_uid = variable_get('membership_manager', 0)) != 0) {
213      $manager = user_load(array('uid' => $manager_uid));      $manager = user_load(array('uid' => $manager_uid));
214      membership_mail('managed_del', $manager->mail, t('Deleted membership'), t('Dear Power Manager,      $params['account'] = $manager;
215        drupal_mail('membership', 'managed_del', $manager->mail, user_preferred_language($manager), $params);
 !owner has just removed !member from the !role role at !site (!url).'), $variables);  
216    }    }
217    // 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
218    db_query('DELETE FROM {membership} WHERE uid = %d', $uid);    db_query('DELETE FROM {membership} WHERE uid = %d', $uid);
219    db_query('DELETE FROM {users_roles} WHERE uid = %d AND rid = %d', $uid, variable_get('membership_role', 0));    db_query('DELETE FROM {users_roles} WHERE uid = %d AND rid = %d', $uid, $role);
220  }  }
221    
222  function membership_edit_form() {  function membership_edit_form() {
223    $uid = arg(4);    $uid = arg(4);
224    $result = db_query('SELECT expires FROM {membership} WHERE uid = %d', $uid);    $result = db_query('SELECT expires FROM {membership} WHERE uid = %d', $uid);
225    if(db_num_rows($result) <= 0) {    $member = db_fetch_object($result);
226      if(!$member) {
227      drupal_set_message(t('There is no such member.'), 'error');      drupal_set_message(t('There is no such member.'), 'error');
228      drupal_goto('admin/user/membership');      drupal_goto('admin/user/membership');
229    }    }
   $member = db_fetch_object($result);  
230    $user = user_load(array('uid' => $uid));    $user = user_load(array('uid' => $uid));
231    $form = array();    $form = array();
232    $form['expires'] = array(    $form['expires'] = array(
233      '#type'                             => 'date',      '#type'          => 'date',
234      '#title'                    => t('Expire date of !member', array('!member' => theme('username', $user))),      '#title'         => t('Expire date of !member', array('!member' => theme('username', $user))),
235      '#default_value'    => array(      '#default_value' => array(
236        'year'    => date('Y', $member->expires),        'year'  => date('Y', $member->expires),
237        'month'   => date('n', $member->expires),        'month' => date('n', $member->expires),
238        'day'     => date('j', $member->expires),        'day'   => date('j', $member->expires),
239      ),      ),
240        '#required'      => TRUE,
241    );    );
242    $form['submit'] = array(    $form['submit'] = array(
243      '#type' => 'submit',      '#type' => 'submit',
244      '#value' => t('Submit'),      '#value' => t('Save'),
245    );    );
246    return $form;    return $form;
247  }  }
248    
249  function membership_edit_form_validate($form_id, $form_values) {  function membership_edit_form_validate($form_id, &$form_state) {
250    $form_time = strtotime($form_values['expires']['year'] . '-' . $form_values['expires']['month'] . '-' . $form_values['expires']['day']);    $form_time = strtotime($form_state['values']['expires']['year'] . '-' . $form_state['values']['expires']['month'] . '-'.
251        $form_state['values']['expires']['day']);
252    $sys_time = strtotime(date('Y-n-j'));    $sys_time = strtotime(date('Y-n-j'));
253    if($form_time < ($sys_time + 60*60*24)) {    if($form_time < ($sys_time + 60*60*24)) {
254      form_set_error('expires', t('Expires should be in the future.'));      form_set_error('expires', t('Expires should be in the future.'));
255    }    }
256  }  }
257    
258  function membership_edit_form_submit($form_id, $form_values) {  function membership_edit_form_submit($form_id, &$form_state) {
259    global $user, $base_url;    global $user;
260    $datestamp = mktime(0, 0, 0, $form_values['expires']['month'], $form_values['expires']['day'], $form_values['expires']['year']);    $datestamp = mktime(0, 0, 0, $form_state['values']['expires']['month'], $form_state['values']['expires']['day'],
261        $form_state['values']['expires']['year']);
262    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));
263    $member = user_load(array('uid' => arg(4)));    $member = user_load(array('uid' => arg(4)));
264    $roles = user_roles(TRUE);    // XXX: wouldn't it be faster without TRUE?    $roles = user_roles(TRUE); // XXX: wouldn't it be faster without TRUE?
265    $variables = array(    $params['variables'] = array(
266      '!member'   => check_plain($member->name),      '!member' => check_plain($member->name),
267      '!role'             => $roles[variable_get('membership_role', 0)],      '!role'   => $roles[variable_get('membership_role', 0)],
268      '!site'             => variable_get('site_name', t('an unknown site')),      '!expire' => format_date($datestamp, 'custom', t('Y-m-d')),
269      '!url'              => $base_url,      '!owner'  => $user->name,
     '!date'             => format_date($datestamp, 'custom', 'Y-m-d'),  
     '!owner'    => $user->name,  
270    );    );
271    // send a mail to the new member    // send a mail to the new member
272    membership_mail('member_mod', $member->mail, t('Modified membership'), t('Dear !member,    $params['account'] = $member;
273      drupal_mail('membership', 'member_mod', $member->mail, user_preferred_language($member), $params);
 your membership of the !role role has just been modified at !site (!url): it expires at !date.  
   
 Sincerely: !owner'), $variables);  
274    // send a mail to the manager (if exists)    // send a mail to the manager (if exists)
275    if(($uid = variable_get('membership_manager', 0)) != 0) {    if(($uid = variable_get('membership_manager', 0)) != 0) {
276      $manager = user_load(array('uid' => $uid));      $manager = user_load(array('uid' => $uid));
277      membership_mail('managed_mod', $manager->mail, t('Modified membership'), t('Dear Power Manager,      $params['account'] = $manager;
278        drupal_mail('membership', 'managed_mod', $manager->mail, user_preferred_language($manager), $params);
 !owner has just modified the membership of !member regarding to the !role role at !site (!url): it expires at !date.'), $variables);  
279    }    }
280    drupal_goto('admin/user/membership');    $form_state['redirect'] = 'admin/user/membership';
281  }  }
282    
283  function membership_edit() {  function membership_edit() {
# Line 314  function membership_admin_settings() { Line 307  function membership_admin_settings() {
307    $keys = array_keys($roles, 'authenticated user');    $keys = array_keys($roles, 'authenticated user');
308    unset($roles[$keys[0]]);    unset($roles[$keys[0]]);
309    $form['membership_role'] = array(    $form['membership_role'] = array(
310      '#type'                             => 'radios',      '#type'          => 'radios',
311      '#title'                    => t('Membership-managed role') . $foo,      '#title'         => t('Membership-managed role'),
312      '#default_value'    => variable_get('membership_role', 0),      '#default_value' => variable_get('membership_role', 0),
313      '#options'                  => $roles,      '#options'       => $roles,
314      '#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.'),
315    );    );
316    $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)));
317    if($cnt->uid_cnt != 0) {    if($cnt->uid_cnt != 0) {
# Line 327  function membership_admin_settings() { Line 320  function membership_admin_settings() {
320    }    }
321    $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 '.
322      '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');
323    if(db_num_rows($result)) {    $users = array('0' => t('none'));
324      $users = array('0' => t('none'));    $userlist = array();
325      while($account = db_fetch_object($result)) {    while($account = db_fetch_object($result)) {
326        // 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?
327        $users[$account->uid] = check_plain($account->name);      $users[$account->uid] = check_plain($account->name);
328        $userlist[] = $account;      $userlist[] = $account;
329      }    }
330      if($userlist) {
331      $form['membership_manager'] = array(      $form['membership_manager'] = array(
332        '#type'                           => 'select',        '#type'          => 'select',
333        '#title'                  => t('Membership Power Manager'),        '#title'         => t('Membership Power Manager'),
334        '#default_value'  => variable_get('membership_manager', 1),        '#default_value' => variable_get('membership_manager', 1),
335        '#options'                        => $users,        '#options'       => $users,
336        '#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.'),
337      );      );
338    }    }
339    else {    else {
340      $form['membership_manager'] = array(      $form['membership_manager'] = array(
341        '#type'           => 'markup',        '#type'  => 'markup',
342        '#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.',
343        array('%priv' => t('access membership'))) . '<br />',          array('%priv' => t('access membership'))) . '<br />',
344      );      );
345    }    }
346    return system_settings_form($form);    return system_settings_form($form);
347  }  }
348    
349  function membership_mail($id, $recipient, $subject, $message, $variables = NULL) {  /**
350    $from = variable_get('site_mail', ini_get('sendmail_from'));   * Implementation of hook_mail().
351    $headers = array(   */
352      'Reply-to'          => $from,  function membership_mail($key, &$message, $params) {
353      'Return-path'       => "<$from>",    global $base_url;
354      'Errors-to'         => $from,    $language = $message['language'];
355    );    $variables = user_mail_tokens($params['account'], $language);
356    if(is_array($variables)) {    $variables += $params['variables'];
357      $message = strtr($message, $variables);    $variables['!url'] = $base_url;
358      switch($key) {
359      case 'member_del':
360        $message['subject'] = t('Deleted membership', $variables, $language->language);
361        $message['body'] = t("Dear !username,\n\nyou have just been removed from the !role role at !site (!url).\n\nSincerely: !owner",
362          $variables, $language->language);
363        break;
364      case 'managed_del':
365        $message['subject'] = t('Deleted membership', $variables, $language->language);
366        $message['body'] = t("Dear Power Manager,\n\n!owner has just removed !member from the !role role at !site (!url).", $variables,
367          $language->language);
368        break;
369      case 'member_add':
370        $message['subject'] = t('New membership', $variables, $language->language);
371        $message['body'] = t("Dear !username,\n\nyou have just been added to the !role role at !site (!url). Your membership expires at !expire.\n\nSincerely: !owner",
372          $variables, $language->language);
373        break;
374      case 'managed_add':
375        $message['subject'] = t('New membership', $variables, $language->language);
376        $message['body'] = t("Dear Power Manager,\n\n!owner has just added !member to the !role role at !site (!url). This new membership expires at !expire.",
377          $variables, $language->language);
378        break;
379      case 'member_mod':
380        $message['subject'] = t('Modified membership', $variables, $language->language);
381        $message['body'] = t("Dear !username,\n\nyour membership of the !role role has just been modified at !site (!url): it expires at !expire.\n\nSincerely: !owner",
382          $variables, $language->language);
383        break;
384      case 'managed_mod':
385        $message['subject'] = t('Modified membership', $variables, $language->language);
386        $message['body'] = t("Dear Power Manager,\n\n!owner has just modified the membership of !member regarding to the !role role at !site (!url): it expires at !expire.",
387          $variables, $language->language);
388        break;
389      case 'member_exp':
390        $message['subject'] = t('Expired membership', $variables, $language->language);
391        $message['body'] = t("Dear !member,\n\nyou have just been removed from the !role role at !site (!url) because of membership expiration.",
392          $variables, $language->language);
393        break;
394      case 'managed_exp':
395        $message['subject'] = t('Expired membership', $variables, $language->language);
396        $message['body'] = t("Dear Power Manager,\n\n!member has just been removed from the !role role at !site (!url) because of membership expiration.",
397          $variables, $language->language);
398        break;
399    }    }
   drupal_mail('membership_' . $id, trim($recipient), $subject, wordwrap($message, 80), $from, $headers);  
400  }  }
401    
402    /**
403     * Implementation of hook_cron().
404     */
405  function membership_cron() {  function membership_cron() {
406    global $base_url;    $result = db_query('SELECT uid FROM {membership} WHERE expires < %d', mktime());
407    $result = db_query('SELECT mid, uid FROM {membership} WHERE expires < %d', mktime());    $users = array();
408    if(db_num_rows($result)) {    while($row = db_fetch_object($result)) {
409      $roles = user_roles(TRUE);  // XXX: wouldn't it be faster without TRUE?      $users[] = user_load(array('uid' => $row->uid));
410      $membership_role = variable_get('membership_role', 0);    }
411      $variables = array(    if($users) {
412        '!role'           => $roles[$membership_role],      $roles = user_roles(TRUE); // XXX: wouldn't it be faster without TRUE?
413        '!site'           => variable_get('site_name', t('an unknown site')),      $role = variable_get('membership_role', 0);
414        '!url'            => $base_url,      $params['variables']['!role'] = $roles[$role];
     );  
415      if(($manager_uid = variable_get('membership_manager', 0)) != 0) {      if(($manager_uid = variable_get('membership_manager', 0)) != 0) {
416        $manager = user_load(array('uid' => $manager_uid));        $manager = user_load(array('uid' => $manager_uid));
417      }      }
418      while($row = db_fetch_object($result)) {      foreach($users as $user) {
419        // XXX: wouldn't it be faster if we fetch the name & mail with the membership info?        $params['variables']['!member'] = check_plain($user->name);
       $member = user_load(array('uid' => $row->uid));  
       $variables['!member'] = check_plain($member->name);  
420        // send a mail to the ex-member        // send a mail to the ex-member
421        membership_mail('member_exp', $member->mail, t('Expired membership'), t('Dear !member,        drupal_mail('membership', 'member_exp', $user->mail, user_preferred_language($user), $params);
   
 you have just been removed from the !role role at !site (!url) because your membership has expired.'), $variables);  
422        // send a mail to the manager (if exists)        // send a mail to the manager (if exists)
423        if($manager) {        if($manager) {
424          membership_mail('managed_del', $manager->mail, t('Expired membership'), t('Dear Power Manager,          drupal_mail('membership', 'managed_exp', $manager->mail, user_preferred_language($manager), $params);
   
 !member has just been removed from the !role role at !site (!url) because of membership expiration.'), $variables);  
425        }        }
426        // 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
427        db_query('DELETE FROM {membership} WHERE uid = %d', $row->uid);        db_query('DELETE FROM {membership} WHERE uid = %d', $user->uid);
428        db_query('DELETE FROM {users_roles} WHERE uid = %d AND rid = %d', $row->uid, $membership_role);        db_query('DELETE FROM {users_roles} WHERE uid = %d AND rid = %d', $user->uid, $role);
429      }      }
430    }    }
431  }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

  ViewVC Help
Powered by ViewVC 1.1.2