Exemple #1
0
 /**
  * Display possible available resources
  *
  * @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_resourcing($handler_id, array $args, array &$data)
 {
     $this->_task = new org_openpsa_projects_task_dba($args[0]);
     $this->_task->require_do('midgard:create');
     if (array_key_exists('org_openpsa_projects_prospects', $_POST) && $_POST['save']) {
         foreach ($_POST['org_openpsa_projects_prospects'] as $prospect_guid => $slots) {
             try {
                 $prospect = new org_openpsa_projects_task_resource_dba($prospect_guid);
             } catch (midcom_error $e) {
                 continue;
             }
             $update_prospect = false;
             foreach ($slots as $slotdata) {
                 if (!array_key_exists('used', $slotdata) || empty($slotdata['used'])) {
                     // Slot not selected, skip
                     continue;
                 }
                 $prospect->orgOpenpsaObtype = ORG_OPENPSA_OBTYPE_PROJECTRESOURCE;
                 $update_prospect = true;
                 // Create event from slot
                 $event = new org_openpsa_calendar_event_dba();
                 $event->start = $slotdata['start'];
                 $event->end = $slotdata['end'];
                 $event->search_relatedtos = false;
                 $event->title = sprintf($this->_l10n->get('work for task %s'), $this->_task->title);
                 if (!$event->create()) {
                     // TODO: error reporting
                     continue;
                 }
                 $participant = new org_openpsa_calendar_event_member_dba();
                 $participant->orgOpenpsaObtype = ORG_OPENPSA_OBTYPE_EVENTPARTICIPANT;
                 $participant->uid = $prospect->person;
                 $participant->eid = $event->id;
                 $participant->create();
                 // create relatedto
                 if (!org_openpsa_relatedto_plugin::create($event, 'org.openpsa.calendar', $this->_task, 'org.openpsa.projects')) {
                     // TODO: delete event ???
                 }
             }
         }
         if ($update_prospect) {
             if (!$prospect->update()) {
                 // TODO: error handling
             }
         }
         return new midcom_response_relocate("task/{$this->_task->guid}/");
     } else {
         if (!empty($_POST['cancel'])) {
             return new midcom_response_relocate("task/{$this->_task->guid}/");
         }
     }
     $this->_prepare_request_data($handler_id);
     midcom::get('head')->set_pagetitle($this->_task->title);
     $this->bind_view_to_object($this->_task);
     org_openpsa_projects_viewer::add_breadcrumb_path($data['task'], $this);
     $this->add_breadcrumb("task/resourcing/{$this->_task->guid}/", $this->_l10n->get('resourcing'));
 }
Exemple #2
0
 public function __construct($identifier = null)
 {
     parent::__construct($identifier);
     if (!$this->orgOpenpsaObtype) {
         $this->orgOpenpsaObtype = ORG_OPENPSA_OBTYPE_EVENTPARTICIPANT;
     }
 }
Exemple #3
0
 /**
  * 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);
         }
     }
 }
Exemple #4
0
 /**
  * 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;
 }
Exemple #5
0
 /**
  * Fills $this->participants and $this->resources
  */
 private function _get_em()
 {
     if (!$this->id) {
         return;
     }
     //Create shorthand references to the arrays wanted
     $part =& $this->participants;
     $res =& $this->resources;
     //Reset to empty arrays
     $res = array();
     $part = array();
     // Participants
     $mc = org_openpsa_calendar_event_member_dba::new_collector('eid', $this->id);
     $members = $mc->get_values('uid');
     if (!empty($members)) {
         foreach ($members as $member) {
             $part[$member] = true;
         }
     }
     // Resources
     $mc2 = org_openpsa_calendar_event_resource_dba::new_collector('event', $this->id);
     $resources = $mc2->get_values('resource');
     if (!empty($resources)) {
         foreach ($resources as $resource) {
             $res[$resource] = true;
         }
     }
     return true;
 }
Exemple #6
0
 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;
 }
Exemple #7
0
 /**
  * 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;
 }