? storm--332555-23.patch
? storm--332555-23b.patch
? storm--918758-5.patch
? storm--918758-9.patch
? stormproject_token_support.3_0.patch
Index: stormperson/stormperson.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/storm/stormperson/stormperson.module,v
retrieving revision 1.7.4.31
diff -u -p -r1.7.4.31 stormperson.module
--- stormperson/stormperson.module	9 Sep 2010 22:16:37 -0000	1.7.4.31
+++ stormperson/stormperson.module	8 Jan 2011 15:20:14 -0000
@@ -20,18 +20,13 @@ function stormperson_help($path, $arg) {
 function stormperson_init() {
   if (function_exists('drupal_set_content')) {
     global $user;
-    if ($user->uid && !$user->stormorganization_nid || !$user->stormperson_nid) {
-      $r = db_query("SELECT nid, organization_nid FROM {stormperson} WHERE user_uid=%d", $user->uid);
-      if ($r) {
-        $a = db_fetch_object($r);
-        $user->stormperson_nid = $a->nid;
-        $user->stormorganization_nid = $a->organization_nid;
-      }
+    if ($user->uid && !isset($user->stormorganization_nid) || !isset($user->stormperson_nid)) {
+      _stormperson_user_load($user);
     }
-    if (!$user->uid || !$user->stormperson_nid) {
+    if (!$user->uid || !isset($user->stormperson_nid)) {
       $user->stormperson_nid = -1;
     }
-    if (!$user->uid || !$user->stormorganization_nid) {
+    if (!$user->uid || !isset($user->stormorganization_nid)) {
       $user->stormorganization_nid = -1;
     }
   }
@@ -279,7 +274,7 @@ function stormperson_form(&$node) {
       $node->organization_nid = $_GET['organization_nid'];
     }
 
-    if ($_SESSION['stormperson_list_filter']['organization_nid'] && !$node->organization_nid) {
+    if (isset($_SESSION['stormperson_list_filter']['organization_nid']) && !$node->organization_nid) {
       $node->organization_nid = $_SESSION['stormperson_list_filter']['organization_nid'];
     }
   }
@@ -301,7 +296,7 @@ function stormperson_form(&$node) {
   $organizations = array();
   while ($organization = db_fetch_object($r)) {
     $organizations[$organization->nid] = $organization->title;
-    if (!$node->organization_nid) $node->organization_nid = $organization->nid;
+    if (!isset($node->organization_nid)) $node->organization_nid = $organization->nid;
   }
   $form['group1']['organization_nid'] = array(
     '#type' => 'select',
@@ -324,7 +319,7 @@ function stormperson_form(&$node) {
   $form['group1']['user_name'] = array(
     '#type' => 'textfield',
     '#title' => t('User'),
-    '#default_value' => $node->user_name,
+    '#default_value' => isset($node->user_name) ? $node->user_name : '',
     '#autocomplete_path' => 'user/autocomplete',
     '#size' => 40,
   );
@@ -339,14 +334,14 @@ function stormperson_form(&$node) {
     '#type' => 'textfield',
     '#title' => t('Prefix'),
     '#size' => 20,
-    '#default_value' => $node->prefix,
+    '#default_value' => isset($node->prefix) ? $node->prefix : '',
   );
 
   $form['group2']['fullname'] = array(
     '#type' => 'textfield',
     '#title' => t('Fullname'),
     '#size' => 40,
-    '#default_value' => $node->fullname,
+    '#default_value' => isset($node->fullname) ? $node->fullname : '',
   );
 
   $form['group3'] = array(
@@ -359,14 +354,14 @@ function stormperson_form(&$node) {
     '#type' => 'textfield',
     '#title' => t('Email'),
     '#size' => 30,
-    '#default_value' => $node->email,
+    '#default_value' => isset($node->email) ? $node->email : '',
   );
 
   $form['group3']['www'] = array(
     '#type' => 'textfield',
     '#title' => t('WWW'),
     '#size' => 30,
-    '#default_value' => $node->www,
+    '#default_value' => isset($node->www) ? $node->www : '',
   );
 
   $form['group4'] = array(
@@ -379,14 +374,14 @@ function stormperson_form(&$node) {
     '#type' => 'textfield',
     '#title' => t('Phone'),
     '#size' => 30,
-    '#default_value' => $node->phone,
+    '#default_value' => isset($node->phone) ? $node->phone : '',
   );
 
   $form['group4']['im'] = array(
     '#type' => 'textfield',
     '#title' => t('IM'),
     '#size' => 30,
-    '#default_value' => $node->im,
+    '#default_value' => isset($node->im) ? $node->im : '',
   );
 
   if ($type->has_body) {
@@ -395,7 +390,7 @@ function stormperson_form(&$node) {
 
   $form['title_old'] = array(
     '#type' => 'hidden',
-    '#default_value' => $node->title_old,
+    '#default_value' => isset($node->title_old) ? $node->title_old : NULL,
   );
 
   return $form;
@@ -520,9 +515,8 @@ function stormperson_user($type, &$edit,
 }
 
 function _stormperson_user_load(&$account) {
-  $r = db_query("SELECT nid, organization_nid FROM {stormperson} WHERE user_uid=%d", $account->uid);
-  if ($r) {
-    $a = db_fetch_object($r);
+  $a = db_fetch_object(db_query("SELECT nid, organization_nid FROM {stormperson} WHERE user_uid=%d", $account->uid));
+  if ($a) {
     $account->stormperson_nid = $a->nid;
     $account->stormorganization_nid = $a->organization_nid;
   }
@@ -538,3 +532,22 @@ function stormperson_views_api() {
     'path' => drupal_get_path('module', 'stormperson'),
   );
 }
+
+/**
+ * @function
+ * A helper function to return the email address of a stormperson
+ */
+function stormperson_primary_email($node) {
+  if ($node->type !== 'stormperson') {
+    return NULL;
+  }
+  // If there is a Drupal user account use that email
+  if ($node->user_uid) {
+    $stormperson_person = user_load($node->user_uid);
+    return $stormperson_person->mail;
+  }
+  // Else use the stormperson email
+  elseif ($node->email) {
+    return $node->email;
+  }
+}
Index: stormperson/stormperson.test
===================================================================
RCS file: stormperson/stormperson.test
diff -N stormperson/stormperson.test
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ stormperson/stormperson.test	8 Jan 2011 15:20:14 -0000
@@ -0,0 +1,33 @@
+<?php
+class StormpersonTestCase extends DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Storm Person functionality',
+      'description' => 'Test the functionality of the Storm 
+Person module',
+      'group' => 'Storm',
+    );
+  }
+
+  public function setUp() {
+    parent::setUp('storm', 'stormattribute', 'stormorganization', 'stormperson');
+    $privileged_user = $this->drupalCreateUser(array('Storm organization: add', 'Storm organization: view all', 'Storm person: add'));
+    $this->drupalLogin($privileged_user);
+  }
+
+  public function testStormpersonCreate() {
+    $org = array(
+      'title' => $this->randomName(32),
+      'body' => $this->randomName(64),
+    );
+    $person = array(
+      'title' => $this->randomName(32),
+      'body' => $this->randomName(64),
+    );
+
+    $this->drupalPost('node/add/stormorganization', $org, t('Save'));
+    $this->drupalPost('node/add/stormperson', $person, t('Save'));
+    $this->assertText(t('Person @title has been created.', array('@title' => $person['title'])));
+  }
+}
Index: stormproject/stormproject.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/storm/stormproject/stormproject.module,v
retrieving revision 1.8.4.64
diff -u -p -r1.8.4.64 stormproject.module
--- stormproject/stormproject.module	11 Oct 2010 15:40:14 -0000	1.8.4.64
+++ stormproject/stormproject.module	8 Jan 2011 15:20:14 -0000
@@ -810,3 +810,75 @@ function stormproject_storminvoice_auto_
   
   return $invoice_nid;
 }
+
+/**
+*  Implementation of hook_token_list().
+*/
+function stormproject_token_list($type='all') {
+  $tokens = array();
+  if (($type == 'node') || ($type == 'all')) {
+    $tokens['node']['stormproject-projectstatus'] = t('Storm Project: Project Status.');
+    if (module_exists('stormperson')) {
+      // Project Manager
+      $tokens['node']['stormproject-manager-title'] = t('Storm Project: Project Manager Title.');
+      $tokens['node']['stormproject-manager-uid'] = t('Storm Project: Project Manager User ID.');
+      $tokens['node']['stormproject-manager-name'] = t('Storm Project: Project Manager Name.');
+      $tokens['node']['stormproject-manager-fullname'] = t('Storm Project: Project Manager Full Name.');
+      $tokens['node']['stormproject-manager-email'] = t('Storm Project: Project Manager Email Address.');
+      // Assignee(s)
+      $tokens['node']['stormproject-assigned-to-email'] = t('Storm Project: Project Assignee(s) Email Address(s).');
+      $tokens['node']['stormproject-assigned-title'] = t('Storm Project: Project Assignee(s) Title(s).');
+    }
+  }
+  return $tokens;
+}
+
+/**
+*  Implementation of hook_token_values().
+*/
+function stormproject_token_values ($type, $object = NULL) {
+  $values = array();
+  $node = $object;
+  if ((($type == 'node') || ($type == 'all')) && ($node->type === 'stormproject')) {
+    $values['stormproject-projectstatus'] = $node->projectstatus;
+    if (module_exists('stormperson')) {
+      // Project Manager
+      if ($node->manager_nid) {
+        $manager = node_load($node->manager_nid);
+        $values['stormproject-manager-uid'] = $manager->user_uid;
+        $values['stormproject-manager-name'] = $manager->title;
+        $values['stormproject-manager-fullname'] = $manager->fullname;
+        $values['stormproject-manager-email'] = stormperson_primary_email($manager);
+        $values['stormproject-manager-title'] = $node->manager_title;
+      }
+      else {
+        $values['stormproject-manager-email'] = NULL;
+      }
+      // Project Assignee(s) e-mail
+      if ($node->assigned_nid) {
+        $values['stormproject-assigned-title'] = $node->assigned_title;
+        $assignees_node = node_load($node->assigned_nid);
+        // Assigned to one person
+        if ($assignees_node->type === 'stormperson') {
+          $values['stormproject-assigned-to-email'] = stormperson_primary_email($assignees_node);
+        }
+        // Assigned to a team
+        else {
+          $assignees_array = $assignees_node->members_array;
+          $assignees = array();
+          foreach ($assignees_array as $nid => $name) {
+            $assignee = node_load($nid);
+            $assignees[] = stormperson_primary_email($assignee);
+          }
+          $assigned = implode(", ", $assignees);
+          // Return comma separated list of emails
+          $values['stormproject-assigned-to-email'] = $assigned;
+        }
+      }
+      else {
+        $values['stormproject-assigned-to-email'] = NULL;
+      }
+    }
+  }
+  return $values;
+}
\ No newline at end of file
