public function testApproveOwnTask() { $stat = org_openpsa_projects_workflow::approve(self::$_task, 'test comment'); $this->assertTrue($stat); self::$_task->refresh(); $this->assertEquals(org_openpsa_projects_task_status_dba::CLOSED, self::$_task->status); $this->assertEquals('closed', self::$_task->status_type); $this->assertEquals('test comment', self::$_task->status_comment); $qb = org_openpsa_projects_task_status_dba::new_query_builder(); $qb->add_constraint('task', '=', self::$_task->id); $result = $qb->execute(); $this->assertEquals(sizeof($result), 2); $status = $result[0]; $this->assertEquals($status->targetPerson, 0); }
private function _list_task_statuses_between(&$data_array, $person, $from, $to) { // List user's hour reports $qb = org_openpsa_projects_task_status_dba::new_query_builder(); $qb->add_constraint('timestamp', '>=', $from); $qb->add_constraint('timestamp', '<=', $to); $qb->begin_group('OR'); $qb->add_constraint('targetPerson', '=', $person->id); $qb->add_constraint('metadata.creator', '=', $person->guid); $qb->end_group(); $task_statuses = $qb->execute(); foreach ($task_statuses as $task_status) { $time = $task_status->timestamp; $date = date('Y-m-d', $time); if (!array_key_exists($date, $data_array)) { $data_array[$date] = array(); } if (!array_key_exists($time, $data_array[$date])) { $data_array[$date][$time] = array(); } $data_array[$date][$time][$task_status->guid] = $task_status; } }
/** * Support for contacts person merge */ function org_openpsa_contacts_duplicates_merge_person(&$person1, &$person2, $mode) { switch ($mode) { case 'all': break; /* In theory we could have future things (like resource/manager ships), but now we don't support that mode, we just exit */ /* In theory we could have future things (like resource/manager ships), but now we don't support that mode, we just exit */ case 'future': return true; break; default: // Mode not implemented debug_add("mode {$mode} not implemented", MIDCOM_LOG_ERROR); return false; break; } // Transfer links from classes we drive // ** resources ** $qb_member = org_openpsa_projects_task_resource_dba::new_query_builder(); $qb_member->add_constraint('person', '=', $person2->id); $members = $qb_member->execute(); if ($members === false) { // Some error with QB debug_add('QB Error', MIDCOM_LOG_ERROR); return false; } // Transfer memberships foreach ($members as $member) { // TODO: figure out duplicate memberships and delete unneeded ones $member->person = $person1->id; debug_add("Transferred task resource #{$member->id} to person #{$person1->id} (from #{$member->person})", MIDCOM_LOG_INFO); if (!$member->update()) { debug_add("Failed to update task resource #{$member->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); return false; } } // ** task statuses ** $qb_receipt = org_openpsa_projects_task_status_dba::new_query_builder(); $qb_receipt->add_constraint('targetPerson', '=', $person2->id); $receipts = $qb_receipt->execute(); if ($receipts === false) { // Some error with QB debug_add('QB Error / status', MIDCOM_LOG_ERROR); return false; } foreach ($receipts as $receipt) { debug_add("Transferred task_status #{$receipt->id} to person #{$person1->id} (from #{$receipt->person})", MIDCOM_LOG_INFO); $receipt->targetPerson = $person1->id; if (!$receipt->update()) { // Error updating debug_add("Failed to update status #{$receipt->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); return false; } } // ** hour reports ** $qb_log = org_openpsa_projects_hour_report_dba::new_query_builder(); $qb_log->add_constraint('person', '=', $person2->id); $logs = $qb_log->execute(); if ($logs === false) { // Some error with QB debug_add('QB Error / hours', MIDCOM_LOG_ERROR); return false; } foreach ($logs as $log) { debug_add("Transferred hour_report #{$log->id} to person #{$person1->id} (from #{$log->person})", MIDCOM_LOG_INFO); $log->person = $person1->id; if (!$log->update()) { // Error updating debug_add("Failed to update hour_report #{$log->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); return false; } } // ** Task managers ** $qb_task = org_openpsa_projects_task_dba::new_query_builder(); $qb_task->add_constraint('manager', '=', $person2->id); $tasks = $qb_task->execute(); if ($tasks === false) { // Some error with QB debug_add('QB Error / tasks', MIDCOM_LOG_ERROR); return false; } foreach ($tasks as $task) { debug_add("Transferred task #{$task->id} to person #{$person1->id} (from #{$task->person})", MIDCOM_LOG_INFO); $task->manager = $person1->id; if (!$task->update()) { // Error updating debug_add("Failed to update task #{$task->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); return false; } } // Transfer metadata dependencies from classes that we drive $classes = array('org_openpsa_projects_task_resource_dba', 'org_openpsa_projects_task_status_dba', 'org_openpsa_projects_task_dba', 'org_openpsa_projects_hour_report_dba'); $metadata_fields = array('creator' => 'guid', 'revisor' => 'guid'); foreach ($classes as $class) { $ret = org_openpsa_contacts_duplicates_merge::person_metadata_dependencies_helper($class, $person1, $person2, $metadata_fields); if (!$ret) { // Failure updating metadata debug_add("Failed to update metadata dependencies in class {$class}, errsrtr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); return false; } } // All done return true; }
$contact = org_openpsa_widgets_contact::get($contact_id); echo $contact->show_inline() . " "; } } } if (count($task->contacts) > 0) { echo "<h2>" . $data['l10n']->get('contacts') . "</h2>\n"; foreach ($task->contacts as $contact_id => $display) { $contact = org_openpsa_widgets_contact::get($contact_id); echo $contact->show(); } } ?> <div class="org_openpsa_helper_box history status"> <?php $qb = org_openpsa_projects_task_status_dba::new_query_builder(); $qb->add_constraint('task', '=', $task->id); $qb->add_order('timestamp', 'DESC'); $qb->add_order('type', 'DESC'); $ret = $qb->execute(); if (is_array($ret) && count($ret) > 0) { echo "<h3>" . $data['l10n']->get('status history') . "</h3>\n"; echo "<div class=\"current-status {$task->status_type}\">" . $data['l10n']->get('task status') . ': ' . $data['l10n']->get($task->status_type) . "</div>\n"; echo "<ul>\n"; $fallback_creator = midcom_db_person::get_cached(1); foreach ($ret as $status_change) { echo "<li>"; $status_changer_label = $data['l10n']->get('system'); $target_person_label = $data['l10n']->get('system'); if ($status_change->metadata->creator && $status_change->metadata->creator != $fallback_creator->guid) { $status_changer = org_openpsa_widgets_contact::get($status_change->metadata->creator);