' . l($timetracking->title, 'node/'. $timetracking->nid) . theme('mark', node_mark($timetracking->nid, $timetracking->changed)) . '
' . l($timetracking->organization_title, 'node/'. $timetracking->organization_nid) . (!empty($timetracking->project_title) ? ' ยป ' . l($timetracking->project_title, 'node/'. $timetracking->project_nid) : '' ) . (!empty($timetracking->task_title) ? '
' . l($timetracking->task_title, 'node/'. $timetracking->task_nid) . ' (' . t('task') . ')' : '' ) . (!empty($timetracking->ticket_title) ? '
' . l($timetracking->ticket_title, 'node/'. $timetracking->ticket_nid) . ' (' . t('ticket') . ')' : '' ), format_date($timetracking->trackingdate, 'small'), array('data' => stormtimetracking_duration($timetracking->billing_duration), 'align' => 'right'), array( 'data' => storm_icon_edit_node($timetracking, $_GET) .' '. storm_icon_delete_node($timetracking, $_GET), 'class' => 'storm_list_operations', ), ); } $o = theme('table', $header, $rows, array('id' => 'stormtimetrackings')); $o .= ''. t('Total duration') .' : '. stormtimetracking_duration($billing_duration) .''; return $o; } function theme_stormtimetracking_view($node, $teaser = FALSE, $page = FALSE) { drupal_add_css(drupal_get_path('module', 'storm') . '/storm-node.css', 'module'); $node = node_prepare($node, $teaser); $l_pos = 1; // Used to increase the link position number (see issue 814820) $node->content['links'] = array( '#prefix' => '', '#weight' => -25, ); // Code to create invoice auto_add link if (module_exists('storminvoice')) { $node->content['links']['auto_invoice'] = array( '#prefix' => variable_get('storm_icons_display', TRUE) ? '
' : '
', '#suffix' => '
', '#value' => theme('storminvoice_autoadd_links', $node->nid, $node->billable, $node->billed), '#weight' => $l_pos++, ); } $node->content['group1'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group1') : -20, ); $node->content['group1']['organization'] = array( '#prefix' => '
', '#suffix' => '
', '#value' => theme('storm_view_item', t('Organization'), l($node->organization_title, 'node/'. $node->organization_nid)), '#weight' => 1, ); $node->content['group1']['project'] = array( '#prefix' => '
', '#suffix' => '
', '#value' => theme('storm_view_item', t('Project'), l($node->project_title, 'node/'. $node->project_nid)), '#weight' => 2, ); $node->content['group1']['task'] = array( '#prefix' => '
', '#suffix' => '
', '#value' => theme('storm_view_item', t('Task'), l($node->task_title, 'node/'. $node->task_nid)), '#weight' => 3, ); $node->content['group1']['ticket'] = array( '#prefix' => '
', '#suffix' => '
', '#value' => theme('storm_view_item', t('Ticket'), l($node->ticket_title, 'node/'. $node->ticket_nid)), '#weight' => 4, ); $node->content['group2'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group3') : -19, ); $node->content['group2']['trackingdate'] = array( '#prefix' => '
', '#suffix' => '
', '#value' => theme('storm_view_item', t('Date'), empty($node->trackingdate) ? '' : substr(format_date($node->trackingdate, 'small'), 0, 10)), '#weight' => 2, ); $node->content['group3'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group3') : -18, ); $node->content['group3']['duration'] = array( '#prefix' => '
', '#suffix' => '
', '#value' => theme('storm_view_item', t('Duration'), stormtimetracking_duration($node->billing_duration)), '#weight' => 2, ); $node->content['group_item'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group_item') : -20, ); $node->content['group_item']['author'] = array( '#prefix' => '
', '#suffix' => '
', '#value' => theme('storm_view_item', t('Submitted by'), theme('username', $node)), '#weight' => 1, ); $node->content['group_item']['created'] = array( '#prefix' => '
', '#suffix' => '
', '#value' => theme('storm_view_item', t('Created'), format_date($node->created, 'small')), '#weight' => 2, ); if ($node->changed != $node->created) { $node->content['group_item']['modified'] = array( '#prefix' => '
', '#suffix' => '
', '#value' => theme('storm_view_item', t('Modified'), format_date($node->changed, 'small')), '#weight' => 3, ); } $node->content['body_field'] = array( '#prefix' => '
', '#suffix' => '
', '#value' => theme('storm_view_item', t('Notes'), $node->content['body']['#value']), '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'body_field') : 0, ); unset($node->content['body']); return $node; } function theme_stormtimetracking_list_form_report_reports() { $reports = array( 'std' => t('Standard'), 'for_organization' => t('For an organization'), 'for_organization_w_task' => t('For an org. with tasks'), 'for_project' => t('For a project'), ); return $reports; } function theme_stormtimetracking_list_report($report, $language, $timetrackings) { switch ($report) { case 'std': $header = array( t('Organization', array(), $language), t('Project', array(), $language), t('Title', array(), $language), t('Date', array(), $language), t('Billing duration (hours)', array(), $language)); $total_billing_duration = 0; foreach ($timetrackings as $timetracking) { $rows[] = array( check_plain($timetracking->organization_title), check_plain($timetracking->project_title), check_plain($timetracking->title), format_date($timetracking->trackingdate, 'small'), array('data' => sprintf('%.2f', $timetracking->billing_duration), 'align' => 'right'), ); $total_billing_duration += $timetracking->billing_duration; } $title = '

'. t('Timetrackings report', array(), $language) .'


'; break; case 'for_organization': $organization = node_load($_SESSION['stormtimetracking_list_filter']['organization_nid']); $header = array( t('Project', array(), $language), t('Title', array(), $language), t('Date', array(), $language), t('Billing duration (hours)', array(), $language)); $total_billing_duration = 0; foreach ($timetrackings as $timetracking) { $rows[] = array( check_plain($timetracking->project_title), check_plain($timetracking->title), format_date($timetracking->trackingdate, 'small'), array('data' => sprintf('%.2f', $timetracking->billing_duration), 'align' => 'right'), ); $total_billing_duration += $timetracking->billing_duration; } $title = '

'. t('Timetrackings report', array(), $language) .'


'; $title .= t('Organization : @organization', array('@organization' => $organization->fullname), $language) .'
'; break; case 'for_organization_w_task': $organization = node_load($_SESSION['stormtimetracking_list_filter']['organization_nid']); $header = array( t('Project', array(), $language), t('Task', array(), $language), t('Title', array(), $language), t('Date', array(), $language), t('Billing duration (hours)', array(), $language)); $total_billing_duration = 0; foreach ($timetrackings as $timetracking) { $rows[] = array( check_plain($timetracking->project_title), check_plain($timetracking->task_title), check_plain($timetracking->title), format_date($timetracking->trackingdate, 'small'), array('data' => sprintf('%.2f', $timetracking->billing_duration), 'align' => 'right'), ); $total_billing_duration += $timetracking->billing_duration; } $title = '

'. t('Timetrackings report', array(), $language) .'


'; $title .= t('Organization : @organization', array('@organization' => $organization->fullname), $language) .'
'; break; case 'for_project': $organization = node_load($_SESSION['stormtimetracking_list_filter']['organization_nid']); $project = node_load($_SESSION['stormtimetracking_list_filter']['project_nid']); $header = array( t('Task', array(), $language), t('Title', array(), $language), t('Date', array(), $language), t('Duration (hours)', array(), $language)); $total_billing_duration = 0; foreach ($timetrackings as $timetracking) { $rows[] = array( check_plain($timetracking->task_title), check_plain($timetracking->title), format_date($timetracking->trackingdate, 'small'), array('data' => sprintf('%.2f', $timetracking->billing_duration), 'align' => 'right'), ); $total_billing_duration += $timetracking->billing_duration; } $title = '

'. t('Timetrackings report', array(), $language) .'


'; $title .= t('Organization : @organization', array('@organization' => $organization->fullname), $language) .'
'; $title .= t('Project : @project', array('@project' => $project->title), $language) .'
'; break; } $footer = '

'. t('Total billing duration : %total_billing_duration', array('%total_billing_duration' => format_plural($total_billing_duration, '1 hour', '@count hours', array(), $language)), $language) .'

'; return theme('storm_list_report', $header, $rows, $title, $footer); }