Move function to the right place (pull-request) and improve board task icons

This commit is contained in:
Frederic Guillot 2015-02-14 18:55:55 -05:00
parent 8c8692cd4d
commit 23346d5e76
19 changed files with 173 additions and 164 deletions

View File

@ -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()
*

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -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',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -719,4 +719,7 @@ return array(
// 'fixes' => '',
// 'is fixed by' => '',
// 'This task' => '',
// '<1h' => '',
// '%dh' => '',
// '%b %e' => '',
);

View File

@ -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>&nbsp;<?= 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>&nbsp;<?= 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>

View File

@ -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";
}

View File

@ -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;
}

View File

@ -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;
}