From 074e8daef75c2b729e75f350b52935a6b7ecfba8 Mon Sep 17 00:00:00 2001 From: Nik Okuntseff Date: Sat, 17 Mar 2018 21:08:26 +0000 Subject: [PATCH] A few fixes to export-import. --- WEB-INF/lib/ttExportHelper.class.php | 2 +- WEB-INF/lib/ttImportHelper.class.php | 39 +++++++++++++++------------- WEB-INF/lib/ttRoleHelper.class.php | 6 ++++- WEB-INF/templates/footer.tpl | 2 +- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/WEB-INF/lib/ttExportHelper.class.php b/WEB-INF/lib/ttExportHelper.class.php index 67224c8e..88ea5acb 100644 --- a/WEB-INF/lib/ttExportHelper.class.php +++ b/WEB-INF/lib/ttExportHelper.class.php @@ -116,7 +116,7 @@ class ttExportHelper { fwrite($file, "\n"); foreach ($roles as $role) { fwrite($file, " roleMap[$role['id']]."\" rank=\"".$role['rank']."\"". - " rights=\"".$role['rights']."\">\n"); + " rights=\"".$role['rights']."\" status=\"".$role['status']."\">\n"); fwrite($file, " \n"); fwrite($file, " \n"); } diff --git a/WEB-INF/lib/ttImportHelper.class.php b/WEB-INF/lib/ttImportHelper.class.php index 5bc7d77a..ff2ea3c5 100644 --- a/WEB-INF/lib/ttImportHelper.class.php +++ b/WEB-INF/lib/ttImportHelper.class.php @@ -48,7 +48,9 @@ class ttImportHelper { var $canImport = true; // False if we cannot import data due to a login collision. var $teamData = array(); // Array of team data such as team name, etc. var $team_id = null; // New team 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 $top_role_id = null; // Top manager role id on the new server. // The following arrays are maps between entity ids in the file versus the database. // In the file they are sequential (1,2,3...) while in the database the entities have different ids. @@ -102,6 +104,10 @@ class ttImportHelper { // Cannot create the team here. Need to determine whether logins collide with existing logins. $this->currentElement = array(); } + if ($name == 'ROLE') { + $this->roles[$this->currentElement['ID']] = $this->currentElement; + $this->currentElement = array(); + } if ($name == 'USER') { $this->users[$this->currentElement['ID']] = $this->currentElement; $this->currentElement = array(); @@ -117,6 +123,7 @@ class ttImportHelper { // Now we can create a team. if ($this->canImport) { + $this->top_role_id = ttRoleHelper::getRoleByRank(512, 0); $team_id = ttTeamHelper::insert(array( 'name' => $this->teamData['NAME'], 'currency' => $this->teamData['CURRENCY'], @@ -136,10 +143,23 @@ class ttImportHelper { 'config' => $this->teamData['CONFIG'])); if ($team_id) { $this->team_id = $team_id; + + // Create roles. + foreach ($this->roles as $key=>$role_item) { + $role_id = ttRoleHelper::insert(array( + 'team_id' => $this->team_id, + 'name' => $role_item['NAME'], + 'rank' => $role_item['RANK'], + 'rights' => $role_item['RIGHTS'], + 'status' => $role_item['STATUS'])); + $this->roleMap[$role_item['ID']] = $role_id; + } + foreach ($this->users as $key=>$user_item) { + $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( 'team_id' => $this->team_id, - 'role_id' => $user_item['ROLE_ID'], // Note: NOT mapped value. Not implemented currently, need to fix. + 'role_id' => $role_id, 'client_id' => $user_item['CLIENT_ID'], // Note: NOT mapped value, replaced in CLIENT handler. 'name' => $user_item['NAME'], 'login' => $user_item['LOGIN'], @@ -313,23 +333,6 @@ class ttImportHelper { 'group_by' => $this->currentElement['GROUP_BY'], 'chtotalsonly' => (int) $this->currentElement['SHOW_TOTALS_ONLY'])); } - - if ($name == 'ROLE' && $this->canImport) { - $this->roleMap[$this->currentElement['ID']] = ttRoleHelper::insert(array( - 'team_id' => $this->team_id, - 'name' => $this->currentElement['NAME'], - 'rank' => $this->currentElement['RANK'], - 'rights' => $this->currentElement['RIGHTS'], - 'status' => $this->currentElement['STATUS'])); - - // Update role_id for tt_users to a mapped value. - // We did not do it during user insertion because roleMap was not ready then. - // TODO: write setMappedRole function. - /* - if ($this->currentElement['ID'] != $this->roleMap[$this->currentElement['ID']]) - ttRoleHelper::setMappedRole($this->team_id, $this->currentElement['ID'], $this->roleMap[$this->currentElement['ID']]); - */ - } $this->currentTag = ''; } diff --git a/WEB-INF/lib/ttRoleHelper.class.php b/WEB-INF/lib/ttRoleHelper.class.php index e03339aa..18396704 100644 --- a/WEB-INF/lib/ttRoleHelper.class.php +++ b/WEB-INF/lib/ttRoleHelper.class.php @@ -166,7 +166,11 @@ class ttRoleHelper { if (is_a($affected, 'PEAR_Error')) return false; - return true; + $sql = "SELECT LAST_INSERT_ID() AS last_id"; + $res = $mdb2->query($sql); + $val = $res->fetchRow(); + $last_id = $val['last_id']; + return $last_id; } // createPredefinedRoles - creates a set of predefined roles for the team to use. diff --git a/WEB-INF/templates/footer.tpl b/WEB-INF/templates/footer.tpl index 5fde5b95..bdd8e576 100644 --- a/WEB-INF/templates/footer.tpl +++ b/WEB-INF/templates/footer.tpl @@ -12,7 +12,7 @@
-
 Anuko Time Tracker 1.17.51.4094 | Copyright © Anuko | +  Anuko Time Tracker 1.17.51.4095 | Copyright © Anuko | {$i18n.footer.credits} | {$i18n.footer.license} | {$i18n.footer.improve} -- 2.20.1