Você está na página 1de 70

Manual do Redmine

Software para Gerenciamento de


Projetos

Marcello Henrique Dias de Moura


Renato de Paula Mesquita Caroline da Cunha Mota

Goiânia, 19 de Fevereiro de 2009


Sumário

1
Lista de Figuras

2
Capı́tulo 1

Guia de Instalação

1.1 Instalando Redmine


1.1.1 Requerimentos
Sistemas operacionais
Redmine deveria rodar em sistemas Unix, Linux, Mac e Windows assim como
ruby está disponı́vel para essa plataformas.

Ruby & Ruby on Rails


As necessidades das versões do Rails para as versões do Redmine para que
funcione a contento são:

Versão do Redmine Verão Suportada Ruby Versão necessária do Rails


current trunk ruby 1.8.6, 1.8.7 Rails 2.2.2
trunk before r2493 ruby 1.8.6, 1.8.7 Rails 2.1.2
0.8.x ruby 1.8.6, 1.8.7 Rails 2.1.2
0.7.x ruby 1.8.6 Rails 2.0.2

Liberações oficiais incluem a versão apropriada do Rails em seus diretórios


expecı́ficos. Portanto, não é necessária uma ação especı́fica. Se você baixar
os fontes de um repositório Redmine, você pode instalar uma versão do Rails
especı́fica na sua máquina rodando:

gem install rails -v=2.1.2

Notas:
• RubyGems 1.3.1 é necessário
• Rake 0.8.3 é necessário

3
Base de dados
• MySQL 4.1 ou mais novo (recomendado)
• PostgreSQL 8
• SQLite 3

Se você está usando banco de dados MySQL, tem certeza de instalar o C


bindings que melhora a permformace dramasticamente. Você pode obtê-lo ro-
dando gem install mysql

Componentes opcionais
• SCM binários (eg. svn), para navegar no repositório (deve estar disponı́vel
em seu PATH) Veja [[BrRedmineRepositories]] para compatibilidade necessária
do SCM.
• “RMagick” (para permitir exportar imagem png do gráfico de Gantt)

1.1.2 Instalação
1. ?? e extraia os arquivos do ??.
2. Criar um banco de dados vazio chamado redmine por exemplo. Para
MySQL:

create database redmine character set utf8;

3. Copiar config/database.yml.example para config/database.yml e ed-


itar este arquivo na ordem para configurar as definições da sua base de
dados no ambiente “production”.
Exemplo para uma base de dados MySQL:

production:
adapter: mysql
database: redmine
host: localhost
username: bduser
password: bdpasswd

4. Criar uma estrutura na base de dados, rodando o seguinte comando no


diretório raiz da sua aplicação:

rake db:migrate RAILS_ENV="production"

Isto vai criar as tabelas e a conta de administrador.


5. Inserir configuração de dados padrão na base de dados, rodando o seguinte
comando:

4
rake redmine:load_default_data RAILS_ENV="production"

Este passo é opcional porém é altamente recomendado, como você


pode definir sua configuração do scratch. Isso vai carregar as regras, tipos,
estatus, workflows e numerações.
6. Definindo permissões Nota: Usuários windows podem pular essa sessão.
O usuário que rodar Redmine deve ter permissão de escrita nos seguinte
diretórios: files, log, tmp (criando o último se não existir).
Assumindo que você rodou Redmine com usuário redmine:

mkdir tmp
sudo chown -R redmine:redmine files log tmp
sudo chmod -R 755 files log tmp

7. Testando a instalação rodando o servidor web WEBrick:

ruby script/server -e production

Uma vez WEBrick iniciado, aponte seu navegador para http://localhost:3000/.


Você deveria ver a página de boas vindas da aplicação.
8. Use a conta de administração padrão logando assim:

* login: admin
* password: admin

Você pode ir para Admin & Settings para modificar as configurações da


aplicação.

1.1.3 Configurando serviço SMTP


Liberações 0.8.x
Copie config/email.yml.example para config/email.yml e edite esse arquivo
para ajustar as definições do seu serviço SMTP.

Liberações 0.7.x
Em config/environment.rb, você pode definir parametros so seu servidor SMTP:

* config.action_mailer.smtp_settings: SMTP server configuration


* config.action_mailer.perform_deliveries: set to false to disable mail delivering

Não se esqueça de reiniciar sua aplicação depois da mudança.

5
1.1.4 Backups
Backups do Redmine deveria incluir:

* dados (alocados na sua base de dados)


* anexos (alocados no seu diretório files)

Aqui temos um simples script em shell que pode ser usado para fazer back-
ups diariamente (assumindo que você esteje usando uma base de dados mysql):
1 # Dados
2 / u s r / b i n /mysqldump −u <username> −p <password> <r e d m i n e d a t a b a s e > | g z i p
> / path / t o / backup /db/ r e d m i n e ‘ d a t e +%y %m %d ‘ . gz
3 # Anexos
4 r s y n c −a / path / t o / redmi ne / f i l e s / path / t o / backup / f i l e s

1.2 Atualizando
1.2.1 Atualizando de um repositório SVN
Antes de atualizar, verifique se você tem todos os ?? para versão que você quer
atualizar.

1. Vá até o diretório Redmine e rode o seguinte comando:

svn update

2. Migrando sua base de dados (por favor, faça um backup da sua base de
dados antes de executar isso):

rake db:migrate RAILS_ENV="production"

3. Limpe o cache e sessões existentes:

rake tmp:cache:clear
rake tmp:sessions:clear

4. Reinicie a aplicação e vai até “Admin − > Roles & permissions” para
verificar/definir as permissões para as novas funcionalidades, se existir.

1.2.2 Atualizando de uma liberação baixada


1. Descompacte o novo arquivo no seu novo diretório.

2. Copie as definições do seu banco de dados config/database.yml para dentro


do seu novo diretórito config.
3. Copie config/email.yml.example para config/email.yml e edite este arquivo
para ajustar suas configurações SMTP.

6
4. Vá para seu novo diretório redmine, e faça a migração da sua base de
dados (por favor, faça um backup da sua base de dados antes de executar
isso):

rake db:migrate RAILS_ENV="production"

5. Copie o conteúdo do diretório RAILS ROOT/files para sua nova insta-


lação.

6. Inicie a aplicação e vá até “Admin -> Roles & permissions” e verifique/de-
fina as permissões para as novas funcionalidades, se existir.

1.3 Migrando de outros sistemas


1.3.1 Trac
O Trac importamos na migração:

• Usuário

• Componentes
• Versões (Milestones)
• Tı́quetes

• Comentário dos tı́quetes e mudanças (estatus e resolução)


• Colunas especı́ficas no Trac (Ex. Resolution) e adicionado como colunas
customizados no Redmine
• Arquivos dos Tı́quetes e customizações de colunas

• Páginas Wiki e histórico

Notas:

1. Senhas dos usuário são todas definidas no trac


2. Identificação dos tı́quetes são preservadas se não ainda não houver tı́quetes
na base de dados do Redmine
3. Customização de colunas são todas criadas como texto customizado no
Redmine

Você necessita do sqlite-ruby gem (gem install sqlite-ruby) para acessar a


base de dados do Trac.
Antes de iniciar, você precisa de uma base de dados fresca do Redmine,
carregando o banco de dados padrão (requerimento). Veja ??
O script foi testado com o banco de dados sqlite do Trac 0.10 e deveria
funcionar com a base de dados do Trac 0.11.

1. Rodando o seguinte comando, onde test é sua marca do ambiente Redmine:

7
rake redmine:migrate_from_trac RAILS_ENV="test"

2. O script te perguntará sobre suas configurações do Trac:

Trac directory []: /var/trac/myproject


Trac database adapter (sqlite, sqlite3, mysql, postgresql) [sqlite]:
Database encoding [UTF-8]:
Target project identifier []: myproject

O diretório do Trac é o diretório raiz do seu ambiente Trac. O Redmine


vai procurar neste diretório por db/trac.db (se você escolher base de
dados sqlite/sqlite3) e o diretório attachments. Usando uma base de
dados mysql ou postgresql, o script vai perguntar as informações para
conexão (host, nome do banco, nome do usuário e senha). O Identificador
do projeto é o identificar do projeto Redmine no qual os dados vão ser
carregados (o projeto é criado se não encontrado).
3. O script migrando seus dados:

Deleting data
Migrating components..............................
Migrating milestones..............
Migrating custom fields.......
Migrating tickets.................................
Migrating wiki...........

Components: 29/30
Milestones: 14/14
Tickets: 1275/1275
Ticket files: 106/106
Custom values: 4409/4409
Wiki edits: 102/102

O script informa o número total dos objetos migrados. Agora, você deveria
ver um projeto chamado Myproject no Redmine com seus dados do Trac
carregados neste projeto.

1.3.2 Mantis
O Mantis importamos na migração:

• Usuários
• Projetos
• Versões do Projeto, categorias e notı́cias
• Afiliações do Projeto

8
• Bugs
• Notas do Bug, arquivos, relações e monitores

• Customização de colunas

Senha dos usuário são todas definidas no ”mantis”.


Migração de arquivos de Bug somente funcionam se eles estiverem armazena-
dos no seu banco de dados Mantis (Iste é o comportamento padrão do Mantis).
O script foi testado com diferentes bancos de dados Mantis 1.0.x e deveria
funcionar com outras versões recentes.
Antes de iniciar, você precisa de uma base de dados fresca do Redmine,
carregando o banco de dados padrão (requerimento). Veja ??

1. Rodando o seguinte comando, onde test é sua marca do ambiente Redmine:

rake redmine:migrate_from_mantis RAILS_ENV="test"

2. O script te perguntará sobre suas configurações do Mantis:

Please enter settings for your Mantis database


adapter [mysql]:
host [localhost]:
database [bugtracker]: mantis
username [root]:
password []:
encoding [UTF-8]:

Forneça o adaptador, nome do host, nome da base de dados, login, senha


e codificação de caracteres do seu Mantis, ou deixe as configurações dos
valores por omissão.
O adptador pode ser mysql (por omissão) ou postgresql.
3. O script migrando seus dados:

Migrating users...............
Migrating projects.............
Migrating bugs........................................
Migrating news...
Migrating custom fields..

Users: 15/15
Projects: 13/13
Memberships: 10/10
Versions: 33/33
Categories: 4/4
Bugs: 180/180
Bug notes: 336/336
Bug files: 46/46

9
Bug relations: 11/11
Bug monitors: 8/8
News: 3/3
Custom fields: 2/2

O script informa o número total dos objetos migrados.

1.3.3 Outros sistemas


Voce pode procurar outros importadores submetidos pelos usuários Redmine:

* Jira importer: #1385


* Buzilla importer: #989
Esses scripts não foram testados nem são suportados. Se você quer ajudar,
pode enviar-me (http://www.redmine.org/account/show/1) um dump da base
de dados e as ferramentas.

1.4 Baixando o Redmine


Antes de baixar o Redmine, você tem que decidir que versão você precisa:

1.4.1 Versão Estável


A última, bem testada liberação estável tomadas de 0.8.x-branch (que é re-
comendada para produção) é atualmente 0.8.1. Pode ser baixada usando a
URL:
* http://redmine.rubyforge.org/svn/tags/0.8.1/
A 0.8.x-branch (que contem atualizações incluı́das no próximo ?? no 0.8.x-
branch) pode ser baixada usando a URL:
* http://redmine.rubyforge.org/svn/branches/0.8-stable/

1.4.2 Versão de Desenvolvimento


A bleeding-edge versão de desenvolvimento do Redmine que contem todos as
novas funcionalidade congeladas. Embora isso possa estar quebrada por alguns
dias (muito raramente). A última versão de desenvolvimento do Redmine con-
tinua no tronco (trunk) e pode ser baixando usando a URL:
* http://redmine.rubyforge.org/svn/trunk/

1.4.3 Versão Descontinuada


A última liberação descontinuada continuam em 0.7.x-branch está atuamente
na revisão 0.7.4. Pode ser baixada usando a URL:
* http://redmine.rubyforge.org/svn/tags/0.7.4/

10
1.4.4 Versões Velhas
Se você precisa usar uma versão antiga especı́fica pela polı́tica da empresa ou
coisa parecida... Porque não... Pode ser baixada escolhendo a versão que você
precisa antes colocar o número completo da versão no final da URL:
* http://redmine.rubyforge.org/svn/tags/{version}/

1.5 Gerenciamento de Liberações


Esta página será um esboço de como será manuseadas as liberações

1.5.1 Liberação Principal (x.0.0)


Redmine atualmente não faz liberações principais (pre-1.0.0).

1.5.2 Liberação Menor (0.x.0)


Liberações menores podem quebrar compatibilidade para trás.

Mudanças permitidas
• Novas funcionalidade
• Correção de Defeitos (Bugs)
• Correções de Segurança
• Migração de Base de Dados

Mudanças não permitidads


Nada até esse momento.

1.5.3 Ponto de Liberações (0.0.x)


Ponto de liberações não deveria quebrar compatibilidade para trás.

Mudanças permitidas
• Funcionalidades Simples
• Correção de Defeitos (Bugs)
• Correçao de Segurança

Mudanças não permitidas


• Novas funcionalidades com muitas mudanças
• Migração de Base de Dados

1.5.4 Referencias
http://www.redmine.org/issues/show/1901#note-14

11
Capı́tulo 2

Guia do Administrador

2.1 Definições da Aplicação


2.1.1 Definições Gerais
Tı́tulo da aplicação
Tı́tulo que aparece no cabeçalho da aplicação.

Texto de boas-vindas
Texto mostrado na página inicial da aplicação. Este texto pode conter marcas
HTML.

Tema
Esta opção dá a você a opção de customizar temas. Redmine é fornecido com
um tema alternativo, que prevê principalmente questões de colorização baseado
em questões prioritárias.
Screenshot:

12
Temas estão localizados em public/themes/. Você pode ler sobre isso em:
http://www.redmine.org/wiki/redmine/HowTo_create_a_custom_Redmine_
theme

Idioma padrão
A linguagem por omissão é selecionada quando a aplicação não pode determinar
a linguagem dos usuários. A linguagem por omissão é também usada quando
envia email para múltiplos usuário. Default: English

Formato da Data
Deixamos você escolher como mostrar as datas:

Com base no idioma do usuário : datas vão ser mostradas especificamente


para cada usuário de acordo com o formato definido por eles.
Outros formatos : Datas vão sempre ser mostradas usando o formato especı́-
fico

Default: Baseado na linguagem dos usuários

Tamanho máximo do anexo


Tamanho máximo de envio de arquivos (no kibi-bytes). Default: 2048 (i.e. 2
mebi-bytes)

Servidor
Nome do host da aplicação. Este nome é usado para escrever URL no email
para enviar aos usuários.

13
Protocolo
Protocolo usado para gerar links nas notificações por email. Default: http

Formatação do texto
Métodos de formatação aplicados para a campo “description” dos tı́quetes, notı́-
cias, documentos...

Compactação do histórico do Wiki


Permitimos você ativar compressão para histórico do wikis armazenados (re-
duzindo tamanho dos dados). Default: disabled

Limite do feed
Número máximo de gravações contidos em alimentadores RSS. Default: 15

Usando ı́cones do Gravatar


Se habilitado, usuários ”Gravatars”:http://en.gravatar.com/ (avatar globalmente
reconhecido) vai ser mostrado em diversos lugares.

2.1.2 Autenticação
Exigir Autenticação
Se esta opção estiver habilitada, nenhuma página da aplicação é acessı́vel pe-
los usuários anônimos. Usuários deverão autenticar para acessar a aplicação.
Default: No

Auto-login
Esta opção deixa usuários usar a funcionalidade auto-login. Default: Disabled

Permitido Auto-registro
This option lets you enable/disable new users self registration: Esta opção deixa
você ligar/desligar novos usuários de se registrarem:

disabled : usuários não são permitidos de se registrarem

account activation by email : novos usuários recebem um email contendo


um link usado para tivar suas contas (usuário devem fornecer um email
válido).
manual account activation (default) : novas contas de usuários são criadas
mas precisam aprovação do administrador. Administradores recebem um
email infomando sobre elas que estão pendentes de aprovação.
automatic account activation : novos usuários podem autenticar, logo que
tenham registado.

14
Perdi minha senha
Se esta opção estiver habilitada, a funcionalidade de senha perdidas estará
disponı́vel. Default: Yes

2.1.3 Tickets
Permitir relacionar tickets entre projetos
Se esta opção estiver habilitada, tı́quetes poderão relacionar entre diferentes
projetos. Default: No

Visualizar tickets dos subprojetos nos projetos principais por padrão


Se esta opção estiver habilitada, tı́quetes de subprojetos vão estar disponı́veis
por omissão na lista de tı́quetes, calendário e gantt do projeto principal (Desde
r1198). Default: Yes

Limite de exportação das tarefas


Numero máximo do tı́quete contido na exportação do CSV e PDF. Default: 500

campo padrão visı́veis na lista de tickets


Esta configuração permite você definir que campos você quer mostrar na sua
lista de tı́quete por omissão. Somente customizando campos que são marcadas
com ’Para todos os todos os projetos’ pode ser selecionada aqui.

2.1.4 Notificação por email


Emissiol enviado de
Endereço de email usado no campo ”From”das mensagens enviadas aos usuários.

Destinatários com cópia oculta (cco)


Se esta opção estiver habilitada, notificações por email vão estar em cópia oculta.
Default: Yes

Mail em texto plano


Se esta opção estiver habilitada, email serão enviados somente em texto plano
(sem HTML).

Rodapé dos emails


Aqui você pode entra com texto que vai aparecer nos email enviados pela apli-
cação.

15
2.1.5 Repositórios
Auto-obter commits
Se esta opção estiver habilitada, a aplicação automaticamente retorna as nova
revisões quando um usuário consulta o repositório. Default: Yes
Você pode disabilitar esta opção e automaticamente chamar o Repositório#fetch chagesets
usando cron para regularmente retornar as revisões para todo o repositório em
background. Exemplo:
ruby script/runner "Repository.fetch_changesets" -e production
Você pode também chamar esta tarefa de nos ganchos de um repositório
(hooks) através do post-commit ou post-receive, então o changesets são recu-
perados após cada commit. Aqui tem um tutorial para fazer isso com o git:
http://finalcog.com/remine-git-post-receive

Ativa WS para gerenciamento do repositório


Esta opção deveria ser ativada somente se você instalou o script para criar o
repositório SVN automaticamente. Default: No

Codificação dos repositórios


Esta opção deixa você especificar a codificação preferida de caracteres preferida
para seus arquivos (múltiplos valores são permitidos, separados por vı́rgula).
Essa codificação é usada para converter o conteúdo dos arquivos e diff para
UTF-8 então eles serão mostrados adequadamentes no seu navegador. Quando
usar vários tipos, o primeiro será a codificação válida quando o conteúdo é
utilizado.
Para Franceses, está opção pode ser um bom exemplo:

UTF-8, ISO 8859-15, CP1252


Para Japoneses:
ISO-2022-JP, EUC-JP, UTF-8, SHIF_JIS, WINDOWS-31J

Referenciando tı́quetes em uma mensagem de commit


Quando obter (fetched) de um repositório, as mensagens de commit serão ver-
ificadas e referenciadas ou identificação de tı́quetes serão fixados. Esta opção
deixa você definir palavras que pode ser usadas nas mensagens de commits para
referenciar ou consertar tı́quetes automaticamente, e o estatus para aplicar no
conserto de um tı́quete.
Palavras por omissão são:

• para referenciar tı́quetes: refs, references, IssueID


• para fechar tı́quetes: fixes, closes

Não há status padrão definido para fechar tı́quetes. Você vai ter que es-
pecificar isso se você quiser habilitar auto encerramento do tı́quete. Se você
quer referenciar tı́quetes sem usar palavras, entre com um simples: * no campo

16
Palavras de referência. Neste caso, qualquer identificação do tı́quete encon-
trado na mensagem vai ser lincado para o repositório.
Exemplos desse funcionamento nos commits de mensagens usando as palavras
por omissão:
This commit refs #1, #2 and fixes #3
Esta mensagem deveria referenciar os tı́quetes 1 e 2 e automaticamente fechar
o tı́quete 3. Mais de uma palavra de identificação de tı́quete pode ser usada,
basta separar por espaço, vı́rgula ou &.

2.2 Regras e permissões


Papéis permite você definir regras de permissão que membro de um projeto pode
ter. Cada membro do projeto tem um papel para cada projeto. Um usuário
pode ter diferentes papéis para diferentes projetos.
Você pode criar um novo papel ou editar um existente. Você pode excluir
um papel somente se ninguém usá-lo em um projeto.

2.2.1 Propriedade dos papéis


• Nome: mostra o nome do papel
• Tickets podem ser atribuı́dos para este papel: se desabilitado, tı́quetes não
podem ser atribuı́dos para membro com este papel no projeto.

2.2.2 Permissões
Quando editar um papel, você pode definir permissões marcando ou desmar-
cando diferentes ações.

2.2.3 Sistema de papéis


Existe 2 sistema de papéis no Redmine: “Não membro” e “Anônimo”. Eles são
usandos internamente pelo Redmine e não podem ser excluı́dos.

• Não membro: este papel define a permissão que um usuário registrado


tem no projeto que ele não é membro.
• Anônimo: este papel define que permissão os usuários anônimos tem no
projeto.

Note que estas permissões somente aplicam para projetos públicos desde de
que usuários que não são membros do projeto privado nem podem vê-los.

2.3 Sistema de monitoramente de tı́quetes


2.3.1 Monitoramento (Trackers)
Monitoramento são diferentes tipos de tı́quetes. Para cada monitoramento você
pode definir:

17
• se o limite do tı́quete para o monitoramente deveria ser mostrado no
BrRedmineRoadmap

• se o limite do tı́quete para o monitoramente deveria ser mostrado no


BrRedmineIssueChangelog
• um diferente fluxo de trabalho.

Se você cria um novo monitoramento, você pode definir um fluxo de trabalho


a fim de utilizá-lo corretamente. Note que você pode copiar de fluxo de trabalho
de monitoramento existente quando você criar um novo (para que, selecionando
um monitoramento em “Copiar workflow de” na lista de menu na tela de “Novo
monitoramento”).

2.3.2 Status do tı́quete


Status do tı́quete pode ser adicionado ou excluı́do livremente. Cada status tem
as seguintes configurações:

Tı́quete fechado : indica que o tı́quete pode ser considerado como fechado
(mais que um status pode ser declarado como fechado)
Status padrão : status aplicado por padrão para um novo tı́quetes (somente
um status pode ser definido com o padrão)

2.3.3 Fluxo de trabalho (Workflow)


O fluxo de trabalho permite você definir a transição de status de vários membros
do projetos para permitir criar tı́quetes de acordo com seu tipo.
Na tela de definição do fluxo de trabalho, selecione o papel e o monitora-
mento que você quer para editar o fluxo de trabalho, então click em ’Editar’.
A tela permite você selecionar e autorizar a transição, para escolher o papel e
o monitoramento. A opção de status corrente indica o status inicial do tı́quete.
O campo de ”Novo status permitido”para status que pode ser aplicado.
Nota: Para permitir um papel de mudar o status de tı́quete existente, você
tem que dar a ela a permissão de “status de tı́quete alterado” (veja ??).

18
No exemplo acima, Bugs com um Novo status poderia ter um status de
Atribuı́do ou Resolvido pelo papel do Desenvolvedor. Aqueles que tem status
de Atribuı́dos poderia obter status de Resolvido. O status de todos os outros
Bugs não podem ser modificados pelos Desenvolvedores.

2.4 Campos Customizados


Customizar campos permite você adicionar informações nos Projetos, Tı́quetes
ou Usuários. Um campo customizado pode ser dos seguites tipos:

Integer: número positivo ou negativo


String: uma simples linha de entrada
Text: múltiplas linhas de texto
Date: data
Boolean: campos de marcar
List: menu de escolha

Algumas validações pode ser definidas para cada campo customizado:

Min - max length: tamanho mı́nimo e máximo do campo (0 significa que não
há restrição)
Regular Expression: uma expressão regular pode ser usada para validar o
conteúdo do campo

Exemplos:

^\[A-Z]{4}\d+$ : 4 letras maiúscula seguidas por 1 ou mais dı́gitos

^[^0-9]*$ : caracteres somente - nenhum número

Possible values : valores possı́veis para um campo ”List”. Você pode adicionar
mais valores clicando neste ı́cone:

19
2.4.1 Campos para tı́quetes
Required: campo necessário para criar/salvar um novo tı́quete
For all projects: se está habilitado, este campo é usada para todos os tı́quete
de todos os projetos. Se desabilitado, cada projeto pode escolher quando
usar este campo nos seus tı́quetes (veja ??).

2.4.2 Campos para entradas de tempo gasto


Required: campo necessário para criar/salvar uma entrada de tempo gasto

2.4.3 Campos por Projetos


Required: campo necessário para criar/salvar o projeto

2.4.4 Campo para Usuários


Required: campo necessário para criar/salvar usuário

2.5 Enumerações
Enumerações são globais (cross-project) valores para diversas partes do sistema
Redmine:
• Atividades (time tracking)
• Categorias do documento

• Prioridade dos tı́quetes


Esses ı́tens podem ser adicionados, modificados e excluı́dos livremente. To-
dos eles tem uma configuração que se é uma enumeração corrente deveria ter
um valor padrão. Se o valor padrão do campos está marcado, a enumeração
selecionada vai ser padrão para aquele valor especı́fico no campo(s). Se não en-
tão será será definido o valor padrão para uma especı́fica categoria (atividades,
categorias do documento ou prioridade dos tı́quetes) nenhum enumeração vai
ser pre-selecionada para o campo(s) especı́fico(s).

20
2.6 Gerenciando projetos
2.6.1 Lista de Projetos
Projeto: O nome do projeto

Descrição: Um pequena descrição do projeto


Sub-projetos: Indica o número de sub-projetos conectados a este projeto

Público: Se este ı́cone existir, qualquer um pode ver este projeto. projetos
não públicos podem ser vistos somente pelos seus usuário que obtem acesso
pelo administrador do projeto.

Criado em: Mostra a data de criação do projeto.

Arquivar: Você pode arquivar um projeto clicando sobre este ı́cone . Um


projeto arquivado não será mais visı́vel pelos seus usuários. Isso pode
ser desfeito (nesta mesma tela) pelo administrador. Quando arquivar o
projeto, qualquer sub-projeto deste projeto será arquivado também.
Excluir: Isto excluirá o projeto. O contrário de Arquivar, você não pode restau-
rar um projeto excluı́do. Use quanto tiver certeza que não arrependerá.

2.6.2 Adicionando ou editando um projeto


Veja ??.

21
2.7 Gerenciando Usuários
2.7.1 Lista de Usuários
Status das contas:

• Este ı́cone significa que a conta está bloqueada.Um usuário que tem
a conta bloqueada não pode logar e nem acessar a aplicação.

• Este ı́cone significa que a conta do usuário não está ativa ainda.
O botão boquear/desbloquear permite você ativa e desativar a conta.

2.7.2 Adicionando ou editando um usuário


Um usuário designado como administrador não tem restrições para acessar a
aplicação ou qualquer projeto.
No modo de edição, deixe a senha em branco que permaneça a mesma que
o usuário definiu.

2.8 Autenticação LDAP


Nativamente o Redmine suporta autenticação LDAP usando um ou múltiplos
diretórios LDAP.

2.8.1 Declarando um LDAP


Vá para Administração -> Configuração -> Autenticação e clique Autenti-
cação LDAP, no canto inferior direito da tela.
Entre com os dados:

Nome : nome arbitrário do seu diretório


Servidor : o nome do servidor LDAP
Porta : A pora do LDAP (por omissão é 389)

LDAPS : verifica se você quer ou não usar LDAPS para acessar o diretório
Conta : permite você deixar esse campo em branco caso seu LDAP aceite ler
anonimamente, por outro lado entre com seu nome de usuário e senha
para ter acesso ao LDAP
Senha : senha da conta

DN Base : o nı́vel mais alto DN da sua árvore de diretório LDAP


Atributos de autenticação : entre com o nome do seus atributos do LDAP
para serem usados com o nome de usuário Redmine

22
Usuário Redmine deverial agora estar aptos a autenticar usando LDAP
usuário e senha, se suas contas forem definidas para usar autenticação LDAP.
Para testar, crie um usuário Redmine com um login que não casa com a
conta LDAP, selecione o novamente criar LDAP no mode de autenticação
na lista de menu (este campo está visı́vel na tela de contas somente se o LDAP
for declarado) e deixe a senha vazia. Tente autenticar no Redmine usando a
usuário e senha LDAP.

2.8.2 Criando usuários “On the fly”


Para checar criação de usuários on-the-fly, qualquer usuário LDAP vai ter
sua conta automaticamente criada na primeira vez que ele logar no Redmine.
Para que, você tenha que especı́ficar nomes de atributos (primeiro nome, último
nome, email) que vão ser usados para criar as contas dos usuários.
Aqui é um exemplo tı́pico usando Active Directory:
Name = My Directory
Host = host.domain.org
Port = 389
LDAPS = no
Account = MyDomain\UserName
Password = <password>
Base DN = CN=users,DC=host,DC=domain,DC=org

On-the-fly user creation = yes


Attributes
Login = sAMAccountName
Firstname = givenName
Lastname = sN
Email = mail
Note que nomes de atributos LDAP são case sensitive.

2.8.3 Solução de problemas


Se você quer usar criação de usuário on-the-fly, esteja certo que Redmine pode
obter do seu LDAP todas as informações para criar um usuário válido. Por
exemplo, criação de usuário on-the-fly não funciona se você não tem um email
válido no seu diretório (você vai receber um um erro de “Invalid username/pass-
word” quando tentar logar).
Também, esteje certo que não tem nenhum campo marcado como necessário
para conta de usuários. Estes campos customizados deveria prenir contas de
usuário serem criadas dinamicamente.

2.9 Recebendo emails


Como no 0.8.0, o Redmine pode ser configurado para permitir criação ou co-
mentário de tı́ckets via email.

23
2.9.1 Configuração
Você pode configurar o Redmine para receber emails em um dos seguintes mo-
dos:

• Encaminhando emails de seu servidor de email:


– Prós: compatı́vel com um servidor de email remoto, o email é pro-
cessado instantaneamente, rápido, sem recarregamento de ambiente)
– Contras: necessita de algumas configurações em seu agente de trans-
ferência de email (ex. Postfix, Sendmail...)
• Enviando emails de um servidor IMAP:
– Prós: fácil de configurar, não necessita configurar seu MTA. com-
patı́vel com um servidor de email remoto
– Contras: os emails não são processados instantaneamente (uma tarefa
do cron precisa ser adicionada para ler emails periodicamente)
• Lendo emails de um entrada padrão:

– Prós: ótimo para testes


– Contras: lento (o ambiente é recarregado cada vez que um email é
lido), necessita de algumas configurações em seu MTA

Recuperando emails de um servidor de email


Um script independente pode ser usado para encaminhar emails recebidos do
seu servidor de email. Este script lê um email puro de uma entrada padrão e o
encaminha para o Redmine via uma solicitação HTTP. Pode ser encontrado em
seu diretório redmine: extra/mail_handler/rdm-mailhandler.rb.
Para poder usá-lo, você deve habilitar a API que recebe emails: Vá a Con-
figurações do programa -> Emails recebidos , verifique Habilitar WS para
emails recebidos e entre com ou gere uma chave secreta.
Copie rdm-mailhandler.rb para seu servidor de email e configure seu MTA
Uso:
rdm-mailhandler [options] --url=<Redmine URL> --key=<API key>

Required:
-u, --url URL do servidor Redmine
-k, --key chave API do Redmine

General options:
-h, --help mostra esta ajuda
-v, --verbose mostra informaç~
oes extra
-V, --version mostra informaç~
ao da vers~
ao e sai

Issue attributes control options:


-p, --project=PROJECT identificador do projeto
-t, --tracker=TRACKER nome do tipo de monitoramento
--category=CATEGORY nome da categoria
--priority=PRIORITY nome da prioridade
-o, --allow-override=ATTRS permitir que o conteúdo do email sobrescreva atributos
especificados por opç~
oes anteriores
ATTRS é uma lista de atributos separada por vı́rgulas

24
Exemplos:
# Projeto n~
ao especificado. Os Emails NECESSITAM conter a palavra chave do ’Projeto’:
rdm-mailhandler --url http://redmine.domain.foo --key secret

# Projeto consertado e tipo de monitoramento especificado, mas os emails podem sobrescrever


# ambos os atributos do tipo de monitoramento e prioridade
rdm-mailhandler --url https://domain.foo/redmine --key secret \\
--project foo \\
--tracker bug \\
--allow-override tracker,priority

Aqui está um exemplo para um Postfix alias:


foo: "|/path/to/rdm-mailhandler.rb --url http://redmine.domain --key secret --project foo"

Recuperando emails de um servidor IMAP


Uma tarefa de varredura (redmine:email:receive_imap) pode ser usada para
recuperar emails recebidos de um servidor IMAP.
Opç~
oes IMAP disponı́veis.
host=HOST Servidor host de IMAP (default: 127.0.0.1)
port=PORT Porta do servidor IMAP (default: 143)
ssl=SSL Usar SSL? (default: false)
username=USERNAME Conta IMAP
password=PASSWORD Senha IMAP
folder=FOLDER Pasta para leitura IMAP (default: INBOX)

Issue attributes control options:


project=PROJECT identificador do projeto
tracker=TRACKER nome do tipo de monitoramento
category=CATEGORY nome da categoria
priority=PRIORITY nome da prioridade
allow_override=ATTRS permitir que o conteúdo do email sobrescreva atributos
especificados por opç~
oes anteriores
ATTRS é uma lista de atributos separada por vı́rgulas

Essas opções estão disponı́veis no trunk ou no seguinte 0.8.1


move\textit{on}success=MAILBOX move emails que foram recebidos com sucesso para o MAILBOX
ao invés de deletá-los
move\textit{on}failure=MAILBOX move emails que foram ignorados para o MAILBOX

Exemplos:
# Nenhum projeto especificado. Os emails NECESSITAM conter a ’palavra chave’ do Projeto:

rake redmine:email:receive\textit{imap RAILS}ENV="production" \\


host=imap.foo.bar username=redmine@somenet.foo password=xxx

# Projeto consertado e tipo de monitoramento especificado, mas os emails podem sobrescrever


# ambos os atributos do tipo de monitoramento e prioridade

rake redmine:email:receive\textit{imap RAILS}ENV="production" \\


host=imap.foo.bar username=redmine@somenet.foo password=xxx ssl=1 \\
project=foo \\
tracker=bug \\
allow_override=tracker,priority

# Move com sucesso os emails para caixa de emails ’lidos" e os emails falhos para
# a caixa de emails ’falhos’

25
rake redmine:email:receive\textit{imap RAILS}ENV="production" \\
host=imap.foo.bar username=redmine@somenet.foo password=xxx \\
move\textit{on}success=read move\textit{on}failure=failed

Emails que são ignorados (usuário desconhecido, projeto desconhecido...)


são marcados como “Vistos” mas não são deletados do servidor IMAP.

Lendo emails de uma entrada padrão


Uma tarefa de varredura (redmine:email:receive) pode ser usada para ler um
único email puro da entrada padrão.
Opç~
oes de controle dos atributos do ticket:
project=PROJECT identificador do projeto
tracker=TRACKER nome do tipo de monitoramento
category=CATEGORY nome da categoria
priority=PRIORITY nome da prioridade
allow_override=ATTRS permitir que o conteúdo do email sobrescreva atributos
especificados por opç~
oes anteriores
ATTRS é uma lista de atributos separada por vı́rgulas

Exemplos:
# Nenhum projeto especificado. Os emails NECESSITAM conter a ’palavra chave’ do Projeto:

rake redmine:email:read RAILS\textit{ENV="production" < raw}email

# Projeto consertado e tipo de monitoramento especificado, mas os emails podem sobrescrever


# ambos os atributos do tipo de monitoramento e prioridade
rake redmine:email:read RAILS_ENV="production" \\
project=foo \\
tracker=bug \\
allow\textit{override=tracker,priority < raw}email

2.9.2 Como funciona


Quando recebe um email, Redmine usa o Endereço Remetente do email para
achar o usuário correspondente. Emails recebidos de desconhecidos ou usuários
bloqueados são ignorados.
Se o assunto do email contém algo como Re: [xxxxxxx #123], o email é
processado como uma resposta e uma nota é adicionada ao ticket #123. Do
contrário, um novo ticket é criado.

Porjeto alvo
O projeto alvo pode ser especificado usando a opção projeto quando receber
emails.
Se você não usar esta opção, os usuários terão de especificar no corpo do
email a qual projeto o ticket deverá ser adicionado. Isso pode ser feito inserindo
uma linha no corpo do email como esta: "Projeto: foo".
Exemplo (corpo do email):
Este é um novo ticket que será adicionado ao projeto foo.
Aqui nós temos a descriç~
ao do ticket
[...]

Projeto: foo

26
Você pode configurar um projeto padrão usando a opção projeto e deixar os
usuários sobrescreverem este projeto padrão usando a opção permitir-sobreescrever
quando receber emails. Exemplo:
# Cria tickets no projeto foo por padr~
ao
rake redmine:email:receive\textit{imap [...] project=foo allow}override=project

Claro, permissões de usuários são checadas e este email seria ignorado se o


usuário que enviou este email não for autorizado a adicionar tickets ao projeto
foo. Tenha certeza que o projeto alvo não usa campos customizados necessário
sem valores padrão para seus tickets, do contrário a criação do ticket falhará.

Atributos do ticket
Baseado nas opções usadas quando receber emails (veja a opção permitir-sobreescrever),
os usuários podem ser capazes de sobrescrever alguns atributos quando sub-
meter um ticket. Isso pode ser feito usando as seguintes palavras-chave no
corpo do email (assim como Projeto): Tipo de monitoramento, Categoria,
Prioridade, Status.
Exemplo (corpo do email):
Este é um novo ticket que sobrescreve alguns atributos
[...]

Projeto: foo
Tipo de monitoramento: Bug
Prioridade: Urgente
Status: Resolvido

Observadores
Se o usuário que mandar o email tiver a permissão “Adicionar observadores do
ticket” os usuários que estão nos campos Para ou Cc do email são automatica-
mente adicionados como observadores do ticket criado.

Formatação de email e anexos


O Redmine tenta usar a parte de texto simples do email para preencher a de-
scrição do ticket. Se um email HTML-only é recebido, marcadores HTML são
removidos de seu corpo.
Anexos de email são automaticamente anexados ao ticket, a menos que seu
tamanho exceda as ?? definidas nas configurações da aplicação.

27
Capı́tulo 3

Guia do usuário

3.1 Principais funcionalidades


Suporte para múltiplos projetos

• Gerencia todos seus projetos com uma única instância do Redmine

• Cada usuário pode ter um papél diferente para cada projeto


• Cada projeto pode ser declarado como público (visı́vel por qualquer um)
ou privado (visı́vel somente por membros do projeto)
• Módulos (ex. wiki, repositório, monitoramento de tı́quetes, ...) podem ser
habilitados ou desabilitados por projeto

Suporte para múltiplos sub-projetos

• Gerencia peças relacionadas do projeto como sub-projetos do projeto prin-


cipal.

Controle de acesso baseado em funções ou papéis flexı́veis

• Você define seus papéis e atribui permissões com um simples click

28
Figura 3.1: Permissão de usuários

Flexı́vel sistema de monitoramento de tı́quetes

• Define sua própria prioridade e tipos de tı́quetes

• Transição de fluxo de trabalho pode ser definido para cada tipo ou função
do tı́quete através de uma interface de administração (uma configuração
por omissão é carregada durante a instalação da aplicação)

29
Figura 3.2: Lista de tı́quetes

Figura 3.3: workflow

Gráfico de Gantt e calendário

• Grárico de gantt automático e calendário baseado nas datas dos tı́quetes

30
Figura 3.4: Gráfico de Gantt

Funcionalidade de rastreamento temporal

• O tempo pode ser descrito no projeto ou a nı́vel de tı́quete

• Relatório simples para visualizar tempo gasto por usuário, tipo de tı́quete,
categoria ou atividade

Figura 3.5: Tempo gasto

Campos personalizados

• Você pode definir seu próprio campo personalizado por tı́quete, tempo
gasto, projetos e usuário

31
• Diferentes formatos são permitidos: text, date, boolean, integers, drop-
down lists and checkboxes

• Campos personalizados podem ser mostrados na lista de tı́quetes e usuados


como filtro apenas para organizar campos

Notı́cias, documentos e gerenciamento de arquivos

• Você pode facilmente postar mensagens e compartilhar arquivos

Wiki por projeto e fóruns

• Wiki usa sintaxe de texto e links livres dentro do wiki usando conchetes
• Diferenças e visualização de anotações são permitidas

Figura 3.6: Editando wiki

32
Navegador de repositório e visualização de diferenças

• Repositórios pode ser anexados por projeto


• Redmine deixa você navegar entre o conteúdo, visualizar cada alteração
• Visualizador de diferença e anotações

• Suporta os SCM: http://subversion.tigris.org/Subversion, http://


www.nongnu.org/cvs/CVS, http://www.selenic.com/mercurialMercurial,
http://darcs.netDarcs e http://bazaar-vcs.orgBazaar.

Figura 3.7: Anotação

33
Figura 3.8: Navegando no código

Figura 3.9: Diferenças

Feeds & notificações por email

• Atividade do projeto, mudanças do repositório, notı́cias, tı́quetes, mu-


dança nos tı́quetes são permitidas como Atom feeds

Suporte para autenticação múltipla com LDAP

34
• Redmine deixa você autenticar usuário com LDAP
• Contas podem ser criadas on-the-fly quando o usuário é encontrado no
diretório (opcional)

Suporte para auto-registro de usuário

• Opcionalmente, você pode permitir usuário de registrarem on-line


• 3 métodos de ativação de contas são permitidos: automático (nenhuma
confirmação é requerida), manual (por administradores) ou através de um
auto gerador de URL enviado via email

Suporte a múltiplas linguagens


Obrigado aos muitos contribuidores, Redmine ainda está disponı́vel nas
seguintes linguagens:

• Bulgarian
• Czech
• Danish

• Dutch
• English
• Finnish
• Chinese

• French
• German
• Hebrew

• Hungarian
• Italian
• Japanese
• Lithuanian

• Korean
• Norvegian
• Polish

• Portuguese
• Romanian
• Russian
• Serbian

35
• Spanish
• Swedish

• Ukrainian

Suporte a múltiplas base de dados

• Redmine roda com MySQL, PostgreSQL ou SQLite

3.1.1 Funcionalidades solicitadas


Veja uma lista delas em funcionalidades solicitadas.

36
3.2 Contas
3.2.1 Minha conta
Esta tela permite você editar as definições da sua conta: último nome, primeiro
nome, endereço de email, idioma.

Notificações de email
Se Notificações de email está habilitado, você vai receber notificações so-
bre qualquer evento que ocorrer sobre os projetos que pertencem a (tı́quetes
adicionados ou editados, novos documentos, ...).
Se não habilitado, você vai somente receber notificações sobre os tı́quetes
que você está envolvido no (autor ou atribuı́do) e sobre eventos que você está
monitorando (ex. tı́quetes, fórum).

Senha
Para mudar sua senha, entre com sua senha antiga e sua nova senha 2 vezes. O
tamanho da senha deve estar entre 4 e 12 caracteres.
Se sua conta usa alguma altenticação externa (LDAP), você não pode mudar
sua senha no Redmine.

3.2.2 Minha Página


Esta página deixa você mostrar várias informações sobre seu projeto.
Para personalizar sua página, clique em Personalizar esta página. Então
você pode escolher que informações quer mostrar e onde mostrá-las.

3.2.3 Senha Perdida


Se você esqueceu sua senha, o procedimento é deixar você escolher uma nova.
Na tela de autenticação, você clica em *Perdi minha senha*. Entre com seu
endereço de email e submeta o formulário. Um email será enviado para você
contendo um link que vai permitir você mudar sua senha.
Note que esta funcionalidade pode ser disabilitada pelo administrador. Tam-
bém, se sua conta usa autenticação externa (LDAP), este procedimento está
indisponı́vel.

3.2.4 Registrar
Para registrar, você pode obter uma conta sem a intervenção do administrador.
Na tela de autenticação, clique em Registrar. Preencha o formulário e
envie-o. Um email será enviado à você. Para ativar sua conta, use o link que
está contido neste email.
Note que está funcionalidade pode ser disabilitada pelo administrador.

37
3.3 Definições do Projeto
3.3.1 Propriedades
Público : se está habilitado, o projeto pode ser visualizado por todos os seus
usuário, incluı́ndo aqueles que não são membro do projeto. se desabilitado,
somente os membros do projeto tem acesso a ele, de acorco com seu papel.
Sub-projeto de : permite você definir um projeto pai. A hierarquia dos pro-
jetos é limitada a 2 nı́veis. Um projeto pai não pode ser um sub-projeto
dele mesmo.
Nome : mostra o nome do projeto (deve ser único).
Descrição : descrição que aparece na visão geral do projeto.
Identificador : usado pela aplicação para várias coisas (ex. nas URLs). Deve
ser único. Para cada projeto criado, o identificador não pode ser modifi-
cado.
Campos personalizados : Selecione um campo personalizado que você quer
usar para os tı́quetes do projeto. Somente o administrador pode definir
um novo campo personalizado.

3.3.2 Módulos
Esta tela permite você escolher os módulos que você quer usar no projeto.
Disabilitando um módulos não exclui ele. Somente previni usuários de
acessá-los. Depois de um módulo disabilitado, você pode habilitá-lo nas con-
figurações do projeto. Você pode por exemplo disabilitar o módulo de ’Mon-
itoramento de tı́quetes’ para um simples projeto. Tı́quetes existentes não são
excluidos, você pode acessá-los novamente habilitando o módulo.

3.3.3 Membros
Está tela deixa você definir membros do projeto e seus papéis. Um usuário
pode ter somente um papel em um projeto (mas diferentes papeis em outros
projetos).

3.3.4 Versões
Versões do projeto permite você monitorar e planejar mudanças. Você pode
atribuir para uma versão e visualizar a lista de tı́quetes atribuı́dos para cada
versão no planejamento.

3.3.5 Categoria de tı́quetes


Categoria de tı́quetes permite você organizar seus tı́quetes. Categorias por ex-
emplo corresponde a diferentes componentes do seu projeto.

38
3.3.6 Wiki
Cada projeto pode ter um dono para cada wiki. Para ativar isso dê um nome
para seu página principal e clique em ’Salvar’.

3.3.7 Repositório
Um repositório (SCM) pode ser associado para cada projeto. Cada repositório
é configurado, você pode navegar e visualizar mudanças (changesets). As mu-
danças também podem aparecer em Visualizar atividades.

3.3.8 Fóruns
Cada projeto pode ter um ou mais fóruns de discussão.

3.4 Repositórios
Redmine nativamente suporta integração com diferentes SCM: Subversion, CVS,
Mercurial, Darcs, Git, and Bazaar.
Note que você precisa instalar o binário apropriado para seu servidor Red-
mine e ter certeza que eles estão disponı́veis no PATH (caminho padrão para os
binários).

SCM Testado com Comentários


Subversion 1.3 & 1.4 1.3 or higher required
CVS 1.12.12 1.12 required, won’t work with CVSNT
Mercurial 0.9.3
Bazaar 1.0.0.candidate.1
Darcs 1.0.7
Git 1.5.4.2

Por exemplo, se você quer acesar o repostitório Subversion no Redmine, você


pode ter que instalar os binários do svn no servidor Redmine.

3.4.1 Anexando um repositório existente para o seu pro-


jeto
Nas configurações do projeto, tenha certeza que o módulo do “Repositório” está
habilitado e vá para aba “Repositório”. Selecione o SCM que corresponde a seu
repositório e entre com o caminho ou URL do seu repositório.

Importante: Quando você navega pela primeira fez no repositório, o Redmine


atualiza as descrições de todos os commits existenes no banco de dados dele.
Isto é feito apenas uma vez por repositório, mas pode demorar (vá descansar
um pouco) se o seu repositório tem centenas de commits
Para evitar isso, você pode fazê-lo off-line. Depois de ter declarado seu
repositório no Redmine, rode o seguinte comando:
ruby script/runner "Repository.fetch_changesets" -e production

39
Todos os commits vão ser obtidos pelo banco de dados Redmine.

Repositório Subversion
Protocolos habituais suportados (Ex. http:, svn:, file:), somente entre com
a URL do seu repositório.
Exemplo:
http://host/path/to/the/repository
Você pode especificar um nome de usuário e senha se o seu repositório requer
autenticação.
Nota: se você quer acessar o repositório usando svn+ssh://, você tem que
configurar svn+ssh para ser não interativo. Isto requer definir um chave públi-
ca/privada para autenticação ssh.

Repositório CVS
Entre:
• A URL do repositório (pode ser um caminho ou uma conexão, ex. :pserver).
• O nome do módulo
Exemplo:
:pserver:login:password@host:/path/to/the/repository

Repositório Git
Redmine solicita um bare e local repositório para permitir navegação. Imagine
que você queira navegar no lista de gerenciamento to-do do projeto Donebox:
a URL clone é git://github.com/ook/donebox.git No servidor onde você
roda o redmine, cria um diretório acessı́vel pelo usuário rodando no seu servidor
Redmine:
$ sudo mkdir -p /var/redmine/git_repositories
$ sudo chown rails:rails /var/redmine/git_repositories
$ cd /var/redmine/git_repositories
Note a segunda linha: mude para a permissão de dono e groupo para do
usuário rails. É claro, você tem que substituir de acordo com as configurações
do seu servidor (pode ser www-data ou para sysadmin ruins: root). Tenha em
mente que este usuário tem que estar apto a rodas comandos git.
Agora é o momento para criar seu bare repositório:
$ pwd
/var/redmine/git_repositories
$ git clone --bare git://github.com/ook/donebox.git
Initialized empty Git repository in /var/redmine/git_repositories/donebox/
remote: Counting objects: 401, done.
remote: Compressing objects: 100% (246/246), done.
remote: Total 401 (delta 134), reused 401 (delta 134)
Receiving objects: 100% (401/401), 179.55 KiB | 185 KiB/s, done.
Resolving deltas: 100% (134/134), done.

40
Pronto! vá para sue projeto redmine na aba de configurações, abaixo do
repositório e escolha git, então coloque o caminho para o diretório .git /var/red-
mine/git repositories/donebox/. Salve. Procure o seu repositório na aba:
você pode navegar agora.
Nota: É claro que repositórios git não atualizam por si mesmos. Você tem
que puxar regularmente por suas próprias mão ou por um processo cron que vai
fazer isso por você.

41
3.5 Visão Geral do Projeto
A visão geral do Projeto vai dar a você um visão do projeto como um todo. Do
lado esquerdo acima na área Issue tracking você vai ter um visão de quantos
Defeitos, Funcionalidade e Correções estão aberta e fechadas. Em Members
você pode ver quem são os membros do projeto em particular que é o admin-
istrador. Em Latest news você pode ver quais são as últimas notı́cias desse
projetos.
TODO: Escreva sobre monitoramente de tı́quetes e configurações...

Figura 3.10: Visão Geral do Projeto

Do lado superior direito você vê RedmineLogin|Sign in e RedmineRegis-


ter|Register. O RedmineLogin|Sign in é usado para autenticar. O RedmineReg-
ister|Register para registrar, que pode ser disabilitado pelo administrador.
TODO: Fazer links para outras áreas... TODO: Screenshot sem plubici-
dade...

42
3.6 Atividade do Projeto
A página de Atividade do Projeto vai mostras o histórico das últimas ativi-
dades em cada projeto.
Isto vai incluir mudanças como:
• Problemas, Funcionalidade, Correções
• Verificações nos repositórios (Changesets)

• Área de notı́cias

Os ı́cones abaixo são mostrados por padrão. Never the less you can activate
list of changes to the wiki or to the Forums area (Messages).
(TODO: Add screenshot)
Na lista de tı́quetes há um espaço reservado para Defeito, Funcionalidade e
Correção?

• Um novo tı́quete foi criado.

• Tı́quete foi resolvido.

• O tı́quete foi fechado.

• Uma nota foi adicionada no tı́quete.

• Isso significa que foi feito um commit no repositório.

• Notı́cias foram adicionadas.

• Uma mensagem no fórum foi mudada ou adicionada.

• Um comentário nas mensagens do fórum foi adicionado.

• Um página wiki foi editada ou criada.

• ??

• Um novo documento foi adicionado ou mudado.

• Um novo projeto foi adicionado.


(TODO: Check attachment, and projects ?)

43
3.7 Monitorando tı́quetes
Tı́quetes é a alma do negócio no Redmine. O tı́quete esta ligado ao projeto,
pode ser atribuı́do a um usuário, podem ser anexado a uma versão, etc.

3.7.1 Adicionando um novo tı́quete


Pessoas podem criar um novo tı́quete quando elas estão em ?? configurado pelo
Administrador do Redmine. (Papel: Tipos de ticket > Novo tipo).
Então criando umnovo tı́quete, um dos mais importantes ı́tens é o ??, que vai
definir a natureza do tı́quete. Por padrão, Redmine vim com 3 tipos diferentes:
problema, funcionalidade, e suporte.

3.7.2 Atualizando um tı́quete existente


(TODO: descrever e enviar um screenshot do painel atualizado)

3.7.3 Editando um tı́quete existente


Para editar um tı́quete existente, você tem que ter a permissão no papel Geren-
ciamento de Tickets > Editar tickets. Este direito dá a você um link mais na
frente do painel ”Atualizar”. Clicando nesse link você pode editar Assunto e a
Descrição do tı́quete.

Figura 3.11: Link mais

3.8 Lista de tickets


3.8.1 Visão geral
A lista de tickets fornece um meio de olhar para os tickets abertos para um
projeto.

3.8.2 Aplicando e salvando filtros


A lista de tickets mostra tickets abertos por padrão. Padrão e ?? podem ser
usados para construir uma requisição customizada. Uma vez que os filtros estão

44
Figura 3.12: Visão geral dos tickets

prontos, clique em para renovar a lista de tickets. Clique em para


limpar os filtros.

Figura 3.13: Filtros da lista de tickets aplicados

Requisições customizadas podem ser salvas clicando em . Um formulário


te permite nomeá-lo e selecionar as colunas que você deseja que sejam mostradas
na lista de tickets para esta requisição (ambos padrão e ?? podem ser mostra-
dos). Marcando o atributo público farão a requisição visı́vel para todos, do
contrário somente você o verá.
Uma vez salvo, a requisição é listada na ??.

3.8.3 Menu de atalhos


Um menu de contextos aparece quando clicado com o botão direito (ALT +
Botão esquerdo para usuários do Opera) em um ticket da lista de tickets. Esse
menu oferece vários atalhos para edição rápida, repriorizar, redesignar, copiar,
mover ou deletar o ticket.
Note que você tem que clicar com o botão direito fora do link do
ticket, do contrário o menu do contexto padrão do navegador é mostrado.

45
Figura 3.14: Nova requisição

Figura 3.15: Barra lateral de requisições customizadas

Figura 3.16: Menu de Atalhos

46
3.8.4 Editando multiplos tickets
Da lista de tickets, você pode editar/mover/deletar multiplos tickets selecio-
nando multiplos tickets e clicando com o botão direito na seleção. O ticket
pode ser selecionado tanto usando as caixas de seleção ou cliclando nas colunas
com as teclas Control ou Shift pressionadas. Você pode também usar o pequeno
marcador no canto superior esquerdo da lista para selecionar/deselecionar todos
os tickets.

Figura 3.17: Múltipla edição

3.8.5 Aba lateral

Figura 3.18: Barra lateral

A aba lateral contextual à direita da lista de tickets fornece links para várias
coisas diferentes:

• um link rápido para a lista de tickets padrão sem qualquer outro filtro
aplicado (apenas tickets abertos), o que é útil quando você está vendo
uma requisição customizada e quer voltar à lista de tickets padrão

47
• um link para ??, que é um relatório de todos os tickets em um nı́vel do
projeto (em contraste com a ?? que fornece uma visão geral no nı́vel da
versão)

• um link para ??, que fornece uma visão geral do nı́vel do projeto de todos
os tickets fechados e procurados, organizados pelas versões do target
• links para vários nı́veis de requisições customizadas:

– requisições globais (cross-project)


∗ requisisções públicas
∗ requisições privadas
– requisições do projeto atual
∗ requisições públicas
∗ requisições privadas

3.9 O Registro de Alterações


3.9.1 Visão Geral
O Redmine fornece um regitro de alterações, que fornece uma visão geral de
nı́vel-projeto de todos os tickets fechados, organizados por versão alvo.

Figura 3.19: Registro de mudanças

Considerando o fato de que isto é uma visão geral do que mudou em uma
versão-alvo especı́fica somente tickets fechados que tem o campo versão-alvo
preenchido são mostrados nessa visão geral.

48
3.9.2 Barra lateral
A barra lateral contextual à direita do registro de alterações fornece diversas
coisas:

• caixas de seleção e um botão de confirmação para incluir/excluir tickets de


tipos de monitoramento especı́ficos no registro de alterações (quais tipos
de monitoramento são mostrados aqui com caixas de seleção dependem da
?? individual)
• links para a versão-alvo configurada do projeto onde cada um liga-se ao
próprio registro de alterações começando com a versão-alvo selecionada

Figura 3.20: Barra direita

49
3.10 Sumário do Ticket
3.10.1 Visão Geral
O sumário do ticket fornece um relatório da quantidade de todos os tickets em
um nı́vel-projeto (em contraste com a visão geral da versão que fornece uma
visão geral de nı́vel-versão). Este relatório é dividido em diferentes blocos onde
cada bloco mostra a quantidade de tickets abertos/fechados/total por:
• Tipo de monitoramento

• Prioridade
• Usuário ao qual o ticket foi designado
• Usuário que abriu o ticket (o autor)

• Versão
• Categoria

Figura 3.21: Sumário do tı́quete

3.10.2 Links “saiba mais”


Cada tipo de monitoramento, prioridade, usuário designado, autor, versão e
categoria ligam-se à ?? que tem o item selecionado como filtro atual. Os números
dos tickets nos relatórios forncevem links “saiba mais” para suas respectivas
vistas na ??.

50
3.10.3 Relatórios detalhados
Cada bloco de relatório pode ser selecionado para obter-se um relatório detal-
hado dele. Isso não mostra somente a quantidade de tickets abertos/fechados/-
total mas fornece também detalhes para todos os outros ?? configurados. A
imagem abaixo mostra o relatório detalhado das versões.

Figura 3.22: Sumário da versão

3.11 Planejamento
3.11.1 Visão geral
Se você selecionar o Planejamento você terá uma visão geral do estado atual do
seu projeto, como se segue:

Figura 3.23: Planejamento

Lá você pode selecionar quais tickets estão abertos e quais estão fechados.
Se você está interessado em uma lista detalhada de quais tickets não estão
resolvidos você pode simplesmente clicar no número à esquerda de aberto, mas
se você quiser saber quais tickets já estão resolvidos simplesmente clique no
número à esquerda de fechado. A barra verde indicará quão longe você está
de completar seu milestone (99%).

51
Se você clicar na versão (0.8 à direita de ) você pode obter uma visão
mais detalhada do estado atual, geral de uma versão especı́fica. Esta é a ??.
Você pode mudar a configuração de um modo em que verá uma área com
todos os tickets relacionados diretamente abaixo da milestone. Esse comporta-
mento pode ser mudado como administrador na área do ??.

3.11.2 Barra lateral


A barra lateral contextual à direita do planejamento fornece diversas coisas:

• uma caixa de seleção para incluir versões-target completas no planeja-


mento
• caixas de seleção e um botão de confirmação para incluir/excluir tickets
de tipos de monitoramento especı́ficos no planejamento (quais tipos de
monitoramento são mostrados aqui com caixas de seleção dependem da
?? individual)
• links para as versões-target configuradas do projeto onde cada um liga-se
ao próprio planejamento começando com o target-version selecionado

52
3.12 Visão geral da versão
A visão geral da versão fornece uma visão detalhada estado atual, geral da
versão especı́fica. Isso inclui:
• uma lista de todos os tickets designados a uma versão especı́fica, in-
cluindo barra de progresso que indica uma porcentagem de abertos/ter-
minados/fechados baseado em %-terminado e nos status dos tickets, visu-
alizados por diferentes cores gradientes
• o conteúdo da página-wiki que foi configurada para ser anexada à versão
• um bloco que mostra o total do monitoramento de tempo de todo o tempo
estimado e gasto do ticket designado para a versão
• um bloco que mostra as estatı́sticas do ticket usando a mesma barra de
progresso de ativos/terminados/fechados agrupados por:
– Designado Aos Usuários
– Autores
– Categorias
– Prioridades
– Tipos de Monitoramento
Ambos os “agrupados por critério” e as próprias estatı́sticas (o número de
tickets) fornecem links “saiba-mais” para a lista de tickets que pré-carrega os
filtros especı́ficos fornecendo, dessa forma, links rápidos para tickets de um autor
especı́fico, categoria, etc.

Figura 3.24: Versão

A visão da versão pode ser acessado de ??, clicando na versão especı́fica.

53
3.13 Notı́cias
Na área de notı́cias você pode publicar novos itens sobre o projeto ou qualquer
assunto desejado.
Você pode dar um tı́tulo aos novos itens, um resumo e uma descrição de-
talhada. O resumo será mostrado na área de Últimas notı́cias da página
?? enquanto que a descrição será mostrada se você clicar no tı́tulo (nesse caso
Release 0.8.0 release candidate) do item das notı́cias.
Se você tem a permissão para criar novos itens então você pode editar uma
entrada existente de notı́cias.

Figura 3.25: Editando Notı́cias

Figura 3.26: Visão Geral das Notı́cias

54
Se você tem permissão para criar novos itens de notı́cias você tem um “sinal
de mais” verde no canto direito superior da tela. Se você clicar nele poderá
adicionar um novo item de notı́cias. Lá você tem que inserir o Tı́tulo, Resumo
e a Descrição do item das notı́cias.

Figura 3.27: Adicionando Notı́cias

3.14 Wiki
3.14.1 Criando uma nova página wiki
Como em qualquer wiki, é só adicionar um link para uma página colocando-o
desta forma:

[[MinhaNovaPáginaWiki]]

Então salve, e clique nesse link: você criou uma nova página wiki com nome
“MinhaNovaPáginaWiki”. Parabéns.

55
3.15 Acesso
A página de Entrar é usada para acessa o projeto para o qual você foi ativado.
O link Perdi minha senha só é mostrada se o administrador o tiver ativado.

Figura 3.28: Acesso

56
3.16 Registrar
A página de Registro é usada para registrar um novo usuário. Um novo usuário
tem de fornecer informações sobre seu Login, Password , Nome, Sobrenome
e Email endereço e qual linguagem o usuário gostaria de usar para a interface
do usuário.
O administrador pode controlar se isso será mostrado.

Figura 3.29: Tela de registro

57
Capı́tulo 4

Guia do Desenvolvedor

4.1 Download
4.1.1 Últimas versões estáveis 0.7.4 e 0.8.0 (2008-12-30)
Lançamentos do Redmine podem ser encontrados em RubyForge. Veja o http:
//www.redmine.org/wiki/redmine/Changelog para detalhes e ?? para instruções
de instalação.

4.1.2 Código fonte atual


Você pode obter o código fonte atula do Redmine do repositório Subversion
hospedado no Rubyforge. Esse é o melhor modo de obter o Redmine se voc
quiser se beneficiar das últimas melhorias. Usando o repositório SVN você
também pode atualizá-lo mais facilmente.
A URL do repositório é: http://redmine.rubyforge.org/svn

Desenvolvimento
Você pode ?? o último código em desenvolvimento direto da fonte com um dos
seguintes comandos:

svn co http://redmine.rubyforge.org/svn/trunk redmine


svn co svn://rubyforge.org/var/svn/redmine/trunk redmine

0.7 & 0.8 Estáveis


Você pode ?? o último código fonte estável com um dos seguintes comandos:

svn co http://redmine.rubyforge.org/svn/branches/0.8-stable redmine-0.8


svn co svn://rubyforge.org/var/svn/redmine/branches/0.8-stable redmine-0.8

Ele criará um diretório de nome redmine-0.8 e você poderá atualizar sua


cópia do Redmine usando svn update nesse diretório.

58
4.1.3 Fontes alternativas
• Redmine Bitnami Stack – um instalador que desenvolve Redmine 0.7.3 e
tudo que é necessário para rodá-lo (Apache, MySQL, Subversion, Ruby,
Rails, etc.). Disponı́vel para Windows, Linux, Mac x86 e Mac PPC.

4.1.4 Corrigindo defeitos


Se você obter esse erro enquanto tentava conferir seu código:
erro "PROPFIND 200 OK"
Por favor contate seu administrador de rede e peça-o para habilitar a extensão
WebDAV em seu proxy.

4.2 Usando Git para contribuir com Redmine


A árvore fonte do Redmine está armazenada no Subversion, e tudo gera feeds
lá dentro de vez em quando. Os que já estão acostumados a usar Git preferem
usá-lo por suas caracterı́sticas de ramificação e junção, e porque você não precisa
ter acesso commit do SVN para realizar um commit.
Cuidado: O repositório git em complete.org não é mantido atualizado, sendo
que esse texto foi pela última vez modificado Segunda, 8 Set 2008. É re-
comendável que você clone “GitHub mirror” http://github.com/edavis10/
redmine/tree/master para o último trabalho em desenvolvimento.
Se você está procurando para instruções do Subversion, elas podem ser en-
contradas na ??.

4.2.1 Inicialização
Se você ainda não tem Git, veja o Guia de 5 minutos do Git nos links abiaxo
para informação sobre os downloads. Você precisará da versão do Git a partir
da 1.5.x. Para começar, execute estes comandos:

git clone git://git.complete.org/branches/redmine-integration


cd redmine-integration
git config --add remote.origin.fetch +refs/remotes/svn/\textbf{:refs/remotes/svn/}
git fetch

4.2.2 Exploração
Você pode ver todos os ramos que o Git obteve para você:

git branch -r | less

Você verá uma saı́da como essa (muitas linhas foram omitidas):

origin/HEAD
origin/fb-bug-259-git
origin/fb-bug-261-issue-redirect
origin/fb-bug-641-context-done
svn/git

59
svn/issue_relations
svn/mailing_lists
svn/tags/0.6.3
svn/tags/0.6.3@1011
svn/time
svn/trunk
svn/wiki

O Git está dando manutenção aos ramos “origin” (não há ramo correspon-
dente do Subversion). Os ramos svn são cópias idênticas do mesmo ramo no
repositório Subversion do Redmine.
Você baseará seu trabalho fora desses ramos.

4.2.3 Iniciando Seu Atributo


Com o git, ramos são baratos e junções são fáceis, então você geralmente
começará um novo ramo para cada atributo no qual você trabalhar. Um único
ramo provavelmente corresponderá a um único ticket no Redmine quando você
enviar o patch.
Você poderá basear seu patch no trunk do svn. Então seu ramo será montado
desta forma:

\$ git branch meu-atributo svn/trunk


Branch meu-atributo set up to track remote branch refs/remotes/svn/trunk.
\$ git checkout meu-atributo

A primeira linha criou um ramo chamado my-feature, que será baseado no


svn/trunk. O segundo comando verifica aquele ramo, que quer dizer que a cópia
na qual você está trabalhando é alterada para o ramo, e qualquer commit feito
será postado naquele ramo.
Note que o ato de commitar não envia patch algum para mais ninguém;
assim como o Git é distribuı́do, os commits são armazenados localmente até
que você esteja pronto para jogá-los no trunk.
Você pode executar git branch para ver em qual ramo você está – ele terá
um asterisco próximo a ele, desta forma:

$ git branch
master
git my-feature

4.2.4 Trabalhando em seu atributo


Agora que você criou seu ramo, é hora de trabalhar.
Aqui estão alguns comandos que você talvez queira usar:

60
tarefa comando
Commitar mudanças consideráveis git commit -a
Adicionar um novo arquivo ao repositório git add filename
Remove um arquivo do repositório e do diretório atual git rm filename
Renomeia um arquivo no repositório e diretório atual git mv oldname newname
Visualiza histórico git log
Pede ajuda git commandname --help

Observe que git command é o mesmo que git-command. Você pode usar
man git-command para ver a página de manual para qualquer comando Git.

4.2.5 Unindo ao trunk


Se você está trabalhando em seu atributo já a algum tempo, pode ser que o
Subversion tenha atualizado. Idealmente você deve comparar seu trabalho com
a última revisão do trunk, para então fazer seu patch funcionar com ele. Para
atualizar seus patches e aplicá-los acima do último trunk, faça o seguinte:

git fetch
git rebase svn/trunk

4.2.6 Enviando seu Patch


Quando tiver acabado de trabalhar em seu patch, tenha certeza de commitá-lo
ao Git. Então você pode gerar diffs.
Você pode gerar um grande diff, que inclua todas as mudanças feitas ao ramo,
até mesmo se elas foram feitas em múltiplos commits. Execute o seguinte:

git diff svn/trunk..HEAD > /tmp/feature.diff

Isso significa “calcule a diferença entre o trunk e o último commit deste ramo,
e armazene-o como diff em /tmp/feature.diff”. Então vá ao redmine.org, crie
um ticket, e adicione /tmp/feature.diff à ele.
Se você desejar enviar um patch em cada commit, execute git format-patch svn/trunk.
Você gerará um arquivo para cada commit, completo com o registro de com-
mit. Então você poderá adicionar cada um desses ao redmine.org. Embora,
normalmente, um grande diff será mais usado.

4.2.7 Links Externos


• Git homepage http://www.git.or.cz/
• 5-Minute Git Guide http://software.complete.org/site/wiki/GitGuide

4.3 Tutorial de Plugin


Nota: Para seguir esse tutorial, você necesita executar o Redmine devel r1786
ou mais recente.

61
4.3.1 Criando um novo Plugin
A criação de um novo plugin pode ser feita usando o gerador de plugin do
Redmine A sintaxe para esse gerador é:

ruby script/generate redmine_plugin <nome_do_plugin>


Abra um prompt de comando e ”cd”para seu diretório do redmine, então
execute o seguinte comando:

% ruby script/generate redmine_plugin Enquetes

A estrutura do plugin é criada em vendor/plugins/redmine_enquetes:


create vendor/plugins/redmine_enquetes/app/controllers
create vendor/plugins/redmine_enquetes/app/helpers
create vendor/plugins/redmine_enquetes/app/models
create vendor/plugins/redmine_enquetes/app/views
create vendor/plugins/redmine_enquetes/db/migrate
create vendor/plugins/redmine_enquetes/lib/tasks
create vendor/plugins/redmine_enquetes/assets/images
create vendor/plugins/redmine_enquetes/assets/javascripts
create vendor/plugins/redmine_enquetes/assets/stylesheets
create vendor/plugins/redmine_enquetes/lang
create vendor/plugins/redmine_enquetes/README
create vendor/plugins/redmine_enquetes/init.rb
create vendor/plugins/redmine_enquetes/lang/en.yml
Edite vendor/plugins/redmine_enquetes/init.rb para ajustar as infor-
mações do plugin (nome, autor, descrição e versão):

<code class="ruby">
require ’redmine’

Redmine::Plugin.register :redmine_enquetes do
name ’Plugin de Enquetes’
author ’John Smith’
description ’Um plugin para gerenciar enquetes’
version ’0.0.1’
end
</code>

Agora reinicie o programa e navegue para http://localhost:3000/admin/info.


Depois de logar, você deverá ver um novo plugin na lista de plugins:

Figura 4.1: Lista de Plugins

62
4.3.2 Gerando um modelo
Vamos criar um modelo simples de Enquete para nosso plugin:
ruby script/generate redmine_modelo_plugin enquetes enquete question:string yes:integer no:integer

Isso cria o modelo de Esquete e o arquivo de migração correspondente.


Note que as migrações com data marcada não são suportadas pela engine
de plugin atual do Redmine (Engines). Se suas migrações estão nomeadas com
data amrcada, renomeie-as usando ”001”, ”002”, etc.
Migre o banco de dados usando o seguinte comando:
rake db:migrate_plugins
Observe que cada plugin tem seu pŕoprio plano de migrações.
Edite app/models/enquete g.rb no seu diretório de plugin para adicionar
o método #vote que será chamado do nosso controlador:
<code class="ruby">
class Enquete < ActiveRecord::Base
def vote(resposta)
increment(resposta == ’yes’ ? :yes : :no)
end
end
</code>

4.3.3 Gerando um controlador


Por enquanto, o plugin não faz nada. Então vamos criar um controlador para
nosso plugin. Podemos usar o gerador de controlador para isso. A sintaxe é:
ruby script/generate redmine_contolador_de_plugin <nome_do_plugin> <nome_do_controlador> [<actions>]

Volte para o prompt de comando e execute:


% ruby script/generate redmine_controlador_de_plugin Enquetes enquete index vote
exists app/controllers/
exists app/helpers/
create app/views/enquetes
create test/functional/
create app/controllers/controlador_enquetes.rb
create test/functional/controlador_enquetes_teste.rb
create app/helpers/ajudante_enquete.rb
create app/views/enquete /index.html.erb
create app/views/enquete /vote.html.erb

Um controlador ControladorDeEnquete com 2 ações (#index e #vote) é


criado.
Edite app/controllers/controlador_enquetes.rb no diretório redmine_enquetes
para implementar essas 2 ações.
class ControladorDeEnquetes < ApplicationController
unloadable

def index
@enquetes = Poll.find(:all)

63
end

def vote
enquete = Enquete.find(params[:id])
enquete.vote(params[:answer])
flash[:notice] = ’Voto salvo.’
redirect_to :action => ’index’
end
end
Então edite app/views/enquetes/index.html.erb que irá mostrar as en-
quetes existentes:
<h2>Enquetes</h2>

<% @enquetes.each do |enquete| %>


<p>
<%= enquete[:question] %>?
<%= link_to ’Yes’, {:action => ’vote’, :id => enquete g[:id], :answer => ’yes’},
:method => :post %> (<%= enquete gc[:yes] %>) /
<%= link_to ’No’, {:action => ’vote’, :id => enquete g[:id], :answer => ’no’},
:method => :post %> (<%= enquete gc[:no] %>)
</p>
<% end %>

Você pode remover vote.html.erb já que nenhuma renderização é realizada


pela ação correspondente.
Agora, reinicie seu programa e navegue para http://localhost:3000/enquete.
Você deverá ver as 2 enquetes e poderá votar nelas:

Figura 4.2: Vefificação

Observe que os resultados da enquete são zerados a cada pedido se você não
executar o programa no modo de produção, já que nosso ”modelo”de enquete é
armazenado numa variável de classe nesse exemplo.

4.3.4 Estendendo menus


Nosso controlador funciona perfeitamente mas os usuários tem de saber a url
para ver a enquete. Usando o plugin API do Redmine, você pode estender os
menus padrão. Então vamos adicionar um novo item ao menu de programas.

Estendendo o menu de programas


Edite init.rb na raiz do seu diretório de plugin para adicionar a linha seguinte
no final do bloco ”plugin registration”:

64
Redmine::Plugin.register :redmine_enquete do
[...]

menu :application_menu, :enquete, { :controller => ’enquetes’, :action => ’index’ },


:caption => ’Enquetes’
end

A sintaxe é:
menu(nome_do_menu, nome_do_item, url, options={})
Existem 4 menus que você pode estender:

• :top_menu - menu superior esquerdo

• :account_menu - menu superior direito com links de entrar e sair


• :application_menu - menu principal mostrado quando o usuário não está
dentro do projeto
• :project_menu - menu principal mostrado quando o usuário está dentro
do projeto

As opções disponı́veis são:

• :param - a chave de parâmetro que é usada para a identificação do projeto


(padrão é :id)

• :if - uma Proc que é chamada antes de renderizar o item, o item pe


mostrado somente se retornar true
• :caption - o texto explicativo do menu pode ser:

– um Sı́mbolo string localizado


– uma String
– uma Proc que pode tomar o projeto como argumento

• :before, :after - especifica onde o item do menu deve ser inserido (ex.
:after => :activity)
• :last - se marcado para true, o item ficará no final do menu (ex. :last => true)

• :html_options - uma lista de opções html que são passadas para link_to
quando renderizando um item do menu

Em nosso exemplo, adicionamos um item ao menu do programa o qual está


vazio por padrão. Reinicie o programa e vá para http://localhost:3000:
Agora você pode acessar a enquete clicando na aba de Enquetes da tela de
boas vindas.

65
Figura 4.3: Menu de aplicação

Estendendo o menu do projeto


Agora, vamos considerar que a enquete é definida no nı́vel do projeto (mesmo
que este não é o caso em nosso exemplo modelo de enquete). Então, ao invés,
poderı́amos adicionar a aba Enquetes ao nosso menu do projeto. Abra init.rb
e substitua a linha que foi adicionada logo antes dessas 2 linhas:
Redmine::Plugin.register :redmine_enquete do
[...]

permission :enquete, {:enquetes => [:index, :vote]}, :public => true


menu :project_menu, :enquete, { :controller => ’enquetes’, :action => ’index’ },
:caption => ’Enquetes’, :after => :activity, :param => :project_id
end

A segunda linha adiciona nossa aba Enquetes ao menu do projeto, logo antes
da aba Atividades. A primeira linha é requerida e declara que nossas 2 ações do
ControladorDeEnquetes são públicas. Vamos voltar depois para explicar isso
com mais detalhes.
Reinicie o programa novamente e vá para um dos seus projetos:

Figura 4.4: Menu do projeto

Se você clicar na aba Enquetes, você deverá notar que o menu do projeto não
está mais sendo mostrado. Para fazer o menu do projeto visı́vel, você temque
inicializar a variável de instância do controlador @project.
Edite seu ControladorDeEnquetes. Para fazê-lo:

def index
@project = Project.find(params[:project_id])
@enquete = Enquete.find(:all) # @project.enquetes
end

A identificação do projeto está disponı́vel no parâmetro :project_id por


causa da opção :param => :project_id na declaração de item do menu acima.
Agora, você deve ver o menu do projeto enquanto estiver vendo a enquete:

66
Figura 4.5: Menu do enquete

4.3.5 Adicionando novas permissões


Por enquanto, qualquer pessoa pode votar na enquete. Vamos fazê-la mais con-
figurável trocando a declaração de permissões. Vamos declarar 2 permissões com
base em projetos, uma para ver a enquete e outra para votar. Essas permissões
não são mais públicas (a opção :public => true foi removida).
Edite init.rb para substituir a declaração de permissões anterior com essas
2 linhas:

permission :view_enquete , :enquete gcs => :index


permission :vote_enquete , :enquete gcs => :vote

Reinicie o programa e acesse http://localhost:3000/roles/report:

Figura 4.6: Relatório de permissões

Você agora é capaz de dar essas permissões para as funções existentes.


Claro, alguns códigos precisam ser adicionados ao ControladorDeEnquetes
para as ações serem, de fato, protegidas de acordo com a permissão do usuário
atual. Para isso, precisamos somente adicionar o filtro :authorize e ter certeza
que a variável de instância @project está devidamente configurada antes de
chamar esse filtro.
É assim que se pareceria a ação #index:
class PollsController < ApplicationController
unloadable

before_filter :find_project, :authorize, :only => :index

[...]

def index
@enquete = Poll.find(:all) # @project.enquete gcs
end

[...]

67
private

def find_project
# a variável @project deve ser configurada antes de chamar o filtro de autorizaç~
ao
@project = Project.find(params[:project_id])
end
end

Retomar o projeto atual antes da ação #vote pode ser feito usando um modo
similar. Depois disso, visualizar e votar nas enquetes somente estará disponı́vel
para usuários admin ou usuários que tem uma função apropriada no projeto.

4.3.6 Criando um módulo de projeto


Por agora, a funcionalidade da enquete é adicionada para todos seus projetos.
Mas você poderá querer habilitar enquetes para somente alguns projetos. Então,
vamos criar um módulo de projeto ’Enquete’. Isso é feito incluindo as declaração
de permissões dentro da chamada do #project_module.
Edite init.rb e mude a declação de permissões:
project_module :enquete do
permission :view_enquetes, :enquetes => :index
permission :vote_enquetes, :enquetes => :vote
end
Reinicie a aplicação e vá para uma das suas configurações do projeto. Clique
na aba Módulos. Você deverá ver o módulo Enquetes no final da lista de módulos
(desabilitada por padrão):

Figura 4.7: Definições dos módulos

Você pode agora habilitar/desabilitar enquetes em nı́vel de projeto.

4.3.7 Melhorando a visualização de plugins


Adicionando folhas de estilo
Vamos começar adicionando uma folha de estilo para nossa visualização do plu-
gin. Crie um arquivo chamado voting.css no diretório assets/stylesheets
do seu plugin

68
a.vote { font-size: 120%; }
a.vote.yes { color: green; }
a.vote.no { color: red; }

Quando iniciar seu programa, as propriedades do plugin são automaticamente


copiadas para public/plugin_assets/redmine_enquete / pela Engine Rails
para fazê-las disponı́veis através do seu servidor web. Então qualquer mudança
nas folhas de estilo ou javascript do plugin requerem um reinı́cio do programa.
Então, adicione as seguintes linhas ao final de app/views/enquetes/index.html.erb
para que sua folha de estilo seja incluı́da no cabeçalho da página pelo Redmine:
<% content_for :header_tags do %>
<%= stylesheet_link_tag ’voting’, :plugin => ’redmine_enquetes’ %>
<% end %>

Observe que a opção :plugin => ’redmine_enquetes’ é necessária quando


chamar o ajudante stylesheet_link_tag.
Javascripts podem ser incluı́dos na visualização de plugins usando o ajudante
javascript_include_tag da mesma forma.

Configurando o tı́tulo da página


Você pode configurar o tı́tulo HTML de dentro da visualização usando o aju-
dante html_title helper. Exemplo:
<% html_title "Polls" -%>

69

Você também pode gostar