? storm--918750-19.patch
? storm--918750-23.patch
Index: storm.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/storm/storm.module,v
retrieving revision 1.10.4.62
diff -u -p -r1.10.4.62 storm.module
--- storm.module	16 Dec 2010 23:32:22 -0000	1.10.4.62
+++ storm.module	22 Feb 2011 21:15:32 -0000
@@ -446,7 +446,7 @@ function storm_dateext_expand($element) 
         $options = drupal_map_assoc(range(1, 31));
         break;
     }
-    if ($element['#withnull']) {
+    if (isset($element['#withnull'])) {
       $options = array('-1' => '-') + $options;
     }
 
@@ -545,8 +545,12 @@ function _storm_strtotime($timestr='') {
 
   $ar = explode(':', $timestr);
   if (is_array($ar)) {
-    if (array_key_exists(0, $ar)) $time['hour'] = $ar[0];
-    if (array_key_exists(0, $ar)) $time['minute'] = $ar[1];
+    if (array_key_exists(0, $ar)) {
+      $time['hour'] = $ar[0];
+    }
+    if (array_key_exists(0, $ar) && isset($ar[1])) {
+      $time['minute'] = $ar[1];
+    }
   }
   return $time;
 }
Index: stormtimetracking/stormtimetracking.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/storm/stormtimetracking/stormtimetracking.module,v
retrieving revision 1.10.4.55.2.1
diff -u -p -r1.10.4.55.2.1 stormtimetracking.module
--- stormtimetracking/stormtimetracking.module	18 Jan 2011 00:08:34 -0000	1.10.4.55.2.1
+++ stormtimetracking/stormtimetracking.module	22 Feb 2011 21:15:32 -0000
@@ -309,16 +309,16 @@ function stormtimetracking_form(&$node) 
       }
     }
 
-    if ($_SESSION['stormtimetracking_list_filter']['organization_nid'] && !$node->organization_nid) {
+    if (isset($_SESSION['stormtimetracking_list_filter']['organization_nid']) && !$node->organization_nid) {
       $node->organization_nid = $_SESSION['stormtimetracking_list_filter']['organization_nid'];
     }
-    if ($_SESSION['stormtimetracking_list_filter']['project_nid'] && !$node->project_nid) {
+    if (isset($_SESSION['stormtimetracking_list_filter']['project_nid']) && !$node->project_nid) {
       $node->project_nid = $_SESSION['stormtimetracking_list_filter']['project_nid'];
     }
-    if ($_SESSION['stormtimetracking_list_filter']['task_nid'] && !$node->task_nid) {
+    if (isset($_SESSION['stormtimetracking_list_filter']['task_nid']) && !$node->task_nid) {
       $node->task_nid = $_SESSION['stormtimetracking_list_filter']['task_nid'];
     }
-    if ($_SESSION['stormtimetracking_list_filter']['ticket_nid'] && !$node->ticket_nid) {
+    if (isset($_SESSION['stormtimetracking_list_filter']['ticket_nid']) && !$node->ticket_nid) {
       $node->ticket_nid = $_SESSION['stormtimetracking_list_filter']['ticket_nid'];
     }
     if (array_key_exists('organization_nid', $_GET)) $node->organization_nid = $_GET['organization_nid'];
@@ -342,8 +342,6 @@ function stormtimetracking_form(&$node) 
     }
     $node->billable = variable_get('stormtimetracking_billable_default', FALSE);
   }
-  $s_org = "SELECT n.nid, n.title FROM {stormorganization} so INNER JOIN {node} n 
-    ON so.nid=n.nid WHERE n.status=1 AND (so.isactive=1 OR n.nid=%d) AND n.type='stormorganization' ORDER BY n.title";
 
   $type = node_get_types('type', $node);
 
@@ -363,13 +361,16 @@ function stormtimetracking_form(&$node) 
     '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group1') : -20,
   );
 
+  
+  $s_org = "SELECT n.nid, n.title FROM {stormorganization} so INNER JOIN {node} n 
+    ON so.nid=n.nid WHERE n.status=1 AND (so.isactive=1 OR n.nid=%d) AND so.iscustomer=1 AND n.type='stormorganization' ORDER BY n.title";
   $s_org = stormorganization_access_sql($s_org);
   $s_org = db_rewrite_sql($s_org);
-  $r = db_query($s_org, $node->organization_nid);
+  $r = db_query($s_org, isset($node->organization_nid) ? $node->organization_nid : 0);
   $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',
@@ -384,7 +385,7 @@ function stormtimetracking_form(&$node) 
   $s = "SELECT n.nid, n.title FROM {stormproject} spr INNER JOIN {node} n ON spr.nid=n.nid WHERE spr.organization_nid=%d AND n.status=1 AND n.type='stormproject' ORDER BY n.title";
   $s = stormproject_access_sql($s);
   $s = db_rewrite_sql($s);
-  $r = db_query($s, $node->organization_nid);
+  $r = db_query($s, isset($node->organization_nid) ? $node->organization_nid : 0);
   $projects = array();
   while ($project = db_fetch_object($r)) {
     $projects[$project->nid] = $project->title;
@@ -400,13 +401,13 @@ function stormtimetracking_form(&$node) 
     '#weight' => 2,
   );
 
-  $tree = _stormtask_get_tree($node->project_nid);
+  $tree = isset($node->project__nid) ? _stormtask_get_tree($node->project_nid) : array();
   $tasks = _stormtask_plain_tree($tree);
   $tasks = array(0 => '-') + $tasks;
   $form['group1']['task_nid'] = array(
     '#type' => 'select',
     '#title' => t('Task'),
-    '#default_value' => $node->task_nid,
+    '#default_value' => isset($node->task_nid) ? $node->task_nid : 0,
     '#options' => $tasks,
     '#process' => array('storm_dependent_select_process'),
     '#attributes' => array('onchange' => "stormticket_task_tickets(this, 'edit-organization-nid', 'edit-project-nid', 'edit-ticket-nid', true, '-')"),
@@ -417,14 +418,14 @@ function stormtimetracking_form(&$node) 
   $s = "SELECT n.nid, n.title FROM {stormticket} sti INNER JOIN {node} n ON sti.nid=n.nid WHERE n.status=1 AND n.type='stormticket' AND sti.organization_nid=%d AND sti.project_nid=%d AND sti.task_nid=%d ORDER BY n.title";
   $s = stormticket_access_sql($s);
   $s = db_rewrite_sql($s);
-  $r = db_query($s, $node->organization_nid, $node->project_nid, $node->task_nid);
+  $r = db_query($s, isset($node->organization_nid) ? $node->organization_nid : 0, isset($node->project_nid) ? $node->project_nid : 0, $node->task_nid);
   while ($ticket = db_fetch_object($r)) {
     $tickets[$ticket->nid] = $ticket->title;
   }
   $form['group1']['ticket_nid'] = array(
     '#type' => 'select',
     '#title' => t('Ticket'),
-    '#default_value' => $node->ticket_nid,
+    '#default_value' => isset($node->ticket_nid) ? $node->ticket_nid : 0,
     '#options' => array(0 => '-') + $tickets,
     '#process' => array('storm_dependent_select_process'),
     '#weight' => 4,
@@ -466,7 +467,7 @@ function stormtimetracking_form(&$node) 
     '#weight' => 2,
   );
   
-  $duration = $node->duration;
+  $duration = isset($node->duration) ? $node->duration : NULL;
   if ($duration) $duration = sprintf("%01.2f", $node->duration);
   $form['group3']['duration'] = array(
     '#type' => 'textfield',
@@ -478,7 +479,7 @@ function stormtimetracking_form(&$node) 
     '#disabled' => TRUE,
   );
   
-  $billing_duration = $node->billing_duration;
+  $billing_duration = isset($node->billing_duration) ? $node->duration : NULL;
   if ($billing_duration) $billing_duration = sprintf("%01.2f", $node->billing_duration);
   $form['group3']['billing_duration'] = array(
     '#type' => 'textfield',
@@ -505,7 +506,7 @@ function stormtimetracking_form(&$node) 
   $form['group4']['billed'] = array(
     '#type' => 'checkbox',
     '#title' => t('Billed'),
-    '#default_value' => $node->billed,
+    '#default_value' => isset($node->billed) ? $node->billed : 0,
     '#weight' => 2,
   );
   
@@ -582,18 +583,18 @@ function _stormtimetracking_beforesave(&
   $s = "SELECT n.title, p.organization_title FROM {node} n INNER JOIN {stormproject} p ON n.nid=p.nid WHERE type='stormproject' AND n.nid=%d";
   $r = db_query($s, $node->project_nid);
   $p = db_fetch_object($r);
-  $node->project_title = $p->title;
+  $node->project_title = isset($p->title) ? $p->title : '';
 
   $s = "SELECT title, stepno FROM {node} n INNER JOIN {stormtask} t ON n.nid=t.nid WHERE n.type='stormtask' AND n.nid=%d";
   $r = db_query($s, $node->task_nid);
   $ta = db_fetch_object($r);
-  $node->task_title = $ta->title;
-  $node->task_stepno = $ta->stepno;
+  $node->task_title = isset($ta->title) ? $ta->title : '';
+  $node->task_stepno = isset($ta->stepno) ? $ta->stepno : '';
 
   $s = "SELECT title FROM {node} n INNER JOIN {stormticket} t ON n.nid=t.nid WHERE n.type='stormticket' AND n.nid=%d";
   $r = db_query($s, $node->ticket_nid);
   $ti = db_fetch_object($r);
-  $node->ticket_title = $ti->title;
+  $node->ticket_title = isset($ti->title) ? $ti->title : '';
 }
 
 function stormtimetracking_nodeapi(&$node, $op, $teaser, $page) {
Index: stormtimetracking/stormtimetracking.test
===================================================================
RCS file: stormtimetracking/stormtimetracking.test
diff -N stormtimetracking/stormtimetracking.test
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ stormtimetracking/stormtimetracking.test	22 Feb 2011 21:15:32 -0000
@@ -0,0 +1,50 @@
+<?php
+class StormtimetrackingTestCase extends DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => t('Storm Timetracking Functionality'),
+      'description' => t('Test the functionality of the Storm Timetracking module'),
+      'group' => 'Storm',
+    );
+  }
+
+  public function setUp() {
+    parent::setUp('storm', 'stormattribute', 'stormorganization', 'stormproject', 'stormtask', 'stormticket', 'stormtimetracking');
+  }
+
+  /*public function testStormtimetrackingCreate() {
+    // Create and login user
+    $user = $this->drupalCreateUser(array('Storm organization: add', 'Storm organization: view all', 'Storm project: add', 'Storm project: view all', 'Storm task: add', 'Storm task: view all', 'Storm ticket: add', 'Storm ticket: view all', 'Storm timetracking: add', 'Storm timetracking: view all'));
+    $this->drupalLogin($user);
+
+    // Create organization and invoice
+    $org = array(
+      'title' => $this->randomName(32),
+      'body' => $this->randomName(64),
+    );
+    $prj = array(
+      'title' => $this->randomName(32),
+      'organization_nid' => '1',
+    );
+    $task = array(
+      'title' => $this->randomName(32),
+      'body' => $this->randomName(64),
+    );
+    $ticket = array(
+      'title' => $this->randomName(32),
+      'body' => $this->randomName(64),
+    );
+    $timetracking = array(
+      'title' => $this->randomName(32),
+      'body' => $this->randomName(64),
+    );
+    $this->drupalPost('node/add/stormorganization', $org, t('Save'));
+    $this->drupalPost('node/add/stormproject', $prj, t('Save'));
+    $this->drupalPost('node/add/stormtask', $task, t('Save'));
+    $this->drupalPost('node/add/stormticket', $ticket, t('Save'));
+    $this->drupalPost('node/add/stormtimetracking', $timetracking, t('Save'));
+
+    //$this->assertText(t('Timetracking @title has been created.', array('@title' => $timetracking['title'])));;
+  }
+}*/
