Bloquear a edição concorrente
Se duas pessoas tentarem editar a mesma página de wiki ao mesmo tempo, podem ocorrer alguns conflitos. Sem um sistema de aviso, um dos editores conseguir'guardar a página, deixando uma mensagem de aviso de conflito ao outro editor. Uma forma simples de contornar isto é exibir avisos aos editores que tentam editar páginas wiki que já estão a ser editadas, ou seja, o wiki regista as páginas em edição.
Isto pode ser feito no Moin utilizando o sistema editlock. Existem três níveis de bloqueio: warn (avisar) , lock (bloquear) e None (Nenhum) (desligado).
Se configurar o Moin para warn, quando alguém tentar editar uma página em edição, é-lhes apresentada uma mensagem de aviso pedindo-lhes para esperar que o editor actual termine a edição.
O Moin pode ser igualmente configurado para lock uma página enquanto estiver a ser editada. Aqui, se alguém tentar editar uma página em edição, receberá uma mensagem que lhe comunica que a página está bloqueada e que não será possível editá-la até o editor terminar a edição.
Uma complicação desta funcionalidade é a possibilidade de uma sessão de edição ter começado, mas não ter terminado. Por exemplo:
- Alguém prime o botão de edição e depois clica numa ligação para sair da página sem cancelar a edição.
- A janela do navegador é fechada sem cancelar a edição.
- O botão de retroceder é utilizado.
- Alguém começa a edição de uma página, esquece-se e deixa-a aberta durante toda a noite.
Isto iria resultar numa página com avisos permanentes ou a ser bloqueada permanentemente. Assim, ambos os níveis warn e lock têm uma funcionalidade de timeout (expira). Depois de um determinado número de minutos, a funcionalidade expira. Tenha em consideração que o cronómetro recomeça quando clicar em Pré-visualizar. Se estiver a editar uma página activamente e clicar em Pré-visualizar, o moin assume que ainda está ocupado e o cronómetro recomeça de novo. Se deixar a página, ou a abandonar por mais tempo do que o permitido pelo cronómetro, o bloqueio de edição expira e as outras pessoas são livres de editar a página.
Configuração
A variável de configuração `edit_locking` controla o comportamento dos sistema de bloqueio. Pode ter os seguintes valores:
- `None`, ou seja, não existe bloqueio de edição. A funcionalidade é desligada e ninguém é avisado ou impedido de editar uma página simultaneamente.
O "`warn <timeout>`" diz ao Moin para avisar os que editam uma página concorrencialmente, com um tempo de expirar específico, por exemplo "`warn 10`" avisará 10 minutos depois do início da edição.
O "`lock <timeout>`" diz ao Moin para bloquear uma página depois do início da edição, durante uma quantidade de tempo definida, por exemplo, "`lock 5`" bloqueia uma página durante 5 minutos.
Cancelar uma edição
Pelos motivos apresentados em cima, na descrição do tempo de expirar, deve utilizar sempre o botão Cancelar para cancelar uma edição se tiver activado o bloqueio de edição!
Exemplo
Interacção de exemplo entre JohnMiller e JaneDoe...
- sem bloqueio (None)
JohnMiller começa a editar uma página e JaneDoe pensa editar a mesma página. Ela não faz ideia que outra pessoa está a editar a página, e continuam ambos a editá-la e primem Guardar. Não interessa quem começou primeiro ou quem fez mais edições, quem premir o botão Guardar Alterações primeiro terá as suas alterações guardadas e o infortunado segundo editor terá de tentar fundir as suas alterações ou irá perdê-las.
- avisos de edição (warn)
JohnMiller começa a editar uma página e JaneDoe pensa editar a mesma página. Ao clicar em editar, ela verá uma mensagem avisando-a que alguém está a editar essa página. Se ela for educada, ela deixará a página, mas ela poderá ainda guardar antes de John e ele poderá perder as suas alterações.
- bloqueio de edição (lock)
JohnMiller começa a editar uma página e JaneDoe pensa editar a mesma página. Ao clicar em editar, ela verá uma mensagem avisando-a que alguém está a editar essa página e a página é bloqueada. Ela terá de esperar que a página fique disponível.