Exemple #1
0
 /**
  * @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_notinitialized($handler_id, array $args, array &$data)
 {
     midcom::get('auth')->require_admin_user();
     if (org_openpsa_calendar_interface::find_root_event()) {
         return new midcom_response_relocate('');
     }
 }
Exemple #2
0
 public function testCRUD()
 {
     midcom::get('auth')->request_sudo('org.openpsa.calendar');
     $event = new org_openpsa_calendar_event_dba();
     $stat = $event->create();
     $this->assertTrue($stat);
     $this->register_object($event);
     $root_event = org_openpsa_calendar_interface::find_root_event();
     $this->assertEquals($root_event->id, $event->up);
     $stat = $event->update();
     $this->assertFalse($stat);
     $start = $this->_mktime(time() - 60 * 60);
     $event->start = $start;
     $stat = $event->update();
     $this->assertFalse($stat);
     $end = $this->_mktime(time() + 60 * 60);
     $event->end = $end;
     $stat = $event->update();
     $this->assertTrue($stat);
     $this->assertEquals($start + 1, $event->start);
     $this->assertEquals($end, $event->end);
     $stat = $event->delete();
     $this->assertTrue($stat);
     midcom::get('auth')->drop_sudo();
 }
Exemple #3
0
 /**
  * Handle the creation phase
  *
  * @param String $handler_id    Name of the request handler
  * @param array $args           Variable arguments
  * @param array &$data          Public request data, passed by reference
  */
 public function _handler_create($handler_id, array $args, array &$data)
 {
     // Get the root event
     $this->_root_event = org_openpsa_calendar_interface::find_root_event();
     // ACL handling: require create privileges
     $this->_root_event->require_do('midgard:create');
     if (isset($args[0])) {
         $this->_person = new midcom_db_person($args[0]);
     }
     if (isset($args[1])) {
         $this->_requested_time = (int) $args[1];
     }
     // Load the controller instance
     $data['controller'] = $this->get_controller('create');
     // Process form
     switch ($data['controller']->process_form()) {
         case 'save':
             $indexer = new org_openpsa_calendar_midcom_indexer($this->_topic);
             $indexer->index($data['controller']->datamanager);
             //FALL-THROUGH
         //FALL-THROUGH
         case 'cancel':
             midcom::get('head')->add_jsonload('window.opener.location.reload();');
             midcom::get('head')->add_jsonload('window.close();');
             break;
     }
     // Add toolbar items
     org_openpsa_helpers::dm2_savecancel($this);
     // Hide the ROOT style
     midcom::get()->skip_page_style = true;
 }
Exemple #4
0
 /**
  * Loads and prepares the schema database.
  *
  * The operations are done on all available schemas within the DB.
  */
 public function load_schemadb()
 {
     $schemadb = midcom_helper_datamanager2_schema::load_database($this->_config->get('schemadb_acl'));
     $fields =& $schemadb['default']->fields;
     $group_object = midcom::get('auth')->get_group("group:{$this->_request_data['group']->guid}");
     // Get the calendar root event
     $root_event = org_openpsa_calendar_interface::find_root_event();
     if (is_object($root_event)) {
         $fields['calendar']['privilege_object'] = $root_event;
         $fields['calendar']['privilege_assignee'] = $group_object->id;
     } else {
         if (isset($fields['calendar'])) {
             unset($fields['calendar']);
         }
     }
     // Set the group into ACL
     $fields['contact_creation']['privilege_object'] = $group_object->get_storage();
     $fields['contact_editing']['privilege_object'] = $group_object->get_storage();
     $fields['organization_creation']['privilege_object'] = $group_object->get_storage();
     $fields['organization_editing']['privilege_object'] = $group_object->get_storage();
     $fields['projects']['privilege_object'] = $group_object->get_storage();
     $fields['invoices_creation']['privilege_object'] = $group_object->get_storage();
     $fields['invoices_editing']['privilege_object'] = $group_object->get_storage();
     // Load campaign classes
     if (midcom::get('componentloader')->load_graceful('org.openpsa.directmarketing')) {
         $fields['campaigns_creation']['privilege_object'] = $group_object->get_storage();
         $fields['campaigns_editing']['privilege_object'] = $group_object->get_storage();
     } else {
         unset($fields['campaigns_creation']);
         unset($fields['campaigns_editing']);
     }
     $fields['salesproject_creation']['privilege_object'] = $group_object->get_storage();
     return $schemadb;
 }
Exemple #5
0
 function get_parent_guid_uncached()
 {
     if ($this->eid) {
         $event = new org_openpsa_calendar_event_dba($this->eid);
         return $event->guid;
     } else {
         $root_event = org_openpsa_calendar_interface::find_root_event();
         return $root_event->guid;
     }
 }
Exemple #6
0
 /**
  * Loads and prepares the schema database.
  *
  * The operations are done on all available schemas within the DB.
  */
 public function load_schemadb()
 {
     $schemadb = midcom_helper_datamanager2_schema::load_database($this->_config->get('schemadb_acl'));
     $fields =& $schemadb['default']->fields;
     $user_object = midcom::get('auth')->get_user($this->_person->guid);
     $person_object = $user_object->get_storage();
     // Get the calendar root event
     $root_event = org_openpsa_calendar_interface::find_root_event();
     if (is_object($root_event)) {
         $fields['calendar']['privilege_object'] = $root_event;
         $fields['calendar']['privilege_assignee'] = $user_object->id;
     } else {
         if (isset($fields['calendar'])) {
             unset($fields['calendar']);
         }
     }
     $fields['contact_creation']['privilege_object'] = $person_object;
     $fields['contact_editing']['privilege_object'] = $person_object;
     $fields['organization_creation']['privilege_object'] = $person_object;
     $fields['organization_editing']['privilege_object'] = $person_object;
     $fields['projects']['privilege_object'] = $person_object;
     $fields['invoices_creation']['privilege_object'] = $person_object;
     $fields['invoices_editing']['privilege_object'] = $person_object;
     $fields['products_creation']['privilege_object'] = $person_object;
     $fields['products_editing']['privilege_object'] = $person_object;
     // Load wiki classes
     if (midcom::get('componentloader')->load_graceful('net.nemein.wiki')) {
         $fields['wiki_creation']['privilege_object'] = $person_object;
         $fields['wiki_editing']['privilege_object'] = $person_object;
     } else {
         unset($fields['wiki_creation']);
         unset($fields['wiki_editing']);
     }
     // Load campaign classes
     if (midcom::get('componentloader')->load_graceful('org.openpsa.directmarketing')) {
         $fields['campaigns_creation']['privilege_object'] = $person_object;
         $fields['campaigns_editing']['privilege_object'] = $person_object;
     } else {
         unset($fields['campaigns_creation']);
         unset($fields['campaigns_editing']);
     }
     $fields['salesproject_creation']['privilege_object'] = $person_object;
     return $schemadb;
 }
Exemple #7
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 #8
0
 private function _populate_toolbar()
 {
     $this->_view_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "group/edit/{$this->_group->guid}/", MIDCOM_TOOLBAR_LABEL => $this->_l10n_midcom->get("edit"), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/edit.png', MIDCOM_TOOLBAR_ENABLED => $this->_group->can_do('midgard:update'), MIDCOM_TOOLBAR_ACCESSKEY => 'e'));
     $this->_view_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "group/create/organization/{$this->_group->guid}/", MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('create suborganization'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/stock_people-new.png', MIDCOM_TOOLBAR_ENABLED => $this->_group->can_do('midgard:update')));
     $this->_view_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "group/create/group/{$this->_group->guid}/", MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('create subgroup'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/stock_people-new.png', MIDCOM_TOOLBAR_ENABLED => $this->_group->can_do('midgard:update')));
     if (midcom::get('auth')->can_user_do('midgard:create', null, 'org_openpsa_contacts_person_dba') && $this->_group->can_do('midgard:create')) {
         $allow_person_create = true;
     } else {
         $allow_person_create = false;
     }
     $this->_view_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "person/create/{$this->_group->guid}/", MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('create person'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/stock_person-new.png', MIDCOM_TOOLBAR_ENABLED => $allow_person_create));
     $siteconfig = org_openpsa_core_siteconfig::get_instance();
     $user_url = $siteconfig->get_node_full_url('org.openpsa.user');
     if ($user_url && midcom::get('auth')->can_user_do('org.openpsa.user:access', null, 'org_openpsa_user_interface')) {
         $this->_view_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => $user_url . "group/{$this->_group->guid}/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('user management', 'org.openpsa.user'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/properties.png'));
     }
     $cal_node = midcom_helper_misc::find_node_by_component('org.openpsa.calendar');
     if (!empty($cal_node)) {
         //TODO: Check for privileges somehow
         $this->_node_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "#", MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('create event'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/stock_new-event.png', MIDCOM_TOOLBAR_OPTIONS => array('rel' => 'directlink', 'onclick' => org_openpsa_calendar_interface::calendar_newevent_js($cal_node, false, $this->_group->guid))));
     }
 }
<?php

$event = $data['object'];
$event_label = $event->title;
if (isset($data['calendar_node']) && $data['calendar_node']) {
    $event_url = "{$data['calendar_node'][MIDCOM_NAV_FULLURL]}event/{$event->guid}";
    $event_js = org_openpsa_calendar_interface::calendar_editevent_js($event->guid, $data['calendar_node']);
    $event_label = "<a href=\"{$event_url}\" onclick=\"{$event_js}\">{$event_label}</a>";
}
?>
<tr class="event &(data['class']);">
    <td class="time">
        <?php 
echo date('H:i', $event->start) . '-' . date('H:i', $event->end);
?>
    </td>
    <td>
        <?php 
echo "{$event_label}";
?>
    </td>
    <td>
        <?php 
echo "{$event->location}";
?>
    </td>
    <td>&nbsp;</td>
</tr>
Exemple #10
0
 /**
  * Day view
  *
  * @param String $handler_id    Name of the request handler
  * @param array $args           Variable arguments
  * @param array &$data          Public request data, passed by reference
  */
 public function _handler_day($handler_id, array $args, array &$data)
 {
     midcom::get('auth')->require_valid_user();
     $this->_generate_date($args);
     // Instantiate calendar widget
     $this->_calendar = new org_openpsa_widgets_calendar(date('Y', $this->_selected_time), date('m', $this->_selected_time), date('d', $this->_selected_time));
     $this->_calendar->type = org_openpsa_widgets_calendar::DAY;
     // Slots are 2 hours long
     $this->_calendar->calendar_slot_length = $this->_config->get('day_slot_length') * 60;
     $this->_calendar->start_hour = $this->_config->get('day_start_time');
     $this->_calendar->end_hour = $this->_config->get('day_end_time');
     $this->_calendar->column_width = 60;
     $this->_populate_toolbar('day');
     $this->_view_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => 'month/' . $this->_get_datestring() . '/', MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('month view'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/properties.png'));
     $this->_view_toolbar->add_item(array(MIDCOM_TOOLBAR_URL => 'week/' . $this->_get_datestring() . '/', MIDCOM_TOOLBAR_LABEL => $this->_l10n->get('week view'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/properties.png'));
     // Clicking a free slot should bring up 'new event' dialogue
     $nap = new midcom_helper_nav();
     $this_node = $nap->get_node($nap->get_current_node());
     if ($this->_root_event->can_do('midgard:create')) {
         $this->_calendar->reservation_div_options = array('onclick' => org_openpsa_calendar_interface::calendar_editevent_js('__GUID__', $this_node));
     }
     $this->_calendar->free_div_options = array('onclick' => org_openpsa_calendar_interface::calendar_newevent_js($this_node, '__START__', '__RESOURCE__'));
     // Populate contacts
     $this->_populate_calendar_contacts($this->_calendar->get_day_start(), $this->_calendar->get_day_end());
     $this->_request_data['calendar'] =& $this->_calendar;
     // Set the breadcrumb
     $this->add_breadcrumb('year/' . date('Y-01-01', $this->_selected_time) . '/', strftime('%Y', $this->_selected_time));
     $this->add_breadcrumb('month/' . date('Y-m-01', $this->_selected_time) . '/', strftime('%B', $this->_selected_time));
     $this->add_breadcrumb('day/' . date('Y-m-d', $this->_selected_time) . '/', strftime('%x', $this->_selected_time));
     midcom::get('head')->set_pagetitle(strftime("%x", $this->_selected_time));
 }
Exemple #11
0
<?php

$nap = new midcom_helper_nav();
$node = $nap->get_node($nap->get_current_node());
$event = new org_openpsa_widgets_calendar_event($data['event']);
$event->link = '#';
$event->onclick = org_openpsa_calendar_interface::calendar_editevent_js($data['event']->guid, $node);
echo $event->render('li');
Exemple #12
0
 static function common_node_toolbar_buttons(&$toolbar, &$bind_object, $calling_component, $buttons = 'default')
 {
     self::add_header_files();
     if ($buttons == 'default') {
         $buttons = self::common_toolbar_buttons_defaults();
     }
     if (!is_array($buttons)) {
         //Invalid buttons given
         return;
     }
     foreach ($buttons as $mode => $data) {
         debug_print_r("processing button '{$mode}' with data:", $data);
         if ($data === false) {
             //In case somebody didn't unset() a button from the defaults, just marked it as false
             debug_add('data marked as false, skipping (the correct way is to unset() the key)', MIDCOM_LOG_WARN);
             continue;
         }
         $related_to = self::common_node_toolbar_buttons_sanitycheck($data, $data['component'], $bind_object, $calling_component);
         if (!$related_to) {
             debug_add("sanitycheck returned false, skipping", MIDCOM_LOG_WARN);
             continue;
         }
         //Remember that switch is also a for statement in PHPs mind, use "continue 2"
         switch ($mode) {
             case 'event':
                 $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "#", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('create event', $data['component']), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/stock_new-event.png', MIDCOM_TOOLBAR_OPTIONS => array('rel' => 'directlink', 'onclick' => org_openpsa_calendar_interface::calendar_newevent_js($data['node'], false, false, '?' . self::relatedto2get(array($related_to))))));
                 break;
             case 'task':
                 $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "{$data['node'][MIDCOM_NAV_FULLURL]}task/new/?" . self::relatedto2get(array($related_to)), MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('create task', $data['component']), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/new_task.png', MIDCOM_TOOLBAR_ENABLED => midcom::get('auth')->can_user_do('midgard:create', null, 'org_openpsa_projects_task_dba'), MIDCOM_TOOLBAR_OPTIONS => array('target' => 'newtask')));
                 break;
             case 'wikinote':
                 if (!array_key_exists('wikiword', $data) || empty($data['wikiword'])) {
                     //Wikiword to use not given
                     debug_add("data['wikiword'] not given, skipping", MIDCOM_LOG_WARN);
                     continue 2;
                 }
                 if (!net_nemein_wiki_interface::node_wikiword_is_free($data['node'], $data['wikiword'])) {
                     //Wikiword is already reserved
                     //PONDER: append number or something and check again ??
                     debug_add("node_wikiword_is_free returned false for '{$data['wikiword']}'", MIDCOM_LOG_WARN);
                     continue 2;
                 }
                 $data['wikiword_encoded'] = rawurlencode($data['wikiword']);
                 $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "{$data['node'][MIDCOM_NAV_FULLURL]}create/?wikiword={$data['wikiword_encoded']}&amp;" . self::relatedto2get(array($related_to)), MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('create note', $data['component']), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/new-text.png', MIDCOM_TOOLBAR_ENABLED => $data['node'][MIDCOM_NAV_OBJECT]->can_do('midgard:create'), MIDCOM_TOOLBAR_OPTIONS => array('target' => 'wiki')));
                 break;
             case 'document':
                 $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "{$data['node'][MIDCOM_NAV_FULLURL]}document/create/choosefolder/?" . self::relatedto2get(array($related_to)), MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('create document', $data['component']), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/new-text.png', MIDCOM_TOOLBAR_ENABLED => $data['node'][MIDCOM_NAV_OBJECT]->can_do('midgard:create'), MIDCOM_TOOLBAR_OPTIONS => array('target' => 'newdocument')));
                 break;
             default:
                 debug_add("given button '{$mode}' not recognized", MIDCOM_LOG_ERROR);
                 break;
         }
     }
 }
Exemple #13
0
 /**
  * Preparations related to all save operations (=create/update)
  */
 private function _prepare_save($ignorebusy_em = false, $rob_tentantive = false)
 {
     // Make sure we have accessType
     if (!$this->orgOpenpsaAccesstype) {
         $this->orgOpenpsaAccesstype = org_openpsa_core_acl::ACCESS_PUBLIC;
     }
     // Make sure we can actually reserve the resources we need
     foreach ($this->resources as $id => $bool) {
         if (!$bool) {
             continue;
         }
         $checker = new org_openpsa_calendar_event_resource_dba();
         $checker->resource = $id;
         if (!$checker->verify_can_reserve()) {
             $msg = "Cannot reserve resource #{$id}, returning false";
             $this->errstr = $msg;
             debug_add($msg, MIDCOM_LOG_ERROR);
             midcom_connection::set_error(MGD_ERR_ACCESS_DENIED);
             unset($id, $checker, $msg);
             return false;
         }
         unset($id, $checker);
     }
     //Check up
     if (!$this->up && $this->title != '__org_openpsa_calendar') {
         $root_event = org_openpsa_calendar_interface::find_root_event();
         $this->up = $root_event->id;
     }
     //Doublecheck
     if (!$this->up) {
         debug_add('Event up not set, aborting');
         $this->errstr = 'Event UP not set';
         return false;
         //Calendar events must always be under some other event
     }
     $conflictmanager = new org_openpsa_calendar_conflictmanager($this);
     //check for busy participants/resources
     if (!$conflictmanager->run($rob_tentantive) && !$ignorebusy_em) {
         debug_print_r("Unresolved resource conflicts, aborting");
         $this->errstr = 'Resource conflict with busy event';
         return false;
     }
     /*
      * Calendar events always have 'inherited' owner
      * different bit buckets for calendar events might have different owners.
      */
     $this->owner = 0;
     //Preserve vCal GUIDs once set
     if (isset($this->old_externalGuid)) {
         $this->externalGuid = $this->old_externalGuid;
     }
     return true;
 }
Exemple #14
0
 /**
  * Search for events withing configured timeframe and if
  * they have confirmed relatedtos to tasks reports hours
  * for each participant (who is task resource) towards
  * said task.
  */
 public function _on_execute()
 {
     debug_add('_on_execute called');
     $root_event = org_openpsa_calendar_interface::find_root_event();
     if (!is_object($root_event)) {
         debug_add('calendar root event not found', MIDCOM_LOG_WARN);
         return;
     }
     if (!class_exists('org_openpsa_relatedto_dba')) {
         debug_add('relatedto library could not be loaded', MIDCOM_LOG_WARN);
         return;
     }
     if (!midcom::get('componentloader')->load_graceful('org.openpsa.projects')) {
         debug_add('org.openpsa.projects could not be loaded', MIDCOM_LOG_WARN);
         return;
     }
     if (!midcom::get('auth')->request_sudo('org.openpsa.calendar')) {
         $msg = "Could not get sudo, aborting operation, see error log for details";
         $this->print_error($msg);
         debug_add($msg, MIDCOM_LOG_ERROR);
         return;
     }
     $qb = org_openpsa_calendar_event_participant_dba::new_query_builder();
     // Event must be directly under openpsa calendar root event
     $qb->add_constraint('eid.up', '=', $root_event->id);
     // Member type must not be resource
     $qb->add_constraint('orgOpenpsaObtype', '<>', ORG_OPENPSA_OBTYPE_EVENTRESOURCE);
     // Event must have ended
     $qb->add_constraint('eid.end', '<', time());
     // Event can be at most week old
     // TODO: make max age configurable
     /* TODO: store a timestamp of last process in root event and use whichever
                 is nearer, though it has the issue with creating events after the fact
                 (which can happen when synchronizing from other systems for example)
        */
     $qb->add_constraint('eid.start', '>', time() - 24 * 3600 * 7);
     // Must not have hours reported already
     $qb->add_constraint('hoursReported', '=', 0);
     $eventmembers = $qb->execute();
     if (!is_array($eventmembers) || count($eventmembers) < 1) {
         midcom::get('auth')->drop_sudo();
         return;
     }
     // keyed by id
     $seen_events = array();
     // keyed by guid
     $seen_tasks = array();
     // keyed by guid
     $event_links = array();
     foreach ($eventmembers as $member) {
         // Bulletproofing: prevent duplicating hour reports
         $member->hoursReported = time();
         if (!$member->update(false)) {
             $msg = "Could not set hoursReported on member #{$member->id} (event #{$member->eid}), errstr: " . midcom_connection::get_error_string() . " skipping this member";
             $this->print_error($msg);
             debug_add($msg, MIDCOM_LOG_ERROR);
             continue;
         }
         //Avoid multiple loads of same event
         if (!isset($seen_events[$member->eid])) {
             $seen_events[$member->eid] = new org_openpsa_calendar_event_dba($member->eid);
         }
         $event =& $seen_events[$member->eid];
         // Avoid multiple queries of events links
         if (!isset($event_links[$event->guid])) {
             $qb2 = org_openpsa_relatedto_dba::new_query_builder();
             $qb2->add_constraint('fromGuid', '=', $event->guid);
             $qb2->add_constraint('fromComponent', '=', 'org.openpsa.calendar');
             $qb2->add_constraint('toComponent', '=', 'org.openpsa.projects');
             $qb2->add_constraint('toClass', '=', 'org_openpsa_projects_task_dba');
             $qb2->add_constraint('status', '=', org_openpsa_relatedto_dba::CONFIRMED);
             $event_links[$event->guid] = $qb2->execute();
         }
         $links =& $event_links[$event->guid];
         // These checks are done here (in stead of few lines above) on purpose
         if (!is_array($links) || count($links) < 1) {
             continue;
         }
         foreach ($links as $link) {
             //Avoid multiple loads of same task
             if (!isset($seen_tasks[$link->toGuid])) {
                 $seen_tasks[$link->toGuid] = new org_openpsa_projects_task_dba($link->toGuid);
             }
             $task =& $seen_tasks[$link->toGuid];
             debug_add("processing task #{$task->id} ({$task->title}) for person #{$member->uid} from event #{$event->id} ({$event->title})");
             // Make sure the person we found is a resource in this particular task
             $task->get_members();
             if (!isset($task->resources[$member->uid])) {
                 debug_add("person #{$member->uid} is not a *resource* in task #{$task->id}, skipping");
                 continue;
             }
             if (!org_openpsa_projects_interface::create_hour_report($task, $member->uid, $event, 'org.openpsa.calendar')) {
                 // MidCOM error log is filled in the method, here we just display error
                 $this->print_error("Failed to create hour_report to task #{$task->id} for person #{$member->uid} from event #{$event->id}");
                 // Failed to create hour_report, unset hoursReported so that we might have better luck next time
                 // PONDER: This might be an issue in case be have multiple tasks linked and only one of them fails... figure out a more granular way to flag reported hours ?
                 $member->hoursReported = 0;
                 if (!$member->update(false)) {
                     $msg = "Could not UNSET hoursReported on member #{$member->id} (event #{$member->eid}), errstr: " . midcom_connection::get_error_string();
                     $this->print_error($msg);
                     debug_add($msg, MIDCOM_LOG_WARN);
                 }
             }
         }
     }
     midcom::get('auth')->drop_sudo();
     debug_add('done');
     return;
 }
Exemple #15
0
}
?>
        <div class="description">
            &(view_task['description']:h);
        </div>

        <div class="bookings">
            <?php 
echo "<h2>" . $data['l10n']->get('booked times') . "</h2>\n";
if (count($data['task_bookings']['confirmed']) > 0) {
    echo "<ul>\n";
    foreach ($data['task_bookings']['confirmed'] as $booking) {
        echo "<li>";
        echo strftime('%x', $booking->start) . ' ' . date('H', $booking->start) . '-' . date('H', $booking->end);
        if ($data['calendar_node']) {
            echo ": <a href=\"#\" onclick=\"" . org_openpsa_calendar_interface::calendar_editevent_js($booking->guid, $data['calendar_node']) . "\">{$booking->title}</a>";
        } else {
            echo ": {$booking->title}";
        }
        echo " (";
        foreach ($booking->participants as $participant_id => $display) {
            $participant = org_openpsa_widgets_contact::get($participant_id);
            echo $participant->show_inline();
        }
        echo ")</li>\n";
    }
    echo "</ul>\n";
}
if ($data['task_booked_percentage'] >= 105) {
    $status = 'acceptable';
} else {