summaryrefslogtreecommitdiff
path: root/app/Template
diff options
context:
space:
mode:
Diffstat (limited to 'app/Template')
-rw-r--r--app/Template/app/projects.php2
-rw-r--r--app/Template/board/edit.php2
-rw-r--r--app/Template/board/filters.php6
-rw-r--r--app/Template/board/swimlane.php2
-rw-r--r--app/Template/hourlyrate/index.php46
-rw-r--r--app/Template/hourlyrate/remove.php13
-rw-r--r--app/Template/layout.php4
-rw-r--r--app/Template/project/index.php2
-rw-r--r--app/Template/project/show.php2
-rw-r--r--app/Template/subtask/create.php2
-rw-r--r--app/Template/subtask/edit.php2
-rw-r--r--app/Template/subtask/show.php12
-rw-r--r--app/Template/task/show.php2
-rw-r--r--app/Template/timetable/index.php44
-rw-r--r--app/Template/timetable_day/index.php45
-rw-r--r--app/Template/timetable_day/remove.php13
-rw-r--r--app/Template/timetable_extra/index.php56
-rw-r--r--app/Template/timetable_extra/remove.php13
-rw-r--r--app/Template/timetable_off/index.php56
-rw-r--r--app/Template/timetable_off/remove.php13
-rw-r--r--app/Template/timetable_week/index.php46
-rw-r--r--app/Template/timetable_week/remove.php13
-rw-r--r--app/Template/user/sidebar.php8
23 files changed, 389 insertions, 15 deletions
diff --git a/app/Template/app/projects.php b/app/Template/app/projects.php
index 92675729..b2744644 100644
--- a/app/Template/app/projects.php
+++ b/app/Template/app/projects.php
@@ -22,7 +22,7 @@
<?= $this->a($this->e($project['name']), 'board', 'show', array('project_id' => $project['id'])) ?>
<?php if (! empty($project['description'])): ?>
- <span class="column-tooltip" title='<?= $this->markdown($project['description']) ?>'>
+ <span class="column-tooltip" title='<?= $this->e($this->markdown($project['description'])) ?>'>
<i class="fa fa-info-circle"></i>
</span>
<?php endif ?>
diff --git a/app/Template/board/edit.php b/app/Template/board/edit.php
index cf0c28e6..a6df1000 100644
--- a/app/Template/board/edit.php
+++ b/app/Template/board/edit.php
@@ -13,7 +13,7 @@
<tr>
<td class="column-60"><?= $this->e($column['title']) ?>
<?php if (! empty($column['description'])): ?>
- <span class="column-tooltip" title='<?= $this->markdown($column['description']) ?>'>
+ <span class="column-tooltip" title='<?= $this->e($this->markdown($column['description'])) ?>'>
<i class="fa fa-info-circle"></i>
</span>
<?php endif ?>
diff --git a/app/Template/board/filters.php b/app/Template/board/filters.php
index fc5bfc34..2dd559b9 100644
--- a/app/Template/board/filters.php
+++ b/app/Template/board/filters.php
@@ -57,13 +57,13 @@
</span>
</li>
<li>
- <?= $this->formSelect('user_id', $users, array(), array(), array('data-placeholder="'.t('Filter by user').'"'), 'apply-filters chosen-select') ?>
+ <?= $this->formSelect('user_id', $users, array(), array(), array('data-placeholder="'.t('Filter by user').'"', 'data-notfound="'.t('No results match:').'"'), 'apply-filters chosen-select') ?>
</li>
<li>
- <?= $this->formSelect('category_id', $categories, array(), array(), array('data-placeholder="'.t('Filter by category').'"'), 'apply-filters chosen-select') ?>
+ <?= $this->formSelect('category_id', $categories, array(), array(), array('data-placeholder="'.t('Filter by category').'"', 'data-notfound="'.t('No results match:').'"'), 'apply-filters chosen-select') ?>
</li>
<li>
- <select id="more-filters" multiple data-placeholder="<?= t('More filters') ?>" class="apply-filters chosen-select hide-mobile">
+ <select id="more-filters" multiple data-placeholder="<?= t('More filters') ?>" data-notfound="<?= t('No results match:') ?>" class="apply-filters chosen-select hide-mobile">
<option value=""></option>
<option value="filter-due-date"><?= t('Filter by due date') ?></option>
<option value="filter-recent"><?= t('Filter recently updated') ?></option>
diff --git a/app/Template/board/swimlane.php b/app/Template/board/swimlane.php
index 4be92e58..744610ab 100644
--- a/app/Template/board/swimlane.php
+++ b/app/Template/board/swimlane.php
@@ -28,7 +28,7 @@
<?= $this->e($column['title']) ?>
<?php if (! empty($column['description'])): ?>
- <span class="column-tooltip pull-right" title='<?= $this->markdown($column['description']) ?>'>
+ <span class="column-tooltip pull-right" title='<?= $this->e($this->markdown($column['description'])) ?>'>
<i class="fa fa-info-circle"></i>
</span>
<?php endif ?>
diff --git a/app/Template/hourlyrate/index.php b/app/Template/hourlyrate/index.php
new file mode 100644
index 00000000..9d0b77c8
--- /dev/null
+++ b/app/Template/hourlyrate/index.php
@@ -0,0 +1,46 @@
+<div class="page-header">
+ <h2><?= t('Hourly rates') ?></h2>
+</div>
+
+<?php if (! empty($rates)): ?>
+
+<table>
+ <tr>
+ <th><?= t('Hourly rate') ?></th>
+ <th><?= t('Currency') ?></th>
+ <th><?= t('Effective date') ?></th>
+ <th><?= t('Action') ?></th>
+ </tr>
+ <?php foreach ($rates as $rate): ?>
+ <tr>
+ <td><?= n($rate['rate']) ?></td>
+ <td><?= $rate['currency'] ?></td>
+ <td><?= dt('%b %e, %Y', $rate['date_effective']) ?></td>
+ <td>
+ <?= $this->a(t('Remove'), 'hourlyrate', 'confirm', array('user_id' => $user['id'], 'rate_id' => $rate['id'])) ?>
+ </td>
+ </tr>
+ <?php endforeach ?>
+</table>
+
+<h3><?= t('Add new rate') ?></h3>
+<?php endif ?>
+
+<form method="post" action="<?= $this->u('hourlyrate', 'save', array('user_id' => $user['id'])) ?>" autocomplete="off">
+
+ <?= $this->formHidden('user_id', $values) ?>
+ <?= $this->formCsrf() ?>
+
+ <?= $this->formLabel(t('Hourly rate'), 'rate') ?>
+ <?= $this->formText('rate', $values, $errors, array('required'), 'form-numeric') ?>
+
+ <?= $this->formLabel(t('Currency'), 'currency') ?>
+ <?= $this->formSelect('currency', $currencies_list, $values, $errors, array('required')) ?>
+
+ <?= $this->formLabel(t('Effective date'), 'date_effective') ?>
+ <?= $this->formText('date_effective', $values, $errors, array('required'), 'form-date') ?>
+
+ <div class="form-actions">
+ <input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>
+ </div>
+</form>
diff --git a/app/Template/hourlyrate/remove.php b/app/Template/hourlyrate/remove.php
new file mode 100644
index 00000000..7f22728e
--- /dev/null
+++ b/app/Template/hourlyrate/remove.php
@@ -0,0 +1,13 @@
+<div class="page-header">
+ <h2><?= t('Remove hourly rate') ?></h2>
+</div>
+
+<div class="confirm">
+ <p class="alert alert-info"><?= t('Do you really want to remove this hourly rate?') ?></p>
+
+ <div class="form-actions">
+ <?= $this->a(t('Yes'), 'hourlyrate', 'remove', array('user_id' => $user['id'], 'rate_id' => $rate_id), true, 'btn btn-red') ?>
+ <?= t('or') ?>
+ <?= $this->a(t('cancel'), 'hourlyrate', 'index', array('user_id' => $user['id'])) ?>
+ </div>
+</div> \ No newline at end of file
diff --git a/app/Template/layout.php b/app/Template/layout.php
index 6c88d33b..9290a21e 100644
--- a/app/Template/layout.php
+++ b/app/Template/layout.php
@@ -37,7 +37,7 @@
<nav>
<h1><?= $this->a('K<span>B</span>', 'app', 'index', array(), false, 'logo', t('Dashboard')).' '.$this->summary($this->e($title)) ?>
<?php if (! empty($description)): ?>
- <span class="column-tooltip" title='<?= $this->markdown($description) ?>'>
+ <span class="column-tooltip" title='<?= $this->e($this->markdown($description)) ?>'>
<i class="fa fa-info-circle"></i>
</span>
<?php endif ?>
@@ -45,7 +45,7 @@
<ul>
<?php if (isset($board_selector) && ! empty($board_selector)): ?>
<li>
- <select id="board-selector" data-placeholder="<?= t('Display another project') ?>" data-board-url="<?= $this->u('board', 'show', array('project_id' => 'PROJECT_ID')) ?>">
+ <select id="board-selector" data-notfound="<?= t('No results match:') ?>" data-placeholder="<?= t('Display another project') ?>" data-board-url="<?= $this->u('board', 'show', array('project_id' => 'PROJECT_ID')) ?>">
<option value=""></option>
<?php foreach($board_selector as $board_id => $board_name): ?>
<option value="<?= $board_id ?>"><?= $this->e($board_name) ?></option>
diff --git a/app/Template/project/index.php b/app/Template/project/index.php
index 9a0f641c..05a7d955 100644
--- a/app/Template/project/index.php
+++ b/app/Template/project/index.php
@@ -42,7 +42,7 @@
<?= $this->a($this->e($project['name']), 'project', 'show', array('project_id' => $project['id'])) ?>
<?php if (! empty($project['description'])): ?>
- <span class="column-tooltip" title='<?= $this->markdown($project['description']) ?>'>
+ <span class="column-tooltip" title='<?= $this->e($this->markdown($project['description'])) ?>'>
<i class="fa fa-info-circle"></i>
</span>
<?php endif ?>
diff --git a/app/Template/project/show.php b/app/Template/project/show.php
index 4ad710a8..9c6cd1a8 100644
--- a/app/Template/project/show.php
+++ b/app/Template/project/show.php
@@ -50,7 +50,7 @@
<td>
<?= $this->e($column['title']) ?>
<?php if (! empty($column['description'])): ?>
- <span class="column-tooltip" title='<?= $this->markdown($column['description']) ?>'>
+ <span class="column-tooltip" title='<?= $this->e($this->markdown($column['description'])) ?>'>
<i class="fa fa-info-circle"></i>
</span>
<?php endif ?>
diff --git a/app/Template/subtask/create.php b/app/Template/subtask/create.php
index be7fc311..8c5aae11 100644
--- a/app/Template/subtask/create.php
+++ b/app/Template/subtask/create.php
@@ -9,7 +9,7 @@
<?= $this->formHidden('task_id', $values) ?>
<?= $this->formLabel(t('Title'), 'title') ?>
- <?= $this->formText('title', $values, $errors, array('required', 'autofocus', 'maxlength="50"')) ?><br/>
+ <?= $this->formText('title', $values, $errors, array('required', 'autofocus', 'maxlength="255"')) ?><br/>
<?= $this->formLabel(t('Assignee'), 'user_id') ?>
<?= $this->formSelect('user_id', $users_list, $values, $errors) ?><br/>
diff --git a/app/Template/subtask/edit.php b/app/Template/subtask/edit.php
index f34d9532..3058ff44 100644
--- a/app/Template/subtask/edit.php
+++ b/app/Template/subtask/edit.php
@@ -10,7 +10,7 @@
<?= $this->formHidden('task_id', $values) ?>
<?= $this->formLabel(t('Title'), 'title') ?>
- <?= $this->formText('title', $values, $errors, array('required', 'autofocus', 'maxlength="50"')) ?><br/>
+ <?= $this->formText('title', $values, $errors, array('required', 'autofocus', 'maxlength="255"')) ?><br/>
<?= $this->formLabel(t('Assignee'), 'user_id') ?>
<?= $this->formSelect('user_id', $users_list, $values, $errors) ?><br/>
diff --git a/app/Template/subtask/show.php b/app/Template/subtask/show.php
index 1d55d1ee..c7ac652a 100644
--- a/app/Template/subtask/show.php
+++ b/app/Template/subtask/show.php
@@ -20,7 +20,7 @@
<?php if (! isset($not_editable)): ?>
<?= $this->toggleSubtaskStatus($subtask, 'task') ?>
<?php else: ?>
- <?= $this->render('subtask/icons', array('subtask' => $subtask)) . $this->e($subtask['status_name']) ?>
+ <?= $this->render('subtask/icons', array('subtask' => $subtask)) . $this->e($subtask['title']) ?>
<?php endif ?>
</td>
<td>
@@ -40,6 +40,16 @@
<?php if (! isset($not_editable)): ?>
<td>
<ul>
+ <?php if ($subtask['position'] > 1): ?>
+ <li>
+ <?= $this->a(t('Move Up'), 'subtask', 'movePosition', array('project_id' => $project['id'], 'task_id' => $subtask['task_id'], 'subtask_id' => $subtask['id'], 'direction' => 'up'), true) ?>
+ </li>
+ <?php endif ?>
+ <?php if ($subtask['position'] != 0 && $subtask['position'] != count($subtasks)): ?>
+ <li>
+ <?= $this->a(t('Move Down'), 'subtask', 'movePosition', array('project_id' => $project['id'], 'task_id' => $subtask['task_id'], 'subtask_id' => $subtask['id'], 'direction' => 'down'), true) ?>
+ </li>
+ <?php endif ?>
<li>
<?= $this->a(t('Edit'), 'subtask', 'edit', array('task_id' => $task['id'], 'project_id' => $task['project_id'], 'subtask_id' => $subtask['id'])) ?>
</li>
diff --git a/app/Template/task/show.php b/app/Template/task/show.php
index 45485e53..ec930715 100644
--- a/app/Template/task/show.php
+++ b/app/Template/task/show.php
@@ -2,7 +2,7 @@
<?= $this->render('task/time', array('task' => $task, 'values' => $values, 'date_format' => $date_format, 'date_formats' => $date_formats)) ?>
<?= $this->render('task/show_description', array('task' => $task)) ?>
<?= $this->render('tasklink/show', array('task' => $task, 'links' => $links)) ?>
-<?= $this->render('subtask/show', array('task' => $task, 'subtasks' => $subtasks)) ?>
+<?= $this->render('subtask/show', array('task' => $task, 'subtasks' => $subtasks, 'project' => $project)) ?>
<?= $this->render('task/timesheet', array('task' => $task)) ?>
<?= $this->render('file/show', array('task' => $task, 'files' => $files, 'images' => $images)) ?>
<?= $this->render('task/comments', array('task' => $task, 'comments' => $comments, 'project' => $project)) ?>
diff --git a/app/Template/timetable/index.php b/app/Template/timetable/index.php
new file mode 100644
index 00000000..27cbe39c
--- /dev/null
+++ b/app/Template/timetable/index.php
@@ -0,0 +1,44 @@
+<div class="page-header">
+ <h2><?= t('Timetable') ?></h2>
+ <ul>
+ <li><?= $this->a(t('Day timetable'), 'timetableday', 'index', array('user_id' => $user['id'])) ?></li>
+ <li><?= $this->a(t('Week timetable'), 'timetableweek', 'index', array('user_id' => $user['id'])) ?></li>
+ <li><?= $this->a(t('Time off timetable'), 'timetableoff', 'index', array('user_id' => $user['id'])) ?></li>
+ <li><?= $this->a(t('Overtime timetable'), 'timetableextra', 'index', array('user_id' => $user['id'])) ?></li>
+ </ul>
+</div>
+
+<form method="get" action="?" autocomplete="off" class="form-inline">
+
+ <?= $this->formHidden('controller', $values) ?>
+ <?= $this->formHidden('action', $values) ?>
+ <?= $this->formHidden('user_id', $values) ?>
+
+ <?= $this->formLabel(t('From'), 'from') ?>
+ <?= $this->formText('from', $values, array(), array(), 'form-date') ?>
+
+ <?= $this->formLabel(t('To'), 'to') ?>
+ <?= $this->formText('to', $values, array(), array(), 'form-date') ?>
+
+ <input type="submit" value="<?= t('Execute') ?>" class="btn btn-blue"/>
+</form>
+
+<?php if (! empty($timetable)): ?>
+<hr/>
+<h3><?= t('Work timetable') ?></h3>
+<table class="table-fixed table-stripped">
+ <tr>
+ <th><?= t('Day') ?></th>
+ <th><?= t('Start') ?></th>
+ <th><?= t('End') ?></th>
+ </tr>
+ <?php foreach ($timetable as $slot): ?>
+ <tr>
+ <td><?= dt('%B %e, %Y', $slot[0]->getTimestamp()) ?></td>
+ <td><?= dt('%k:%M %p', $slot[0]->getTimestamp()) ?></td>
+ <td><?= dt('%k:%M %p', $slot[1]->getTimestamp()) ?></td>
+ </tr>
+ <?php endforeach ?>
+</table>
+
+<?php endif ?> \ No newline at end of file
diff --git a/app/Template/timetable_day/index.php b/app/Template/timetable_day/index.php
new file mode 100644
index 00000000..50aca602
--- /dev/null
+++ b/app/Template/timetable_day/index.php
@@ -0,0 +1,45 @@
+<div class="page-header">
+ <h2><?= t('Day timetable') ?></h2>
+</div>
+
+<?php if (! empty($timetable)): ?>
+
+<table class="table-fixed table-stripped">
+ <tr>
+ <th><?= t('Start time') ?></th>
+ <th><?= t('End time') ?></th>
+ <th><?= t('Action') ?></th>
+ </tr>
+ <?php foreach ($timetable as $slot): ?>
+ <tr>
+ <td><?= $slot['start'] ?></td>
+ <td><?= $slot['end'] ?></td>
+ <td>
+ <?= $this->a(t('Remove'), 'timetableday', 'confirm', array('user_id' => $user['id'], 'slot_id' => $slot['id'])) ?>
+ </td>
+ </tr>
+ <?php endforeach ?>
+</table>
+
+<h3><?= t('Add new time slot') ?></h3>
+<?php endif ?>
+
+<form method="post" action="<?= $this->u('timetableday', 'save', array('user_id' => $user['id'])) ?>" autocomplete="off">
+
+ <?= $this->formHidden('user_id', $values) ?>
+ <?= $this->formCsrf() ?>
+
+ <?= $this->formLabel(t('Start time'), 'start') ?>
+ <?= $this->formSelect('start', $this->getDayHours(), $values, $errors) ?>
+
+ <?= $this->formLabel(t('End time'), 'end') ?>
+ <?= $this->formSelect('end', $this->getDayHours(), $values, $errors) ?>
+
+ <div class="form-actions">
+ <input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>
+ </div>
+</form>
+
+<p class="alert alert-info">
+ <?= t('This timetable is used when the checkbox "all day" is checked for scheduled time off and overtime.') ?>
+</p> \ No newline at end of file
diff --git a/app/Template/timetable_day/remove.php b/app/Template/timetable_day/remove.php
new file mode 100644
index 00000000..b3ee8775
--- /dev/null
+++ b/app/Template/timetable_day/remove.php
@@ -0,0 +1,13 @@
+<div class="page-header">
+ <h2><?= t('Remove time slot') ?></h2>
+</div>
+
+<div class="confirm">
+ <p class="alert alert-info"><?= t('Do you really want to remove this time slot?') ?></p>
+
+ <div class="form-actions">
+ <?= $this->a(t('Yes'), 'timetableday', 'remove', array('user_id' => $user['id'], 'slot_id' => $slot_id), true, 'btn btn-red') ?>
+ <?= t('or') ?>
+ <?= $this->a(t('cancel'), 'timetableday', 'index', array('user_id' => $user['id'])) ?>
+ </div>
+</div> \ No newline at end of file
diff --git a/app/Template/timetable_extra/index.php b/app/Template/timetable_extra/index.php
new file mode 100644
index 00000000..a0a55bec
--- /dev/null
+++ b/app/Template/timetable_extra/index.php
@@ -0,0 +1,56 @@
+<div class="page-header">
+ <h2><?= t('Overtime timetable') ?></h2>
+</div>
+
+<?php if (! $paginator->isEmpty()): ?>
+
+<table class="table-fixed table-stripped">
+ <tr>
+ <th><?= $paginator->order(t('Day'), 'Day') ?></th>
+ <th><?= $paginator->order(t('All day'), 'all_day') ?></th>
+ <th><?= $paginator->order(t('Start time'), 'start') ?></th>
+ <th><?= $paginator->order(t('End time'), 'end') ?></th>
+ <th class="column-40"><?= t('Comment') ?></th>
+ <th><?= t('Action') ?></th>
+ </tr>
+ <?php foreach ($paginator->getCollection() as $slot): ?>
+ <tr>
+ <td><?= $slot['date'] ?></td>
+ <td><?= $slot['all_day'] == 1 ? t('Yes') : t('No') ?></td>
+ <td><?= $slot['start'] ?></td>
+ <td><?= $slot['end'] ?></td>
+ <td><?= $this->e($slot['comment']) ?></td>
+ <td>
+ <?= $this->a(t('Remove'), 'timetableextra', 'confirm', array('user_id' => $user['id'], 'slot_id' => $slot['id'])) ?>
+ </td>
+ </tr>
+ <?php endforeach ?>
+</table>
+
+<?= $paginator ?>
+
+<?php endif ?>
+
+<form method="post" action="<?= $this->u('timetableextra', 'save', array('user_id' => $user['id'])) ?>" autocomplete="off">
+
+ <?= $this->formHidden('user_id', $values) ?>
+ <?= $this->formCsrf() ?>
+
+ <?= $this->formLabel(t('Day'), 'date') ?>
+ <?= $this->formText('date', $values, $errors, array('required'), 'form-date') ?>
+
+ <?= $this->formCheckbox('all_day', t('All day'), 1) ?>
+
+ <?= $this->formLabel(t('Start time'), 'start') ?>
+ <?= $this->formSelect('start', $this->getDayHours(), $values, $errors) ?>
+
+ <?= $this->formLabel(t('End time'), 'end') ?>
+ <?= $this->formSelect('end', $this->getDayHours(), $values, $errors) ?>
+
+ <?= $this->formLabel(t('Comment'), 'comment') ?>
+ <?= $this->formText('comment', $values, $errors) ?>
+
+ <div class="form-actions">
+ <input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>
+ </div>
+</form> \ No newline at end of file
diff --git a/app/Template/timetable_extra/remove.php b/app/Template/timetable_extra/remove.php
new file mode 100644
index 00000000..d8dc5b3b
--- /dev/null
+++ b/app/Template/timetable_extra/remove.php
@@ -0,0 +1,13 @@
+<div class="page-header">
+ <h2><?= t('Remove time slot') ?></h2>
+</div>
+
+<div class="confirm">
+ <p class="alert alert-info"><?= t('Do you really want to remove this time slot?') ?></p>
+
+ <div class="form-actions">
+ <?= $this->a(t('Yes'), 'timetableextra', 'remove', array('user_id' => $user['id'], 'slot_id' => $slot_id), true, 'btn btn-red') ?>
+ <?= t('or') ?>
+ <?= $this->a(t('cancel'), 'timetableextra', 'index', array('user_id' => $user['id'])) ?>
+ </div>
+</div> \ No newline at end of file
diff --git a/app/Template/timetable_off/index.php b/app/Template/timetable_off/index.php
new file mode 100644
index 00000000..f35d331e
--- /dev/null
+++ b/app/Template/timetable_off/index.php
@@ -0,0 +1,56 @@
+<div class="page-header">
+ <h2><?= t('Time off timetable') ?></h2>
+</div>
+
+<?php if (! $paginator->isEmpty()): ?>
+
+<table class="table-fixed table-stripped">
+ <tr>
+ <th><?= $paginator->order(t('Day'), 'Day') ?></th>
+ <th><?= $paginator->order(t('All day'), 'all_day') ?></th>
+ <th><?= $paginator->order(t('Start time'), 'start') ?></th>
+ <th><?= $paginator->order(t('End time'), 'end') ?></th>
+ <th class="column-40"><?= t('Comment') ?></th>
+ <th><?= t('Action') ?></th>
+ </tr>
+ <?php foreach ($paginator->getCollection() as $slot): ?>
+ <tr>
+ <td><?= $slot['date'] ?></td>
+ <td><?= $slot['all_day'] == 1 ? t('Yes') : t('No') ?></td>
+ <td><?= $slot['start'] ?></td>
+ <td><?= $slot['end'] ?></td>
+ <td><?= $this->e($slot['comment']) ?></td>
+ <td>
+ <?= $this->a(t('Remove'), 'timetableoff', 'confirm', array('user_id' => $user['id'], 'slot_id' => $slot['id'])) ?>
+ </td>
+ </tr>
+ <?php endforeach ?>
+</table>
+
+<?= $paginator ?>
+
+<?php endif ?>
+
+<form method="post" action="<?= $this->u('timetableoff', 'save', array('user_id' => $user['id'])) ?>" autocomplete="off">
+
+ <?= $this->formHidden('user_id', $values) ?>
+ <?= $this->formCsrf() ?>
+
+ <?= $this->formLabel(t('Day'), 'date') ?>
+ <?= $this->formText('date', $values, $errors, array('required'), 'form-date') ?>
+
+ <?= $this->formCheckbox('all_day', t('All day'), 1) ?>
+
+ <?= $this->formLabel(t('Start time'), 'start') ?>
+ <?= $this->formSelect('start', $this->getDayHours(), $values, $errors) ?>
+
+ <?= $this->formLabel(t('End time'), 'end') ?>
+ <?= $this->formSelect('end', $this->getDayHours(), $values, $errors) ?>
+
+ <?= $this->formLabel(t('Comment'), 'comment') ?>
+ <?= $this->formText('comment', $values, $errors) ?>
+
+ <div class="form-actions">
+ <input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>
+ </div>
+</form> \ No newline at end of file
diff --git a/app/Template/timetable_off/remove.php b/app/Template/timetable_off/remove.php
new file mode 100644
index 00000000..64863781
--- /dev/null
+++ b/app/Template/timetable_off/remove.php
@@ -0,0 +1,13 @@
+<div class="page-header">
+ <h2><?= t('Remove time slot') ?></h2>
+</div>
+
+<div class="confirm">
+ <p class="alert alert-info"><?= t('Do you really want to remove this time slot?') ?></p>
+
+ <div class="form-actions">
+ <?= $this->a(t('Yes'), 'timetableoff', 'remove', array('user_id' => $user['id'], 'slot_id' => $slot_id), true, 'btn btn-red') ?>
+ <?= t('or') ?>
+ <?= $this->a(t('cancel'), 'timetableoff', 'index', array('user_id' => $user['id'])) ?>
+ </div>
+</div> \ No newline at end of file
diff --git a/app/Template/timetable_week/index.php b/app/Template/timetable_week/index.php
new file mode 100644
index 00000000..8fb51909
--- /dev/null
+++ b/app/Template/timetable_week/index.php
@@ -0,0 +1,46 @@
+<div class="page-header">
+ <h2><?= t('Week timetable') ?></h2>
+</div>
+
+<?php if (! empty($timetable)): ?>
+
+<table class="table-fixed table-stripped">
+ <tr>
+ <th><?= t('Day') ?></th>
+ <th><?= t('Start time') ?></th>
+ <th><?= t('End time') ?></th>
+ <th><?= t('Action') ?></th>
+ </tr>
+ <?php foreach ($timetable as $slot): ?>
+ <tr>
+ <td><?= $this->getWeekDay($slot['day']) ?></td>
+ <td><?= $slot['start'] ?></td>
+ <td><?= $slot['end'] ?></td>
+ <td>
+ <?= $this->a(t('Remove'), 'timetableweek', 'confirm', array('user_id' => $user['id'], 'slot_id' => $slot['id'])) ?>
+ </td>
+ </tr>
+ <?php endforeach ?>
+</table>
+
+<h3><?= t('Add new time slot') ?></h3>
+<?php endif ?>
+
+<form method="post" action="<?= $this->u('timetableweek', 'save', array('user_id' => $user['id'])) ?>" autocomplete="off">
+
+ <?= $this->formHidden('user_id', $values) ?>
+ <?= $this->formCsrf() ?>
+
+ <?= $this->formLabel(t('Day'), 'day') ?>
+ <?= $this->formSelect('day', $this->getWeekDays(), $values, $errors) ?>
+
+ <?= $this->formLabel(t('Start time'), 'start') ?>
+ <?= $this->formSelect('start', $this->getDayHours(), $values, $errors) ?>
+
+ <?= $this->formLabel(t('End time'), 'end') ?>
+ <?= $this->formSelect('end', $this->getDayHours(), $values, $errors) ?>
+
+ <div class="form-actions">
+ <input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>
+ </div>
+</form> \ No newline at end of file
diff --git a/app/Template/timetable_week/remove.php b/app/Template/timetable_week/remove.php
new file mode 100644
index 00000000..f8eb2bbe
--- /dev/null
+++ b/app/Template/timetable_week/remove.php
@@ -0,0 +1,13 @@
+<div class="page-header">
+ <h2><?= t('Remove time slot') ?></h2>
+</div>
+
+<div class="confirm">
+ <p class="alert alert-info"><?= t('Do you really want to remove this time slot?') ?></p>
+
+ <div class="form-actions">
+ <?= $this->a(t('Yes'), 'timetableweek', 'remove', array('user_id' => $user['id'], 'slot_id' => $slot_id), true, 'btn btn-red') ?>
+ <?= t('or') ?>
+ <?= $this->a(t('cancel'), 'timetableweek', 'index', array('user_id' => $user['id'])) ?>
+ </div>
+</div> \ No newline at end of file
diff --git a/app/Template/user/sidebar.php b/app/Template/user/sidebar.php
index e41851a9..1af10c1d 100644
--- a/app/Template/user/sidebar.php
+++ b/app/Template/user/sidebar.php
@@ -32,7 +32,7 @@
<?= $this->a(t('Time tracking'), 'user', 'timesheet', array('user_id' => $user['id'])) ?>
</li>
<?php endif ?>
-
+
<?php if ($this->userSession->isAdmin()): ?>
<li>
<?= $this->a(t('User dashboard'), 'app', 'dashboard', array('user_id' => $user['id'])) ?>
@@ -40,6 +40,12 @@
<li>
<?= $this->a(t('User calendar'), 'user', 'calendar', array('user_id' => $user['id'])) ?>
</li>
+ <li>
+ <?= $this->a(t('Hourly rates'), 'hourlyrate', 'index', array('user_id' => $user['id'])) ?>
+ </li>
+ <li>
+ <?= $this->a(t('Manage timetable'), 'timetable', 'index', array('user_id' => $user['id'])) ?>
+ </li>
<?php endif ?>
<?php if ($this->userSession->isAdmin() && ! $this->userSession->isCurrentUser($user['id'])): ?>