Merge remote-tracking branch 'upstream/master' into fguillot/kanboard

This commit is contained in:
Michael Lüpkes
2015-01-13 11:42:49 +01:00
24 changed files with 424 additions and 344 deletions

View File

@@ -16,6 +16,8 @@ Official website: <http://kanboard.net>
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/fguillot/kanboard/badges/quality-score.png?s=2b6490781608657cc8c43d02285bfafb4f489528)](https://scrutinizer-ci.com/g/fguillot/kanboard/) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/fguillot/kanboard/badges/quality-score.png?s=2b6490781608657cc8c43d02285bfafb4f489528)](https://scrutinizer-ci.com/g/fguillot/kanboard/)
[![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy)
Features Features
-------- --------
@@ -97,6 +99,7 @@ Documentation
- [Installation on Centos](docs/centos-installation.markdown) - [Installation on Centos](docs/centos-installation.markdown)
- [Installation on FreeBSD](docs/freebsd-installation.markdown) - [Installation on FreeBSD](docs/freebsd-installation.markdown)
- [Installation on Windows Server with IIS](docs/windows-iis-installation.markdown) - [Installation on Windows Server with IIS](docs/windows-iis-installation.markdown)
- [Installation on Heroku](docs/heroku.markdown)
- [Example with Nginx + HTTPS + SPDY + PHP-FPM](docs/nginx-ssl-php-fpm.markdown) - [Example with Nginx + HTTPS + SPDY + PHP-FPM](docs/nginx-ssl-php-fpm.markdown)
#### Database #### Database
@@ -150,6 +153,7 @@ Contributors:
- Claudio Lobo - Claudio Lobo
- [Cluxter](https://github.com/cluxter) - [Cluxter](https://github.com/cluxter)
- [Cmer](https://github.com/chncsu) - [Cmer](https://github.com/chncsu)
- [Cynthia Pereira](https://github.com/cynthiapereira)
- [David-Norris](https://github.com/David-Norris) - [David-Norris](https://github.com/David-Norris)
- [Fengchao](https://github.com/fengchao) - [Fengchao](https://github.com/fengchao)
- [Floaltvater](https://github.com/floaltvater) - [Floaltvater](https://github.com/floaltvater)

8
app.json Normal file
View File

@@ -0,0 +1,8 @@
{
"name": "Kanboard",
"description": "Kanboard is a simple visual task board",
"repository": "https://github.com/fguillot/kanboard",
"logo": "http://kanboard.net/assets/img/icon.svg",
"keywords": ["kanboard", "kanban", "php", "agile"],
"addons": ["heroku-postgresql:hobby-dev"]
}

View File

@@ -4,8 +4,8 @@ return array(
'None' => 'Nenhum', 'None' => 'Nenhum',
'edit' => 'editar', 'edit' => 'editar',
'Edit' => 'Editar', 'Edit' => 'Editar',
'remove' => 'apagar', 'remove' => 'remover',
'Remove' => 'Apagar', 'Remove' => 'Remover',
'Update' => 'Atualizar', 'Update' => 'Atualizar',
'Yes' => 'Sim', 'Yes' => 'Sim',
'No' => 'Não', 'No' => 'Não',
@@ -14,169 +14,169 @@ return array(
'Yellow' => 'Amarelo', 'Yellow' => 'Amarelo',
'Blue' => 'Azul', 'Blue' => 'Azul',
'Green' => 'Verde', 'Green' => 'Verde',
'Purple' => 'Violeta', 'Purple' => 'Roxo',
'Red' => 'Vermelho', 'Red' => 'Vermelho',
'Orange' => 'Laranja', 'Orange' => 'Laranja',
'Grey' => 'Cinza', 'Grey' => 'Cinza',
'Save' => 'Salvar', 'Save' => 'Salvar',
'Login' => 'Login', 'Login' => 'Login',
'Official website:' => 'Site web oficial :', 'Official website:' => 'Site oficial:',
'Unassigned' => 'Não Atribuída', 'Unassigned' => 'Não Atribuída',
'View this task' => 'Ver esta tarefa', 'View this task' => 'Ver esta tarefa',
'Remove user' => 'Remover usuário', 'Remove user' => 'Remover usuário',
'Do you really want to remove this user: "%s"?' => 'Quer realmente remover este usuário: "%s"?', 'Do you really want to remove this user: "%s"?' => 'Você realmente deseja remover este usuário: "%s"?',
'New user' => 'Novo usuário', 'New user' => 'Novo usuário',
'All users' => 'Todos os usuários', 'All users' => 'Todos os usuários',
'Username' => 'Nome do usuário', 'Username' => 'Nome de usuário',
'Password' => 'Senha', 'Password' => 'Senha',
'Default project' => 'Projeto default', 'Default project' => 'Projeto padrão',
'Administrator' => 'Administrador', 'Administrator' => 'Administrador',
'Sign in' => 'Logar', 'Sign in' => 'Entrar',
'Users' => 'Usuários', 'Users' => 'Usuários',
'No user' => 'Sem usuário', 'No user' => 'Sem usuário',
'Forbidden' => 'Proibido', 'Forbidden' => 'Proibido',
'Access Forbidden' => 'Acesso negado', 'Access Forbidden' => 'Acesso negado',
'Only administrators can access to this page.' => 'Somente administradores têm acesso a esta página.', 'Only administrators can access to this page.' => 'Somente administradores têm acesso a esta página.',
'Edit user' => 'Editar usuário', 'Edit user' => 'Editar usuário',
'Logout' => 'Logout', 'Logout' => 'Sair',
'Bad username or password' => 'Usuário ou senha inválidos', 'Bad username or password' => 'Usuário ou senha inválidos',
'users' => 'usuários', 'users' => 'usuários',
'projects' => 'projetos', 'projects' => 'projetos',
'Edit project' => 'Editar projeto', 'Edit project' => 'Editar projeto',
'Name' => 'Nome', 'Name' => 'Nome',
'Activated' => 'Ativo', 'Activated' => 'Ativado',
'Projects' => 'Projetos', 'Projects' => 'Projetos',
'No project' => 'Nenhum projeto', 'No project' => 'Nenhum projeto',
'Project' => 'Projeto', 'Project' => 'Projeto',
'Status' => 'Status', 'Status' => 'Status',
'Tasks' => 'Tarefas', 'Tasks' => 'Tarefas',
'Board' => 'Quadro', 'Board' => 'Board',
'Actions' => 'Ações', 'Actions' => 'Ações',
'Inactive' => 'Inativo', 'Inactive' => 'Inativo',
'Active' => 'Ativo', 'Active' => 'Ativo',
'Column %d' => 'Coluna %d', 'Column %d' => 'Coluna %d',
'Add this column' => 'Adicionar esta coluna', 'Add this column' => 'Adicionar esta coluna',
'%d tasks on the board' => '%d tarefas no quadro', '%d tasks on the board' => '%d tarefas no board',
'%d tasks in total' => '%d tarefas no total', '%d tasks in total' => '%d tarefas no total',
'Unable to update this board.' => 'Impossível atualizar este quadro.', 'Unable to update this board.' => 'Não foi possível atualizar este board.',
'Edit board' => 'Modificar quadro', 'Edit board' => 'Editar board',
'Disable' => 'Desativar', 'Disable' => 'Desativar',
'Enable' => 'Ativar', 'Enable' => 'Ativar',
'New project' => 'Novo projeto', 'New project' => 'Novo projeto',
'Do you really want to remove this project: "%s"?' => 'Quer realmente remover este projeto: "%s" ?', 'Do you really want to remove this project: "%s"?' => 'Você realmente deseja remover este projeto: "%s" ?',
'Remove project' => 'Remover projeto', 'Remove project' => 'Remover projeto',
'Boards' => 'Quadros', 'Boards' => 'Boards',
'Edit the board for "%s"' => 'Editar o quadro para "%s"', 'Edit the board for "%s"' => 'Editar o board para "%s"',
'All projects' => 'Todos os projetos', 'All projects' => 'Todos os projetos',
'Change columns' => 'Modificar colunas', 'Change columns' => 'Modificar colunas',
'Add a new column' => 'Adicionar uma nova coluna', 'Add a new column' => 'Adicionar uma nova coluna',
'Title' => 'Título', 'Title' => 'Título',
'Add Column' => 'Adicionar coluna', 'Add Column' => 'Adicionar Coluna',
'Project "%s"' => 'Projeto "%s"', 'Project "%s"' => 'Projeto "%s"',
'Nobody assigned' => 'Ninguém designado', 'Nobody assigned' => 'Ninguém designado',
'Assigned to %s' => 'Designado para %s', 'Assigned to %s' => 'Designado para %s',
'Remove a column' => 'Remover uma coluna', 'Remove a column' => 'Remover uma coluna',
'Remove a column from a board' => 'Remover uma coluna do quadro', 'Remove a column from a board' => 'Remover uma coluna do board',
'Unable to remove this column.' => 'Impossível remover esta coluna.', 'Unable to remove this column.' => 'Não foi possível remover esta coluna.',
'Do you really want to remove this column: "%s"?' => 'Quer realmente remover esta coluna: "%s"?', 'Do you really want to remove this column: "%s"?' => 'Você realmente deseja remover esta coluna: "%s"?',
'This action will REMOVE ALL TASKS associated to this column!' => 'Esta ação vai REMOVER TODAS AS TAREFAS associadas a esta coluna!', 'This action will REMOVE ALL TASKS associated to this column!' => 'Esta ação irá REMOVER TODAS AS TAREFAS associadas a esta coluna!',
'Settings' => 'Preferências', 'Settings' => 'Configurações',
'Application settings' => 'Preferências da aplicação', 'Application settings' => 'Configurações da aplicação',
'Language' => 'Idioma', 'Language' => 'Idioma',
'Webhook token:' => 'Token de webhooks:', 'Webhook token:' => 'Token de webhooks:',
'API token:' => 'API Token:', 'API token:' => 'API Token:',
'More information' => 'Mais informação', 'More information' => 'Mais informações',
'Database size:' => 'Tamanho do banco de dados:', 'Database size:' => 'Tamanho do banco de dados:',
'Download the database' => 'Download do banco de dados', 'Download the database' => 'Download do banco de dados',
'Optimize the database' => 'Otimizar o banco de dados', 'Optimize the database' => 'Otimizar o banco de dados',
'(VACUUM command)' => '(Comando VACUUM)', '(VACUUM command)' => '(Comando VACUUM)',
'(Gzip compressed Sqlite file)' => '(Arquivo Sqlite comprimido com Gzip)', '(Gzip compressed Sqlite file)' => '(Arquivo Sqlite comprimido com Gzip)',
'User settings' => 'Configurações do usuário', 'User settings' => 'Configurações do usuário',
'My default project:' => 'Meu projeto default:', 'My default project:' => 'Meu projeto padrão:',
'Close a task' => 'Encerrar uma tarefa', 'Close a task' => 'Finalizar uma tarefa',
'Do you really want to close this task: "%s"?' => 'Quer realmente encerrar esta tarefa: "%s"?', 'Do you really want to close this task: "%s"?' => 'Você realmente deseja finalizar esta tarefa: "%s"?',
'Edit a task' => 'Editar uma tarefa', 'Edit a task' => 'Editar uma tarefa',
'Column' => 'Coluna', 'Column' => 'Coluna',
'Color' => 'Cor', 'Color' => 'Cor',
'Assignee' => 'Designação', 'Assignee' => 'Designação',
'Create another task' => 'Criar uma outra tarefa (aproveitando os dados preenchidos)', 'Create another task' => 'Criar outra tarefa',
'New task' => 'Nova tarefa', 'New task' => 'Nova tarefa',
'Open a task' => 'Abrir uma tarefa', 'Open a task' => 'Abrir uma tarefa',
'Do you really want to open this task: "%s"?' => 'Quer realmente abrir esta tarefa: "%s"?', 'Do you really want to open this task: "%s"?' => 'Você realmente deseja abrir esta tarefa: "%s"?',
'Back to the board' => 'Voltar ao quadro', 'Back to the board' => 'Voltar ao board',
'Created on %B %e, %Y at %k:%M %p' => 'Criado em %d %B %Y às %H:%M', 'Created on %B %e, %Y at %k:%M %p' => 'Criado em %d %B %Y às %H:%M',
'There is nobody assigned' => 'Não há ninguém designado', 'There is nobody assigned' => 'Não há ninguém designado',
'Column on the board:' => 'Coluna no quadro:', 'Column on the board:' => 'Coluna no board:',
'Status is open' => 'Status está aberto', 'Status is open' => 'Status está aberto',
'Status is closed' => 'Status está encerrado', 'Status is closed' => 'Status está finalizado',
'Close this task' => 'Encerrar esta tarefa', 'Close this task' => 'Finalizar esta tarefa',
'Open this task' => 'Abrir esta tarefa', 'Open this task' => 'Abrir esta tarefa',
'There is no description.' => 'Não há descrição.', 'There is no description.' => 'Não há descrição.',
'Add a new task' => 'Adicionar uma nova tarefa', 'Add a new task' => 'Adicionar uma nova tarefa',
'The username is required' => 'O nome de usuário é obrigatório', 'The username is required' => 'O nome de usuário é obrigatório',
'The maximum length is %d characters' => 'O tamanho máximo são %d caracteres', 'The maximum length is %d characters' => 'O tamanho máximo é %d caracteres',
'The minimum length is %d characters' => 'O tamanho mínimo são %d caracteres', 'The minimum length is %d characters' => 'O tamanho mínimo é %d caracteres',
'The password is required' => 'A senha é obrigatória', 'The password is required' => 'A senha é obrigatória',
'This value must be an integer' => 'O valor deve ser um inteiro', 'This value must be an integer' => 'O valor deve ser um número inteiro',
'The username must be unique' => 'O nome de usuário deve ser único', 'The username must be unique' => 'O nome de usuário deve ser único',
'The username must be alphanumeric' => 'O nome de usuário deve ser alfanumérico, sem espaços ou _', 'The username must be alphanumeric' => 'O nome de usuário deve ser alfanumérico',
'The user id is required' => 'O id de usuário é obrigatório', 'The user id is required' => 'O ID de usuário é obrigatório',
'Passwords don\'t match' => 'As senhas não conferem', 'Passwords don\'t match' => 'As senhas não coincidem',
'The confirmation is required' => 'A confirmação é obrigatória', 'The confirmation is required' => 'A confirmação é obrigatória',
'The column is required' => 'A coluna é obrigatória', 'The column is required' => 'A coluna é obrigatória',
'The project is required' => 'O projeto é obrigatório', 'The project is required' => 'O projeto é obrigatório',
'The color is required' => 'A cor é obrigatória', 'The color is required' => 'A cor é obrigatória',
'The id is required' => 'O id é obrigatório', 'The id is required' => 'O ID é obrigatório',
'The project id is required' => 'O id do projeto é obrigatório', 'The project id is required' => 'O ID do projeto é obrigatório',
'The project name is required' => 'O nome do projeto é obrigatório', 'The project name is required' => 'O nome do projeto é obrigatório',
'This project must be unique' => 'Este projeto deve ser único', 'This project must be unique' => 'Este projeto deve ser único',
'The title is required' => 'O título é obrigatório', 'The title is required' => 'O título é obrigatório',
'The language is required' => 'O idioma é obrigatório', 'The language is required' => 'O idioma é obrigatório',
'There is no active project, the first step is to create a new project.' => 'Não há projeto ativo. O primeiro passo é criar um novo projeto.', 'There is no active project, the first step is to create a new project.' => 'Não há projeto ativo. O primeiro passo é criar um novo projeto.',
'Settings saved successfully.' => 'Configurações salvas com sucesso.', 'Settings saved successfully.' => 'Configurações salvas com sucesso.',
'Unable to save your settings.' => 'Impossível salvar suas configurações.', 'Unable to save your settings.' => 'Não é possível salvar suas configurações.',
'Database optimization done.' => 'Otimização do banco de dados terminada.', 'Database optimization done.' => 'Otimização do banco de dados finalizada.',
'Your project have been created successfully.' => 'Seu projeto foi criado com sucesso.', 'Your project have been created successfully.' => 'Seu projeto foi criado com sucesso.',
'Unable to create your project.' => 'Impossível criar seu projeto.', 'Unable to create your project.' => 'Não é possível criar o seu projeto.',
'Project updated successfully.' => 'Projeto atualizado com sucesso.', 'Project updated successfully.' => 'Projeto atualizado com sucesso.',
'Unable to update this project.' => 'Impossível atualizar este projeto.', 'Unable to update this project.' => 'Não é possível atualizar este projeto.',
'Unable to remove this project.' => 'Impossível remover este projeto.', 'Unable to remove this project.' => 'Não é possível remover este projeto.',
'Project removed successfully.' => 'Projeto removido com sucesso.', 'Project removed successfully.' => 'Projeto removido com sucesso.',
'Project activated successfully.' => 'Projeto ativado com sucesso.', 'Project activated successfully.' => 'Projeto ativado com sucesso.',
'Unable to activate this project.' => 'Impossível ativar este projeto.', 'Unable to activate this project.' => 'Não é possível ativar este projeto.',
'Project disabled successfully.' => 'Projeto desabilitado com sucesso.', 'Project disabled successfully.' => 'Projeto desativado com sucesso.',
'Unable to disable this project.' => 'Impossível desabilitar este projeto.', 'Unable to disable this project.' => 'Não é possível desativar este projeto.',
'Unable to open this task.' => 'Impossível abrir esta tarefa.', 'Unable to open this task.' => 'Não é possível abrir esta tarefa.',
'Task opened successfully.' => 'Tarefa aberta com sucesso.', 'Task opened successfully.' => 'Tarefa aberta com sucesso.',
'Unable to close this task.' => 'Impossível encerrar esta tarefa.', 'Unable to close this task.' => 'Não é possível finalizar esta tarefa.',
'Task closed successfully.' => 'Tarefa encerrada com sucesso.', 'Task closed successfully.' => 'Tarefa finalizada com sucesso.',
'Unable to update your task.' => 'Impossível atualizar sua tarefa.', 'Unable to update your task.' => 'Não é possível atualizar a sua tarefa.',
'Task updated successfully.' => 'Tarefa atualizada com sucesso.', 'Task updated successfully.' => 'Tarefa atualizada com sucesso.',
'Unable to create your task.' => 'Impossível criar sua tarefa.', 'Unable to create your task.' => 'Não é possível criar a sua tarefa.',
'Task created successfully.' => 'Tarefa criada com sucesso.', 'Task created successfully.' => 'Tarefa criada com sucesso.',
'User created successfully.' => 'Usuário criado com sucesso.', 'User created successfully.' => 'Usuário criado com sucesso.',
'Unable to create your user.' => 'Impossível criar seu usuário.', 'Unable to create your user.' => 'Não é possível criar o seu usuário.',
'User updated successfully.' => 'Usuário atualizado com sucesso.', 'User updated successfully.' => 'Usuário atualizado com sucesso.',
'Unable to update your user.' => 'Impossível atualizar seu usuário.', 'Unable to update your user.' => 'Não é possível atualizar o seu usuário.',
'User removed successfully.' => 'Usuário removido com sucesso.', 'User removed successfully.' => 'Usuário removido com sucesso.',
'Unable to remove this user.' => 'Impossível remover este usuário.', 'Unable to remove this user.' => 'Não é possível remover este usuário.',
'Board updated successfully.' => 'Quadro atualizado com sucesso.', 'Board updated successfully.' => 'Board atualizado com sucesso.',
'Ready' => 'Pronto', 'Ready' => 'Pronto',
'Backlog' => 'Backlog', 'Backlog' => 'Backlog',
'Work in progress' => 'Em andamento', 'Work in progress' => 'Em andamento',
'Done' => 'Encerrado', 'Done' => 'Finalizado',
'Application version:' => 'Versão da aplicação:', 'Application version:' => 'Versão da aplicação:',
'Completed on %B %e, %Y at %k:%M %p' => 'Encerrado em %d %B %Y às %H:%M', 'Completed on %B %e, %Y at %k:%M %p' => 'Finalizado em %d %B %Y às %H:%M',
'%B %e, %Y at %k:%M %p' => '%d %B %Y às %H:%M', '%B %e, %Y at %k:%M %p' => '%d %B %Y às %H:%M',
'Date created' => 'Data de criação', 'Date created' => 'Data de criação',
'Date completed' => 'Data de encerramento', 'Date completed' => 'Data da finalização',
'Id' => 'Id', 'Id' => 'Id',
'No task' => 'Nenhuma tarefa', 'No task' => 'Nenhuma tarefa',
'Completed tasks' => 'tarefas completadas', 'Completed tasks' => 'Tarefas completadas',
'List of projects' => 'Lista de projetos', 'List of projects' => 'Lista de projetos',
'Completed tasks for "%s"' => 'Tarefas completadas por "%s"', 'Completed tasks for "%s"' => 'Tarefas completadas por "%s"',
'%d closed tasks' => '%d tarefas encerradas', '%d closed tasks' => '%d tarefas finalizadas',
'No task for this project' => 'Nenhuma tarefa para este projeto', 'No task for this project' => 'Não há tarefa para este projeto',
'Public link' => 'Link público', 'Public link' => 'Link público',
'There is no column in your project!' => 'Não há colunas no seu projeto!', 'There is no column in your project!' => 'Não há colunas no seu projeto!',
'Change assignee' => 'Mudar a designação', 'Change assignee' => 'Mudar a designação',
@@ -191,8 +191,8 @@ return array(
'This value must be greater than %d' => 'Este valor deve ser maior que %d', '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 project access list' => 'Editar lista de acesso ao projeto',
'Edit users access' => 'Editar acesso de usuários', 'Edit users access' => 'Editar acesso de usuários',
'Allow this user' => 'Permitir esse usuário', 'Allow this user' => 'Permitir este usuário',
'Only those users have access to this project:' => 'Somente estes usuários têm acesso a este projeto:', 'Only those users have access to this project:' => 'Somente esses usuários têm acesso a este projeto:',
'Don\'t forget that administrators have access to everything.' => 'Não esqueça que administradores têm acesso a tudo.', 'Don\'t forget that administrators have access to everything.' => 'Não esqueça que administradores têm acesso a tudo.',
'Revoke' => 'Revogar', 'Revoke' => 'Revogar',
'List of authorized users' => 'Lista de usuários autorizados', 'List of authorized users' => 'Lista de usuários autorizados',
@@ -205,20 +205,20 @@ return array(
'Leave a comment' => 'Deixe um comentário', 'Leave a comment' => 'Deixe um comentário',
'Comment is required' => 'Comentário é obrigatório', 'Comment is required' => 'Comentário é obrigatório',
'Leave a description' => 'Deixe uma descrição', 'Leave a description' => 'Deixe uma descrição',
'Comment added successfully.' => 'Cpmentário adicionado com sucesso.', 'Comment added successfully.' => 'Comentário adicionado com sucesso.',
'Unable to create your comment.' => 'Impossível criar seu comentário.', 'Unable to create your comment.' => 'Não é possível criar o seu comentário.',
'The description is required' => 'A descrição é obrigatória', 'The description is required' => 'A descrição é obrigatória',
'Edit this task' => 'Editar esta tarefa', 'Edit this task' => 'Editar esta tarefa',
'Due Date' => 'Data de vencimento', 'Due Date' => 'Data de vencimento',
'Invalid date' => 'Data inválida', 'Invalid date' => 'Data inválida',
'Must be done before %B %e, %Y' => 'Deve ser feito antes de %d %B %Y', 'Must be done before %B %e, %Y' => 'Deve ser finalizado antes de %d %B %Y',
'%B %e, %Y' => '%d %B %Y', '%B %e, %Y' => '%d %B %Y',
// '%b %e, %Y' => '', '%b %e, %Y' => '%d %B %Y',
'Automatic actions' => 'Ações automáticas', 'Automatic actions' => 'Ações automáticas',
'Your automatic action have been created successfully.' => 'Sua ação automética foi criada com sucesso.', 'Your automatic action have been created successfully.' => 'Sua ação automética foi criada com sucesso.',
'Unable to create your automatic action.' => 'Impossível criar sua ação automática.', 'Unable to create your automatic action.' => 'Não é possível criar sua ação automática.',
'Remove an action' => 'Remover uma ação', 'Remove an action' => 'Remover uma ação',
'Unable to remove this action.' => 'Impossível remover esta ação.', 'Unable to remove this action.' => 'Não é possível remover esta ação.',
'Action removed successfully.' => 'Ação removida com sucesso.', 'Action removed successfully.' => 'Ação removida com sucesso.',
'Automatic actions for the project "%s"' => 'Ações automáticas para o projeto "%s"', 'Automatic actions for the project "%s"' => 'Ações automáticas para o projeto "%s"',
'Defined actions' => 'Ações definidas', 'Defined actions' => 'Ações definidas',
@@ -228,22 +228,22 @@ return array(
'Action parameters' => 'Parâmetros da ação', 'Action parameters' => 'Parâmetros da ação',
'Action' => 'Ação', 'Action' => 'Ação',
'Event' => 'Evento', 'Event' => 'Evento',
'When the selected event occurs execute the corresponding action.' => 'Quando o evento selecionado ocorrer, execute a ação correspondente.', 'When the selected event occurs execute the corresponding action.' => 'Quando o evento selecionado ocorrer execute a ação correspondente.',
'Next step' => 'Próximo passo', 'Next step' => 'Próximo passo',
'Define action parameters' => 'Definir parêmetros da ação', 'Define action parameters' => 'Definir parêmetros da ação',
'Save this action' => 'Salvar esta ação', 'Save this action' => 'Salvar esta ação',
'Do you really want to remove this action: "%s"?' => 'Você quer realmente remover esta ação: "%s"?', 'Do you really want to remove this action: "%s"?' => 'Você realmente deseja remover esta ação: "%s"?',
'Remove an automatic action' => 'Remove uma ação automática', 'Remove an automatic action' => 'Remover uma ação automática',
'Close the task' => 'Encerrar tarefa', 'Close the task' => 'Finalizar tarefa',
'Assign the task to a specific user' => 'Designar a tarefa para um usuário específico', 'Assign the task to a specific user' => 'Designar a tarefa para um usuário específico',
'Assign the task to the person who does the action' => 'Designar a tarefa para a pessoa que executa a ação', 'Assign the task to the person who does the action' => 'Designar a tarefa para a pessoa que executa a ação',
'Duplicate the task to another project' => 'Duplicar a tarefa para um outro projeto', 'Duplicate the task to another project' => 'Duplicar a tarefa para um outro projeto',
'Move a task to another column' => 'Mover a tarefa para outra coluna', 'Move a task to another column' => 'Mover a tarefa para outra coluna',
'Move a task to another position in the same column' => 'Mover a tarefa para outra posição, na mesma coluna', 'Move a task to another position in the same column' => 'Mover a tarefa para outra posição na mesma coluna',
'Task modification' => 'Modificação de tarefa', 'Task modification' => 'Modificação de tarefa',
'Task creation' => 'Criação de tarefa', 'Task creation' => 'Criação de tarefa',
'Open a closed task' => 'Reabrir uma tarefa encerrada', 'Open a closed task' => 'Reabrir uma tarefa finalizada',
'Closing a task' => 'Encerrando uma tarefa', 'Closing a task' => 'Finalizando uma tarefa',
'Assign a color to a specific user' => 'Designar uma cor para um usuário específico', 'Assign a color to a specific user' => 'Designar uma cor para um usuário específico',
'Column title' => 'Título da coluna', 'Column title' => 'Título da coluna',
'Position' => 'Posição', 'Position' => 'Posição',
@@ -254,26 +254,26 @@ return array(
'link' => 'link', 'link' => 'link',
'Update this comment' => 'Atualizar este comentário', 'Update this comment' => 'Atualizar este comentário',
'Comment updated successfully.' => 'Comentário atualizado com sucesso.', 'Comment updated successfully.' => 'Comentário atualizado com sucesso.',
'Unable to update your comment.' => 'Impossível atualizar seu comentário.', 'Unable to update your comment.' => 'Não é possível atualizar o seu comentário.',
'Remove a comment' => 'Remover um comentário', 'Remove a comment' => 'Remover um comentário',
'Comment removed successfully.' => 'Comentário removido com sucesso.', 'Comment removed successfully.' => 'Comentário removido com sucesso.',
'Unable to remove this comment.' => 'Impossível remover este comentário.', 'Unable to remove this comment.' => 'Não é possível remover este comentário.',
'Do you really want to remove this comment?' => 'Você tem certeza de que quer remover este comentário?', 'Do you really want to remove this comment?' => 'Você realmente deseja remover este comentário?',
'Only administrators or the creator of the comment can access to this page.' => 'Somente administradores ou o criator deste comentário tem acesso a esta página.', 'Only administrators or the creator of the comment can access to this page.' => 'Somente os administradores ou o criator deste comentário possuem acesso a esta página.',
'Details' => 'Detalhes', 'Details' => 'Detalhes',
'Current password for the user "%s"' => 'Senha atual para o usuário "%s"', 'Current password for the user "%s"' => 'Senha atual para o usuário "%s"',
'The current password is required' => 'A senha atual é obrigatória', 'The current password is required' => 'A senha atual é obrigatória',
'Wrong password' => 'Senha errada', 'Wrong password' => 'Senha incorreta',
'Reset all tokens' => 'Reiniciar todos os tokens', 'Reset all tokens' => 'Resetar todos os tokens',
'All tokens have been regenerated.' => 'Todos os tokens foram gerados novamente.', 'All tokens have been regenerated.' => 'Todos os tokens foram gerados novamente.',
'Unknown' => 'Desconhecido', 'Unknown' => 'Desconhecido',
'Last logins' => 'Últimos logins', 'Last logins' => 'Últimos logins',
'Login date' => 'Data de login', 'Login date' => 'Data de login',
'Authentication method' => 'Método de autenticação', 'Authentication method' => 'Método de autenticação',
'IP address' => 'Endereço IP', 'IP address' => 'Endereço IP',
'User agent' => 'Agente usuário', 'User agent' => 'User Agent',
'Persistent connections' => 'Conexões persistentes', 'Persistent connections' => 'Conexões persistentes',
'No session.' => 'Sem sessão.', 'No session.' => 'Nenhuma sessão.',
'Expiration date' => 'Data de expiração', 'Expiration date' => 'Data de expiração',
'Remember Me' => 'Lembre-se de mim', 'Remember Me' => 'Lembre-se de mim',
'Creation date' => 'Data de criação', 'Creation date' => 'Data de criação',
@@ -281,25 +281,25 @@ return array(
'Filter by due date' => 'Filtrar por data de vencimento', 'Filter by due date' => 'Filtrar por data de vencimento',
'Everybody' => 'Todos', 'Everybody' => 'Todos',
'Open' => 'Abrir', 'Open' => 'Abrir',
'Closed' => 'Encerrado', 'Closed' => 'Finalizado',
'Search' => 'Pesquisar', 'Search' => 'Pesquisar',
'Nothing found.' => 'Não encontrado.', 'Nothing found.' => 'Nada foi encontrado.',
'Search in the project "%s"' => 'Procure no projeto "%s"', 'Search in the project "%s"' => 'Pesquisar no projeto "%s"',
'Due date' => 'Data de vencimento', 'Due date' => 'Data de vencimento',
'Others formats accepted: %s and %s' => 'Outros formatos permitidos: %s e %s', 'Others formats accepted: %s and %s' => 'Outros formatos permitidos: %s e %s',
'Description' => 'Descrição', 'Description' => 'Descrição',
'%d comments' => '%d comentários', '%d comments' => '%d comentários',
'%d comment' => '%d comentário', '%d comment' => '%d comentário',
'Email address invalid' => 'Endereço de e-mail inválido', 'Email address invalid' => 'Endereço de e-mail inválido',
'Your Google Account is not linked anymore to your profile.' => 'Sua conta Google não está mais associada ao seu perfil.', 'Your Google Account is not linked anymore to your profile.' => 'Sua conta do Google não está mais associada ao seu perfil.',
'Unable to unlink your Google Account.' => 'Impossível desassociar sua conta Google.', 'Unable to unlink your Google Account.' => 'Não foi possível desassociar a sua Conta do Google.',
'Google authentication failed' => 'Autenticação do Google falhou.', 'Google authentication failed' => 'Autenticação do Google falhou.',
'Unable to link your Google Account.' => 'Impossível associar a sua conta do Google.', 'Unable to link your Google Account.' => 'Não foi possível associar a sua Conta do Google.',
'Your Google Account is linked to your profile successfully.' => 'Sua Conta do Google está ligada ao seu perfil com sucesso.', 'Your Google Account is linked to your profile successfully.' => 'Sua Conta do Google foi associada ao seu perfil com sucesso.',
'Email' => 'E-mail', 'Email' => 'E-mail',
'Link my Google Account' => 'Vincular minha conta Google', 'Link my Google Account' => 'Vincular minha Conta do Google',
'Unlink my Google Account' => 'Desvincular minha conta do Google', 'Unlink my Google Account' => 'Desvincular minha Conta do Google',
'Login with my Google Account' => 'Entrar com minha conta do Google', 'Login with my Google Account' => 'Entrar com minha Conta do Google',
'Project not found.' => 'Projeto não encontrado.', 'Project not found.' => 'Projeto não encontrado.',
'Task #%d' => 'Tarefa #%d', 'Task #%d' => 'Tarefa #%d',
'Task removed successfully.' => 'Tarefa removida com sucesso.', 'Task removed successfully.' => 'Tarefa removida com sucesso.',
@@ -313,8 +313,8 @@ return array(
'Category:' => 'Categoria:', 'Category:' => 'Categoria:',
'Categories' => 'Categorias', 'Categories' => 'Categorias',
'Category not found.' => 'Categoria não encontrada.', 'Category not found.' => 'Categoria não encontrada.',
'Your category have been created successfully.' => 'Seu categoria foi criada com sucesso.', 'Your category have been created successfully.' => 'Sua categoria foi criada com sucesso.',
'Unable to create your category.' => 'Não é possível criar sua categoria.', 'Unable to create your category.' => 'Não foi possível criar a sua categoria.',
'Your category have been updated successfully.' => 'A sua categoria foi atualizada com sucesso.', 'Your category have been updated successfully.' => 'A sua categoria foi atualizada com sucesso.',
'Unable to update your category.' => 'Não foi possível atualizar a sua categoria.', 'Unable to update your category.' => 'Não foi possível atualizar a sua categoria.',
'Remove a category' => 'Remover uma categoria', 'Remove a category' => 'Remover uma categoria',
@@ -327,7 +327,7 @@ return array(
'Do you really want to remove this category: "%s"?' => 'Você realmente deseja remover esta categoria: "%s"', 'Do you really want to remove this category: "%s"?' => 'Você realmente deseja remover esta categoria: "%s"',
'Filter by category' => 'Filtrar por categoria', 'Filter by category' => 'Filtrar por categoria',
'All categories' => 'Todas as categorias', 'All categories' => 'Todas as categorias',
'No category' => 'Sem categoria', 'No category' => 'Nenhum categoria',
'The name is required' => 'O nome é obrigatório', 'The name is required' => 'O nome é obrigatório',
'Remove a file' => 'Remover um arquivo', 'Remove a file' => 'Remover um arquivo',
'Unable to remove this file.' => 'Não foi possível remover este arquivo.', 'Unable to remove this file.' => 'Não foi possível remover este arquivo.',
@@ -344,60 +344,60 @@ return array(
'Time tracking' => 'Rastreamento de tempo', 'Time tracking' => 'Rastreamento de tempo',
'Estimate:' => 'Estimado:', 'Estimate:' => 'Estimado:',
'Spent:' => 'Gasto:', 'Spent:' => 'Gasto:',
'Do you really want to remove this sub-task?' => 'Você realmente deseja remover esta sub-tarefa?', 'Do you really want to remove this sub-task?' => 'Você realmente deseja remover esta subtarefa?',
'Remaining:' => 'Restante:', 'Remaining:' => 'Restante:',
'hours' => 'horas', 'hours' => 'horas',
'spent' => 'gasto', 'spent' => 'gasto',
'estimated' => 'estimada', 'estimated' => 'estimado',
'Sub-Tasks' => 'Sub-tarefas', 'Sub-Tasks' => 'Subtarefas',
'Add a sub-task' => 'Adicionar uma sub-tarefa', 'Add a sub-task' => 'Adicionar uma subtarefa',
'Original estimate' => 'Estimativa original', 'Original estimate' => 'Estimativa original',
'Create another sub-task' => 'Criar uma outra sub-tarefa', 'Create another sub-task' => 'Criar uma outra subtarefa',
'Time spent' => 'Tempo gasto', 'Time spent' => 'Tempo gasto',
'Edit a sub-task' => 'Editar uma sub-tarefa', 'Edit a sub-task' => 'Editar uma subtarefa',
'Remove a sub-task' => 'Remover uma sub-tarefa', 'Remove a sub-task' => 'Remover uma subtarefa',
'The time must be a numeric value' => 'O tempo deve ser um valor numérico', 'The time must be a numeric value' => 'O tempo deve ser um valor numérico',
'Todo' => 'A fazer', 'Todo' => 'À fazer',
'In progress' => 'Em andamento', 'In progress' => 'Em andamento',
'Sub-task removed successfully.' => 'Sub-tarefa removido com sucesso.', 'Sub-task removed successfully.' => 'Subtarefa removida com sucesso.',
'Unable to remove this sub-task.' => 'Não foi possível remover esta sub-tarefa.', 'Unable to remove this sub-task.' => 'Não foi possível remover esta subtarefa.',
'Sub-task updated successfully.' => 'Sub-tarefa atualizada com sucesso.', 'Sub-task updated successfully.' => 'Subtarefa atualizada com sucesso.',
'Unable to update your sub-task.' => 'Não foi possível atualizar sua sub-tarefa.', 'Unable to update your sub-task.' => 'Não foi possível atualizar a sua subtarefa.',
'Unable to create your sub-task.' => 'Não é possível criar sua sub-tarefa.', 'Unable to create your sub-task.' => 'Não é possível criar a sua subtarefa.',
'Sub-task added successfully.' => 'Sub-tarefa adicionada com sucesso.', 'Sub-task added successfully.' => 'Subtarefa adicionada com sucesso.',
'Maximum size: ' => 'O tamanho máximo:', 'Maximum size: ' => 'Tamanho máximo:',
'Unable to upload the file.' => 'Não foi possível carregar o arquivo.', 'Unable to upload the file.' => 'Não foi possível carregar o arquivo.',
'Display another project' => 'Mostrar um outro projeto', 'Display another project' => 'Exibir outro projeto',
'Your GitHub account was successfully linked to your profile.' => 'A sua conta GitHub foi ligada com sucesso ao seu perfil.', 'Your GitHub account was successfully linked to your profile.' => 'A sua Conta do GitHub foi associada com sucesso ao seu perfil.',
'Unable to link your GitHub Account.' => 'Não foi possível vincular sua conta GitHub.', 'Unable to link your GitHub Account.' => 'Não foi possível associar sua Conta do GitHub.',
'GitHub authentication failed' => 'Falhou autenticação GitHub', 'GitHub authentication failed' => 'Autenticação do GitHub falhou',
'Your GitHub account is no longer linked to your profile.' => 'A sua conta GitHub não está ligada ao seu perfil.', 'Your GitHub account is no longer linked to your profile.' => 'A sua Conta do GitHub não está mais associada ao seu perfil.',
'Unable to unlink your GitHub Account.' => 'Não foi possível desvincular sua conta GitHub.', 'Unable to unlink your GitHub Account.' => 'Não foi possível desassociar a sua Conta do GitHub.',
'Login with my GitHub Account' => 'Entrar com minha conta do GitHub', 'Login with my GitHub Account' => 'Entrar com minha Conta do GitHub',
'Link my GitHub Account' => 'Vincular minha conta GitHub', 'Link my GitHub Account' => 'Associar à minha Conta do GitHub',
'Unlink my GitHub Account' => 'Desvincular minha conta do GitHub', 'Unlink my GitHub Account' => 'Desassociar a minha Conta do GitHub',
'Created by %s' => 'Criado por %s', 'Created by %s' => 'Criado por %s',
'Last modified on %B %e, %Y at %k:%M %p' => 'Última modificação em %B %e, %Y às %k: %M %p', 'Last modified on %B %e, %Y at %k:%M %p' => 'Última modificação em %B %e, %Y às %k: %M %p',
'Tasks Export' => 'Tarefas Export', 'Tasks Export' => 'Exportar Tarefas',
'Tasks exportation for "%s"' => 'Tarefas exportação para "%s"', 'Tasks exportation for "%s"' => 'As tarefas foram exportadas para "%s"',
'Start Date' => 'Data inicial', 'Start Date' => 'Data inicial',
'End Date' => 'Data final', 'End Date' => 'Data final',
'Execute' => 'Executar', 'Execute' => 'Executar',
'Task Id' => 'Id da Tarefa', 'Task Id' => 'ID da Tarefa',
'Creator' => 'Criador', 'Creator' => 'Criado por',
'Modification date' => 'Data de modificação', 'Modification date' => 'Data da modificação',
'Completion date' => 'Data de conclusão', 'Completion date' => 'Data da finalização',
'Webhook URL for task creation' => 'Webhook URL para criação de tarefas', 'Webhook URL for task creation' => 'Webhook URL para criação de tarefas',
'Webhook URL for task modification' => 'Webhook URL para modificação tarefa', 'Webhook URL for task modification' => 'Webhook URL para modificação de tarefa',
'Clone' => 'Clone', 'Clone' => 'Clonar',
'Clone Project' => 'Clonar Projeto', 'Clone Project' => 'Clonar Projeto',
'Project cloned successfully.' => 'Projeto clonado com sucesso.', 'Project cloned successfully.' => 'Projeto clonado com sucesso.',
'Unable to clone this project.' => 'Impossível clonar este projeto.', 'Unable to clone this project.' => 'Não foi possível clonar este projeto.',
'Email notifications' => 'Notificações por email', 'Email notifications' => 'Notificações por email',
'Enable email notifications' => 'Habilitar notificações por email', 'Enable email notifications' => 'Habilitar notificações por email',
'Task position:' => 'Posição da tarefa:', 'Task position:' => 'Posição da tarefa:',
'The task #%d have been opened.' => 'A tarefa #%d foi aberta.', 'The task #%d have been opened.' => 'A tarefa #%d foi aberta.',
'The task #%d have been closed.' => 'A tarefa #%d foi encerrada.', 'The task #%d have been closed.' => 'A tarefa #%d foi finalizada.',
'Sub-task updated' => 'Subtarefa atualizada', 'Sub-task updated' => 'Subtarefa atualizada',
'Title:' => 'Título:', 'Title:' => 'Título:',
'Status:' => 'Status:', 'Status:' => 'Status:',
@@ -408,18 +408,18 @@ return array(
'Comment updated' => 'Comentário atualizado', 'Comment updated' => 'Comentário atualizado',
'New comment posted by %s' => 'Novo comentário postado por %s', 'New comment posted by %s' => 'Novo comentário postado por %s',
'List of due tasks for the project "%s"' => 'Lista de tarefas pendentes para o projeto "%s"', 'List of due tasks for the project "%s"' => 'Lista de tarefas pendentes para o projeto "%s"',
// '[%s][New attachment] %s (#%d)' => '', '[%s][New attachment] %s (#%d)' => '[%s][Novo anexo] %s (#%d)',
// '[%s][New comment] %s (#%d)' => '', '[%s][New comment] %s (#%d)' => '[%s][Novo comentário] %s (#%d)',
// '[%s][Comment updated] %s (#%d)' => '', '[%s][Comment updated] %s (#%d)' => '[%s][Comentário atualizado] %s (#%d)',
// '[%s][New subtask] %s (#%d)' => '', '[%s][New subtask] %s (#%d)' => '[%s][Nova subtarefa] %s (#%d)',
// '[%s][Subtask updated] %s (#%d)' => '', '[%s][Subtask updated] %s (#%d)' => '[%s][Subtarefa atualizada] %s (#%d)',
// '[%s][New task] %s (#%d)' => '', '[%s][New task] %s (#%d)' => '[%s][Nova tarefa] %s (#%d)',
// '[%s][Task updated] %s (#%d)' => '', '[%s][Task updated] %s (#%d)' => '[%s][Tarefa atualizada] %s (#%d)',
// '[%s][Task closed] %s (#%d)' => '', '[%s][Task closed] %s (#%d)' => '[%s][Tarefa finalizada] %s (#%d)',
// '[%s][Task opened] %s (#%d)' => '', '[%s][Task opened] %s (#%d)' => '[%s][Tarefa aberta] %s (#%d)',
// '[%s][Due tasks]' => '', '[%s][Due tasks]' => '[%s][Tarefas pendentes]',
'[Kanboard] Notification' => '[Kanboard] Notificação', '[Kanboard] Notification' => '[Kanboard] Notificação',
'I want to receive notifications only for those projects:' => 'Quero receber notificações somente para estes projetos:', 'I want to receive notifications only for those projects:' => 'Quero receber notificações apenas destes projetos:',
'view the task on Kanboard' => 'ver a tarefa no Kanboard', 'view the task on Kanboard' => 'ver a tarefa no Kanboard',
'Public access' => 'Acesso público', 'Public access' => 'Acesso público',
'Category management' => 'Gerenciamento de categorias', 'Category management' => 'Gerenciamento de categorias',
@@ -430,17 +430,17 @@ return array(
'Active projects' => 'Projetos ativos', 'Active projects' => 'Projetos ativos',
'Inactive projects' => 'Projetos inativos', 'Inactive projects' => 'Projetos inativos',
'Public access disabled' => 'Acesso público desabilitado', 'Public access disabled' => 'Acesso público desabilitado',
'Do you really want to disable this project: "%s"?' => 'Deseja ralmente desabilitar este projeto: "%s"?', 'Do you really want to disable this project: "%s"?' => 'Você realmente deseja desabilitar este projeto: "%s"?',
'Do you really want to duplicate this project: "%s"?' => 'Deseja realmente duplicar este projeto: "%s"?', 'Do you really want to duplicate this project: "%s"?' => 'Você realmente deseja duplicar este projeto: "%s"?',
'Do you really want to enable this project: "%s"?' => 'Deseja realmente habilitar este projeto: "%s"?', 'Do you really want to enable this project: "%s"?' => 'Você realmente deseja habilitar este projeto: "%s"?',
'Project activation' => 'Avaliação do projeto', 'Project activation' => 'Ativação do projeto',
'Move the task to another project' => 'Mover a tarefa para outro projeto', 'Move the task to another project' => 'Mover a tarefa para outro projeto',
'Move to another project' => 'Mover para outro projeto', 'Move to another project' => 'Mover para outro projeto',
'Do you really want to duplicate this task?' => 'Deseja realmente duplicar esta tarefa?', 'Do you really want to duplicate this task?' => 'Você realmente deseja duplicar esta tarefa?',
'Duplicate a task' => 'Duplicar tarefa', 'Duplicate a task' => 'Duplicar uma tarefa',
'External accounts' => 'Contas externas', 'External accounts' => 'Contas externas',
'Account type' => 'Tipo de conta', 'Account type' => 'Tipo de conta',
// 'Local' => '', 'Local' => 'Local',
'Remote' => 'Remoto', 'Remote' => 'Remoto',
'Enabled' => 'Habilitado', 'Enabled' => 'Habilitado',
'Disabled' => 'Desabilitado', 'Disabled' => 'Desabilitado',
@@ -448,12 +448,12 @@ return array(
'Github account linked' => 'Conta do Github associada', 'Github account linked' => 'Conta do Github associada',
'Username:' => 'Usuário:', 'Username:' => 'Usuário:',
'Name:' => 'Nome:', 'Name:' => 'Nome:',
// 'Email:' => '', 'Email:' => 'E-mail:',
'Default project:' => 'Projeto padrão:', 'Default project:' => 'Projeto padrão:',
'Notifications:' => 'Notificações:', 'Notifications:' => 'Notificações:',
'Notifications' => 'Notificações', 'Notifications' => 'Notificações',
'Group:' => 'Groupo:', 'Group:' => 'Grupo:',
'Regular user' => 'Usuário habitual', 'Regular user' => 'Usuário comum',
'Account type:' => 'Tipo de conta:', 'Account type:' => 'Tipo de conta:',
'Edit profile' => 'Editar perfil', 'Edit profile' => 'Editar perfil',
'Change password' => 'Alterar senha', 'Change password' => 'Alterar senha',
@@ -464,33 +464,33 @@ return array(
'Never connected.' => 'Nunca conectado.', 'Never connected.' => 'Nunca conectado.',
'No account linked.' => 'Nenhuma conta associada.', 'No account linked.' => 'Nenhuma conta associada.',
'Account linked.' => 'Conta associada.', 'Account linked.' => 'Conta associada.',
'No external authentication enabled.' => 'Nenhuma autenticação externa permitida.', 'No external authentication enabled.' => 'Nenhuma autenticação externa habilitada.',
'Password modified successfully.' => 'Senha alterada com sucesso.', 'Password modified successfully.' => 'Senha alterada com sucesso.',
'Unable to change the password.' => 'Não foi possível alterar a senha.', 'Unable to change the password.' => 'Não foi possível alterar a senha.',
'Change category for the task "%s"' => 'Mudar categoria para a tarefa "%s"', 'Change category for the task "%s"' => 'Mudar categoria da tarefa "%s"',
'Change category' => 'Mudar categoria', 'Change category' => 'Mudar categoria',
// '%s updated the task %s' => '', '%s updated the task %s' => '%s atualizou a tarefa %s',
// '%s opened the task %s' => '', '%s opened the task %s' => '%s abriu a tarefa %s',
// '%s moved the task %s to the position #%d in the column "%s"' => '', '%s moved the task %s to the position #%d in the column "%s"' => '%s moveu a tarefa %s para a posição #%d na coluna "%s"',
// '%s moved the task %s to the column "%s"' => '', '%s moved the task %s to the column "%s"' => '%s moveu a tarefa %s para a coluna "%s"',
// '%s created the task %s' => '', '%s created the task %s' => '%s criou a tarefa %s',
// '%s closed the task %s' => '', '%s closed the task %s' => '%s finalizou a tarefa %s',
'%s created a subtask for the task %s' => '%s criou uma sub-tarefa para a tarefa %s', '%s created a subtask for the task %s' => '%s criou uma subtarefa para a tarefa %s',
'%s updated a subtask for the task %s' => '%s atualizou uma sub-tarefa da tarefa %s', '%s updated a subtask for the task %s' => '%s atualizou uma subtarefa da tarefa %s',
'Assigned to %s with an estimate of %s/%sh' => 'Designado para %s com tempo estimado de %s/%sh', 'Assigned to %s with an estimate of %s/%sh' => 'Designado para %s com tempo estimado de %s/%sh',
'Not assigned, estimate of %sh' => 'Não designado, estimado em %sh', 'Not assigned, estimate of %sh' => 'Não designado, estimado em %sh',
'%s updated a comment on the task %s' => '%s atualizou o comentário na tarefa %s', '%s updated a comment on the task %s' => '%s atualizou o comentário na tarefa %s',
'%s commented the task %s' => '%s comentou a tarefa %s', '%s commented the task %s' => '%s comentou a tarefa %s',
'%s\'s activity' => 'Atividades de%s', '%s\'s activity' => 'Atividades de%s',
'No activity.' => 'Sem atividade.', 'No activity.' => 'Sem atividade.',
// 'RSS feed' => '', 'RSS feed' => 'Feed RSS',
'%s updated a comment on the task #%d' => '%s atualizou um comentário na tarefa #%d', '%s updated a comment on the task #%d' => '%s atualizou um comentário sobre a tarefa #%d',
'%s commented on the task #%d' => '%s comentou na tarefa #%d', '%s commented on the task #%d' => '%s comentou sobre a tarefa #%d',
'%s updated a subtask for the task #%d' => '%s atualizou uma sub-tarefa para a tarefa #%d', '%s updated a subtask for the task #%d' => '%s atualizou uma subtarefa para a tarefa #%d',
'%s created a subtask for the task #%d' => '%s criou uma sub-tarefa para a tarefa #%d', '%s created a subtask for the task #%d' => '%s criou uma subtarefa para a tarefa #%d',
'%s updated the task #%d' => '%s atualizou a tarefa #%d', '%s updated the task #%d' => '%s atualizou a tarefa #%d',
'%s created the task #%d' => '%s criou a tarefa #%d', '%s created the task #%d' => '%s criou a tarefa #%d',
'%s closed the task #%d' => '%s encerrou a tarefa #%d', '%s closed the task #%d' => '%s finalizou a tarefa #%d',
'%s open the task #%d' => '%s abriu a tarefa #%d', '%s open the task #%d' => '%s abriu a tarefa #%d',
'%s moved the task #%d to the column "%s"' => '%s moveu a tarefa #%d para a coluna "%s"', '%s moved the task #%d to the column "%s"' => '%s moveu a tarefa #%d para a coluna "%s"',
'%s moved the task #%d to the position %d in the column "%s"' => '%s moveu a tarefa #%d para a posição %d na coluna "%s"', '%s moved the task #%d to the position %d in the column "%s"' => '%s moveu a tarefa #%d para a posição %d na coluna "%s"',
@@ -500,152 +500,152 @@ return array(
'Task assignee change' => 'Mudar designação da tarefa', 'Task assignee change' => 'Mudar designação da tarefa',
'%s change the assignee of the task #%d to %s' => '%s mudou a designação da tarefa #%d para %s', '%s change the assignee of the task #%d to %s' => '%s mudou a designação da tarefa #%d para %s',
'%s changed the assignee of the task %s to %s' => '%s mudou a designação da tarefa %s para %s', '%s changed the assignee of the task %s to %s' => '%s mudou a designação da tarefa %s para %s',
// '[%s][Column Change] %s (#%d)' => '', '[%s][Column Change] %s (#%d)' => '[%s][Modificou Coluna] %s (#%d)',
// '[%s][Position Change] %s (#%d)' => '', '[%s][Position Change] %s (#%d)' => '[%s][Modificou Posição] %s (#%d)',
// '[%s][Assignee Change] %s (#%d)' => '', '[%s][Assignee Change] %s (#%d)' => '[%s][Modificou Designação] %s (#%d)',
'New password for the user "%s"' => 'Novo password para o usuário "%s"', 'New password for the user "%s"' => 'Nova senha para o usuário "%s"',
'Choose an event' => 'Escolher um evento', 'Choose an event' => 'Escolher um evento',
// 'Github commit received' => '', 'Github commit received' => 'Github commit received',
// 'Github issue opened' => '', 'Github issue opened' => 'Github issue opened',
// 'Github issue closed' => '', 'Github issue closed' => 'Github issue closed',
// 'Github issue reopened' => '', 'Github issue reopened' => 'Github issue reopened',
// 'Github issue assignee change' => '', 'Github issue assignee change' => 'Github issue assignee change',
// 'Github issue label change' => '', 'Github issue label change' => 'Github issue label change',
'Create a task from an external provider' => 'Criar uma tarefa a partir de um provedor externo', 'Create a task from an external provider' => 'Criar uma tarefa por meio de um serviço externo',
'Change the assignee based on an external username' => 'Alterar designação com vase em um usuário externo!', 'Change the assignee based on an external username' => 'Alterar designação com base em um usuário externo',
'Change the category based on an external label' => 'Alterar categoria com base em um rótulo externo', 'Change the category based on an external label' => 'Alterar categoria com base em um rótulo externo',
'Reference' => 'Referencia', 'Reference' => 'Referência',
'Reference: %s' => 'Referencia: %s', 'Reference: %s' => 'Referência: %s',
'Label' => 'Rótulo', 'Label' => 'Rótulo',
'Database' => 'Banco de dados', 'Database' => 'Banco de dados',
'About' => 'Sobre', 'About' => 'Sobre',
// 'Database driver:' => '', 'Database driver:' => 'Driver do banco de dados:',
// 'Board settings' => '', 'Board settings' => 'Configurações do Board',
// 'URL and token' => '', 'URL and token' => 'URL e token',
// 'Webhook settings' => '', 'Webhook settings' => 'Configurações do Webhook',
// 'URL for task creation:' => '', 'URL for task creation:' => 'URL para a criação da tarefa:',
// 'Reset token' => '', 'Reset token' => 'Resetar token',
// 'API endpoint:' => '', 'API endpoint:' => 'API endpoint:',
// 'Refresh interval for private board' => '', 'Refresh interval for private board' => 'Intervalo de atualização para um board privado',
// 'Refresh interval for public board' => '', 'Refresh interval for public board' => 'Intervalo de atualização para um board público',
// 'Task highlight period' => '', 'Task highlight period' => 'Período de Tarefa em destaque',
// 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => '', 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => 'Período (em segundos) para considerar que uma tarefa foi modificada recentemente (0 para desativar, 2 dias por padrão)',
// 'Frequency in second (60 seconds by default)' => '', 'Frequency in second (60 seconds by default)' => 'Frequência em segundos (60 segundos por padrão)',
// 'Frequency in second (0 to disable this feature, 10 seconds by default)' => '', 'Frequency in second (0 to disable this feature, 10 seconds by default)' => 'Frequência em segundos (0 para desativar este recurso, 10 segundos por padrão)',
'Application URL' => 'URL da Aplicação', 'Application URL' => 'URL da Aplicação',
// 'Example: http://example.kanboard.net/ (used by email notifications)' => '', 'Example: http://example.kanboard.net/ (used by email notifications)' => 'Exemplo: http://example.kanboard.net/ (utilizado nas notificações por e-mail)',
// 'Token regenerated.' => '', 'Token regenerated.' => 'Token ',
'Date format' => 'Formato de data', 'Date format' => 'Formato de data',
'ISO format is always accepted, example: "%s" and "%s"' => 'O formato ISO é sempre aceito, exemplo: "%s" e "%s"', 'ISO format is always accepted, example: "%s" and "%s"' => 'O formato ISO é sempre aceito, exemplo: "%s" e "%s"',
'New private project' => 'Novo projeto privado', 'New private project' => 'Novo projeto privado',
'This project is private' => 'Este projeto é privado', 'This project is private' => 'Este projeto é privado',
'Type here to create a new sub-task' => 'Digite aqui para criar uma nova sub-tarefa', 'Type here to create a new sub-task' => 'Digite aqui para criar uma nova subtarefa',
'Add' => 'Adicionar', 'Add' => 'Adicionar',
'Estimated time: %s hours' => 'Tempo estimado: %s horas', 'Estimated time: %s hours' => 'Tempo estimado: %s horas',
'Time spent: %s hours' => 'Tempo gasto: %s horas', 'Time spent: %s hours' => 'Tempo gasto: %s horas',
'Started on %B %e, %Y' => 'Iniciado em %B %e, %Y', 'Started on %B %e, %Y' => 'Iniciado em %B %e, %Y',
'Start date' => 'Data de início', 'Start date' => 'Data de início',
'Time estimated' => 'Tempo estimado', 'Time estimated' => 'Tempo estimado',
'There is nothing assigned to you.' => 'Não há nada designado para você.', 'There is nothing assigned to you.' => 'Não há nada designado à você.',
'My tasks' => 'Minhas tarefas', 'My tasks' => 'Minhas tarefas',
// 'Activity stream' => '', 'Activity stream' => 'Atividades Recentes',
// 'Dashboard' => '', 'Dashboard' => 'Painel de Controle',
'Confirmation' => 'Confirmação', 'Confirmation' => 'Confirmação',
'Allow everybody to access to this project' => 'Permitir que todos acessem este projeto', 'Allow everybody to access to this project' => 'Permitir que todos acessem este projeto',
'Everybody have access to this project.' => 'Todos possuem acesso a este projeto.', 'Everybody have access to this project.' => 'Todos possuem acesso a este projeto.',
// 'Webhooks' => '', 'Webhooks' => 'Webhooks',
// 'API' => '', 'API' => 'API',
'Integration' => 'Integração', 'Integration' => 'Integração',
// 'Github webhooks' => '', 'Github webhooks' => 'Github webhooks',
'Help on Github webhooks' => 'Ajuda para o Github webhooks', 'Help on Github webhooks' => 'Ajuda para o Github webhooks',
'Create a comment from an external provider' => 'Criar um comentário de um provedor externo', 'Create a comment from an external provider' => 'Criar um comentário por meio de um serviço externo',
// 'Github issue comment created' => '', 'Github issue comment created' => 'Github issue comment created',
'Configure' => 'Configurar', 'Configure' => 'Configurar',
'Project management' => 'Gerenciamento de projetos', 'Project management' => 'Gerenciamento de projetos',
'My projects' => 'Meus projetos', 'My projects' => 'Meus projetos',
'Columns' => 'Colunas', 'Columns' => 'Colunas',
'Task' => 'Tarefas', 'Task' => 'Tarefas',
'Your are not member of any project.' => 'Você não é menmbro de nenhum projeto.', 'Your are not member of any project.' => 'Você não é membro de nenhum projeto.',
'Percentage' => 'Porcentagem', 'Percentage' => 'Porcentagem',
'Number of tasks' => 'Número de tarefas', 'Number of tasks' => 'Número de tarefas',
'Task distribution' => 'Distribuição de tarefas', 'Task distribution' => 'Distribuição de tarefas',
'Reportings' => 'Relatórios', 'Reportings' => 'Relatórios',
// 'Task repartition for "%s"' => '', 'Task repartition for "%s"' => 'Redistribuição da tarefa para "%s"',
'Analytics' => 'Estatísticas', 'Analytics' => 'Estatísticas',
'Subtask' => 'Sub-tarefa', 'Subtask' => 'Subtarefa',
'My subtasks' => 'Minhas sub-tarefas', 'My subtasks' => 'Minhas subtarefas',
'User repartition' => 'Repartição de usuário', 'User repartition' => 'Redistribuição de usuário',
'User repartition for "%s"' => 'Repartição de usuário para "%s"', 'User repartition for "%s"' => 'Redistribuição de usuário para "%s"',
'Clone this project' => 'Clonar o projeto', 'Clone this project' => 'Clonar este projeto',
'Column removed successfully.' => 'Coluna removida com sucesso.', 'Column removed successfully.' => 'Coluna removida com sucesso.',
'Edit Project' => 'Editar projeto', 'Edit Project' => 'Editar projeto',
// 'Github Issue' => '', 'Github Issue' => 'Github Issue',
'Not enough data to show the graph.' => 'Dados insuficientes para exibir o gráfico.', 'Not enough data to show the graph.' => 'Não há dados suficientes para mostrar o gráfico.',
'Previous' => 'Anterior', 'Previous' => 'Anterior',
'The id must be an integer' => 'A ID deve ser um inteiro', 'The id must be an integer' => 'O ID deve ser um número inteiro',
'The project id must be an integer' => 'A ID do projeto deve ser um inteiro', 'The project id must be an integer' => 'O ID do projeto deve ser um inteiro',
'The status must be an integer' => 'O status deve ser um inteiro', 'The status must be an integer' => 'O status deve ser um número inteiro',
'The subtask id is required' => 'A ID da sub-tarefa é requerida', 'The subtask id is required' => 'O ID da subtarefa é obrigatório',
'The subtask id must be an integer' => 'A ID da sub-tarefa deve ser um inteiro', 'The subtask id must be an integer' => 'O ID da subtarefa deve ser um número inteiro',
'The task id is required' => 'A ID da tarefa é requerida', 'The task id is required' => 'O ID da tarefa é obrigatório',
'The task id must be an integer' => 'A ID da tarefa deve ser um inteiro', 'The task id must be an integer' => 'O ID da tarefa deve ser um número inteiro',
'The user id must be an integer' => 'A ID de usuário deve ser um inteiro', 'The user id must be an integer' => 'O ID do usuário deve ser um número inteiro',
'This value is required' => 'Este valor é requerido', 'This value is required' => 'Este valor é obrigatório',
'This value must be numeric' => 'Este valor deve ser numérico', 'This value must be numeric' => 'Este valor deve ser numérico',
'Unable to create this task.' => 'Não foi possível criar esta tarefa.', 'Unable to create this task.' => 'Não foi possível criar esta tarefa.',
// 'Cumulative flow diagram' => '', 'Cumulative flow diagram' => 'Fluxograma cumulativo',
// 'Cumulative flow diagram for "%s"' => '', 'Cumulative flow diagram for "%s"' => 'Fluxograma cumulativo para "%s"',
// 'Daily project summary' => '', 'Daily project summary' => 'Resumo diário do projeto',
// 'Daily project summary export' => '', 'Daily project summary export' => 'Exportação diária do resumo do projeto',
// 'Daily project summary export for "%s"' => '', 'Daily project summary export for "%s"' => 'Exportação diária do resumo do projeto para "%s"',
// 'Exports' => '', 'Exports' => 'Exportar',
// 'This export contains the number of tasks per column grouped per day.' => '', 'This export contains the number of tasks per column grouped per day.' => '',
'Nothing to preview...' => 'Nada para pré-visualizar...', 'Nothing to preview...' => 'Nada para pré-visualizar...',
'Preview' => 'Pré-visualizar', 'Preview' => 'Pré-visualizar',
// 'Write' => '', 'Write' => 'Escrever',
// 'Active swimlanes' => '', 'Active swimlanes' => 'Ativar swimlanes',
// 'Add a new swimlane' => '', 'Add a new swimlane' => 'Adicionar novo swimlane',
// 'Change default swimlane' => '', 'Change default swimlane' => 'Alterar swimlane padrão',
// 'Default swimlane' => '', 'Default swimlane' => 'Swimlane padrão',
// 'Do you really want to remove this swimlane: "%s"?' => '', 'Do you really want to remove this swimlane: "%s"?' => 'Você realmente deseja remover este swimlane: "%s"?',
// 'Inactive swimlanes' => '', 'Inactive swimlanes' => 'Desativar swimlanes',
// 'Set project manager' => '', 'Set project manager' => 'Definir gerente do projeto',
// 'Set project member' => '', 'Set project member' => 'Definir membro do projeto',
// 'Remove a swimlane' => '', 'Remove a swimlane' => 'Remover um swimlane',
// 'Rename' => '', 'Rename' => 'Renomear',
// 'Show default swimlane' => '', 'Show default swimlane' => 'Exibir swimlane padrão',
// 'Swimlane modification for the project "%s"' => '', 'Swimlane modification for the project "%s"' => 'Modificação de swimlane para o projeto "%s"',
// 'Swimlane not found.' => '', 'Swimlane not found.' => 'Swimlane não encontrado.',
// 'Swimlane removed successfully.' => '', 'Swimlane removed successfully.' => 'Swimlane removido com sucesso.',
// 'Swimlanes' => '', 'Swimlanes' => 'Swimlanes',
// 'Swimlane updated successfully.' => '', 'Swimlane updated successfully.' => 'Swimlane atualizado com sucesso.',
// 'The default swimlane have been updated successfully.' => '', 'The default swimlane have been updated successfully.' => 'O swimlane padrão foi atualizado com sucesso.',
// 'Unable to create your swimlane.' => '', 'Unable to create your swimlane.' => 'Não foi possível criar o seu swimlane.',
// 'Unable to remove this swimlane.' => '', 'Unable to remove this swimlane.' => 'Não foi possível remover este swimlane.',
// 'Unable to update this swimlane.' => '', 'Unable to update this swimlane.' => 'Não foi possível atualizar este swimlane.',
// 'Your swimlane have been created successfully.' => '', 'Your swimlane have been created successfully.' => 'Seu swimlane foi criado com sucesso.',
// 'Example: "Bug, Feature Request, Improvement"' => '', 'Example: "Bug, Feature Request, Improvement"' => 'Exemplo: "Bug, Feature Request, Improvement"',
// 'Default categories for new projects (Comma-separated)' => '', 'Default categories for new projects (Comma-separated)' => 'Categorias padrão para novos projetos (Separadas por vírgula)',
// 'Gitlab commit received' => '', 'Gitlab commit received' => 'Gitlab commit received',
// 'Gitlab issue opened' => '', 'Gitlab issue opened' => 'Gitlab issue opened',
// 'Gitlab issue closed' => '', 'Gitlab issue closed' => 'Gitlab issue closed',
// 'Gitlab webhooks' => '', 'Gitlab webhooks' => 'Gitlab webhooks',
// 'Help on Gitlab webhooks' => '', 'Help on Gitlab webhooks' => 'Ajuda sobre Gitlab webhooks',
// 'Integrations' => '', 'Integrations' => 'Integrações',
// 'Integration with third-party services' => '', 'Integration with third-party services' => 'Integração com serviços de terceiros',
// 'Role for this project' => '', 'Role for this project' => 'Função para este projeto',
// 'Project manager' => '', 'Project manager' => 'Gerente do projeto',
// 'Project member' => '', 'Project member' => 'Membro do projeto',
// 'A project manager can change the settings of the project and have more privileges than a standard user.' => '', 'A project manager can change the settings of the project and have more privileges than a standard user.' => 'Um gerente do projeto pode alterar as configurações do projeto e ter mais privilégios que um usuário padrão.',
// 'Gitlab Issue' => '', 'Gitlab Issue' => 'Gitlab Issue',
// 'Subtask Id' => '', 'Subtask Id' => 'ID da subtarefa',
// 'Subtasks' => '', 'Subtasks' => 'Subtarefas',
// 'Subtasks Export' => '', 'Subtasks Export' => 'Exportar subtarefas',
// 'Subtasks exportation for "%s"' => '', 'Subtasks exportation for "%s"' => 'Subtarefas exportadas para "%s"',
// 'Task Title' => '', 'Task Title' => 'Título da Tarefa',
// 'Untitled' => '', 'Untitled' => 'Sem título',
// 'Application default' => '', 'Application default' => 'Aplicação padrão',
// 'Language:' => '', 'Language:' => 'Idioma',
// 'Timezone:' => '', 'Timezone:' => 'Fuso horário',
// 'Next' => '', 'Next' => 'Próximo',
); );

View File

@@ -30,7 +30,7 @@ function version_21($pdo)
$rq->execute(); $rq->execute();
$project_ids = $rq->fetchAll(PDO::FETCH_COLUMN, 0); $project_ids = $rq->fetchAll(PDO::FETCH_COLUMN, 0);
$rq = $pdo->prepare('UPDATE project_has_users SET is_owner=1 WHERE project_id=?'); $rq = $pdo->prepare("UPDATE project_has_users SET is_owner='1' WHERE project_id=?");
foreach ($project_ids as $project_id) { foreach ($project_ids as $project_id) {
$rq->execute(array($project_id)); $rq->execute(array($project_id));

View File

@@ -11,6 +11,7 @@ class BootstrapSubscriber extends Base implements EventSubscriberInterface
return array( return array(
'session.bootstrap' => array('setup', 0), 'session.bootstrap' => array('setup', 0),
'api.bootstrap' => array('setup', 0), 'api.bootstrap' => array('setup', 0),
'console.bootstrap' => array('setup', 0),
); );
} }

View File

@@ -4,7 +4,6 @@ namespace Subscriber;
use Event\GenericEvent; use Event\GenericEvent;
use Model\Task; use Model\Task;
use Integration\GithubWebhook;
use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ProjectModificationDateSubscriber extends Base implements EventSubscriberInterface class ProjectModificationDateSubscriber extends Base implements EventSubscriberInterface
@@ -15,17 +14,11 @@ class ProjectModificationDateSubscriber extends Base implements EventSubscriberI
Task::EVENT_CREATE_UPDATE => array('execute', 0), Task::EVENT_CREATE_UPDATE => array('execute', 0),
Task::EVENT_CLOSE => array('execute', 0), Task::EVENT_CLOSE => array('execute', 0),
Task::EVENT_OPEN => array('execute', 0), Task::EVENT_OPEN => array('execute', 0),
Task::EVENT_MOVE_SWIMLANE => array('execute', 0),
Task::EVENT_MOVE_COLUMN => array('execute', 0), Task::EVENT_MOVE_COLUMN => array('execute', 0),
Task::EVENT_MOVE_POSITION => array('execute', 0), Task::EVENT_MOVE_POSITION => array('execute', 0),
Task::EVENT_MOVE_PROJECT => array('execute', 0), Task::EVENT_MOVE_PROJECT => array('execute', 0),
Task::EVENT_ASSIGNEE_CHANGE => array('execute', 0), Task::EVENT_ASSIGNEE_CHANGE => array('execute', 0),
GithubWebhook::EVENT_ISSUE_OPENED => array('execute', 0),
GithubWebhook::EVENT_ISSUE_CLOSED => array('execute', 0),
GithubWebhook::EVENT_ISSUE_REOPENED => array('execute', 0),
GithubWebhook::EVENT_ISSUE_ASSIGNEE_CHANGE => array('execute', 0),
GithubWebhook::EVENT_ISSUE_LABEL_CHANGE => array('execute', 0),
GithubWebhook::EVENT_ISSUE_COMMENT => array('execute', 0),
GithubWebhook::EVENT_COMMIT => array('execute', 0),
); );
} }

View File

@@ -2,6 +2,18 @@
require 'vendor/autoload.php'; require 'vendor/autoload.php';
// Automatically parse environment configuration (Heroku)
if (getenv('DATABASE_URL')) {
$dbopts = parse_url(getenv('DATABASE_URL'));
define('DB_DRIVER', $dbopts['scheme']);
define('DB_USERNAME', $dbopts["user"]);
define('DB_PASSWORD', $dbopts["pass"]);
define('DB_HOSTNAME', $dbopts["host"]);
define('DB_NAME', ltrim($dbopts["path"],'/'));
}
// Include custom config file // Include custom config file
if (file_exists('config.php')) { if (file_exists('config.php')) {
require 'config.php'; require 'config.php';

View File

@@ -1,5 +1,6 @@
{ {
"require": { "require": {
"ext-mbstring": "*",
"ircmaxell/password-compat": "1.0.3", "ircmaxell/password-compat": "1.0.3",
"fguillot/simple-validator": "dev-master", "fguillot/simple-validator": "dev-master",
"swiftmailer/swiftmailer": "@stable", "swiftmailer/swiftmailer": "@stable",

40
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"hash": "32ca2365366d59b6b6f4fc2b5af435a7", "hash": "fb6eb8ebc1ba83b1b3a060f67d770ad3",
"packages": [ "packages": [
{ {
"name": "erusev/parsedown", "name": "erusev/parsedown",
@@ -432,17 +432,17 @@
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v2.6.1", "version": "v2.6.3",
"target-dir": "Symfony/Component/Console", "target-dir": "Symfony/Component/Console",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/Console.git", "url": "https://github.com/symfony/Console.git",
"reference": "ef825fd9f809d275926547c9e57cbf14968793e8" "reference": "6ac6491ff60c0e5a941db3ccdc75a07adbb61476"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/Console/zipball/ef825fd9f809d275926547c9e57cbf14968793e8", "url": "https://api.github.com/repos/symfony/Console/zipball/6ac6491ff60c0e5a941db3ccdc75a07adbb61476",
"reference": "ef825fd9f809d275926547c9e57cbf14968793e8", "reference": "6ac6491ff60c0e5a941db3ccdc75a07adbb61476",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -485,21 +485,21 @@
], ],
"description": "Symfony Console Component", "description": "Symfony Console Component",
"homepage": "http://symfony.com", "homepage": "http://symfony.com",
"time": "2014-12-02 20:19:20" "time": "2015-01-06 17:50:02"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v2.6.1", "version": "v2.6.3",
"target-dir": "Symfony/Component/EventDispatcher", "target-dir": "Symfony/Component/EventDispatcher",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/EventDispatcher.git", "url": "https://github.com/symfony/EventDispatcher.git",
"reference": "720fe9bca893df7ad1b4546649473b5afddf0216" "reference": "40ff70cadea3785d83cac1c8309514b36113064e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/720fe9bca893df7ad1b4546649473b5afddf0216", "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/40ff70cadea3785d83cac1c8309514b36113064e",
"reference": "720fe9bca893df7ad1b4546649473b5afddf0216", "reference": "40ff70cadea3785d83cac1c8309514b36113064e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -507,10 +507,10 @@
}, },
"require-dev": { "require-dev": {
"psr/log": "~1.0", "psr/log": "~1.0",
"symfony/config": "~2.0", "symfony/config": "~2.0,>=2.0.5",
"symfony/dependency-injection": "~2.6", "symfony/dependency-injection": "~2.6",
"symfony/expression-language": "~2.6", "symfony/expression-language": "~2.6",
"symfony/stopwatch": "~2.2" "symfony/stopwatch": "~2.3"
}, },
"suggest": { "suggest": {
"symfony/dependency-injection": "", "symfony/dependency-injection": "",
@@ -543,23 +543,23 @@
], ],
"description": "Symfony EventDispatcher Component", "description": "Symfony EventDispatcher Component",
"homepage": "http://symfony.com", "homepage": "http://symfony.com",
"time": "2014-12-02 20:19:20" "time": "2015-01-05 14:28:40"
} }
], ],
"packages-dev": [ "packages-dev": [
{ {
"name": "symfony/stopwatch", "name": "symfony/stopwatch",
"version": "v2.6.1", "version": "v2.6.3",
"target-dir": "Symfony/Component/Stopwatch", "target-dir": "Symfony/Component/Stopwatch",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/Stopwatch.git", "url": "https://github.com/symfony/Stopwatch.git",
"reference": "261abd360cfb6ac65ea93ffd82073e2011d034fc" "reference": "e8da5286132ba75ce4b4275fbf0f4cd369bfd71c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/Stopwatch/zipball/261abd360cfb6ac65ea93ffd82073e2011d034fc", "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/e8da5286132ba75ce4b4275fbf0f4cd369bfd71c",
"reference": "261abd360cfb6ac65ea93ffd82073e2011d034fc", "reference": "e8da5286132ba75ce4b4275fbf0f4cd369bfd71c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -592,7 +592,7 @@
], ],
"description": "Symfony Stopwatch Component", "description": "Symfony Stopwatch Component",
"homepage": "http://symfony.com", "homepage": "http://symfony.com",
"time": "2014-12-02 20:19:20" "time": "2015-01-03 08:01:59"
} }
], ],
"aliases": [], "aliases": [],
@@ -606,6 +606,8 @@
"fguillot/simplelogger": 20 "fguillot/simplelogger": 20
}, },
"prefer-stable": false, "prefer-stable": false,
"platform": [], "platform": {
"ext-mbstring": "*"
},
"platform-dev": [] "platform-dev": []
} }

View File

@@ -9,17 +9,22 @@ Each automatic action is defined like that:
- An action linked to this event - An action linked to this event
- Eventually there is some parameters to define - Eventually there is some parameters to define
Each project can have a different set of automatic actions, the configuration panel is located on the project listing page, just click on the link "Automatic actions". Each project can have a different set of automatic actions, the configuration panel is located on the project listing page, just click on the link **Automatic actions**.
![Automatic action creation (step 1)](http://kanboard.net/screenshots/documentation/project-automatic-action-step1.png) Add a new action
----------------
To add a new automatic action, choose the event with an action and click on the button "Next Step", then specify action parameters and finish the process by clicking on the button "Save this action". ### Choose an action
![Automatic action creation (step 2)](http://kanboard.net/screenshots/documentation/project-automatic-action-step2.png) ![Choose an action](http://kanboard.net/screenshots/documentation/project-automatic-action-step1.png)
Each time an event occurs, the corresponding actions are executed. ### Choose an event
![Automatic actions](http://kanboard.net/screenshots/documentation/project-automatic-actions.png) ![Choose an event](http://kanboard.net/screenshots/documentation/project-automatic-action-step2.png)
### Define action parameters
![Define parameters](http://kanboard.net/screenshots/documentation/project-automatic-action-step3.png)
List of available events List of available events
------------------------ ------------------------
@@ -39,6 +44,9 @@ List of available events
- Github issue assignee change - Github issue assignee change
- Github issue label change - Github issue label change
- Github issue comment created - Github issue comment created
- Gitlab issue opened
- Gitlab issue closed
- Gitlab commit received
List of available actions List of available actions
------------------------- -------------------------

View File

@@ -9,12 +9,12 @@ Creating projects for multiple users
- Only administrators can create and manage those projects - Only administrators can create and manage those projects
- User management is available - User management is available
To create a new project, click on the top menu **Projects** and click on the link **New project**. From the dashboard, click on the link **New project**.
Then the form appears: Then the form appears:
![Project creation form](http://kanboard.net/screenshots/documentation/project-creation-form.png) ![Project creation form](http://kanboard.net/screenshots/documentation/project-creation-form.png)
It's very easy, you just have to find a name for your project. It's very easy, you just have to find a name for your project!
Creating a private prooject Creating a private prooject
--------------------------- ---------------------------
@@ -23,6 +23,6 @@ Creating a private prooject
- There is **NO** user management - There is **NO** user management
- Only the owner and administrators can access to the project - Only the owner and administrators can access to the project
To create a new private project, click on the top menu **Projects** and click on the link **New private project**. From the dashboard, click on the link **New private project**.
Note: project names must be unique across the application. Note: project names must be unique across the application.

View File

@@ -21,5 +21,7 @@ Field description:
- **Column**: The column where the task will be created, your task will be positioned at the bottom. - **Column**: The column where the task will be created, your task will be positioned at the bottom.
- **Color**: Choose the color of the card. - **Color**: Choose the color of the card.
- **Complexity**: Used in agile project management (Scrum), the complexity or story points is a number that tells the team how hard the story is. Often, people use the fibonacci series. - **Complexity**: Used in agile project management (Scrum), the complexity or story points is a number that tells the team how hard the story is. Often, people use the fibonacci series.
- **Original Estimate**: Estimation in hours to complete the tasks.
- **Due Date**: Overdue tasks will have a red due date and upcoming due dates will be black on the board. Several date format are accepted in addition to the date picker. - **Due Date**: Overdue tasks will have a red due date and upcoming due dates will be black on the board. Several date format are accepted in addition to the date picker.
- **Original Estimate**: Estimation in hours to complete the tasks.
With the preview link, you can see the task description converted from the Markdown syntax.

View File

@@ -40,18 +40,6 @@ It's also possible to use a secure connection, TLS or SSL:
define('MAIL_SMTP_ENCRYPTION', 'ssl'); // Valid values are "null", "ssl" or "tls" define('MAIL_SMTP_ENCRYPTION', 'ssl'); // Valid values are "null", "ssl" or "tls"
``` ```
Here an example with Google:
```php
define('MAIL_SMTP_HOSTNAME', 'smtp.gmail.com');
define('MAIL_SMTP_PORT', 465);
define('MAIL_SMTP_USERNAME', 'my_account@gmail.com');
define('MAIL_SMTP_PASSWORD', 'my google password');
define('MAIL_SMTP_ENCRYPTION', 'ssl');
```
To use Google, you might need to allow Kanboard to use your Google account, see ["Allowing less secure apps to access your account"](https://support.google.com/accounts/answer/6010255) and ["My client isn't accepting my username and password"](https://support.google.com/mail/answer/14257).
### Sendmail configuration ### Sendmail configuration
By default the sendmail command will be `/usr/sbin/sendmail -bs` but you can customize that in your config file. By default the sendmail command will be `/usr/sbin/sendmail -bs` but you can customize that in your config file.

View File

@@ -35,7 +35,7 @@ Go to your project settings page, on the left choose "Webhooks & Services", then
![Github configuration](http://kanboard.net/screenshots/documentation/github-webhooks.png) ![Github configuration](http://kanboard.net/screenshots/documentation/github-webhooks.png)
- **Payload url**: This url is available on Kanboard, go to "projects", select your project, at the bottom of the page, you have a section Github webhooks, just copy and paste the link. - **Payload url**: Copy and paste the link from the Kanboard project settings (section **Integrations > Github**).
- Select **"Send me everything"** - Select **"Send me everything"**
![Github webhook](http://kanboard.net/screenshots/documentation/kanboard-github-webhooks.png) ![Github webhook](http://kanboard.net/screenshots/documentation/kanboard-github-webhooks.png)

View File

@@ -19,7 +19,7 @@ List of supported actions
Configuration Configuration
------------- -------------
[INSERT SCREENSHOT] ![Github configuration](http://kanboard.net/screenshots/documentation/gitlab-webhooks.png)
1. On Kanboard, go to the project settings and choose the section **Integrations** 1. On Kanboard, go to the project settings and choose the section **Integrations**
2. Copy the Gitlab webhook url 2. Copy the Gitlab webhook url

38
docs/heroku.markdown Normal file
View File

@@ -0,0 +1,38 @@
Deploy Kanboard on Heroku
=========================
You can try Kanboard for free on [Heroku](https://www.heroku.com/).
You can use this one click install button or follow the manual instructions below:
[![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy?template=https://github.com/fguillot/kanboard)
Requirements
------------
- Heroku account, you can use a free account
- Heroku command line tool installed
Manual instructions
-------------------
```bash
# Get the last development version
git clone https://github.com/fguillot/kanboard.git
cd kanboard
# Push the code to Heroku (You can also use SSH if git over HTTP doesn't work)
heroku create
git push heroku master
# Start a new dyno with a Postgresql database
heroku ps:scale web=1
heroku addons:add heroku-postgresql:hobby-dev
# Open your browser
heroku open
```
Limitations
-----------
The storage on Heroku is ephemeral, that means uploaded files through Kanboard are not persistent after a reboot.

View File

@@ -4,6 +4,11 @@ Swimlanes
Swimlanes are horizontal separations in your board. Swimlanes are horizontal separations in your board.
By example, it's useful to separate software releases, divide your tasks in different products, teams or what ever you want. By example, it's useful to separate software releases, divide your tasks in different products, teams or what ever you want.
Board with swimlanes
--------------------
![Swimlanes Configuration](http://kanboard.net/screenshots/documentation/swimlanes.png)
Managing swimlanes Managing swimlanes
------------------ ------------------
@@ -11,14 +16,14 @@ Managing swimlanes
- If there is more than one swimlane, the board will show all swimlanes. - If there is more than one swimlane, the board will show all swimlanes.
- You can drag and drop tasks between swimlanes. - You can drag and drop tasks between swimlanes.
To configure swimlanes go to the **project configuration page** and choose the **section Swimlanes**. To configure swimlanes go to the **project configuration page** and choose the section **Swimlanes**.
[INSERT SCREENSHOT] ![Swimlanes Configuration](http://kanboard.net/screenshots/documentation/swimlanes-configuration.png)
From there, you can add a new swimlane or rename the default one. From there, you can add a new swimlane or rename the default one.
You can also disable and change the position of the different swimlanes. You can also disable and change the position of the different swimlanes.
- The default swimlane is always on the top but you can hide it. - The default swimlane is always on the top but you can hide it.
- Inactive swimlanes are not shown on the board. - Inactive swimlanes are not shown on the board.
- Removing a swimlane doesn't remove tasks assigned to it, those tasks will be moved to the default swimlane. - **Removing a swimlane doesn't remove tasks assigned to it**, those tasks will be moved to the default swimlane.

View File

@@ -1,7 +1,7 @@
Syntax Guide Syntax Guide
============ ============
Kanboard use the [Markdown syntax](http://en.wikipedia.org/wiki/Markdown) to write comments or task descriptions. Kanboard use the [Markdown syntax](http://en.wikipedia.org/wiki/Markdown) for comments or task descriptions.
Here are some examples: Here are some examples:
Bold and italic Bold and italic

View File

@@ -1,7 +1,7 @@
Update Update
====== ======
Important: **Always do a backup of your database before upgrading!** **Always make a backup of your database before upgrading!**
From the archive (stable version) From the archive (stable version)
--------------------------------- ---------------------------------

View File

@@ -7,19 +7,24 @@ Type of users
Kanboard use a basic permission system, there is two kind of users: Kanboard use a basic permission system, there is two kind of users:
- Administrators - Administrators
- Regular/Standard users - Standard users
Administrator have access to everything. By example, they can add or remove projects. Administrator have access to everything. By example, they can add or remove projects.
A standard user can't manage users and projects. There is also permissions defined at the project level, users can be seen as:
- Project member
- Project manager
Project managers have more privileges than a simple user member.
Add a new user Add a new user
-------------- --------------
To add a new user, you must be administrator. To add a new user, you must be administrator.
1. Go to the top menu **users** 1. From the dashboard, go to the menu **User Management**
2. On the left, you have a link **New user** 2. On the top, you have a link **New user**
3. Fill the form and save 3. Fill the form and save
When you create a new user, you have to specify those values: When you create a new user, you have to specify those values:

View File

@@ -11,7 +11,7 @@ There is only two constraints imposed by Kanban:
Visualize your workflow Visualize your workflow
----------------------- -----------------------
- Your work is visualized on a board, you have a clear overview of your project - Your work is displayed on a board, you have a clear overview of your project
- Each column represent a step in your workflow - Each column represent a step in your workflow
Bring focus and avoid multitasking Bring focus and avoid multitasking

View File

@@ -4,6 +4,9 @@
require __DIR__.'/app/common.php'; require __DIR__.'/app/common.php';
use Symfony\Component\Console\Application; use Symfony\Component\Console\Application;
use Symfony\Component\EventDispatcher\Event;
$container['dispatcher']->dispatch('console.bootstrap', new Event);
$application = new Application('Kanboard', APP_VERSION); $application = new Application('Kanboard', APP_VERSION);
$application->add(new Console\TaskOverdueNotification($container)); $application->add(new Console\TaskOverdueNotification($container));

View File

@@ -41,6 +41,16 @@ rm -rf data/*.sqlite \
Dockerfile \ Dockerfile \
composer.* composer.*
find ./vendor -name doc -type d -exec rm -rf {} +;
find ./vendor -name notes -type d -exec rm -rf {} +;
find ./vendor -name test -type d -exec rm -rf {} +;
find ./vendor -name tests -type d -exec rm -rf {} +;
find ./vendor -name composer.json -delete
find ./vendor -name phpunit.xml -delete
find ./vendor -name .travis.yml -delete
find ./vendor -name README.* -delete
find ./vendor -name .gitignore -delete
# Set the version number # Set the version number
sed -i.bak s/master/$VERSION/g app/constants.php && rm -f app/*.bak sed -i.bak s/master/$VERSION/g app/constants.php && rm -f app/*.bak

View File

@@ -104,7 +104,7 @@ class ProjectTest extends Base
$project = $p->getById(1); $project = $p->getById(1);
$this->assertNotEmpty($project); $this->assertNotEmpty($project);
$this->assertEquals($now + 1, $project['last_modified']); $this->assertGreaterThan($now, $project['last_modified']);
} }
public function testIsLastModified() public function testIsLastModified()