// getSubgroups rerurns an array of subgroups for a group.
function getSubgroups($group_id) {
- return array(); // TODO: not yet implemented.
+ $mdb2 = getConnection();
+
+ $subgroups = array();
+ $sql = "select id from tt_groups where parent_id = $group_id";
+ $res = $mdb2->query($sql);
+ if (!is_a($res, 'PEAR_Error')) {
+ while ($val = $res->fetchRow()) {
+ $subgroups[] = $val;
+ }
+ }
+ return $subgroups;
}
// getUsers obtains user ids in a group.
// 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 $taskMap = array(); // Task ids.
var $clientMap = array(); // Client ids.
// Constructor.
return false;
}
+ // getTasks - obtains all tasks defined for group.
+ function getTasks() {
+ global $user;
+ $mdb2 = getConnection();
+
+ $result = array();
+ $sql = "select * from tt_tasks where group_id = $this->group_id and org_id = $user->org_id";
+ $res = $mdb2->query($sql);
+ $result = array();
+ if (!is_a($res, 'PEAR_Error')) {
+ while ($val = $res->fetchRow()) {
+ $result[] = $val;
+ }
+ return $result;
+ }
+ return false;
+ }
+
// writeData writes group data into file.
function writeData() {
foreach ($roles as $key=>$role_item)
$this->roleMap[$role_item['id']] = $key + 1;
+ // Prepare task map.
+ $tasks = $this->getTasks();
+ foreach ($tasks as $key=>$task_item)
+ $this->taskMap[$task_item['id']] = $key + 1;
+
// Prepare client map.
$clients = ttTeamHelper::getAllClients($this->group_id, true);
foreach ($clients as $key=>$client_item)
$this->clientMap[$client_item['id']] = $key + 1;
// Write roles.
- fwrite($this->file, $this->indentation."<roles>\n");
+ fwrite($this->file, $this->indentation." <roles>\n");
foreach ($roles as $role) {
- $role_part = $this->indentation.' '."<role id=\"".$this->roleMap[$role['id']]."\"";
+ $role_part = $this->indentation.' '."<role id=\"".$this->roleMap[$role['id']]."\"";
$role_part .= " name=\"".htmlentities($role['name'])."\"";
$role_part .= " description=\"".htmlentities($role['description'])."\"";
$role_part .= " rank=\"".$role['rank']."\"";
$role_part .= "></role>\n";
fwrite($this->file, $role_part);
}
- fwrite($this->file, $this->indentation."</roles>\n");
+ fwrite($this->file, $this->indentation." </roles>\n");
+
+ // Write tasks.
+ fwrite($this->file, $this->indentation." <tasks>\n");
+ foreach ($tasks as $task) {
+ $task_part = $this->indentation.' '."<task id=\"".$this->taskMap[$task['id']]."\"";
+ $task_part .= " name=\"".htmlentities($task['name'])."\"";
+ $task_part .= " description=\"".htmlentities($task['description'])."\"";
+ $task_part .= " status=\"".$task['status']."\"";
+ $task_part .= "></task>\n";
+ fwrite($this->file, $task_part);
+ }
+ fwrite($this->file, $this->indentation." </tasks>\n");
// Write users.
- fwrite($this->file, $this->indentation."<users>\n");
+ fwrite($this->file, $this->indentation." <users>\n");
foreach ($users as $user_item) {
$role_id = $user_item['rank'] == 512 ? 0 : $this->roleMap[$user_item['role_id']]; // Special role_id 0 (not null) for top manager.
- $user_part = $this->indentation.' '."<user id=\"".$this->userMap[$user_item['id']]."\"";
+ $user_part = $this->indentation.' '."<user id=\"".$this->userMap[$user_item['id']]."\"";
$user_part .= " name=\"".htmlentities($user_item['name'])."\"";
$user_part .= " login=\"".htmlentities($user_item['login'])."\"";
$user_part .= " password=\"".$user_item['password']."\"";
$user_part .= "></user>\n";
fwrite($this->file, $user_part);
}
- fwrite($this->file, $this->indentation."</users>\n");
+ fwrite($this->file, $this->indentation." </users>\n");
// Call self recursively for all subgroups.
foreach ($this->subgroups as $subgroup) {
// +----------------------------------------------------------------------+
import('ttUserHelper');
+import('ttRoleHelper');
// ttOrgImportHelper - this class is a future replacement for ttImportHelper.
// Currently, it is work in progress.
var $canImport = true; // False if we cannot import data due to a conflict such as login collision.
var $firstPass = true; // True during first pass through the file.
var $org_id = null; // Organization id (same as top group_id).
- var $current_parent_group_id = null; // Current parent group id as we parse the file.
+ var $current_group_id = null; // Current group id during parsing.
+ var $current_parent_group_id = null; // Current parent group id during parsing.
// Set when we create a new group.
- // Entities for current group.
- var $currentGroupRoles = array(); // Array of arrays of role properties.
+ // Entities for current group. -- Looks like they are not needed as we insert right away...
+ // var $currentGroupRoles = array(); // Array of arrays of role properties.
// var $currentGroupUsers = array(); // Array of arrays of user properties.
// Entity maps for current group. They map XML ids with database ids.
// We are in second pass and can import data.
if ($name == 'GROUP') {
// Create a new group.
- $group_id = $this->createGroup(array(
+ $this->current_group_id = $this->createGroup(array(
'parent_id' => $this->current_parent_group_id,
'org_id' => $this->org_id,
'name' => $attrs['NAME'],
// Special handling for top group.
if (!$this->org_id) {
- $this->org_id = $group_id;
- $sql = "update tt_groups set org_id = $group_id where org_id is NULL and id = $group_id";
+ $this->org_id = $this->current_group_id;
+ $sql = "update tt_groups set org_id = $this->current_group_id where org_id is NULL and id = $this->current_group_id";
$affected = $mdb2->exec($sql);
// TODO: design a better error handling approach for the entire import process.
}
// Set current parent group.
- $this->current_parent_group_id = $group_id;
+ $this->current_parent_group_id = $this->current_group_id;
}
if ($name == 'ROLES') {
if ($name == 'ROLE') {
// We get here when processing a <role> tag for the current group.
- // Add new role to $this->currentGroupRoles and a mapping to $this->currentGroupRoleMap.
- $this->currentGroupRoles[$attrs['ID']] = $attrs;
+ $role_id = ttRoleHelper::insert(array(
+ 'group_id' => $this->current_group_id,
+ 'org_id' => $this->org_id,
+ 'name' => $attrs['NAME'],
+ 'description' => $attrs['DESCRIPTION'],
+ 'rank' => $attrs['RANK'],
+ 'rights' => $attrs['RIGHTS'],
+ 'status' => $attrs['STATUS']));
+ // Add a mapping.
+ $this->currentGroupRoleMap[$attrs['ID']] = $role_id;
}
}
}
<br>
<table cellspacing="0" cellpadding="4" width="100%" border="0">
<tr>
- <td align="center"> Anuko Time Tracker 1.18.12.4398 | Copyright © <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
+ <td align="center"> Anuko Time Tracker 1.18.12.4399 | Copyright © <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
<a href="https://www.anuko.com/lp/tt_4.htm" target="_blank">{$i18n.footer.credits}</a> |
<a href="https://www.anuko.com/lp/tt_5.htm" target="_blank">{$i18n.footer.license}</a> |
<a href="https://www.anuko.com/lp/tt_7.htm" target="_blank">{$i18n.footer.improve}</a>