/** * @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_day($handler_id, array $args, array &$data) { // Generate start/end timestamps for the day $requested_time = @strtotime($args[0]); if (!$requested_time) { throw new midcom_error('could not generate time from ' . $args[0]); } // Use calendar widget for time calculations $this->_request_data['calendar'] = new org_openpsa_widgets_calendar(date('Y', $requested_time), date('m', $requested_time), date('d', $requested_time)); $this->_request_data['calendar']->type = org_openpsa_widgets_calendar::DAY; $from = $this->_request_data['calendar']->get_day_start(); $to = $this->_request_data['calendar']->get_day_end(); // List user's event memberships $mc = midcom_db_eventmember::new_collector('uid', midcom_connection::get_user()); // Find all events that occur during [$from, $end] $mc->begin_group("OR"); // The event begins during [$from, $to] $mc->begin_group("AND"); $mc->add_constraint("eid.start", ">=", $from); $mc->add_constraint("eid.start", "<=", $to); $mc->end_group(); // The event begins before and ends after [$from, $to] $mc->begin_group("AND"); $mc->add_constraint("eid.start", "<=", $from); $mc->add_constraint("eid.end", ">=", $to); $mc->end_group(); // The event ends during [$from, $to] $mc->begin_group("AND"); $mc->add_constraint("eid.end", ">=", $from); $mc->add_constraint("eid.end", "<=", $to); $mc->end_group(); $mc->end_group(); $eventmembers = $mc->get_values('eid'); $this->_request_data['events'] = array(); foreach ($eventmembers as $eid) { $this->_request_data['events'][] = new org_openpsa_calendar_event_dba($eid); } }
private function _list_events_between(&$data_array, $person, $from, $to) { // List user's event memberships $qb = midcom_db_eventmember::new_query_builder(); $qb->add_constraint('uid', '=', $person); // 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(); $eventmembers = $qb->execute(); foreach ($eventmembers as $eventmember) { $event = new org_openpsa_calendar_event_dba($eventmember->eid); $time = $event->start; $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][$event->guid] = $event; } }
/** * Deletes all group and event memberships of the original person record. SUDO privileges * are used at this point, since only memberships are associated to the groups, not persons * and event memberships belong to the event, again not to the person. */ public function _on_deleted() { if (!midcom::get('auth')->request_sudo('midcom')) { debug_add('Failed to get SUDO privileges, skipping membership deletion silently.', MIDCOM_LOG_ERROR); return; } // Delete group memberships $qb = midcom_db_member::new_query_builder(); $qb->add_constraint('uid', '=', $this->id); $result = $qb->execute(); if ($result) { foreach ($result as $membership) { if (!$membership->delete()) { debug_add("Failed to delete membership record {$membership->id}, last Midgard error was: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); } } } // Delete event memberships $qb = midcom_db_eventmember::new_query_builder(); $qb->add_constraint('uid', '=', $this->id); $result = $qb->execute(); if ($result) { foreach ($result as $membership) { if (!$membership->delete()) { debug_add("Failed to delete event membership record {$membership->id}, last Midgard error was: " . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); } } } midcom::get('auth')->drop_sudo(); }
/** * Returns a prepared query builder which lists all eventmember records for this event. * No translation to persons is done. * * @return midcom_core_querybuilder A prepared QB instance. */ function get_event_members_qb() { $qb = midcom_db_eventmember::new_query_builder(); $qb->add_constraint('eid', '=', $this->id); return $qb; }