X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=WEB-INF%2Flib%2FttOrgImportHelper.class.php;h=622b3fec51f67d1fef7df8df1e5dbff14c913841;hb=56f1fd19f2c9c72878395b3275f03f192ccca082;hp=7c00f25436b4534b3a0e77eccd602aa23f37db58;hpb=a9354220ac7de34e59172d112884acab96f37538;p=timetracker.git diff --git a/WEB-INF/lib/ttOrgImportHelper.class.php b/WEB-INF/lib/ttOrgImportHelper.class.php index 7c00f254..622b3fec 100644 --- a/WEB-INF/lib/ttOrgImportHelper.class.php +++ b/WEB-INF/lib/ttOrgImportHelper.class.php @@ -31,6 +31,7 @@ import('ttRoleHelper'); import('ttTaskHelper'); import('ttProjectHelper'); import('ttClientHelper'); +import('ttInvoiceHelper'); // ttOrgImportHelper - this class is a future replacement for ttImportHelper. // Currently, it is work in progress. @@ -44,19 +45,21 @@ class ttOrgImportHelper { 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. -- 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. + var $top_role_id = 0; // Top role id. // Entity maps for current group. They map XML ids with database ids. var $currentGroupRoleMap = array(); var $currentGroupTaskMap = array(); var $currentGroupProjectMap = array(); var $currentGroupClientMap = array(); + var $currentGroupUserMap = array(); + var $currentGroupInvoiceMap = array(); + var $currentGroupLogMap = array(); // Constructor. function __construct(&$errors) { $this->errors = &$errors; + $this->top_role_id = ttRoleHelper::getRoleByRank(512, 0); } // startElement - callback handler for opening tag of an XML element in the file. @@ -86,8 +89,23 @@ class ttOrgImportHelper { 'org_id' => $this->org_id, 'name' => $attrs['NAME'], 'currency' => $attrs['CURRENCY'], - 'lang' => $attrs['LANG'])); - // We only have 3 properties at the moment, while work is ongoing... + 'decimal_mark' => $attrs['DECIMAL_MARK'], + 'lang' => $attrs['LANG'], + 'date_format' => $attrs['DATE_FORMAT'], + 'time_format' => $attrs['TIME_FORMAT'], + 'week_start' => $attrs['WEEK_START'], + 'tracking_mode' => $attrs['TRACKING_MODE'], + 'project_required' => $attrs['PROJECT_REQUIRED'], + 'task_required' => $attrs['TASK_REQUIRED'], + 'record_type' => $attrs['RECORD_TYPE'], + 'bcc_email' => $attrs['BCC_EMAIL'], + 'allow_ip' => $attrs['ALLOW_IP'], + 'password_complexity' => $attrs['PASSWORD_COMPLEXITY'], + 'plugins' => $attrs['PLUGINS'], + 'lock_spec' => $attrs['LOCK_SPEC'], + 'workday_minutes' => $attrs['WORKDAY_MINUTES'], + 'custom_logo' => $attrs['CUSTOM_LOGO'], + 'config' => $attrs['CONFIG'])); // Special handling for top group. if (!$this->org_id && $this->current_group_id) { @@ -199,6 +217,100 @@ class ttOrgImportHelper { $this->currentGroupClientMap[$attrs['ID']] = $client_id; } else $this->errors->add($i18n->get('error.db')); } + + if ($name == 'USERS') { + // If we get here, we have to recycle $currentGroupUserMap. + unset($this->currentGroupUserMap); + $this->currentGroupUserMap = array(); + // User map is reconstructed after processing elements in XML. See below. + } + + if ($name == 'USER') { + // We get here when processing tags for the current group. + + $role_id = $attrs['ROLE_ID'] === '0' ? $this->top_role_id : $this->currentGroupRoleMap[$attrs['ROLE_ID']]; // 0 (not null) means top manager role. + + $user_id = ttUserHelper::insert(array( + 'group_id' => $this->current_group_id, + 'org_id' => $this->org_id, + 'role_id' => $role_id, + 'client_id' => $this->currentGroupClientMap[$attrs['CLIENT_ID']], + 'name' => $attrs['NAME'], + 'login' => $attrs['LOGIN'], + 'password' => $attrs['PASSWORD'], + 'rate' => $attrs['RATE'], + 'email' => $attrs['EMAIL'], + 'status' => $attrs['STATUS']), false); + if ($user_id) { + // Add a mapping. + $this->currentGroupUserMap[$attrs['ID']] = $user_id; + } else $this->errors->add($i18n->get('error.db')); + } + + if ($name == 'USER_PROJECT_BIND') { + if (!ttUserHelper::insertBind(array( + 'user_id' => $this->currentGroupUserMap[$attrs['USER_ID']], + 'project_id' => $this->currentGroupProjectMap[$attrs['PROJECT_ID']], + 'group_id' => $this->current_group_id, + 'org_id' => $this->org_id, + 'rate' => $attrs['RATE'], + 'status' => $attrs['STATUS']))) { + $this->errors->add($i18n->get('error.db')); + } + } + + if ($name == 'INVOICES') { + // If we get here, we have to recycle $currentGroupInvoiceMap. + unset($this->currentGroupInvoiceMap); + $this->currentGroupInvoiceMap = array(); + // Invoice map is reconstructed after processing elements in XML. See below. + } + + if ($name == 'INVOICE') { + // We get here when processing tags for the current group. + $invoice_id = ttInvoiceHelper::insert(array( + 'group_id' => $this->current_group_id, + 'org_id' => $this->org_id, + 'name' => $attrs['NAME'], + 'date' => $attrs['DATE'], + 'client_id' => $this->currentGroupClientMap[$attrs['CLIENT_ID']], + 'status' => $attrs['STATUS'])); + if ($invoice_id) { + // Add a mapping. + $this->currentGroupInvoiceMap[$attrs['ID']] = $invoice_id; + } else $this->errors->add($i18n->get('error.db')); + } + + if ($name == 'LOG') { + // If we get here, we have to recycle $currentGroupLogMap. + unset($this->currentGroupLogMap); + $this->currentGroupLogMap = array(); + // Log map is reconstructed after processing elements in XML. See below. + } + + if ($name == 'LOG_ITEM') { + // We get here when processing tags for the current group. + $log_item_id = ttTimeHelper::insert(array( + 'user_id' => $this->currentGroupUserMap[$attrs['USER_ID']], + 'group_id' => $this->current_group_id, + 'org_id' => $this->org_id, + 'date' => $attrs['DATE'], + 'start' => $attrs['START'], + 'finish' => $attrs['FINISH'], + 'duration' => $attrs['DURATION'], + 'client' => $this->currentGroupClientMap[$attrs['CLIENT_ID']], + 'project' => $this->currentGroupProjectMap[$attrs['PROJECT_ID']], + 'task' => $this->currentGroupTaskMap[$attrs['TASK_ID']], + 'invoice' => $this->currentGroupInvoiceMap[$attrs['INVOICE_ID']], + 'note' => (isset($attrs['COMMENT']) ? $attrs['COMMENT'] : ''), + 'billable' => $attrs['BILLABLE'], + 'paid' => $attrs['PAID'], + 'status' => $attrs['STATUS'])); + if ($log_item_id) { + // Add a mapping. + $this->currentGroupLogMap[$attrs['ID']] = $log_item_id; + } else $this->errors->add($i18n->get('error.db')); + } } } @@ -316,24 +428,22 @@ class ttOrgImportHelper { // createGroup function creates a new group. private function createGroup($fields) { - + global $user; global $i18n; $mdb2 = getConnection(); - $columns = '(parent_id, org_id, name, currency, lang)'; - -// $columns = '(name, currency, decimal_mark, lang, date_format, time_format, week_start, tracking_mode'. -// ', project_required, task_required, record_type, bcc_email, allow_ip, password_complexity, plugins'. -// ', lock_spec, workday_minutes, config, created, created_ip, created_by)'; + $columns = '(parent_id, org_id, name, currency, decimal_mark, lang, date_format, time_format'. + ', week_start, tracking_mode, project_required, task_required, record_type, bcc_email'. + ', allow_ip, password_complexity, plugins, lock_spec'. + ', workday_minutes, config, created, created_ip, created_by)'; $values = ' values ('; $values .= $mdb2->quote($fields['parent_id']); $values .= ', '.$mdb2->quote($fields['org_id']); $values .= ', '.$mdb2->quote(trim($fields['name'])); $values .= ', '.$mdb2->quote(trim($fields['currency'])); - //$values .= ', '.$mdb2->quote($fields['decimal_mark']); + $values .= ', '.$mdb2->quote($fields['decimal_mark']); $values .= ', '.$mdb2->quote($fields['lang']); -/* $values .= ', '.$mdb2->quote($fields['date_format']); $values .= ', '.$mdb2->quote($fields['time_format']); $values .= ', '.(int)$fields['week_start']; @@ -348,7 +458,7 @@ class ttOrgImportHelper { $values .= ', '.$mdb2->quote($fields['lock_spec']); $values .= ', '.(int)$fields['workday_minutes']; $values .= ', '.$mdb2->quote($fields['config']); - $values .= ', now(), '.$mdb2->quote($_SERVER['REMOTE_ADDR']).', '.$mdb2->quote($user->id); */ + $values .= ', now(), '.$mdb2->quote($_SERVER['REMOTE_ADDR']).', '.$mdb2->quote($user->id); $values .= ')'; $sql = 'insert into tt_groups '.$columns.$values;