changed from email address, import email addresses to eq_elder, flush temp files...
[eq/.git] / inc / class.eq.inc.php
index 74c79edff516477d2225768e4f111a61f4559f34..921c142ca88a4bcadc5858172d4bba5ba75b21fb 100644 (file)
@@ -1,7 +1,8 @@
 <?php
   /**************************************************************************\
-  * phpGroupWare - eq                                                        *
-  * http://www.phpgroupware.org                                              *
+  * Application: phpGroupWare - eq                                           *
+  * Framework: http://www.phpgroupware.org                                   *
+  * Author: Alan J. Pippin (apippin@pippins.net)                             *
   * -----------------------------------------------                          *
   *  This program is free software; you can redistribute it and/or modify it *
   *  under the terms of the GNU General Public License as published by the   *
@@ -57,30 +58,27 @@ class eq
      'org_view'   => True,
      'schedule'   => True,
      'admin'      => True,
+     'email'      => True,
      'email_appt' => True,
      'willing_view'   => True,
      'willing_update' => True,
      'send_ical_appt' => True,
      'assign_view'    => True,
      'assign_update'  => True,
+     'get_time_selection_form' => True,
      );
  
   function eq()
     {
-      // LOCAL CONFIGURATION. PLEASE UPDATE AS APPROPRIATE.
-      $this->upload_target_path = "/home/users/eqpres/eq_data";
-      $this->script_path = "/usr/share/phpgroupware/eq/bin";
-      $this->default_ht_num_months = 3;
-      $this->default_ppi_num_months = 3;
-      $this->default_ppi_num_years = 0;
-      $this->default_int_num_quarters = 1;
-      $this->default_int_num_years = 0;
-      $this->default_att_num_quarters = 1;
-      $this->default_vis_num_years = 1;
-      $this->max_num_districts = 4;
+      if(file_exists("setup/eq_config.local")) {
+       include("setup/eq_config.local");
+      } else {
+       include("setup/eq_config");
+      }
+      
+      $this->script_path = "$this->application_path"."/bin";
       $this->max_presidency_members = 99;
       $this->max_appointments = 32768;
-      // END LOCAL CONFIGURATION
       
       $this->db                = $GLOBALS['phpgw']->db;
       $this->db2       = $this->db;
@@ -91,7 +89,7 @@ class eq
       $this->grants     = $GLOBALS['phpgw']->acl->get_grants('eq');
       $this->grants[$this->account] = PHPGW_ACL_READ + PHPGW_ACL_ADD + PHPGW_ACL_EDIT + PHPGW_ACL_DELETE;
        
-      $this->jscal = CreateObject('phpgwapi.jscalendar');   // before phpgw_header() !!!
+      $this->jscal = CreateObject('eq.jscalendar');   // before phpgw_header() !!!
       $this->cal_options = 'daFormat    : "%Y-%m-%d",
                                 ifFormat    : "%Y-%m-%d",
                                 mondayFirst : false,
@@ -170,6 +168,9 @@ class eq
       $link_data['menuaction'] = 'eq.eq.schedule';     
       $this->t->set_var('link_schedule',$GLOBALS['phpgw']->link('/eq/index.php',$link_data));
       $this->t->set_var('lang_schedule','Scheduling');
+      $link_data['menuaction'] = 'eq.eq.email';        
+      $this->t->set_var('link_email',$GLOBALS['phpgw']->link('/eq/index.php',$link_data));
+      $this->t->set_var('lang_email','Email');
                
       $this->t->pparse('out','eq_header');
     }
@@ -227,19 +228,18 @@ class eq
          $aaronic[$aaronic_id]['name'] = $this->db->f('name');
          $aaronic[$aaronic_id]['phone'] = $this->db->f('phone');
        }
-      
-      $total_families = 0;
+
       $this->nextmatchs->template_alternate_row_color(&$this->t);
+      for($m=$num_months; $m >= 0; $m--) { $total_families[$m]=0; }
       for ($i=0; $i < count($districts); $i++) {
        $this->t->set_var('district_number',$districts[$i]['district']);
        $this->t->set_var('district_name',$districts[$i]['name']);      
        $supervisor = $districts[$i]['supervisor'];
-       $unique_companionships='';
                
        // Select all the unique companionship numbers for this district
        $sql = "SELECT distinct companionship FROM eq_companionship where valid=1 and district=". $districts[$i]['district'];
        $this->db->query($sql,__LINE__,__FILE__);
-       $j=0;
+       $j=0; $unique_companionships = '';
        while ($this->db->next_record())
          {
            $unique_companionships[$j]['companionship'] = $this->db->f('companionship');
@@ -247,8 +247,8 @@ class eq
          }
 
        $comp_width=450; $visit_width=25; $table_width=$comp_width + $num_months*$visit_width;
-       $table_data=""; $num_companionships = 0; $num_families = 0;
-       for($m=$num_months; $m >= 0; $m--) { $visits[$m] = 0; }
+       $table_data=""; $num_companionships = 0;
+       for($m=$num_months; $m >= 0; $m--) { $visits[$m]=0; $num_families[$m]=0; }
        for ($j=0; $j < count($unique_companionships); $j++) {
          $companion_table_entry = "";
          // Select all the companions in each companionship
@@ -282,7 +282,6 @@ class eq
          $k=0;
          while ($this->db->next_record())
            {
-             $num_families++; $total_families++;
              $family_name = $this->db->f('name');
              $family_id = $this->db->f('family');
              $this->nextmatchs->template_alternate_row_color(&$this->t);
@@ -298,12 +297,24 @@ class eq
                $month_start = "$year"."-"."$month"."-"."01";
                $month_end = "$year"."-"."$month"."-"."31";
                $month = "$month"."/"."$year";
+               
                //print "m: $m month: $month year: $year month_start: $month_start month_end: $month_end<br>";
                // Add this to the query to filter on only visits made by this companionship:
                // " AND companionship=" . $unique_companionships[$j]['companionship'].
+
+               // First check to see if the currently assigned companionship has visited them
                $sql = "SELECT * FROM eq_visit WHERE date >= '$month_start' AND date <= '$month_end' ".
-                      " AND companionship!=0".
-                      " AND family=". $family_id;
+                  " AND companionship=".$unique_companionships[$j]['companionship'].
+                  " AND family=". $family_id;
+               $query_id = $this->db2->query($sql,__LINE__,__FILE__);
+               if($this->db2->num_rows($query_id) == 0) {
+                 // We did not find any visits made by the currently assigned companionship,
+                 // look for visits made by any other companionship other than 0. (0 == EQ Presidency Visit)
+                 $sql = "SELECT * FROM eq_visit WHERE date >= '$month_start' AND date <= '$month_end' ".
+                    " AND companionship!=0".
+                    " AND family=". $family_id;
+                 $query_id = $this->db2->query($sql,__LINE__,__FILE__);
+               }
                $this->db2->query($sql,__LINE__,__FILE__);
                $link_data['menuaction'] = 'eq.eq.ht_update';
                $link_data['date'] = $month_start;
@@ -318,19 +329,21 @@ class eq
                if(!$total_visits[$m]) { $total_visits[$m] = 0; }
                if($this->db2->next_record()) {
                  if($this->db2->f('visited') == 'y') {
-                   $visits[$m]++; $total_visits[$m]++;           
+                   $visits[$m]++; $total_visits[$m]++;
+                   $num_families[$m]++; $total_families[$m]++;
                    $table_data .= '<td align=center><a href="'.$link.'"><img src="images/checkmark.gif"></a></td>';
                  }
                  else if($this->db2->f('visited') == 'n') {
+                   $num_families[$m]++; $total_families[$m]++;
                    $table_data .= '<td align=center><a href="'.$link.'"><img src="images/x.gif"></a></td>';
                  }
                  else {
-                   $visits[$m]++; $total_visits[$m]++;
+                   //$visits[$m]++; $total_visits[$m]++;
                    $table_data .= "<td>&nbsp;</td>";
                  }
                }
                else {
-                 $visits[$m]++; $total_visits[$m]++;
+                 //$visits[$m]++; $total_visits[$m]++;
                  $table_data .= "<td>&nbsp;</td>";
                }
              }
@@ -340,11 +353,15 @@ class eq
          $table_data .= "<tr><td colspan=20></td></tr>";
        }
        $table_data .= "<tr><td colspan=20><hr></td></tr>";
-       $stat_data = "<tr><td><b><font size=-2>$num_families Families<br>Visit Totals:</font></b></td>";
+       $stat_data = "<tr><td><b><font size=-2>Families Hometaught:<br>Hometeaching Percentage:</font></b></td>";
 
        for($m=$num_months; $m >=0; $m--) {
-         $percent = ceil(($visits[$m] / $num_families)*100);
-         $stat_data .= "<td align=center><font size=-2><b>$visits[$m]<br>$percent%</font></b></td>";
+         if($num_families[$m] > 0) { 
+           $percent = ceil(($visits[$m] / $num_families[$m])*100);
+         } else {
+           $percent = 0;
+         }
+         $stat_data .= "<td align=center><font size=-2><b>$visits[$m] / $num_families[$m]<br>$percent%</font></b></td>";
        }
        $stat_data .= "</tr>";
 
@@ -355,10 +372,14 @@ class eq
        $this->t->fp('list','district_list',True);
       }
 
-      $totals = "<tr><td><b><font size=-2>$total_families Total Families<br>Visit Totals:</font></b></td>";
+      $totals = "<tr><td><b><font size=-2>Total Families Hometaught:<br>Total Hometeaching Percentage:</font></b></td>";
       for($m=$num_months; $m >=0; $m--) {
-       $percent = ceil(($total_visits[$m] / $total_families)*100);
-       $totals .= "<td align=center><font size=-2><b>$total_visits[$m]<br>$percent%</font></b></td>";
+       if($total_families[$m] > 0) { 
+         $percent = ceil(($total_visits[$m] / $total_families[$m])*100);
+       } else {
+         $percent = 0;
+       }
+       $totals .= "<td align=center><font size=-2><b>$total_visits[$m] / $total_families[$m]<br>$percent%</font></b></td>";
       }
       $totals .= "</tr>";
       
@@ -396,7 +417,7 @@ class eq
          // Get a list of all the companionships in this district
          $sql = "SELECT distinct companionship FROM eq_companionship where valid=1 and district=". $district;
          $this->db->query($sql,__LINE__,__FILE__);
-         $j=0;
+         $j=0; $unique_companionships = '';
          while ($this->db->next_record())
            {
              $unique_companionships[$j]['companionship'] = $this->db->f('companionship');
@@ -404,16 +425,9 @@ class eq
            }
          for ($j=0; $j < count($unique_companionships); $j++)
            {
-             // FIXME: We won't be able to go back and edit history on families that have been
-             // reassigned to a different companionship. The following delete command will not delete
-             // the history of visits under an older companionship, only the ones for the existing
-             // companionship. This will lead to duplicate visits being entered for an older
-             // month for the same family, making it impossible to change the past history once
-             // a family is reassigned. However, you will be able to view the history just fine.
-
              //$comp=$unique_companionships[$j]['companionship'];
              //print "deleting from eq_visit where companionship=$comp and date=$date and district=$district<br>";
-             // Delete all the visits that have taken place for all families for this month
+             // Delete all the visits that have taken place for all families for this companionsthip for this month
              $this->db->query("DELETE from eq_visit where companionship=" . $unique_companionships[$j]['companionship'] .
                               " AND " . "date='" . $date . "'",__LINE__,__FILE__);
            }
@@ -470,7 +484,7 @@ class eq
       // Select all the unique companionship numbers for this district
       $sql = "SELECT distinct companionship FROM eq_companionship where valid=1 and district=". $district;
       $this->db->query($sql,__LINE__,__FILE__);
-      $j=0; $unique_companionships='';
+      $j=0; $unique_companionships = '';
       while ($this->db->next_record())
        {
          $unique_companionships[$j]['companionship'] = $this->db->f('companionship');
@@ -511,29 +525,40 @@ class eq
        $this->db->query($sql,__LINE__,__FILE__);
        while ($this->db->next_record())
          {
-           $num_families++; $total_families++;
            $family_name = $this->db->f('name');
            $family_id = $this->db->f('family');
            $this->nextmatchs->template_alternate_row_color(&$this->t);
            $table_data.="<tr bgcolor=". $this->t->get_var('tr_color') ."><td>$family_name Family</td>";
            
            $header_row="<th width=$comp_width><font size=-2>Families</th>";
+
+           // First check to see if the currently assigned companionship has visited them
            $sql = "SELECT * FROM eq_visit WHERE date >= '$month_start' AND date <= '$month_end' ".
+                  " AND companionship=".$unique_companionships[$j]['companionship'].
+                  " AND family=". $family_id;
+           $query_id = $this->db2->query($sql,__LINE__,__FILE__);
+           if($this->db2->num_rows($query_id) == 0) {
+             // We did not find any visits made by the currently assigned companionship,
+             // look for visits made by any other companionship other than 0. (0 == EQ Presidency Visit)
+             $sql = "SELECT * FROM eq_visit WHERE date >= '$month_start' AND date <= '$month_end' ".
                   " AND companionship!=0".
                   " AND family=". $family_id;
-           $this->db2->query($sql,__LINE__,__FILE__);
+             $query_id = $this->db2->query($sql,__LINE__,__FILE__);
+           }
+           
            $value = $family_id . "/" . $unique_companionships[$j]['companionship'] . "/" . $date;
            $header_row .= "<th width=$visit_width><font size=-2><a href=$link>$month</a></th>";
            if(!$total_visits) { $total_visits = 0; }
            if($this->db2->next_record()) {
              if($this->db2->f('visited') == 'y') {
-               $visits++; $total_visits++;
+               $visits++; $total_visits++; $num_families++;
                $table_data .= '<td width=100 align=center>';
                $table_data .= '<input type="radio" name="family_visited['.$family_id.'][]" value="'.$value.'/y" checked>Y';
                $table_data .= '<input type="radio" name="family_visited['.$family_id.'][]" value="'.$value.'/n">N';
                $table_data .= '<input type="radio" name="family_visited['.$family_id.'][]" value="'.$value.'/"> ';
                $table_data .= '</td>';
              } else if($this->db2->f('visited') == 'n') {
+               $num_families++;
                $table_data .= '<td width=100 align=center>';
                $table_data .= '<input type="radio" name="family_visited['.$family_id.'][]" value="'.$value.'/y">Y';
                $table_data .= '<input type="radio" name="family_visited['.$family_id.'][]" value="'.$value.'/n" checked>N';
@@ -560,10 +585,10 @@ class eq
        $table_data .= "<tr><td colspan=20></td></tr>";
       }
       $table_data .= "<tr><td colspan=20><hr></td></tr>";
-      $stat_data = "<tr><td><b><font size=-2>$num_families Families<br>Visit Totals:</font></b></td>";
+      $stat_data = "<tr><td><b><font size=-2>Families Hometaught:<br>Hometeaching Percentage:</font></b></td>";
       
       $percent = ceil(($visits / $num_families)*100);
-      $stat_data .= "<td align=center><font size=-2><b>$visits<br>$percent%</font></b></td>";
+      $stat_data .= "<td align=center><font size=-2><b>$visits / $num_families<br>$percent%</font></b></td>";
       $stat_data .= "</tr>";
       
       $this->t->set_var('table_width',$table_width);
@@ -634,15 +659,15 @@ class eq
          $this->t->set_var('edit',$GLOBALS['phpgw']->link('/eq/index.php',$link_data));
          $this->t->set_var('lang_edit','Edit');
 
-         $link_data['menuaction'] = 'eq.eq.act_update';
-         $link_data['activity'] = '0';
-         $link_data['action'] = 'add';
-         $this->t->set_var('add','<form method="POST" action="' . $GLOBALS['phpgw']->link('/eq/index.php',$link_data)
-                           . '"><input type="submit" name="Add" value="' . 'Add Activity' .'"></font></form>');
-
          $this->t->fp('list','act_list',True);
        }
 
+      $link_data['menuaction'] = 'eq.eq.act_update';
+      $link_data['activity'] = '0';
+      $link_data['action'] = 'add';
+      $this->t->set_var('add','<form method="POST" action="' . $GLOBALS['phpgw']->link('/eq/index.php',$link_data)
+                       . '"><input type="submit" name="Add" value="' . 'Add Activity' .'"></font></form>');
+
       $this->t->pfp('out','act_list_t');
       $this->save_sessiondata();
     }
@@ -746,12 +771,14 @@ class eq
          
          // Re-add the elders who are checked as having participated in this activity
          $elders = get_var('elder_name',array('POST'));
-         foreach ($elders as $elder)
-           {
-             $this->db->query("INSERT INTO eq_participation (elder,activity) "
-                              . "VALUES (" . $elder . ",". $activity['activity'] . ")",__LINE__,__FILE__);
-           }
-
+         if(is_array($elders)) { // Only do the foreach loop if we have a valid array of elders to work with
+           foreach ($elders as $elder)
+             {
+               $this->db->query("INSERT INTO eq_participation (elder,activity) "
+                                . "VALUES (" . $elder . ",". $activity['activity'] . ")",__LINE__,__FILE__);
+             }
+         }
+         
          $this->act_list();
          return false;
        }
@@ -1384,31 +1411,62 @@ class eq
       $table_data=""; $completed_data=""; $totals_data="";
 
       $year = date('Y');
-      
+
+      // Get the EQ President
+      $sql = "SELECT * FROM eq_presidency where president=1 and valid=1";
+      $this->db->query($sql,__LINE__,__FILE__);
+      if($this->db->next_record()) {
+       $president_name = $this->db->f('name');
+       $president_name_array = explode(",",$president_name);
+       $president_last_name = $president_name_array[0];
+       $president_id = $this->db->f('elder');
+       $presidency_id = $this->db->f('presidency');
+       $interviewer = $this->db->f('elder');
+       $district_number = '*';
+       $district_name = $president_name;
+       $sql = "SELECT * FROM eq_elder where elder='$president_id'";
+       $this->db2->query($sql,__LINE__,__FILE__);
+       if($this->db2->next_record()) {
+         $indiv_id = $this->db2->f('indiv_id');
+       }
+       $sql = "SELECT * FROM eq_parent where indiv_id='$indiv_id'";
+       $this->db2->query($sql,__LINE__,__FILE__);
+       if($this->db2->next_record()) {
+         $president_address = $this->db2->f('address');
+       }
+      } else {
+       print "<hr><font color=red><h3>-E- Unable to locate EQ President in eq_presidency table</h3></font></hr>";
+       return;
+      }
+
       if($action == 'save')
        {
          // Save any changes made to the appointment table
          $new_data = get_var('appt_notes',array('POST'));
-         foreach ($new_data as $entry)
-          {
-            $elder = $entry['elder'];
-            $appointment = $entry['appointment'];
-
-            //print "elder: $elder appointment: $appointment <br>";
-            
-            //Only perform a database update if we have made a change to this appointment
-            $sql = "SELECT * FROM eq_appointment where appointment='$appointment' and elder='$elder'";
-            $this->db->query($sql,__LINE__,__FILE__);
-            if(!$this->db->next_record()) {
-              // Perform database save actions here
-              $this->db->query("UPDATE eq_appointment set " .
-                               " elder='" . $elder . "'" .
-                               " WHERE appointment=" . $appointment,__LINE__,__FILE__);
-              // Email the appointment
-              $this->email_appt($appointment);
-            }
-
-          }
+         if($new_data != "") { 
+           foreach ($new_data as $entry)
+             {
+               $elder = $entry['elder'];
+               $appointment = $entry['appointment'];
+               $location = $entry['location'];
+               if($location == "") { $location = "$president_last_name"." home ($president_address)"; }
+               if($elder == 0) { $location = ""; }
+               
+               //Only perform a database update if we have made a change to this appointment
+               $sql = "SELECT * FROM eq_appointment where appointment='$appointment' and elder='$elder' and location='$location'";
+               $this->db->query($sql,__LINE__,__FILE__);
+               if(!$this->db->next_record()) {
+                 // Perform database save actions here
+                 $this->db->query("UPDATE eq_appointment set " .
+                                  " elder='" . $elder . "'" .
+                                  ",location='" . $location . "'" .
+                                  " WHERE appointment=" . $appointment,__LINE__,__FILE__);
+                 // Email the appointment
+                 $this->email_appt($appointment);
+               }
+               
+             }
+         }
          
          // Save any changes made to the ppi notes table
          $new_data = get_var('ppi_notes',array('POST'));
@@ -1427,23 +1485,8 @@ class eq
           }
 
          $take_me_to_url = $GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.ppi_sched');
-         Header('Location: ' . $take_me_to_url);
+         //Header('Location: ' . $take_me_to_url);
        }
-
-      // Get the EQ President
-      $sql = "SELECT * FROM eq_presidency where president=1 and valid=1";
-      $this->db->query($sql,__LINE__,__FILE__);
-      if($this->db->next_record()) {
-       $president_name = $this->db->f('name');
-       $president_id = $this->db->f('elder');
-       $presidency_id = $this->db->f('presidency');
-       $interviewer = $this->db->f('elder');
-       $district_number = '*';
-       $district_name = $president_name;
-      } else {
-       print "<hr><font color=red><h3>-E- Unable to locate EQ President in eq_presidency table</h3></font></hr>";
-       return;
-      }
       
       // create the elder id -> elder name mapping
       $sql = "SELECT * FROM eq_elder where valid=1 ORDER BY name ASC";
@@ -1460,11 +1503,12 @@ class eq
       array_multisort($elder_name, $elder_id);
 
       // APPOINTMENT TABLE
-      $date_width=150; $time_width=100; $elder_width=200;
-      $appt_table_width=$date_width + $time_width + $elder_width;
+      $date_width=250; $time_width=100; $elder_width=200; $location_width=100;
+      $appt_table_width=$date_width + $time_width + $elder_width + $location_width;
       $appt_header_row = "<th width=$date_width><font size=-2>Date</th>";
       $appt_header_row.= "<th width=$time_width><font size=-2>Time</th>";      
       $appt_header_row.= "<th width=$elder_width><font size=-2>Elder</th>";
+      $appt_header_row.= "<th width=$location_width><font size=-2>Location</th>";
       $appt_table_data = ""; 
 
       $total_elders=0; $elders_with_yearly_ppi=0;
@@ -1484,6 +1528,8 @@ class eq
        {
          $appointment = $this->db->f('appointment');
          $elder = $this->db->f('elder');
+         $location = $this->db->f('location');
+         if(($location == "") && ($elder > 0)) { $location = "$president_last_name"." home ($president_address)"; }
          
          $date = $this->db->f('date');
          $date_array = explode("-",$date);
@@ -1507,7 +1553,10 @@ class eq
            $appt_table_data.= '<option value='.$id.' '.$selected[$id].'>'.$name.'</option>';
          }
          $appt_table_data.='</select></td>';
-
+         
+         $appt_table_data.= '<td align=center><input type=text size="35" maxlength="120" ';
+         $appt_table_data.= 'name="appt_notes['.$appointment.'][location]" value="'.$location.'">';
+         
          $appt_table_data.= '<input type=hidden name="appt_notes['.$appointment.'][appointment]" value="'.$appointment.'">';
          
          $tr_color = $this->nextmatchs->alternate_row_color($tr_color);
@@ -1547,11 +1596,11 @@ class eq
          // If this elder has had a yearly PPI this year, don't show him on the schedule list
          $year_start = $year - 1 . "-12-31"; $year_end = $year + 1 . "-01-01";
          $sql = "SELECT * FROM eq_ppi WHERE date > '$year_start' AND date < '$year_end' ".
-            "AND elder=" . $id;
+            "AND elder=" . $id . " AND eqpresppi=1";
          $this->db2->query($sql,__LINE__,__FILE__);
          
          if(!$this->db2->next_record()) {
-           $sql = "SELECT * FROM eq_ppi WHERE elder=" . $id . " ORDER BY date DESC";
+           $sql = "SELECT * FROM eq_ppi WHERE elder=" . $id . " AND eqpresppi=1 ORDER BY date DESC";
            $this->db->query($sql,__LINE__,__FILE__);
            if($this->db->next_record()) { $date = $this->db->f('date'); } else { $date = ""; }
            $link_data['menuaction'] = 'eq.eq.ppi_update';
@@ -1679,30 +1728,66 @@ class eq
       if($month >= 7 && $month <= 9) { $quarter_start=$year."-07-01"; $quarter_end=$year."-10-01"; }
       if($month >= 10 && $month <= 12) { $quarter_start=$year."-10-01"; $quarter_end=$nextyear."-01-01"; }
       //print "year: $year month: $month quarter_start: $quarter_start quarter_end: $quarter_end<br>";
-      
+
+      // create the elder id -> elder name mapping
+      $sql = "SELECT * FROM eq_elder where valid=1 ORDER BY name ASC";
+      $this->db->query($sql,__LINE__,__FILE__);
+      $i=0;
+      $elder_id_data = NULL;
+      $elder_name_data = NULL;
+      while ($this->db->next_record())
+       {
+         $elder_name_data[$i] = $this->db->f('name');
+         $elder_id_data[$i] = $this->db->f('elder');
+         $elderid2name[$elder_id_data[$i]] = $elder_name_data[$i];
+         $i++;
+       }
+      array_multisort($elder_name_data, $elder_id_data);
+
       if($action == 'save')
        {
          // Save any changes made to the appointment table
          $new_data = get_var('appt_notes',array('POST'));
-         foreach ($new_data as $entry)
-          {
-            $elder = $entry['elder'];
-            $appointment = $entry['appointment'];
-
-            //print "elder: $elder appointment: $appointment <br>";
-            //Only perform a database update if we have made a change to this appointment
-            $sql = "SELECT * FROM eq_appointment where appointment='$appointment' and elder='$elder'";
-            $this->db->query($sql,__LINE__,__FILE__);
-            if(!$this->db->next_record()) {
-              // Perform database save actions here
-              $this->db->query("UPDATE eq_appointment set " .
-                               " elder='" . $elder . "'" .
-                               " WHERE appointment=" . $appointment,__LINE__,__FILE__);
-              
-              // Email the appointment
-              $this->email_appt($appointment);
-            }
-          }
+         if($new_data != "") { 
+           foreach ($new_data as $entry)
+             {
+               $elder = $entry['elder'];
+               $appointment = $entry['appointment'];
+               $location = $entry['location'];
+               if($location == "") {
+                 $supervisor = $entry['supervisor'];
+                 $supervisor_array = explode(",", $elderid2name[$supervisor]);
+                 $supervisor_last_name = $supervisor_array[0];
+                 $sql = "SELECT * FROM eq_elder where elder='$supervisor'";
+                 $this->db2->query($sql,__LINE__,__FILE__);
+                 if($this->db2->next_record()) {
+                   $indiv_id = $this->db2->f('indiv_id');
+                 }
+                 $sql = "SELECT * FROM eq_parent where indiv_id='$indiv_id'";
+                 $this->db2->query($sql,__LINE__,__FILE__);
+                 if($this->db2->next_record()) {
+                   $supervisor_address = $this->db2->f('address');
+                 }
+                 $location = "$supervisor_last_name"." home ($supervisor_address)";
+               }
+               if($elder == 0) { $location = ""; }
+               
+               //print "elder: $elder appointment: $appointment <br>";
+               //Only perform a database update if we have made a change to this appointment
+               $sql = "SELECT * FROM eq_appointment where appointment='$appointment' and elder='$elder' and location='$location'";
+               $this->db->query($sql,__LINE__,__FILE__);
+               if(!$this->db->next_record()) {
+                 // Perform database save actions here
+                 $this->db->query("UPDATE eq_appointment set " .
+                                  " elder='" . $elder . "'" .
+                                  ",location='" . $location . "'" .
+                                  " WHERE appointment=" . $appointment,__LINE__,__FILE__);
+                 
+                 // Email the appointment
+                 $this->email_appt($appointment);
+               }
+             }
+         }
          
          // Save any changes made to the int notes table
          $new_data = get_var('int_notes',array('POST'));
@@ -1725,7 +1810,7 @@ class eq
           }
 
          $take_me_to_url = $GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.int_sched');
-         Header('Location: ' . $take_me_to_url);
+         //Header('Location: ' . $take_me_to_url);
        }
 
       // Get the Districts
@@ -1746,27 +1831,14 @@ class eq
          $i++;
        }
       
-      // create the elder id -> elder name mapping
-      $sql = "SELECT * FROM eq_elder where valid=1 ORDER BY name ASC";
-      $this->db->query($sql,__LINE__,__FILE__);
-      $i=0;
-      $elder_id_data = NULL;
-      $elder_name_data = NULL;
-      while ($this->db->next_record())
-       {
-         $elder_name_data[$i] = $this->db->f('name');
-         $elder_id_data[$i] = $this->db->f('elder');
-         $i++;
-       }
-      array_multisort($elder_name_data, $elder_id_data);
-
       // APPOINTMENT TABLE
       $district = 1;
-      $date_width=150; $time_width=100; $elder_width=200;
-      $appt_table_width=$date_width + $time_width + $elder_width;
+      $date_width=250; $time_width=100; $elder_width=200; $location_width=100;
+      $appt_table_width=$date_width + $time_width + $elder_width + $location_width;
       $appt_header_row = "<th width=$date_width><font size=-2>Date</th>";
       $appt_header_row.= "<th width=$time_width><font size=-2>Time</th>";      
       $appt_header_row.= "<th width=$elder_width><font size=-2>Elder</th>";
+      $appt_header_row.= "<th width=$location_width><font size=-2>Location</th>";
       $appt_table_data = ""; 
 
       $total_comps=0; $comps_with_quarterly_int=0;
@@ -1777,6 +1849,19 @@ class eq
       $this->t->set_var('district_number',$districts[$d]['district']);
       $this->t->set_var('district_name',$districts[$d]['name']);       
       $supervisor = $districts[$d]['supervisor'];
+      $supervisor_array = explode(",", $supervisor);
+      $supervisor_last_name = $supervisor_array[0];
+      $sql = "SELECT * FROM eq_elder where elder='$supervisor'";
+      $this->db2->query($sql,__LINE__,__FILE__);
+      if($this->db2->next_record()) {
+       $indiv_id = $this->db2->f('indiv_id');
+      }
+      $sql = "SELECT * FROM eq_parent where indiv_id='$indiv_id'";
+      $this->db2->query($sql,__LINE__,__FILE__);
+      if($this->db2->next_record()) {
+       $supervisor_address = $this->db2->f('address');
+      }
+      $location = "$supervisor_last_name"." home ($supervisor_address)";
       $table_title = "District ".$districts[$d]['district'].": ".$districts[$d]['name'].": All Elders with Interviews Not Completed";
       $appt_table_title = "District ".$districts[$d]['district'].": ".$districts[$d]['name'].": Interview Appointment Slots";
       $this->t->set_var('table_title',$table_title);
@@ -1790,6 +1875,8 @@ class eq
        {
          $appointment = $this->db->f('appointment');
          $elder = $this->db->f('elder');
+         $location = $this->db->f('location');
+         if(($location == "") && ($elder > 0)) { $location = "$supervisor_last_name"." home ($supervisor_address)"; }
          
          $date = $this->db->f('date');
          $date_array = explode("-",$date);
@@ -1814,7 +1901,11 @@ class eq
          }
          $appt_table_data.='</select></td>';
 
+         $appt_table_data.= '<td align=center><input type=text size="35" maxlength="120" ';
+         $appt_table_data.= 'name="appt_notes['.$appointment.'][location]" value="'.$location.'">';
+         
          $appt_table_data.= '<input type=hidden name="appt_notes['.$appointment.'][appointment]" value="'.$appointment.'">';
+         $appt_table_data.= '<input type=hidden name="appt_notes['.$appointment.'][supervisor]" value="'.$supervisor.'">';
          
          $tr_color = $this->nextmatchs->alternate_row_color($tr_color);
          $this->t->set_var('tr_color',$tr_color);
@@ -1829,7 +1920,7 @@ class eq
       // Select all the unique companionship numbers for this district
       $sql = "SELECT distinct companionship FROM eq_companionship where valid=1 and district=". $districts[$d]['district'];
       $this->db->query($sql,__LINE__,__FILE__);
-      $j=0;
+      $j=0; $unique_companionships = '';
       while ($this->db->next_record())
        {
          $unique_companionships[$j]['companionship'] = $this->db->f('companionship');
@@ -1899,19 +1990,19 @@ class eq
              }
              
              // If this companionship has had a hometeaching interview this quarter, don't show them on the schedule list
-             $sql = "SELECT * FROM eq_interview WHERE date >= '$quarter_start' AND date < '$quarter_end' ".
+             $sql = "SELECT * FROM eq_ppi WHERE date >= '$quarter_start' AND date < '$quarter_end' ".
                 "AND elder=" . $id;
              $this->db2->query($sql,__LINE__,__FILE__);
              
              if(!$this->db2->next_record()) {
-               $sql = "SELECT * FROM eq_interview WHERE elder=" . $id . " ORDER BY date DESC";
+               $sql = "SELECT * FROM eq_ppi WHERE elder=" . $id . " ORDER BY date DESC";
                $this->db3->query($sql,__LINE__,__FILE__);
                if($this->db3->next_record()) { $date = $this->db3->f('date'); } else { $date = ""; }
                $link_data['menuaction'] = 'eq.eq.int_update';
                $link_data['elder'] = $id;
                $link_data['aaronic'] = 0;
                $link_data['name'] = $name;
-               $link_data['interview'] = '';
+               $link_data['ppi'] = '';
                $link_data['action'] = 'add';
                $link_data['interviewer'] = $districts[$d]['supervisor'];
                $link = $GLOBALS['phpgw']->link('/eq/index.php',$link_data);
@@ -1943,7 +2034,7 @@ class eq
                $link_data['elder'] = $this->db2->f('elder');
                $link_data['aaronic'] = $this->db2->f('aaronic');
                $link_data['name'] = $name;
-               $link_data['interview'] = $this->db2->f('int');
+               $link_data['ppi'] = $this->db2->f('ppi');
                $link_data['action'] = 'view';
                $link = $GLOBALS['phpgw']->link('/eq/index.php',$link_data);    
                $comps_with_quarterly_int++;
@@ -2031,57 +2122,87 @@ class eq
       $table_data=""; $completed_data=""; $totals_data="";
 
       $year = date('Y');
-      
+
+      // create the family id -> family name mapping
+      $sql = "SELECT * FROM eq_family where valid=1 and elder_id != 0 ORDER BY name ASC";
+      $this->db->query($sql,__LINE__,__FILE__);
+      $i=0;
+      $family_id = NULL;
+      while ($this->db->next_record())
+       {
+         $family_id[$i] = $this->db->f('family');
+         $family_name[$i] = $this->db->f('name');
+         $familyid2name[$family_id[$i]] = $family_name[$i];
+         $sql = "SELECT * FROM eq_parent where family='$family_id[$i]'";
+         $this->db2->query($sql,__LINE__,__FILE__);
+         if($this->db2->next_record()) {
+           $familyid2address[$family_id[$i]] = $this->db2->f('address');
+         }
+         $i++;
+       }
+      array_multisort($family_name, $family_id);
+
       if($action == 'save')
        {
          // Save any changes made to the appointment table
          $new_data = get_var('appt_notes',array('POST'));
-         foreach ($new_data as $entry)
-          {
-            $family = $entry['family'];
-            $appointment = $entry['appointment'];
-
-            //Only perform a database update if we have made a change to this appointment
-            $sql = "SELECT * FROM eq_appointment where appointment='$appointment' and family='$family'";
-            $this->db->query($sql,__LINE__,__FILE__);
-            if(!$this->db->next_record()) {
-
-              // Perform database save actions here
-              $this->db->query("UPDATE eq_appointment set " .
-                               " family='" . $family . "'" .
-                               " WHERE appointment=" . $appointment,__LINE__,__FILE__);
-              
-              // Email the appointment
-              $this->email_appt($appointment);
-            }
-          }
+         if($new_data != "") { 
+           foreach ($new_data as $entry)
+             {
+               $family = $entry['family'];
+               $appointment = $entry['appointment'];
+               $location = $entry['location'];
+               if($location == "") {
+                 $family_name_array = explode(",", $familyid2name[$family]);
+                 $family_last_name = $family_name_array[0];
+                 $family_address = $familyid2address[$family];
+                 $location = "$family_last_name"." home ($family_address)";
+               }
+               if($family == 0) { $location = ""; }
+               
+               //Only perform a database update if we have made a change to this appointment
+               $sql = "SELECT * FROM eq_appointment where appointment='$appointment' and family='$family' and location='$location'";
+               $this->db->query($sql,__LINE__,__FILE__);
+               if(!$this->db->next_record()) {
+                 // Perform database save actions here
+                 $this->db->query("UPDATE eq_appointment set " .
+                                  " family='" . $family . "'" .
+                                  ",location='" . $location . "'" .
+                                  " WHERE appointment=" . $appointment,__LINE__,__FILE__);
+                 
+                 // Email the appointment
+                 $this->email_appt($appointment);
+               }
+             }
+         }
          
          // Save any changes made to the visit notes table
          $new_data = get_var('vis_notes',array('POST'));
          foreach ($new_data as $entry)
           {
             $visit_notes = $entry['notes'];
-            $family_id = $entry['family_id'];
+            $family = $entry['family_id'];
             $visit_pri = $entry['pri'];
             
             // Perform database save actions here
             $this->db->query("UPDATE eq_family set " .
                              " visit_notes='" . $visit_notes . "'" .
                              ",visit_pri='" . $visit_pri . "'" .
-                             " WHERE family=" . $family_id,__LINE__,__FILE__);
+                             " WHERE family=" . $family,__LINE__,__FILE__);
             
           }
 
          $take_me_to_url = $GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.vis_sched');
-         Header('Location: ' . $take_me_to_url);
+         //Header('Location: ' . $take_me_to_url);
        }
 
       // APPOINTMENT TABLE
-      $date_width=150; $time_width=100; $family_width=250;
-      $appt_table_width=$date_width + $time_width + $family_width;
+      $date_width=250; $time_width=100; $family_width=250; $location_width=100;
+      $appt_table_width=$date_width + $time_width + $family_width + $location_width;
       $appt_header_row = "<th width=$date_width><font size=-2>Date</th>";
       $appt_header_row.= "<th width=$time_width><font size=-2>Time</th>";      
       $appt_header_row.= "<th width=$family_width><font size=-2>Family</th>";
+      $appt_header_row.= "<th width=$location_width><font size=-2>Location</th>";
       $appt_table_data = ""; 
 
       // Find out what the EQ Presidency ID is
@@ -2094,20 +2215,7 @@ class eq
        print "<hr><font color=red><h3>-E- Unable to locate EQ Presidency in eq_presidency table</h3></font></hr>";
        return;
       }
-      
-      // create the family id -> family name mapping
-      $sql = "SELECT * FROM eq_family where valid=1 and elder_id != 0 ORDER BY name ASC";
-      $this->db->query($sql,__LINE__,__FILE__);
-      $i=0;
-      $family_id = NULL;
-      while ($this->db->next_record())
-       {
-         $family_id[$i] = $this->db->f('family');
-         $family_name[$i] = $this->db->f('name');
-         $i++;
-       }
-      array_multisort($family_name, $family_id);
-      
+            
       // query the database for all the appointments
       $sql = "SELECT * FROM eq_appointment where presidency=$presidency_id and date>=CURDATE() ORDER BY date ASC, time ASC";
       $this->db->query($sql,__LINE__,__FILE__);
@@ -2116,7 +2224,12 @@ class eq
        {
          $appointment = $this->db->f('appointment');
          $family = $this->db->f('family');
-
+         $location = $this->db->f('location');
+         $family_name_array = explode(",", $familyid2name[$family]);
+         $family_last_name = $family_name_array[0];
+         $family_address = $familyid2address[$family];
+         if(($location == "") && ($family > 0)) { $location = "$family_last_name"." home ($family_address)"; }
+                       
          $date = $this->db->f('date');
          $date_array = explode("-",$date);
          $year = $date_array[0]; $month = $date_array[1]; $day = $date_array[2];
@@ -2140,6 +2253,9 @@ class eq
          }
          $appt_table_data.='</select></td>';
 
+         $appt_table_data.= '<td align=center><input type=text size="35" maxlength="120" ';
+         $appt_table_data.= 'name="appt_notes['.$appointment.'][location]" value="'.$location.'">';
+
          $appt_table_data.= '<input type=hidden name="appt_notes['.$appointment.'][appointment]" value="'.$appointment.'">';
          
          $tr_color = $this->nextmatchs->alternate_row_color($tr_color);
@@ -2374,7 +2490,7 @@ class eq
          $year = date('Y') - $m;
          $year_start = $year - 1 . "-12-31"; $year_end = $year + 1 . "-01-01";
          $sql = "SELECT * FROM eq_ppi WHERE date > '$year_start' AND date < '$year_end' ".
-            "AND elder=" . $id;
+            "AND elder=" . $id . " AND eqpresppi=1";
          $this->db2->query($sql,__LINE__,__FILE__);
                  
          if(!$total_ppis[$m]) { $total_ppis[$m] = 0; }
@@ -2437,14 +2553,22 @@ class eq
       $date = get_var('date',array('GET','POST'));
       $notes = get_var('notes',array('GET','POST'));
       $eqpresppi = get_var('eqpresppi',array('GET','POST'));
-      
-      $sql = "SELECT * FROM eq_elder WHERE elder=" . $interviewer;
+     
+      $sql = "SELECT * FROM eq_presidency where valid=1 and (president=1 or counselor=1 or secretary=1)";
       $this->db2->query($sql,__LINE__,__FILE__);
-      $this->db2->next_record();
-      $interviewer_name = $this->db2->f('name');
-      $this->t->set_var('interviewer',$interviewer . ' selected');
-      $this->t->set_var('interviewer_name',$interviewer_name);
-      $this->t->fp('int_list','interviewer_list',True);
+      while ($this->db2->next_record())
+      {
+        $elder = $this->db2->f('elder');
+       $interviewer_name = $this->db2->f('name');
+        if($elder == $interviewer) { 
+          $this->t->set_var('interviewer',$interviewer . ' selected');
+        } else {
+         $this->t->set_var('interviewer',$interviewer);
+       }
+        $this->t->set_var('interviewer_name',$interviewer_name);
+        $this->t->set_var('eqpresppi_checked','');
+        $this->t->fp('int_list','interviewer_list',True);
+      }
     
       if($action == 'save')
        {
@@ -2453,6 +2577,7 @@ class eq
                           "   ppi='" . $ppi . "'" .
                    ", interviewer='" . $interviewer . "'" .
                          ", elder='" . $elder . "'" .
+                       ", aaronic='" . $aaronic . "'" .
                           ", date='" . $date . "'" .
                          ", notes='" . $notes . "'" .
                      ", eqpresppi='" . $eqpresppi . "'" .
@@ -2464,8 +2589,8 @@ class eq
       if($action == 'insert')
        {
          $notes = get_var('notes',array('POST'));
-         $this->db->query("INSERT INTO eq_ppi (interviewer,elder,date,notes,eqpresppi) "
-                          . "VALUES ('" . $interviewer . "','" . $elder . "','"
+         $this->db->query("INSERT INTO eq_ppi (interviewer,elder,aaronic,date,notes,eqpresppi) "
+                          . "VALUES ('" . $interviewer . "','" . $elder . "','" . $aaronic . "','"
                           . $date . "','" . $notes . "','" . $eqpresppi  ."')",__LINE__,__FILE__);
          $this->ppi_view();
          return false;
@@ -2481,6 +2606,7 @@ class eq
          $this->t->set_var('date','');
          $this->t->set_var('notes','');
          $this->t->set_var('eqpresppi',$eqpresppi);
+         $this->t->set_var('eqpresppi_checked','checked');
          $this->t->set_var('lang_done','Cancel');
          $this->t->set_var('lang_action','Adding New PPI');
          $this->t->set_var('actionurl',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.ppi_update&ppi='
@@ -2499,6 +2625,7 @@ class eq
          $this->t->set_var('date',$this->db->f('date'));
          $this->t->set_var('notes',$this->db->f('notes'));
          $this->t->set_var('eqpresppi',$this->db->f('eqpresppi'));
+         if($this->db->f('eqpresppi') == 1) { $this->t->set_var('eqpresppi_checked','checked'); }
        }
       
       if($action == 'edit')
@@ -2607,13 +2734,11 @@ class eq
        $this->t->set_var('district_number',$districts[$i]['district']);
        $this->t->set_var('district_name',$districts[$i]['name']);      
        $supervisor = $districts[$i]['supervisor'];
-       $unique_companionships='';
                
        // Select all the unique companionship numbers for this district
        $sql = "SELECT distinct companionship FROM eq_companionship where valid=1 and district=". $districts[$i]['district'];
-
        $this->db->query($sql,__LINE__,__FILE__);
-       $j=0;
+       $j=0; $unique_companionships = '';
        while ($this->db->next_record())
          {
            $unique_companionships[$j]['companionship'] = $this->db->f('companionship');
@@ -2652,7 +2777,7 @@ class eq
              $link_data['elder'] = $elder_id;
              $link_data['aaronic'] = $aaronic_id;
              $link_data['name'] = $name;
-             $link_data['interview'] = '';
+             $link_data['ppi'] = '';
              $link_data['action'] = 'add';
              $link = $GLOBALS['phpgw']->link('/eq/index.php',$link_data);
              $table_data.= "<tr bgcolor=". $this->t->get_var('tr_color') ."><td title=\"$phone\"><a href=$link>$name</a></td>";
@@ -2667,7 +2792,7 @@ class eq
                $month_start = "$year"."-"."$month"."-"."01";
                $month_end = "$year"."-"."$month"."-"."31";
                $month = "$month"."/"."$year";
-               $sql = "SELECT * FROM eq_interview WHERE date >= '$month_start' AND date <= '$month_end' ".
+               $sql = "SELECT * FROM eq_ppi WHERE date >= '$month_start' AND date <= '$month_end' ".
                   "AND elder=" . $elder_id . " AND aaronic=" . $aaronic_id;
                $this->db2->query($sql,__LINE__,__FILE__);
                $header_row .= "<th width=$int_width><font size=-2>$month</th>";
@@ -2683,7 +2808,7 @@ class eq
                  $link_data['elder'] = $elder_id;
                  $link_data['aaronic'] = $aaronic_id;
                  $link_data['name'] = $name;
-                 $link_data['interview'] = $this->db2->f('interview');
+                 $link_data['ppi'] = $this->db2->f('ppi');
                  $link_data['action'] = 'view';
                  $date = $this->db2->f('date');
                  $date_array = explode("-",$date);
@@ -2700,17 +2825,22 @@ class eq
          $table_data .= "<tr><td colspan=20><hr></td></tr>";
        }
        $total_companionships += $num_companionships;
-       $stat_data = "<tr><td><b><font size=-2>$num_companionships Companionships<br>Interview Quarterly Totals:</font></b></td>";
+       $stat_data = "<tr><td><b><font size=-2>$num_companionships Companionships<br>Interview Totals:</font></b></td>";
 
+       // Print the hometeaching interview stats
        for($m=$num_months; $m >=0; $m--) {
          $month = $current_month - $m;
-         if(($month % 3) == 1) { $quarter_total = $ints[$m]; }
-         else { $quarter_total += $ints[$m]; }
-         $percent = ceil(($quarter_total / $num_companionships)*100);
-         $stat_data .= "<td align=center><font size=-2><b>$quarter_total<br>$percent%</font></b></td>";
+         if($month < 0) { $month = 12 + $month; } // Handle going backwards over a year boundary
+         $month_begins = $month % $this->monthly_hometeaching_interview_stats;
+         //print "$month % $this->monthly_hometeaching_interview_stats = $month_begins <br>";
+         if($this->monthly_hometeaching_interview_stats == 1) { $month_begins = 1; }
+         if(($month_begins) == 1) { $total = $ints[$m]; }
+         else { $total += $ints[$m]; }
+         $percent = ceil(($total / $num_companionships)*100);
+         $stat_data .= "<td align=center><font size=-2><b>$total<br>$percent%</font></b></td>";
        }
        $stat_data .= "</tr>";
-
+       
        $this->t->set_var('table_width',$table_width);
        $this->t->set_var('header_row',$header_row);
        $this->t->set_var('table_data',$table_data);
@@ -2718,18 +2848,21 @@ class eq
        $this->t->fp('list','district_list',True);
       }
 
-      // Display the totals, cummulative per quarter
-      $quarter_total = 0;
-      $totals = "<tr><td><b><font size=-2>$total_companionships Total Comps<br>Interview Quarterly Totals:</font></b></td>";
+      // Display the totals
+      $total = 0;
+      $totals = "<tr><td><b><font size=-2>$total_companionships Total Comps<br>Interview Totals:</font></b></td>";
       for($m=$num_months; $m >=0; $m--) {
        $month = $current_month - $m;
-       if(($month % 3) == 1) { $quarter_total = $total_ints[$m]; }
-       else { $quarter_total += $total_ints[$m]; }
-       $percent = ceil(($quarter_total / $total_companionships)*100);
-       $totals .= "<td align=center><font size=-2><b>$quarter_total<br>$percent%</font></b></td>";
+       if($month < 0) { $month = 12 + $month; } // Handle going backwards over a year boundary
+       $month_begins = $month % $this->monthly_hometeaching_interview_stats;
+       if($this->monthly_hometeaching_interview_stats == 1) { $month_begins = 1; }
+       if(($month_begins) == 1) { $total = $total_ints[$m]; }
+       else { $total += $total_ints[$m]; }
+       $percent = ceil(($total / $total_companionships)*100);
+       $totals .= "<td align=center><font size=-2><b>$total<br>$percent%</font></b></td>";
       }
       $totals .= "</tr>";
-      
+          
       $this->t->set_var('totals',$totals);
       $this->t->pfp('out','int_view_t');
       $this->save_sessiondata(); 
@@ -2745,47 +2878,46 @@ class eq
       $this->t->set_var('done_action',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.int_view'));
       $this->t->set_var('readonly','');
       $this->t->set_var('disabled','');
+      $this->t->set_var('eqpresppi_checked','');
       
       $action = get_var('action',array('GET','POST'));
       $companionship = get_var('companionship',array('GET','POST'));
       $interviewer = get_var('interviewer',array('GET','POST'));      
       $name = get_var('name',array('GET','POST'));
-      $interview = get_var('interview',array('GET','POST'));
+      $ppi = get_var('ppi',array('GET','POST'));
       $elder = get_var('elder',array('GET','POST'));
       $aaronic = get_var('aaronic',array('GET','POST'));
       $date = get_var('date',array('GET','POST'));
       $notes = get_var('notes',array('GET','POST'));
-      
-      $sql = "SELECT * FROM eq_district where valid=1 ORDER BY district ASC";
-      $this->db->query($sql,__LINE__,__FILE__);
-      while ($this->db->next_record())
-       {
-         $supervisor = $this->db->f('supervisor');
-         $sql = "SELECT * FROM eq_elder WHERE elder=" . $supervisor;
-         $this->db2->query($sql,__LINE__,__FILE__);
-         $this->db2->next_record();
-         $interviewer_name = $this->db2->f('name');
-         
-         if($supervisor == $interviewer) { 
-           $this->t->set_var('interviewer',$supervisor . ' selected');
-         } else {
-           $this->t->set_var('interviewer',$interviewer);
-         }
-         $this->t->set_var('interviewer_name',$interviewer_name);
-         $this->t->fp('int_list','interviewer_list',True);
-       }
+      $eqpresppi = get_var('eqpresppi',array('GET','POST'));
+
+      $sql = "SELECT * FROM eq_presidency where valid=1 and (president=1 or counselor=1 or secretary=1 or district!=0)";
+      $this->db2->query($sql,__LINE__,__FILE__);
+      while ($this->db2->next_record())
+      {
+        $elder = $this->db2->f('elder');
+        $interviewer_name = $this->db2->f('name');
+        if($elder == $interviewer) {
+          $this->t->set_var('interviewer',$interviewer . ' selected');
+        } else {
+          $this->t->set_var('interviewer',$interviewer);
+        }
+        $this->t->set_var('interviewer_name',$interviewer_name);
+        $this->t->fp('int_list','interviewer_list',True);
+      }
       
       if($action == 'save')
        {
          $notes = get_var('notes',array('POST'));
-         $this->db->query("UPDATE eq_interview set " .
-                    "   interview='" . $interview . "'" .
+         $this->db->query("UPDATE eq_ppi set " .
+                          "   ppi='" . $ppi . "'" .
                    ", interviewer='" . $interviewer . "'" .
                          ", elder='" . $elder . "'" .
                        ", aaronic='" . $aaronic . "'" .
                           ", date='" . $date . "'" .
                          ", notes='" . $notes . "'" .
-                          " WHERE interview=" . $interview,__LINE__,__FILE__);
+                     ", eqpresppi='" . $eqpresppi . "'" .
+                          " WHERE ppi=" . $ppi,__LINE__,__FILE__);
          $this->int_view();
          return false;
        }
@@ -2793,9 +2925,9 @@ class eq
       if($action == 'insert')
        {
          $notes = get_var('notes',array('POST'));
-         $this->db->query("INSERT INTO eq_interview (interviewer,elder,aaronic,date,notes) "
+         $this->db->query("INSERT INTO eq_ppi (interviewer,elder,aaronic,date,notes,eqpresppi) "
                           . "VALUES ('" . $interviewer . "','" . $elder . "','" . $aaronic . "','"
-                          . $date . "','" . $notes ."')",__LINE__,__FILE__);
+                          . $date . "','" . $notes ."','" . $eqpresppi . "')",__LINE__,__FILE__);
          $this->int_view();
          return false;
        }
@@ -2803,7 +2935,7 @@ class eq
       if($action == 'add')
        {
          $this->t->set_var('cal_date',$this->jscal->input('date','','','','','','',$this->cal_options));
-         $this->t->set_var('interview', '');
+         $this->t->set_var('ppi', '');
          $this->t->set_var('interviewer', $interviewer);
          $this->t->set_var('name',$name);
          $this->t->set_var('elder',$elder);
@@ -2812,22 +2944,23 @@ class eq
          $this->t->set_var('notes','');
          $this->t->set_var('lang_done','Cancel');
          $this->t->set_var('lang_action','Adding New Interview');
-         $this->t->set_var('actionurl',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.int_update&interview='
-                                                               . $interview . '&action=' . 'insert'));
+         $this->t->set_var('actionurl',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.int_update&ppi='
+                                                               . $ppi . '&action=' . 'insert'));
        }
 
       if($action == 'edit' || $action == 'view')
        {
-         $sql = "SELECT * FROM eq_interview WHERE interview=".$interview;
+         $sql = "SELECT * FROM eq_ppi WHERE ppi=".$ppi;
          $this->db->query($sql,__LINE__,__FILE__);
          $this->db->next_record();
-         $this->t->set_var('interview',$interview);
+         $this->t->set_var('ppi',$ppi);
          $this->t->set_var('name',$name);
          $this->t->set_var('interviewer', $this->db->f('interviewer'));
          $this->t->set_var('elder',$this->db->f('elder'));
          $this->t->set_var('aaronic',$this->db->f('aaronic'));
          $this->t->set_var('date',$this->db->f('date'));
          $this->t->set_var('notes',$this->db->f('notes'));
+         if($this->db->f('eqpresppi') == 1) { $this->t->set_var('eqpresppi_checked','checked'); }
        }
       
       if($action == 'edit')
@@ -2835,8 +2968,8 @@ class eq
          $this->t->set_var('cal_date',$this->jscal->input('date',$date,'','','','','',$this->cal_options));
          $this->t->set_var('lang_done','Cancel');
          $this->t->set_var('lang_action','Editing Interview');
-         $this->t->set_var('actionurl',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.int_update&interview='
-                                                               . $interview . '&action=' . 'save'));
+         $this->t->set_var('actionurl',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.int_update&ppi='
+                                                               . $ppi . '&action=' . 'save'));
        }
 
       if($action == 'view')
@@ -2847,8 +2980,8 @@ class eq
          $this->t->set_var('disabled','DISABLED');
          $this->t->set_var('lang_done','Done');
          $this->t->set_var('lang_action','Viewing Interview');
-         $this->t->set_var('actionurl',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.int_update&interview='
-                                                               . $interview . '&action=' . 'edit'));
+         $this->t->set_var('actionurl',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.int_update&ppi='
+                                                               . $ppi . '&action=' . 'edit'));
        }
       
       $this->t->set_var('lang_reset','Clear Form');
@@ -3098,7 +3231,7 @@ class eq
       else if($current_month >= 4 && $current_month <= 6) { $current_month=6; }
       else if($current_month >= 7 && $current_month <= 9) { $current_month=9; }
       else if($current_month >= 10 && $current_month <= 12) { $current_month=12; }
-      
+
       $sql = "SELECT * FROM eq_elder where valid=1";
       $this->db->query($sql,__LINE__,__FILE__);
       $i=0;
@@ -3114,10 +3247,10 @@ class eq
       $i=0; 
       $last_time = 0; 
       $found_sunday = 0;
-      $sunday_list[0]['date'] = date("Y-m-d", mktime(0, 0, 0, $current_month-$num_months, 1, date("y")));
+      $sunday_list[0]['date'] = date("Y-m-d", mktime(0, 0, 0, ($current_month-$num_months)+1, 1, date("y")));
       $last_date = explode("-",$sunday_list[0]['date']);
       $last_time = mktime(0, 0, 0, $last_date[1], $last_date[2], $last_date[0]);
-      $time_limit = mktime(0, 0, 0, date("m"), date("t"), date("y"));
+      $time_limit = mktime(0, 0, 0, $current_month, 31, date("y"));
       while($last_time < $time_limit)
       {
         $day = date("w",$last_time);
@@ -3128,7 +3261,8 @@ class eq
          $sunday_list[$i]['day'] = $last_date[2];
          $sunday_list[$i]['month'] = date("M",$last_time);
          $sunday_list[$i]['year'] = $last_date[0];
-         $found_sunday = 1; 
+         $found_sunday = 1;
+         $last_date = $sunday_list[$i]['date'];
        }
        $last_time += 90000;
        if($found_sunday) { $i++; $found_sunday=0; }
@@ -3517,14 +3651,45 @@ class eq
       $this->t->set_var('schedule_ppi_link',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.ppi_sched'));
       $this->t->set_var('schedule_ppi_link_title','Schedule Yearly PPIs');
       
-      $date_width=150; $time_width=200; $elder_width=200; $family_width=200;
-      $table_width=$date_width + $time_width + $elder_width + $family_width;
+      $date_width=150; $time_width=220; $elder_width=170; $family_width=180; $location_width=100;
+      $table_width=$date_width + $time_width + $elder_width + $family_width + $location_width;
       $header_row = "<th width=$date_width><font size=-2>Date</th>";
       $header_row.= "<th width=$time_width><font size=-2>Time</th>";      
       $header_row.= "<th width=$elder_width><font size=-2>Elder</th>";
       $header_row.= "<th width=$family_width><font size=-2>Family</th>";
+      $header_row.= "<th width=$location_width><font size=-2>Location</th>";
       $table_data = "";
 
+      $sql = "SELECT * FROM eq_presidency where valid=1";
+      $this->db->query($sql,__LINE__,__FILE__);
+      $i=0;
+      while ($this->db->next_record())
+       {
+         $presidency_data[$i]['id'] = $this->db->f('presidency');
+         $presidency_data[$i]['name'] = $this->db->f('name');
+         $presidency_data[$i]['elder'] = $this->db->f('elder');
+         $presidency2name[$presidency_data[$i]['id']] = $presidency_data[$i]['name'];
+         $presidency2elder[$presidency_data[$i]['id']] = $presidency_data[$i]['elder'];
+         $i++;
+       }
+      
+      $sql = "SELECT * FROM eq_family where valid=1 and elder_id != 0 ORDER BY name ASC";
+      $this->db->query($sql,__LINE__,__FILE__);
+      $i=0;
+      while ($this->db->next_record())
+       {
+         $family_id[$i] = $this->db->f('family');
+         $family_name[$i] = $this->db->f('name');
+         $familyid2name[$family_id[$i]] = $family_name[$i];
+         $sql = "SELECT * FROM eq_parent where family='$family_id[$i]'";
+         $this->db2->query($sql,__LINE__,__FILE__);
+         if($this->db2->next_record()) {
+           $familyid2address[$family_id[$i]] = $this->db2->f('address');
+         }
+         $i++;
+       }
+      array_multisort($family_name, $family_id);
+
       if($action == 'save')
        {
          $new_data = get_var('sched',array('POST'));
@@ -3534,21 +3699,51 @@ class eq
               {
                 $presidency = $entry['presidency'];
                 $appointment = $entry['appointment'];
+                $location = $entry['location'];
                 $date = $entry['date'];
                 $hour = $entry['hour'];
                 $minute = $entry['minute'];
                 $pm = $entry['pm'];
                 $elder = $entry['elder'];
                 $family = $entry['family'];
+                $location = $entry['location'];
                 if($pm) { $hour = $hour + 12; }
                 $time = $hour.':'.$minute.':'.'00';
                 $uid = 0;
 
+                // Update our location
+                if($location == "") {
+                  if($family > 0) {
+                    $family_name_array = explode(",", $familyid2name[$family]);
+                    $family_last_name = $family_name_array[0];
+                    $family_address = $familyid2address[$family];
+                    $location = "$family_last_name"." home ($family_address)";
+                  }
+                  else if($elder > 0) {
+                    $supervisor_name_array = explode(",",$presidency2name[$presidency]);
+                    $supervisor_last_name = $supervisor_name_array[0];
+                    $sql = "SELECT * FROM eq_elder where elder='$presidency2elder[$presidency]'";
+                    $this->db2->query($sql,__LINE__,__FILE__);
+                    if($this->db2->next_record()) {
+                      $indiv_id = $this->db2->f('indiv_id');
+                    }
+                    $sql = "SELECT * FROM eq_parent where indiv_id='$indiv_id'";
+                    $this->db2->query($sql,__LINE__,__FILE__);
+                    if($this->db2->next_record()) {
+                      $supervisor_address = $this->db2->f('address');
+                    }
+                    $location = "$supervisor_last_name"." home ($supervisor_address)";
+                  }
+                }
+                
                 // Zero out the family or elder if date = NULL
                 if($date == "") {
                   $elder = 0;
                   $family = 0;
+                  $location = "";
                 }
+
+                if(($elder == 0) && ($family == 0)) { $location = ""; }
                 
                 // Update an existing appointment
                 if($appointment < $this->max_appointments)
@@ -3560,7 +3755,8 @@ class eq
                        " and elder='$elder'" .
                        " and family='$family'" .
                        " and date='$date'" .
-                       " and time='$time'";
+                       " and time='$time'" .
+                       " and location='$location'";
                     $this->db->query($sql,__LINE__,__FILE__);
                     if(!$this->db->next_record()) {
                       $old_date = $this->db->f('date');
@@ -3570,6 +3766,7 @@ class eq
                                        " ,elder=" . $elder . 
                                        " ,date='" . $date . "'" .
                                        " ,time='" . $time . "'" .
+                                       " ,location='" . $location . "'" .
                                        " ,presidency='" . $presidency . "'" .
                                        " WHERE appointment=" . $appointment,__LINE__,__FILE__);
                       
@@ -3582,9 +3779,9 @@ class eq
                 else if(($appointment >= $this->max_appointments) && ($date != "") && ($time != ""))
                   {
                     //print "adding entry: appt=$appointment date: $date time: $time elder: $elder family: $family<br>";
-                    $this->db2->query("INSERT INTO eq_appointment (appointment,presidency,family,elder,date,time,uid) "
-                          . "VALUES (NULL,'" . $presidency . "','" . $family . "','"
-                          . $elder . "','" . $date . "','" . $time  . "','" . $uid ."')",__LINE__,__FILE__);
+                    $this->db2->query("INSERT INTO eq_appointment (appointment,presidency,family,elder,date,time,location,uid) "
+                          . "VALUES (NULL,'" . $presidency . "','" . $family . "','" . $elder . "','"
+                          . $date . "','" . $time  . "','" . $location . "','" . $uid ."')",__LINE__,__FILE__);
 
                     // Now reselect this entry from the database to see if we need
                     // to send an appointment out for it.
@@ -3594,7 +3791,8 @@ class eq
                        " and presidency='$presidency'" .
                        " and date='$date'" .
                        " and time='$time'" .
-                       " and uid='$uid'";
+                       " and uid='$uid'" .
+                       " and location='$location'";
                     $this->db3->query($sql,__LINE__,__FILE__);
                     if($this->db3->next_record()) {
                       // Email the appointment if warranted
@@ -3607,18 +3805,7 @@ class eq
           }
          
          $take_me_to_url = $GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.schedule');
-         Header('Location: ' . $take_me_to_url);
-       }
-
-      $sql = "SELECT * FROM eq_presidency where valid=1";
-      $this->db->query($sql,__LINE__,__FILE__);
-      $i=0;
-      while ($this->db->next_record())
-       {
-         $presidency_data[$i]['id'] = $this->db->f('presidency');
-         $presidency_data[$i]['name'] = $this->db->f('name');
-         $presidency_data[$i]['elder'] = $this->db->f('elder');
-         $i++;
+         //Header('Location: ' . $take_me_to_url);
        }
       
       $sql = "SELECT * FROM eq_elder where valid=1 ORDER BY elder ASC";
@@ -3632,17 +3819,6 @@ class eq
          $i++;
        }
       array_multisort($elder_name, $elder_id);
-
-      $sql = "SELECT * FROM eq_family where valid=1 and elder_id != 0 ORDER BY name ASC";
-      $this->db->query($sql,__LINE__,__FILE__);
-      $i=0;
-      while ($this->db->next_record())
-       {
-         $family_id[$i] = $this->db->f('family');
-         $family_name[$i] = $this->db->f('name');
-         $i++;
-       }
-      array_multisort($family_name, $family_id);
       
       for ($i=0; $i < count($presidency_data); $i++) {
        $presidency = $presidency_data[$i]['id'];
@@ -3661,6 +3837,31 @@ class eq
            $appointment = $this->db->f('appointment');
            $elder = $this->db->f('elder');
            $family = $this->db->f('family');
+           $location = $this->db->f('location');
+
+           if($location == "") {
+             if($family > 0) {
+               $family_name_array = explode(",", $familyid2name[$family]);
+               $family_last_name = $family_name_array[0];
+               $family_address = $familyid2address[$family];
+               $location = "$family_last_name"." home ($family_address)";
+             }
+             else if($elder > 0) {
+               $supervisor_name_array = explode(",",$presidency2name[$presidency]);
+               $supervisor_last_name = $supervisor_name_array[0];
+               $sql = "SELECT * FROM eq_elder where elder='$presidency2elder[$presidency]'";
+               $this->db2->query($sql,__LINE__,__FILE__);
+               if($this->db2->next_record()) {
+                 $indiv_id = $this->db2->f('indiv_id');
+               }
+               $sql = "SELECT * FROM eq_parent where indiv_id='$indiv_id'";
+               $this->db2->query($sql,__LINE__,__FILE__);
+               if($this->db2->next_record()) {
+                 $supervisor_address = $this->db2->f('address');
+               }
+               $location = "$supervisor_last_name"." home ($supervisor_address)";
+             }
+           }
            
            $date = $this->db->f('date');
            $date_array = explode("-",$date);
@@ -3684,28 +3885,11 @@ class eq
            
            // Hour & Minutes selection
            $table_data.= "<td align=center>";
-           $table_data.= '<select name=sched['.$presidency.']['.$appointment.'][hour]>';
-           foreach(range(1,12) as $num) {
-             if($hour == $num) { $selected[$num] = 'selected="selected"'; } else { $selected[$num] = ''; }
-             $table_data.= '<option value='.$num.' '.$selected[$num].'>'.$num.'</option>';
-           }
-           $table_data.= '</select>';
-           $table_data.= '&nbsp;:&nbsp;';
-           $table_data.= '<select name=sched['.$presidency.']['.$appointment.'][minute]>';
-           foreach(range(0,3) as $num) {
-             $num = $num * 15; if($num == 0) { $num = "00"; }
-             if($minute == $num) { $selected[$num] = 'selected="selected"'; } else { $selected[$num] = ''; }
-             $table_data.= '<option value='.$num.' '.$selected[$num].'>'.$num.'</option>';
-           }
-           $table_data.= '</select>';
-           $table_data.= '<select name=sched['.$presidency.']['.$appointment.'][pm]>';
-           if($pm == 0) { $table_data.= '<option value=0 selected>am</option>'; $table_data.= '<option value=1>pm</option>'; }
-           else { $table_data.= '<option value=0>am</option>'; $table_data.= '<option value=1 selected>pm</option>'; }
-           $table_data.= '</select>';
+           $table_data .= $this->get_time_selection_form($hour, $minute, $pm, $presidency, $appointment);
            $table_data.= "</td>";
            
            // Elder drop down list (for PPIs)
-           $table_data.= '<td align=center><select name=sched['.$presidency.']['.$appointment.'][elder]>';
+           $table_data.= '<td align=center><select name=sched['.$presidency.']['.$appointment.'][elder] STYLE="font-size : 8pt">';
            $table_data.= '<option value=0></option>';  
            for ($j=0; $j < count($elder_id); $j++) {
              $id = $elder_id[$j];
@@ -3716,7 +3900,7 @@ class eq
            $table_data.='</select></td>';
 
            // Family drop down list (for Visits)
-           $table_data.= '<td align=center><select name=sched['.$presidency.']['.$appointment.'][family]>';
+           $table_data.= '<td align=center><select name=sched['.$presidency.']['.$appointment.'][family] STYLE="font-size : 8pt">';
            $table_data.= '<option value=0></option>';              
            for ($j=0; $j < count($elder_id); $j++) {
              $id = $family_id[$j];
@@ -3725,6 +3909,10 @@ class eq
              $table_data.= '<option value='.$id.' '.$selected[$id].'>'.$name.' Family</option>';
            }
            $table_data.='</select></td>';
+
+           // Location text box
+           $table_data.= '<td align=center><input type=text size="25" maxlength="120" ';
+           $table_data.= 'name="sched['.$presidency.']['.$appointment.'][location]" value="'.$location.'" STYLE="font-size : 8pt">';
            
            $table_data.= '<input type=hidden name="sched['.$presidency.']['.$appointment.'][appointment]" value="'.$appointment.'">';
            $table_data.= '<input type=hidden name="sched['.$presidency.']['.$appointment.'][presidency]" value="'.$presidency.'">';
@@ -3746,29 +3934,11 @@ class eq
        
          // Time selection
          $table_data.= "<td align=center>";
-         $table_data.= '<select name=sched['.$presidency.']['.$appointment.'][hour]>';
-         $table_data.= '<option value=""></option>';
-         foreach(range(1,12) as $num) {
-           $table_data.= '<option value='.$num.' '.$selected[$num].'>'.$num.'</option>';
-         }
-         $table_data.= '</select>';
-         $table_data.= '&nbsp;:&nbsp;';
-         $table_data.= '<select name=sched['.$presidency.']['.$appointment.'][minute]>';
-         $table_data.= '<option value=""></option>';
-         foreach(range(0,3) as $num) {
-           $num = $num * 15; if($num == 0) { $num = "00"; }
-           $table_data.= '<option value='.$num.'>'.$num.'</option>';
-         }
-         $table_data.= '</select>';
-         $table_data.= '<select name=sched['.$presidency.']['.$appointment.'][pm]>';
-         $table_data.= '<option value=""></option>';
-         $table_data.= '<option value=0>am</option>';
-         $table_data.= '<option value=1>pm</option>';
-         $table_data.= '</select>';
+         $table_data .= $this->get_time_selection_form(0, 0, 0, $presidency, $appointment);
          $table_data.= "</td>";
          
          // Elder drop down list
-         $table_data.= '<td align=center><select name=sched['.$presidency.']['.$appointment.'][elder]>';
+         $table_data.= '<td align=center><select name=sched['.$presidency.']['.$appointment.'][elder] STYLE="font-size : 8pt">';
          $table_data.= '<option value=0></option>';  
          for ($j=0; $j < count($elder_id); $j++) {
            $id = $elder_id[$j];
@@ -3778,7 +3948,7 @@ class eq
          $table_data.='</select></td>';
          
          // Family drop down list
-         $table_data.= '<td align=center><select name=sched['.$presidency.']['.$appointment.'][family]>';
+         $table_data.= '<td align=center><select name=sched['.$presidency.']['.$appointment.'][family] STYLE="font-size : 8pt">';
          $table_data.= '<option value=0></option>';        
          for ($j=0; $j < count($elder_id); $j++) {
            $id = $family_id[$j];
@@ -3786,6 +3956,10 @@ class eq
            $table_data.= '<option value='.$id.'>'.$name.' Family</option>';
          }
          $table_data.='</select></td>';
+
+         // Location text box
+         $table_data.= '<td align=center><input type=text size="25" maxlength="120" ';
+         $table_data.= 'name="sched['.$presidency.']['.$appointment.'][location]" value="" STYLE="font-size : 8pt">';
          
          $table_data.= '<input type=hidden name="sched['.$presidency.']['.$appointment.'][appointment]" value="'.$appointment.'">';
          $table_data.= '<input type=hidden name="sched['.$presidency.']['.$appointment.'][presidency]" value="'.$presidency.'">';
@@ -3804,7 +3978,39 @@ class eq
       $this->t->pfp('out','sched_t');
       $this->save_sessiondata();   
     }
-  
+
+  function email()
+    {
+      $this->t->set_file(array('email_t' => 'email.tpl'));
+      $this->t->set_block('email_t','elder_list','list');
+
+      $action = get_var('action',array('GET','POST'));
+      
+      $this->t->set_var('actionurl',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.email'));
+      $this->t->set_var('title','EQ Email Tool');
+
+      $this->t->set_var('lang_email','Send Email');
+      $this->t->set_var('lang_reset','Cancel');
+      
+      $this->t->set_var('email_member_link',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.email&action=member'));
+      $this->t->set_var('email_member_link_title','Email Quorum Member');
+
+      $this->t->set_var('email_quorum_link',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.email&action=quorum'));
+      $this->t->set_var('email_quorum_link_title','Email Quorum');
+      
+      $this->t->set_var('email_reminder_link',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.email&action=reminder'));
+      $this->t->set_var('email_reminder_link_title','Email Reminders');
+
+      $this->t->set_var('email_edit_link',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.email&action=edit'));
+      $this->t->set_var('email_edit_link_title','Edit Email Addresses');
+
+      $table_width=600;
+      $this->t->set_var('table_width',$table_width);
+      
+      $this->t->pfp('out','email_t');
+      $this->save_sessiondata();   
+    }
+
   function admin()
     {
       $this->t->set_file(array('admin_t' => 'admin.tpl'));
@@ -3844,6 +4050,12 @@ class eq
            if(!move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
              $uploadstatus = "<b><font color=red> -E- Unable to move the uploaded file to ";
              $uploadstatus.= "the target path (check the path and permissions) of: $target_path</font></b>";
+             $uploadstatus = "<b>The following file was uploaded successfully: </b><br><br>";
+             $uploadstatus.= "Tmp Filename : " . $_FILES['uploadedfile']['tmp_name'] . "<br>";
+             $uploadstatus.= "Filename     : " . $_FILES['uploadedfile']['name'] . "<br>";
+             $uploadstatus.= "Type         : " . $_FILES['uploadedfile']['type'] . "<br>";
+             $uploadstatus.= "Size         : " . $_FILES['uploadedfile']['size'] . "<br>";
+             $uploadstatus.= "Error        : " . $_FILES['uploadedfile']['error'] . "<br>";     
              $this->t->set_var('uploadstatus',$uploadstatus);
              $this->t->pfp('uploadhandle','upload',True);
              return 0;
@@ -3884,12 +4096,11 @@ class eq
            
            # unzip the data into this directory
            print "-> Unzipping the data<br>\n";
-           $data_file = $data_dir . '';
-           exec('unzip ' . $data_dir . '/*.zip -d ' . $data_dir . ' 2>&1', $result, $return_code);
+           exec($this->unzip_path .' -u '. $data_dir . '/*.zip -d ' . $data_dir . ' 2>&1', $result, $return_code);
            if($return_code != 0) {
              print implode('\n',$result) . "<br>";
              print "<b><font color=red>";
-             print "-E- Unable to unzip the uploaded file into the data dir. Aborting import.";
+             print "-E- Unable to unzip the uploaded file into the data dir: $data_dir. Aborting import.";
              print "</font></b>";
              return 0;
            }
@@ -4189,6 +4400,7 @@ class eq
        {
          $appointment = $this->db->f('appointment');
          $presidency = $this->db->f('presidency');
+         $location = $this->db->f('location');
          $interviewer = "";
          $email = "";
          $elder = $this->db->f('elder');
@@ -4197,7 +4409,6 @@ class eq
          $family_name = "";
          $appt_name = "";
          $phone = "";
-         $location = "";
          $uid = $this->db->f('uid');
                    
          // Extract the year, month, day, hours, minutes, seconds from the appointment time
@@ -4211,10 +4422,7 @@ class eq
          // Format the appointment time into an iCal UTC equivalent
          $dtstamp = gmdate("Ymd"."\T"."His"."\Z");
          $dtstart = gmdate("Ymd"."\T"."His"."\Z", mktime($hour,$minute,$seconds,$month,$day,$year));
-         
-         // Set the email address of the person making the appointment
-         $from = $GLOBALS['phpgw_info']['user']['fullname'] . "<" .
-                 $GLOBALS['phpgw_info']['user']['preferences']['email']['address'] . ">";
+         $dtstartstr = date("l, F d, o g:i A", mktime($hour,$minute,$seconds,$month,$day,$year));
          
          $sql = "SELECT * FROM eq_presidency where presidency='$presidency'";
          $this->db2->query($sql,__LINE__,__FILE__);
@@ -4223,6 +4431,9 @@ class eq
            $interviewer = $this->db2->f('name');
          }
 
+         // Set the email address of the interviewer
+         $from = $email;
+
          if($elder > 0) { 
            $sql = "SELECT * FROM eq_elder where elder='$elder'";
            $this->db2->query($sql,__LINE__,__FILE__);
@@ -4230,8 +4441,7 @@ class eq
              $elder_name = $this->db2->f('name');
              $phone = $this->db2->f('phone');
              $appt_name = $elder_name . " Interview";
-             $location = "$interviewer"."'s home";
-             $duration = 1800; // 30 minutes
+             $duration = $this->default_ppi_appt_duration * 60;
            }
          }
 
@@ -4248,16 +4458,13 @@ class eq
              if($this->db3->next_record()) {
                $phone = $this->db3->f('phone');
              }
-             $sql = "SELECT * FROM eq_parent where family='$family'";
-             $this->db3->query($sql,__LINE__,__FILE__);
-             if($this->db3->next_record()) {
-               $location=$this->db3->f('address');
-             }
-             $duration = 2700; // 45 minutes
+             $duration = $this->default_visit_appt_duration * 60;
            }
          }
 
          $dtend = gmdate("Ymd"."\T"."His"."\Z", mktime($hour,$minute,$seconds+$duration,$month,$day,$year));
+         $dtendstr = date("g:i A", mktime($hour,$minute,$seconds+$duration,$month,$day,$year));
+         $date = $dtstartstr . "-" . $dtendstr;
          $description = "$appt_name : $phone";
          
          if(($uid == 0) && ($appt_name != "")) { 
@@ -4273,7 +4480,7 @@ class eq
 
            $action = "PUBLISH";
            $this->send_ical_appt($action, $email, $from, $subject, $dtstamp, $dtstart,
-                                 $dtend, $location, $appt_name, $description, $uid);
+                                 $dtend, $date, $location, $appt_name, $description, $uid);
            
          } else if(($uid != 0) && ($appt_name == "")) {
            // Remove the calendar item for this appointment since it has already been sent
@@ -4287,7 +4494,7 @@ class eq
            
            $action = "CANCEL";
            $this->send_ical_appt($action, $email, $from, $subject, $dtstamp, $dtstart,
-                                 $dtend, $location, $appt_name, $description, $uid);
+                                 $dtend, $date, $location, $subject, $subject, $uid);
            
          } else if($uid != 0) {
            // Update the existing appointment since we have changed it
@@ -4296,7 +4503,7 @@ class eq
            $subject = "Canceled: $appt_date $appt_time";
            $action = "CANCEL";
            $this->send_ical_appt($action, $email, $from, $subject, $dtstamp, $dtstart,
-                                 $dtend, $location, $appt_name, $description, $uid);
+                                 $dtend, $date, $location, $subject, $subject, $uid);
            
            $uid = rand() . rand(); // Generate a random identifier for this appointment
            $this->db->query("UPDATE eq_appointment set" .
@@ -4306,7 +4513,7 @@ class eq
            $subject = "Updated: $appt_name";       
            $action = "PUBLISH";
            $this->send_ical_appt($action, $email, $from, $subject, $dtstamp, $dtstart,
-                                 $dtend, $location, $appt_name, $description, $uid);
+                                 $dtend, $date, $location, $appt_name, $description, $uid);
          }
          
        }
@@ -4314,16 +4521,36 @@ class eq
       return true;
     }
 
-  function send_ical_appt($action, $to, $from, $subject, $dtstamp, $dtstart, $dtend, $location, $summary, $description, $uid)
+  function send_ical_appt($action, $to, $from, $subject, $dtstamp, $dtstart, $dtend, $date, $location, $summary, $description, $uid)
     {
-      $headers = 'From: ' . "$from" . "\n" .
-        'Reply-To: ' . "$from" . "\n" .
-        'X-Mailer: PHP/' . phpversion() . "\n" .
-        'Content-Type: text/calendar;' . "\n" .
-        'Content-Transfer-Encoding: 7bit' . "\n";
-      
-      //$message = "phone: $phone date: $date time: $time";
-      $message ="";
+      // Initialize our local variables
+      $boundary = "=MIME_APPOINTMENT_BOUNDARY";
+      $message = "";
+      $headers = "";
+
+      // Form the headers for the email message
+      $headers.="X-Mailer: PHP/" . phpversion() . "\n";
+      $headers.="Mime-Version: 1.0\n";
+      $headers.="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
+      $headers.="Content-Disposition: inline\n";
+      $headers.="Reply-To: $from\n";
+      $headers.="From: $from\n";
+
+      // Print the plaintext version of the appointment
+      $message.="--$boundary\n";
+      $message.="Content-Type: text/plain; charset=us-ascii\n";
+      $message.="Content-Disposition: inline\n";
+      $message.="\n";
+      $message.="What: $description\n";
+      $message.="When: $date\n";
+      $message.="Where: $location\n";
+      $message.="\n";
+      
+      // Print the .ics attachment version of the appointment
+      $message.="--$boundary\n";
+      $message.="Content-Type: text/calendar; charset=us-ascii\n";
+      $message.="Content-Disposition: attachment; filename=\"appointment.ics\"\n";
+      $message.="\n";
       $message.="BEGIN:VCALENDAR" . "\n";
       $message.="VERSION:2.0" . "\n";
       $message.="PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN" . "\n";
@@ -4342,10 +4569,65 @@ class eq
       $message.="CLASS:PUBLIC" . "\n";
       $message.="END:VEVENT" . "\n";
       $message.="END:VCALENDAR" . "\n";
-      
+
+      // Complete the message
+      $message.="--$boundary\n";
+
+      // Send the message
       mail($to, $subject, $message, $headers);
       
     }
+
+  function get_time_selection_form($hour, $minute, $pm, $presidency, $appointment)
+    {
+      $form_data = "";
+      $blank = 0;
+      
+      if($hour == 0) { $blank = 1; }
+
+      if($this->time_drop_down_lists == 1) {
+       // Create drop down lists to get the time
+       $form_data.= '<select name=sched['.$presidency.']['.$appointment.'][hour]>';
+       if($blank == 1) { $form_data.= '<option value=""></option>'; }
+       foreach(range(1,12) as $num) {
+         if($hour == $num) { $selected = 'selected="selected"'; } else { $selected = ''; }
+         $form_data.= '<option value='.$num.' '.$selected.'>'.$num.'</option>';
+       }
+       $form_data.= '</select>';
+       $form_data.= '&nbsp;:&nbsp;';
+       $form_data.= '<select name=sched['.$presidency.']['.$appointment.'][minute]>';
+       if($blank == 1) { $form_data.= '<option value=""></option>'; }
+       $num = 0;
+       while($num < 60) {
+         if($num < 10) { $num = "0" . "$num"; }
+         if($minute == $num) { $selected = 'selected="selected"'; } else { $selected = ''; }
+         if($blank == 1) { $selected = ""; }
+         $form_data.= '<option value='.$num.' '.$selected.'>'.$num.'</option>';
+         $num = $num + $this->time_drop_down_list_inc;
+       }
+       $form_data.= '</select>';
+      } else {
+       // Use free form text fields to get the time
+       if($blank == 1) { $hour = ""; $minute = ""; $ampm = ""; }
+       $form_data.= '<input type=text size=2 name=sched['.$presidency.']['.$appointment.'][hour] value='.$hour.'>';
+       $form_data.= ':';
+       $form_data.= '<input type=text size=2 name=sched['.$presidency.']['.$appointment.'][minute] value='.$minute.'>';
+       $form_data.= '&nbsp;';
+      }
+      // Always use a drop-down select form for am/pm
+      $form_data.= '<select name=sched['.$presidency.']['.$appointment.'][pm]>';
+      if($blank == 0) { 
+       if($pm == 0) { $form_data.= '<option value=0 selected>am</option>'; $form_data.= '<option value=1>pm</option>'; }
+       if($pm == 1) { $form_data.= '<option value=0>am</option>'; $form_data.= '<option value=1 selected>pm</option>'; }
+      } else {
+       $form_data.= '<option value=""></option>';
+       $form_data.= '<option value=0>am</option>';
+       $form_data.= '<option value=1>pm</option>';
+      }
+      $form_data.= '</select>';
+      
+      return $form_data;
+    }
 }
 
 ?>