X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/timetracker.git/blobdiff_plain/e88a31092d2dbcd535a1704ed4410e92ca3be914..b5c16658c0a91c98bb4e41bb6c0e1cc254222a68:/WEB-INF/lib/ttOrgImportHelper.class.php diff --git a/WEB-INF/lib/ttOrgImportHelper.class.php b/WEB-INF/lib/ttOrgImportHelper.class.php index 01566880..89428c4c 100644 --- a/WEB-INF/lib/ttOrgImportHelper.class.php +++ b/WEB-INF/lib/ttOrgImportHelper.class.php @@ -32,6 +32,8 @@ import('ttTaskHelper'); import('ttProjectHelper'); import('ttClientHelper'); import('ttInvoiceHelper'); +import('ttCustomFieldHelper'); +import('ttExpenseHelper'); // ttOrgImportHelper - this class is a future replacement for ttImportHelper. // Currently, it is work in progress. @@ -54,6 +56,9 @@ class ttOrgImportHelper { var $currentGroupClientMap = array(); var $currentGroupUserMap = array(); var $currentGroupInvoiceMap = array(); + var $currentGroupLogMap = array(); + var $currentGroupCustomFieldMap = array(); + var $currentGroupCustomFieldOptionMap = array(); // Constructor. function __construct(&$errors) { @@ -279,6 +284,110 @@ class ttOrgImportHelper { $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')); + } + + if ($name == 'CUSTOM_FIELDS') { + // If we get here, we have to recycle $currentGroupCustomFieldMap. + unset($this->currentGroupCustomFieldMap); + $this->currentGroupCustomFieldMap = array(); + // Custom field map is reconstructed after processing elements in XML. See below. + } + + if ($name == 'CUSTOM_FIELD') { + // We get here when processing tags for the current group. + $custom_field_id = ttCustomFieldHelper::insertField(array( + 'group_id' => $this->current_group_id, + // 'org_id' => $this->org_id, TODO: add this when org_id field is added to the table. + 'type' => $attrs['TYPE'], + 'label' => $attrs['LABEL'], + 'required' => $attrs['REQUIRED'], + 'status' => $attrs['STATUS'])); + if ($custom_field_id) { + // Add a mapping. + $this->currentGroupCustomFieldMap[$attrs['ID']] = $custom_field_id; + } else $this->errors->add($i18n->get('error.db')); + } + + if ($name == 'CUSTOM_FIELD_OPTIONS') { + // If we get here, we have to recycle $currentGroupCustomFieldOptionMap. + unset($this->currentGroupCustomFieldOptionMap); + $this->currentGroupCustomFieldOptionMap = array(); + // Custom field option map is reconstructed after processing elements in XML. See below. + } + + if ($name == 'CUSTOM_FIELD_OPTION') { + // We get here when processing tags for the current group. + $custom_field_option_id = ttCustomFieldHelper::insertOption(array( + // 'group_id' => $this->current_group_id, TODO: add this when group_id field is added to the table. + // 'org_id' => $this->org_id, TODO: add this when org_id field is added to the table. + 'field_id' => $this->currentGroupCustomFieldMap[$attrs['FIELD_ID']], + 'value' => $attrs['VALUE'])); + if ($custom_field_option_id) { + // Add a mapping. + $this->currentGroupCustomFieldOptionMap[$attrs['ID']] = $custom_field_option_id; + } else $this->errors->add($i18n->get('error.db')); + } + + if ($name == 'CUSTOM_FIELD_LOG_ENTRY') { + // We get here when processing tags for the current group. + if (!ttCustomFieldHelper::insertLogEntry(array( + // 'group_id' => $this->current_group_id, TODO: add this when group_id field is added to the table. + // 'org_id' => $this->org_id, TODO: add this when org_id field is added to the table. + 'log_id' => $this->currentGroupLogMap[$attrs['LOG_ID']], + 'field_id' => $this->currentGroupCustomFieldMap[$attrs['FIELD_ID']], + 'option_id' => $this->currentGroupCustomFieldOptionMap[$attrs['OPTION_ID']], + 'value' => $attrs['VALUE'], + 'status' => $attrs['STATUS']))) { + $this->errors->add($i18n->get('error.db')); + } + } + + if ($name == 'EXPENSE_ITEM') { + // We get here when processing tags for the current group. + $expense_item_id = ttExpenseHelper::insert(array( + 'date' => $attrs['DATE'], + 'user_id' => $this->currentGroupUserMap[$attrs['USER_ID']], + 'group_id' => $this->current_group_id, + // 'org_id' => $this->org_id, TODO: add this when org_id field is added to the table. + 'client_id' => $this->currentGroupClientMap[$attrs['CLIENT_ID']], + 'project_id' => $this->currentGroupProjectMap[$attrs['PROJECT_ID']], + 'name' => $attrs['NAME'], + 'cost' => $attrs['COST'], + 'invoice_id' => $this->currentGroupInvoiceMap[$attrs['INVOICE_ID']], + 'paid' => $attrs['PAID'], + 'status' => $attrs['STATUS'])); + if (!$expense_item_id) $this->errors->add($i18n->get('error.db')); + } } }