diff --git a/config/alfresco/messages/bpm-messages_fr.properties b/config/alfresco/messages/bpm-messages_fr.properties
index 0cccbc10f1..884788a68b 100755
--- a/config/alfresco/messages/bpm-messages_fr.properties
+++ b/config/alfresco/messages/bpm-messages_fr.properties
@@ -86,6 +86,6 @@ listconstraint.bpm_allowedPriority.2=Moyenne
listconstraint.bpm_allowedPriority.3=Basse
listconstraint.bpm_allowedStatus.Not\ Yet\ Started=Pas encore d\u00e9marr\u00e9
listconstraint.bpm_allowedStatus.In\ Progress=En cours
-listconstraint.bpm_allowedStatus.On\ Hold= Suspendu
+listconstraint.bpm_allowedStatus.On\ Hold=Suspendu
listconstraint.bpm_allowedStatus.Cancelled=Annul\u00e9
listconstraint.bpm_allowedStatus.Completed=Termin\u00e9
diff --git a/config/alfresco/messages/bpm-messages_it.properties b/config/alfresco/messages/bpm-messages_it.properties
index e6e0486d95..28e08b123c 100755
--- a/config/alfresco/messages/bpm-messages_it.properties
+++ b/config/alfresco/messages/bpm-messages_it.properties
@@ -86,6 +86,6 @@ listconstraint.bpm_allowedPriority.2=Media
listconstraint.bpm_allowedPriority.3=Bassa
listconstraint.bpm_allowedStatus.Not\ Yet\ Started=Non ancora avviato
listconstraint.bpm_allowedStatus.In\ Progress=In corso
-listconstraint.bpm_allowedStatus.On\ Hold= In attesa
+listconstraint.bpm_allowedStatus.On\ Hold=In attesa
listconstraint.bpm_allowedStatus.Cancelled=Annullato
listconstraint.bpm_allowedStatus.Completed=Completato
diff --git a/config/alfresco/messages/bpm-messages_ja.properties b/config/alfresco/messages/bpm-messages_ja.properties
index 24d8fc2bcf..f1204af436 100755
--- a/config/alfresco/messages/bpm-messages_ja.properties
+++ b/config/alfresco/messages/bpm-messages_ja.properties
@@ -86,6 +86,6 @@ listconstraint.bpm_allowedPriority.2=\u4e2d
listconstraint.bpm_allowedPriority.3=\u4f4e
listconstraint.bpm_allowedStatus.Not\ Yet\ Started=\u958b\u59cb\u524d
listconstraint.bpm_allowedStatus.In\ Progress=\u9032\u884c\u4e2d
-listconstraint.bpm_allowedStatus.On\ Hold= \u4fdd\u7559\u4e2d
+listconstraint.bpm_allowedStatus.On\ Hold=\u4fdd\u7559\u4e2d
listconstraint.bpm_allowedStatus.Cancelled=\u30ad\u30e3\u30f3\u30bb\u30eb\u6e08\u307f
listconstraint.bpm_allowedStatus.Completed=\u5b8c\u4e86\u6e08\u307f
diff --git a/config/alfresco/messages/bpm-messages_nb.properties b/config/alfresco/messages/bpm-messages_nb.properties
index c3ffec4ea7..d6da74a7eb 100755
--- a/config/alfresco/messages/bpm-messages_nb.properties
+++ b/config/alfresco/messages/bpm-messages_nb.properties
@@ -86,6 +86,6 @@ listconstraint.bpm_allowedPriority.2=Middels
listconstraint.bpm_allowedPriority.3=Lav
listconstraint.bpm_allowedStatus.Not\ Yet\ Started=Enn\u00e5 ikke startet
listconstraint.bpm_allowedStatus.In\ Progress=P\u00e5g\u00e5r
-listconstraint.bpm_allowedStatus.On\ Hold= P\u00e5 vent
+listconstraint.bpm_allowedStatus.On\ Hold=P\u00e5 vent
listconstraint.bpm_allowedStatus.Cancelled=Avbrutt
listconstraint.bpm_allowedStatus.Completed=Fullf\u00f8rt
diff --git a/config/alfresco/messages/bpm-messages_pt_BR.properties b/config/alfresco/messages/bpm-messages_pt_BR.properties
index e37c25a908..fbca26e6c2 100644
--- a/config/alfresco/messages/bpm-messages_pt_BR.properties
+++ b/config/alfresco/messages/bpm-messages_pt_BR.properties
@@ -86,6 +86,6 @@ listconstraint.bpm_allowedPriority.2=M\u00e9dio
listconstraint.bpm_allowedPriority.3=Baixo
listconstraint.bpm_allowedStatus.Not\ Yet\ Started=Ainda n\u00e3o come\u00e7ou
listconstraint.bpm_allowedStatus.In\ Progress=Em andamento
-listconstraint.bpm_allowedStatus.On\ Hold= Em espera
+listconstraint.bpm_allowedStatus.On\ Hold=Em espera
listconstraint.bpm_allowedStatus.Cancelled=Cancelado
listconstraint.bpm_allowedStatus.Completed=Conclu\u00eddo
diff --git a/config/alfresco/messages/bpm-messages_ru.properties b/config/alfresco/messages/bpm-messages_ru.properties
index c47fc65213..5b2ce84140 100755
--- a/config/alfresco/messages/bpm-messages_ru.properties
+++ b/config/alfresco/messages/bpm-messages_ru.properties
@@ -86,6 +86,6 @@ listconstraint.bpm_allowedPriority.2=\u0421\u0440\u0435\u0434\u043d\u0438\u0439
listconstraint.bpm_allowedPriority.3=\u041d\u0438\u0437\u043a\u0438\u0439
listconstraint.bpm_allowedStatus.Not\ Yet\ Started=\u0415\u0449\u0435 \u043d\u0435 \u043d\u0430\u0447\u0430\u0442\u043e
listconstraint.bpm_allowedStatus.In\ Progress=\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435
-listconstraint.bpm_allowedStatus.On\ Hold= \u041f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e
+listconstraint.bpm_allowedStatus.On\ Hold=\u041f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e
listconstraint.bpm_allowedStatus.Cancelled=\u041e\u0442\u043c\u0435\u043d\u0435\u043d\u043e
listconstraint.bpm_allowedStatus.Completed=\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e
diff --git a/config/alfresco/messages/bpm-messages_zh_CN.properties b/config/alfresco/messages/bpm-messages_zh_CN.properties
index 442dc19ff1..32b8fdfb33 100755
--- a/config/alfresco/messages/bpm-messages_zh_CN.properties
+++ b/config/alfresco/messages/bpm-messages_zh_CN.properties
@@ -86,6 +86,6 @@ listconstraint.bpm_allowedPriority.2=\u4e2d
listconstraint.bpm_allowedPriority.3=\u4f4e
listconstraint.bpm_allowedStatus.Not\ Yet\ Started=\u5c1a\u672a\u5f00\u59cb
listconstraint.bpm_allowedStatus.In\ Progress=\u6b63\u5728\u8fdb\u884c
-listconstraint.bpm_allowedStatus.On\ Hold= \u5df2\u6682\u505c
+listconstraint.bpm_allowedStatus.On\ Hold=\u5df2\u6682\u505c
listconstraint.bpm_allowedStatus.Cancelled=\u5df2\u53d6\u6d88
listconstraint.bpm_allowedStatus.Completed=\u5df2\u5b8c\u6210
diff --git a/config/alfresco/messages/quickshare-service_de.properties b/config/alfresco/messages/quickshare-service_de.properties
index 6bc673b7ef..a668f36507 100644
--- a/config/alfresco/messages/quickshare-service_de.properties
+++ b/config/alfresco/messages/quickshare-service_de.properties
@@ -1,2 +1,6 @@
# QuickShare Service
quickshare.notifier.email.subject={0} {1} hat {2} f\u00fcr Sie freigegeben
+
+# email template
+template.quickshare-email.ftl.title={0} f\u00fcr Sie freigegeben
+template.quickshare-email.ftl.detail={0} {1} hat {3} f\u00fcr Sie freigegeben.
diff --git a/config/alfresco/messages/quickshare-service_es.properties b/config/alfresco/messages/quickshare-service_es.properties
index 69938a534e..1edb217ea1 100644
--- a/config/alfresco/messages/quickshare-service_es.properties
+++ b/config/alfresco/messages/quickshare-service_es.properties
@@ -1,2 +1,6 @@
# QuickShare Service
quickshare.notifier.email.subject={0} {1} ha compartido {2} con usted
+
+# email template
+template.quickshare-email.ftl.title={0} compartido con usted
+template.quickshare-email.ftl.detail={0} {1} ha compartido {3} con usted.
diff --git a/config/alfresco/messages/quickshare-service_fr.properties b/config/alfresco/messages/quickshare-service_fr.properties
index 7920eab999..b64b5d19b3 100644
--- a/config/alfresco/messages/quickshare-service_fr.properties
+++ b/config/alfresco/messages/quickshare-service_fr.properties
@@ -1,2 +1,6 @@
# QuickShare Service
quickshare.notifier.email.subject={0} {1} a partag\u00e9 {2} avec vous
+
+# email template
+template.quickshare-email.ftl.title={0} partag\u00e9 avec vous
+template.quickshare-email.ftl.detail={0} {1} a partag\u00e9 {3} avec vous.
diff --git a/config/alfresco/messages/quickshare-service_it.properties b/config/alfresco/messages/quickshare-service_it.properties
index e91ff7f55c..3d0157e043 100644
--- a/config/alfresco/messages/quickshare-service_it.properties
+++ b/config/alfresco/messages/quickshare-service_it.properties
@@ -1,2 +1,6 @@
# QuickShare Service
quickshare.notifier.email.subject={0} {1} ha condiviso {2} con te
+
+# email template
+template.quickshare-email.ftl.title={0} condiviso con te
+template.quickshare-email.ftl.detail={0} {1} ha condiviso {3} con te.
diff --git a/config/alfresco/messages/quickshare-service_ja.properties b/config/alfresco/messages/quickshare-service_ja.properties
index c600e6c466..af6bfd51ea 100644
--- a/config/alfresco/messages/quickshare-service_ja.properties
+++ b/config/alfresco/messages/quickshare-service_ja.properties
@@ -1,2 +1,6 @@
# QuickShare Service
quickshare.notifier.email.subject={0} {1} \u304c\u3042\u306a\u305f\u3068 {2} \u3092\u5171\u6709\u3057\u307e\u3057\u305f
+
+# email template
+template.quickshare-email.ftl.title={0} \u304c\u3042\u306a\u305f\u3068\u5171\u6709\u3055\u308c\u307e\u3057\u305f
+template.quickshare-email.ftl.detail={1} {0} \u304c {3} \u3092\u3042\u306a\u305f\u3068\u5171\u6709\u3057\u307e\u3057\u305f\u3002
diff --git a/config/alfresco/messages/quickshare-service_nb.properties b/config/alfresco/messages/quickshare-service_nb.properties
index 25555bb097..4b1ebabafa 100644
--- a/config/alfresco/messages/quickshare-service_nb.properties
+++ b/config/alfresco/messages/quickshare-service_nb.properties
@@ -1,2 +1,6 @@
# QuickShare Service
quickshare.notifier.email.subject={0} {1} delte {2} med deg
+
+# email template
+template.quickshare-email.ftl.title={0} delt med deg
+template.quickshare-email.ftl.detail={0} {1} har delt {3} med deg.
diff --git a/config/alfresco/messages/quickshare-service_nl.properties b/config/alfresco/messages/quickshare-service_nl.properties
index 1523c53bcc..98e0ba388b 100644
--- a/config/alfresco/messages/quickshare-service_nl.properties
+++ b/config/alfresco/messages/quickshare-service_nl.properties
@@ -1,2 +1,6 @@
# QuickShare Service
quickshare.notifier.email.subject={0} {1} heeft {2} met u gedeeld
+
+# email template
+template.quickshare-email.ftl.title={0} is met u gedeeld
+template.quickshare-email.ftl.detail={0} {1} heeft {3} met u gedeeld.
diff --git a/config/alfresco/messages/quickshare-service_pt_BR.properties b/config/alfresco/messages/quickshare-service_pt_BR.properties
index 654a23dafc..1349fc3257 100644
--- a/config/alfresco/messages/quickshare-service_pt_BR.properties
+++ b/config/alfresco/messages/quickshare-service_pt_BR.properties
@@ -1,2 +1,6 @@
# QuickShare Service
quickshare.notifier.email.subject={0} {1} compartilhou {2} com voc\u00ea
+
+# email template
+template.quickshare-email.ftl.title={0} compartilhado com voc\u00ea
+template.quickshare-email.ftl.detail={0} {1} compartilhou {3} com voc\u00ea.
diff --git a/config/alfresco/messages/quickshare-service_ru.properties b/config/alfresco/messages/quickshare-service_ru.properties
index 6a235ee7f5..f486148be5 100644
--- a/config/alfresco/messages/quickshare-service_ru.properties
+++ b/config/alfresco/messages/quickshare-service_ru.properties
@@ -1,2 +1,6 @@
# QuickShare Service
quickshare.notifier.email.subject={0} {1} \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f {2} \u0441 \u0432\u0430\u043c\u0438
+
+# email template
+template.quickshare-email.ftl.title={0} \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441 \u0432\u0430\u043c\u0438
+template.quickshare-email.ftl.detail={0} {1} \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f {3} \u0441 \u0432\u0430\u043c\u0438.
diff --git a/config/alfresco/messages/quickshare-service_zh_CN.properties b/config/alfresco/messages/quickshare-service_zh_CN.properties
index a312d7ff39..f5e2411885 100644
--- a/config/alfresco/messages/quickshare-service_zh_CN.properties
+++ b/config/alfresco/messages/quickshare-service_zh_CN.properties
@@ -1,2 +1,6 @@
# QuickShare Service
quickshare.notifier.email.subject={0} {1} \u4e0e\u60a8\u5171\u4eab {2}
+
+# email template
+template.quickshare-email.ftl.title=\u4e0e\u60a8\u5171\u4eab\u7684 {0}
+template.quickshare-email.ftl.detail={0} {1} \u5df2\u4e0e\u60a8\u5171\u4eab {3}\u3002
diff --git a/config/alfresco/messages/reset-password-messages_de.properties b/config/alfresco/messages/reset-password-messages_de.properties
new file mode 100644
index 0000000000..faafe31753
--- /dev/null
+++ b/config/alfresco/messages/reset-password-messages_de.properties
@@ -0,0 +1,15 @@
+# Email subjects.
+reset-password-request.email.subject=Passwort zur\u00fccksetzen
+reset-password-confirmation.email.subject=Passwort erfolgreich zur\u00fcckgesetzt
+
+# Request reset password email
+templates.reset-password-email.ftl.title=Passwort zur\u00fccksetzen
+templates.reset-password-email.ftl.detail=Sie haben k\u00fcrzlich eine \u00c4nderung des Passworts f\u00fcr Ihr Benutzerkonto angefordert.
+templates.reset-password-email.ftl.ignore_message=Wenn Sie ein Zur\u00fccksetzen Ihres Passworts nicht angefordert haben oder es nicht \u00e4ndern m\u00f6chten, dann k\u00f6nnen Sie diese Nachricht ignorieren und l\u00f6schen. Ihr Benutzerkonto bleibt dabei sicher.
+templates.reset-password-email.ftl.having_trouble_clicking_button=Klicken Sie entweder auf 'Passwort zur\u00fccksetzen' oder kopieren Sie die folgende Adresse in Ihren Webbrowser:
+templates.reset-password-email.ftl.reset_password_button=Passwort zur\u00fccksetzen
+
+# Reset password confirmation email
+templates.reset-password-confirm-email.ftl.title=Passwort erfolgreich zur\u00fcckgesetzt
+templates.reset-password-confirm-email.ftl.detail=Das Passwort f\u00fcr Ihr Alfresco-Konto wurde k\u00fcrzlich ge\u00e4ndert.
+templates.reset-password-confirm-email.ftl.note=Wenn Sie ein Zur\u00fccksetzen Ihres Passworts nicht angefordert haben, wenden Sie sich bitte unverz\u00fcglich an Ihr IT-Team.
diff --git a/config/alfresco/messages/reset-password-messages_es.properties b/config/alfresco/messages/reset-password-messages_es.properties
new file mode 100644
index 0000000000..5cd90560b0
--- /dev/null
+++ b/config/alfresco/messages/reset-password-messages_es.properties
@@ -0,0 +1,15 @@
+# Email subjects.
+reset-password-request.email.subject=Restablezca su contrase\u00f1a
+reset-password-confirmation.email.subject=Restablecimiento de contrase\u00f1a correcto
+
+# Request reset password email
+templates.reset-password-email.ftl.title=Restablezca su contrase\u00f1a
+templates.reset-password-email.ftl.detail=Recientemente solicit\u00f3 cambiar la contrase\u00f1a de su cuenta.
+templates.reset-password-email.ftl.ignore_message=Si no solicit\u00f3 un restablecimiento de contrase\u00f1a o no desea cambiarla, puede ignorar y eliminar este mensaje. Su cuenta continuar\u00e1 siendo segura.
+templates.reset-password-email.ftl.having_trouble_clicking_button=Haga clic en el bot\u00f3n Restablecer contrase\u00f1a o copie y pegue la direcci\u00f3n siguiente en su navegador web:
+templates.reset-password-email.ftl.reset_password_button=Restablecer contrase\u00f1a
+
+# Reset password confirmation email
+templates.reset-password-confirm-email.ftl.title=Restablecimiento de contrase\u00f1a correcto
+templates.reset-password-confirm-email.ftl.detail=La contrase\u00f1a de su cuenta Alfresco se cambi\u00f3 recientemente.
+templates.reset-password-confirm-email.ftl.note=Si no solicit\u00f3 un restablecimiento de contrase\u00f1a, p\u00f3ngase en contacto con el equipo de TI inmediatamente.
diff --git a/config/alfresco/messages/reset-password-messages_fr.properties b/config/alfresco/messages/reset-password-messages_fr.properties
new file mode 100644
index 0000000000..c9bc81f4e4
--- /dev/null
+++ b/config/alfresco/messages/reset-password-messages_fr.properties
@@ -0,0 +1,15 @@
+# Email subjects.
+reset-password-request.email.subject=R\u00e9initialiser votre mot de passe
+reset-password-confirmation.email.subject=R\u00e9initialisation du mot de passe r\u00e9ussie
+
+# Request reset password email
+templates.reset-password-email.ftl.title=R\u00e9initialiser votre mot de passe
+templates.reset-password-email.ftl.detail=Nous avons re\u00e7u une demande de modification du mot de passe de votre compte.
+templates.reset-password-email.ftl.ignore_message=Si vous n'avez pas fait de demande de r\u00e9initialisation du mot de passe ou si vous ne souhaitez pas le modifier, ignorez et supprimez ce message. Votre compte restera prot\u00e9g\u00e9.
+templates.reset-password-email.ftl.having_trouble_clicking_button=Cliquez sur le bouton R\u00e9initialiser le mot de passe ou copiez-collez l'adresse suivante dans votre navigateur Web\u00a0:
+templates.reset-password-email.ftl.reset_password_button=R\u00e9initialiser le mot de passe
+
+# Reset password confirmation email
+templates.reset-password-confirm-email.ftl.title=R\u00e9initialisation du mot de passe r\u00e9ussie
+templates.reset-password-confirm-email.ftl.detail=Le mot de passe de votre compte Alfresco a \u00e9t\u00e9 modifi\u00e9.
+templates.reset-password-confirm-email.ftl.note=Si vous n'avez pas demand\u00e9 la r\u00e9initialisation de votre mot de passe, contactez au plus vite votre service informatique.
diff --git a/config/alfresco/messages/reset-password-messages_it.properties b/config/alfresco/messages/reset-password-messages_it.properties
new file mode 100644
index 0000000000..e96b7af8e3
--- /dev/null
+++ b/config/alfresco/messages/reset-password-messages_it.properties
@@ -0,0 +1,15 @@
+# Email subjects.
+reset-password-request.email.subject=Ripristina password
+reset-password-confirmation.email.subject=Ripristino password eseguito correttamente
+
+# Request reset password email
+templates.reset-password-email.ftl.title=Ripristina password
+templates.reset-password-email.ftl.detail=Hai recentemente richiesto di modificare la password del tuo account.
+templates.reset-password-email.ftl.ignore_message=Se non ha richiesto un ripristino della password o non desideri modificarla, puoi ignorare ed eliminare questo messaggio e il tuo account rimarr\u00e0 protetto.
+templates.reset-password-email.ftl.having_trouble_clicking_button=Fai clic sul pulsante Ripristina password oppure copia e incolla l'indirizzo seguente nel tuo browser Web:
+templates.reset-password-email.ftl.reset_password_button=Ripristina password
+
+# Reset password confirmation email
+templates.reset-password-confirm-email.ftl.title=Ripristino password eseguito correttamente
+templates.reset-password-confirm-email.ftl.detail=La password del tuo account Alfresco \u00e8 stata recentemente modificata.
+templates.reset-password-confirm-email.ftl.note=Se non ha richiesto un ripristino della password, contatta immediatamente il team IT.
diff --git a/config/alfresco/messages/reset-password-messages_ja.properties b/config/alfresco/messages/reset-password-messages_ja.properties
new file mode 100644
index 0000000000..ae588d0d97
--- /dev/null
+++ b/config/alfresco/messages/reset-password-messages_ja.properties
@@ -0,0 +1,15 @@
+# Email subjects.
+reset-password-request.email.subject=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30ea\u30bb\u30c3\u30c8
+reset-password-confirmation.email.subject=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u30ea\u30bb\u30c3\u30c8\u3055\u308c\u307e\u3057\u305f
+
+# Request reset password email
+templates.reset-password-email.ftl.title=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30ea\u30bb\u30c3\u30c8
+templates.reset-password-email.ftl.detail=\u304a\u4f7f\u3044\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5909\u66f4\u7533\u8acb\u3092\u53d7\u3051\u4ed8\u3051\u307e\u3057\u305f\u3002
+templates.reset-password-email.ftl.ignore_message=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5909\u66f4\u3092\u7533\u8acb\u3057\u305f\u899a\u3048\u304c\u306a\u3044\u3001\u307e\u305f\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u305f\u304f\u306a\u3044\u5834\u5408\u306f\u3001\u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u7121\u8996\u3057\u3001\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u5909\u66f4\u3055\u308c\u307e\u305b\u3093\u3002
+templates.reset-password-email.ftl.having_trouble_clicking_button=[\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30ea\u30bb\u30c3\u30c8] \u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u304b\u3001\u6b21\u306e\u30a2\u30c9\u30ec\u30b9\u3092\u30b3\u30d4\u30fc\u3057\u3066\u304a\u4f7f\u3044\u306eWeb\u30d6\u30e9\u30a6\u30b6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002
+templates.reset-password-email.ftl.reset_password_button=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30ea\u30bb\u30c3\u30c8
+
+# Reset password confirmation email
+templates.reset-password-confirm-email.ftl.title=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u30ea\u30bb\u30c3\u30c8\u3055\u308c\u307e\u3057\u305f
+templates.reset-password-confirm-email.ftl.detail=\u304a\u4f7f\u3044\u306e Alfresco \u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6700\u8fd1\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002
+templates.reset-password-confirm-email.ftl.note=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30ea\u30bb\u30c3\u30c8\u3092\u7533\u8acb\u3057\u305f\u899a\u3048\u304c\u306a\u3044\u5834\u5408\u306f\u3001\u81f3\u6025 IT \u62c5\u5f53\u8005\u306b\u9023\u7d61\u3057\u3066\u304f\u3060\u3055\u3044\u3002
diff --git a/config/alfresco/messages/reset-password-messages_nb.properties b/config/alfresco/messages/reset-password-messages_nb.properties
new file mode 100644
index 0000000000..7c4e4a1319
--- /dev/null
+++ b/config/alfresco/messages/reset-password-messages_nb.properties
@@ -0,0 +1,15 @@
+# Email subjects.
+reset-password-request.email.subject=Tilbakestill ditt passord
+reset-password-confirmation.email.subject=Passordet er n\u00e5 tilbakestilt
+
+# Request reset password email
+templates.reset-password-email.ftl.title=Tilbakestill ditt passord
+templates.reset-password-email.ftl.detail=Du har nylig bedt om \u00e5 f\u00e5 passordet til din konto endret.
+templates.reset-password-email.ftl.ignore_message=Hvis du ikke ba om \u00e5 f\u00e5 passordet endret og du ikke vil endre det, kan du se bort fra denne meldingen, og din konto vil fortsatt v\u00e6re trygg.
+templates.reset-password-email.ftl.having_trouble_clicking_button=Enten klikk p\u00e5 knappen Tilbakestill passord, eller kopier og lim inn f\u00f8lgende adresse i nettleseren din:
+templates.reset-password-email.ftl.reset_password_button=Tilbakestill passord
+
+# Reset password confirmation email
+templates.reset-password-confirm-email.ftl.title=Passordet er n\u00e5 tilbakestilt
+templates.reset-password-confirm-email.ftl.detail=Passordet til din Alfresco-konto ble nylig endret.
+templates.reset-password-confirm-email.ftl.note=Hvis du ikke ba om \u00e5 f\u00e5r et passord tilbakestilt. skal du kontakte ditt IT-team omg\u00e5ende.
diff --git a/config/alfresco/messages/reset-password-messages_nl.properties b/config/alfresco/messages/reset-password-messages_nl.properties
new file mode 100644
index 0000000000..de718588ac
--- /dev/null
+++ b/config/alfresco/messages/reset-password-messages_nl.properties
@@ -0,0 +1,15 @@
+# Email subjects.
+reset-password-request.email.subject=Uw wachtwoord opnieuw instellen
+reset-password-confirmation.email.subject=Wachtwoord is opnieuw ingesteld
+
+# Request reset password email
+templates.reset-password-email.ftl.title=Uw wachtwoord opnieuw instellen
+templates.reset-password-email.ftl.detail=U hebt onlangs een aanvraag ingediend voor het wijzigen van het wachtwoord voor uw account.
+templates.reset-password-email.ftl.ignore_message=Als u geen aanvraag voor het opnieuw instellen van uw wachtwoord hebt ingediend of u wilt uw wachtwoord niet wijzigen, kunt u dit bericht negeren en verwijderen. Uw account blijft veilig.
+templates.reset-password-email.ftl.having_trouble_clicking_button=Klik op de knop Wachtwoord opnieuw instellen of kopieer het volgende adres en plak het in uw webbrowser:
+templates.reset-password-email.ftl.reset_password_button=Wachtwoord opnieuw instellen
+
+# Reset password confirmation email
+templates.reset-password-confirm-email.ftl.title=Wachtwoord is opnieuw ingesteld
+templates.reset-password-confirm-email.ftl.detail=Het wachtwoord voor uw Alfresco-account is onlangs gewijzigd.
+templates.reset-password-confirm-email.ftl.note=Neem direct contact op met uw IT-team als u geen wijziging van uw wachtwoord hebt aangevraagd.
diff --git a/config/alfresco/messages/reset-password-messages_pt_BR.properties b/config/alfresco/messages/reset-password-messages_pt_BR.properties
new file mode 100644
index 0000000000..3dab47f5e2
--- /dev/null
+++ b/config/alfresco/messages/reset-password-messages_pt_BR.properties
@@ -0,0 +1,15 @@
+# Email subjects.
+reset-password-request.email.subject=Redefinir senha
+reset-password-confirmation.email.subject=Senha redefinida com sucesso
+
+# Request reset password email
+templates.reset-password-email.ftl.title=Redefinir senha
+templates.reset-password-email.ftl.detail=Recentemente voc\u00ea solicitou a altera\u00e7\u00e3o da senha da sua conta.
+templates.reset-password-email.ftl.ignore_message=Se voc\u00ea n\u00e3o solicitou a redefini\u00e7\u00e3o da senha ou se n\u00e3o deseja alter\u00e1-la, ignore e exclua esta mensagem. Sua conta continuar\u00e1 segura.
+templates.reset-password-email.ftl.having_trouble_clicking_button=Clique no bot\u00e3o Redefinir senha ou copie e cole o endere\u00e7o a seguir no navegador da web:
+templates.reset-password-email.ftl.reset_password_button=Redefinir senha
+
+# Reset password confirmation email
+templates.reset-password-confirm-email.ftl.title=Senha redefinida com sucesso
+templates.reset-password-confirm-email.ftl.detail=A senha da sua conta Alfresco foi alterada recentemente.
+templates.reset-password-confirm-email.ftl.note=Se voc\u00ea n\u00e3o solicitou a redefini\u00e7\u00e3o da senha, entre em contato com a Equipe de TI imediatamente.
diff --git a/config/alfresco/messages/reset-password-messages_ru.properties b/config/alfresco/messages/reset-password-messages_ru.properties
new file mode 100644
index 0000000000..1acae9f2e3
--- /dev/null
+++ b/config/alfresco/messages/reset-password-messages_ru.properties
@@ -0,0 +1,15 @@
+# Email subjects.
+reset-password-request.email.subject=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c
+reset-password-confirmation.email.subject=\u041f\u0430\u0440\u043e\u043b\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0431\u0440\u043e\u0448\u0435\u043d
+
+# Request reset password email
+templates.reset-password-email.ftl.title=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c
+templates.reset-password-email.ftl.detail=\u0412\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.
+templates.reset-password-email.ftl.ignore_message=\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438 \u0441\u0431\u0440\u043e\u0441 \u043f\u0430\u0440\u043e\u043b\u044f \u0438\u043b\u0438 \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0439.
+templates.reset-password-email.ftl.having_trouble_clicking_button=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 "\u0421\u0431\u0440\u043e\u0441 \u043f\u0430\u0440\u043e\u043b\u044f" \u0438\u043b\u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u0430\u0448\u0435\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430:
+templates.reset-password-email.ftl.reset_password_button=\u0421\u0431\u0440\u043e\u0441 \u043f\u0430\u0440\u043e\u043b\u044f
+
+# Reset password confirmation email
+templates.reset-password-confirm-email.ftl.title=\u041f\u0430\u0440\u043e\u043b\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0431\u0440\u043e\u0448\u0435\u043d
+templates.reset-password-confirm-email.ftl.detail=\u041f\u0430\u0440\u043e\u043b\u044c \u043a \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Alfresco \u043d\u0430\u0434\u0432\u0430\u043d\u043e \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d.
+templates.reset-password-confirm-email.ftl.note=\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438 \u0441\u0431\u0440\u043e\u0441 \u043f\u0430\u0440\u043e\u043b\u044f, \u043d\u0435\u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u0432 \u0441\u0432\u043e\u044e \u0418\u0422-\u0441\u043b\u0443\u0436\u0431\u0443.
diff --git a/config/alfresco/messages/reset-password-messages_zh_CN.properties b/config/alfresco/messages/reset-password-messages_zh_CN.properties
new file mode 100644
index 0000000000..6101dd4624
--- /dev/null
+++ b/config/alfresco/messages/reset-password-messages_zh_CN.properties
@@ -0,0 +1,15 @@
+# Email subjects.
+reset-password-request.email.subject=\u91cd\u7f6e\u60a8\u7684\u5bc6\u7801
+reset-password-confirmation.email.subject=\u5bc6\u7801\u91cd\u7f6e\u6210\u529f
+
+# Request reset password email
+templates.reset-password-email.ftl.title=\u91cd\u7f6e\u60a8\u7684\u5bc6\u7801
+templates.reset-password-email.ftl.detail=\u60a8\u6700\u8fd1\u8bf7\u6c42\u66f4\u6539\u5e10\u6237\u7684\u5bc6\u7801\u3002
+templates.reset-password-email.ftl.ignore_message=\u5982\u679c\u60a8\u6ca1\u6709\u8bf7\u6c42\u5bc6\u7801\u91cd\u7f6e\u6216\u4e0d\u5e0c\u671b\u66f4\u6539\u5b83\uff0c\u60a8\u53ef\u4ee5\u5ffd\u7565\u6216\u5220\u9664\u6b64\u4fe1\u606f\uff0c\u5e76\u4e14\u60a8\u7684\u5e10\u6237\u5c06\u4fdd\u6301\u5b89\u5168\u3002
+templates.reset-password-email.ftl.having_trouble_clicking_button=\u5355\u51fb\u201c\u91cd\u7f6e\u5bc6\u7801\u201d\u6309\u94ae\uff0c\u6216\u590d\u5236\u7c98\u8d34\u4ee5\u4e0b\u5730\u5740\u5230\u7f51\u7edc\u6d4f\u89c8\u5668\uff1a
+templates.reset-password-email.ftl.reset_password_button=\u91cd\u7f6e\u5bc6\u7801
+
+# Reset password confirmation email
+templates.reset-password-confirm-email.ftl.title=\u5bc6\u7801\u91cd\u7f6e\u6210\u529f
+templates.reset-password-confirm-email.ftl.detail=\u60a8\u7684 Alfresco \u5e10\u6237\u7684\u5bc6\u7801\u6700\u8fd1\u5df2\u66f4\u6539\u3002
+templates.reset-password-confirm-email.ftl.note=\u5982\u679c\u60a8\u6ca1\u6709\u8bf7\u6c42\u5bc6\u7801\u91cd\u7f6e\uff0c\u8bf7\u7acb\u5373\u8054\u7cfb\u60a8\u7684 IT \u56e2\u961f\u3002
diff --git a/config/alfresco/messages/templates-messages_de.properties b/config/alfresco/messages/templates-messages_de.properties
index 0abf508bf7..46c79918f1 100755
--- a/config/alfresco/messages/templates-messages_de.properties
+++ b/config/alfresco/messages/templates-messages_de.properties
@@ -91,3 +91,9 @@ templates.invite-email-moderated.html.info={0} m\u00f6chte der Site ''{1}'' auf
templates.invite-email-moderated.html.see_pending=Siehe ausstehende Anfragen
templates.invite-email.html.salutation_generic=Hallo,
+
+# common for most email templates
+templates.generic-email.ftl.salutation=Hallo {0},
+templates.generic-email.ftl.copy_right=Alle Rechte vorbehalten.
+templates.generic-email.ftl.contact_us=Kontakt
+
diff --git a/config/alfresco/messages/templates-messages_es.properties b/config/alfresco/messages/templates-messages_es.properties
index a002d6b8f6..9aaff407aa 100755
--- a/config/alfresco/messages/templates-messages_es.properties
+++ b/config/alfresco/messages/templates-messages_es.properties
@@ -91,3 +91,9 @@ templates.invite-email-moderated.html.info={0} solicit\u00f3 unirse al sitio ''{
templates.invite-email-moderated.html.see_pending=Ver solicitudes pendientes
templates.invite-email.html.salutation_generic=Hola:
+
+# common for most email templates
+templates.generic-email.ftl.salutation=Hola {0},
+templates.generic-email.ftl.copy_right=Todos los derechos reservados.
+templates.generic-email.ftl.contact_us=P\u00f3ngase en contacto con nosotros
+
diff --git a/config/alfresco/messages/templates-messages_fr.properties b/config/alfresco/messages/templates-messages_fr.properties
index e082ea8643..b045f206a2 100755
--- a/config/alfresco/messages/templates-messages_fr.properties
+++ b/config/alfresco/messages/templates-messages_fr.properties
@@ -91,3 +91,9 @@ templates.invite-email-moderated.html.info={0} a demand\u00e9 \u00e0 rejoindre l
templates.invite-email-moderated.html.see_pending=Consultez le document relatif aux requ\u00eates en attente
templates.invite-email.html.salutation_generic=Bonjour,
+
+# common for most email templates
+templates.generic-email.ftl.salutation=Cher/Ch\u00e8re {0},
+templates.generic-email.ftl.copy_right=Tous droits r\u00e9serv\u00e9s.
+templates.generic-email.ftl.contact_us=Contactez-nous
+
diff --git a/config/alfresco/messages/templates-messages_it.properties b/config/alfresco/messages/templates-messages_it.properties
index 3a46ce4e22..f3a9030a59 100755
--- a/config/alfresco/messages/templates-messages_it.properties
+++ b/config/alfresco/messages/templates-messages_it.properties
@@ -91,3 +91,9 @@ templates.invite-email-moderated.html.info={0} ha richiesto di aderire al sito '
templates.invite-email-moderated.html.see_pending=Visualizza Richieste in sospeso
templates.invite-email.html.salutation_generic=Salve,
+
+# common for most email templates
+templates.generic-email.ftl.salutation=Salve {0},
+templates.generic-email.ftl.copy_right=Tutti i diritti riservati.
+templates.generic-email.ftl.contact_us=Contattaci
+
diff --git a/config/alfresco/messages/templates-messages_ja.properties b/config/alfresco/messages/templates-messages_ja.properties
index 8e15aab047..323beffd95 100755
--- a/config/alfresco/messages/templates-messages_ja.properties
+++ b/config/alfresco/messages/templates-messages_ja.properties
@@ -91,3 +91,9 @@ templates.invite-email-moderated.html.info={0} \u304c {2}''\u4e0a\u306e''''{1}''
templates.invite-email-moderated.html.see_pending=\u4fdd\u7559\u4e2d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u898b\u308b
templates.invite-email.html.salutation_generic=\u7686\u69d8\u3001
+
+# common for most email templates
+templates.generic-email.ftl.salutation={0} \u3055\u3093
+templates.generic-email.ftl.copy_right=All Rights Reserved.
+templates.generic-email.ftl.contact_us=\u9023\u7d61\u5148
+
diff --git a/config/alfresco/messages/templates-messages_nb.properties b/config/alfresco/messages/templates-messages_nb.properties
index 929001d410..b0afcb5494 100755
--- a/config/alfresco/messages/templates-messages_nb.properties
+++ b/config/alfresco/messages/templates-messages_nb.properties
@@ -91,3 +91,9 @@ templates.invite-email-moderated.html.info={0} ba om \u00e5 bli med p\u00e5 omr\
templates.invite-email-moderated.html.see_pending=Se foresp\u00f8rsler som venter p\u00e5 svar
templates.invite-email.html.salutation_generic=Hei,
+
+# common for most email templates
+templates.generic-email.ftl.salutation=Hei {0},
+templates.generic-email.ftl.copy_right=Med enerett.
+templates.generic-email.ftl.contact_us=Kontakt oss
+
diff --git a/config/alfresco/messages/templates-messages_nl.properties b/config/alfresco/messages/templates-messages_nl.properties
index cbe1ad0262..3a6552cc50 100755
--- a/config/alfresco/messages/templates-messages_nl.properties
+++ b/config/alfresco/messages/templates-messages_nl.properties
@@ -91,3 +91,9 @@ templates.invite-email-moderated.html.info={0} heeft aangevraagd lid te worden v
templates.invite-email-moderated.html.see_pending=Openstaande aanvragen bekijken
templates.invite-email.html.salutation_generic=Hallo,
+
+# common for most email templates
+templates.generic-email.ftl.salutation=Beste {0},
+templates.generic-email.ftl.copy_right=Alle rechten voorbehouden.
+templates.generic-email.ftl.contact_us=Neem contact op
+
diff --git a/config/alfresco/messages/templates-messages_pt_BR.properties b/config/alfresco/messages/templates-messages_pt_BR.properties
index 8aebc60dba..f2020bb99a 100644
--- a/config/alfresco/messages/templates-messages_pt_BR.properties
+++ b/config/alfresco/messages/templates-messages_pt_BR.properties
@@ -91,3 +91,9 @@ templates.invite-email-moderated.html.info={0} solicitou ingresso no site ''{1}'
templates.invite-email-moderated.html.see_pending=Ver solicita\u00e7\u00f5es pendentes
templates.invite-email.html.salutation_generic=Ol\u00e1,
+
+# common for most email templates
+templates.generic-email.ftl.salutation=Oi {0},
+templates.generic-email.ftl.copy_right=Todos os direitos reservados.
+templates.generic-email.ftl.contact_us=Entre em contato conosco
+
diff --git a/config/alfresco/messages/templates-messages_ru.properties b/config/alfresco/messages/templates-messages_ru.properties
index 39c7595e62..ca45023539 100755
--- a/config/alfresco/messages/templates-messages_ru.properties
+++ b/config/alfresco/messages/templates-messages_ru.properties
@@ -91,3 +91,9 @@ templates.invite-email-moderated.html.info={0} \u0437\u0430\u043f\u0440\u043e\u0
templates.invite-email-moderated.html.see_pending=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432
templates.invite-email.html.salutation_generic=\u041f\u0440\u0438\u0432\u0435\u0442,
+
+# common for most email templates
+templates.generic-email.ftl.salutation=\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, {0},
+templates.generic-email.ftl.copy_right=\u0412\u0441\u0435 \u043f\u0440\u0430\u0432\u0430 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b.
+templates.generic-email.ftl.contact_us=\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u044b
+
diff --git a/config/alfresco/messages/templates-messages_zh_CN.properties b/config/alfresco/messages/templates-messages_zh_CN.properties
index 4a7c9d1ebf..bdc626b804 100755
--- a/config/alfresco/messages/templates-messages_zh_CN.properties
+++ b/config/alfresco/messages/templates-messages_zh_CN.properties
@@ -91,3 +91,9 @@ templates.invite-email-moderated.html.info={0} \u8bf7\u6c42\u52a0\u5165 {2} ''{1
templates.invite-email-moderated.html.see_pending=\u53c2\u89c1\u5f85\u51b3\u8bf7\u6c42
templates.invite-email.html.salutation_generic=\u60a8\u597d\uff0c
+
+# common for most email templates
+templates.generic-email.ftl.salutation=\u60a8\u597d {0}\uff0c,
+templates.generic-email.ftl.copy_right=\u4fdd\u7559\u6240\u6709\u6743\u5229\u3002
+templates.generic-email.ftl.contact_us=\u8054\u7cfb\u6211\u4eec
+
diff --git a/config/alfresco/workflow/workflow-messages_de.properties b/config/alfresco/workflow/workflow-messages_de.properties
index 7dff61d385..6776eedd42 100755
--- a/config/alfresco/workflow/workflow-messages_de.properties
+++ b/config/alfresco/workflow/workflow-messages_de.properties
@@ -1,7 +1,7 @@
# Display labels for out-of-the-box Content-oriented Workflows
#######################
-# ACTIVITI WORKFLOWS #
+# ACTIVITI WORKFLOWS #
#######################
#
@@ -54,7 +54,7 @@ publishWebContent.workflow.title=Activiti Prozess zum ver\u00f6ffentlichen von W
publishWebContent.workflow.description=Ver\u00f6ffentlichen von Web Content mit der Activiti Workflow Engine
############################
-# WORKFLOW MODEL LABELS #
+# WORKFLOW MODEL LABELS #
############################
# Adhoc Task Definitions
@@ -92,6 +92,15 @@ wf_workflowmodel.type.wf_activitiReviewTask.description=Dokumente zwecks Genehmi
wf_workflowmodel.property.wf_reviewOutcome.title=\u00dcberpr\u00fcfungsergebnis
wf_workflowmodel.property.wf_reviewOutcome.description=Dem Inhalt genehmigen oder ablehnen
+activitiReview.task.wf_submitReviewTask.title=\u00dcberpr\u00fcfung starten
+activitiReview.task.wf_submitReviewTask.description=Dokumente zur \u00dcberpr\u00fcfung und Genehmigung vorlegen
+activitiReview.task.wf_rejectedTask.title=Abgelehnt
+activitiReview.task.wf_rejectedTask.description=Abgelehnt
+activitiReview.task.wf_approvedTask.title=Genehmigt
+activitiReview.task.wf_approvedTask.description=Genehmigt
+activitiReview.task.wf_activitiReviewTask.title=\u00dcberpr\u00fcfen
+activitiReview.task.wf_activitiReviewTask.description=Dokumente zur \u00dcberpr\u00fcfung und Zustimmung
+
# Parallel Review And Approve Task Definitions
wf_workflowmodel.type.wf_submitParallelReviewTask.title=Dokument(e) zur \u00dcberpr\u00fcfung senden
@@ -118,6 +127,7 @@ activitiParallelReview.task.wf_submitParallelReviewTask.description=Dokumentenge
activitiParallelReview.property.wf_requiredApprovePercent.title=Erforderlicher Prozentsatz Genehmigung
activitiParallelReview.property.wf_requiredApprovePercent.description=Prozentsatz Pr\u00fcfer, die zur Genehmigung genehmigen m\u00fcssen
activitiParallelReview.task.wf_activitiReviewTask.title=\u00dcberpr\u00fcfen
+activitiParallelReview.task.wf_activitiReviewTask.description=Dokumente zur \u00dcberpr\u00fcfung und Zustimmung
activitiParallelReview.task.wf_rejectedParallelTask.title=Dokument abgelehnt
activitiParallelReview.task.wf_approvedParallelTask.title=Dokument genehmigt
activitiParallelReview.property.wf_reviewerCount.title=Anzahl Pr\u00fcfer
@@ -130,12 +140,21 @@ activitiParallelReview.property.wf_actualPercent.title=Derzeitiger Prozentsatz G
activitiParallelReview.property.wf_actualPercent.description=Derzeitiger Prozentsatz Genehmigung
activitiParallelReview.property.wf_reviewOutcome.title=\u00dcberpr\u00fcfungsergebnis
activitiParallelReview.property.wf_reviewOutcome.description=\u00dcberpr\u00fcfungsergebnis
+activitiParallelGroupReview.task.wf_activitiReviewTask.title=\u00dcberpr\u00fcfen
+activitiParallelGroupReview.task.wf_activitiReviewTask.description=Dokumente zur \u00dcberpr\u00fcfung und Zustimmung
# Pooled Review Task Definitions
wf_workflowmodel.type.wf_submitGroupReviewTask.title=Gruppen\u00fcberpr\u00fcfung starten
wf_workflowmodel.type.wf_submitGroupReviewTask.description=Dokumente zur \u00dcberpr\u00fcfung und Zustimmung einer Mitarbeitergruppe vorlegen
+activitiReviewPooled.task.wf_activitiReviewTask.title=\u00dcberpr\u00fcfen
+activitiReviewPooled.task.wf_activitiReviewTask.description=Dokumente zur \u00dcberpr\u00fcfung und Zustimmung
+activitiReviewPooled.task.wf_rejectedTask.title=Dokument abgelehnt
+activitiReviewPooled.task.wf_rejectedTask.description=Dokument abgelehnt
+activitiReviewPooled.task.wf_approvedTask.title=Dokument genehmigt
+activitiReviewPooled.task.wf_approvedTask.description=Dokument genehmigt
+
# List constraint display labels
listconstraint.wf_reviewOutcomeOptions.Approve=Genehmigen
listconstraint.wf_reviewOutcomeOptions.Reject=Ablehnen
@@ -146,3 +165,7 @@ workflowtask.outcome.Approve=Genehmigt
workflowtask.outcome.Reject=Abgelehnt
workflowtask.already.done.error=Diese Aufgabe wurde bereits abgeschlossen und kann nicht mehr bearbeitet werden.
+
+# Reset password Task Definitions
+resetpasswordwf_resetpassword.resetpassword.workflow.title=Zur\u00fccksetzen des Passwortes anfordern.
+resetpasswordwf_resetpassword.resetpassword.workflow.description=Wird von Benutzern verwendet, um ein Zur\u00fccksetzen ihres Passwortes anzufordern.
diff --git a/config/alfresco/workflow/workflow-messages_es.properties b/config/alfresco/workflow/workflow-messages_es.properties
index fac0756555..b7f3923776 100755
--- a/config/alfresco/workflow/workflow-messages_es.properties
+++ b/config/alfresco/workflow/workflow-messages_es.properties
@@ -1,7 +1,7 @@
# Display labels for out-of-the-box Content-oriented Workflows
#######################
-# ACTIVITI WORKFLOWS #
+# ACTIVITI WORKFLOWS #
#######################
#
@@ -54,7 +54,7 @@ publishWebContent.workflow.title=Publicar contenido Web con Activiti
publishWebContent.workflow.description=Publicaci\u00f3n de contenido Web utilizando el motor de flujo de trabajo Activiti
############################
-# WORKFLOW MODEL LABELS #
+# WORKFLOW MODEL LABELS #
############################
# Adhoc Task Definitions
@@ -92,6 +92,15 @@ wf_workflowmodel.type.wf_activitiReviewTask.description=Revisar documentos para
wf_workflowmodel.property.wf_reviewOutcome.title=Revisar resultado
wf_workflowmodel.property.wf_reviewOutcome.description=Aprobar y rechazar el contenido
+activitiReview.task.wf_submitReviewTask.title=Iniciar revisi\u00f3n
+activitiReview.task.wf_submitReviewTask.description=Enviar documentos para su revisi\u00f3n y aprobaci\u00f3n
+activitiReview.task.wf_rejectedTask.title=Rechazados
+activitiReview.task.wf_rejectedTask.description=Rechazados
+activitiReview.task.wf_approvedTask.title=Aprobadas
+activitiReview.task.wf_approvedTask.description=Aprobadas
+activitiReview.task.wf_activitiReviewTask.title=Revisar
+activitiReview.task.wf_activitiReviewTask.description=Documentos para revisi\u00f3n y aprobaci\u00f3n
+
# Parallel Review And Approve Task Definitions
wf_workflowmodel.type.wf_submitParallelReviewTask.title=Enviar documentos para revisar
@@ -118,6 +127,7 @@ activitiParallelReview.task.wf_submitParallelReviewTask.description=Solicitar ap
activitiParallelReview.property.wf_requiredApprovePercent.title=Porcentaje de aprobaci\u00f3n requerido
activitiParallelReview.property.wf_requiredApprovePercent.description=Porcentaje de revisores que deben confirmar su aprobaci\u00f3n
activitiParallelReview.task.wf_activitiReviewTask.title=Revisar
+activitiParallelReview.task.wf_activitiReviewTask.description=Documentos para revisi\u00f3n y aprobaci\u00f3n
activitiParallelReview.task.wf_rejectedParallelTask.title=Documento rechazado
activitiParallelReview.task.wf_approvedParallelTask.title=Documento aprobado
activitiParallelReview.property.wf_reviewerCount.title=N\u00famero de revisores
@@ -130,12 +140,21 @@ activitiParallelReview.property.wf_actualPercent.title=Porcentaje de aprobaci\u0
activitiParallelReview.property.wf_actualPercent.description=Porcentaje de aprobaci\u00f3n real
activitiParallelReview.property.wf_reviewOutcome.title=Revisar resultado
activitiParallelReview.property.wf_reviewOutcome.description=Revisar resultado
+activitiParallelGroupReview.task.wf_activitiReviewTask.title=Revisar
+activitiParallelGroupReview.task.wf_activitiReviewTask.description=Documentos para revisi\u00f3n y aprobaci\u00f3n
# Pooled Review Task Definitions
wf_workflowmodel.type.wf_submitGroupReviewTask.title=Iniciar revisi\u00f3n en grupo
wf_workflowmodel.type.wf_submitGroupReviewTask.description=Enviar documentos para su revisi\u00f3n y aprobaci\u00f3n a un grupo de personas
+activitiReviewPooled.task.wf_activitiReviewTask.title=Revisar
+activitiReviewPooled.task.wf_activitiReviewTask.description=Documentos para revisi\u00f3n y aprobaci\u00f3n
+activitiReviewPooled.task.wf_rejectedTask.title=Documento rechazado
+activitiReviewPooled.task.wf_rejectedTask.description=Documento rechazado
+activitiReviewPooled.task.wf_approvedTask.title=Documento aprobado
+activitiReviewPooled.task.wf_approvedTask.description=Documento aprobado
+
# List constraint display labels
listconstraint.wf_reviewOutcomeOptions.Approve=Aprobar
listconstraint.wf_reviewOutcomeOptions.Reject=Rechazar
@@ -146,3 +165,7 @@ workflowtask.outcome.Approve=Aprobada
workflowtask.outcome.Reject=Rechazada
workflowtask.already.done.error=Esta tarea ya se ha completado y no puede editarse.
+
+# Reset password Task Definitions
+resetpasswordwf_resetpassword.resetpassword.workflow.title=Solicitar restablecimiento de contrase\u00f1a.
+resetpasswordwf_resetpassword.resetpassword.workflow.description=Utilizado por los usuarios para solicitar el restablecimiento de su contrase\u00f1a.
diff --git a/config/alfresco/workflow/workflow-messages_fr.properties b/config/alfresco/workflow/workflow-messages_fr.properties
index 43079831c4..6aa6da0441 100755
--- a/config/alfresco/workflow/workflow-messages_fr.properties
+++ b/config/alfresco/workflow/workflow-messages_fr.properties
@@ -1,7 +1,7 @@
# Display labels for out-of-the-box Content-oriented Workflows
#######################
-# ACTIVITI WORKFLOWS #
+# ACTIVITI WORKFLOWS #
#######################
#
@@ -54,7 +54,7 @@ publishWebContent.workflow.title=Processus Activiti de publication de contenu We
publishWebContent.workflow.description=Publication de contenu Web \u00e0 l'aide du moteur de workflow Activi
############################
-# WORKFLOW MODEL LABELS #
+# WORKFLOW MODEL LABELS #
############################
# Adhoc Task Definitions
@@ -92,6 +92,15 @@ wf_workflowmodel.type.wf_activitiReviewTask.description=R\u00e9viser des documen
wf_workflowmodel.property.wf_reviewOutcome.title=R\u00e9sultat de la r\u00e9vision
wf_workflowmodel.property.wf_reviewOutcome.description=Approuver ou rejeter le contenu
+activitiReview.task.wf_submitReviewTask.title=D\u00e9marrer la r\u00e9vision
+activitiReview.task.wf_submitReviewTask.description=Soumettre des documents pour r\u00e9vision et approbation
+activitiReview.task.wf_rejectedTask.title=Rejet\u00e9
+activitiReview.task.wf_rejectedTask.description=Rejet\u00e9
+activitiReview.task.wf_approvedTask.title=Approuv\u00e9
+activitiReview.task.wf_approvedTask.description=Approuv\u00e9
+activitiReview.task.wf_activitiReviewTask.title=R\u00e9viser
+activitiReview.task.wf_activitiReviewTask.description=Documents pour r\u00e9vision et approbation
+
# Parallel Review And Approve Task Definitions
wf_workflowmodel.type.wf_submitParallelReviewTask.title=Envoyer un (des) document(s) pour r\u00e9vision
@@ -118,6 +127,7 @@ activitiParallelReview.task.wf_submitParallelReviewTask.description=Demander l'a
activitiParallelReview.property.wf_requiredApprovePercent.title=Pourcentage d'approbation requis
activitiParallelReview.property.wf_requiredApprovePercent.description=Pourcentage de r\u00e9viseurs qui doivent approuver le contenu pour qu'il soit approuv\u00e9
activitiParallelReview.task.wf_activitiReviewTask.title=R\u00e9viser
+activitiParallelReview.task.wf_activitiReviewTask.description=Documents pour r\u00e9vision et approbation
activitiParallelReview.task.wf_rejectedParallelTask.title=Document rejet\u00e9
activitiParallelReview.task.wf_approvedParallelTask.title=Document approuv\u00e9
activitiParallelReview.property.wf_reviewerCount.title=Nombre de r\u00e9viseurs
@@ -130,12 +140,21 @@ activitiParallelReview.property.wf_actualPercent.title=Pourcentage d'approbation
activitiParallelReview.property.wf_actualPercent.description=Pourcentage d'approbation exact
activitiParallelReview.property.wf_reviewOutcome.title=R\u00e9sultat de la r\u00e9vision
activitiParallelReview.property.wf_reviewOutcome.description=R\u00e9sultat de la r\u00e9vision
+activitiParallelGroupReview.task.wf_activitiReviewTask.title=R\u00e9viser
+activitiParallelGroupReview.task.wf_activitiReviewTask.description=Documents pour r\u00e9vision et approbation
# Pooled Review Task Definitions
wf_workflowmodel.type.wf_submitGroupReviewTask.title=D\u00e9marrer la r\u00e9vision de groupe
wf_workflowmodel.type.wf_submitGroupReviewTask.description=Soumettre des documents pour r\u00e9vision et approbation \u00e0 un groupe de personnes
+activitiReviewPooled.task.wf_activitiReviewTask.title=R\u00e9viser
+activitiReviewPooled.task.wf_activitiReviewTask.description=Documents pour r\u00e9vision et approbation
+activitiReviewPooled.task.wf_rejectedTask.title=Document rejet\u00e9
+activitiReviewPooled.task.wf_rejectedTask.description=Document rejet\u00e9
+activitiReviewPooled.task.wf_approvedTask.title=Document approuv\u00e9
+activitiReviewPooled.task.wf_approvedTask.description=Document approuv\u00e9
+
# List constraint display labels
listconstraint.wf_reviewOutcomeOptions.Approve=Approuver
listconstraint.wf_reviewOutcomeOptions.Reject=Rejeter
@@ -146,3 +165,7 @@ workflowtask.outcome.Approve=Approuv\u00e9
workflowtask.outcome.Reject=Rejet\u00e9
workflowtask.already.done.error=Cette t\u00e2che a d\u00e9j\u00e0 \u00e9t\u00e9 termin\u00e9e et n'est plus modifiable.
+
+# Reset password Task Definitions
+resetpasswordwf_resetpassword.resetpassword.workflow.title=Demande de r\u00e9initialisation de mot de passe.
+resetpasswordwf_resetpassword.resetpassword.workflow.description=Permet aux utilisateurs de demander la r\u00e9initialisation de leur mot de passe.
diff --git a/config/alfresco/workflow/workflow-messages_it.properties b/config/alfresco/workflow/workflow-messages_it.properties
index 3853a94b7e..b25e788f80 100755
--- a/config/alfresco/workflow/workflow-messages_it.properties
+++ b/config/alfresco/workflow/workflow-messages_it.properties
@@ -1,7 +1,7 @@
# Display labels for out-of-the-box Content-oriented Workflows
#######################
-# ACTIVITI WORKFLOWS #
+# ACTIVITI WORKFLOWS #
#######################
#
@@ -54,7 +54,7 @@ publishWebContent.workflow.title=Processo Activiti per la pubblicazione di conte
publishWebContent.workflow.description=Pubblicazione di contenuti web utilizzando il motore Activiti di workflow
############################
-# WORKFLOW MODEL LABELS #
+# WORKFLOW MODEL LABELS #
############################
# Adhoc Task Definitions
@@ -92,6 +92,15 @@ wf_workflowmodel.type.wf_activitiReviewTask.description=Esamina i documenti per
wf_workflowmodel.property.wf_reviewOutcome.title=Esamina risultato
wf_workflowmodel.property.wf_reviewOutcome.description=Approva o respingi il contenuto
+activitiReview.task.wf_submitReviewTask.title=Avvia esame
+activitiReview.task.wf_submitReviewTask.description=Invia i documenti per l'esame e l'approvazione
+activitiReview.task.wf_rejectedTask.title=Respinto
+activitiReview.task.wf_rejectedTask.description=Respinto
+activitiReview.task.wf_approvedTask.title=Approvato
+activitiReview.task.wf_approvedTask.description=Approvato
+activitiReview.task.wf_activitiReviewTask.title=Esamina
+activitiReview.task.wf_activitiReviewTask.description=Documenti per l'esame e l'approvazione
+
# Parallel Review And Approve Task Definitions
wf_workflowmodel.type.wf_submitParallelReviewTask.title=Invia documenti da esaminare
@@ -118,6 +127,7 @@ activitiParallelReview.task.wf_submitParallelReviewTask.description=Richiede l'a
activitiParallelReview.property.wf_requiredApprovePercent.title=Percentuale di approvazioni richiesta
activitiParallelReview.property.wf_requiredApprovePercent.description=Percentuale di esaminatori che devono approvare il contenuto per l'approvazione
activitiParallelReview.task.wf_activitiReviewTask.title=Esamina
+activitiParallelReview.task.wf_activitiReviewTask.description=Documenti per l'esame e l'approvazione
activitiParallelReview.task.wf_rejectedParallelTask.title=Documento respinto
activitiParallelReview.task.wf_approvedParallelTask.title=Documento approvato
activitiParallelReview.property.wf_reviewerCount.title=Numero di esaminatori
@@ -130,12 +140,21 @@ activitiParallelReview.property.wf_actualPercent.title=Percentuale di approvazio
activitiParallelReview.property.wf_actualPercent.description=Percentuale di approvazioni effettiva
activitiParallelReview.property.wf_reviewOutcome.title=Esamina risultato
activitiParallelReview.property.wf_reviewOutcome.description=Esamina risultato
+activitiParallelGroupReview.task.wf_activitiReviewTask.title=Esamina
+activitiParallelGroupReview.task.wf_activitiReviewTask.description=Documenti per l'esame e l'approvazione
# Pooled Review Task Definitions
wf_workflowmodel.type.wf_submitGroupReviewTask.title=Avvia esame di gruppo
wf_workflowmodel.type.wf_submitGroupReviewTask.description=Invia i documenti per l'esame e l'approvazione a un gruppo di persone
+activitiReviewPooled.task.wf_activitiReviewTask.title=Esamina
+activitiReviewPooled.task.wf_activitiReviewTask.description=Documenti per l'esame e l'approvazione
+activitiReviewPooled.task.wf_rejectedTask.title=Documento respinto
+activitiReviewPooled.task.wf_rejectedTask.description=Documento respinto
+activitiReviewPooled.task.wf_approvedTask.title=Documento approvato
+activitiReviewPooled.task.wf_approvedTask.description=Documento approvato
+
# List constraint display labels
listconstraint.wf_reviewOutcomeOptions.Approve=Approva
listconstraint.wf_reviewOutcomeOptions.Reject=Respingi
@@ -146,3 +165,7 @@ workflowtask.outcome.Approve=Approvato
workflowtask.outcome.Reject=Respinto
workflowtask.already.done.error=Questo compito \u00e8 gi\u00e0 stato completato e non \u00e8 pi\u00f9 modificabile.
+
+# Reset password Task Definitions
+resetpasswordwf_resetpassword.resetpassword.workflow.title=Richiedi reset password.
+resetpasswordwf_resetpassword.resetpassword.workflow.description=Utilizzato dagli utenti per richiedere il reset della password.
diff --git a/config/alfresco/workflow/workflow-messages_ja.properties b/config/alfresco/workflow/workflow-messages_ja.properties
index 544db7a036..d23900a0a8 100755
--- a/config/alfresco/workflow/workflow-messages_ja.properties
+++ b/config/alfresco/workflow/workflow-messages_ja.properties
@@ -1,7 +1,7 @@
# Display labels for out-of-the-box Content-oriented Workflows
#######################
-# ACTIVITI WORKFLOWS #
+# ACTIVITI WORKFLOWS #
#######################
#
@@ -54,7 +54,7 @@ publishWebContent.workflow.title=\u30a6\u30a7\u30d6\u30b3\u30f3\u30c6\u30f3\u30c
publishWebContent.workflow.description=\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u7528\u3057\u3066\u30a6\u30a7\u30d6\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u516c\u958b\u3059\u308b
############################
-# WORKFLOW MODEL LABELS #
+# WORKFLOW MODEL LABELS #
############################
# Adhoc Task Definitions
@@ -92,6 +92,15 @@ wf_workflowmodel.type.wf_activitiReviewTask.description=\u6587\u66f8\u3092\u30ec
wf_workflowmodel.property.wf_reviewOutcome.title=\u30ec\u30d3\u30e5\u30fc\u7d50\u679c
wf_workflowmodel.property.wf_reviewOutcome.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u627f\u8a8d\u307e\u305f\u306f\u5374\u4e0b\u3059\u308b
+activitiReview.task.wf_submitReviewTask.title=\u30ec\u30d3\u30e5\u30fc\u306e\u958b\u59cb
+activitiReview.task.wf_submitReviewTask.description=\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d\u7528\u306b\u6587\u66f8\u3092\u9001\u4fe1
+activitiReview.task.wf_rejectedTask.title=\u5374\u4e0b\u6e08\u307f
+activitiReview.task.wf_rejectedTask.description=\u5374\u4e0b\u6e08\u307f
+activitiReview.task.wf_approvedTask.title=\u627f\u8a8d\u6e08\u307f
+activitiReview.task.wf_approvedTask.description=\u627f\u8a8d\u6e08\u307f
+activitiReview.task.wf_activitiReviewTask.title=\u30ec\u30d3\u30e5\u30fc
+activitiReview.task.wf_activitiReviewTask.description=\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d\u3092\u884c\u3046\u6587\u66f8
+
# Parallel Review And Approve Task Definitions
wf_workflowmodel.type.wf_submitParallelReviewTask.title=\u6587\u66f8\u3092\u30ec\u30d3\u30e5\u30fc\u7528\u306b\u9001\u4fe1
@@ -118,6 +127,7 @@ activitiParallelReview.task.wf_submitParallelReviewTask.description=1\u540d\u4ee
activitiParallelReview.property.wf_requiredApprovePercent.title=\u5fc5\u8981\u306a\u627f\u8a8d\u6bd4\u7387
activitiParallelReview.property.wf_requiredApprovePercent.description=\u627f\u8a8d\u3092\u53d7\u3051\u308b\u305f\u3081\u306b\u627f\u8a8d\u3059\u308b\u5fc5\u8981\u306e\u3042\u308b\u30ec\u30d3\u30e5\u30a2\u306e\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8
activitiParallelReview.task.wf_activitiReviewTask.title=\u30ec\u30d3\u30e5\u30fc
+activitiParallelReview.task.wf_activitiReviewTask.description=\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d\u3092\u884c\u3046\u6587\u66f8
activitiParallelReview.task.wf_rejectedParallelTask.title=\u6587\u66f8\u5374\u4e0b
activitiParallelReview.task.wf_approvedParallelTask.title=\u6587\u66f8\u627f\u8a8d
activitiParallelReview.property.wf_reviewerCount.title=\u30ec\u30d3\u30e5\u30a2\u306e\u6570
@@ -130,12 +140,21 @@ activitiParallelReview.property.wf_actualPercent.title=\u5b9f\u969b\u306e\u627f\
activitiParallelReview.property.wf_actualPercent.description=\u5b9f\u969b\u306e\u627f\u8a8d\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8
activitiParallelReview.property.wf_reviewOutcome.title=\u30ec\u30d3\u30e5\u30fc\u7d50\u679c
activitiParallelReview.property.wf_reviewOutcome.description=\u30ec\u30d3\u30e5\u30fc\u7d50\u679c
+activitiParallelGroupReview.task.wf_activitiReviewTask.title=\u30ec\u30d3\u30e5\u30fc
+activitiParallelGroupReview.task.wf_activitiReviewTask.description=\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d\u3092\u884c\u3046\u6587\u66f8
# Pooled Review Task Definitions
wf_workflowmodel.type.wf_submitGroupReviewTask.title=\u30b0\u30eb\u30fc\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u958b\u59cb
wf_workflowmodel.type.wf_submitGroupReviewTask.description=\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d\u7528\u306b\u6587\u66f8\u3092\u30e6\u30fc\u30b6\u30fc\u30b0\u30eb\u30fc\u30d7\u3078\u9001\u4fe1
+activitiReviewPooled.task.wf_activitiReviewTask.title=\u30ec\u30d3\u30e5\u30fc
+activitiReviewPooled.task.wf_activitiReviewTask.description=\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d\u3092\u884c\u3046\u6587\u66f8
+activitiReviewPooled.task.wf_rejectedTask.title=\u6587\u66f8\u5374\u4e0b
+activitiReviewPooled.task.wf_rejectedTask.description=\u6587\u66f8\u5374\u4e0b
+activitiReviewPooled.task.wf_approvedTask.title=\u6587\u66f8\u627f\u8a8d
+activitiReviewPooled.task.wf_approvedTask.description=\u6587\u66f8\u627f\u8a8d
+
# List constraint display labels
listconstraint.wf_reviewOutcomeOptions.Approve=\u627f\u8a8d
listconstraint.wf_reviewOutcomeOptions.Reject=\u5374\u4e0b
@@ -146,3 +165,7 @@ workflowtask.outcome.Approve=\u627f\u8a8d\u6e08\u307f
workflowtask.outcome.Reject=\u5374\u4e0b\u6e08\u307f
workflowtask.already.done.error=\u3053\u306e\u30bf\u30b9\u30af\u306f\u3059\u3067\u306b\u5b8c\u4e86\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u7de8\u96c6\u3067\u304d\u307e\u305b\u3093\u3002
+
+# Reset password Task Definitions
+resetpasswordwf_resetpassword.resetpassword.workflow.title=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30ea\u30bb\u30c3\u30c8\u7533\u8acb
+resetpasswordwf_resetpassword.resetpassword.workflow.description=\u30e6\u30fc\u30b6\u30fc\u304c\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30ea\u30bb\u30c3\u30c8\u3092\u7533\u8acb\u3059\u308b\u969b\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002
diff --git a/config/alfresco/workflow/workflow-messages_nb.properties b/config/alfresco/workflow/workflow-messages_nb.properties
index e51d4217fa..b3ce3a07fb 100755
--- a/config/alfresco/workflow/workflow-messages_nb.properties
+++ b/config/alfresco/workflow/workflow-messages_nb.properties
@@ -1,7 +1,7 @@
# Display labels for out-of-the-box Content-oriented Workflows
#######################
-# ACTIVITI WORKFLOWS #
+# ACTIVITI WORKFLOWS #
#######################
#
@@ -54,7 +54,7 @@ publishWebContent.workflow.title=Activit-prosess for publisering av Webinnhold
publishWebContent.workflow.description=Publisering av Webinnhold ved hjelp av Activiti-arbeidsflytmotoren
############################
-# WORKFLOW MODEL LABELS #
+# WORKFLOW MODEL LABELS #
############################
# Adhoc Task Definitions
@@ -92,6 +92,15 @@ wf_workflowmodel.type.wf_activitiReviewTask.description=Gjennomg\u00e5 dokumente
wf_workflowmodel.property.wf_reviewOutcome.title=Gjennomgangsresultat
wf_workflowmodel.property.wf_reviewOutcome.description=Godkjenn eller avvis innholdet
+activitiReview.task.wf_submitReviewTask.title=Start gjennomgang
+activitiReview.task.wf_submitReviewTask.description=Send dokumenter til gjennomgang og godkjenning
+activitiReview.task.wf_rejectedTask.title=Avvist
+activitiReview.task.wf_rejectedTask.description=Avvist
+activitiReview.task.wf_approvedTask.title=Godkjent
+activitiReview.task.wf_approvedTask.description=Godkjent
+activitiReview.task.wf_activitiReviewTask.title=Gjennomg\u00e5
+activitiReview.task.wf_activitiReviewTask.description=Dokumenter til gjennomgang og godkjenning
+
# Parallel Review And Approve Task Definitions
wf_workflowmodel.type.wf_submitParallelReviewTask.title=Send dokumenter til gjennomgang
@@ -118,6 +127,7 @@ activitiParallelReview.task.wf_submitParallelReviewTask.description=Be om dokume
activitiParallelReview.property.wf_requiredApprovePercent.title=Obligatorisk godkjenningsprosent
activitiParallelReview.property.wf_requiredApprovePercent.description=Prosent av korrekturlesere som m\u00e5 godkjenne for godkjennelse
activitiParallelReview.task.wf_activitiReviewTask.title=Gjennomg\u00e5
+activitiParallelReview.task.wf_activitiReviewTask.description=Dokumenter til gjennomgang og godkjenning
activitiParallelReview.task.wf_rejectedParallelTask.title=Dokument avvist
activitiParallelReview.task.wf_approvedParallelTask.title=Dokument godkjent
activitiParallelReview.property.wf_reviewerCount.title=Antall korrekturlesere
@@ -130,12 +140,21 @@ activitiParallelReview.property.wf_actualPercent.title=Faktisk godkjenningsprose
activitiParallelReview.property.wf_actualPercent.description=Faktisk godkjenningsprosent
activitiParallelReview.property.wf_reviewOutcome.title=Gjennomgangsresultat
activitiParallelReview.property.wf_reviewOutcome.description=Gjennomgangsresultat
+activitiParallelGroupReview.task.wf_activitiReviewTask.title=Gjennomg\u00e5
+activitiParallelGroupReview.task.wf_activitiReviewTask.description=Dokumenter til gjennomgang og godkjenning
# Pooled Review Task Definitions
wf_workflowmodel.type.wf_submitGroupReviewTask.title=Start gruppegjennomgang
wf_workflowmodel.type.wf_submitGroupReviewTask.description=Send dokumenter til gjennomgang og godkjenning til en gruppe av personer
+activitiReviewPooled.task.wf_activitiReviewTask.title=Gjennomg\u00e5
+activitiReviewPooled.task.wf_activitiReviewTask.description=Dokumenter til gjennomgang og godkjenning
+activitiReviewPooled.task.wf_rejectedTask.title=Dokument avvist
+activitiReviewPooled.task.wf_rejectedTask.description=Dokument avvist
+activitiReviewPooled.task.wf_approvedTask.title=Dokument godkjent
+activitiReviewPooled.task.wf_approvedTask.description=Dokument godkjent
+
# List constraint display labels
listconstraint.wf_reviewOutcomeOptions.Approve=Godkjenn
listconstraint.wf_reviewOutcomeOptions.Reject=Avvis
@@ -146,3 +165,7 @@ workflowtask.outcome.Approve=Godkjent
workflowtask.outcome.Reject=Avvist
workflowtask.already.done.error=Denne oppgaven er allrerede fulf\u00f8rt og kan ikke lenger redigeres.
+
+# Reset password Task Definitions
+resetpasswordwf_resetpassword.resetpassword.workflow.title=Be om tilbakestilling av passord.
+resetpasswordwf_resetpassword.resetpassword.workflow.description=Brukes av brukere for \u00e5 be om tilbakestilling av deres passord.
diff --git a/config/alfresco/workflow/workflow-messages_nl.properties b/config/alfresco/workflow/workflow-messages_nl.properties
index b21341bafd..ee7dd033f8 100755
--- a/config/alfresco/workflow/workflow-messages_nl.properties
+++ b/config/alfresco/workflow/workflow-messages_nl.properties
@@ -1,7 +1,7 @@
# Display labels for out-of-the-box Content-oriented Workflows
#######################
-# ACTIVITI WORKFLOWS #
+# ACTIVITI WORKFLOWS #
#######################
#
@@ -54,7 +54,7 @@ publishWebContent.workflow.title=Web Content Activiti-proces publiceren
publishWebContent.workflow.description=Webcontent publiceren met de Activiti-workflowengine
############################
-# WORKFLOW MODEL LABELS #
+# WORKFLOW MODEL LABELS #
############################
# Adhoc Task Definitions
@@ -92,6 +92,15 @@ wf_workflowmodel.type.wf_activitiReviewTask.description=Documenten reviseren om
wf_workflowmodel.property.wf_reviewOutcome.title=Resultaat van revisie
wf_workflowmodel.property.wf_reviewOutcome.description=De content goedkeuren of afwijzen
+activitiReview.task.wf_submitReviewTask.title=Revisie starten
+activitiReview.task.wf_submitReviewTask.description=Documenten ter revisie en goedkeuring verzenden
+activitiReview.task.wf_rejectedTask.title=Afgewezen
+activitiReview.task.wf_rejectedTask.description=Afgewezen
+activitiReview.task.wf_approvedTask.title=Goedgekeurd
+activitiReview.task.wf_approvedTask.description=Goedgekeurd
+activitiReview.task.wf_activitiReviewTask.title=Reviseren
+activitiReview.task.wf_activitiReviewTask.description=Documenten voor revisie en goedkeuring
+
# Parallel Review And Approve Task Definitions
wf_workflowmodel.type.wf_submitParallelReviewTask.title=Document(en) ter revisie verzenden
@@ -118,6 +127,7 @@ activitiParallelReview.task.wf_submitParallelReviewTask.description=Een of meer
activitiParallelReview.property.wf_requiredApprovePercent.title=Vereist goedkeuringspercentage
activitiParallelReview.property.wf_requiredApprovePercent.description=Percentage van revisoren die hun goedkeuring moeten geven
activitiParallelReview.task.wf_activitiReviewTask.title=Reviseren
+activitiParallelReview.task.wf_activitiReviewTask.description=Documenten voor revisie en goedkeuring
activitiParallelReview.task.wf_rejectedParallelTask.title=Document afgewezen
activitiParallelReview.task.wf_approvedParallelTask.title=Document goedgekeurd
activitiParallelReview.property.wf_reviewerCount.title=Aantal revisoren
@@ -130,12 +140,21 @@ activitiParallelReview.property.wf_actualPercent.title=Goedkeuringspercentage
activitiParallelReview.property.wf_actualPercent.description=Goedkeuringspercentage
activitiParallelReview.property.wf_reviewOutcome.title=Resultaat van revisie
activitiParallelReview.property.wf_reviewOutcome.description=Resultaat van revisie
+activitiParallelGroupReview.task.wf_activitiReviewTask.title=Reviseren
+activitiParallelGroupReview.task.wf_activitiReviewTask.description=Documenten voor revisie en goedkeuring
# Pooled Review Task Definitions
wf_workflowmodel.type.wf_submitGroupReviewTask.title=Groepsrevisie starten
wf_workflowmodel.type.wf_submitGroupReviewTask.description=Documenten ter revisie en goedkeuring verzenden naar een groep mensen
+activitiReviewPooled.task.wf_activitiReviewTask.title=Reviseren
+activitiReviewPooled.task.wf_activitiReviewTask.description=Documenten voor revisie en goedkeuring
+activitiReviewPooled.task.wf_rejectedTask.title=Document afgewezen
+activitiReviewPooled.task.wf_rejectedTask.description=Document afgewezen
+activitiReviewPooled.task.wf_approvedTask.title=Document goedgekeurd
+activitiReviewPooled.task.wf_approvedTask.description=Document goedgekeurd
+
# List constraint display labels
listconstraint.wf_reviewOutcomeOptions.Approve=Goedkeuren
listconstraint.wf_reviewOutcomeOptions.Reject=Afwijzen
@@ -146,3 +165,7 @@ workflowtask.outcome.Approve=Goedgekeurd
workflowtask.outcome.Reject=Afgewezen
workflowtask.already.done.error=Deze taak is al voltooid en kan niet langer worden bewerkt.
+
+# Reset password Task Definitions
+resetpasswordwf_resetpassword.resetpassword.workflow.title=Opnieuw instellen van wachtwoord aanvragen.
+resetpasswordwf_resetpassword.resetpassword.workflow.description=Gebruikt door gebruikers om opnieuw instellen van wachtwoord aan te vragen.
diff --git a/config/alfresco/workflow/workflow-messages_pt_BR.properties b/config/alfresco/workflow/workflow-messages_pt_BR.properties
index 8fb9291303..00b3aafc75 100644
--- a/config/alfresco/workflow/workflow-messages_pt_BR.properties
+++ b/config/alfresco/workflow/workflow-messages_pt_BR.properties
@@ -1,7 +1,7 @@
# Display labels for out-of-the-box Content-oriented Workflows
#######################
-# ACTIVITI WORKFLOWS #
+# ACTIVITI WORKFLOWS #
#######################
#
@@ -54,7 +54,7 @@ publishWebContent.workflow.title=Processo Activiti de publica\u00e7\u00e3o de co
publishWebContent.workflow.description=Publica\u00e7\u00e3o de conte\u00fado da Web usando o mecanismo de fluxo de trabalho Activiti
############################
-# WORKFLOW MODEL LABELS #
+# WORKFLOW MODEL LABELS #
############################
# Adhoc Task Definitions
@@ -92,6 +92,15 @@ wf_workflowmodel.type.wf_activitiReviewTask.description=Revisar documentos para
wf_workflowmodel.property.wf_reviewOutcome.title=Resultado de revis\u00e3o
wf_workflowmodel.property.wf_reviewOutcome.description=Aprovar ou rejeitar o conte\u00fado
+activitiReview.task.wf_submitReviewTask.title=Iniciar revis\u00e3o
+activitiReview.task.wf_submitReviewTask.description=Enviar documentos para revis\u00e3o e aprova\u00e7\u00e3o
+activitiReview.task.wf_rejectedTask.title=Rejeitado
+activitiReview.task.wf_rejectedTask.description=Rejeitado
+activitiReview.task.wf_approvedTask.title=Aprovado
+activitiReview.task.wf_approvedTask.description=Aprovado
+activitiReview.task.wf_activitiReviewTask.title=Revisar
+activitiReview.task.wf_activitiReviewTask.description=Documentos para revis\u00e3o e aprova\u00e7\u00e3o
+
# Parallel Review And Approve Task Definitions
wf_workflowmodel.type.wf_submitParallelReviewTask.title=Enviar documento(s) para revis\u00e3o
@@ -118,6 +127,7 @@ activitiParallelReview.task.wf_submitParallelReviewTask.description=Solicitar a
activitiParallelReview.property.wf_requiredApprovePercent.title=Porcentagem de aprova\u00e7\u00e3o obrigat\u00f3ria
activitiParallelReview.property.wf_requiredApprovePercent.description=Porcentagem dos revisores que devem aprovar para obter a aprova\u00e7\u00e3o
activitiParallelReview.task.wf_activitiReviewTask.title=Revisar
+activitiParallelReview.task.wf_activitiReviewTask.description=Documentos para revis\u00e3o e aprova\u00e7\u00e3o
activitiParallelReview.task.wf_rejectedParallelTask.title=Documento rejeitado
activitiParallelReview.task.wf_approvedParallelTask.title=Documento aprovado
activitiParallelReview.property.wf_reviewerCount.title=N\u00famero de revisores
@@ -130,12 +140,21 @@ activitiParallelReview.property.wf_actualPercent.title=Porcentagem efetiva de ap
activitiParallelReview.property.wf_actualPercent.description=Porcentagem efetiva de aprova\u00e7\u00e3o
activitiParallelReview.property.wf_reviewOutcome.title=Resultado de revis\u00e3o
activitiParallelReview.property.wf_reviewOutcome.description=Resultado de revis\u00e3o
+activitiParallelGroupReview.task.wf_activitiReviewTask.title=Revisar
+activitiParallelGroupReview.task.wf_activitiReviewTask.description=Documentos para revis\u00e3o e aprova\u00e7\u00e3o
# Pooled Review Task Definitions
wf_workflowmodel.type.wf_submitGroupReviewTask.title=Iniciar revis\u00e3o em grupo
wf_workflowmodel.type.wf_submitGroupReviewTask.description=Enviar documentos a um grupo de pessoas para revis\u00e3o e aprova\u00e7\u00e3o
+activitiReviewPooled.task.wf_activitiReviewTask.title=Revisar
+activitiReviewPooled.task.wf_activitiReviewTask.description=Documentos para revis\u00e3o e aprova\u00e7\u00e3o
+activitiReviewPooled.task.wf_rejectedTask.title=Documento rejeitado
+activitiReviewPooled.task.wf_rejectedTask.description=Documento rejeitado
+activitiReviewPooled.task.wf_approvedTask.title=Documento aprovado
+activitiReviewPooled.task.wf_approvedTask.description=Documento aprovado
+
# List constraint display labels
listconstraint.wf_reviewOutcomeOptions.Approve=Aprovar
listconstraint.wf_reviewOutcomeOptions.Reject=Rejeitar
@@ -146,3 +165,7 @@ workflowtask.outcome.Approve=Aprovado
workflowtask.outcome.Reject=Rejeitado
workflowtask.already.done.error=Esta tarefa foi conclu\u00edda e n\u00e3o \u00e9 mais edit\u00e1vel.
+
+# Reset password Task Definitions
+resetpasswordwf_resetpassword.resetpassword.workflow.title=Solicitar redefini\u00e7\u00e3o de senha.
+resetpasswordwf_resetpassword.resetpassword.workflow.description=Os usu\u00e1rios podem solicitar a redefini\u00e7\u00e3o da senha.
diff --git a/config/alfresco/workflow/workflow-messages_ru.properties b/config/alfresco/workflow/workflow-messages_ru.properties
index 4133acf6cb..f51bd38d51 100755
--- a/config/alfresco/workflow/workflow-messages_ru.properties
+++ b/config/alfresco/workflow/workflow-messages_ru.properties
@@ -1,7 +1,7 @@
# Display labels for out-of-the-box Content-oriented Workflows
#######################
-# ACTIVITI WORKFLOWS #
+# ACTIVITI WORKFLOWS #
#######################
#
@@ -54,7 +54,7 @@ publishWebContent.workflow.title=\u041f\u0440\u043e\u0446\u0435\u0441\u0441 Acti
publishWebContent.workflow.description=\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0432\u0435\u0431-\u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 Activiti
############################
-# WORKFLOW MODEL LABELS #
+# WORKFLOW MODEL LABELS #
############################
# Adhoc Task Definitions
@@ -92,6 +92,15 @@ wf_workflowmodel.type.wf_activitiReviewTask.description=\u041f\u0440\u043e\u0432
wf_workflowmodel.property.wf_reviewOutcome.title=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442
wf_workflowmodel.property.wf_reviewOutcome.description=\u041f\u0440\u0438\u043d\u044f\u0442\u044c \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442
+activitiReview.task.wf_submitReviewTask.title=\u041d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443
+activitiReview.task.wf_submitReviewTask.description=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435
+activitiReview.task.wf_rejectedTask.title=\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u043e
+activitiReview.task.wf_rejectedTask.description=\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u043e
+activitiReview.task.wf_approvedTask.title=\u041f\u0440\u0438\u043d\u044f\u0442\u043e
+activitiReview.task.wf_approvedTask.description=\u041f\u0440\u0438\u043d\u044f\u0442\u043e
+activitiReview.task.wf_activitiReviewTask.title=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
+activitiReview.task.wf_activitiReviewTask.description=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435
+
# Parallel Review And Approve Task Definitions
wf_workflowmodel.type.wf_submitParallelReviewTask.title=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438
@@ -118,6 +127,7 @@ activitiParallelReview.task.wf_submitParallelReviewTask.description=\u0417\u0430
activitiParallelReview.property.wf_requiredApprovePercent.title=\u0422\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f
activitiParallelReview.property.wf_requiredApprovePercent.description=\u041f\u0440\u043e\u0446\u0435\u043d\u0442 \u0440\u0435\u0446\u0435\u043d\u0437\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0435\u0433\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f
activitiParallelReview.task.wf_activitiReviewTask.title=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c
+activitiParallelReview.task.wf_activitiReviewTask.description=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435
activitiParallelReview.task.wf_rejectedParallelTask.title=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d
activitiParallelReview.task.wf_approvedParallelTask.title=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d
activitiParallelReview.property.wf_reviewerCount.title=\u0427\u0438\u0441\u043b\u043e \u0440\u0435\u0446\u0435\u043d\u0437\u0435\u043d\u0442\u043e\u0432
@@ -130,12 +140,21 @@ activitiParallelReview.property.wf_actualPercent.title=\u0424\u0430\u043a\u0442\
activitiParallelReview.property.wf_actualPercent.description=\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f
activitiParallelReview.property.wf_reviewOutcome.title=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442
activitiParallelReview.property.wf_reviewOutcome.description=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442
+activitiParallelGroupReview.task.wf_activitiReviewTask.title=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
+activitiParallelGroupReview.task.wf_activitiReviewTask.description=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435
# Pooled Review Task Definitions
wf_workflowmodel.type.wf_submitGroupReviewTask.title=\u041d\u0430\u0447\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443
wf_workflowmodel.type.wf_submitGroupReviewTask.description=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u0435 \u043b\u044e\u0434\u0435\u0439
+activitiReviewPooled.task.wf_activitiReviewTask.title=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
+activitiReviewPooled.task.wf_activitiReviewTask.description=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435
+activitiReviewPooled.task.wf_rejectedTask.title=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d
+activitiReviewPooled.task.wf_rejectedTask.description=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d
+activitiReviewPooled.task.wf_approvedTask.title=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d
+activitiReviewPooled.task.wf_approvedTask.description=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d
+
# List constraint display labels
listconstraint.wf_reviewOutcomeOptions.Approve=\u041f\u0440\u0438\u043d\u044f\u0442\u044c
listconstraint.wf_reviewOutcomeOptions.Reject=\u041e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c
@@ -146,3 +165,7 @@ workflowtask.outcome.Approve=\u041f\u0440\u0438\u043d\u044f\u0442\u043e
workflowtask.outcome.Reject=\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u043e
workflowtask.already.done.error=\u0417\u0430\u0434\u0430\u0447\u0430 \u0443\u0436\u0435 \u0431\u044b\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430, \u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c.
+
+# Reset password Task Definitions
+resetpasswordwf_resetpassword.resetpassword.workflow.title=\u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u0431\u0440\u043e\u0441 \u043f\u0430\u0440\u043e\u043b\u044f.
+resetpasswordwf_resetpassword.resetpassword.workflow.description=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0441\u0431\u0440\u043e\u0441 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u0440\u043e\u043b\u044f.
diff --git a/config/alfresco/workflow/workflow-messages_zh_CN.properties b/config/alfresco/workflow/workflow-messages_zh_CN.properties
index ccdab9e463..580e261ca9 100755
--- a/config/alfresco/workflow/workflow-messages_zh_CN.properties
+++ b/config/alfresco/workflow/workflow-messages_zh_CN.properties
@@ -1,7 +1,7 @@
# Display labels for out-of-the-box Content-oriented Workflows
#######################
-# ACTIVITI WORKFLOWS #
+# ACTIVITI WORKFLOWS #
#######################
#
@@ -54,7 +54,7 @@ publishWebContent.workflow.title=\u53d1\u5e03 Web \u5185\u5bb9\u7684 Activiti \u
publishWebContent.workflow.description=\u4f7f\u7528 Activiti \u5de5\u4f5c\u6d41\u7a0b\u5f15\u64ce\u53d1\u5e03 Web \u5185\u5bb9
############################
-# WORKFLOW MODEL LABELS #
+# WORKFLOW MODEL LABELS #
############################
# Adhoc Task Definitions
@@ -92,6 +92,15 @@ wf_workflowmodel.type.wf_activitiReviewTask.description=\u590d\u67e5\u6587\u6863
wf_workflowmodel.property.wf_reviewOutcome.title=\u590d\u67e5\u7ed3\u679c
wf_workflowmodel.property.wf_reviewOutcome.description=\u6279\u51c6\u6216\u62d2\u7edd\u5185\u5bb9
+activitiReview.task.wf_submitReviewTask.title=\u5f00\u59cb\u590d\u67e5
+activitiReview.task.wf_submitReviewTask.description=\u63d0\u4ea4\u6587\u6863\u4f9b\u590d\u67e5\u548c\u6279\u51c6
+activitiReview.task.wf_rejectedTask.title=\u5df2\u62d2\u7edd
+activitiReview.task.wf_rejectedTask.description=\u5df2\u62d2\u7edd
+activitiReview.task.wf_approvedTask.title=\u5df2\u6279\u51c6
+activitiReview.task.wf_approvedTask.description=\u5df2\u6279\u51c6
+activitiReview.task.wf_activitiReviewTask.title=\u590d\u67e5
+activitiReview.task.wf_activitiReviewTask.description=\u4f9b\u590d\u67e5\u548c\u6279\u51c6\u7684\u6587\u6863
+
# Parallel Review And Approve Task Definitions
wf_workflowmodel.type.wf_submitParallelReviewTask.title=\u53d1\u9001\u6587\u6863\u4f9b\u590d\u67e5
@@ -118,6 +127,7 @@ activitiParallelReview.task.wf_submitParallelReviewTask.description=\u4e00\u4f4d
activitiParallelReview.property.wf_requiredApprovePercent.title=\u6240\u9700\u6279\u51c6\u767e\u5206\u6bd4
activitiParallelReview.property.wf_requiredApprovePercent.description=\u8fbe\u5230\u6279\u51c6\u6761\u4ef6\u6240\u9700\u6279\u51c6\u590d\u67e5\u8005\u6240\u5360\u767e\u5206\u6bd4
activitiParallelReview.task.wf_activitiReviewTask.title=\u590d\u67e5
+activitiParallelReview.task.wf_activitiReviewTask.description=\u4f9b\u590d\u67e5\u548c\u6279\u51c6\u7684\u6587\u6863
activitiParallelReview.task.wf_rejectedParallelTask.title=\u6587\u6863\u88ab\u62d2\u7edd
activitiParallelReview.task.wf_approvedParallelTask.title=\u5df2\u6279\u51c6\u6587\u6863
activitiParallelReview.property.wf_reviewerCount.title=\u590d\u67e5\u8005\u6570
@@ -130,12 +140,21 @@ activitiParallelReview.property.wf_actualPercent.title=\u5b9e\u9645\u6279\u51c6\
activitiParallelReview.property.wf_actualPercent.description=\u5b9e\u9645\u6279\u51c6\u767e\u5206\u6bd4
activitiParallelReview.property.wf_reviewOutcome.title=\u590d\u67e5\u7ed3\u679c
activitiParallelReview.property.wf_reviewOutcome.description=\u590d\u67e5\u7ed3\u679c
+activitiParallelGroupReview.task.wf_activitiReviewTask.title=\u590d\u67e5
+activitiParallelGroupReview.task.wf_activitiReviewTask.description=\u4f9b\u590d\u67e5\u548c\u6279\u51c6\u7684\u6587\u6863
# Pooled Review Task Definitions
wf_workflowmodel.type.wf_submitGroupReviewTask.title=\u5f00\u59cb\u7ec4\u590d\u67e5
wf_workflowmodel.type.wf_submitGroupReviewTask.description=\u5411\u4e00\u7ec4\u4eba\u5458\u63d0\u4ea4\u6587\u6863\u4f9b\u590d\u67e5\u548c\u6279\u51c6
+activitiReviewPooled.task.wf_activitiReviewTask.title=\u590d\u67e5
+activitiReviewPooled.task.wf_activitiReviewTask.description=\u4f9b\u590d\u67e5\u548c\u6279\u51c6\u7684\u6587\u6863
+activitiReviewPooled.task.wf_rejectedTask.title=\u6587\u6863\u88ab\u62d2\u7edd
+activitiReviewPooled.task.wf_rejectedTask.description=\u6587\u6863\u88ab\u62d2\u7edd
+activitiReviewPooled.task.wf_approvedTask.title=\u5df2\u6279\u51c6\u6587\u6863
+activitiReviewPooled.task.wf_approvedTask.description=\u5df2\u6279\u51c6\u6587\u6863
+
# List constraint display labels
listconstraint.wf_reviewOutcomeOptions.Approve=\u6279\u51c6
listconstraint.wf_reviewOutcomeOptions.Reject=\u62d2\u7edd
@@ -146,3 +165,7 @@ workflowtask.outcome.Approve=\u5df2\u6279\u51c6
workflowtask.outcome.Reject=\u5df2\u62d2\u7edd
workflowtask.already.done.error=\u6b64\u4efb\u52a1\u5df2\u5b8c\u6210\uff0c\u65e0\u6cd5\u518d\u7f16\u8f91\u3002
+
+# Reset password Task Definitions
+resetpasswordwf_resetpassword.resetpassword.workflow.title=\u8bf7\u6c42\u5bc6\u7801\u91cd\u7f6e\u3002
+resetpasswordwf_resetpassword.resetpassword.workflow.description=\u7531\u7528\u6237\u4f7f\u7528\u4ee5\u8bf7\u6c42\u91cd\u7f6e\u5176\u5bc6\u7801\u3002
diff --git a/source/java/org/alfresco/repo/forum/CommentServiceImpl.java b/source/java/org/alfresco/repo/forum/CommentServiceImpl.java
index f24411bc0c..7ccabc873e 100644
--- a/source/java/org/alfresco/repo/forum/CommentServiceImpl.java
+++ b/source/java/org/alfresco/repo/forum/CommentServiceImpl.java
@@ -613,17 +613,18 @@ public class CommentServiceImpl extends AbstractLifecycleBean implements Comment
NodeRef discussableNodeRef = getDiscussableAncestor(commentNodeRef);
if (discussableNodeRef.equals(discussableNode))
{
- if (!isWorkingCopyOrLocked(discussableNode))
+ if (!isWorkingCopyOrLocked(discussableNode)
+ || isLockOwner(discussableNode))
{
canEdit = canEditPermission(commentNodeRef);
canDelete = canDeletePermission(commentNodeRef);
}
}
-
+
Map map = new HashMap<>(2);
map.put(CommentService.CAN_EDIT, canEdit);
map.put(CommentService.CAN_DELETE, canDelete);
-
+
return map;
}
@@ -637,12 +638,17 @@ public class CommentServiceImpl extends AbstractLifecycleBean implements Comment
boolean isCoordinator = permissionService.hasPermission(commentNodeRef, PermissionService.COORDINATOR) == (AccessStatus.ALLOWED);
return (isSiteManager || isCoordinator || currentUser.equals(creator) || currentUser.equals(owner));
}
-
+
private boolean canDeletePermission(NodeRef commentNodeRef)
{
return permissionService.hasPermission(commentNodeRef, PermissionService.DELETE) == AccessStatus.ALLOWED;
}
+ private boolean isLockOwner(NodeRef nodeRef)
+ {
+ return lockService.getLockStatus(nodeRef) == LockStatus.LOCK_OWNER;
+ }
+
private boolean isWorkingCopyOrLocked(NodeRef nodeRef)
{
boolean isWorkingCopy = false;
@@ -667,7 +673,7 @@ public class CommentServiceImpl extends AbstractLifecycleBean implements Comment
}
return (isWorkingCopy || isLocked);
}
-
+
@Override
public void onUpdateProperties(NodeRef commentNodeRef, Map before, Map after)
{
@@ -675,10 +681,11 @@ public class CommentServiceImpl extends AbstractLifecycleBean implements Comment
if (discussableNodeRef != null)
{
if (behaviourFilter.isEnabled(ContentModel.ASPECT_LOCKABLE)
- && isWorkingCopyOrLocked(discussableNodeRef))
+ && isWorkingCopyOrLocked(discussableNodeRef)
+ && !isLockOwner(discussableNodeRef))
{
List changedProperties = getChangedProperties(before, after);
-
+
// check if comment updated (rather than some other change, eg. addition of lockable aspect only)
boolean commentUpdated = false;
for (QName changedProperty : changedProperties)
@@ -693,7 +700,7 @@ public class CommentServiceImpl extends AbstractLifecycleBean implements Comment
}
}
}
-
+
if (commentUpdated)
{
throw new NodeLockedException(discussableNodeRef);
@@ -741,20 +748,22 @@ public class CommentServiceImpl extends AbstractLifecycleBean implements Comment
return results;
}
-
+
@Override
public void beforeDeleteNode(final NodeRef commentNodeRef)
{
NodeRef discussableNodeRef = getDiscussableAncestor(commentNodeRef);
if (discussableNodeRef != null)
{
+ boolean canDelete = canDeletePermission(commentNodeRef);
if (behaviourFilter.isEnabled(ContentModel.ASPECT_LOCKABLE) // eg. delete site (MNT-14671)
- && isWorkingCopyOrLocked(discussableNodeRef))
+ && isWorkingCopyOrLocked(discussableNodeRef)
+ && !isLockOwner(discussableNodeRef)
+ && !canDelete)
{
throw new NodeLockedException(discussableNodeRef);
}
- boolean canDelete = canDeletePermission(commentNodeRef);
if (! canDelete)
{
throw new AccessDeniedException("Cannot delete comment");
diff --git a/source/java/org/alfresco/repo/site/SiteMembership.java b/source/java/org/alfresco/repo/site/SiteMembership.java
index 404500ff86..7bba607d63 100644
--- a/source/java/org/alfresco/repo/site/SiteMembership.java
+++ b/source/java/org/alfresco/repo/site/SiteMembership.java
@@ -34,134 +34,142 @@ import org.alfresco.service.cmr.site.SiteRole;
* @author steveglover
*
*/
-public class SiteMembership
-{
- private SiteInfo siteInfo;
- private String personId;
- private String firstName;
- private String lastName;
- private String role;
-
- public SiteMembership(SiteInfo siteInfo, String personId, String firstName, String lastName, String role)
- {
- super();
- if(siteInfo == null)
- {
- throw new java.lang.IllegalArgumentException();
- }
- if(personId == null)
- {
- throw new java.lang.IllegalArgumentException();
- }
- if(firstName == null)
- {
- throw new java.lang.IllegalArgumentException();
- }
- if(lastName == null)
- {
- throw new java.lang.IllegalArgumentException();
- }
- if(role == null)
- {
- throw new java.lang.IllegalArgumentException();
- }
- this.siteInfo = siteInfo;
- this.personId = personId;
- this.firstName = firstName;
- this.lastName = lastName;
- this.role = role;
- }
-
- public SiteMembership(SiteInfo siteInfo, String personId, String role)
- {
- super();
- if(siteInfo == null)
- {
- throw new java.lang.IllegalArgumentException();
- }
- if(personId == null)
- {
- throw new java.lang.IllegalArgumentException();
- }
- if(role == null)
- {
- throw new java.lang.IllegalArgumentException();
- }
-
- this.siteInfo = siteInfo;
- this.personId = personId;
- this.role = role;
- }
-
- public SiteInfo getSiteInfo()
- {
- return siteInfo;
- }
-
- public String getPersonId()
- {
- return personId;
- }
-
- public String getFirstName()
- {
- return firstName;
- }
-
- public String getLastName()
- {
- return lastName;
- }
-
- public String getRole()
- {
- return role;
- }
-
- @Override
- public int hashCode()
- {
- final int prime = 31;
- int result = 1;
- result = prime * result
- + ((personId == null) ? 0 : personId.hashCode());
- result = prime * result + ((role == null) ? 0 : role.hashCode());
- result = prime * result
- + ((getSiteInfo() == null) ? 0 : getSiteInfo().hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- SiteMembership other = (SiteMembership) obj;
- if (personId == null) {
- if (other.personId != null)
- return false;
- } else if (!personId.equals(other.personId))
- return false;
- if (role != other.role)
- return false;
- if (getSiteInfo() == null) {
- if (other.getSiteInfo() != null)
- return false;
- } else if (!getSiteInfo().equals(other.getSiteInfo()))
- return false;
- return true;
- }
-
- @Override
- public String toString()
- {
- return "SiteMembership [siteInfo=" + getSiteInfo()
- + ", personId=" + personId + ", firstName=" + firstName
- + ", lastName=" + lastName + ", role=" + role + "]";
- }
-
-}
+public class SiteMembership
+{
+ private SiteInfo siteInfo;
+ private String personId;
+ private String firstName;
+ private String lastName;
+ private String role;
+
+ public SiteMembership(SiteInfo siteInfo, String personId, String firstName, String lastName,
+ String role)
+ {
+ super();
+ if (siteInfo == null)
+ {
+ throw new java.lang.IllegalArgumentException();
+ }
+ if (personId == null)
+ {
+ throw new java.lang.IllegalArgumentException(
+ "Person required building site membership of " + siteInfo.getShortName());
+ }
+ if (firstName == null)
+ {
+ throw new java.lang.IllegalArgumentException(
+ "FirstName required building site membership of " + siteInfo.getShortName());
+ }
+ if (lastName == null)
+ {
+ throw new java.lang.IllegalArgumentException(
+ "LastName required building site membership of " + siteInfo.getShortName());
+ }
+ if (role == null)
+ {
+ throw new java.lang.IllegalArgumentException(
+ "Role required building site membership of " + siteInfo.getShortName());
+ }
+ this.siteInfo = siteInfo;
+ this.personId = personId;
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.role = role;
+ }
+
+ public SiteMembership(SiteInfo siteInfo, String personId, String role)
+ {
+ super();
+ if (siteInfo == null)
+ {
+ throw new java.lang.IllegalArgumentException();
+ }
+ if (personId == null)
+ {
+ throw new java.lang.IllegalArgumentException(
+ "Person required building site membership of " + siteInfo.getShortName());
+ }
+ if (role == null)
+ {
+ throw new java.lang.IllegalArgumentException(
+ "Role required building site membership of " + siteInfo.getShortName());
+ }
+
+ this.siteInfo = siteInfo;
+ this.personId = personId;
+ this.role = role;
+ }
+
+ public SiteInfo getSiteInfo()
+ {
+ return siteInfo;
+ }
+
+ public String getPersonId()
+ {
+ return personId;
+ }
+
+ public String getFirstName()
+ {
+ return firstName;
+ }
+
+ public String getLastName()
+ {
+ return lastName;
+ }
+
+ public String getRole()
+ {
+ return role;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((personId == null) ? 0 : personId.hashCode());
+ result = prime * result + ((role == null) ? 0 : role.hashCode());
+ result = prime * result + ((getSiteInfo() == null) ? 0 : getSiteInfo().hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ SiteMembership other = (SiteMembership) obj;
+ if (personId == null)
+ {
+ if (other.personId != null)
+ return false;
+ }
+ else if (!personId.equals(other.personId))
+ return false;
+ if (role != other.role)
+ return false;
+ if (getSiteInfo() == null)
+ {
+ if (other.getSiteInfo() != null)
+ return false;
+ }
+ else if (!getSiteInfo().equals(other.getSiteInfo()))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "SiteMembership [siteInfo=" + getSiteInfo() + ", personId=" + personId
+ + ", firstName=" + firstName + ", lastName=" + lastName + ", role=" + role + "]";
+ }
+
+}
diff --git a/source/test-java/org/alfresco/repo/forum/CommentsTest.java b/source/test-java/org/alfresco/repo/forum/CommentsTest.java
index 4cc6b6e4c3..e24bb5c805 100644
--- a/source/test-java/org/alfresco/repo/forum/CommentsTest.java
+++ b/source/test-java/org/alfresco/repo/forum/CommentsTest.java
@@ -1,34 +1,35 @@
-/*
- * #%L
- * Alfresco Repository
- * %%
- * Copyright (C) 2005 - 2016 Alfresco Software Limited
- * %%
- * This file is part of the Alfresco software.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * Alfresco is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Alfresco is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- * #L%
- */
+/*
+ * #%L
+ * Alfresco Repository
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
package org.alfresco.repo.forum;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.io.Serializable;
import java.util.ArrayList;
@@ -41,6 +42,7 @@ import org.alfresco.model.ForumModel;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.domain.activities.ActivityPostDAO;
import org.alfresco.repo.domain.activities.ActivityPostEntity;
+import org.alfresco.repo.lock.mem.Lifetime;
import org.alfresco.repo.model.Repository;
import org.alfresco.repo.policy.BehaviourFilter;
import org.alfresco.repo.security.authentication.AuthenticationComponent;
@@ -50,6 +52,9 @@ import org.alfresco.repo.security.permissions.impl.ModelDAO;
import org.alfresco.repo.security.permissions.impl.PermissionServiceImpl;
import org.alfresco.repo.site.SiteModel;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
+import org.alfresco.service.cmr.lock.LockService;
+import org.alfresco.service.cmr.lock.LockType;
+import org.alfresco.service.cmr.lock.NodeLockedException;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.ContentService;
@@ -65,6 +70,7 @@ import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.cmr.site.SiteVisibility;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
+import org.alfresco.util.GUID;
import org.alfresco.util.PropertyMap;
import org.alfresco.util.test.junitrules.AlfrescoPerson;
import org.alfresco.util.test.junitrules.ApplicationContextInit;
@@ -83,33 +89,35 @@ import org.junit.rules.RuleChain;
* Test class for some {@link ForumModel forum model}-related functionality, specifically comments.
* There is no (fully-featured) "CommentService" or "DiscussionService" and the REST API simply creates the appropriate
* content structure as required by the forum model.
- *
+ *
* @author Neil McErlean
* @since 4.0
*/
public class CommentsTest
{
private static final ApplicationContextInit APP_CONTEXT_INIT = new ApplicationContextInit();
-
+
public static final String USER_ONE_NAME = "userone";
+ public static final String USER_TWO_NAME = "usertwo";
+ public static final String USER_THREE_NAME = "userthree";
public static final AlfrescoPerson TEST_USER1 = new AlfrescoPerson(APP_CONTEXT_INIT, USER_ONE_NAME);
-
+
// Tie them together in a static Rule Chain
@ClassRule public static RuleChain STATIC_RULE_CHAIN = RuleChain.outerRule(APP_CONTEXT_INIT)
.around(TEST_USER1);
-
+
// A JUnit Rule to run all tests as user1
public RunAsFullyAuthenticatedRule runAsRule = new RunAsFullyAuthenticatedRule(TEST_USER1);
-
+
// A JUnit Rule to manage test nodes use in each test method
public TemporaryNodes testNodes = new TemporaryNodes(APP_CONTEXT_INIT);
public TemporarySites testSites = new TemporarySites(APP_CONTEXT_INIT);
-
+
// Tie them together in a non-static rule chain.
@Rule public RuleChain ruleChain = RuleChain.outerRule(runAsRule)
.around(testSites)
.around(testNodes);
-
+
// Services
private static BehaviourFilter behaviourFilter;
private static ContentService contentService;
@@ -124,13 +132,14 @@ public class CommentsTest
private static ActivityPostDAO postDAO;
private static PermissionServiceImpl permissionServiceImpl;
private static ModelDAO permissionModelDAO;
+ private static LockService lockService;
// These NodeRefs are used by the test methods.
private static NodeRef COMPANY_HOME;
private SiteInfo testSite;
private NodeRef testFolder;
private List testDocs;
-
+
@BeforeClass public static void initBasicServices() throws Exception
{
behaviourFilter = (BehaviourFilter)APP_CONTEXT_INIT.getApplicationContext().getBean("policyBehaviourFilter");
@@ -139,7 +148,7 @@ public class CommentsTest
repositoryHelper = (Repository)APP_CONTEXT_INIT.getApplicationContext().getBean("repositoryHelper");
siteService = (SiteService)APP_CONTEXT_INIT.getApplicationContext().getBean("SiteService");
transactionHelper = (RetryingTransactionHelper)APP_CONTEXT_INIT.getApplicationContext().getBean("retryingTransactionHelper");
-
+
authenticationComponent = (AuthenticationComponent)APP_CONTEXT_INIT.getApplicationContext().getBean("authenticationComponent");
commentService = (CommentService)APP_CONTEXT_INIT.getApplicationContext().getBean("commentService");
authenticationService = (MutableAuthenticationService)APP_CONTEXT_INIT.getApplicationContext().getBean("AuthenticationService");
@@ -147,10 +156,11 @@ public class CommentsTest
postDAO = (ActivityPostDAO)APP_CONTEXT_INIT.getApplicationContext().getBean("postDAO");
permissionServiceImpl = (PermissionServiceImpl)APP_CONTEXT_INIT.getApplicationContext().getBean("permissionServiceImpl");
permissionModelDAO = (ModelDAO)APP_CONTEXT_INIT.getApplicationContext().getBean("permissionsModelDAO");
-
+ lockService = (LockService)APP_CONTEXT_INIT.getApplicationContext().getBean("lockService");
+
COMPANY_HOME = repositoryHelper.getCompanyHome();
}
-
+
@Before public void createSomeContentForCommentingOn() throws Exception
{
// Create some content which we will comment on.
@@ -160,16 +170,14 @@ public class CommentsTest
testDocs = new ArrayList(3);
for (int i = 0; i < 3; i++)
{
- NodeRef testNode = testNodes.createQuickFile(MimetypeMap.MIMETYPE_TEXT_PLAIN, COMPANY_HOME, "testDocInFolder" + i, TEST_USER1.getUsername());
+ NodeRef testNode = testNodes.createQuickFile(MimetypeMap.MIMETYPE_TEXT_PLAIN, testFolder, "testDocInFolder_" + GUID.generate() + "_" + i, TEST_USER1.getUsername());
testDocs.add(testNode);
}
}
-
+
// MNT-11667 "createComment" method creates activity for users who are not supposed to see the file
@Test public void testMNT11667() throws Exception
{
- final String userTwo = "usertwo";
-
try
{
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback()
@@ -179,17 +187,17 @@ public class CommentsTest
{
authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
- createUser(userTwo);
+ createUser(USER_TWO_NAME);
assertTrue(siteService.hasSite(testSite.getShortName()));
authenticationComponent.setCurrentUser(USER_ONE_NAME);
// invite user to a site with 'Collaborator' role
- siteService.setMembership(testSite.getShortName(), userTwo, SiteModel.SITE_COLLABORATOR);
+ siteService.setMembership(testSite.getShortName(), USER_TWO_NAME, SiteModel.SITE_COLLABORATOR);
assertEquals(SiteModel.SITE_MANAGER, siteService.getMembersRole(testSite.getShortName(), USER_ONE_NAME));
- assertEquals(SiteModel.SITE_COLLABORATOR, siteService.getMembersRole(testSite.getShortName(), userTwo));
+ assertEquals(SiteModel.SITE_COLLABORATOR, siteService.getMembersRole(testSite.getShortName(), USER_TWO_NAME));
// get container of site
NodeRef doclib = siteService.getContainer(testSite.getShortName(), SiteService.DOCUMENT_LIBRARY);
@@ -233,7 +241,7 @@ public class CommentsTest
assertTrue(permissionServiceImpl.hasPermission(nodeRef, getPermission(PermissionService.WRITE)) == AccessStatus.ALLOWED);
assertTrue(permissionServiceImpl.hasPermission(nodeRef, getPermission(PermissionService.DELETE)) == AccessStatus.ALLOWED);
- authenticationComponent.setCurrentUser(userTwo);
+ authenticationComponent.setCurrentUser(USER_TWO_NAME);
assertTrue(permissionServiceImpl.hasPermission(nodeRef, getPermission(PermissionService.READ)) == AccessStatus.DENIED);
assertTrue(permissionServiceImpl.hasPermission(nodeRef, getPermission(PermissionService.WRITE)) == AccessStatus.DENIED);
@@ -248,24 +256,24 @@ public class CommentsTest
{
authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
- if (personService.personExists(userTwo))
+ if (personService.personExists(USER_TWO_NAME))
{
- personService.deletePerson(userTwo);
+ personService.deletePerson(USER_TWO_NAME);
}
- if (authenticationService.authenticationExists(userTwo))
+ if (authenticationService.authenticationExists(USER_TWO_NAME))
{
- authenticationService.deleteAuthentication(userTwo);
+ authenticationService.deleteAuthentication(USER_TWO_NAME);
}
}
}
-
+
private PermissionReference getPermission(String permission)
{
return permissionModelDAO.getPermissionReference(null, permission);
}
-
+
private void createUser(String userName)
{
// if user with given user name doesn't already exist then create user
@@ -273,7 +281,7 @@ public class CommentsTest
{
// create user
authenticationService.createAuthentication(userName, "password".toCharArray());
-
+
// create person properties
PropertyMap personProps = new PropertyMap();
personProps.put(ContentModel.PROP_USERNAME, userName);
@@ -282,12 +290,12 @@ public class CommentsTest
personProps.put(ContentModel.PROP_EMAIL, "FirstName123.LastName123@email.com");
personProps.put(ContentModel.PROP_JOBTITLE, "JobTitle123");
personProps.put(ContentModel.PROP_JOBTITLE, "Organisation123");
-
+
// create person node for user
personService.createPerson(personProps);
}
}
-
+
/**
* This test method comments on some nodes asserting that the commentCount rollup property
* responds correctly to the changing number of comments.
@@ -304,28 +312,28 @@ public class CommentsTest
{
assertCommentCountIs(nr, 0);
}
-
+
// Comment on each node twice
Map> mapDiscussableToComments = new HashMap>();
-
+
for (NodeRef nr : testDocs)
{
final ArrayList comments = new ArrayList();
mapDiscussableToComments.put(nr, comments);
-
+
comments.add(applyComment(nr, "Test comment 1 " + System.currentTimeMillis()));
Thread.sleep(50); // 50 ms sleep so comments aren't simultaneous.
-
+
comments.add(applyComment(nr, "Test comment 2 " + System.currentTimeMillis()));
Thread.sleep(50);
}
-
+
// Check that the rollup comment counts are accurate.
for (NodeRef nr : testDocs)
{
assertCommentCountIs(nr, 2);
}
-
+
// Remove comments
for (Map.Entry> entry : mapDiscussableToComments.entrySet())
{
@@ -363,39 +371,126 @@ public class CommentsTest
assertTrue("Not enough test docs for this test case", testDocs.size() >= 2);
NodeRef node1 = testDocs.get(0);
NodeRef node2 = testDocs.get(1);
-
+
// We will simulate pre-Swift commenting by temporarily disabling the behaviours that add the aspect & do the rollups.
behaviourFilter.disableBehaviour(ForumModel.TYPE_POST);
-
+
for (NodeRef nr : new NodeRef[]{node1, node2})
{
// All test nodes initially do not have the commentsRollup aspect.
assertFalse("Test node had comments rollup aspect.", nodeService.hasAspect(nr, ForumModel.ASPECT_COMMENTS_ROLLUP));
}
-
+
// Comment on each node - we need to save one comment noderef in order to delete it later.
NodeRef commentOnNode1 = applyComment(node1, "Hello", true);
applyComment(node1, "Bonjour", true);
applyComment(node2, "Hola", true);
applyComment(node2, "Bout ye?", true);
-
+
// Check that the rollup comment counts are still not present. And re-enable the behaviours after we check.
for (NodeRef nr : new NodeRef[]{node1, node2})
{
assertFalse("Test node had comments rollup aspect.", nodeService.hasAspect(nr, ForumModel.ASPECT_COMMENTS_ROLLUP));
}
behaviourFilter.enableBehaviour(ForumModel.TYPE_POST);
-
+
// Now the addition or deletion of a comment, should trigger a recalculation of the comment rollup from scratch.
applyComment(node2, "hello again");
nodeService.deleteNode(commentOnNode1);
assertCommentCountIs(node2, 3);
assertCommentCountIs(node1, 1);
-
+
return null;
}
});
}
+
+ /**
+ * REPO-2557, ALF-21907
+ */
+ @Test public void testAddingCommentOnLockedNode()
+ {
+ // create user 2 and 3
+ transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback()
+ {
+ @Override
+ public Void execute() throws Throwable
+ {
+ authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
+ createUser(USER_TWO_NAME);
+ createUser(USER_THREE_NAME);
+ siteService.setMembership(testSite.getShortName(), USER_TWO_NAME, SiteModel.SITE_MANAGER);
+ siteService.setMembership(testSite.getShortName(), USER_THREE_NAME, SiteModel.SITE_MANAGER);
+ return null;
+ }
+ });
+
+ // switch to user 1
+ authenticationComponent.setCurrentUser(USER_ONE_NAME);
+
+ // create some comments
+ final NodeRef testDoc = testDocs.get(0);
+ transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback()
+ {
+ @Override
+ public Void execute() throws Throwable
+ {
+ applyComment(testDoc, "Hello 1");
+ applyComment(testDoc, "Hello 2");
+ return null;
+ }
+ });
+
+ authenticationComponent.setCurrentUser(USER_TWO_NAME);
+
+ // lock node
+ transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback()
+ {
+ @Override
+ public Void execute() throws Throwable
+ {
+ lockService.lock(testDoc, LockType.WRITE_LOCK, (int) 3600, Lifetime.PERSISTENT, "someInfo");
+ return null;
+ }
+ });
+
+ authenticationComponent.setCurrentUser(USER_THREE_NAME);
+
+ try
+ {
+ transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback()
+ {
+ @Override
+ public Void execute() throws Throwable
+ {
+ applyComment(testDoc, "Hello 3");
+ return null;
+ }
+ });
+ fail("NodeLockedException not thrown");
+ }
+ catch(NodeLockedException e)
+ {
+ // Fails because is not the lock owner
+ }
+
+ // change to lock owner
+ authenticationComponent.setCurrentUser(USER_TWO_NAME);
+
+ transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback()
+ {
+ @Override
+ public Void execute() throws Throwable
+ {
+ applyComment(testDoc, "Hello 3");
+ return null;
+ }
+ });
+
+ assertCommentCountIs(testDoc, 3);
+
+ authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
+ }
/**
* This test method tests that nodes whose commentCount is set to -1 have their commentCounts recalculated.
diff --git a/source/test-java/org/alfresco/repo/site/SiteMembershipTest.java b/source/test-java/org/alfresco/repo/site/SiteMembershipTest.java
new file mode 100644
index 0000000000..5c787dfa72
--- /dev/null
+++ b/source/test-java/org/alfresco/repo/site/SiteMembershipTest.java
@@ -0,0 +1,136 @@
+/*
+ * #%L
+ * Alfresco Repository
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.repo.site;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.UUID;
+
+import org.alfresco.service.cmr.site.SiteInfo;
+import org.alfresco.service.cmr.site.SiteVisibility;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test Membership constructor logs. Based on REPO-2520
+ *
+ * @author Alexandru Epure
+ */
+public class SiteMembershipTest
+{
+ SiteInfo siteInfo;
+ SiteMembership siteMember;
+ String personId = UUID.randomUUID().toString();
+ String firstName = UUID.randomUUID().toString();
+ String lastName = UUID.randomUUID().toString();
+ String role = "Consumer";
+
+ String personErrorMessage = "Person required building site membership of ";
+ String firstNameErrorMessage = "FirstName required building site membership of ";
+ String lastNameErrorMessage = "LastName required building site membership of ";
+ String roleErrorMessage = "Role required building site membership of ";
+
+ @Before
+ public void createSite()
+ {
+ String sitePreset = "testSiteMembershipPreset";
+ String shortName = "testSiteMembershipShortName";
+ String title = "testSiteMembershipTile";
+ String description = "testSiteMembershipDescription";
+ siteInfo = new SiteInfoImpl(sitePreset, shortName, title, description,
+ SiteVisibility.PUBLIC, null);
+ }
+
+ @Test
+ public void testNullpersonInfo() throws Exception
+ {
+ try
+ {
+ siteMember = new SiteMembership(siteInfo, null, firstName, lastName, role);
+ }
+ catch (IllegalArgumentException e)
+ {
+ assertEquals(personErrorMessage + siteInfo.getShortName(), e.getMessage());
+ }
+
+ try
+ {
+ siteMember = new SiteMembership(siteInfo, null, role);
+ }
+ catch (IllegalArgumentException e)
+ {
+ assertEquals(personErrorMessage + siteInfo.getShortName(), e.getMessage());
+ }
+ }
+
+ @Test
+ public void testNullRole() throws Exception
+ {
+ try
+ {
+ siteMember = new SiteMembership(siteInfo, personId, firstName, lastName, null);
+ }
+ catch (IllegalArgumentException e)
+ {
+ assertEquals(roleErrorMessage + siteInfo.getShortName(), e.getMessage());
+ }
+
+ try
+ {
+ siteMember = new SiteMembership(siteInfo, personId, null);
+ }
+ catch (IllegalArgumentException e)
+ {
+ assertEquals(roleErrorMessage + siteInfo.getShortName(), e.getMessage());
+ }
+ }
+
+ @Test
+ public void testNullFirstName() throws Exception
+ {
+ try
+ {
+ siteMember = new SiteMembership(siteInfo, personId, null, lastName, role);
+ }
+ catch (IllegalArgumentException e)
+ {
+ assertEquals(firstNameErrorMessage + siteInfo.getShortName(), e.getMessage());
+ }
+ }
+
+ @Test
+ public void testNullLastNale() throws Exception
+ {
+ try
+ {
+ siteMember = new SiteMembership(siteInfo, personId, firstName, null, role);
+ }
+ catch (IllegalArgumentException e)
+ {
+ assertEquals(lastNameErrorMessage + siteInfo.getShortName(), e.getMessage());
+ }
+ }
+}