var $canImport = true; // False if we cannot import data due to a login collision.
var $groupData = array(); // Array of group data such as group name, etc.
+ var $org_id = null; // New organization id we are importing. It is created during the import operation.
var $group_id = null; // New group id we are importing. It is created during the import operation.
var $roles = array(); // Array of arrays of role properties.
var $users = array(); // Array of arrays of user properties.
var $logMap = array(); // Time log ids.
// Constructor.
- function ttImportHelper(&$errors) {
+ function __construct(&$errors) {
$this->errors = &$errors;
}
'workday_minutes' => $this->groupData['WORKDAY_MINUTES'],
'config' => $this->groupData['CONFIG']));
if ($group_id) {
+ $this->org_id = $group_id;
$this->group_id = $group_id;
// Create roles.
foreach ($this->roles as $key=>$role_item) {
$role_id = ttRoleHelper::insert(array(
'group_id' => $this->group_id,
+ 'org_id' => $this->org_id,
'name' => $role_item['NAME'],
+ 'description' => $role_item['DESCRIPTION'],
'rank' => $role_item['RANK'],
'rights' => $role_item['RIGHTS'],
'status' => $role_item['STATUS']));
$role_id = $user_item['ROLE_ID'] === '0' ? $this->top_role_id : $this->roleMap[$user_item['ROLE_ID']]; // 0 (not null) means top manager role.
$user_id = ttUserHelper::insert(array(
'group_id' => $this->group_id,
+ 'org_id' => $this->org_id,
'role_id' => $role_id,
'client_id' => $user_item['CLIENT_ID'], // Note: NOT mapped value, replaced in CLIENT handler.
'name' => $user_item['NAME'],
$this->taskMap[$this->currentElement['ID']] =
ttTaskHelper::insert(array(
'group_id' => $this->group_id,
+ 'org_id' => $this->org_id,
'name' => $this->currentElement['NAME'],
'description' => $this->currentElement['DESCRIPTION'],
'status' => $this->currentElement['STATUS']));
$this->projectMap[$this->currentElement['ID']] =
ttProjectHelper::insert(array(
'group_id' => $this->group_id,
+ 'org_id' => $this->org_id,
'name' => $this->currentElement['NAME'],
'description' => $this->currentElement['DESCRIPTION'],
'tasks' => $mapped_tasks,
'status' => $this->currentElement['STATUS']));
}
if ($name == 'USER_PROJECT_BIND' && $this->canImport) {
- ttUserHelper::insertBind(
- $this->userMap[$this->currentElement['USER_ID']],
- $this->projectMap[$this->currentElement['PROJECT_ID']],
- $this->currentElement['RATE'],
- $this->currentElement['STATUS']);
+ ttUserHelper::insertBind(array(
+ 'user_id' => $this->userMap[$this->currentElement['USER_ID']],
+ 'project_id' => $this->projectMap[$this->currentElement['PROJECT_ID']],
+ 'group_id' => $this->group_id,
+ 'org_id' => $this->org_id,
+ 'rate' => $this->currentElement['RATE'],
+ 'status' => $this->currentElement['STATUS']));
}
if ($name == 'CLIENT' && $this->canImport) {
$this->clientMap[$this->currentElement['ID']] =
ttClientHelper::insert(array(
'group_id' => $this->group_id,
+ 'org_id' => $this->org_id,
'name' => $this->currentElement['NAME'],
'address' => $this->currentElement['ADDRESS'],
'tax' => $this->currentElement['TAX'],
$this->invoiceMap[$this->currentElement['ID']] =
ttInvoiceHelper::insert(array(
'group_id' => $this->group_id,
+ 'org_id' => $this->org_id,
'name' => $this->currentElement['NAME'],
'date' => $this->currentElement['DATE'],
'client_id' => $this->clientMap[$this->currentElement['CLIENT_ID']],
$this->logMap[$this->currentElement['ID']] =
ttTimeHelper::insert(array(
'user_id' => $this->userMap[$this->currentElement['USER_ID']],
+ 'group_id' => $this->group_id,
+ 'org_id' => $this->org_id,
'date' => $this->currentElement['DATE'],
'start' => $this->currentElement['START'],
'finish' => $this->currentElement['FINISH'],
ttExpenseHelper::insert(array(
'date' => $this->currentElement['DATE'],
'user_id' => $this->userMap[$this->currentElement['USER_ID']],
+ 'group_id' => $this->group_id,
'client_id' => $this->clientMap[$this->currentElement['CLIENT_ID']],
'project_id' => $this->projectMap[$this->currentElement['PROJECT_ID']],
'name' => $this->currentElement['NAME'],
'chnote' => (int) $this->currentElement['SHOW_NOTE'],
'chcf_1' => (int) $this->currentElement['SHOW_CUSTOM_FIELD_1'],
'chunits' => (int) $this->currentElement['SHOW_WORK_UNITS'],
- 'group_by' => $this->currentElement['GROUP_BY'],
+ 'group_by1' => $this->currentElement['GROUP_BY1'],
+ 'group_by2' => $this->currentElement['GROUP_BY2'],
+ 'group_by3' => $this->currentElement['GROUP_BY3'],
'chtotalsonly' => (int) $this->currentElement['SHOW_TOTALS_ONLY']));
}
$this->currentTag = '';
$sql = 'insert into tt_groups '.$columns.$values;
$affected = $mdb2->exec($sql);
- if (!is_a($affected, 'PEAR_Error')) {
- $group_id = $mdb2->lastInsertID('tt_groups', 'id');
- return $group_id;
- }
- return false;
+ if (is_a($affected, 'PEAR_Error')) return false;
+
+ $group_id = $mdb2->lastInsertID('tt_groups', 'id');
+
+ // Update org_id with group_id.
+ // NOTE: Both export and import need an additional effort to properly operate on subgroups.
+ // Currently we are importing one group only, which becomes a top level group.
+ $sql = "update tt_groups set org_id = $group_id where org_id is NULL and id = $group_id";
+ $affected = $mdb2->exec($sql);
+ if (is_a($affected, 'PEAR_Error')) return false;
+
+ return $group_id;
}
// insertMonthlyQuota - a helper function to insert a monthly quota.