/** * If we have person defined populate $this->_request_data['events'] */ private function _get_events() { $this->_request_data['events'] = array(); if (!is_object($this->_request_data['person'])) { return; } $root_event = org_openpsa_calendar_interface::find_root_event(); $qb = org_openpsa_calendar_event_member_dba::new_query_builder(); $qb->add_constraint('eid.up', '=', $root_event->id); // Display events two weeks back $qb->add_constraint('eid.start', '>', mktime(0, 0, 0, date('n'), date('j') - 14, date('Y'))); $qb->add_constraint('uid', '=', $this->_request_data['person']->id); $qb->add_order('eid.start', 'ASC'); $members = $qb->execute(); if (is_array($members)) { foreach ($members as $member) { $this->_request_data['events'][] = new org_openpsa_calendar_event_dba($member->eid); } } }
/** * Populate the calendar with resources * * @param midcom_db_person $resource * @param int $from Start time * @param int $to End time */ private function _populate_calendar_resource($resource, $from, $to) { $resource_array = array('name' => $resource->firstname . ' ' . $resource->lastname, 'reservations' => array()); if ($resource->id == midcom_connection::get_user()) { $resource_array['name'] = $this->_l10n->get('me'); $resource_array['css_class'] = 'blue'; } $qb = org_openpsa_calendar_event_member_dba::new_query_builder(); // Find all events that occur during [$from, $end] $qb->begin_group('OR'); // The event begins during [$from, $to] $qb->begin_group('AND'); $qb->add_constraint('eid.start', '>=', $from); $qb->add_constraint('eid.start', '<=', $to); $qb->end_group(); // The event begins before and ends after [$from, $to] $qb->begin_group('AND'); $qb->add_constraint('eid.start', '<=', $from); $qb->add_constraint('eid.end', '>=', $to); $qb->end_group(); // The event ends during [$from, $to] $qb->begin_group('AND'); $qb->add_constraint('eid.end', '>=', $from); $qb->add_constraint('eid.end', '<=', $to); $qb->end_group(); $qb->end_group(); $qb->add_constraint('eid.up', '=', $this->_root_event->id); $qb->add_constraint('uid', '=', (int) $resource->id); $memberships = $qb->execute(); if ($memberships) { foreach ($memberships as $membership) { $event = new org_openpsa_calendar_event_dba($membership->eid); // Customize label $label_field = $this->_config->get('event_label'); if (!$label_field) { $label_field = 'title'; } $label = $event->{$label_field}; if ($label_field == 'creator') { $user = midcom::get('auth')->get_user($event->metadata->creator); $label = $user->name; } $resource_array['reservations'][$event->guid] = array('name' => $label, 'location' => $event->location, 'start' => $event->start, 'end' => $event->end, 'private' => false); if ($event->orgOpenpsaAccesstype == org_openpsa_core_acl::ACCESS_PRIVATE) { $resource_array['reservations'][$event->id]['css_class'] = ' private'; $resource_array['reservations'][$event->id]['private'] = true; } } } return $resource_array; }
private function _load_participants() { $ret = array(); if (!empty($this->_event->participants)) { //We attack this "backwards" in the sense that in the end we need the events but this is faster way to filter them $qb = org_openpsa_calendar_event_member_dba::new_query_builder(); $this->_add_event_constraints($qb, 'eid'); //Shared eventmembers reset($this->_event->participants); $qb->begin_group('OR'); foreach ($this->_event->participants as $uid => $bool) { $qb->add_constraint('uid', '=', $uid); } $qb->end_group(); $ret_ev = $qb->execute(); unset($qb); } return $ret; }
/** * Support for contacts person merge */ function org_openpsa_contacts_duplicates_merge_person(&$person1, &$person2, $mode) { switch ($mode) { case 'all': break; /* case 'future': // Calendar should have future mode but we don't support it yet break; */ /* case 'future': // Calendar should have future mode but we don't support it yet break; */ default: // Mode not implemented debug_add("mode {$mode} not implemented", MIDCOM_LOG_ERROR); return false; break; } $qb = org_openpsa_calendar_event_member_dba::new_query_builder(); $qb->begin_group('OR'); // We need the remaining persons memberships later when we compare the two $qb->add_constraint('uid', '=', $person1->id); $qb->add_constraint('uid', '=', $person2->id); $qb->end_group(); $members = $qb->execute(); if ($members === false) { // Some error with QB debug_add('QB Error', MIDCOM_LOG_ERROR); return false; } // Transfer memberships $membership_map = array(); foreach ($members as $member) { if ($member->uid != $person1->id) { debug_add("Transferred event membership #{$member->id} to person #{$person1->id} (from #{$member->uid})"); $member->uid = $person1->id; } if (!isset($membership_map[$member->eid]) || !is_array($membership_map[$member->eid])) { $membership_map[$member->eid] = array(); } $membership_map[$member->eid][] = $member; } unset($members); // Merge memberships foreach ($membership_map as $members) { foreach ($members as $member) { if (count($members) == 1) { // We only have one membership in this event, skip rest of the logic if (!$member->update()) { // Failure updating member debug_add("Failed to update eventmember #{$member->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); return false; } continue; } // TODO: Compare memberships to determine which of them are identical and thus not worth keeping if (!$member->update()) { // Failure updating member debug_add("Failed to update eventmember #{$member->id}, errstr: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); return false; } } } // Transfer metadata dependencies from classes that we drive $classes = array('org_openpsa_calendar_event_dba', 'org_openpsa_calendar_event_member_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; } } return true; }