A bit more work in progress on multiple levels of grouping by in reports.
[timetracker.git] / WEB-INF / lib / ttExportHelper.class.php
index 67224c8..d40ce45 100644 (file)
@@ -29,7 +29,7 @@
 import('ttTeamHelper');
 import('ttTimeHelper');
 
-// ttExportHelper - this class is used to export team data to a file.
+// ttExportHelper - this class is used to export group data to a file.
 class ttExportHelper {
   var $fileName    = null;    // Name of the file with data.
 
@@ -45,7 +45,7 @@ class ttExportHelper {
   var $customFieldOptionMap = array(); // Custop field option ids.
   var $logMap      = array(); // Time log ids.
 
-  // createDataFile creates a file with all data for a given team.
+  // createDataFile creates a file with all data for a given group.
   function createDataFile($compress = false) {
     global $user;
 
@@ -61,39 +61,41 @@ class ttExportHelper {
     fwrite($file, "<?xml version=\"1.0\"?>\n");
     fwrite($file, "<pack>\n");
 
-    // Write team info.
-    fwrite($file, "<team currency=\"".$user->currency."\" decimal_mark=\"".$user->decimal_mark."\" lang=\"".$user->lang.
+    // Write group info.
+    fwrite($file, "<group currency=\"".$user->currency."\" decimal_mark=\"".$user->decimal_mark."\" lang=\"".$user->lang.
       "\" date_format=\"".$user->date_format."\" time_format=\"".$user->time_format."\" week_start=\"".$user->week_start.
       "\" tracking_mode=\"".$user->tracking_mode."\" project_required=\"".$user->project_required."\" task_required=\"".$user->task_required.
       "\" record_type=\"".$user->record_type."\" bcc_email=\"".$user->bcc_email.
       "\" plugins=\"".$user->plugins."\" lock_spec=\"".$user->lock_spec."\" workday_minutes=\"".$user->workday_minutes.
       "\" config=\"".$user->config.
       "\">\n");
-    fwrite($file, "  <name><![CDATA[".$user->team."]]></name>\n");
-    fwrite($file, "</team>\n");
+    fwrite($file, "  <name><![CDATA[".$user->group."]]></name>\n");
+    fwrite($file, "  <allow_ip><![CDATA[".$user->allow_ip."]]></allow_ip>\n");
+    fwrite($file, "  <password_complexity><![CDATA[".$user->password_complexity."]]></password_complexity>\n");
+    fwrite($file, "</group>\n");
 
     // Prepare role map.
-    $roles = ttExportHelper::getAllRoles();
+    $roles = $this->getRoles();
     foreach ($roles as $key=>$role_item)
       $this->roleMap[$role_item['id']] = $key + 1;
 
     // Prepare user map.
-    $users = ttExportHelper::getAllUsers();
+    $users = $this->getUsers();
     foreach ($users as $key=>$user_item)
       $this->userMap[$user_item['id']] = $key + 1;
 
     // Prepare project map.
-    $projects = ttTeamHelper::getAllProjects($user->team_id, true);
+    $projects = ttTeamHelper::getAllProjects($user->group_id, true);
     foreach ($projects as $key=>$project_item)
       $this->projectMap[$project_item['id']] = $key + 1;
 
     // Prepare task map.
-    $tasks = ttTeamHelper::getAllTasks($user->team_id, true);
+    $tasks = ttTeamHelper::getAllTasks($user->group_id, true);
     foreach ($tasks as $key=>$task_item)
       $this->taskMap[$task_item['id']] = $key + 1;
 
     // Prepare client map.
-    $clients = ttTeamHelper::getAllClients($user->team_id, true);
+    $clients = ttTeamHelper::getAllClients($user->group_id, true);
     foreach ($clients as $key=>$client_item)
       $this->clientMap[$client_item['id']] = $key + 1;
 
@@ -103,12 +105,12 @@ class ttExportHelper {
       $this->invoiceMap[$invoice_item['id']] = $key + 1;
 
     // Prepare custom fields map.
-    $custom_fields = ttTeamHelper::getAllCustomFields($user->team_id);
+    $custom_fields = ttTeamHelper::getAllCustomFields($user->group_id);
     foreach ($custom_fields as $key=>$custom_field)
       $this->customFieldMap[$custom_field['id']] = $key + 1;
 
     // Prepare custom field options map.
-    $custom_field_options = ttTeamHelper::getAllCustomFieldOptions($user->team_id);
+    $custom_field_options = ttTeamHelper::getAllCustomFieldOptions($user->group_id);
     foreach ($custom_field_options as $key=>$option)
       $this->customFieldOptionMap[$option['id']] = $key + 1;
 
@@ -116,7 +118,7 @@ class ttExportHelper {
     fwrite($file, "<roles>\n");
     foreach ($roles as $role) {
       fwrite($file, "  <role id=\"".$this->roleMap[$role['id']]."\" rank=\"".$role['rank']."\"".
-        " rights=\"".$role['rights']."\">\n");
+        " rights=\"".$role['rights']."\" status=\"".$role['status']."\">\n");
       fwrite($file, "    <name><![CDATA[".$role['name']."]]></name>\n");
       fwrite($file, "  </role>\n");
     }
@@ -164,7 +166,7 @@ class ttExportHelper {
 
     // Write user to project binds.
     fwrite($file, "<user_project_binds>\n");
-    $user_binds = ttTeamHelper::getUserToProjectBinds($user->team_id);
+    $user_binds = ttTeamHelper::getUserToProjectBinds($user->group_id);
     foreach ($user_binds as $bind) {
       $user_id = $this->userMap[$bind['user_id']];
       $project_id = $this->projectMap[$bind['project_id']];
@@ -222,7 +224,7 @@ class ttExportHelper {
     unset($custom_field_options);
 
     // Write monthly quotas.
-    $quotas = ttTeamHelper::getMonthlyQuotas($user->team_id);
+    $quotas = ttTeamHelper::getMonthlyQuotas($user->group_id);
     fwrite($file, "<monthly_quotas>\n");
     foreach ($quotas as $quota) {
       fwrite($file, "  <monthly_quota year=\"".$quota['year']."\" month=\"".$quota['month']."\" minutes=\"".$quota['minutes']."\"/>\n");
@@ -237,7 +239,7 @@ class ttExportHelper {
       foreach ($records as $record) {
         $key++;
         $this->logMap[$record['id']] = $key;
-        fwrite($file, "  <log_item id=\"$key\" timestamp=\"".$record['timestamp']."\" user_id=\"".$this->userMap[$record['user_id']]."\" date=\"".$record['date']."\" start=\"".$record['start']."\" finish=\"".$record['finish']."\" duration=\"".($record['start']?"":$record['duration'])."\" client_id=\"".$this->clientMap[$record['client_id']]."\" project_id=\"".$this->projectMap[$record['project_id']]."\" task_id=\"".$this->taskMap[$record['task_id']]."\" invoice_id=\"".$this->invoiceMap[$record['invoice_id']]."\" billable=\"".$record['billable']."\" paid=\"".$record['paid']."\" status=\"".$record['status']."\">\n");
+        fwrite($file, "  <log_item id=\"$key\" user_id=\"".$this->userMap[$record['user_id']]."\" date=\"".$record['date']."\" start=\"".$record['start']."\" finish=\"".$record['finish']."\" duration=\"".($record['start']?"":$record['duration'])."\" client_id=\"".$this->clientMap[$record['client_id']]."\" project_id=\"".$this->projectMap[$record['project_id']]."\" task_id=\"".$this->taskMap[$record['task_id']]."\" invoice_id=\"".$this->invoiceMap[$record['invoice_id']]."\" billable=\"".$record['billable']."\" paid=\"".$record['paid']."\" status=\"".$record['status']."\">\n");
         fwrite($file, "    <comment><![CDATA[".$record['comment']."]]></comment>\n");
         fwrite($file, "  </log_item>\n");
       }
@@ -246,7 +248,7 @@ class ttExportHelper {
     unset($records);
 
     // Write custom field log.
-    $custom_field_log = ttTeamHelper::getCustomFieldLog($user->team_id);
+    $custom_field_log = ttTeamHelper::getCustomFieldLog($user->group_id);
     fwrite($file, "<custom_field_log>\n");
     foreach ($custom_field_log as $entry) {
       fwrite($file, "  <custom_field_log_entry log_id=\"".$this->logMap[$entry['log_id']]."\" field_id=\"".$this->customFieldMap[$entry['field_id']]."\" option_id=\"".$this->customFieldOptionMap[$entry['option_id']]."\" status=\"".$entry['status']."\">\n");
@@ -257,7 +259,7 @@ class ttExportHelper {
     unset($custom_field_log);
 
     // Write expense items.
-    $expense_items = ttTeamHelper::getExpenseItems($user->team_id);
+    $expense_items = ttTeamHelper::getExpenseItems($user->group_id);
     fwrite($file, "<expense_items>\n");
     foreach ($expense_items as $expense_item) {
       fwrite($file, "  <expense_item date=\"".$expense_item['date']."\" user_id=\"".$this->userMap[$expense_item['user_id']]."\" client_id=\"".$this->clientMap[$expense_item['client_id']]."\" project_id=\"".$this->projectMap[$expense_item['project_id']]."\" cost=\"".$expense_item['cost']."\" invoice_id=\"".$this->invoiceMap[$expense_item['invoice_id']]."\" paid=\"".$expense_item['paid']."\" status=\"".$expense_item['status']."\">\n");
@@ -269,7 +271,7 @@ class ttExportHelper {
 
     // Write fav reports.
     fwrite($file, "<fav_reports>\n");
-    $fav_reports = ttTeamHelper::getFavReports($user->team_id);
+    $fav_reports = ttTeamHelper::getFavReports($user->group_id);
     foreach ($fav_reports as $fav_report) {
       $user_list = '';
       if (strlen($fav_report['users']) > 0) {
@@ -291,6 +293,8 @@ class ttExportHelper {
         " period_end=\"".$fav_report['period_end']."\"".
         " show_client=\"".$fav_report['show_client']."\"".
         " show_invoice=\"".$fav_report['show_invoice']."\"".
+        " show_paid=\"".$fav_report['show_paid']."\"".
+        " show_ip=\"".$fav_report['show_ip']."\"".
         " show_project=\"".$fav_report['show_project']."\"".
         " show_start=\"".$fav_report['show_start']."\"".
         " show_duration=\"".$fav_report['show_duration']."\"".
@@ -299,7 +303,10 @@ class ttExportHelper {
         " show_end=\"".$fav_report['show_end']."\"".
         " show_note=\"".$fav_report['show_note']."\"".
         " show_custom_field_1=\"".$fav_report['show_custom_field_1']."\"".
-        " group_by=\"".$fav_report['group_by']."\"".
+        " show_work_units=\"".$fav_report['show_work_units']."\"".
+        " group_by1=\"".$fav_report['group_by1']."\"".
+        " group_by2=\"".$fav_report['group_by2']."\"".
+        " group_by3=\"".$fav_report['group_by3']."\"".
         " show_totals_only=\"".$fav_report['show_totals_only']."\">\n");
       fwrite($file, "    <name><![CDATA[".$fav_report["name"]."]]></name>\n");
       fwrite($file, "  </fav_report>\n");
@@ -356,13 +363,30 @@ class ttExportHelper {
     return true;
   }
 
-  // getAllRoles - obtains all roles defined for team.
-  static function getAllRoles() {
+  /*
+   * Note about the utility functions below.
+   * We have roughly 4 groups of operations:
+   *   1) Regular system usage for tracking time, etc.
+   *   2) Registration process - used infrequently.
+   *   3) Admin usage - used infrequently.
+   *   4) Export - used infrequently.
+   *
+   * It is tempting to have a generic function to get things done for
+   * all situations. However, as registration, export and admin access are one-off
+   * operations, while regular system usage is daily and must be efficient,
+   * the current approach is to have SEPARATE functions for each mode.
+   *
+   * This is because each mode requires a slightly different approach,
+   * and we don't want to over-complicate things.
+   */
+
+  // getRoles - obtains all roles defined for group.
+  function getRoles() {
     global $user;
     $mdb2 = getConnection();
 
     $result = array();
-    $sql = "select * from tt_roles where team_id = $user->team_id";
+    $sql = "select * from tt_roles where group_id = $user->group_id";
     $res = $mdb2->query($sql);
     $result = array();
     if (!is_a($res, 'PEAR_Error')) {
@@ -374,12 +398,12 @@ class ttExportHelper {
     return false;
   }
 
-  // The getAllUsers obtains all users in team for the purpose of export.
-  static function getAllUsers() {
+  // The getUsers obtains all users in group for the purpose of export.
+  function getUsers() {
     global $user;
     $mdb2 = getConnection();
 
-    $sql = "select u.*, r.rank from tt_users u left join tt_roles r on (u.role_id = r.id) where u.team_id = $user->team_id order by upper(u.name)"; // Note: deleted users are included.
+    $sql = "select u.*, r.rank from tt_users u left join tt_roles r on (u.role_id = r.id) where u.group_id = $user->group_id order by upper(u.name)"; // Note: deleted users are included.
     $res = $mdb2->query($sql);
     $result = array();
     if (!is_a($res, 'PEAR_Error')) {