if ($time_estimate >= 0 || $total_minutes >=0){?> <br/> <table> <tr> <td><div style="font-weight:bold"><?php echo lang('percent completed'). ': '?></div></td> <td><?php echo taskPercentCompletedBar($task_list) //$task_list->getPercentCompleted() . "%"; ?></td> </tr> <?php if ($time_estimate > 0) {?> <tr><td> <div style="font-weight:bold"><?php echo lang('estimated time'). ': '?></div></td><td> <?php echo DateTimeValue::FormatTimeDiff(new DateTimeValue(0), new DateTimeValue($time_estimate * 60), 'hm', 60) ?></td></tr> <?php } ?> <?php if ($total_minutes > 0 && can_manage_time(logged_user())) {?> <tr><td><div style="font-weight:bold"><?php echo lang('total time worked'). ': ' ?></div></td><td> <span style="font-size:120%;font-weight:bold;<?php echo ($time_estimate > 0 && $total_minutes > $time_estimate) ? 'color:#FF0000':'' ?>"> <?php echo DateTimeValue::FormatTimeDiff(new DateTimeValue(0), new DateTimeValue($total_minutes * 60), 'hm', 60) ?> </span></td></tr> <?php } ?> </table> <div class="desc"><?php echo lang('percent completed detail', isset($counter) ? $counter : '0') ?></div> <?php } ?> <?php if ($task_list->isRepetitive()) { ?> <div style="font-weight:bold"> <?php echo '<br>' . lang('this task repeats'). ' ';
og.config = { 'mails_per_page': <?php echo json_encode(user_config_option('mails_per_page',50)) ?>, 'contacts_per_page': <?php echo json_encode(user_config_option('contacts_per_page',50)) ?>, 'files_per_page': <?php echo json_encode(config_option('files_per_page', 50)) ?>, 'days_on_trash': <?php echo json_encode(config_option("days_on_trash", 0)) ?>, 'checkout_notification_dialog': <?php echo json_encode(config_option('checkout_notification_dialog', 0)) ?>, 'use_time_in_task_dates': <?php echo json_encode(config_option('use_time_in_task_dates')) ?>, 'can_assign_tasks_to_companies': <?php echo json_encode(config_option('can_assign_tasks_to_companies')) ?>, 'enable_notes_module': <?php echo json_encode(module_enabled("messages")) ?>, 'enable_email_module': <?php echo json_encode(module_enabled("mails")) ?>, 'enable_contacts_module': <?php echo json_encode(module_enabled("contacts")) ?>, 'enable_calendar_module': <?php echo json_encode(module_enabled("calendar")) ?>, 'enable_documents_module': <?php echo json_encode(module_enabled("documents")) ?>, 'enable_tasks_module': <?php echo json_encode(module_enabled("tasks")) ?>, 'enable_weblinks_module': <?php echo json_encode(module_enabled('weblinks')) ?>, 'enable_time_module': <?php echo json_encode(module_enabled("time") && can_manage_time(logged_user())) ?>, 'enable_reporting_module': <?php echo json_encode(module_enabled("reporting")) ?> }; og.preferences = { 'viewContactsChecked': <?php echo json_encode(user_config_option('viewContactsChecked')) ?>, 'viewUsersChecked': <?php echo json_encode(user_config_option('viewUsersChecked')) ?>, 'viewCompaniesChecked': <?php echo json_encode(user_config_option('viewCompaniesChecked')) ?>, 'rememberGUIState': <?php echo user_config_option('rememberGUIState') ? '1' : '0' ?>, 'time_format_use_24': <?php echo json_encode(user_config_option('time_format_use_24')) ?>, 'show_unread_on_title': <?php echo user_config_option('show_unread_on_title') ? '1' : '0' ?>, 'email_polling': <?php echo json_encode(user_config_option('email_polling')) ?> , 'email_check_acc_errors': <?php echo json_encode(user_config_option('mail_account_err_check_interval')) ?> , 'date_format': <?php echo json_encode(user_config_option('date_format')) ?>, 'date_format_tip': <?php echo json_encode(date_format_tip(user_config_option('date_format'))) ?>, 'start_monday': <?php echo user_config_option('start_monday') ? '1' : '0' ?>, 'draft_autosave_timeout': <?php echo json_encode(user_config_option('draft_autosave_timeout')) ?>,
?> , 'enable_documents_module': <?php echo json_encode(module_enabled("documents")); ?> , 'enable_tasks_module': <?php echo json_encode(module_enabled("tasks")); ?> , 'enable_weblinks_module': <?php echo json_encode(module_enabled('weblinks')); ?> , 'enable_time_module': <?php echo json_encode(module_enabled("time") && can_manage_time(logged_user(), true)); ?> , 'enable_reporting_module': <?php echo json_encode(module_enabled("reporting")); ?> }; og.preferences = { 'rememberGUIState': <?php echo user_config_option('rememberGUIState') ? '1' : '0'; ?> , 'show_unread_on_title': <?php echo user_config_option('show_unread_on_title') ? '1' : '0'; ?> ,
function index() { $tasksUserId = array_var($_GET, 'tu'); if (is_null($tasksUserId)) { $tasksUserId = user_config_option('TM tasks user filter', logged_user()->getId()); } else { if (user_config_option('TM tasks user filter') != $tasksUserId) { set_user_config_option('TM tasks user filter', $tasksUserId, logged_user()->getId()); } } $timeslotsUserId = array_var($_GET, 'tsu'); if (is_null($timeslotsUserId)) { $timeslotsUserId = user_config_option('TM user filter', 0); } else { if (user_config_option('TM user filter') != $timeslotsUserId) { set_user_config_option('TM user filter', $timeslotsUserId, logged_user()->getId()); } } $showTimeType = array_var($_GET, 'stt'); if (is_null($showTimeType)) { $showTimeType = user_config_option('TM show time type', 0); } else { if (user_config_option('TM show time type') != $showTimeType) { set_user_config_option('TM show time type', $showTimeType, logged_user()->getId()); } } $start = array_var($_GET, 'start', 0); $limit = 20; $tasksUser = Contacts::findById($tasksUserId); $timeslotsUser = Contacts::findById($timeslotsUserId); //Active tasks view $open_timeslots = Timeslots::instance()->listing(array("extra_conditions" => " AND end_time = '" . EMPTY_DATETIME . "' AND contact_id = " . $tasksUserId))->objects; $tasks = array(); foreach ($open_timeslots as $open_timeslot) { $task = ProjectTasks::findById($open_timeslot->getRelObjectId()); if ($task instanceof ProjectTask && !$task->isCompleted() && !$task->isTrashed() && !$task->isArchived()) { $tasks[] = $task; } } ProjectTasks::populateTimeslots($tasks); //Timeslots view $total = 0; switch ($showTimeType) { case 0: //Show only timeslots added through the time panel $result = Timeslots::getGeneralTimeslots(active_context(), $timeslotsUser, $start, $limit); $timeslots = $result->objects; $total = $result->total; break; default: throw new Error('Unrecognised TM show time type: ' . $showTimeType); } //Get Users Info $users = array(); $context = active_context(); if (!can_manage_time(logged_user())) { if (can_add(logged_user(), $context, Timeslots::instance()->getObjectTypeId())) { $users = array(logged_user()); } } else { if (logged_user()->isMemberOfOwnerCompany()) { $users = Contacts::getAllUsers(); } else { $users = logged_user()->getCompanyId() > 0 ? Contacts::getAllUsers(" AND `company_id` = " . logged_user()->getCompanyId()) : array(logged_user()); } $tmp_users = array(); foreach ($users as $user) { if (can_add($user, $context, Timeslots::instance()->getObjectTypeId())) { $tmp_users[] = $user; } } $users = $tmp_users; } //Get Companies Info if (logged_user()->isMemberOfOwnerCompany() || logged_user()->isAdminGroup()) { $companies = Contacts::getCompaniesWithUsers(); } else { $companies = array(); if (logged_user()->getCompanyId() > 0) { $companies[] = logged_user()->getCompany(); } } $required_dimensions = DimensionObjectTypeContents::getRequiredDimensions(Timeslots::instance()->getObjectTypeId()); $draw_inputs = !$required_dimensions || count($required_dimensions) == 0; if (!$draw_inputs) { $ts_ots = DimensionObjectTypeContents::getDimensionObjectTypesforObject(Timeslots::instance()->getObjectTypeId()); $context = active_context(); foreach ($context as $sel) { if ($sel instanceof Member) { foreach ($ts_ots as $ts_ot) { if ($sel->getDimensionId() == $ts_ot->getDimensionId() && $sel->getObjectTypeId() == $ts_ot->getDimensionObjectTypeId()) { $draw_inputs = true; break; } } if ($draw_inputs) { break; } } } } tpl_assign('draw_inputs', $draw_inputs); tpl_assign('selected_user', logged_user()->getId()); tpl_assign('timeslots', $timeslots); tpl_assign('tasks', $tasks); if (count($tasks) > 0) { tpl_assign('all_users', Contacts::getAllUsers()); } tpl_assign('users', $users); tpl_assign('start', $start); tpl_assign('limit', $limit); tpl_assign('total', $total); tpl_assign('companies', $companies); ajx_set_no_toolbar(true); }
function delete_project_timeslot() { if (!can_manage_time(logged_user(), true)) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } ajx_current("empty"); $timeslot = Timeslots::findById(get_id()); if (!$timeslot instanceof Timeslot) { flash_error(lang('timeslot dnx')); return; } if (!$timeslot->canDelete(logged_user())) { flash_error(lang('no access permissions')); return; } try { DB::beginWork(); $timeslot->delete(); DB::commit(); ajx_extra_data(array("timeslotId" => get_id())); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } // try }
function canAddTimeslot($user) { return $this->canChangeStatus($user) || can_manage_time($user) || can_access_pgids($user->getPermissionGroupIds(), $this->getMembers(), Timeslots::instance()->getObjectTypeId(), ACCESS_LEVEL_WRITE); }
/** * Empty implementation of static method. Update tag permissions are check by the taggable * object, not tag itself * * @param Contact $user * @return boolean */ function canDelete(Contact $user) { return ($user->getId() == $this->getContactId() || can_manage_time($user)); }
<div class="coInputSeparator"></div> <div class="coInputMainBlock"> <div class="formAddTimeslotDescription"> <div class="bold"><?php echo lang('description'); ?> : </div> <?php echo textarea_field("timeslot[description]", array_var($timeslot_data, 'description'), array('class' => 'short', 'id' => 'addTimeslotDescription', 'tabindex' => '10')); ?> </div> <table style="margin-top:10px;"> <?php if (can_manage_time(logged_user())) { echo '<tr><td style="vertical-align:middle;"><span class="bold">' . lang("person") . ': </span></td>'; if (logged_user()->isMemberOfOwnerCompany()) { $users = Contacts::getAllUsers(); } else { $users = logged_user()->getCompanyId() > 0 ? Contacts::getAllUsers(" AND `company_id` = " . logged_user()->getCompanyId()) : array(logged_user()); } $tmp_users = array(); foreach ($users as $user) { $rel_object = $timeslot->getRelObject(); $is_assigned = $rel_object instanceof ProjectTask && $rel_object->getAssignedToContactId() == $user->getId(); if ($is_assigned || can_add($user, $rel_object->getMembers(), Timeslots::instance()->getObjectTypeId())) { $tmp_users[] = $user; } } $users = $tmp_users;
function can_add_timeslots($user, $members) { return can_manage_time($user) || can_access_pgids($user->getPermissionGroupIds(), $members, Timeslots::instance()->getObjectTypeId(), ACCESS_LEVEL_WRITE); }
" target="_blank"><?php echo $object->getViewUrl(); ?> </a> </div><?php } $more_content_templates = array(); Hook::fire("more_content_templates", $object, $more_content_templates); foreach ($more_content_templates as $ct) { tpl_assign('object', $object); $this->includeTemplate(get_template_path($ct[0], $ct[1])); } if ($object instanceof ApplicationDataObject) { echo render_custom_properties($object); } if ($object instanceof ProjectDataObject && $object->allowsTimeslots() && can_manage_time(logged_user())) { echo render_object_timeslots($object, $object->getViewUrl()); } if ($object instanceof ProjectDataObject && $object->canView(logged_user()) || $object instanceof User) { echo render_object_latest_activity($object); } if ($object instanceof ProjectDataObject && $object->isCommentable()) { echo render_object_comments($object, $object->getViewUrl()); } ?> </td> </tr> <tr> <td class="coViewBottomLeft"></td> <td class="coViewBottom" colspan=2></td> <td class="coViewBottomRight" style="width:12px"> </td>
<?php //get skipped dimensions for this view $dimensions_to_show = explode(",", user_config_option("add_timeslot_view_dimensions_combos")); $dimensions_to_show = is_array($dimensions_to_show) ? array_filter($dimensions_to_show) : array(); $dimensions_to_skip = array_diff(get_user_dimensions_ids(), $dimensions_to_show); $listeners = array(); $listeners = array('on_selection_change' => 'ogTimeManager.renderUserCombo("' . $genid . '")'); if (!empty($dimensions_to_show)) { render_member_selectors(Timeslots::instance()->getObjectTypeId(), $genid, null, array('select_current_context' => true, 'listeners' => $listeners, 'horizontal' => true, 'width' => '270'), $dimensions_to_skip, null, true); } ?> </div> <div class="small-member-selector TMTimespanSelectorHeight" style="<?php echo can_manage_time(logged_user()) ? '' : 'display: none;'; ?> "> <?php echo label_tag(lang('user')); ?> <?php $options = array(); foreach ($users as $user) { $options[] = option_tag($user->getObjectName(), $user->getId(), $selected_user == $user->getId() ? array("selected" => "selected") : null); } echo select_box("timeslot[contact_id]", $options, array('id' => $genid . 'tsUser', 'style' => 'max-width:100px', 'tabIndex' => 1000, 'class' => 'TMTimespanRealSelector')); ?> </div> <div class="small-member-selector TMTimespanSelectorHeight" >
/** * Delete specific timeslot * * @param void * @return null */ function delete() { if (!can_manage_time(logged_user(), true)) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $timeslot = Timeslots::findById(get_id()); if (!$timeslot instanceof Timeslot) { flash_error(lang('timeslot dnx')); ajx_current("empty"); return; } // if $object = $timeslot->getObject(); if (!$object instanceof ProjectDataObject) { flash_error(lang('object dnx')); ajx_current("empty"); return; } // if if (trim($object->getObjectUrl())) { $redirect_to = $object->getObjectUrl(); } if (!$timeslot->canDelete(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if try { DB::beginWork(); $timeslot->delete(); ApplicationLogs::createLog($timeslot, $object->getWorkspaces(), ApplicationLogs::ACTION_DELETE); $object->onDeleteTimeslot($timeslot); DB::commit(); flash_success(lang('success delete timeslot')); ajx_current("reload"); } catch (Exception $e) { DB::rollback(); flash_error(lang('error delete timeslot')); ajx_current("empty"); } // try }