Move function to the right place (pull-request) and improve board task icons
This commit is contained in:
parent
8c8692cd4d
commit
23346d5e76
|
|
@ -49,6 +49,33 @@ class Helper
|
|||
return $this->container[$name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the age of an item in quasi human readable format.
|
||||
* It's in this format: <1h , NNh, NNd
|
||||
*
|
||||
* @access public
|
||||
* @param integer $timestamp Unix timestamp of the artifact for which age will be calculated
|
||||
* @param integer $now Compare with this timestamp (Default value is the current unix timestamp)
|
||||
* @return string
|
||||
*/
|
||||
public function getTaskAge($timestamp, $now = null)
|
||||
{
|
||||
if ($now === null) {
|
||||
$now = time();
|
||||
}
|
||||
|
||||
$diff = $now - $timestamp;
|
||||
|
||||
if ($diff < 3600) {
|
||||
return t('<1h');
|
||||
}
|
||||
else if ($diff < 86400) {
|
||||
return t('%dh', $diff / 3600);
|
||||
}
|
||||
|
||||
return t('%dd', ($now - $timestamp) / 86400);
|
||||
}
|
||||
|
||||
/**
|
||||
* Proxy cache helper for acl::isManagerActionAllowed()
|
||||
*
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -721,4 +721,7 @@ return array(
|
|||
'fixes' => 'corrige',
|
||||
'is fixed by' => 'est corrigée par',
|
||||
'This task' => 'Cette tâche',
|
||||
'<1h' => '<1h',
|
||||
'%dh' => '%dh',
|
||||
'%b %e' => '%e %b',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -719,4 +719,7 @@ return array(
|
|||
// 'fixes' => '',
|
||||
// 'is fixed by' => '',
|
||||
// 'This task' => '',
|
||||
// '<1h' => '',
|
||||
// '%dh' => '',
|
||||
// '%b %e' => '',
|
||||
);
|
||||
|
|
|
|||
|
|
@ -20,10 +20,6 @@
|
|||
<?php endif ?>
|
||||
</span>
|
||||
|
||||
<?php if ($task['score']): ?>
|
||||
<span class="task-score"><?= $this->e($task['score']) ?></span>
|
||||
<?php endif ?>
|
||||
|
||||
<div class="task-board-title">
|
||||
<?= $this->a($this->e($task['title']), 'task', 'readonly', array('task_id' => $task['id'], 'token' => $project['token'])) ?>
|
||||
</div>
|
||||
|
|
@ -59,7 +55,7 @@
|
|||
|
||||
<span class="task-board-user <?= $this->userSession->isCurrentUser($task['owner_id']) ? 'task-board-current-user' : '' ?>">
|
||||
<?= $this->a(
|
||||
(! empty($task['owner_id']) ? t('Assigned to %s', $task['assignee_name'] ?: $task['assignee_username']) : t('Nobody assigned')),
|
||||
(! empty($task['owner_id']) ? ($task['assignee_name'] ?: $task['assignee_username']) : t('Nobody assigned')),
|
||||
'board',
|
||||
'changeAssignee',
|
||||
array('task_id' => $task['id'], 'project_id' => $task['project_id']),
|
||||
|
|
@ -68,13 +64,9 @@
|
|||
t('Change assignee')
|
||||
) ?>
|
||||
</span>
|
||||
|
||||
<span title="<?= t('Task age in days')?>" class="task-days-age"><?= getAgeShort ($task['date_creation']) ?></span>
|
||||
<span title="<?= t('Days in this column')?>" class="task-days-incolumn"><?= getAgeShort ($task['date_moved']) ?></span>
|
||||
|
||||
<?php if ($task['score']): ?>
|
||||
<span class="task-score"><?= $this->e($task['score']) ?></span>
|
||||
<?php endif ?>
|
||||
|
||||
<span title="<?= t('Task age in days')?>" class="task-days-age"><?= $this->getTaskAge($task['date_creation']) ?></span>
|
||||
<span title="<?= t('Days in this column')?>" class="task-days-incolumn"><?= $this->getTaskAge($task['date_moved']) ?></span>
|
||||
|
||||
<div class="task-board-title">
|
||||
<?= $this->a($this->e($task['title']), 'task', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']), false, '', t('View this task')) ?>
|
||||
|
|
@ -99,40 +91,34 @@
|
|||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
|
||||
<?php if (! empty($task['date_due']) || ! empty($task['nb_files']) || ! empty($task['nb_comments']) || ! empty($task['description']) || ! empty($task['nb_subtasks']) || ! empty($task['nb_links'])): ?>
|
||||
<div class="task-board-footer">
|
||||
|
||||
<div class="task-board-icons">
|
||||
<?php if (! empty($task['date_due'])): ?>
|
||||
<div class="task-board-date <?= time() > $task['date_due'] ? 'task-board-date-overdue' : '' ?>">
|
||||
<i class="fa fa-calendar"></i> <?= dt('%b %e, %Y', $task['date_due']) ?>
|
||||
</div>
|
||||
<span class="task-board-date <?= time() > $task['date_due'] ? 'task-board-date-overdue' : '' ?>">
|
||||
<i class="fa fa-calendar"></i> <?= dt('%b %e', $task['date_due']) ?>
|
||||
</span>
|
||||
<?php endif ?>
|
||||
|
||||
<div class="task-board-icons">
|
||||
<?php if (! empty($task['nb_links'])): ?>
|
||||
<span title="<?= t('Links') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'tasklinks', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_links'] ?> <i class="fa fa-code-fork"></i></span>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if (! empty($task['nb_subtasks'])): ?>
|
||||
<span title="<?= t('Sub-Tasks') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'subtasks', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= round($task['nb_completed_subtasks']/$task['nb_subtasks']*100, 0).'%' ?> <i class="fa fa-bars"></i></span>
|
||||
<?php endif ?>
|
||||
<?php if (! empty($task['nb_links'])): ?>
|
||||
<span title="<?= t('Links') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'tasklinks', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_links'] ?> <i class="fa fa-code-fork"></i></span>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if (! empty($task['nb_files'])): ?>
|
||||
<span title="<?= t('Attachments') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'attachments', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_files'] ?> <i class="fa fa-paperclip"></i></span>
|
||||
<?php endif ?>
|
||||
<?php if (! empty($task['nb_subtasks'])): ?>
|
||||
<span title="<?= t('Sub-Tasks') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'subtasks', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= round($task['nb_completed_subtasks']/$task['nb_subtasks']*100, 0).'%' ?> <i class="fa fa-bars"></i></span>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if (! empty($task['nb_comments'])): ?>
|
||||
<span title="<?= p($task['nb_comments'], t('%d comment', $task['nb_comments']), t('%d comments', $task['nb_comments'])) ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'comments', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_comments'] ?> <i class="fa fa-comment-o"></i></span>
|
||||
<?php endif ?>
|
||||
<?php if (! empty($task['nb_files'])): ?>
|
||||
<span title="<?= t('Attachments') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'attachments', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_files'] ?> <i class="fa fa-paperclip"></i></span>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if (! empty($task['description'])): ?>
|
||||
<span title="<?= t('Description') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'description', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>">
|
||||
<i class="fa fa-file-text-o"></i>
|
||||
</span>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
<?php if (! empty($task['nb_comments'])): ?>
|
||||
<span title="<?= p($task['nb_comments'], t('%d comment', $task['nb_comments']), t('%d comments', $task['nb_comments'])) ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'comments', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>"><?= $task['nb_comments'] ?> <i class="fa fa-comment-o"></i></span>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if (! empty($task['description'])): ?>
|
||||
<span title="<?= t('Description') ?>" class="task-board-tooltip" data-href="<?= $this->u('board', 'description', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>">
|
||||
<i class="fa fa-file-text-o"></i>
|
||||
</span>
|
||||
<?php endif ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -63,31 +63,9 @@ function dt($format, $timestamp)
|
|||
* @todo Improve this function
|
||||
* @return mixed
|
||||
*/
|
||||
function p($value, $t1, $t2) {
|
||||
function p($value, $t1, $t2)
|
||||
{
|
||||
return $value > 1 ? $t2 : $t1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the age of an item in quasi human readable format.
|
||||
* It's in this format: <1h , NNh, NNd
|
||||
*
|
||||
* @access public
|
||||
* @param int $time
|
||||
* Unix timestamp of the artifact for which age will be calculated
|
||||
* @param int $currenttime
|
||||
* Comepare with timestamp. Default current unix timestamp
|
||||
* @return string
|
||||
*/
|
||||
function getAgeShort($time, $currenttime = NULL) {
|
||||
if (! $currenttime) {
|
||||
$currenttime = time ();
|
||||
}
|
||||
$diff = $currenttime - $time;
|
||||
|
||||
if ($diff < 3600)
|
||||
return "<1h";
|
||||
elseif ($diff < 86400) {
|
||||
return intval ( ($diff / 3600) ) . "h";
|
||||
}
|
||||
return intval ( ((floor ( $currenttime ) - floor ( $time )) / 86400) ) . "d";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -783,11 +783,10 @@ a.filter-on {
|
|||
/* task inside the board */
|
||||
.task-board {
|
||||
position: relative;
|
||||
margin-right: 5px;
|
||||
margin-bottom: 10px;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #000;
|
||||
padding: 5px;
|
||||
font-size: 95%;
|
||||
padding: 3px;
|
||||
font-size: 0.9em;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
|
|
@ -811,7 +810,7 @@ div.task-board-recent {
|
|||
|
||||
.task-board-title {
|
||||
margin-top: 10px;
|
||||
font-size: 110%;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.task-board-title a {
|
||||
|
|
@ -819,7 +818,7 @@ div.task-board-recent {
|
|||
}
|
||||
|
||||
.task-board-user {
|
||||
font-size: 80%;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.task-board-current-user a {
|
||||
|
|
@ -848,32 +847,14 @@ a.task-board-nobody {
|
|||
font-size: 0.9em;
|
||||
color: #000;
|
||||
border: 1px solid #555;
|
||||
border-radius: 4px;
|
||||
padding: 2px;
|
||||
padding-right: 5px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.task-board-footer {
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
.task-board-date {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 1px;
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.task-board-date-overdue {
|
||||
color: #D90000;
|
||||
}
|
||||
|
||||
.task-board-icons {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 5px;
|
||||
text-align: right;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.task-board-icons a {
|
||||
|
|
@ -890,16 +871,43 @@ a.task-board-nobody {
|
|||
opacity: 1.0;
|
||||
}
|
||||
|
||||
.task-board-date {
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.task-board-date-overdue {
|
||||
color: #D90000;
|
||||
}
|
||||
|
||||
/* task score */
|
||||
.task-score {
|
||||
font-weight: bold;
|
||||
position: absolute;
|
||||
font-size: 1.6em;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
}
|
||||
|
||||
.task-board .task-score {
|
||||
font-size: 1.5em;
|
||||
right: 5px;
|
||||
top: 0;
|
||||
/* task age */
|
||||
.task-days-age {
|
||||
font-size: 0.8em;
|
||||
border: #888 1px solid;
|
||||
border-radius:2px;
|
||||
padding: 1px 4px 1px 2px;
|
||||
border-top-left-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
|
||||
.task-days-incolumn {
|
||||
font-size: 0.8em;
|
||||
border: #888 1px solid;
|
||||
border-left: none;
|
||||
margin-left: -5px;
|
||||
border-radius:2px;
|
||||
padding: 1px 2px 1px 4px;
|
||||
border-top-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
/* task view */
|
||||
|
|
@ -988,26 +996,6 @@ a.task-board-nobody {
|
|||
padding: 3px;
|
||||
}
|
||||
|
||||
.task-days-age {
|
||||
font-size: 0.8em;
|
||||
border: #888 1px solid;
|
||||
border-radius:2px;
|
||||
padding: 1px 4px 1px 2px;
|
||||
border-top-left-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
|
||||
.task-days-incolumn {
|
||||
font-size: 0.8em;
|
||||
border: #888 1px solid;
|
||||
border-left: none;
|
||||
margin-left: -5px;
|
||||
border-radius:2px;
|
||||
padding: 1px 2px 1px 4px;
|
||||
border-top-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
.task-link-closed {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
/* task inside the board */
|
||||
.task-board {
|
||||
position: relative;
|
||||
margin-right: 5px;
|
||||
margin-bottom: 10px;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #000;
|
||||
padding: 5px;
|
||||
font-size: 95%;
|
||||
padding: 3px;
|
||||
font-size: 0.9em;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
|
|
@ -29,7 +28,7 @@ div.task-board-recent {
|
|||
|
||||
.task-board-title {
|
||||
margin-top: 10px;
|
||||
font-size: 110%;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.task-board-title a {
|
||||
|
|
@ -37,7 +36,7 @@ div.task-board-recent {
|
|||
}
|
||||
|
||||
.task-board-user {
|
||||
font-size: 80%;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.task-board-current-user a {
|
||||
|
|
@ -66,32 +65,14 @@ a.task-board-nobody {
|
|||
font-size: 0.9em;
|
||||
color: #000;
|
||||
border: 1px solid #555;
|
||||
border-radius: 4px;
|
||||
padding: 2px;
|
||||
padding-right: 5px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.task-board-footer {
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
.task-board-date {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 1px;
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.task-board-date-overdue {
|
||||
color: #D90000;
|
||||
}
|
||||
|
||||
.task-board-icons {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 5px;
|
||||
text-align: right;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.task-board-icons a {
|
||||
|
|
@ -108,16 +89,43 @@ a.task-board-nobody {
|
|||
opacity: 1.0;
|
||||
}
|
||||
|
||||
.task-board-date {
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.task-board-date-overdue {
|
||||
color: #D90000;
|
||||
}
|
||||
|
||||
/* task score */
|
||||
.task-score {
|
||||
font-weight: bold;
|
||||
position: absolute;
|
||||
font-size: 1.6em;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
}
|
||||
|
||||
.task-board .task-score {
|
||||
font-size: 1.5em;
|
||||
right: 5px;
|
||||
top: 0;
|
||||
/* task age */
|
||||
.task-days-age {
|
||||
font-size: 0.8em;
|
||||
border: #888 1px solid;
|
||||
border-radius:2px;
|
||||
padding: 1px 4px 1px 2px;
|
||||
border-top-left-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
|
||||
.task-days-incolumn {
|
||||
font-size: 0.8em;
|
||||
border: #888 1px solid;
|
||||
border-left: none;
|
||||
margin-left: -5px;
|
||||
border-radius:2px;
|
||||
padding: 1px 2px 1px 4px;
|
||||
border-top-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
/* task view */
|
||||
|
|
@ -206,26 +214,6 @@ a.task-board-nobody {
|
|||
padding: 3px;
|
||||
}
|
||||
|
||||
.task-days-age {
|
||||
font-size: 0.8em;
|
||||
border: #888 1px solid;
|
||||
border-radius:2px;
|
||||
padding: 1px 4px 1px 2px;
|
||||
border-top-left-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
|
||||
.task-days-incolumn {
|
||||
font-size: 0.8em;
|
||||
border: #888 1px solid;
|
||||
border-left: none;
|
||||
margin-left: -5px;
|
||||
border-radius:2px;
|
||||
padding: 1px 2px 1px 4px;
|
||||
border-top-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
.task-link-closed {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue