Change layout (experimental)

This commit is contained in:
Frédéric Guillot 2014-11-02 15:06:41 -05:00
parent 8fe5df39d9
commit 37332ae222
75 changed files with 2616 additions and 744 deletions

View File

@ -31,7 +31,6 @@ class Action extends Base
'projects_list' => $this->project->getList(false),
'colors_list' => $this->color->getList(),
'categories_list' => $this->category->getList($project['id']),
'menu' => 'projects',
'title' => t('Automatic actions')
)));
}
@ -54,7 +53,6 @@ class Action extends Base
'values' => $values,
'project' => $project,
'events' => $this->action->getCompatibleEvents($values['action_name']),
'menu' => 'projects',
'title' => t('Automatic actions')
)));
}
@ -92,7 +90,6 @@ class Action extends Base
'colors_list' => $this->color->getList(),
'categories_list' => $this->category->getList($project['id']),
'project' => $project,
'menu' => 'projects',
'title' => t('Automatic actions')
)));
}
@ -145,7 +142,6 @@ class Action extends Base
'available_events' => $this->action->getAvailableEvents(),
'available_actions' => $this->action->getAvailableActions(),
'project' => $project,
'menu' => 'projects',
'title' => t('Remove an action')
)));
}

View File

@ -26,7 +26,6 @@ class App extends Base
'board_selector' => $projects,
'events' => $this->projectActivity->getProjects(array_keys($projects), 10),
'tasks' => $this->taskFinder->getAllTasksByUser($user_id),
'menu' => 'dashboard',
'title' => t('Dashboard'),
)));
}

View File

@ -245,6 +245,8 @@ abstract class Base
$content = $this->template->load($template, $params);
$params['task_content_for_layout'] = $content;
$params['title'] = $params['task']['project_name'].' > '.$params['task']['title'];
$params['board_selector'] = $this->projectPermission->getAllowedProjects($this->acl->getUserId());
return $this->template->layout('task_layout', $params);
}
@ -261,7 +263,8 @@ abstract class Base
{
$content = $this->template->load($template, $params);
$params['project_content_for_layout'] = $content;
$params['menu'] = 'projects';
$params['title'] = $params['project']['name'] === $params['title'] ? $params['title'] : $params['project']['name'].' > '.$params['title'];
$params['board_selector'] = $this->projectPermission->getAllowedProjects($this->acl->getUserId());
return $this->template->layout('project_layout', $params);
}

View File

@ -59,7 +59,6 @@ class Board extends Base
else {
$this->response->html($this->template->layout('board_assignee', $params + array(
'menu' => 'boards',
'title' => t('Change assignee').' - '.$task['title'],
)));
}
@ -113,7 +112,6 @@ class Board extends Base
else {
$this->response->html($this->template->layout('board_category', $params + array(
'menu' => 'boards',
'title' => t('Change category').' - '.$task['title'],
)));
}
@ -222,7 +220,6 @@ class Board extends Base
'current_project_name' => $project['name'],
'board' => $this->board->get($project['id']),
'categories' => $this->category->getList($project['id'], true, true),
'menu' => 'boards',
'title' => $project['name'],
'board_selector' => $board_selector,
'board_private_refresh_interval' => $this->config->get('board_private_refresh_interval'),
@ -251,7 +248,6 @@ class Board extends Base
'values' => $values + array('project_id' => $project['id']),
'columns' => $columns,
'project' => $project,
'menu' => 'projects',
'title' => t('Edit board')
)));
}
@ -292,7 +288,6 @@ class Board extends Base
'values' => $values + array('project_id' => $project['id']),
'columns' => $columns,
'project' => $project,
'menu' => 'projects',
'title' => t('Edit board')
)));
}
@ -331,7 +326,6 @@ class Board extends Base
'values' => $values + $data,
'columns' => $columns,
'project' => $project,
'menu' => 'projects',
'title' => t('Edit board')
)));
}
@ -362,7 +356,6 @@ class Board extends Base
$this->response->html($this->projectLayout('board_remove', array(
'column' => $this->board->getColumn($this->request->getIntegerParam('column_id')),
'project' => $project,
'menu' => 'projects',
'title' => t('Remove a column from a board')
)));
}

View File

@ -43,7 +43,6 @@ class Category extends Base
'values' => array('project_id' => $project['id']),
'errors' => array(),
'project' => $project,
'menu' => 'projects',
'title' => t('Categories')
)));
}
@ -76,7 +75,6 @@ class Category extends Base
'values' => $values,
'errors' => $errors,
'project' => $project,
'menu' => 'projects',
'title' => t('Categories')
)));
}
@ -95,7 +93,6 @@ class Category extends Base
'values' => $category,
'errors' => array(),
'project' => $project,
'menu' => 'projects',
'title' => t('Categories')
)));
}
@ -127,7 +124,6 @@ class Category extends Base
'values' => $values,
'errors' => $errors,
'project' => $project,
'menu' => 'projects',
'title' => t('Categories')
)));
}
@ -145,7 +141,6 @@ class Category extends Base
$this->response->html($this->projectLayout('category_remove', array(
'project' => $project,
'category' => $category,
'menu' => 'projects',
'title' => t('Remove a category')
)));
}

View File

@ -26,7 +26,6 @@ class Comment extends Base
if (! $this->acl->isAdminUser() && $comment['user_id'] != $this->acl->getUserId()) {
$this->response->html($this->template->layout('comment_forbidden', array(
'menu' => 'tasks',
'title' => t('Access Forbidden')
)));
}
@ -50,7 +49,6 @@ class Comment extends Base
),
'errors' => array(),
'task' => $task,
'menu' => 'tasks',
'title' => t('Add a comment')
)));
}
@ -83,7 +81,6 @@ class Comment extends Base
'values' => $values,
'errors' => $errors,
'task' => $task,
'menu' => 'tasks',
'title' => t('Add a comment')
)));
}
@ -103,7 +100,6 @@ class Comment extends Base
'errors' => array(),
'comment' => $comment,
'task' => $task,
'menu' => 'tasks',
'title' => t('Edit a comment')
)));
}
@ -138,7 +134,6 @@ class Comment extends Base
'errors' => $errors,
'comment' => $comment,
'task' => $task,
'menu' => 'tasks',
'title' => t('Edit a comment')
)));
}
@ -156,7 +151,6 @@ class Comment extends Base
$this->response->html($this->taskLayout('comment_remove', array(
'comment' => $comment,
'task' => $task,
'menu' => 'tasks',
'title' => t('Remove a comment')
)));
}

View File

@ -20,9 +20,9 @@ class Config extends Base
*/
private function layout($template, array $params)
{
$params['board_selector'] = $this->projectPermission->getAllowedProjects($this->acl->getUserId());
$params['values'] = $this->config->getAll();
$params['errors'] = array();
$params['menu'] = 'config';
$params['config_content_for_layout'] = $this->template->load($template, $params);
return $this->template->layout('config_layout', $params);
@ -61,7 +61,7 @@ class Config extends Base
{
$this->response->html($this->layout('config_about', array(
'db_size' => $this->config->getDatabaseSize(),
'title' => t('About'),
'title' => t('Settings').' > '.t('About'),
)));
}
@ -75,10 +75,10 @@ class Config extends Base
$this->common('application');
$this->response->html($this->layout('config_application', array(
'title' => t('Application settings'),
'languages' => $this->config->getLanguages(),
'timezones' => $this->config->getTimezones(),
'date_formats' => $this->dateParser->getAvailableFormats(),
'title' => t('Settings').' > '.t('Application settings'),
)));
}
@ -92,8 +92,8 @@ class Config extends Base
$this->common('board');
$this->response->html($this->layout('config_board', array(
'title' => t('Board settings'),
'default_columns' => implode(', ', $this->board->getDefaultColumns()),
'title' => t('Settings').' > '.t('Board settings'),
)));
}
@ -107,7 +107,7 @@ class Config extends Base
$this->common('webhook');
$this->response->html($this->layout('config_webhook', array(
'title' => t('Webhook settings'),
'title' => t('Settings').' > '.t('Webhook settings'),
)));
}
@ -119,7 +119,7 @@ class Config extends Base
public function api()
{
$this->response->html($this->layout('config_api', array(
'title' => t('API'),
'title' => t('Settings').' > '.t('API'),
)));
}

View File

@ -23,9 +23,7 @@ class File extends Base
$this->response->html($this->taskLayout('file_new', array(
'task' => $task,
'menu' => 'tasks',
'max_size' => ini_get('upload_max_filesize'),
'title' => t('Attach a document')
)));
}
@ -137,8 +135,6 @@ class File extends Base
$this->response->html($this->taskLayout('file_remove', array(
'task' => $task,
'file' => $file,
'menu' => 'tasks',
'title' => t('Remove a file')
)));
}
}

View File

@ -34,10 +34,10 @@ class Project extends Base
}
$this->response->html($this->template->layout('project_index', array(
'board_selector' => $this->projectPermission->getAllowedProjects($this->acl->getUserId()),
'active_projects' => $active_projects,
'inactive_projects' => $inactive_projects,
'nb_projects' => $nb_projects,
'menu' => 'projects',
'title' => t('Projects').' ('.$nb_projects.')'
)));
}
@ -405,7 +405,6 @@ class Project extends Base
$this->response->html($this->template->layout('project_activity', array(
'events' => $this->projectActivity->getProject($project['id']),
'menu' => 'projects',
'project' => $project,
'title' => t('%s\'s activity', $project['name'])
)));
@ -452,10 +451,9 @@ class Project extends Base
'project_id' => $project['id'],
),
'project' => $project,
'menu' => 'projects',
'columns' => $this->board->getColumnsList($project['id']),
'categories' => $this->category->getList($project['id'], false),
'title' => $project['name'].($nb_tasks > 0 ? ' ('.$nb_tasks.')' : '')
'title' => t('Search in the project "%s"', $project['name']).($nb_tasks > 0 ? ' ('.$nb_tasks.')' : '')
)));
}
@ -487,12 +485,11 @@ class Project extends Base
'limit' => $limit,
),
'project' => $project,
'menu' => 'projects',
'columns' => $this->board->getColumnsList($project['id']),
'categories' => $this->category->getList($project['id'], false),
'tasks' => $tasks,
'nb_tasks' => $nb_tasks,
'title' => $project['name'].' ('.$nb_tasks.')'
'title' => t('Completed tasks for "%s"', $project['name']).' ('.$nb_tasks.')'
)));
}
@ -503,12 +500,15 @@ class Project extends Base
*/
public function create()
{
$is_private = $this->request->getIntegerParam('private', $this->acl->isRegularUser());
$this->response->html($this->template->layout('project_new', array(
'board_selector' => $this->projectPermission->getAllowedProjects($this->acl->getUserId()),
'errors' => array(),
'values' => array(
'is_private' => $this->request->getIntegerParam('private', $this->acl->isRegularUser()),
'is_private' => $is_private,
),
'title' => t('New project')
'title' => $is_private ? t('New private project') : t('New project'),
)));
}
@ -534,9 +534,10 @@ class Project extends Base
}
$this->response->html($this->template->layout('project_new', array(
'board_selector' => $this->projectPermission->getAllowedProjects($this->acl->getUserId()),
'errors' => $errors,
'values' => $values,
'title' => t('New Project')
'title' => ! empty($values['is_private']) ? t('New private project') : t('New project'),
)));
}
}

View File

@ -44,8 +44,6 @@ class Subtask extends Base
'errors' => array(),
'users_list' => $this->projectPermission->getUsersList($task['project_id']),
'task' => $task,
'menu' => 'tasks',
'title' => t('Add a sub-task')
)));
}
@ -82,8 +80,6 @@ class Subtask extends Base
'errors' => $errors,
'users_list' => $this->projectPermission->getUsersList($task['project_id']),
'task' => $task,
'menu' => 'tasks',
'title' => t('Add a sub-task')
)));
}
@ -104,8 +100,6 @@ class Subtask extends Base
'status_list' => $this->subTask->getStatusList(),
'subtask' => $subtask,
'task' => $task,
'menu' => 'tasks',
'title' => t('Edit a sub-task')
)));
}
@ -141,8 +135,6 @@ class Subtask extends Base
'status_list' => $this->subTask->getStatusList(),
'subtask' => $subtask,
'task' => $task,
'menu' => 'tasks',
'title' => t('Edit a sub-task')
)));
}
@ -159,8 +151,6 @@ class Subtask extends Base
$this->response->html($this->taskLayout('subtask_remove', array(
'subtask' => $subtask,
'task' => $task,
'menu' => 'tasks',
'title' => t('Remove a sub-task')
)));
}

View File

@ -77,8 +77,7 @@ class Task extends Base
'colors_list' => $this->color->getList(),
'date_format' => $this->config->get('application_date_format'),
'date_formats' => $this->dateParser->getAvailableFormats(),
'menu' => 'tasks',
'title' => $task['title'],
'title' => $task['project_name'].' > '.$task['title'],
)));
}
@ -89,27 +88,25 @@ class Task extends Base
*/
public function create()
{
$project_id = $this->request->getIntegerParam('project_id');
$this->checkProjectPermissions($project_id);
$project = $this->getProject();
$this->response->html($this->template->layout('task_new', array(
'errors' => array(),
'values' => array(
'project_id' => $project_id,
'project_id' => $project['id'],
'column_id' => $this->request->getIntegerParam('column_id'),
'color_id' => $this->request->getStringParam('color_id'),
'owner_id' => $this->request->getIntegerParam('owner_id'),
'another_task' => $this->request->getIntegerParam('another_task'),
),
'projects_list' => $this->project->getListByStatus(ProjectModel::ACTIVE),
'columns_list' => $this->board->getColumnsList($project_id),
'users_list' => $this->projectPermission->getUsersList($project_id),
'columns_list' => $this->board->getColumnsList($project['id']),
'users_list' => $this->projectPermission->getUsersList($project['id']),
'colors_list' => $this->color->getList(),
'categories_list' => $this->category->getList($project_id),
'categories_list' => $this->category->getList($project['id']),
'date_format' => $this->config->get('application_date_format'),
'date_formats' => $this->dateParser->getAvailableFormats(),
'menu' => 'tasks',
'title' => t('New task')
'title' => $project['name'].' > '.t('New task')
)));
}
@ -120,6 +117,7 @@ class Task extends Base
*/
public function save()
{
$project = $this->getProject();
$values = $this->request->getValues();
$values['creator_id'] = $this->acl->getUserId();
@ -150,14 +148,13 @@ class Task extends Base
'errors' => $errors,
'values' => $values,
'projects_list' => $this->project->getListByStatus(ProjectModel::ACTIVE),
'columns_list' => $this->board->getColumnsList($values['project_id']),
'users_list' => $this->projectPermission->getUsersList($values['project_id']),
'columns_list' => $this->board->getColumnsList($project['id']),
'users_list' => $this->projectPermission->getUsersList($project['id']),
'colors_list' => $this->color->getList(),
'categories_list' => $this->category->getList($values['project_id']),
'categories_list' => $this->category->getList($project['id']),
'date_format' => $this->config->get('application_date_format'),
'date_formats' => $this->dateParser->getAvailableFormats(),
'menu' => 'tasks',
'title' => t('New task')
'title' => $project['name'].' > '.t('New task')
)));
}
@ -183,8 +180,6 @@ class Task extends Base
'date_format' => $this->config->get('application_date_format'),
'date_formats' => $this->dateParser->getAvailableFormats(),
'ajax' => $ajax,
'menu' => 'tasks',
'title' => t('Edit a task')
);
if ($ajax) {
@ -234,8 +229,6 @@ class Task extends Base
'categories_list' => $this->category->getList($values['project_id']),
'date_format' => $this->config->get('application_date_format'),
'date_formats' => $this->dateParser->getAvailableFormats(),
'menu' => 'tasks',
'title' => t('Edit a task'),
'ajax' => $this->request->isAjax(),
)));
}
@ -286,8 +279,6 @@ class Task extends Base
$this->response->html($this->taskLayout('task_close', array(
'task' => $task,
'menu' => 'tasks',
'title' => t('Close a task')
)));
}
@ -315,8 +306,6 @@ class Task extends Base
$this->response->html($this->taskLayout('task_open', array(
'task' => $task,
'menu' => 'tasks',
'title' => t('Open a task')
)));
}
@ -348,8 +337,6 @@ class Task extends Base
$this->response->html($this->taskLayout('task_remove', array(
'task' => $task,
'menu' => 'tasks',
'title' => t('Remove a task')
)));
}
@ -378,8 +365,6 @@ class Task extends Base
$this->response->html($this->taskLayout('task_duplicate', array(
'task' => $task,
'menu' => 'tasks',
'title' => t('Duplicate a task')
)));
}
@ -426,8 +411,6 @@ class Task extends Base
'errors' => $errors,
'task' => $task,
'ajax' => $ajax,
'menu' => 'tasks',
'title' => t('Edit the description'),
);
if ($ajax) {
@ -494,8 +477,6 @@ class Task extends Base
'errors' => $errors,
'task' => $task,
'projects_list' => $projects_list,
'menu' => 'tasks',
'title' => t(ucfirst($action).' the task to another project')
)));
}
}

View File

@ -84,10 +84,10 @@ class User extends Base
{
$content = $this->template->load($template, $params);
$params['user_content_for_layout'] = $content;
$params['menu'] = 'users';
$params['board_selector'] = $this->projectPermission->getAllowedProjects($this->acl->getUserId());
if (isset($params['user'])) {
$params['title'] = $params['user']['name'] ?: $params['user']['username'];
$params['title'] = ($params['user']['name'] ?: $params['user']['username']).' (#'.$params['user']['id'].')';
}
return $this->template->layout('user_layout', $params);
@ -131,10 +131,10 @@ class User extends Base
$this->response->html(
$this->template->layout('user_index', array(
'board_selector' => $this->projectPermission->getAllowedProjects($this->acl->getUserId()),
'projects' => $this->project->getList(),
'nb_users' => $nb_users,
'users' => $users,
'menu' => 'users',
'title' => t('Users').' ('.$nb_users.')',
'pagination' => array(
'controller' => 'user',
@ -157,10 +157,10 @@ class User extends Base
public function create()
{
$this->response->html($this->template->layout('user_new', array(
'board_selector' => $this->projectPermission->getAllowedProjects($this->acl->getUserId()),
'projects' => $this->project->getList(),
'errors' => array(),
'values' => array(),
'menu' => 'users',
'title' => t('New user')
)));
}
@ -187,10 +187,10 @@ class User extends Base
}
$this->response->html($this->template->layout('user_new', array(
'board_selector' => $this->projectPermission->getAllowedProjects($this->acl->getUserId()),
'projects' => $this->project->getList(),
'errors' => $errors,
'values' => $values,
'menu' => 'users',
'title' => t('New user')
)));
}

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => 'Kompleksitet',
'limit' => 'Begrænsning',
'Task limit' => 'Opgave begrænsning',
// 'Task count' => '',
'This value must be greater than %d' => 'Denne værdi skal være større end %d',
'Edit project access list' => 'Rediger adgangstilladelser for projektet',
'Edit users access' => 'Rediger brugertilladelser',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => 'Komplexität',
'limit' => 'Limit',
'Task limit' => 'Maximale Anzahl von Aufgaben',
// 'Task count' => '',
'This value must be greater than %d' => 'Dieser Wert muss größer sein als %d',
'Edit project access list' => 'Zugriffsberechtigungen des Projektes bearbeiten',
'Edit users access' => 'Benutzerzugriff ändern',
@ -558,4 +559,6 @@ return array(
'Help on Github webhook' => 'Hilfe bei einem Github Webhook',
'Create a comment from an external provider' => 'Kommentar eines externen Providers hinzufügen',
'Github issue comment created' => 'Github Fehler Kommentar hinzugefügt',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => 'Complejidad',
'limit' => 'límite',
'Task limit' => 'Número máximo de tareas',
// 'Task count' => '',
'This value must be greater than %d' => 'Este valor no debe de ser más grande que %d',
'Edit project access list' => 'Editar los permisos del proyecto',
'Edit users access' => 'Editar los permisos de usuario',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => 'Monimutkaisuus',
'limit' => 'raja',
'Task limit' => 'Tehtävien maksimimäärä',
// 'Task count' => '',
'This value must be greater than %d' => 'Arvon täytyy olla suurempi kuin %d',
'Edit project access list' => 'Muuta projektin käyttäjiä',
'Edit users access' => 'Muuta käyttäjien pääsyä',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => 'Complexité',
'limit' => 'limite',
'Task limit' => 'Nombre maximum de tâches',
'Task count' => 'Nombre de tâches',
'This value must be greater than %d' => 'Cette valeur doit être plus grande que %d',
'Edit project access list' => 'Modifier l\'accès au projet',
'Edit users access' => 'Modifier les utilisateurs autorisés',
@ -558,4 +559,6 @@ return array(
'Help on Github webhook' => 'Aide sur les webhooks Github',
'Create a comment from an external provider' => 'Créer un commentaire depuis un fournisseur externe',
'Github issue comment created' => 'Commentaire créé sur un ticket Github',
'Configure' => 'Configurer',
'Project management' => 'Gestion des projets',
);

View File

@ -187,6 +187,7 @@ return array(
// 'Complexity' => '',
'limit' => 'limite',
'Task limit' => 'Numero massimo di compiti',
// 'Task count' => '',
'This value must be greater than %d' => 'questo valore deve essere maggiore di %d',
'Edit project access list' => 'Modificare i permessi del progetto',
'Edit users access' => 'Modificare i permessi degli utenti',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => '複雑さ',
'limit' => '制限',
'Task limit' => 'タスク数制限',
// 'Task count' => '',
'This value must be greater than %d' => '%d より大きな値を入力してください',
'Edit project access list' => 'プロジェクトのアクセス許可を変更',
'Edit users access' => 'ユーザのアクセス許可を変更',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => 'Poziom trudności',
'limit' => 'limit',
'Task limit' => 'Limit zadań',
// 'Task count' => '',
'This value must be greater than %d' => 'Wartość musi być większa niż %d',
'Edit project access list' => 'Edycja list dostępu dla projektu',
'Edit users access' => 'Edytuj dostęp',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => 'Complexidade',
'limit' => 'limite',
'Task limit' => 'Limite da tarefa',
// 'Task count' => '',
'This value must be greater than %d' => 'Este valor deve ser maior que %d',
'Edit project access list' => 'Editar lista de acesso ao projeto',
'Edit users access' => 'Editar acesso de usuários',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => 'Сложность',
'limit' => 'лимит',
'Task limit' => 'Лимит задач',
// 'Task count' => '',
'This value must be greater than %d' => 'Это значение должно быть больше %d',
'Edit project access list' => 'Изменить доступ к проекту',
'Edit users access' => 'Изменить доступ пользователей',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => 'Ungefärligt antal timmar',
'limit' => 'max',
'Task limit' => 'Uppgiftsbegränsning',
// 'Task count' => '',
'This value must be greater than %d' => 'Värdet måste vara större än %d',
'Edit project access list' => 'Ändra projektåtkomst lista',
'Edit users access' => 'Användaråtkomst',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => 'ความซับซ้อน',
'limit' => 'จำกัด',
'Task limit' => 'จำกัดงาน',
// 'Task count' => '',
'This value must be greater than %d' => 'ค่าต้องมากกว่า %d',
'Edit project access list' => 'แก้ไขการเข้าถึงรายชื่อโปรเจค',
'Edit users access' => 'แก้ไขการเข้าถึงผู้ใช้',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -187,6 +187,7 @@ return array(
'Complexity' => '复杂度',
'limit' => '限制',
'Task limit' => '任务限制',
// 'Task count' => '',
'This value must be greater than %d' => '该数值必须大于%d',
'Edit project access list' => '编辑项目存取列表',
'Edit users access' => '编辑用户存取权限',
@ -558,4 +559,6 @@ return array(
// 'Help on Github webhook' => '',
// 'Create a comment from an external provider' => '',
// 'Github issue comment created' => '',
// 'Configure' => '',
// 'Project management' => '',
);

View File

@ -1,6 +1,16 @@
<section id="main">
<div class="page-header">
<h2><?= t('Dashboard') ?></h2>
<ul>
<?php if (Helper\is_admin()): ?>
<li><i class="fa fa-plus fa-fw"></i><?= Helper\a(t('New project'), 'project', 'create') ?></li>
<?php endif ?>
<li><i class="fa fa-lock fa-fw"></i><?= Helper\a(t('New private project'), 'project', 'create', array('private' => 1)) ?></li>
<li><i class="fa fa-folder fa-fw"></i><?= Helper\a(t('Project management'), 'project', 'index') ?></li>
<?php if (Helper\is_admin()): ?>
<li><i class="fa fa-user fa-fw"></i><?= Helper\a(t('User management'), 'user', 'index') ?></li>
<li><i class="fa fa-cog fa-fw"></i><?= Helper\a(t('Settings'), 'config', 'index') ?></li>
<?php endif ?>
</ul>
</div>
<section id="dashboard">
<div class="dashboard-left-column">

View File

@ -1,22 +1,12 @@
<section id="main">
<div class="page-header board">
<h2>
<?php if (Helper\is_admin()): ?>
<?= Helper\a('<i class="fa fa-cog"></i>', 'project', 'show', array('project_id' => $current_project_id)) ?>
<?php endif ?>
<?= t('Project "%s"', $current_project_name) ?>
</h2>
</div>
<div class="project-menu">
<div class="page-header">
<ul>
<li>
<span class="hide-tablet"><?= t('Filter by user') ?></span>
<?= t('Filter by user') ?>
<?= Helper\form_select('user_id', $users, $filters) ?>
</li>
<li>
<span class="hide-tablet"><?= t('Filter by category') ?></span>
<?= t('Filter by category') ?>
<?= Helper\form_select('category_id', $categories, $filters) ?>
</li>
<li>
@ -27,16 +17,16 @@
<?= Helper\a(t('Search'), 'project', 'search', array('project_id' => $current_project_id)) ?>
</li>
<li>
<i class="fa fa-check-square-o"></i>
<i class="fa fa-check-square-o fa-fw"></i>
<?= Helper\a(t('Completed tasks'), 'project', 'tasks', array('project_id' => $current_project_id)) ?>
</li>
<li>
<i class="fa fa-dashboard"></i>
<i class="fa fa-dashboard fa-fw"></i>
<?= Helper\a(t('Activity'), 'project', 'activity', array('project_id' => $current_project_id)) ?>
</li>
<?php if (Helper\is_admin()): ?>
<li><i class="fa fa-cog"></i>
<?= Helper\a(t('Edit board'), 'board', 'edit', array('project_id' => $current_project_id)) ?>
<li><i class="fa fa-cog fa-fw"></i>
<?= Helper\a(t('Configure'), 'project', 'show', array('project_id' => $current_project_id)) ?>
<?php endif ?>
</ul>
</div>

View File

@ -1,19 +1,19 @@
<table id="board" data-project-id="<?= $current_project_id ?>" data-time="<?= time() ?>" data-check-interval="<?= $board_private_refresh_interval ?>" data-csrf-token=<?= \Core\Security::getCSRFToken() ?>>
<table id="board"
data-project-id="<?= $current_project_id ?>"
data-time="<?= time() ?>"
data-check-interval="<?= $board_private_refresh_interval ?>"
data-csrf-token=<?= \Core\Security::getCSRFToken() ?>>
<tr>
<?php $column_with = round(100 / count($board), 2); ?>
<?php foreach ($board as $column): ?>
<th width="<?= $column_with ?>%">
<div class="board-add-icon">
<a href="?controller=task&amp;action=create&amp;project_id=<?= $column['project_id'] ?>&amp;column_id=<?= $column['id'] ?>" title="<?= t('Add a new task') ?>">+</a>
<?= Helper\a('+', 'task', 'create', array('project_id' => $column['project_id'], 'column_id' => $column['id']), false, '', t('Add a new task')) ?>
</div>
<?= Helper\escape($column['title']) ?>
<?php if ($column['task_limit']): ?>
<span title="<?= t('Task limit') ?>" class="task-limit">
(
<span id="task-number-column-<?= $column['id'] ?>"><?= count($column['tasks']) ?></span>
/
<?= Helper\escape($column['task_limit']) ?>
)
(<span id="task-number-column-<?= $column['id'] ?>"><?= count($column['tasks']) ?></span>/<?= Helper\escape($column['task_limit']) ?>)
</span>
<?php else: ?>
<span title="<?= t('Task count') ?>" class="task-count">

View File

@ -1,12 +1,9 @@
<section id="main">
<div class="page-header">
<h2><?= t('Settings') ?></h2>
</div>
<section class="config-show" id="config-section">
<section class="sidebar-container" id="config-section">
<?= Helper\template('config_sidebar') ?>
<div class="config-show-main">
<div class="sidebar-content">
<?= $config_content_for_layout ?>
</div>
</section>

View File

@ -1,22 +1,20 @@
<div class="config-show-sidebar">
<div class="sidebar">
<h2><?= t('Actions') ?></h2>
<div class="config-show-actions">
<ul>
<li>
<?= Helper\a(t('About'), 'config', 'index') ?>
</li>
<li>
<?= Helper\a(t('Application settings'), 'config', 'application') ?>
</li>
<li>
<?= Helper\a(t('Board settings'), 'config', 'board') ?>
</li>
<li>
<?= Helper\a(t('Webhooks'), 'config', 'webhook') ?>
</li>
<li>
<?= Helper\a(t('API'), 'config', 'api') ?>
</li>
</ul>
</div>
<ul>
<li>
<?= Helper\a(t('About'), 'config', 'index') ?>
</li>
<li>
<?= Helper\a(t('Application settings'), 'config', 'application') ?>
</li>
<li>
<?= Helper\a(t('Board settings'), 'config', 'board') ?>
</li>
<li>
<?= Helper\a(t('Webhooks'), 'config', 'webhook') ?>
</li>
<li>
<?= Helper\a(t('API'), 'config', 'api') ?>
</li>
</ul>
</div>

View File

@ -7,21 +7,14 @@
<meta name="robots" content="noindex,nofollow">
<?php if (isset($board_public_refresh_interval)): ?>
<meta http-equiv="refresh" content="<?= $board_public_refresh_interval ?>" >
<meta http-equiv="refresh" content="<?= $board_public_refresh_interval ?>">
<?php endif ?>
<?php if (! isset($not_editable)): ?>
<?= Helper\js('assets/js/jquery-1.11.1.min.js') ?>
<?= Helper\js('assets/js/jquery-ui-1.10.4.custom.min.js') ?>
<?= Helper\js('assets/js/jquery.ui.touch-punch.min.js') ?>
<?= Helper\js('assets/js/chosen.jquery.min.js') ?>
<?= Helper\js('assets/js/app.js') ?>
<?php endif ?>
<?= Helper\css('assets/css/app.css') ?>
<?= Helper\css('assets/css/font-awesome.min.css') ?>
<?= Helper\css('assets/css/jquery-ui-1.10.4.custom.css'); ?>
<?= Helper\css('assets/css/chosen.min.css'); ?>
<link rel="icon" type="image/png" href="assets/img/favicon.png">
<link rel="apple-touch-icon" href="assets/img/touch-icon-iphone.png">
@ -29,7 +22,7 @@
<link rel="apple-touch-icon" sizes="114x114" href="assets/img/touch-icon-iphone-retina.png">
<link rel="apple-touch-icon" sizes="144x144" href="assets/img/touch-icon-ipad-retina.png">
<title><?= isset($title) ? Helper\escape($title).' - Kanboard' : 'Kanboard' ?></title>
<title><?= isset($title) ? Helper\escape($title) : 'Kanboard' ?></title>
</head>
<body>
<?php if (isset($no_layout) && $no_layout): ?>
@ -37,8 +30,7 @@
<?php else: ?>
<header>
<nav>
<a class="logo" href="?">kanboard</a>
<h1><?= Helper\a('<i class="fa fa-home fa-fw"></i>', 'app', 'index', array(), false, 'home-link', t('Dashboard')).' '.Helper\summary(Helper\escape($title)) ?></h1>
<ul>
<?php if (isset($board_selector) && ! empty($board_selector)): ?>
<li>
@ -50,26 +42,9 @@
</select>
</li>
<?php endif ?>
<li <?= isset($menu) && $menu === 'dashboard' ? 'class="active"' : '' ?>>
<a href="?controller=app"><?= t('Dashboard') ?></a>
</li>
<li <?= isset($menu) && $menu === 'boards' ? 'class="active"' : '' ?>>
<a href="?controller=board"><?= t('Boards') ?></a>
</li>
<li <?= isset($menu) && $menu === 'projects' ? 'class="active"' : '' ?>>
<a href="?controller=project"><?= t('Projects') ?></a>
</li>
<?php if (Helper\is_admin()): ?>
<li <?= isset($menu) && $menu === 'users' ? 'class="active"' : '' ?>>
<a href="?controller=user"><?= t('Users') ?></a>
</li>
<li class="hide-tablet <?= isset($menu) && $menu === 'config' ? 'active' : '' ?>">
<a href="?controller=config"><?= t('Settings') ?></a>
</li>
<?php endif ?>
<li>
<a href="?controller=user&amp;action=logout<?= Helper\param_csrf() ?>"><?= t('Logout') ?></a>
<span class="username">(<a href="?controller=user&amp;action=show&amp;user_id=<?= Helper\get_user_id() ?>"><?= Helper\escape(Helper\get_username()) ?></a>)</span>
<?= Helper\a(t('Logout'), 'user', 'logout', array(), true) ?>
<span class="username">(<?= Helper\a(Helper\escape(Helper\get_username()), 'user', 'show', array('user_id' => Helper\get_user_id())) ?>)</span>
</li>
</ul>
</nav>

View File

@ -1,11 +1,9 @@
<section id="main">
<div class="page-header">
<h2><?= t('%s\'s activity', $project['name']) ?></h2>
<ul>
<li><?= Helper\a(t('Back to the board'), 'board', 'show', array('project_id' => $project['id'])) ?></li>
<li><?= Helper\a(t('Search'), 'project', 'search', array('project_id' => $project['id'])) ?></li>
<li><?= Helper\a(t('Completed tasks'), 'project', 'tasks', array('project_id' => $project['id'])) ?></li>
<li><?= Helper\a(t('List of projects'), 'project', 'index') ?></li>
<li><i class="fa fa-table fa-fw"></i><?= Helper\a(t('Back to the board'), 'board', 'show', array('project_id' => $project['id'])) ?></li>
<li><i class="fa fa-search fa-fw"></i><?= Helper\a(t('Search'), 'project', 'search', array('project_id' => $project['id'])) ?></li>
<li><i class="fa fa-check-square-o fa-fw"></i><?= Helper\a(t('Completed tasks'), 'project', 'tasks', array('project_id' => $project['id'])) ?></li>
</ul>
</div>
<section>

View File

@ -1,11 +1,10 @@
<section id="main">
<div class="page-header">
<h2><?= t('Projects') ?><span id="page-counter"> (<?= $nb_projects ?>)</span></h2>
<ul>
<?php if (Helper\is_admin()): ?>
<li><?= Helper\a(t('New project'), 'project', 'create') ?></li>
<li><i class="fa fa-plus fa-fw"></i><?= Helper\a(t('New project'), 'project', 'create') ?></li>
<?php endif ?>
<li><?= Helper\a(t('New private project'), 'project', 'create', array('private' => 1)) ?></li>
<li><i class="fa fa-lock fa-fw"></i><?= Helper\a(t('New private project'), 'project', 'create', array('private' => 1)) ?></li>
</ul>
</div>
<section>

View File

@ -1,16 +1,15 @@
<section id="main">
<div class="page-header">
<h2><?= t('Project "%s"', $project['name']) ?> (#<?= $project['id'] ?>)</h2>
<ul>
<li><?= Helper\a(t('Back to the board'), 'board', 'show', array('project_id' => $project['id'])) ?></li>
<li><?= Helper\a(t('All projects'), 'project', 'index') ?></li>
<li><i class="fa fa-table fa-fw"></i><?= Helper\a(t('Back to the board'), 'board', 'show', array('project_id' => $project['id'])) ?></li>
<li><i class="fa fa-folder fa-fw"></i><?= Helper\a(t('All projects'), 'project', 'index') ?></li>
</ul>
</div>
<section class="project-show" id="project-section">
<section class="sidebar-container" id="project-section">
<?= Helper\template('project_sidebar', array('project' => $project)) ?>
<div class="project-show-main">
<div class="sidebar-content">
<?= $project_content_for_layout ?>
</div>
</section>

View File

@ -1,8 +1,7 @@
<section id="main">
<div class="page-header">
<h2><?= empty($values['is_private']) ? t('New project') : t('New private project') ?></h2>
<ul>
<li><?= Helper\a(t('All projects'), 'project', 'index') ?></li>
<li><i class="fa fa-folder fa-fw"></i><?= Helper\a(t('All projects'), 'project', 'index') ?></li>
</ul>
</div>
<section>

View File

@ -1,16 +1,9 @@
<section id="main">
<div class="page-header">
<h2>
<?= t('Search in the project "%s"', $project['name']) ?>
<?php if (! empty($nb_tasks)): ?>
<span id="page-counter"> (<?= $nb_tasks ?>)</span>
<?php endif ?>
</h2>
<ul>
<li><?= Helper\a(t('Back to the board'), 'board', 'show', array('project_id' => $project['id'])) ?></li>
<li><?= Helper\a(t('Completed tasks'), 'project', 'tasks', array('project_id' => $project['id'])) ?></li>
<li><?= Helper\a(t('Activity'), 'project', 'activity', array('project_id' => $project['id'])) ?></li>
<li><?= Helper\a(t('List of projects'), 'project', 'index') ?></li>
<li><i class="fa fa-table fa-fw"></i><?= Helper\a(t('Back to the board'), 'board', 'show', array('project_id' => $project['id'])) ?></li>
<li><i class="fa fa-check-square-o fa-fw"></i><?= Helper\a(t('Completed tasks'), 'project', 'tasks', array('project_id' => $project['id'])) ?></li>
<li><i class="fa fa-dashboard fa-fw"></i><?= Helper\a(t('Activity'), 'project', 'activity', array('project_id' => $project['id'])) ?></li>
</ul>
</div>
<section>

View File

@ -1,49 +1,47 @@
<div class="project-show-sidebar">
<div class="sidebar">
<h2><?= t('Actions') ?></h2>
<div class="project-show-actions">
<ul>
<li>
<a href="?controller=project&amp;action=show&amp;project_id=<?= $project['id'] ?>"><?= t('Summary') ?></a>
</li>
<ul>
<li>
<a href="?controller=project&amp;action=show&amp;project_id=<?= $project['id'] ?>"><?= t('Summary') ?></a>
</li>
<?php if (Helper\is_admin() || $project['is_private']): ?>
<?php if (Helper\is_admin() || $project['is_private']): ?>
<li>
<a href="?controller=project&amp;action=export&amp;project_id=<?= $project['id'] ?>"><?= t('Tasks Export') ?></a>
</li>
<li>
<a href="?controller=project&amp;action=share&amp;project_id=<?= $project['id'] ?>"><?= t('Public access') ?></a>
</li>
<li>
<a href="?controller=project&amp;action=edit&amp;project_id=<?= $project['id'] ?>"><?= t('Edit project') ?></a>
</li>
<li>
<a href="?controller=board&amp;action=edit&amp;project_id=<?= $project['id'] ?>"><?= t('Edit board') ?></a>
</li>
<li>
<a href="?controller=category&amp;action=index&amp;project_id=<?= $project['id'] ?>"><?= t('Category management') ?></a>
</li>
<?php if (Helper\is_admin()): ?>
<li>
<a href="?controller=project&amp;action=export&amp;project_id=<?= $project['id'] ?>"><?= t('Tasks Export') ?></a>
<a href="?controller=project&amp;action=users&amp;project_id=<?= $project['id'] ?>"><?= t('User management') ?></a>
</li>
<li>
<a href="?controller=project&amp;action=share&amp;project_id=<?= $project['id'] ?>"><?= t('Public access') ?></a>
</li>
<li>
<a href="?controller=project&amp;action=edit&amp;project_id=<?= $project['id'] ?>"><?= t('Edit project') ?></a>
</li>
<li>
<a href="?controller=board&amp;action=edit&amp;project_id=<?= $project['id'] ?>"><?= t('Edit board') ?></a>
</li>
<li>
<a href="?controller=category&amp;action=index&amp;project_id=<?= $project['id'] ?>"><?= t('Category management') ?></a>
</li>
<?php if (Helper\is_admin()): ?>
<li>
<a href="?controller=project&amp;action=users&amp;project_id=<?= $project['id'] ?>"><?= t('User management') ?></a>
</li>
<?php endif ?>
<li>
<a href="?controller=action&amp;action=index&amp;project_id=<?= $project['id'] ?>"><?= t('Automatic actions') ?></a>
</li>
<li>
<a href="?controller=project&amp;action=duplicate&amp;project_id=<?= $project['id'].Helper\param_csrf() ?>"><?= t('Duplicate') ?></a>
</li>
<li>
<?php if ($project['is_active']): ?>
<a href="?controller=project&amp;action=disable&amp;project_id=<?= $project['id'].Helper\param_csrf() ?>"><?= t('Disable') ?></a>
<?php else: ?>
<a href="?controller=project&amp;action=enable&amp;project_id=<?= $project['id'].Helper\param_csrf() ?>"><?= t('Enable') ?></a>
<?php endif ?>
<li>
<a href="?controller=action&amp;action=index&amp;project_id=<?= $project['id'] ?>"><?= t('Automatic actions') ?></a>
</li>
<li>
<a href="?controller=project&amp;action=duplicate&amp;project_id=<?= $project['id'].Helper\param_csrf() ?>"><?= t('Duplicate') ?></a>
</li>
<li>
<?php if ($project['is_active']): ?>
<a href="?controller=project&amp;action=disable&amp;project_id=<?= $project['id'].Helper\param_csrf() ?>"><?= t('Disable') ?></a>
<?php else: ?>
<a href="?controller=project&amp;action=enable&amp;project_id=<?= $project['id'].Helper\param_csrf() ?>"><?= t('Enable') ?></a>
<?php endif ?>
</li>
<li>
<a href="?controller=project&amp;action=remove&amp;project_id=<?= $project['id'] ?>"><?= t('Remove') ?></a>
</li>
<?php endif ?>
</ul>
</div>
</li>
<li>
<a href="?controller=project&amp;action=remove&amp;project_id=<?= $project['id'] ?>"><?= t('Remove') ?></a>
</li>
<?php endif ?>
</ul>
</div>

View File

@ -1,11 +1,9 @@
<section id="main">
<div class="page-header">
<h2><?= t('Completed tasks for "%s"', $project['name']) ?><span id="page-counter"> (<?= $nb_tasks ?>)</span></h2>
<ul>
<li><a href="?controller=board&amp;action=show&amp;project_id=<?= $project['id'] ?>"><?= t('Back to the board') ?></a></li>
<li><a href="?controller=project&amp;action=search&amp;project_id=<?= $project['id'] ?>"><?= t('Search') ?></a></li>
<li><a href="?controller=project&amp;action=activity&amp;project_id=<?= $project['id'] ?>"><?= t('Activity') ?></a></li>
<li><a href="?controller=project&amp;action=index"><?= t('List of projects') ?></a></li>
<li><i class="fa fa-table fa-fw"></i><?= Helper\a(t('Back to the board'), 'board', 'show', array('project_id' => $project['id'])) ?></li>
<li><i class="fa fa-search fa-fw"></i><?= Helper\a(t('Search'), 'project', 'search', array('project_id' => $project['id'])) ?></li>
<li><i class="fa fa-dashboard fa-fw"></i><?= Helper\a(t('Activity'), 'project', 'activity', array('project_id' => $project['id'])) ?></li>
</ul>
</div>
<section>

View File

@ -1,15 +1,14 @@
<section id="main">
<div class="page-header">
<h2><?= Helper\escape($task['project_name']) ?> &gt; <?= t('Task #%d', $task['id']) ?></h2>
<ul>
<li><a href="?controller=board&amp;action=show&amp;project_id=<?= $task['project_id'] ?>"><?= t('Back to the board') ?></a></li>
<li><i class="fa fa-table fa-fw"></i><?= Helper\a(t('Back to the board'), 'board', 'show', array('project_id' => $task['project_id'])) ?></li>
</ul>
</div>
<section class="task-show" id="task-section">
<section class="sidebar-container" id="task-section">
<?= Helper\template('task_sidebar', array('task' => $task, 'hide_remove_menu' => isset($hide_remove_menu))) ?>
<div class="task-show-main">
<div class="sidebar-content">
<?= $task_content_for_layout ?>
</div>
</section>

View File

@ -1,9 +1,11 @@
<section id="main">
<div class="page-header">
<h2><?= Helper\in_list($values['project_id'], $projects_list) ?> &gt; <?= t('New task') ?></h2>
<ul>
<li><i class="fa fa-table fa-fw"></i><?= Helper\a(t('Back to the board'), 'board', 'show', array('project_id' => $values['project_id'])) ?></li>
</ul>
</div>
<section id="task-section">
<form method="post" action="<?= Helper\u('task', 'save') ?>" autocomplete="off">
<form method="post" action="<?= Helper\u('task', 'save', array('project_id' => $values['project_id'])) ?>" autocomplete="off">
<?= Helper\form_csrf() ?>

View File

@ -1,26 +1,24 @@
<div class="task-show-sidebar">
<div class="sidebar">
<h2><?= t('Actions') ?></h2>
<div class="task-show-actions">
<ul>
<li><a href="?controller=task&amp;action=show&amp;task_id=<?= $task['id'] ?>"><?= t('Summary') ?></a></li>
<li><a href="?controller=task&amp;action=edit&amp;task_id=<?= $task['id'] ?>"><?= t('Edit the task') ?></a></li>
<li><a href="?controller=task&amp;action=description&amp;task_id=<?= $task['id'] ?>"><?= t('Edit the description') ?></a></li>
<li><a href="?controller=subtask&amp;action=create&amp;task_id=<?= $task['id'] ?>"><?= t('Add a sub-task') ?></a></li>
<li><a href="?controller=comment&amp;action=create&amp;task_id=<?= $task['id'] ?>"><?= t('Add a comment') ?></a></li>
<li><a href="?controller=file&amp;action=create&amp;task_id=<?= $task['id'] ?>"><?= t('Attach a document') ?></a></li>
<li><a href="?controller=task&amp;action=duplicate&amp;project_id=<?= $task['project_id'] ?>&amp;task_id=<?= $task['id'] ?>"><?= t('Duplicate') ?></a></li>
<li><a href="?controller=task&amp;action=copy&amp;project_id=<?= $task['project_id'] ?>&amp;task_id=<?= $task['id'] ?>"><?= t('Duplicate to another project') ?></a></li>
<li><a href="?controller=task&amp;action=move&amp;project_id=<?= $task['project_id'] ?>&amp;task_id=<?= $task['id'] ?>"><?= t('Move to another project') ?></a></li>
<li>
<?php if ($task['is_active'] == 1): ?>
<a href="?controller=task&amp;action=close&amp;task_id=<?= $task['id'] ?>"><?= t('Close this task') ?></a>
<?php else: ?>
<a href="?controller=task&amp;action=open&amp;task_id=<?= $task['id'] ?>"><?= t('Open this task') ?></a>
<?php endif ?>
</li>
<?php if (! $hide_remove_menu): ?>
<li><a href="?controller=task&amp;action=remove&amp;task_id=<?= $task['id'] ?>"><?= t('Remove') ?></a></li>
<ul>
<li><a href="?controller=task&amp;action=show&amp;task_id=<?= $task['id'] ?>"><?= t('Summary') ?></a></li>
<li><a href="?controller=task&amp;action=edit&amp;task_id=<?= $task['id'] ?>"><?= t('Edit the task') ?></a></li>
<li><a href="?controller=task&amp;action=description&amp;task_id=<?= $task['id'] ?>"><?= t('Edit the description') ?></a></li>
<li><a href="?controller=subtask&amp;action=create&amp;task_id=<?= $task['id'] ?>"><?= t('Add a sub-task') ?></a></li>
<li><a href="?controller=comment&amp;action=create&amp;task_id=<?= $task['id'] ?>"><?= t('Add a comment') ?></a></li>
<li><a href="?controller=file&amp;action=create&amp;task_id=<?= $task['id'] ?>"><?= t('Attach a document') ?></a></li>
<li><a href="?controller=task&amp;action=duplicate&amp;project_id=<?= $task['project_id'] ?>&amp;task_id=<?= $task['id'] ?>"><?= t('Duplicate') ?></a></li>
<li><a href="?controller=task&amp;action=copy&amp;project_id=<?= $task['project_id'] ?>&amp;task_id=<?= $task['id'] ?>"><?= t('Duplicate to another project') ?></a></li>
<li><a href="?controller=task&amp;action=move&amp;project_id=<?= $task['project_id'] ?>&amp;task_id=<?= $task['id'] ?>"><?= t('Move to another project') ?></a></li>
<li>
<?php if ($task['is_active'] == 1): ?>
<a href="?controller=task&amp;action=close&amp;task_id=<?= $task['id'] ?>"><?= t('Close this task') ?></a>
<?php else: ?>
<a href="?controller=task&amp;action=open&amp;task_id=<?= $task['id'] ?>"><?= t('Open this task') ?></a>
<?php endif ?>
</ul>
</div>
</li>
<?php if (! $hide_remove_menu): ?>
<li><a href="?controller=task&amp;action=remove&amp;task_id=<?= $task['id'] ?>"><?= t('Remove') ?></a></li>
<?php endif ?>
</ul>
</div>

View File

@ -1,9 +1,8 @@
<section id="main">
<div class="page-header">
<h2><?= t('Users') ?><span id="page-counter"> (<?= $nb_users ?>)</span></h2>
<?php if (Helper\is_admin()): ?>
<ul>
<li><?= Helper\a(t('New user'), 'user', 'create') ?></li>
<li><i class="fa fa-plus fa-fw"></i><?= Helper\a(t('New user'), 'user', 'create') ?></li>
</ul>
<?php endif ?>
</div>
@ -53,10 +52,10 @@
<td>
<ul class="no-bullet">
<?php if ($user['google_id']): ?>
<li><i class="fa fa-google"></i> <?= t('Google account linked') ?></li>
<li><i class="fa fa-google fa-fw"></i><?= t('Google account linked') ?></li>
<?php endif ?>
<?php if ($user['github_id']): ?>
<li><i class="fa fa-github"></i> <?= t('Github account linked') ?></li>
<li><i class="fa fa-github fa-fw"></i><?= t('Github account linked') ?></li>
<?php endif ?>
</ul>
</td>

View File

@ -1,18 +1,17 @@
<section id="main">
<div class="page-header">
<h2><?= Helper\escape($user['name'] ?: $user['username']).' (#'.$user['id'].')' ?></h2>
<?php if (Helper\is_admin()): ?>
<ul>
<li><a href="?controller=user&amp;action=index"><?= t('All users') ?></a></li>
<li><a href="?controller=user&amp;action=create"><?= t('New user') ?></a></li>
<li><i class="fa fa-user fa-fw"></i><?= Helper\a(t('All users'), 'user', 'index') ?></li>
<li><i class="fa fa-plus fa-fw"></i><?= Helper\a(t('New user'), 'user', 'create') ?></li>
</ul>
<?php endif ?>
</div>
<section class="user-show" id="user-section">
<section class="sidebar-container" id="user-section">
<?= Helper\template('user_sidebar', array('user' => $user)) ?>
<div class="user-show-main">
<div class="sidebar-content">
<?= $user_content_for_layout ?>
</div>
</section>

View File

@ -1,12 +1,11 @@
<section id="main">
<div class="page-header">
<h2><?= t('New user') ?></h2>
<ul>
<li><a href="?controller=user"><?= t('All users') ?></a></li>
<li><i class="fa fa-user fa-fw"></i><?= Helper\a(t('All users'), 'user', 'index') ?></li>
</ul>
</div>
<section>
<form method="post" action="?controller=user&amp;action=save" autocomplete="off">
<form method="post" action="<?= Helper\u('user', 'save') ?>" autocomplete="off">
<?= Helper\form_csrf() ?>
@ -32,7 +31,7 @@
<div class="form-actions">
<input type="submit" value="<?= t('Save') ?>" class="btn btn-blue"/>
<?= t('or') ?> <a href="?controller=user"><?= t('cancel') ?></a>
<?= t('or') ?> <?= Helper\a(t('cancel'), 'user', 'index') ?>
</div>
</form>
</section>

View File

@ -1,42 +1,39 @@
<div class="project-show-sidebar">
<div class="sidebar">
<h2><?= t('Actions') ?></h2>
<div class="user-show-actions">
<ul>
<li>
<a href="?controller=user&amp;action=show&amp;user_id=<?= $user['id'] ?>"><?= t('Summary') ?></a>
</li>
<ul>
<li>
<?= Helper\a(t('Summary'), 'user', 'show', array('user_id' => $user['id'])) ?>
</li>
<?php if (Helper\is_admin() || Helper\is_current_user($user['id'])): ?>
<?php if (Helper\is_admin() || Helper\is_current_user($user['id'])): ?>
<li>
<a href="?controller=user&amp;action=edit&amp;user_id=<?= $user['id'] ?>"><?= t('Edit profile') ?></a>
<?= Helper\a(t('Edit profile'), 'user', 'edit', array('user_id' => $user['id'])) ?>
</li>
<?php if ($user['is_ldap_user'] == 0): ?>
<li>
<a href="?controller=user&amp;action=password&amp;user_id=<?= $user['id'] ?>"><?= t('Change password') ?></a>
</li>
<li>
<?= Helper\a(t('Change password'), 'user', 'password', array('user_id' => $user['id'])) ?>
</li>
<?php endif ?>
<li>
<a href="?controller=user&amp;action=notifications&amp;user_id=<?= $user['id'] ?>"><?= t('Email notifications') ?></a>
<?= Helper\a(t('Email notifications'), 'user', 'notifications', array('user_id' => $user['id'])) ?>
</li>
<li>
<a href="?controller=user&amp;action=external&amp;user_id=<?= $user['id'] ?>"><?= t('External accounts') ?></a>
<?= Helper\a(t('External accounts'), 'user', 'external', array('user_id' => $user['id'])) ?>
</li>
<li>
<a href="?controller=user&amp;action=last&amp;user_id=<?= $user['id'] ?>"><?= t('Last logins') ?></a>
<?= Helper\a(t('Last logins'), 'user', 'last', array('user_id' => $user['id'])) ?>
</li>
<li>
<a href="?controller=user&amp;action=sessions&amp;user_id=<?= $user['id'] ?>"><?= t('Persistent connections') ?></a>
<?= Helper\a(t('Persistent connections'), 'user', 'sessions', array('user_id' => $user['id'])) ?>
</li>
<?php endif ?>
<?php endif ?>
<?php if (Helper\is_admin()): ?>
<?php if (Helper\is_admin()): ?>
<li>
<a href="?controller=user&amp;action=remove&amp;user_id=<?= $user['id'] ?>"><?= t('Remove') ?></a>
<?= Helper\a(t('Remove'), 'user', 'remove', array('user_id' => $user['id'])) ?>
</li>
<?php endif ?>
</ul>
</div>
<?php endif ?>
</ul>
</div>

View File

@ -6,7 +6,6 @@ namespace Helper;
* Template helpers
*
*/
use Core\Security;
use Core\Template;
use Core\Tool;
@ -568,9 +567,9 @@ function form_numeric($name, $values = array(), array $errors = array(), array $
* @param string $class CSS class attribute
* @return string
*/
function a($label, $controller, $action, array $params = array(), $csrf = false, $class = '')
function a($label, $controller, $action, array $params = array(), $csrf = false, $class = '', $title = '')
{
return '<a href="'.u($controller, $action, $params, $csrf).'" class="'.$class.'">'.$label.'</a>';
return '<a href="'.u($controller, $action, $params, $csrf).'" class="'.$class.'" title="'.$title.'">'.$label.'</a>';
}
/**

42
assets/css/activity.css Normal file
View File

@ -0,0 +1,42 @@
/* activity */
.activity-event {
margin-bottom: 20px;
}
.activity-datetime {
color: #999;
font-size: 0.85em;
}
.activity-content {
margin-top: 10px;
margin-left: 20px;
padding-left: 20px;
border-left: 2px solid #666;
}
.activity-title {
font-weight: bold;
color: #000;
}
.activity-description {
font-size: 0.9em;
color: #aaa;
padding-top: 5px;
}
.activity-description ul {
margin-top: 10px;
}
.activity-description li {
margin-left: 40px;
list-style-type: circle;
color: #555;
}
.activity-description .markdown {
margin-top: 10px;
color: #555;
}

79
assets/css/alert.css Normal file
View File

@ -0,0 +1,79 @@
/* alerts */
.alert {
padding: 8px 35px 8px 14px;
margin-bottom: 20px;
color: #c09853;
background-color: #fcf8e3;
border: 1px solid #fbeed5;
border-radius: 4px;
}
.alert-success {
color: #468847;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-error {
color: #b94a48;
background-color: #f2dede;
border-color: #eed3d7;
}
.alert-info {
color: #3a87ad;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-normal {
color: #333;
background-color: #f0f0f0;
border-color: #ddd;
}
.alert ul {
margin-top: 10px;
margin-bottom: 10px;
}
.alert li {
margin-left: 25px;
}
/* fade out animation */
.alert-fade-out {
animation: fadeOut 1s forwards;
-webkit-animation: fadeOut 1s forwards;
animation-delay: 7s;
-webkit-animation-delay: 7s;
cursor: pointer;
}
@-webkit-keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
margin: 0;
padding: 0;
height: 0;
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
margin: 0;
padding: 0;
height: 0;
}
}
.page .alert {
margin-top: 10px;
}

File diff suppressed because one or more lines are too long

34
assets/css/base.css Normal file
View File

@ -0,0 +1,34 @@
/* reset */
li,
ul,
ol,
table,
tr,
td,
th,
p,
blockquote,
body {
margin: 0;
padding: 0;
font-size: 100%;
}
body {
margin-left: 10px;
margin-right: 10px;
color: #333;
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
ul.no-bullet li {
list-style-type: none;
margin-left: 0;
}
.pull-right {
text-align: right;
}

62
assets/css/board.css Normal file
View File

@ -0,0 +1,62 @@
/* board filters */
a.filter-on {
font-weight: bold;
color: #333;
}
/* public board */
.public-board {
margin-top: 5px;
}
.public-task {
max-width: 700px;
margin: 0 auto;
margin-top: 5px;
}
/* board table */
#board {
table-layout: fixed;
}
#board th a {
text-decoration: none;
color: #3366CC;
font-size: 150%;
}
#board td {
vertical-align: top;
}
#board td.task-limit-warning {
background-color: #DF5353;
}
.board-add-icon {
float: left;
padding: 0 5px;
}
.board-add-icon a {
line-height: 70%;
}
.task-count {
color: #999;
font-weight: normal;
}
/* drag and drop */
.draggable-item {
cursor: pointer;
user-select: none;
}
.draggable-placeholder {
border: 2px dashed #000;
background: #fafafa;
height: 70px;
margin-bottom: 10px;
}

54
assets/css/button.css Normal file
View File

@ -0,0 +1,54 @@
/* buttons */
.btn {
-webkit-appearance: none;
appearance: none;
display: inline-block;
color: #333;
border: 1px solid #ccc;
background: #efefef;
padding: 5px;
padding-left: 15px;
padding-right: 15px;
font-size: 0.9em;
cursor: pointer;
border-radius: 2px;
}
a.btn {
text-decoration: none;
font-weight: bold;
}
.btn-small {
padding: 2px;
padding-left: 5px;
padding-right: 5px;
}
.btn-red {
border-color: #b0281a;;
background: #d14836;
color: #fff;
}
a.btn-red:hover,
.btn-red:hover,
.btn-red:focus {
color: #fff;
background: #c53727;
}
a.btn-blue,
.btn-blue {
border-color: #3079ed;
background: #4d90fe;
color: #fff;
}
a.btn-blue:hover,
.btn-blue:hover,
a.btn-blue:focus,
.btn-blue:focus {
border-color: #2f5bb7;
background: #357ae8;
}

67
assets/css/comment.css Normal file
View File

@ -0,0 +1,67 @@
/* comments */
.comment {
margin-bottom: 20px;
}
.comment:hover {
background: #F7F8E0;
}
.comment-inner {
border-left: 4px solid #333;
padding-bottom: 10px;
padding-left: 20px;
margin-left: 20px;
margin-right: 10px;
}
.comment-preview {
border: 2px solid #000;
border-radius: 3px;
padding: 10px;
}
.comment-preview .comment-inner {
border: none;
padding: 0;
margin: 0;
}
.comment-title {
margin-bottom: 8px;
padding-bottom: 3px;
border-bottom: 1px dotted #aaa;
}
.comment-actions {
font-size: 0.8em;
padding: 0;
text-align: right;
}
.comment-actions li {
display: inline;
padding-left: 5px;
padding-right: 5px;
border-right: 1px dotted #000;
}
.comment-actions li:last-child {
padding-right: 0;
border: 0;
}
.comment-username {
font-weight: bold;
}
.comment-textarea {
height: 200px;
width: 80%;
max-width: 800px;
}
#comments .comment-textarea {
height: 80px;
width: 500px;
}

5
assets/css/confirm.css Normal file
View File

@ -0,0 +1,5 @@
/* confirmation box */
.confirm {
max-width: 700px;
font-size: 1.1em;
}

15
assets/css/dashboard.css Normal file
View File

@ -0,0 +1,15 @@
/* dashboard */
#dashboard table {
font-size: 0.95em;
}
.dashboard-left-column {
width: 55%;
float: left;
}
.dashboard-right-column {
margin-left: 5%;
width: 40%;
float: left;
}

166
assets/css/form.css Normal file
View File

@ -0,0 +1,166 @@
/* forms */
form {
padding: 10px;
margin-bottom: 20px;
background: #fefefe;
border: 1px solid #ddd;
border-radius: 5px;
}
label {
cursor: pointer;
display: block;
margin-top: 10px;
}
input[type="number"],
input[type="date"],
input[type="email"],
input[type="tel"],
input[type="password"],
input[type="text"] {
color: #888;
border: 1px solid #ccc;
width: 400px;
max-width: 95%;
font-size: 1.0em;
height: 25px;
padding-bottom: 0;
font-family: sans-serif;
margin-top: 5px;
-webkit-appearance: none;
appearance: none;
}
input[type="number"]:focus,
input[type="date"]:focus,
input[type="email"]:focus,
input[type="tel"]:focus,
input[type="password"]:focus,
input[type="text"]:focus,
textarea:focus {
color: #000;
border-color: rgba(82, 168, 236, 0.8);
outline: 0;
box-shadow: 0 0 8px rgba(82, 168, 236, 0.6);
}
input.form-numeric,
input[type="number"] {
width: 70px;
}
textarea {
border: 1px solid #ccc;
width: 400px;
max-width: 95%;
height: 200px;
font-size: 1.0em;
font-family: sans-serif;
}
select {
max-width: 95%;
}
::-webkit-input-placeholder {
color: #ddd;
padding-top: 2px;
}
::-ms-input-placeholder {
color: #ddd;
padding-top: 2px;
}
::-moz-placeholder {
color: #ddd;
padding-top: 2px;
}
.form-actions {
clear: both;
margin-top: 20px;
}
input.form-error,
textarea.form-error {
border: 2px solid #b94a48;
}
.form-required {
color: red;
padding-left: 5px;
font-weight: bold;
}
.form-errors {
color: #b94a48;
list-style-type: none;
}
ul.form-errors li {
margin-left: 0;
}
.form-help {
font-size: 0.8em;
color: brown;
margin-bottom: 15px;
}
.form-inline {
padding: 0;
margin: 0;
border: none;
}
.form-inline label {
display: inline;
}
.form-inline input,
.form-inline select {
margin: 0;
margin-right: 15px;
}
input.form-date {
width: 150px;
}
.form-row {
margin-top: 10px;
margin-bottom: 20px;
}
.form-column {
float: left;
margin-bottom: 60px;
padding-right: 30px;
padding-left: 30px;
}
.form-column:first-child {
padding-left: 0;
}
.form-column ul {
margin-top: 15px;
}
.form-login {
width: 470px;
padding: 10px;
margin: 3% auto 20% auto;
}
.form-column li,
.form-login li {
margin-left: 25px;
line-height: 25px;
}
.form-checkbox-group label {
display: inline;
}

85
assets/css/header.css Normal file
View File

@ -0,0 +1,85 @@
/* header */
header {
margin-top: 10px;
padding-bottom: 15px;
clear: both;
border-bottom: 1px solid #dedede;
}
header h1 {
margin: 0;
padding: 0;
float: left;
}
header ul {
text-align: right;
font-size: 0.9em;
}
header li {
display: inline;
padding-left: 30px;
}
header a {
color: #777;
text-decoration: none;
}
nav .active a {
color: #333;
font-weight: bold;
}
/* username */
.username a {
color: #000;
}
.username a:hover {
color: #DF5353;
text-decoration: underline;
}
/* home icon */
.home-link {
color: #eee;
}
.home-link:focus,
.home-link:hover {
color: #ccc;
}
/* page header */
.page-header {
margin-bottom: 25px;
}
.page-header h2 {
margin: 0;
padding: 0;
font-size: 140%;
border-bottom: 1px dotted #DF5353;
}
.page-header h2 a {
color: #ddd;
}
.page-header h2 a:focus,
.page-header h2 a:hover {
color: #333;
}
.page-header ul {
text-align: left;
margin-top: 5px;
}
.page-header li {
display: inline;
padding-right: 10px;
font-size: 0.9em;
}

17
assets/css/links.css Normal file
View File

@ -0,0 +1,17 @@
/* links */
a {
color: #3366CC;
border: none;
}
a:focus {
outline: 0;
color: #DF5353;
text-decoration: none;
border: 1px dotted #aaa;
}
a:hover {
color: #333;
text-decoration: none;
}

20
assets/css/listing.css Normal file
View File

@ -0,0 +1,20 @@
/* listing block */
.listing {
border-radius: 4px;
padding: 8px 35px 8px 14px;
margin-bottom: 20px;
border: 1px solid #ddd;
color: #333;
background-color: #fbfbfb;
}
.listing li {
list-style-type: square;
margin-left: 20px;
margin-bottom: 3px;
}
.listing ul {
margin-top: 15px;
margin-bottom: 15px;
}

47
assets/css/markdown.css Normal file
View File

@ -0,0 +1,47 @@
/* markdown content */
.markdown {
line-height: 1.4em;
}
.markdown h1 {
margin-top: 5px;
margin-bottom: 10px;
font-size: 2em;
padding-bottom: 3px;
border-bottom: 1px dotted #000;
}
.markdown h2 {
text-decoration: underline;
}
.markdown h3 {
font-weight: bold;
text-decoration: underline;
}
.markdown ol,
.markdown ul {
margin-left: 25px;
margin-top: 10px;
margin-bottom: 10px;
}
.markdown pre {
background: #fafafa;
padding: 10px;
border-radius: 5px;
border: 1px solid #ccc;
overflow: auto;
color: brown;
}
.markdown blockquote {
font-style: italic;
border-left: 5px solid #ddd;
padding-left: 8px;
}
.markdown p {
margin-bottom: 10px;
}

17
assets/css/pagination.css Normal file
View File

@ -0,0 +1,17 @@
/* datepicker */
#ui-datepicker-div {
font-size: 0.8em;
}
/* pagination */
#pagination {
text-align: center;
}
#pagination-next {
margin-left: 5px;
}
#pagination-previous {
margin-right: 5px;
}

19
assets/css/popover.css Normal file
View File

@ -0,0 +1,19 @@
/* popover */
#popover-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.8);
}
#popover-content {
position: fixed;
width: 70%;
margin: 0 0 0 -35%;
left: 50%;
top: 5%;
padding: 15px;
background: #fff;
}

29
assets/css/project.css Normal file
View File

@ -0,0 +1,29 @@
/* project view */
.project-listing {
max-width: 500px;
margin-left: 30px;
}
.project-listing li {
font-weight: bold;
padding: 10px;
margin-top: 8px;
display: block;
border: 1px solid #ddd;
border-radius: 5px;
}
.project-listing li:hover {
border-color: #ccc;
background: #fcfcfc;
box-shadow: 0 0 8px rgba(200, 200, 200, 0.6);
}
.project-listing a {
text-decoration: none;
}
.project-listing a:hover,
.project-listing a:focus {
color: #000;
}

68
assets/css/responsive.css Normal file
View File

@ -0,0 +1,68 @@
/* responsive design */
@media only screen and (min-width : 768px) and (max-width : 1024px) {
.hide-tablet {
display: none;
}
body {
font-size: 0.9em;
}
.project-menu {
font-size: 0.8em;
}
.task-board-title {
font-size: 1.5em;
}
}
@media only screen and (max-width : 768px) {
.hide-tablet {
display: none;
}
body {
font-size: 0.85em;
}
.logo,
.project-menu {
display: none;
}
nav li:first-child {
padding-left: 0;
}
.username {
display: block;
text-align: right;
}
.user-show-sidebar,
.project-show-sidebar,
.task-show-sidebar {
width: 200px;
}
.user-show-main,
.project-show-main,
.task-show-main {
margin-left: 230px;
}
table input[type="text"] {
width: 150px;
}
.task-score {
display: none;
}
.task-board-title {
font-size: 1.5em;
}
}

27
assets/css/sidebar.css Normal file
View File

@ -0,0 +1,27 @@
/* sidebar */
.sidebar-container {
margin-top: 30px;
position: relative;
}
.sidebar-content {
margin-left: 330px;
}
.sidebar {
position: absolute;
left: 0px;
top: 0;
width: 250px;
padding: 10px;
padding-top: 0;
border: 1px solid #ccc;
background: #fbfbfb;
border-radius: 5px;
}
.sidebar li {
list-style-type: square;
margin-left: 30px;
line-height: 1.8em;
}

8
assets/css/subtask.css Normal file
View File

@ -0,0 +1,8 @@
/* subtasks */
.subtasks-table {
font-size: 0.85em;
}
.subtasks-table td {
vertical-align: middle;
}

44
assets/css/table.css Normal file
View File

@ -0,0 +1,44 @@
/* tables */
table {
width: 100%;
border-collapse: collapse;
border-spacing: 0;
margin-bottom: 20px;
font-size: 0.95em;
}
th,
td {
border: 1px solid #eee;
padding-top: 0.5em;
padding-bottom: 0.5em;
padding-left: 3px;
padding-right: 3px;
}
td {
vertical-align: top;
}
th {
background: #fbfbfb;
text-align: left;
}
td li {
margin-left: 20px;
}
.table-small {
font-size: 0.8em;
}
th a {
text-decoration: none;
color: #333;
}
th a:focus,
th a:hover {
text-decoration: underline;
}

236
assets/css/task.css Normal file
View File

@ -0,0 +1,236 @@
/* task inside the board */
.task-board {
position: relative;
margin-right: 5px;
margin-bottom: 10px;
border: 1px solid #000;
padding: 5px;
font-size: 95%;
word-wrap: break-word;
}
.task-board-recent {
box-shadow: 0px 0px 10px rgba(130, 130, 130, 1);
}
.task-table a,
.task-board a {
color: #000;
text-decoration: none;
font-weight: bold;
}
.task-table a:focus,
.task-table a:hover,
.task-board a:focus,
.task-board a:hover {
text-decoration: underline;
}
.task-board-title {
margin-top: 10px;
font-size: 110%;
}
.task-board-title a {
font-weight: normal;
}
.task-board-user {
font-size: 80%;
}
a.task-board-nobody {
font-weight: normal;
font-style: italic;
color: #444;
}
.task-board-category-container {
text-align: right;
padding-bottom: 2px;
margin-top: 10px;
}
.task-board-category {
font-weight: bold;
font-size: 0.8em;
color: #000;
border: 1px solid #555;
border-radius: 4px;
padding: 2px;
padding-right: 5px;
padding-left: 5px;
}
.task-board-footer {
height: 18px;
}
.task-board-date {
position: absolute;
bottom: 0;
left: 5px;
font-weight: bold;
color: #000;
}
.task-board-date-overdue {
color: #D90000;
}
.task-board-icons {
position: absolute;
bottom: 0;
right: 5px;
}
.task-board-icons a {
opacity: 0.5;
}
.task-board-icons span {
opacity: 0.5;
margin-left: 5px;
}
.task-board-icons a:hover,
.task-board-icons span:hover {
opacity: 1.0;
}
/* task score */
.task-score {
font-weight: bold;
position: absolute;
}
.task-board .task-score {
font-size: 1.5em;
right: 5px;
top: 0;
}
/* task view */
.task-show-details {
position: relative;
border-radius: 5px;
padding-bottom: 10px;
}
.task-show-details h2 {
font-size: 1.8em;
margin: 0;
margin-bottom: 25px;
padding: 0;
padding-left: 10px;
padding-right: 10px;
}
.task-show-details li {
margin-left: 25px;
list-style-type: circle;
}
.task-show-details .task-score {
font-size: 1.9em;
right: 10px;
bottom: 5px;
}
.task-show-section {
margin-top: 30px;
margin-bottom: 20px;
}
.task-show-files a {
font-weight: bold;
text-decoration: none;
}
.task-show-files li {
margin-left: 25px;
list-style-type: square;
line-height: 25px;
}
.task-show-file-actions {
font-size: 0.75em;
}
.task-show-file-actions:before {
content: " [";
}
.task-show-file-actions:after {
content: "]";
}
.task-show-file-actions a {
color: #333;
}
.description-textarea {
width: 80%;
max-width: 800px;
height: 300px;
}
.task-file-viewer {
position: relative;
}
.task-file-viewer img {
max-width: 95%;
max-height: 85%;
margin-top: 10px;
}
.task-time-form {
margin-top: 10px;
margin-bottom: 25px;
padding: 3px;
}
/* task colors */
tr td.task-blue,
.task-blue {
background-color: rgb(219, 235, 255);
border-color: rgb(168, 207, 255);
}
tr td.task-purple,
.task-purple {
background-color: rgb(223, 176, 255);
border-color: rgb(205, 133, 254);
}
tr td.task-grey,
.task-grey {
background-color: rgb(238, 238, 238);
border-color: rgb(204, 204, 204);
}
tr td.task-red,
.task-red {
background-color: rgb(255, 187, 187);
border-color: rgb(255, 151, 151);
}
tr td.task-green,
.task-green {
background-color: rgb(189, 244, 203);
border-color: rgb(74, 227, 113);
}
tr td.task-yellow,
.task-yellow {
background-color: rgb(245, 247, 196);
border-color: rgb(223, 227, 45);
}
tr td.task-orange,
.task-orange {
background-color: rgb(255, 215, 179);
border-color: rgb(255, 172, 98);
}

15
assets/css/title.css Normal file
View File

@ -0,0 +1,15 @@
/* titles */
h1, h2, h3 {
font-weight: normal;
color: #333;
}
h2 {
font-size: 1.3em;
margin-bottom: 10px;
}
h3 {
margin-top: 10px;
font-size: 1.2em;
}

File diff suppressed because one or more lines are too long

81
assets/js/base.js Normal file
View File

@ -0,0 +1,81 @@
// Common functions
var Kanboard = (function() {
return {
// Display a popup
Popover: function(e, callback) {
e.preventDefault();
e.stopPropagation();
var link = e.target.getAttribute("href");
if (! link) {
link = e.target.getAttribute("data-href");
}
if (link) {
$.get(link, function(content) {
$("body").append('<div id="popover-container"><div id="popover-content">' + content + '</div></div>');
$("#popover-container").click(function() {
$(this).remove();
});
$("#popover-content").click(function(e) {
e.stopPropagation();
});
if (callback) {
callback();
}
});
}
},
// Return true if the page is visible
IsVisible: function() {
var property = "";
if (typeof document.hidden !== "undefined") {
property = "visibilityState";
} else if (typeof document.mozHidden !== "undefined") {
property = "mozVisibilityState";
} else if (typeof document.msHidden !== "undefined") {
property = "msVisibilityState";
} else if (typeof document.webkitHidden !== "undefined") {
property = "webkitVisibilityState";
}
if (property != "") {
return document[property] == "visible";
}
return true;
},
// Common init
Init: function() {
// Datepicker
$(".form-date").datepicker({
showOtherMonths: true,
selectOtherMonths: true,
dateFormat: 'yy-mm-dd',
constrainInput: false
});
// Project select box
$("#board-selector").chosen({
width: 180
});
$("#board-selector").change(function() {
window.location = "?controller=board&action=show&project_id=" + $(this).val();
});
}
};
})();

162
assets/js/board.js Normal file
View File

@ -0,0 +1,162 @@
// Board related functions
Kanboard.Board = (function() {
var checkInterval = null;
// Setup the board
function board_load_events()
{
// Drag and drop
$(".column").sortable({
delay: 300,
distance: 5,
connectWith: ".column",
placeholder: "draggable-placeholder",
stop: function(event, ui) {
board_save(
ui.item.attr('data-task-id'),
ui.item.parent().attr("data-column-id"),
ui.item.index() + 1
);
}
});
// Assignee change
$(".assignee-popover").click(Kanboard.Popover);
// Category change
$(".category-popover").click(Kanboard.Popover);
// Task edit popover
$(".task-edit-popover").click(function(e) {
Kanboard.Popover(e, Kanboard.Init);
});
// Description popover
$(".task-description-popover").click(Kanboard.Popover);
// Redirect to the task details page
$("[data-task-id]").each(function() {
$(this).click(function() {
window.location = "?controller=task&action=show&task_id=" + $(this).attr("data-task-id");
});
});
// Automatic refresh
var interval = parseInt($("#board").attr("data-check-interval"));
if (interval > 0) {
checkInterval = window.setInterval(board_check, interval * 1000);
}
}
// Stop events
function board_unload_events()
{
$("[data-task-id]").off();
clearInterval(checkInterval);
}
// Save and refresh the board
function board_save(taskId, columnId, position)
{
var boardSelector = $("#board");
var projectId = boardSelector.attr("data-project-id");
board_unload_events();
$.ajax({
cache: false,
url: "?controller=board&action=save&project_id=" + projectId,
data: {
"task_id": taskId,
"column_id": columnId,
"position": position,
"csrf_token": boardSelector.attr("data-csrf-token"),
},
type: "POST",
success: function(data) {
$("#board").remove();
$("#main").append(data);
board_load_events();
filter_apply();
}
});
}
// Check if a board have been changed by someone else
function board_check()
{
var boardSelector = $("#board");
var projectId = boardSelector.attr("data-project-id");
var timestamp = boardSelector.attr("data-time");
if (Kanboard.IsVisible() && projectId != undefined && timestamp != undefined) {
$.ajax({
cache: false,
url: "?controller=board&action=check&project_id=" + projectId + "&timestamp=" + timestamp,
statusCode: {
200: function(data) {
boardSelector.remove();
$("#main").append(data);
board_unload_events();
board_load_events();
filter_apply();
}
}
});
}
}
// Apply user or date filter (change tasks opacity)
function filter_apply()
{
var selectedUserId = $("#form-user_id").val();
var selectedCategoryId = $("#form-category_id").val();
var filterDueDate = $("#filter-due-date").hasClass("filter-on");
$("[data-task-id]").each(function(index, item) {
var ownerId = item.getAttribute("data-owner-id");
var dueDate = item.getAttribute("data-due-date");
var categoryId = item.getAttribute("data-category-id");
if (ownerId != selectedUserId && selectedUserId != -1) {
item.style.opacity = "0.2";
}
else {
item.style.opacity = "1.0";
}
if (filterDueDate && (dueDate == "" || dueDate == "0")) {
item.style.opacity = "0.2";
}
if (categoryId != selectedCategoryId && selectedCategoryId != -1) {
item.style.opacity = "0.2";
}
});
}
// Load filter events
function filter_load_events()
{
$("#form-user_id").change(filter_apply);
$("#form-category_id").change(filter_apply);
$("#filter-due-date").click(function(e) {
$(this).toggleClass("filter-on");
filter_apply();
e.preventDefault();
});
}
return {
Init: function() {
board_load_events();
filter_load_events();
}
};
})();

12
assets/js/init.js Normal file
View File

@ -0,0 +1,12 @@
// Initialization
$(function() {
Kanboard.Init();
if ($("#board").length) {
Kanboard.Board.Init();
}
else if ($("#task-section").length) {
Kanboard.Task.Init();
}
});

11
assets/js/task.js Normal file
View File

@ -0,0 +1,11 @@
// Task related functions
Kanboard.Task = (function() {
return {
Init: function() {
// Image preview for attachments
$(".file-popover").click(Kanboard.Popover);
}
};
})();

20
scripts/make-assets.sh Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
css="base links title table form button alert header board project task comment subtask markdown listing activity dashboard pagination popover confirm sidebar responsive font-awesome.min jquery-ui-1.10.4.custom chosen.min"
js="jquery-1.11.1.min jquery-ui-1.10.4.custom.min jquery.ui.touch-punch.min chosen.jquery.min base board task init"
rm -f assets/css/app.css
echo "/* DO NOT EDIT: auto-generated file */" > assets/css/app.css
for file in $css
do
cat "assets/css/${file}.css" >> assets/css/app.css
done
rm -f assets/js/app.js
echo "/* DO NOT EDIT: auto-generated file */" > assets/js/app.js
for file in $js
do
cat "assets/js/${file}.js" >> assets/js/app.js
done