X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=WEB-INF%2Flib%2FttExportHelper.class.php;h=c71b856da2288a67df3cccdac8efe9ec266eb49b;hb=ecf7d911c95935f8cfb2403f645cd12f93d8c3f5;hp=bf43f28c6085f81dcb86b94a54e4ec3a94b0f817;hpb=15732fdcbd4df6fdff051e6bdacc178fd1b4e5a9;p=timetracker.git diff --git a/WEB-INF/lib/ttExportHelper.class.php b/WEB-INF/lib/ttExportHelper.class.php index bf43f28c..c71b856d 100644 --- a/WEB-INF/lib/ttExportHelper.class.php +++ b/WEB-INF/lib/ttExportHelper.class.php @@ -36,6 +36,7 @@ class ttExportHelper { // The following arrays are maps between entity ids in the file versus the database. // We write to the file sequentially (1,2,3...) while in the database the entities have different ids. var $userMap = array(); // User ids. + var $roleMap = array(); // Role ids. var $projectMap = array(); // Project ids. var $taskMap = array(); // Task ids. var $clientMap = array(); // Client ids. @@ -64,14 +65,20 @@ class ttExportHelper { fwrite($file, "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."\" uncompleted_indicators=\"".$user->uncompleted_indicators."\" bcc_email=\"".$user->bcc_email. - "\" plugins=\"".$user->plugins."\" lock_spec=\"".$user->lock_spec."\" workday_hours=\"".$user->workday_hours. + "\" 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, " team."]]>\n"); fwrite($file, "\n"); + // Prepare role map. + $roles = $this->getRoles(); + foreach ($roles as $key=>$role_item) + $this->roleMap[$role_item['id']] = $key + 1; + // Prepare user map. - $users = ttTeamHelper::getAllUsers($user->team_id, true); + $users = $this->getUsers(); foreach ($users as $key=>$user_item) $this->userMap[$user_item['id']] = $key + 1; @@ -105,10 +112,22 @@ class ttExportHelper { foreach ($custom_field_options as $key=>$option) $this->customFieldOptionMap[$option['id']] = $key + 1; + // Write roles. + fwrite($file, "\n"); + foreach ($roles as $role) { + fwrite($file, " roleMap[$role['id']]."\" rank=\"".$role['rank']."\"". + " rights=\"".$role['rights']."\" status=\"".$role['status']."\">\n"); + fwrite($file, " \n"); + fwrite($file, " \n"); + } + fwrite($file, "\n"); + unset($roles); + // Write users. fwrite($file, "\n"); foreach ($users as $user_item) { - fwrite($file, " userMap[$user_item['id']]."\" login=\"".htmlentities($user_item['login'])."\" password=\"".$user_item['password']."\" role=\"".$user_item['role']."\" client_id=\"".$this->clientMap[$user_item['client_id']]."\" rate=\"".$user_item['rate']."\" email=\"".$user_item['email']."\" status=\"".$user_item['status']."\">\n"); + $role_id = $user_item['rank'] == 512 ? 0 : $this->roleMap[$user_item['role_id']]; // Special role_id 0 (not null) for top manager. + fwrite($file, " userMap[$user_item['id']]."\" login=\"".htmlentities($user_item['login'])."\" password=\"".$user_item['password']."\" role_id=\"".$role_id."\" client_id=\"".$this->clientMap[$user_item['client_id']]."\" rate=\"".$user_item['rate']."\" email=\"".$user_item['email']."\" status=\"".$user_item['status']."\">\n"); fwrite($file, " \n"); fwrite($file, " \n"); } @@ -206,7 +225,7 @@ class ttExportHelper { $quotas = ttTeamHelper::getMonthlyQuotas($user->team_id); fwrite($file, "\n"); foreach ($quotas as $quota) { - fwrite($file, " \n"); + fwrite($file, " \n"); } fwrite($file, "\n"); @@ -260,7 +279,7 @@ class ttExportHelper { $user_list .= (strlen($user_list) == 0? '' : ',').$this->userMap[$v]; } } - fwrite($file, "\tuserMap[$fav_report['user_id']]."\"". + fwrite($file, " userMap[$fav_report['user_id']]."\"". " client_id=\"".$this->clientMap[$fav_report['client_id']]."\"". " cf_1_option_id=\"".$this->customFieldOptionMap[$fav_report['cf_1_option_id']]."\"". " project_id=\"".$this->projectMap[$fav_report['project_id']]."\"". @@ -282,14 +301,15 @@ class ttExportHelper { " show_custom_field_1=\"".$fav_report['show_custom_field_1']."\"". " group_by=\"".$fav_report['group_by']."\"". " show_totals_only=\"".$fav_report['show_totals_only']."\">\n"); - fwrite($file, "\t\t\n"); - fwrite($file, "\t\n"); + fwrite($file, " \n"); + fwrite($file, " \n"); } fwrite($file, "\n"); unset($fav_reports); // Cleanup. unset($users); + $this->roleMap = array(); $this->userMap = array(); $this->projectMap = array(); $this->taskMap = array(); @@ -335,4 +355,58 @@ class ttExportHelper { fclose ($in_file); return true; } + + /* + * Note about the utility functions below. + * We have roughly 3 groups of operations: + * 1) Regular system usage for tracking time, etc. + * 2) Admin usage - used infrequently. + * 3) Export - used infrequently. + * + * TODO: we also have user registration process without initialized user. + * Perhaps we need a separate helper class for this. Think about it. + * + * It is tempting to have a generic function to get things done for + * all situations. However, as 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 team. + function getRoles() { + global $user; + $mdb2 = getConnection(); + + $result = array(); + $sql = "select * from tt_roles where team_id = $user->team_id"; + $res = $mdb2->query($sql); + $result = array(); + if (!is_a($res, 'PEAR_Error')) { + while ($val = $res->fetchRow()) { + $result[] = $val; + } + return $result; + } + return false; + } + + // The getUsers obtains all users in team 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. + $res = $mdb2->query($sql); + $result = array(); + if (!is_a($res, 'PEAR_Error')) { + while ($val = $res->fetchRow()) { + $result[] = $val; + } + return $result; + } + return false; + } }