[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/modules/project_issue/includes/ -> subscribe.inc (source)

   1  <?php
   2  // $Id: subscribe.inc,v 1.1 2009/06/18 03:24:59 dww Exp $
   3  
   4  function project_issue_subscribe($form_state, $project_nid = 0) {
   5    global $user;
   6  
   7    if (!valid_email_address($user->mail)) {
   8      drupal_set_message(t('You need to provide a valid e-mail address to subscribe to issue e-mails. Please edit your user information.'), 'error');
   9      drupal_goto('user/'. $user->uid .'/edit');
  10    }
  11  
  12    $levels = array(0 => t('None'), 1 => t('Own issues'), 2 => t('All issues'));
  13  
  14    if ($project_nid) {
  15      if (!is_numeric($project_nid)) {
  16        $project_nid = db_result(db_query(db_rewrite_sql("SELECT p.nid FROM {project_projects} p WHERE p.uri = '%s'", 'p'), $project_nid));
  17      }
  18      if (!$project_nid) {
  19        return drupal_not_found();
  20      }
  21  
  22      $project = node_load($project_nid);
  23      project_project_set_breadcrumb($project, TRUE);
  24  
  25      $level = db_result(db_query('SELECT level FROM {project_subscriptions} WHERE nid = %d AND uid = %d', $project->nid, $user->uid));
  26      $form['single'] = array(
  27        '#type' => 'value',
  28        '#value' => $project->nid,
  29      );
  30      $form['#project'] = array(
  31        '#type' => 'value',
  32        '#value' => $project,
  33      );
  34      $form['subscribe'] = array(
  35        '#type' => 'markup',
  36        '#value' => '<p>'. t('Subscribe to receive e-mail notification when an issue for this project is updated.') .'</p>',
  37      );
  38      $form['options']['#tree'] = TRUE;
  39      $form['options'][$project->nid] = array(
  40        '#type' => 'radios',
  41        '#title' => t('Subscribe to @project issues', array('@project' => $project->title)),
  42        '#default_value' => isset($level) ? $level : 0,
  43        '#options' => $levels,
  44      );
  45  
  46    }
  47    else {
  48  
  49      $form['buttons']['all'] = array(
  50        '#type' => 'markup',
  51        '#value' => t('All projects'),
  52      );
  53      foreach ($levels as $key => $level) {
  54        $form['buttons'][$level] = array(
  55          '#type' => 'submit',
  56          '#name' => 'all',
  57          '#value' => $level,
  58        );
  59      }
  60      $nids = array();
  61  
  62      $result = db_query(db_rewrite_sql("SELECT s.nid, n.title, s.level, p.uri FROM {project_subscriptions} s INNER JOIN {node} n ON n.nid = s.nid INNER JOIN {project_projects} p ON n.nid = p.nid WHERE n.type = 'project_project' AND n.status = 1 AND s.uid = %d ORDER BY n.title", 's'), $user->uid);
  63      while ($project = db_fetch_object($result)) {
  64        $form['project'][$project->nid]['title'] = array(
  65          '#value' => l($project->title, "node/$project->nid"),
  66        );
  67        foreach ($levels as $key => $level) {
  68          if ($project->level == $key) {
  69            $status[$project->nid] = $key;
  70          }
  71        }
  72        $nids[] = $project->nid;
  73      }
  74  
  75      if (empty($nids)) {
  76        $placeholders = '';
  77      }
  78      else {
  79        $placeholders = " AND n.nid NOT IN (". implode(',', array_fill(0, count($nids), '%d')) .")";
  80      }
  81  
  82      $result = db_query(db_rewrite_sql("SELECT n.nid, n.title, p.uri FROM {node} n INNER JOIN {project_projects} p ON n.nid = p.nid WHERE n.type = 'project_project' AND n.status = 1". ($nids ?  $placeholders : "") ." ORDER BY n.title"), $nids);
  83      while ($project = db_fetch_object($result)) {
  84        $form['project'][$project->nid]['title'] = array(
  85          '#value' => l($project->title, "node/$project->nid"),
  86        );
  87        $nids[] = $project->nid;
  88      }
  89  
  90      foreach ($nids as $nid) {
  91        $form['options']['#tree'] = TRUE;
  92        $form['options'][$nid] = array(
  93          '#type' => 'radios',
  94          '#default_value' => isset($status[$nid]) ? $status[$nid] : 0,
  95          '#options' => $levels,
  96        );
  97      }
  98    }
  99    $form['submit'] = array(
 100      '#type' => 'submit',
 101      '#value' => t('Subscribe'),
 102    );
 103    return $form;
 104  }
 105  
 106  function theme_project_issue_subscribe($form) {
 107    global $user;
 108  
 109    $output = '';
 110  
 111    if (!isset($form['single'])) {
 112      $levels = array(0 => t('None'), 1 => t('Own issues'), 2 => t('All issues'));
 113      $headers = array_merge(array(t('Project')), $levels);
 114  
 115      $row = array();
 116      foreach (element_children($form['buttons']) as $key) {
 117        $row[] = drupal_render($form['buttons'][$key]);
 118      }
 119      $rows = array($row);
 120  
 121      foreach (element_children($form['project']) as $key) {
 122        $row = array(drupal_render($form['project'][$key]['title']));
 123        foreach ($levels as $level => $name) {
 124          $row[] = drupal_render($form['options'][$key][$level]);
 125        }
 126        $rows[] = $row;
 127      }
 128      $output = theme('table', $headers, $rows);
 129    }
 130  
 131    $output .= drupal_render($form);
 132    return $output;
 133  }
 134  
 135  function project_issue_subscribe_submit($form, &$form_state) {
 136  
 137    global $user;
 138    $all = $form_state['clicked_button']['#value'];
 139  
 140    $levels = array(0 => t('None'), 1 => t('Own issues'), 2 => t('All issues'));
 141  
 142      // Remove previous subscriptions for user.
 143      if (isset($form_state['values']['single'])) {
 144        db_query('DELETE FROM {project_subscriptions} WHERE nid = %d AND uid = %d', $form_state['values']['single'], $user->uid);
 145      }
 146      else {
 147        db_query('DELETE FROM {project_subscriptions} WHERE uid = %d', $user->uid);
 148      }
 149  
 150      $_level = array_search($all, $levels);
 151  
 152      foreach ($form_state['values']['options'] as $nid => $level) {
 153        if ($_level !== 0 && $level !== 0) {
 154          db_query('INSERT INTO {project_subscriptions} (nid, uid, level) VALUES (%d, %d, %d)', $nid, $user->uid, $_level ? $_level : $level);
 155        }
 156      }
 157      drupal_set_message(t('Subscription settings saved.'));
 158  
 159      if (isset($form['single'])) {
 160        $form_state['redirect'] = 'project/issues/subscribe-mail/'. $form['#project']['#value']->project['uri'];
 161      }
 162      else {
 163        $form_state['redirect'] = 'project/issues/subscribe-mail';
 164      }
 165  }


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7