/** * @param mixed $handler_id The ID of the handler. * @param Array $args The argument list. * @param Array &$data The local request data. */ public function _handler_edit($handler_id, array $args, array &$data) { midcom::get('auth')->require_valid_user(); // Check if we get the group $this->_group = new org_openpsa_contacts_group_dba($args[0]); $this->_group->require_do('midgard:update'); if ($this->_group->orgOpenpsaObtype < org_openpsa_contacts_group_dba::MYCONTACTS) { $this->_type = 'group'; } else { $this->_type = 'organization'; } $data['controller'] = $this->get_controller('simple', $this->_group); switch ($data['controller']->process_form()) { case 'save': $indexer = new org_openpsa_contacts_midcom_indexer($this->_topic); $indexer->index($data['controller']->datamanager); // *** FALL-THROUGH *** // *** FALL-THROUGH *** case 'cancel': $prefix = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_ANCHORPREFIX); return new midcom_response_relocate($prefix . "group/" . $this->_group->guid . "/"); } $root_group = org_openpsa_contacts_interface::find_root_group(); if ($this->_group->owner && $this->_group->owner != $root_group->id) { $data['parent_group'] = new org_openpsa_contacts_group_dba($this->_group->owner); } else { $data['parent_group'] = false; } $data['group'] =& $this->_group; org_openpsa_helpers::dm2_savecancel($this); $this->bind_view_to_object($this->_group); midcom::get('head')->set_pagetitle(sprintf($this->_l10n_midcom->get('edit %s'), $this->_group->official)); org_openpsa_contacts_viewer::add_breadcrumb_path_for_group($this->_group, $this); $this->add_breadcrumb("", sprintf($this->_l10n_midcom->get('edit %s'), $this->_l10n->get($this->_type))); }
/** * @param mixed $handler_id The ID of the handler. * @param Array $args The argument list. * @param Array &$data The local request data. */ public function _handler_create($handler_id, array $args, array &$data) { midcom::get('auth')->require_valid_user(); midcom::get('auth')->require_user_do('midgard:create', null, 'org_openpsa_contacts_person_dba'); if (count($args) > 0) { // Get the organization $this->_group = new org_openpsa_contacts_group_dba($args[0]); $this->_group->require_do('midgard:create'); midcom::get('head')->set_pagetitle($this->_group->official); } $data['controller'] = $this->get_controller('create'); switch ($data['controller']->process_form()) { case 'save': // Index the person $indexer = new org_openpsa_contacts_midcom_indexer($this->_topic); $indexer->index($data['controller']->datamanager); return new midcom_response_relocate("person/{$this->_person->guid}/"); case 'cancel': return new midcom_response_relocate(''); } // Add toolbar items org_openpsa_helpers::dm2_savecancel($this); org_openpsa_contacts_viewer::add_breadcrumb_path_for_group($this->_group, $this); $this->add_breadcrumb("", sprintf($this->_l10n_midcom->get('create %s'), $this->_l10n->get('person'))); }
/** * @param mixed $handler_id The ID of the handler. * @param Array $args The argument list. * @param Array &$data The local request data. */ public function _handler_create($handler_id, array $args, array &$data) { midcom::get('auth')->require_valid_user(); $this->_type = $args[0]; $this->_parent_group = false; if (count($args) > 1) { // Get the parent organization $this->_parent_group = new org_openpsa_contacts_group_dba($args[1]); $this->_parent_group->require_do('midgard:create'); } else { // This is a root level organization, require creation permissions under the component root group midcom::get('auth')->require_user_do('midgard:create', null, 'org_openpsa_contacts_group_dba'); } $data['controller'] = $this->get_controller('create'); switch ($data['controller']->process_form()) { case 'save': // Index the organization $indexer = new org_openpsa_contacts_midcom_indexer($this->_topic); $indexer->index($data['controller']->datamanager); // Relocate to group view return new midcom_response_relocate("group/" . $this->_group->guid . "/"); case 'cancel': if ($this->_parent_group) { return new midcom_response_relocate("group/" . $this->_parent_group->guid . "/"); } else { return new midcom_response_relocate(''); } } $this->add_stylesheet(MIDCOM_STATIC_URL . "/midcom.helper.datamanager2/legacy.css"); // Add toolbar items org_openpsa_helpers::dm2_savecancel($this); midcom::get('head')->set_pagetitle($this->_l10n->get("create organization")); org_openpsa_contacts_viewer::add_breadcrumb_path_for_group($this->_parent_group, $this); $this->add_breadcrumb("", sprintf($this->_l10n_midcom->get('create %s'), $this->_l10n->get($this->_type))); }
/** * @param mixed $handler_id The ID of the handler. * @param Array $args The argument list. * @param Array &$data The local request data. */ public function _handler_customer($handler_id, array $args, array &$data) { midcom::get('auth')->require_valid_user(); try { $this->_customer = new org_openpsa_contacts_group_dba($args[0]); } catch (midcom_error $e) { $this->_customer = new org_openpsa_contacts_person_dba($args[0]); } $data['customer'] = $this->_customer; if (midcom::get('auth')->can_user_do('midgard:create', null, 'org_openpsa_invoices_invoice_dba')) { $this->_view_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "invoice/new/{$this->_request_data['customer']->guid}/", MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('create invoice'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/printer.png')); $billing_data_url = "create/" . $this->_customer->guid . "/"; $qb_billing_data = org_openpsa_invoices_billing_data_dba::new_query_builder(); $qb_billing_data->add_constraint('linkGuid', '=', $this->_customer->guid); $billing_data = $qb_billing_data->execute(); if (count($billing_data) > 0) { $billing_data_url = $billing_data[0]->guid . "/"; } $this->_view_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "billingdata/" . $billing_data_url, MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('edit billingdata', 'org.openpsa.contacts'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/edit.png', MIDCOM_TOOLBAR_ENABLED => $this->_customer->can_do('midgard:update'))); } if ($this->_request_data['contacts_url']) { $this->_view_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => $this->_request_data['contacts_url'] . (is_a($this->_customer, 'org_openpsa_contacts_group_dba') ? 'group' : 'person') . "/{$this->_request_data['customer']->guid}/", MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('go to customer'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/jump-to.png')); } $title = sprintf($this->_l10n->get('all invoices for customer %s'), $this->_request_data['customer']->get_label()); midcom::get('head')->set_pagetitle($title); $this->add_breadcrumb("", $title); }
/** * * @param mixed $handler_id The ID of the handler. * @param array &$data The local request data. */ public function _show_list($handler_id, array &$data) { if ($handler_id == 'mycontacts_xml') { $schemadb_person = midcom_helper_datamanager2_schema::load_database($this->_config->get('schemadb_person')); $datamanager = new midcom_helper_datamanager2_datamanager($schemadb_person); $xml = '<contacts></contacts>'; $simplexml = simplexml_load_string($xml); foreach ($data['mycontacts'] as $person) { $contact = $simplexml->addChild('contact'); $contact->addAttribute('guid', $person->guid); $datamanager->autoset_storage($person); $person_data = $datamanager->get_content_xml(); foreach ($person_data as $key => $value) { $contact->addChild($key, $value); } $mc = midcom_db_member::new_collector('uid', $person->id); $memberships = $mc->get_values('gid'); $qb = org_openpsa_contacts_group_dba::new_query_builder(); $qb->add_constraint('gid', 'IN', $memberships); $qb->add_constraint('orgOpenpsaObtype', '>', org_openpsa_contacts_list_dba::MYCONTACTS); $organisations = $qb->execute(); foreach ($organisations as $organisation) { $contact->addChild('company', str_replace('&', '&', ${$organisation}->get_label())); } } echo $simplexml->asXml(); } else { midcom_show_style("show-mycontacts-header"); foreach ($data['mycontacts'] as $person) { $data['person'] = $person; midcom_show_style("show-mycontacts-item"); } midcom_show_style("show-mycontacts-footer"); } }
/** * @param mixed $handler_id The ID of the handler. * @param Array $args The argument list. * @param Array &$data The local request data. */ public function _handler_notifications($handler_id, array $args, array &$data) { midcom::get('auth')->require_user_do('org.openpsa.user:manage', null, 'org_openpsa_user_interface'); $group = new org_openpsa_contacts_group_dba($args[0]); $group->require_do('midgard:update'); $controller = $this->get_controller('simple', $group); switch ($controller->process_form()) { case 'save': // Fall-through // Fall-through case 'cancel': return new midcom_response_relocate("group/" . $group->guid . "/"); } $data['notifications_dm'] =& $controller; $data['object'] = $group; midcom::get('head')->set_pagetitle($group->get_label() . ": " . $this->_l10n->get("notification settings")); $this->add_breadcrumb('group/' . $group->guid . '/', $group->get_label()); $this->add_breadcrumb("", $this->_l10n->get("notification settings")); org_openpsa_helpers::dm2_savecancel($this); }
/** * Prepares the component's indexer client */ public function _on_reindex($topic, $config, &$indexer) { $qb_organisations = org_openpsa_contacts_group_dba::new_query_builder(); $qb_organisations->add_constraint('orgOpenpsaObtype', '<>', org_openpsa_contacts_group_dba::MYCONTACTS); $organisation_schema = midcom_helper_datamanager2_schema::load_database($config->get('schemadb_group')); $qb_persons = org_openpsa_contacts_person_dba::new_query_builder(); $person_schema = midcom_helper_datamanager2_schema::load_database($config->get('schemadb_person')); $indexer = new org_openpsa_contacts_midcom_indexer($topic, $indexer); $indexer->add_query('organisations', $qb_organisations, $organisation_schema); $indexer->add_query('persons', $qb_persons, $person_schema); return $indexer; }
public function testCRUD() { midcom::get('auth')->request_sudo('org.openpsa.contacts'); $group = new org_openpsa_contacts_group_dba(); $time = time(); $group->name = 'TEST NAME' . $time; $stat = $group->create(); $this->assertFalse($stat); $group->name = 'TEST-NAME' . $time; $stat = $group->create(); $this->assertTrue($stat); $this->register_object($group); $this->assertEquals('TEST-NAME' . $time, $group->get_label()); $this->assertEquals(org_openpsa_core_acl::ACCESS_PUBLIC, $group->orgOpenpsaAccesstype); $group->official = 'TEST OFFICIAL'; $stat = $group->update(); $this->assertTrue($stat); $this->assertEquals('TEST OFFICIAL', $group->get_label()); $stat = $group->delete(); $this->assertTrue($stat); midcom::get('auth')->drop_sudo(); }
private function _get_group($autocreate = false) { if ($this->_group) { return $this->_group; } $qb = org_openpsa_contacts_list_dba::new_query_builder(); $qb->add_constraint('person', '=', $this->_user->guid); $results = $qb->execute(); if (sizeof($results) == 0) { if ($autocreate) { $this->_group = new org_openpsa_contacts_list_dba(); $this->_group->person = $this->_user->guid; midcom::get('auth')->request_sudo('org.openpsa.contacts'); $this->_group->create(); $this->_group->set_privilege('midgard:owner', $this->_user->id, MIDCOM_PRIVILEGE_ALLOW); midcom::get('auth')->drop_sudo(); } else { return false; } } else { $this->_group = $results[0]; } return $this->_group; }
<?php $project =& $data['object']; $project->get_members(); $view = $data['object_view']; $prefix = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_ANCHORPREFIX); $nap = new midcom_helper_nav(); $node = $nap->get_node($nap->get_current_node()); ?> <div class="sidebar"> <?php try { $customer = org_openpsa_contacts_group_dba::get_cached($project->customer); echo "<h2>" . $data['l10n']->get('customer') . "</h2>\n"; $customer_html = $customer->official; $siteconfig = org_openpsa_core_siteconfig::get_instance(); $contacts_url = $siteconfig->get_node_full_url('org.openpsa.contacts'); if ($contacts_url) { $customer_html = '<a href="' . $contacts_url . '/group/' . $customer->guid . '/">' . $customer_html . "</a>\n"; } echo $customer_html; } catch (midcom_error $e) { } if ($project->manager) { echo "<h2>" . $data['l10n']->get('manager') . "</h2>\n"; $contact = org_openpsa_widgets_contact::get($project->manager); echo $contact->show_inline(); } else { if (count($project->resources) > 0) { echo "<h2>" . $data['l10n']->get('resources') . "</h2>\n"; foreach ($project->resources as $contact_id => $display) {
/** * * @param mixed $handler_id The ID of the handler. * @param array &$data The local request data. */ public function _show_group_memberships($handler_id, array &$data) { // This is most likely a dynamic_load if (count($data['memberships']) > 0) { midcom_show_style("show-person-groups-header"); foreach ($data['memberships'] as $member) { try { $data['group'] = org_openpsa_contacts_group_dba::get_cached($member->gid); if ($data['group']->orgOpenpsaObtype == org_openpsa_contacts_group_dba::MYCONTACTS) { continue; } } catch (midcom_error $e) { $e->log(); continue; } $data['member'] = $member; if ($member->extra == "") { $member->extra = $this->_l10n->get('<title>'); } $data['member_title'] = $member->extra; midcom_show_style("show-person-groups-item"); } midcom_show_style("show-person-groups-footer"); } else { midcom_show_style("show-person-groups-empty"); } }
/** * List customer contact's groups */ private function _populate_schema_customers_for_contact($contact_id) { $fields =& $this->_schemadb['default']->fields; $organizations = array(); $member_mc = org_openpsa_contacts_member_dba::new_collector('uid', $contact_id); $member_mc->add_constraint('gid.orgOpenpsaObtype', '>', org_openpsa_contacts_group_dba::MYCONTACTS); $groups = $member_mc->get_values('gid'); foreach ($groups as $group) { try { $organization = org_openpsa_contacts_group_dba::get_cached($group); $organizations[$organization->id] = $organization->official; } catch (midcom_error $e) { } } //Fill the customer field to DM $fields['customer']['type_config']['options'] = $organizations; }
} } try { $owner = org_openpsa_contacts_person_dba::get_cached($invoice->owner); $entry['owner'] = $owner->name; } catch (midcom_error $e) { $entry['owner'] = ''; $e->log(); } if ($invoice->{$data['date_field']} > 0) { $entry['date'] = strftime('%Y-%m-%d', $invoice->{$data['date_field']}); } else { $entry['date'] = ''; } try { $customer = org_openpsa_contacts_group_dba::get_cached($invoice->customer); $entry['index_customer'] = $customer->official; if ($data['invoices_url']) { $entry['customer'] = "<a href=\"{$data['invoices_url']}list/customer/all/{$customer->guid}/\" title=\"{$customer->name}: {$customer->official}\">{$customer->official}</a>"; } else { $entry['customer'] = $customer->official; } } catch (midcom_error $e) { $entry['customer'] = ''; $entry['index_customer'] = ''; } $entry['index_contact'] = ''; $entry['contact'] = ''; try { $contact = org_openpsa_contacts_person_dba::get_cached($invoice->customerContact); $entry['index_contact'] = $contact->rname;
private function _show_groups() { if (!$this->show_groups || empty($this->contact_details['id'])) { return; } $mc = org_openpsa_contacts_member_dba::new_collector('uid', $this->contact_details['id']); $mc->add_constraint('gid.orgOpenpsaObtype', '>=', org_openpsa_contacts_group_dba::ORGANIZATION); $mc->add_value_property('gid'); $mc->add_value_property('extra'); $mc->execute(); $memberships = $mc->list_keys(); if ($memberships) { foreach ($memberships as $guid => $empty) { try { $group = org_openpsa_contacts_group_dba::get_cached($mc->get_subkey($guid, 'gid')); } catch (midcom_error $e) { $e->log(); continue; } echo "<li class=\"org\">"; if ($mc->get_subkey($guid, 'extra')) { echo "<span class=\"title\">" . $mc->get_subkey($guid, 'extra') . "</span>, "; } if ($group->official) { $group_label = $group->official; } else { $group_label = $group->name; } if ($this->link_contacts) { if (!self::$_contacts_url) { $this->link_contacts = false; } else { $group_label = "<a href=\"" . self::$_contacts_url . "group/{$group->guid}/\">{$group_label}</a>"; } } echo "<span class=\"organization-name\">{$group_label}</span>"; echo "</li>\n"; } } }
private function _process_member($member) { $adder = array(); $adder['campaign_member'] = $member; try { $adder['person'] = org_openpsa_contacts_person_dba::get_cached($member->person); } catch (midcom_error $e) { $e->log(); return false; } $qb_memberships = midcom_db_member::new_query_builder(); $qb_memberships->add_constraint('uid', '=', $member->person); $memberships = $qb_memberships->execute_unchecked(); if (!is_array($memberships) || count($memberships) == 0) { return $adder; } switch ($this->membership_mode) { case 'all': foreach ($memberships as $k2 => $membership) { $adder['organization_member'] = $membership; try { $adder['organization'] = org_openpsa_contacts_group_dba::get_cached($membership->gid); } catch (midcom_error $e) { debug_add("Error fetching org_openpsa_contacts_group_dba #{$membership->gid}, skipping", MIDCOM_LOG_WARN); return false; } return $adder; } break; default: // Fall-trough intentional // Fall-trough intentional case 'first': // Fall-trough intentional // Fall-trough intentional case 'last': foreach ($memberships as $k2 => $membership) { $adder['organization_member'] = $membership; try { $adder['organization'] = org_openpsa_contacts_group_dba::get_cached($membership->gid); } catch (midcom_error $e) { debug_add("Error fetching org_openpsa_contacts_group_dba #{$membership->gid}, skipping", MIDCOM_LOG_WARN); return false; } // Get only first or last membership if ($this->membership_mode != 'last') { break; } } return $adder; break; } }
/** * Prepares user data for JSON display */ public function get_row(midcom_core_dbaobject $user) { $prefix = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_ANCHORPREFIX); $entry = array(); $entry['id'] = $user->id; $lastname = trim($user->lastname); if (empty($lastname)) { $lastname = $this->_l10n->get('person') . ' #' . $user->id; } $entry['lastname'] = "<a href='" . $prefix . 'view/' . $user->guid . "/'>" . $lastname . "</a>"; $entry['index_lastname'] = $user->lastname; $entry['firstname'] = "<a href='" . $prefix . 'view/' . $user->guid . "/' >" . $user->firstname . "</a>"; $entry['index_firstname'] = $user->firstname; $account = new midcom_core_account($user); $entry['username'] = $account->get_username(); $entry['groups'] = array(); //get groups $mc_member = org_openpsa_contacts_member_dba::new_collector('uid', $user->id); $mc_member->add_constraint('gid.orgOpenpsaObtype', '<', org_openpsa_contacts_group_dba::MYCONTACTS); $mc_member->add_order('gid.official'); $mc_member->add_order('gid.name'); $gids = $mc_member->get_values('gid'); foreach ($gids as $gid) { try { $group = org_openpsa_contacts_group_dba::get_cached($gid); $entry['groups'][] = '<a href="' . $prefix . 'group/' . $group->guid . '/">' . $group->get_label() . '</a>'; } catch (midcom_error $e) { $e->log(); } } $entry['groups'] = implode(', ', $entry['groups']); return $entry; }
/** * * @param mixed $handler_id The ID of the handler. * @param array &$data The local request data. */ public function _show_action($handler_id, array &$data) { switch ($this->_view) { case "area_group_members": // This is most likely a dynamic_load $qb = new org_openpsa_qbpager('midcom_db_member', 'group_members'); $qb->add_constraint('gid', '=', $this->_request_data['group']->id); $qb->results_per_page = 10; $results = $qb->execute(); $this->_request_data['members_qb'] =& $qb; if (count($results) > 0) { midcom_show_style("show-group-persons-header"); foreach ($results as $member) { $this->_request_data['member'] = $member; if ($member->extra == "") { $member->extra = $this->_l10n->get('<title>'); } $this->_request_data['member_title'] = $member->extra; $this->_request_data['person'] = new org_openpsa_contacts_person_dba($member->uid); midcom_show_style("show-group-persons-item"); } midcom_show_style("show-group-persons-footer"); } break; case "area_group_subgroups": $qb = org_openpsa_contacts_group_dba::new_query_builder(); $qb->add_constraint('owner', '=', $this->_request_data['group']->id); $results = $qb->execute(); if (count($results) > 0) { midcom_show_style("show-group-subgroups-header"); foreach ($results as $subgroup) { $this->_request_data['subgroup'] = $subgroup; midcom_show_style("show-group-subgroups-item"); } midcom_show_style("show-group-subgroups-footer"); } break; } }
/** * Does a QB query for groups, returns false or number of matched entries * * Displays style element 'search-groups-empty' only if $displayEmpty is * set to true. */ private function _search_qb_groups() { if (!$this->_query_string) { return false; } // Search using only the fields defined in config $org_fields = explode(',', $this->_config->get('organization_search_fields')); if (!is_array($org_fields) || count($org_fields) == 0) { throw new midcom_error('Invalid organization search configuration'); } $qb_org = org_openpsa_contacts_group_dba::new_query_builder(); $qb_org->add_constraint('orgOpenpsaObtype', '<>', org_openpsa_contacts_group_dba::MYCONTACTS); $this->_apply_constraints($qb_org, $org_fields); $this->_groups = $qb_org->execute(); }
private function _import_subscribers_organization($subscriber) { $organization = null; if (array_key_exists('official', $subscriber['organization']) && $subscriber['organization']['official']) { // Perform a simple check for existing organization. More complicated duplicate checking is best left to the o.o.contacts duplicate checker $qb = org_openpsa_contacts_group_dba::new_query_builder(); if (array_key_exists('company_id', $this->_schemadbs['organization']['default']->fields) && array_key_exists('company_id', $subscriber['organization']) && $subscriber['organization']['company_id']) { // Imported data has a company id, we use that instead of name $qb->add_constraint($this->_schemadbs['organization']['default']->fields['company_id']['storage']['location'], '=', $subscriber['organization']['company_id']); } else { // Seek by official name $qb->add_constraint('official', '=', $subscriber['organization']['official']); if (array_key_exists('city', $this->_schemadbs['organization']['default']->fields) && array_key_exists('city', $subscriber['organization']) && $subscriber['organization']['city']) { // Imported data has a city, we use also that for matching $qb->add_constraint($this->_schemadbs['organization']['default']->fields['city']['storage']['location'], '=', $subscriber['organization']['city']); } } $organizations = $qb->execute_unchecked(); if (count($organizations) > 0) { // Match found, use it // Use first match $organization = array_shift($organizations); } } if (!$organization) { // We didn't have person matching the email in DB. Create a new one. $organization = new org_openpsa_contacts_group_dba(); if (!$organization->create()) { $this->_request_data['new_objects']['organization'] =& $organization; debug_add("Failed to create organization, reason " . midcom_connection::get_error_string()); return null; } } if (!$this->_datamanager_process('organization', $subscriber, $organization)) { return null; } return $organization; }
/** * Find duplicates for given all org_openpsa_contacts_group_dba objects in database * * @return array array of groups with their possible duplicates */ function check_all_groups($threshold = 1) { midcom::get()->disable_limits(); $ret = array(); $ret['objects'] = array(); $ret['p_map'] = array(); $ret['threshold'] =& $threshold; $groups = array(); $mc = org_openpsa_contacts_group_dba::new_collector('metadata.deleted', false); $mc->add_value_property('id'); $mc->add_value_property('homepage'); $mc->add_value_property('phone'); $mc->add_value_property('official'); $mc->add_value_property('street'); $mc->add_value_property('city'); $mc->execute(); $results = $mc->list_keys(); if (empty($results)) { return $ret; } foreach ($results as $guid => $result) { $group = $mc->get($guid); $groups[] = self::_normalize_group_fields($group, $guid); } $params = array(); $params['ret'] =& $ret; $params['finder'] =& $this; $params['objects'] =& $groups; $params['mode'] = 'group'; array_walk($groups, array('self', '_check_all_arraywalk'), $params); return $ret; }
public function get_customer() { try { $customer = org_openpsa_contacts_group_dba::get_cached($this->customer); } catch (midcom_error $e) { try { $customer = org_openpsa_contacts_person_dba::get_cached($this->customerContact); } catch (midcom_error $e) { $customer = null; $e->log(); } } return $customer; }
/** * * @param mixed $handler_id The ID of the handler. * @param array &$data The local request data. */ public function _show_uninvoiced($handler_id, array &$data) { $siteconfig = org_openpsa_core_siteconfig::get_instance(); $data['projects_url'] = $siteconfig->get_node_full_url('org.openpsa.projects'); midcom_show_style('show-projects-header'); foreach ($this->_customers as $customer_id => $tasks) { $data['customer'] = $customer_id; try { $customer = org_openpsa_contacts_group_dba::get_cached($customer_id); $data['customer_label'] = $customer->official; $data['disabled'] = ''; } catch (midcom_error $e) { $data['customer_label'] = $this->_l10n->get('no customer'); $data['disabled'] = ' disabled="disabled"'; } midcom_show_style('show-projects-customer-header'); $class = "even"; foreach ($tasks as $task) { $data['task'] = $task; if ($class == "even") { $class = ""; } else { $class = "even"; } $data['class'] = $class; $data['reported_hours'] = $task->reportedHours; try { $deliverable = new org_openpsa_sales_salesproject_deliverable_dba($task->agreement); $deliverable->calculate_price(false); $data['default_price'] = $deliverable->pricePerUnit; if ($deliverable->invoiceByActualUnits) { $data['invoiceable_units'] = $task->invoiceableHours; } else { $data['invoiceable_units'] = $task->plannedHours; } } catch (midcom_error $e) { $e->log(); if ($this->_config->get('default_hourly_price')) { $data['default_price'] = $this->_config->get('default_hourly_price'); $data['invoiceable_units'] = $task->invoiceableHours; } else { $data['default_price'] = ''; } } midcom_show_style('show-projects-customer-task'); } midcom_show_style('show-projects-customer-footer'); } midcom_show_style('show-projects-footer'); }