Merge branch 'develop' of https://github.com/vivo-project/Vitro into develop

This commit is contained in:
tworrall 2013-05-02 12:32:31 -04:00
commit 257f0c4c08
58 changed files with 1112 additions and 700 deletions

View file

@ -0,0 +1,218 @@
#
# Text strings for the controllers and templates
#
# Default (English)
#
save_changes = Save changes
cancel_link = Cancel
cancel_title = cancel
required_fields = required fields
or = or
alt_error_alert = Error alert icon
alt_confirmation = Confirmation icon
email_address = Email address
first_name = First name
last_name = Last name
roles = Roles
status = Status
ascending_order = ascending order
descending_order = descending order
select_one = Select one
type_more_characters = type more characters
no_match = no match
request_failed = Request failed. Please contact your system administrator.
#
# Image upload pages
#
upload_page_title = Upload image
upload_page_title_with_name = Upload image for {0}
upload_heading = Photo Upload
replace_page_title = Replace image
replace_page_title_with_name = Replace image for {0}
crop_page_title = Crop image
crop_page_title_with_name = Crop image for {0}
current_photo = Current Photo
upload_photo = Upload a photo
replace_photo = Replace Photo
photo_types = (JPEG, GIF or PNG)
maximum_file_size = Maximum file size: {0} megabytes
minimum_image_dimensions = Minimum image dimensions: {0} x {1} pixels
cropping_caption = Your profile photo will look like the image below.
cropping_note = To make adjustments, you can drag around and resize the photo to the right. \
When you are happy with your photo click the "Save Photo" button.
alt_thumbnail_photo = Individual photo
alt_image_to_crop = Image to be cropped
alt_preview_crop = Preview of photo cropped
delete_link = Delete photo
submit_upload = Upload photo
submit_save = Save photo
confirm_delete = Are you sure you want to delete this photo?
imageUpload.errorNoURI = No entity URI was provided
imageUpload.errorUnrecognizedURI = This URI is not recognized as belonging to anyone: ''{0}''
imageUpload.errorNoImageForCropping = There is no image file to be cropped.
imageUpload.errorImageTooSmall = The uploaded image should be at least {0} pixels high and {1} pixels wide.
imageUpload.errorUnknown = Sorry, we were unable to process the photo you provided. Please try another photo.
imageUpload.errorFileTooBig = Please upload an image smaller than {0} megabytes.
imageUpload.errorUnrecognizedFileType = ''{0}'' is not a recognized image file type. Please upload JPEG, GIF, or PNG files only.
imageUpload.errorNoPhotoSelected = Please browse and select a photo.
imageUpload.errorBadMultipartRequest = Failed to parse the multi-part request for uploading an image.
imageUpload.errorFormFieldMissing = The form did not contain a ''{0}'' field."
#
# User Accounts pages
#
account_management = Account Management
user_accounts_link = User accounts
user_accounts_title = user accounts
login_count = Login count
last_login = Last Login
add_new_account = Add new account
edit_account = Edit account
external_auth_only = Externally Authenticated Only
reset_password = Reset password
reset_password_note = Note: Instructions for resetting the password will \
be emailed to the address entered above. The password will not \
be reset until the user follows the link provided in this email.
new_password = New password
confirm_password = Confirm new password
minimum_password_length = Minimum of {0} characters in length.
leave_password_unchanged = Leaving this blank means that the password will not be changed.
confirm_initial_password = Confirm initial password
new_account_1 = A new account for
new_account_2 = was successfully created.
new_account_title = new account
new_account_notification = A notification email has been sent to {0} \
with instructions for activating the account and creating a password.
updated_account_1 = The account for
updated_account_2 = has been updated.
updated_account_title = updated account
updated_account_notification = A confirmation email has been sent to {0} \
with instructions for resetting a password. \
The password will not be reset until the user follows the link provided in this email.
deleted_accounts = Deleted {0} {0, choice, 0#accounts |1#account |1<accounts}.
enter_new_password = Please enter your new password for {0}
search_accounts_button = Search accounts
accounts_search_results = Search results for
select_account_to_delete = select this account to delete it
click_to_view_account = click to view account details
filter_by_roles = Filter by roles
view_all_accounts = View all accounts
view_all_accounts_title = view all accounts
new_account_note = Note: An email will be sent to the address entered above \
notifying that an account has been created. \
It will include instructions for activating the account and creating a password.
initial_password = Initial password
submit_add_new_account = Add new account
account_created = Your {0} account has been created.
account_created_subject Your {0} account has been created.
account_created_email_html = @@file files/accountCreatedEmail.html
account_created_email_text = @@file files/accountCreatedEmail.txt
account_created_external_email_html = @@file files/accountCreatedExternalOnlyEmail.html
account_created_external_email_text = @@file files/accountCreatedExternalOnlyEmail.txt
confirm_delete_account_singular = Are you sure you want to delete this account?
confirm_delete_account_plural = Are you sure you want to delete these accounts?
verify_this_match = verify this match
verify_this_match_title = verify this match
change_profile = change profile
change_profile_title = change profile
auth_matching_id_label = External Auth. ID / Matching ID
auth_id_label = External Authentication ID
auth_id_in_use = This Identifier is already in use.
auth_id_explanation = Can be used to associate the account with the user's profile via the matching property.
associated_profile_label = Associated profile:
select_associated_profile = Select the associated profile
create_associated_profile = Create the associated profile
email_changed_subject = Your {0} email account has been changed.
email_changed_html = @@file files/accountEmailChanged.html
email_changed_text = @@file files/accountEmailChanged.txt
create_your_password = Create your Password
password_created_subject = Your {0} password has successfully been created.
password_created_email_html = @@file files/passwordCreatedEmail.html
password_created_email_text = @@file files/passwordCreatedEmail.txt
password_reset_pending_subject = {0} reset password request
password_reset_pending_email_html = @@file files/passwordResetPending.html
password_reset_pending_email_text = @@file files/passwordResetPending.txt
password_reset_complete_subject = Your {0} password changed.
password_reset_complete_email_html = @@file files/passwordResetComplete.html
password_reset_complete_email_text = @@file files/passwordResetComplete.txt
reset_your_password = Reset your Password
first_time_login = First time log in
create_account = Create account
cant_activate_while_logged_in = You may not activate the account for {0} while you are logged in as {1}.
Please log out and try again.
account_already_activated = The account for {0} has already been activated.
cant_change_password_while_logged_in = You may not reset the password for {0} while you are logged in as {1}. \
Please log out and try again.
password_change_not_pending = The password for {0} has already been reset.
password_changed_subject = Password changed.
account_no_longer_exists = The account you are trying to set a password on is no longer available. \
Please contact your system administrator if you think this is an error.
password_saved = Your password has been saved.
password_saved_please_login = Your password has been saved. Please log in.
please_provide_contact_information = Please provide your contact information to finish creating your account.
first_time_login_note = Note: An email will be sent to the address entered above notifying \
that an account has been created.
first_time_external_email_html = @@file files/accountFirstTimeExternal.html
first_time_external_email_text = @@file files/accountFirstTimeExternal.txt
myAccount_heading = My account
myAccount_confirm_changes = Your changes have been saved.
myAccount_confirm_changes_plus_note = Your changes have been saved. A confirmation email has been sent to {0}.
email_change_will_be_confirmed = Note: if email changes, a confirmation email will be sent to the new email address entered above.
email_changed_subject = "Your VIVO email account has been changed.");
who_can_edit_profile = Who can edit my profile
add_profile_editor = Add profile editor
select_existing_last_name = Select an existing last name
selected_editors = Selected editors
remove_selection = Remove selection
remove_selection_title = remove selection
external_id_not_provided = Login failed - External ID is not found.
external_id_already_in_use = User account already exists for ''{0}''
logins_disabled_for_maintenance = User logins are temporarily disabled while the system is being maintained.
error_no_email = You must supply an email address.
error_email_already_exists = An account with that email address already exists.
error_invalid_email = ''{0}'' is not a valid email address.
error_external_auth_already_exists = An account with that external authorization ID already exists.
error_no_first_name = You must supply a first name.
error_no_last_name = You must supply a last name.
error_no_role = You must select a role.
error_no_password = No password supplied.
error_password_length = Password must be between {0} and {1} characters.
error_password_mismatch = Passwords do not match.

View file

@ -0,0 +1,43 @@
#
# Text strings for the controllers and templates
#
# Spanish
#
cancel_link = Cancelar
or = o
alt_error_alert = Icono de alerta con error
#
# Image upload pages
#
upload_page_title = Subir foto
upload_page_title_with_name = Subir imagen para {0}
upload_heading = Subir foto
replace_page_title = Reemplazar imagen
replace_page_title_with_name = Cambie la imagen por {0}
crop_page_title = Recortar imagen
crop_page_title_with_name = Recorte imagen para {0}
current_photo = Foto actual
upload_photo = Suba foto
replace_photo = Reemplace foto
photo_types = (JPEG, GIF, o PNG)
maximum_file_size = Tamaño máximo de archivo: {0} megabytes
minimum_image_dimensions = Dimensiones mínimas de imagen: {0} x {1} pixels
cropping_caption = La foto de tu perfil se verá como la imagen de abajo.
cropping_note = Para realizar ajustes, arrastre alrededor y cambie el tamaño de la foto de la derecha. \
Cuando esté satisfecho con su foto, haga clic en el botón "Guardar foto".
alt_thumbnail_photo = Foto de individuo
alt_image_to_crop = Imagen que desea recortar
alt_preview_crop = Vista previa de la foto recortada
delete_link = Borrar foto
submit_upload = Subir foto
submit_save = Guardar foto
confirm_delete = ¿Seguro que quiere borrar esta foto?

View file

@ -0,0 +1,39 @@
<html>
<head>
<title>{1}</title>
</head>
<body>
<p>
{2} {3}
</p>
<p>
<strong>Congratulations!</strong>
</p>
<p>
We have created your new account on {0}, associated with {4}.
</p>
<p>
If you did not request this new account you can safely ignore this email.
This request will expire if not acted upon for 30 days.
</p>
<p>
Click the link below to create your password for your new account using our secure server.
</p>
<p>
<a href="{5}" title="password">{5}</a>
</p>
<p>
If the link above doesn't work, you can copy and paste the link directly into your browser's address bar.
</p>
<p>
Thanks!
</p>
</body>
</html>

View file

@ -0,0 +1,17 @@
{2} {3}
Congratulations!
We have created your new account on {0},
associated with {4}.
If you did not request this new account you can safely ignore this email.
This request will expire if not acted upon for 30 days.
Paste the link below into your browser's address bar to create your password
for your new account using our secure server.
{5}
Thanks!

View file

@ -0,0 +1,22 @@
<html>
<head>
<title>${1}</title>
</head>
<body>
<p>
${2} ${3}
</p>
<p>
<strong>Congratulations!</strong>
</p>
<p>
We have created your new VIVO account associated with ${4}.
</p>
<p>
Thanks!
</p>
</body>
</html>

View file

@ -0,0 +1,9 @@
${2} ${3}
Congratulations!
We have created your new VIVO account associated with
${4}.
Thanks!

View file

@ -0,0 +1,19 @@
<html>
<head>
<title>{1}</title>
</head>
<body>
<p>
Hi, {2} ${3}
</p>
<p>
You recently changed the email address associated with
${2} ${3}
</p>
<p>
Thank you.
</p>
</body>
</html>

View file

@ -0,0 +1,6 @@
Hi, {2} {3}
You recently changed the email address associated with
{2} {3}
Thank you.

View file

@ -0,0 +1,22 @@
<html>
<head>
<title>{1}</title>
</head>
<body>
<p>
{2} {3}
</p>
<p>
<strong>Congratulations!</strong>
</p>
<p>
We have created your new {0} account associated with {4}.
</p>
<p>
Thanks!
</p>
</body>
</html>

View file

@ -0,0 +1,8 @@
{2} {3}
Congratulations!
We have created your new {0} account associated with
{4}
Thanks!

View file

@ -0,0 +1,22 @@
<html>
<head>
<title>{1}</title>
</head>
<body>
<p>
{2} {3}
</p>
<p>
<strong>Password successfully created.</strong>
</p>
<p>
Your new password associated with {4} has been created.
</p>
<p>
Thank you.
</p>
</body>
</html>

View file

@ -0,0 +1,8 @@
{2} {3}
Password successfully created.
Your new password associated with {4}
has been created.
Thank you.

View file

@ -0,0 +1,34 @@
<html>
<head>
<title>{1}</title>
</head>
<body>
<p>
Dear {2} {3}:
</p>
<p>
We have received a request to reset the password for your {0} account ({4}).
</p>
<p>
Please follow the instructions below to proceed with your password reset.
</p>
<p>
If you did not request this new account you can safely ignore this email.
This request will expire if not acted upon within 30 days.
</p>
<p>
Click on the link below or paste it into your browser's address bar to reset your password
using our secure server.
</p>
<p>
<a href="{5}" title="password">{5}</a>
</p>
<p>Thank you!</p>
</body>
</html>

View file

@ -0,0 +1,16 @@
Dear {2} {3}:
We have received a request to reset the password for your {0} account
({4}).
Please follow the instructions below to proceed with your password reset.
If you did not request this new account you can safely ignore this email.
This request will expire if not acted upon within 30 days.
Paste the link below into your browser's address bar to reset your password
using our secure server.
{5}
Thank you!

View file

@ -0,0 +1,22 @@
<html>
<head>
<title>{1}</title>
</head>
<body>
<p>
{2} {3}
</p>
<p>
<strong>Password successfully changed.</strong>
</p>
<p>
Your new password associated with {4} has been changed.
</p>
<p>
Thank you.
</p>
</body>
</html>

View file

@ -0,0 +1,8 @@
{2} {3}
Password successfully changed.
Your new password associated with {4}
has been changed.
Thank you.

View file

@ -0,0 +1,34 @@
<html>
<head>
<title>{1}</title>
</head>
<body>
<p>
Dear {2} {3}:
</p>
<p>
We have received a request to reset the password for your {0} account ({4}).
</p>
<p>
Please follow the instructions below to proceed with your password reset.
</p>
<p>
If you did not request this new account you can safely ignore this email.
This request will expire if not acted upon within 30 days.
</p>
<p>
Click on the link below or paste it into your browser's address bar to reset your password
using our secure server.
</p>
<p>
<a href="{5}" title="password">{5}</a>
</p>
<p>Thank you!</p>
</body>
</html>

View file

@ -0,0 +1,16 @@
Dear {2} {3}:
We have received a request to reset the password for your {0} account
({4}).
Please follow the instructions below to proceed with your password reset.
If you did not request this new account you can safely ignore this email.
This request will expire if not acted upon within 30 days.
Paste the link below into your browser's address bar to reset your password
using our secure server.
{5}
Thank you!

View file

@ -45,7 +45,7 @@ $(document).ready(function(){
if (countAccount == 0){
return false;
}else{
var answer = confirm( 'Are you sure you want to delete ' + ((countAccount > 1) ? 'these accounts' : 'this account') +'?');
var answer = confirm( ((countAccount > 1) ? confirm_delete_account_plural : confirm_delete_account_singular) +'?');
return answer;
}
});

View file

@ -4,7 +4,7 @@ $(document).ready(function(){
// Confirmation alert for photo deletion in image upload and individual templates
$('#photoUploadDefaultImage a.thumbnail, a.delete-mainImage').click(function(){
var answer = confirm('Are you sure you want to delete this photo?');
var answer = confirm(i18n_confirmDelete);
return answer;
});
});

View file

@ -2,67 +2,22 @@
<#-- Confirmation that an account has been created. -->
<#assign subject = "Your ${siteName} account has been created." />
<#assign strings = i18n() />
<#assign html>
<html>
<head>
<title>${subject}</title>
</head>
<body>
<p>
${userAccount.firstName} ${userAccount.lastName}
</p>
<p>
<strong>Congratulations!</strong>
</p>
<p>
We have created your new account on ${siteName}, associated with ${userAccount.emailAddress}.
</p>
<p>
If you did not request this new account you can safely ignore this email.
This request will expire if not acted upon for 30 days.
</p>
<p>
Click the link below to create your password for your new account using our secure server.
</p>
<p>
<a href="${passwordLink}" title="password">${passwordLink}</a>
</p>
<p>
If the link above doesn't work, you can copy and paste the link directly into your browser's address bar.
</p>
<p>
Thanks!
</p>
</body>
</html>
</#assign>
<#assign subject = strings.account_created(siteName) />
<#assign text>
${userAccount.firstName} ${userAccount.lastName}
<#assign html = strings.account_created_email_html(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress,
passwordLink) />
Congratulations!
We have created your new account on ${siteName},
associated with ${userAccount.emailAddress}.
If you did not request this new account you can safely ignore this email.
This request will expire if not acted upon for 30 days.
Paste the link below into your browser's address bar to create your password
for your new account using our secure server.
${passwordLink}
Thanks!
</#assign>
<#assign text = strings.account_created_email_text(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress,
passwordLink) />
<@email subject=subject html=html text=text />

View file

@ -2,42 +2,18 @@
<#-- Confirmation that an account has been created. -->
<#assign subject = "Your ${siteName} account has been created." />
<#assign subject = strings.account_created(siteName) />
<#assign html>
<html>
<head>
<title>${subject}</title>
</head>
<body>
<p>
${userAccount.firstName} ${userAccount.lastName}
</p>
<p>
<strong>Congratulations!</strong>
</p>
<p>
We have created your new VIVO account associated with ${userAccount.emailAddress}.
</p>
<p>
Thanks!
</p>
</body>
</html>
</#assign>
<#assign html = strings.account_created_external_email_html(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress) />
<#assign text>
${userAccount.firstName} ${userAccount.lastName}
Congratulations!
We have created your new VIVO account associated with
${userAccount.emailAddress}.
Thanks!
</#assign>
<#assign text = string.account_created_external_email_text(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress) />
<@email subject=subject html=html text=text />

View file

@ -2,71 +2,54 @@
<#-- Template for adding a user account -->
<h3><a class="account-menu" href="accountsAdmin" title="add new account">User accounts</a> > Add new account</h3>
<#assign strings = i18n() />
<h3><a class="account-menu" href="accountsAdmin" title="${strings.user_accounts_title}">${strings.user_accounts_link}</a> > ${strings.add_new_account}</h3>
<#if errorEmailIsEmpty??>
<#assign errorMessage = "You must supply an email address." />
<#assign errorMessage = strings.error_no_email />
<#elseif errorEmailInUse??>
<#assign errorMessage = strings.error_email_already_exists />
<#elseif errorEmailInvalidFormat??>
<#assign errorMessage = strings.error_invalid_email(emailAddress) />
<#elseif errorExternalAuthIdInUse??>
<#assign errorMessage = strings.error_external_auth_already_exists />
<#elseif errorFirstNameIsEmpty??>
<#assign errorMessage = strings.error_no_first_name />
<#elseif errorLastNameIsEmpty??>
<#assign errorMessage = strings.error_no_last_name />
<#elseif errorNoRoleSelected??>
<#assign errorMessage = strings.error_no_role />
<#elseif errorPasswordIsEmpty??>
<#assign errorMessage = strings.error_no_password />
<#elseif errorPasswordIsWrongLength??>
<#assign errorMessage = strings.error_password_length(minimumLength, maximumLength) />
<#elseif errorPasswordsDontMatch??>
<#assign errorMessage = strings.error_password_mismatch />
</#if>
<#if errorEmailInUse??>
<#assign errorMessage = "An account with that email address already exists." />
</#if>
<#if errorEmailInvalidFormat??>
<#assign errorMessage = "'${emailAddress}' is not a valid email address." />
</#if>
<#if errorExternalAuthIdInUse??>
<#assign errorMessage = "An account with that external authorization ID already exists." />
</#if>
<#if errorFirstNameIsEmpty??>
<#assign errorMessage = "You must supply a first name." />
</#if>
<#if errorLastNameIsEmpty??>
<#assign errorMessage = "You must supply a last name." />
</#if>
<#if errorNoRoleSelected??>
<#assign errorMessage = "You must select a role." />
</#if>
<#if errorPasswordIsEmpty??>
<#assign errorMessage = "No password supplied." />
</#if>
<#if errorPasswordIsWrongLength??>
<#assign errorMessage = "Password must be between ${minimumLength} and ${maximumLength} characters." />
</#if>
<#if errorPasswordsDontMatch??>
<#assign errorMessage = "Passwords do not match." />
</#if>
<#if errorMessage?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="Error alert icon" />
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="${strings.alt_error_alert}" />
<p>${errorMessage}</p>
</section>
</#if>
<section id="add-account" role="region">
<form method="POST" action="${formUrls.add}" class="customForm" role="add new account">
<label for="email-address">Email address<span class="requiredHint"> *</span></label>
<label for="email-address">${strings.email_address}<span class="requiredHint"> *</span></label>
<input type="text" name="emailAddress" value="${emailAddress}" id="email-address" role="input" />
<label for="first-name">First name<span class="requiredHint"> *</span></label>
<label for="first-name">${strings.first_name}<span class="requiredHint"> *</span></label>
<input type="text" name="firstName" value="${firstName}" id="first-name" role="input" />
<label for="last-name">Last name<span class="requiredHint"> *</span></label>
<label for="last-name">${strings.last_name}<span class="requiredHint"> *</span></label>
<input type="text" name="lastName" value="${lastName}" id="last-name" role="input" />
<#include "userAccounts-associateProfilePanel.ftl">
<p><input id="externalAuthChkBox" type="checkbox" name="externalAuthOnly" <#if externalAuthOnly?? >checked</#if> />Externally Authenticated Only</p>
<p>Roles<span class="requiredHint"> *</span></p>
<p><input id="externalAuthChkBox" type="checkbox" name="externalAuthOnly" <#if externalAuthOnly?? >checked</#if> />${strings.external_auth_only}</p>
<p>${strings.roles}<span class="requiredHint"> *</span></p>
<#list roles as role>
<input type="radio" name="role" value="${role.uri}" role="radio" ${selectedRoles?seq_contains(role.uri)?string("checked", "")} />
<label class="inline" for="${role.label}"> ${role.label}</label>
@ -74,25 +57,21 @@
</#list>
<#if emailIsEnabled??>
<p class="note">
Note: An email will be sent to the address entered above
notifying that an account has been created.
It will include instructions for activating the account and creating a password.
</p>
<p class="note">${strings.new_account_note}</p>
<#else>
<section id="passwordContainer" role="region">
<label for="initial-password">Initial password<span class="requiredHint"> *</span></label>
<label for="initial-password">${strings.initial_password}<span class="requiredHint"> *</span></label>
<input type="password" name="initialPassword" value="${initialPassword}" id="initial-password" role="input" />
<p class="note">Minimum of ${minimumLength} characters in length.</p>
<p class="note">${strings.minimum_password_length}</p>
<label for="confirm-password">Confirm initial password<span class="requiredHint"> *</span></label>
<label for="confirm-password">${strings.confirm_initial_password}<span class="requiredHint"> *</span></label>
<input type="password" name="confirmPassword" value="${confirmPassword}" id="confirm-password" role="input" />
</section>
</#if>
<p><input type="submit" name="submitAdd" value="Add new account" class="submit" /> or <a class="cancel" href="${formUrls.list}" title="cancel">Cancel</a></p>
<p><input type="submit" name="submitAdd" value="${strings.submit_add_new_account}" class="submit" /> ${strings.or} <a class="cancel" href="${formUrls.list}" title="${strings.cancel_title}">${strings.cancel_link}</a></p>
<p class="requiredHint">* required fields</p>
<p class="requiredHint">* ${strings.required_fields}</p>
</form>
</section>

View file

@ -2,20 +2,22 @@
<#-- Template for setting the account reference field, which can also associate a profile with the user account -->
<#assign strings = i18n() />
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/edit/forms/css/autocomplete.css" />',
'<link rel="stylesheet" href="${urls.base}/js/jquery-ui/css/smoothness/jquery-ui-1.8.9.custom.css" />')}
<section id="externalAuthMatchId">
<div id="associateProfileBackgroundOne">
<div id="alignExternalAuthId">
<#if showAssociation??>
<label for="externalAuthId">External Auth. ID / Matching ID</label>
<label for="externalAuthId">${strings.auth_matching_id_label}</label>
<input type="text" name="externalAuthId" value="${externalAuthId}" id="externalAuthId" role="input "/>
<span id="externalAuthIdInUse" >This Identifier is already in use.</span>
<p class="explanatoryText">Can be used to associate the account with the user's profile via the matching property.</p>
<span id="externalAuthIdInUse" >${strings.auth_id_in_use}</span>
<p class="explanatoryText">${strings.auth_id_explanation}</p>
<#else>
<label for="externalAuthId">External Authentication ID</label>
<label for="externalAuthId">${strings.auth_id_label}</label>
<input type="text" name="externalAuthId" value="${externalAuthId}" id="externalAuthId" role="input "/>
<span id="externalAuthIdInUse" >This Identifier is already in use.</span>
<span id="externalAuthIdInUse" >${strings.auth_id_in_use}</span>
</#if>
</div>
</div>
@ -24,10 +26,10 @@ ${stylesheets.add('<link rel="stylesheet" href="${urls.base}/edit/forms/css/auto
<section id="associated">
<div id="associateProfileBackgroundTwo">
<p>
<label for="associatedProfileName">Associated profile:</label>
<label for="associatedProfileName">${strings.associated_profile_label}</label>
<span class="acSelectionInfo" id="associatedProfileName"></span>
<a href="" id="verifyProfileLink" title="verify this match">(verify this match)</a>
<a href="" id="changeProfileLink" title="change profile">(change profile)</a>
<a href="" id="verifyProfileLink" title="${strings.verify_this_match_title}">(${strings.verify_this_match})</a>
<a href="" id="changeProfileLink" title="${strings.change_profile_title}">(${strings.change_profile})</a>
</p>
<input type="hidden" id="associatedProfileUri" name="associatedProfileUri" value="" />
</div>
@ -37,16 +39,16 @@ ${stylesheets.add('<link rel="stylesheet" href="${urls.base}/edit/forms/css/auto
<section id="associationOptions">
<div id="associateProfileBackgroundThree">
<p>
<label for="associateProfileName">Select the associated profile</label>
<label for="associateProfileName">${strings.select_associated_profile}</label>
<input type="text" id="associateProfileName" name="associateProfileName" class="acSelector" size="35">
</p>
</div>
<div id="associateProfileBackgroundFour">
<p> - or - </p>
<p> - ${strings.or} - </p>
<p>
<label for="">Create the associated profile</label>
<label for="">${strings.create_associated_profile}</label>
<select name="newProfileClassUri" id="newProfileClassUri" >
<option value="" selected="selected">Select one</option>
<option value="" selected="selected">${strings.select_one}</option>
<#list profileTypes?keys as key>
<option value="${key}" <#if newProfileClassUri = key> selected </#if> >${profileTypes[key]}</option>
</#list>

View file

@ -2,37 +2,20 @@
<#-- Confirmation that the user has changed his email account. -->
<#assign subject = "Your ${siteName} email account has been changed." />
<#assign strings = i18n() />
<#assign html>
<html>
<head>
<title>${subject}</title>
</head>
<body>
<p>
Hi, ${userAccount.firstName} ${userAccount.lastName}
</p>
<p>
You recently changed the email address associated with
${userAccount.firstName} ${userAccount.lastName}
</p>
<p>
Thank you.
</p>
</body>
</html>
</#assign>
<#assign subject = strings.email_changed_subject(siteName) />
<#assign text>
Hi, ${userAccount.firstName} ${userAccount.lastName}
<#assign html = strings.email_changed_html(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress) />
You recently changed the email address associated with
${userAccount.firstName} ${userAccount.lastName}
<#assign text = strings.email_changed_text(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress) />
Thank you.
</#assign>
<@email subject=subject html=html text=text />
<@email subject=subject html=html text=text />

View file

@ -2,44 +2,43 @@
<#-- Template for adding a user account -->
<h3>Create your Password</h3>
<#if errorPasswordIsEmpty??>
<#assign errorMessage = "No password supplied." />
</#if>
<#if errorPasswordIsWrongLength??>
<#assign errorMessage = "Password must be between ${minimumLength} and ${maximumLength} characters." />
</#if>
<#if errorPasswordsDontMatch??>
<#assign errorMessage = "Passwords do not match." />
</#if>
<#if errorMessage?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="Error alert icon"/>
<p>${errorMessage}</p>
</section>
</#if>
<#assign strings = i18n() />
<h3>${strings.create_your_password}</h3>
<#if errorPasswordIsEmpty??>
<#assign errorMessage = strings.error_no_password />
<#elseif errorPasswordIsWrongLength??>
<#assign errorMessage = strings.error_password_length(minimumLength, maximumLength) />
<#elseif errorPasswordsDontMatch??>
<#assign errorMessage = strings.error_password_mismatch />
</#if>
<#if errorMessage?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="${strings.alt_error_alert}"/>
<p>${errorMessage}</p>
</section>
</#if>
<section id="create-password" role="region">
<p>Please enter your new password for ${userAccount.emailAddress}</p>
<p>${strings.enter_new_password(userAccount.emailAddress)}</p>
<form method="POST" action="${formUrls.createPassword}" class="customForm" role="create password">
<input type="hidden" name="user" value="${userAccount.emailAddress}" role="input" />
<input type="hidden" name="key" value="${userAccount.passwordLinkExpiresHash}" role="input" />
<label for="new-password">Password<span class="requiredHint"> *</span></label>
<label for="new-password">${strings.new_password}<span class="requiredHint"> *</span></label>
<input type="password" name="newPassword" value="${newPassword}" id="new-password" role="input" />
<p class="note">Minimum of ${minimumLength} characters in length.</p>
<p class="note">${strings.minimum_password_length(minimumLength)}</p>
<label for="confirm-password">Confirm Password<span class="requiredHint"> *</span></label>
<label for="confirm-password">${strings.confirm_password}<span class="requiredHint"> *</span></label>
<input type="password" name="confirmPassword" value="${confirmPassword}" id="confirm-password" role="input" />
<p><input type="submit" name="submit" value="Save changes" class="submit"/></p>
<p><input type="submit" name="submit" value="${strings.save_changes}" class="submit"/></p>
<p class="requiredHint">* required fields</p>
<p class="requiredHint">* ${strings.required_fields}</p>
</form>
</section>

View file

@ -2,75 +2,58 @@
<#-- Template for editing a user account -->
<h3><a class="account-menu" href="accountsAdmin" title="edit account">User accounts</a> > Edit account</h3>
<#assign strings = i18n() />
<h3><a class="account-menu" href="accountsAdmin" title="${strings.user_accounts_title}">${strings.user_accounts_link}</a> > ${strings.edit_account}</h3>
<#if errorEmailIsEmpty??>
<#assign errorMessage = "You must supply an email address." />
</#if>
<#if errorEmailInUse??>
<#assign errorMessage = "An account with that email address already exists." />
</#if>
<#if errorEmailInvalidFormat??>
<#assign errorMessage = "'${emailAddress}' is not a valid email address." />
</#if>
<#if errorExternalAuthIdInUse??>
<#assign errorMessage = "An account with that external authorization ID already exists." />
</#if>
<#if errorFirstNameIsEmpty??>
<#assign errorMessage = "You must supply a first name." />
</#if>
<#if errorLastNameIsEmpty??>
<#assign errorMessage = "You must supply a last name." />
</#if>
<#if errorNoRoleSelected??>
<#assign errorMessage = "You must select a role." />
</#if>
<#if errorPasswordIsEmpty??>
<#assign errorMessage = "No password supplied." />
</#if>
<#if errorPasswordIsWrongLength??>
<#assign errorMessage = "Password must be between ${minimumLength} and ${maximumLength} characters." />
</#if>
<#if errorPasswordsDontMatch??>
<#assign errorMessage = "Passwords do not match." />
<#assign errorMessage = strings.error_no_email />
<#elseif errorEmailInUse??>
<#assign errorMessage = strings.error_email_already_exists />
<#elseif errorEmailInvalidFormat??>
<#assign errorMessage = strings.error_invalid_email(emailAddress) />
<#elseif errorExternalAuthIdInUse??>
<#assign errorMessage = strings.error_external_auth_already_exists />
<#elseif errorFirstNameIsEmpty??>
<#assign errorMessage = strings.error_no_first_name />
<#elseif errorLastNameIsEmpty??>
<#assign errorMessage = strings.error_no_last_name />
<#elseif errorNoRoleSelected??>
<#assign errorMessage = strings.error_no_role />
<#elseif errorPasswordIsEmpty??>
<#assign errorMessage = strings.error_no_password />
<#elseif errorPasswordIsWrongLength??>
<#assign errorMessage = strings.error_password_length(minimumLength, maximumLength) />
<#elseif errorPasswordsDontMatch??>
<#assign errorMessage = strings.error_password_mismatch />
</#if>
<#if errorMessage?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="Error alert icon" />
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="${strings.alt_error_alert}" />
<p>${errorMessage}</p>
</section>
</#if>
<section id="edit-account" role="region">
<form method="POST" action="${formUrls.edit}" id="userAccountForm" class="customForm" role="edit account">
<label for="email-address">Email address<span class="requiredHint"> *</span></label>
<label for="email-address">${strings.email_address}<span class="requiredHint"> *</span></label>
<input type="text" name="emailAddress" value="${emailAddress}" id="email-address" role="input" />
<label for="first-name">First name<span class="requiredHint"> *</span></label>
<label for="first-name">${strings.first_name}<span class="requiredHint"> *</span></label>
<input type="text" name="firstName" value="${firstName}" id="first-name" role="input" />
<label for="last-name">Last name<span class="requiredHint"> *</span></label>
<label for="last-name">${strings.last_name}<span class="requiredHint"> *</span></label>
<input type="text" name="lastName" value="${lastName}" id="last-name" role="input" />
<#if externalAuthPermitted??>
<#include "userAccounts-associateProfilePanel.ftl">
<p><input id="externalAuthChkBox" type="checkbox" name="externalAuthOnly" <#if externalAuthOnly?? >checked</#if> />Externally Authenticated Only</p>
<p><input id="externalAuthChkBox" type="checkbox" name="externalAuthOnly" <#if externalAuthOnly?? >checked</#if> />${strings.external_auth_only}</p>
</#if>
<#if roles?has_content>
<p>Roles<span class="requiredHint"> *</span></p>
<p>${strings.roles}<span class="requiredHint"> *</span></p>
<#list roles as role>
<input type="radio" name="role" value="${role.uri}" role="radio" ${selectedRoles?seq_contains(role.uri)?string("checked", "")} />
<label class="inline" for="${role.label}"> ${role.label}</label>
@ -81,29 +64,25 @@
<#if emailIsEnabled??>
<section id="pwdResetContainer" <#if externalAuthOnly?? >class="hidden"</#if> role="region">
<input type="checkbox" name="resetPassword" value="" id="reset-password" role="checkbox" <#if resetPassword??>checked</#if> />
<label class="inline" for="reset-password"> Reset password</label>
<label class="inline" for="reset-password">${strings.reset_password}</label>
<p class="note">
Note: Instructions for resetting the password will
be emailed to the address entered above. The password will not
be reset until the user follows the link provided in this email.
</p>
<p class="note">${strings.reset_password_note}</p>
</section>
<#else>
<section id="passwordContainer" <#if externalAuthOnly?? >class="hidden"</#if> role="region">
<label for="new-password">New password</label>
<label for="new-password">${strings.new_password}</label>
<input type="password" name="newPassword" value="${newPassword}" id="new-password" role="input" />
<p class="note">Minimum of ${minimumLength} characters in length.<br />
Leaving this blank means that the password will not be changed.</p>
<p class="note">${strings.minimum_password_length(minimumLength)}<br />
${strings.leave_password_unchanged}</p>
<label for="confirm-password">Confirm new password</label>
<label for="confirm-password">${strings.confirm_password}</label>
<input type="password" name="confirmPassword" value="${confirmPassword}" id="confirm-password" role="input" />
</section>
</#if>
<p><input type="submit" id="submitMyAccount" name="submitEdit" value="Save changes" class="submit" disabled /> or <a class="cancel" href="${formUrls.list}" title="cancel">Cancel</a></p>
<p><input type="submit" id="submitMyAccount" name="submitEdit" value="${strings.save_changes}" class="submit" disabled /> ${strings.or} <a class="cancel" href="${formUrls.list}" title="${strings.cancel_title}">${strings.cancel_link}</a></p>
<p class="requiredHint">* required fields</p>
<p class="requiredHint">* ${strings.required_fields}</p>
</form>
</section>

View file

@ -2,59 +2,55 @@
<#-- Template for creating an account for the first time an external user logs in. -->
<h3>First time log in</h3>
<#assign strings = i18n() />
<h3>${strings.first_time_login}</h3>
<#if errorEmailIsEmpty??>
<#assign errorMessage = "You must supply an email address." />
<#assign errorMessage = strings.error_no_email />
<#elseif errorEmailInUse??>
<#assign errorMessage = strings.error_email_already_exists />
<#elseif errorEmailInvalidFormat??>
<#assign errorMessage = strings.error_invalid_email(emailAddress) />
<#elseif errorFirstNameIsEmpty??>
<#assign errorMessage = strings.error_no_first_name />
<#elseif errorLastNameIsEmpty??>
<#assign errorMessage = strings.error_no_last_name />
</#if>
<#if errorEmailInUse??>
<#assign errorMessage = "An account with that email address already exists." />
</#if>
<#if errorEmailInvalidFormat??>
<#assign errorMessage = "'${emailAddress}' is not a valid email address." />
</#if>
<#if errorFirstNameIsEmpty??>
<#assign errorMessage = "You must supply a first name." />
</#if>
<#if errorLastNameIsEmpty??>
<#assign errorMessage = "You must supply a last name." />
</#if>
<#if errorMessage?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="Error alert icon"/>
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="${strings.alt_error_alert}" />
<p>${errorMessage}</p>
</section>
</#if>
<section id="first-time-login" role="region">
<p>Please provide your contact information to finish creating your account.</p>
<p>${strings.please_provide_contact_information}</p>
<form method="POST" action="${formUrls.firstTimeExternal}" class="customForm" role="my account">
<input type="hidden" name="externalAuthId" value="${externalAuthId}" role="input" />
<input type="hidden" name="afterLoginUrl" value="${afterLoginUrl}" role="input" />
<label for="first-name">First name<span class="requiredHint"> *</span></label>
<label for="first-name">${strings.first_name}<span class="requiredHint"> *</span></label>
<input type="text" name="firstName" value="${firstName}" id="first-name" role="input" />
<label for="last-name">Last name<span class="requiredHint"> *</span></label>
<label for="last-name">${strings.last_name}<span class="requiredHint"> *</span></label>
<input type="text" name="lastName" value="${lastName}" id="last-name" role="input" />
<label for="email-address">Email address<span class="requiredHint"> *</span></label>
<label for="email-address">${strings.email_address}<span class="requiredHint"> *</span></label>
<input type="text" name="emailAddress" value="${emailAddress}" id="email-address" role="input" />
<#if emailIsEnabled??>
<p class="note">
Note: An email will be sent to the address entered above notifying
that an account has been created.
</p>
<p class="note">${strings.first_time_login_note}</p>
</#if>
<p><input type="submit" name="submit" value="Create account" class="submit"/> or <a class="cancel" href="${urls.home}" title="cancel">Cancel</a></p>
<p><input type="submit" name="submit" value="${strings.create_account}" class="submit"/>
${strings.or}
<a class="cancel" href="${urls.home}" title="${string.cancel_title}">${strings.cancel_link}</a>
</p>
<p class="requiredHint">* ${strings.required_fields}</p>
</form>
</section>

View file

@ -2,42 +2,20 @@
<#-- Confirmation that an account has been created for an externally-authenticated user. -->
<#assign subject = "Your ${siteName} account has been created." />
<#assign strings = i18n() />
<#assign html>
<html>
<head>
<title>${subject}</title>
</head>
<body>
<p>
${userAccount.firstName} ${userAccount.lastName}
</p>
<p>
<strong>Congratulations!</strong>
</p>
<p>
We have created your new VIVO account associated with ${userAccount.emailAddress}.
</p>
<p>
Thanks!
</p>
</body>
</html>
</#assign>
<#assign subject = strings.account_created(siteName) />
<#assign text>
${userAccount.firstName} ${userAccount.lastName}
<#assign html = strings.first_time_external_email_html(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress) />
Congratulations!
We have created your new VIVO account associated with
${userAccount.emailAddress}.
Thanks!
</#assign>
<#assign text = strings.first_time_external_email_text(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress) />
<@email subject=subject html=html text=text />

View file

@ -4,20 +4,19 @@
<#import "userAccounts-accountsNav.ftl" as p>
<#assign strings = i18n() />
<form method="POST" action="${formUrls.add}" id="add-account" class="customForm" role="Add account">
<h3><span>User accounts | </span><input type="submit" class="submit add-account" value="Add new account" /></h3>
<h3><span>${strings.user_accounts_link} | </span><input type="submit" class="submit add-account" value="${strings.add_new_account}" /></h3>
</form>
<#if newUserAccount?? >
<section class="account-feedback">
<p>
A new account for
<a href="${newUserAccount.editUrl}" title="new account">${newUserAccount.firstName} ${newUserAccount.lastName}</a>
was successfully created.
<#if emailWasSent?? >
A notification email has been sent to ${newUserAccount.emailAddress}
with instructions for activating the account and creating a password.
</#if>
${strings.new_account_1}
<a href="${newUserAccount.editUrl}" title="${strings.new_account_title}">${newUserAccount.firstName} ${newUserAccount.lastName}</a>
${strings.new_account_2}
<#if emailWasSent?? >${strings.new_account_notification(newUserAccount.emailAddress)}</#if>
</p>
</section>
</#if>
@ -25,14 +24,10 @@
<#if updatedUserAccount?? >
<section class="account-feedback">
<p>
The account for
<a href="${updatedUserAccount.editUrl}" title="updated account">${updatedUserAccount.firstName} ${updatedUserAccount.lastName}</a>
has been updated.
<#if emailWasSent?? >
A confirmation email has been sent to ${updatedUserAccount.emailAddress}
with instructions for resetting a password.
The password will not be reset until the user follows the link provided in this email.
</#if>
${strings.updated_account_1}
<a href="${updatedUserAccount.editUrl}" title="${strings.updated_account_title}}">${updatedUserAccount.firstName} ${updatedUserAccount.lastName}</a>
${strings.updated_account_2}
<#if emailWasSent?? >${strings.updated_account_notification(updatedUserAccount.emailAddress)}</#if>
</p>
</section>
</#if>
@ -40,7 +35,7 @@
<#if deletedAccountCount?? >
<section class="account-feedback">
<p>
Deleted ${deletedAccountCount} accounts.
${strings.deleted_accounts(deletedAccountCount)}
</p>
</section>
</#if>
@ -48,7 +43,7 @@
<section id="filter-roles">
<form method="POST" action="${formUrls.list}" class="customForm" role="filter by roles">
<select name="roleFilterUri" id="roleFilterUri">
<option value="" <#if roleFilterUri = "">selected</#if> >Filter by roles</option>
<option value="" <#if roleFilterUri = "">selected</#if> >${strings.filter_by_roles}</option>
<#list roles as role>
<option value="${formUrls.list}?roleFilterUri=${role.uri?url}" <#if roleFilterUri = role.uri>selected</#if> >${role.label}</option>
</#list>
@ -60,7 +55,7 @@
</select>
<#if roleFilterUri?has_content>
<span><a href="${formUrls.list}" title="view all acounts"> View all accounts</a></span>
<span><a href="${formUrls.list}" title="${strings.view_all_accounts_title}">${strings.view_all_accounts}</a></span>
</#if>
</form>
</section>
@ -68,7 +63,7 @@
<section id="search-accounts">
<form method="POST" action="${formUrls.list}" class="customForm" role="search accounts">
<input type="text" name="searchTerm" />
<input class="submit" type="submit" value="Search accounts"/>
<input class="submit" type="submit" value="${strings.search_accounts_button}"/>
<!--
When searchTerm changes,
set pageIndex to 1
@ -80,64 +75,64 @@
</section>
<#if searchTerm?has_content>
<section id="search-feedback">
<p>Search results for "<strong>${searchTerm}</strong>" | <span><a href="${formUrls.list}" title="view all accounts"> View all accounts</a></span></p>
<p>${strings.accounts_search_results} "<strong>${searchTerm}</strong>" | <span><a href="${formUrls.list}" title="${strings.view_all_accounts_title}">${strings.view_all_accounts}</a></span></p>
</section>
</#if>
<form method="POST" action="${formUrls.list}" id="account-display" class="customForm" role="accounts display">
<@p.accountsNav />
<table id="account">
<caption>Account Management</caption>
<caption>${strings.account_management}</caption>
<thead>
<tr>
<th scope="col"> <input class="delete-all hidden" type="checkbox" name="delete-all">
Email Address
${strings.email_address}
<nav class="account-alpha-browse">
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=email&orderDirection=ASC" title="ascending order"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=email&orderDirection=DESC" title="descending order"></a>
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=email&orderDirection=ASC" title="${strings.ascending_order}"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=email&orderDirection=DESC" title="${strings.descending_order}"></a>
</nav>
</th>
<th scope="col">
First name
${strings.first_name}
<nav class="account-alpha-browse">
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=firstName&orderDirection=ASC" title="ascending order"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=firstName&orderDirection=DESC" title="descending order"></a>
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=firstName&orderDirection=ASC" title="${strings.ascending_order}"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=firstName&orderDirection=DESC" title="${strings.descending_order}"></a>
</nav>
</th>
<th scope="col">
Last name
${strings.last_name}
<nav class="account-alpha-browse">
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=lastName&orderDirection=ASC" title="ascending order"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=lastName&orderDirection=DESC" title="descending order"></a>
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=lastName&orderDirection=ASC" title="${strings.ascending_order}"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=lastName&orderDirection=DESC" title="${strings.descending_order}"></a>
</nav>
</th>
<th scope="col">
Status
${strings.status}
<nav class="account-alpha-browse">
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=status&orderDirection=ASC" title="ascending order"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=status&orderDirection=DESC" title="descending order"></a>
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=status&orderDirection=ASC" title="${strings.ascending_order}"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=status&orderDirection=DESC" title="${strings.descending_order}"></a>
</nav>
</th>
<th scope="col">Roles</th>
<th scope="col">${strings.roles}</th>
<th scope="col">
Login&nbsp;count
${strings.login_count}
<nav class="account-alpha-browse">
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=count&orderDirection=ASC" title="ascending order"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=count&orderDirection=DESC" title="descending order"></a>
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=count&orderDirection=ASC" title="${strings.ascending_order}"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=count&orderDirection=DESC" title="${strings.descending_order}"></a>
</nav>
</th>
<th scope="col">
Last&nbsp;Login
${strings.last_login}
<nav class="account-alpha-browse">
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=lastLogin&orderDirection=ASC" title="ascending order"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=lastLogin&orderDirection=DESC" title="descending order"></a>
<a class="sort-asc" href="?accountsPerPage=${accountsPerPage}&orderField=lastLogin&orderDirection=ASC" title="${strings.ascending_order}"></a>
<a class="sort-desc" href="?accountsPerPage=${accountsPerPage}&orderField=lastLogin&orderDirection=DESC" title="${strings.descending_order}"></a>
</nav>
</th>
</tr>
@ -148,7 +143,7 @@
<tr>
<td>
<#if account.deletable>
<input type="checkbox" name="deleteAccount" value="${account.uri}" title="select this account to delete it"/>
<input type="checkbox" name="deleteAccount" value="${account.uri}" title="${strings.select_account_to_delete}"/>
<#assign disableDeleteAccount = '' />
<!-- ignored unless submit action is formUrls.delete -->
<#else>
@ -156,7 +151,7 @@
</#if>
<#if account.editUrl != "">
<a ${disableDeleteAccount} href="${account.editUrl}" title="click to view account details">${account.emailAddress}</a>
<a ${disableDeleteAccount} href="${account.editUrl}" title="${strings.click_to_view_account}">${account.emailAddress}</a>
<!-- when this link is clicked, editAccount is noticed and all other fields are ignored. -->
<#else>
${account.emailAddress}
@ -185,5 +180,10 @@
<@p.accountsNav />
</form>
<script type="text/javascript">
confirm_delete_account_singular = "${strings.confirm_delete_account_singular}"
confirm_delete_account_plural = "${strings.confirm_delete_account_plural}"
</script>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/account/account.css" />')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/account/accountUtils.js"></script>')}

View file

@ -2,58 +2,48 @@
<#-- Template for editing a user account -->
<h3>My account</h3>
<#assign strings = i18n() />
<h3>${strings.myAccount_heading}</h3>
<#if errorEmailIsEmpty??>
<#assign errorMessage = "You must supply an email address." />
<#assign errorMessage = strings.error_no_email />
<#elseif errorEmailInUse??>
<#assign errorMessage = strings.error_email_already_exists />
<#elseif errorEmailInvalidFormat??>
<#assign errorMessage = strings.error_invalid_email(emailAddress) />
<#elseif errorFirstNameIsEmpty??>
<#assign errorMessage = strings.error_no_first_name />
<#elseif errorLastNameIsEmpty??>
<#assign errorMessage = strings.error_no_last_name />
<#elseif errorNoRoleSelected??>
<#assign errorMessage = strings.error_no_role />
<#elseif errorPasswordIsEmpty??>
<#assign errorMessage = strings.error_no_password />
<#elseif errorPasswordIsWrongLength??>
<#assign errorMessage = strings.error_password_length(minimumLength, maximumLength) />
<#elseif errorPasswordsDontMatch??>
<#assign errorMessage = strings.error_password_mismatch />
</#if>
<#if errorEmailInUse??>
<#assign errorMessage = "An account with that email address already exists." />
</#if>
<#if errorEmailInvalidFormat??>
<#assign errorMessage = "'${emailAddress}' is not a valid email address." />
</#if>
<#if errorFirstNameIsEmpty??>
<#assign errorMessage = "You must supply a first name." />
</#if>
<#if errorLastNameIsEmpty??>
<#assign errorMessage = "You must supply a last name." />
</#if>
<#if errorPasswordIsEmpty??>
<#assign errorMessage = "No password supplied." />
</#if>
<#if errorPasswordIsWrongLength??>
<#assign errorMessage = "Password must be between ${minimumLength} and ${maximumLength} characters." />
</#if>
<#if errorPasswordsDontMatch??>
<#assign errorMessage = "Passwords do not match." />
</#if>
<#if errorMessage?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="Error alert icon"/>
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="${strings.alt_error_alert}" />
<p>${errorMessage}</p>
</section>
</#if>
<#if confirmChange??>
<#assign confirmMessage = "Your changes have been saved." />
<#assign confirmMessage = strings.myAccount_confirm_changes />
</#if>
<#if confirmEmailSent??>
<#assign confirmMessage = "Your changes have been saved. A confirmation email has been sent to ${emailAddress}." />
<#assign confirmMessage = strings.myAccount_confirm_changes_plus_note(emailAddress) />
</#if>
<#if confirmMessage?has_content>
<section class="account-feedback" role="alert">
<p><img class="middle" src="${urls.images}/iconConfirmation.png" alert="Confirmation icon"/> ${confirmMessage}</p>
<p><img class="middle" src="${urls.images}/iconConfirmation.png" alt="${strings.alt_confirmation}"/> ${confirmMessage}</p>
</section>
</#if>
@ -63,30 +53,34 @@
<#include "userAccounts-myProxiesPanel.ftl">
</#if>
<label for="email-address">Email address<span class="requiredHint"> *</span></label>
<label for="email-address">${strings.email_address}<span class="requiredHint"> *</span></label>
<input type="text" name="emailAddress" value="${emailAddress}" id="email-address" role="input" />
<p class="note">Note: if email changes, a confirmation email will<br />be sent to the new email address entered above.</p>
<p class="note">${strings.email_change_will_be_confirmed}</p>
<label for="first-name">First name<span class="requiredHint"> *</span></label>
<label for="first-name">${strings.first_name}<span class="requiredHint"> *</span></label>
<input type="text" name="firstName" value="${firstName}" id="first-name" role="input" />
<label for="last-name">Last name<span class="requiredHint"> *</span></label>
<label for="last-name">${strings.last_name}<span class="requiredHint"> *</span></label>
<input type="text" name="lastName" value="${lastName}" id="last-name" role="input" />
<#if !externalAuth??>
<label for="new-password">New password</label>
<label for="new-password">${strings.new_password}</label>
<input type="password" name="newPassword" value="${newPassword}" id="new-password" role="input" />
<p class="note">Minimum of ${minimumLength} characters in length.<br />If left blank, the password will not be changed.</p>
<p class="note">${strings.minimum_password_length(minimumLength)}<br />${strings.leave_password_unchanged}</p>
<label for="confirm-password">Confirm new password</label>
<label for="confirm-password">${strings.confirm_password}</label>
<input type="password" name="confirmPassword" value="${confirmPassword}" id="confirm-password" role="input" />
</#if>
<p><input type="submit" id="submitMyAccount" name="submitMyAccount" value="Save changes" class="submit" disabled /> or <a class="cancel" href="${urls.referringPage}" title="cancel">Cancel</a></p>
<p>
<input type="submit" id="submitMyAccount" name="submitMyAccount" value="${strings.save_changes}" class="submit" disabled />
${strings.or}
<a class="cancel" href="${urls.referringPage}" title="${strings.cancel_title}">${strings.cancel_link}</a>
</p>
<p class="requiredHint">* required fields</p>
<p class="requiredHint">* ${strings.required_fields}</p>
</form>
</section>

View file

@ -2,15 +2,21 @@
<#-- Template for setting the account reference field, which can also associate a profile with the user account -->
<#assign strings = i18n() />
<section id="edit-myProxy" name="proxyProxiesPanel" role="region">
<h4>Who can edit my profile</h4>
<h4>${strings.who_can_edit_profile}</h4>
<label for="addProfileEditor">Add profile editor</label>
<input id="addProfileEditor" type="text" name="proxySelectorAC" class="acSelector" size="35" value="Select an existing last name" role="input" /><span><img class="loading-profileMyAccoount hidden" src="${urls.images}/indicatorWhite.gif" /></span>
<label for="addProfileEditor">${strings.add_profile_editor}</label>
<input id="addProfileEditor" type="text" name="proxySelectorAC" class="acSelector" size="35"
value="${strings.select_existing_last_name}" role="input" />
<span><img class="loading-profileMyAccoount hidden" src="${urls.images}/indicatorWhite.gif" /></span>
<p class="search-status"><span name='proxySelectorSearchStatus' moreCharsText='type more characters' noMatchText='no match'>&nbsp;</span></p>
<p class="search-status">
<span name='proxySelectorSearchStatus' moreCharsText='${strings.type_more_characters}' noMatchText='${strings.no_match}'>&nbsp;</span>
</p>
<p name="excludeUri" style="display: none">${myAccountUri}<p>
<p class="selected-editors">Selected editors:</p>
<p class="selected-editors">${strings.selected_editors}:</p>
<#-- Magic ul that holds all of the proxy data and the template that shows how to display it. -->
<ul name="proxyData" role="navigation">
@ -35,7 +41,7 @@
<p class="proxy-info">%label% | <span class="class-label">%classLabel%</span>
<br />
<a class='remove-proxy' href="." templatePart="remove" title="remove selection">Remove selection</a>
<a class='remove-proxy' href="." templatePart="remove" title="${strings.remove_selection_title}">${strings.remove_selection}</a>
<input type="hidden" name="proxyUri" value="%uri%" role="input" />
</p>

View file

@ -2,42 +2,20 @@
<#-- Confirmation that an password has been created. -->
<#assign subject = "Your ${siteName} password has successfully been created." />
<#assign strings = i18n() />
<#assign html>
<html>
<head>
<title>${subject}</title>
</head>
<body>
<p>
${userAccount.firstName} ${userAccount.lastName}
</p>
<p>
<strong>Password successfully created.</strong>
</p>
<p>
Your new password associated with ${userAccount.emailAddress} has been created.
</p>
<p>
Thank you.
</p>
</body>
</html>
</#assign>
<#assign subject = strings.password_created_subject(siteName) />
<#assign text>
${userAccount.firstName} ${userAccount.lastName}
<#assign html = strings.password_created_email_html(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress) />
Password successfully created.
Your new password associated with ${userAccount.emailAddress}
has been created.
Thank you.
</#assign>
<#assign text = strings.password_created_email_text(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress) />
<@email subject=subject html=html text=text />

View file

@ -2,42 +2,20 @@
<#-- Confirmation that a password has been reset. -->
<#assign subject = "Your ${siteName} password changed." />
<#assign strings = i18n() />
<#assign html>
<html>
<head>
<title>${subject}</title>
</head>
<body>
<p>
${userAccount.firstName} ${userAccount.lastName}
</p>
<p>
<strong>Password successfully changed.</strong>
</p>
<p>
Your new password associated with ${userAccount.emailAddress} has been changed.
</p>
<p>
Thank you.
</p>
</body>
</html>
</#assign>
<#assign subject = strings.password_reset_complete_subject(siteName) />
<#assign text>
${userAccount.firstName} ${userAccount.lastName}
<#assign html = strings.password_reset_complete_email_html(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress) />
Password successfully changed.
Your new password associated with ${userAccount.emailAddress}
has been changed.
Thank you.
</#assign>
<#assign text = strings.password_reset_complete_email_text(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress) />
<@email subject=subject html=html text=text />

View file

@ -2,60 +2,22 @@
<#-- Confirmation email for user account password reset -->
<#assign subject = "${siteName} reset password request" />
<#assign strings = i18n() />
<#assign html>
<html>
<head>
<title>${subject}</title>
</head>
<body>
<p>
Dear ${userAccount.firstName} ${userAccount.lastName}:
</p>
<p>
We have received a request to reset the password for your ${siteName} account (${userAccount.emailAddress}).
</p>
<p>
Please follow the instructions below to proceed with your password reset.
</p>
<p>
If you did not request this new account you can safely ignore this email.
This request will expire if not acted upon within 30 days.
</p>
<p>
Click on the link below or paste it into your browser's address bar to reset your password
using our secure server.
</p>
<p>${passwordLink}</p>
<p>Thank you!</p>
</body>
</html>
</#assign>
<#assign subject = strings.password_reset_pending_subject(siteName) />
<#assign text>
Dear ${userAccount.firstName} ${userAccount.lastName}:
We have received a request to reset the password for your ${siteName} account
(${userAccount.emailAddress}).
<#assign html = strings.password_reset_pending_email_html(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress,
passwordLink) />
Please follow the instructions below to proceed with your password reset.
If you did not request this new account you can safely ignore this email.
This request will expire if not acted upon within 30 days.
Paste the link below into your browser's address bar to reset your password
using our secure server.
${passwordLink}
Thank you!
</#assign>
<#assign text = strings.password_reset_pending_email_text(siteName,
subject,
userAccount.firstName,
userAccount.lastName,
userAccount.emailAddress,
passwordLink) />
<@email subject=subject html=html text=text />

View file

@ -2,45 +2,43 @@
<#-- Template for adding a user account -->
<h3>Reset your Password</h3>
<#assign strings = i18n() />
<p>Please enter your new password for ${userAccount.emailAddress}</p>
<h3>${strings.reset_your_password}</h3>
<#if errorPasswordIsEmpty??>
<#assign errorMessage = "No password supplied." />
</#if>
<#if errorPasswordIsWrongLength??>
<#assign errorMessage = "Password must be between ${minimumLength} and ${maximumLength} characters." />
</#if>
<#if errorPasswordsDontMatch??>
<#assign errorMessage = "Passwords do not match." />
</#if>
<#if errorMessage?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="Error alert icon"/>
<p>${errorMessage}</p>
</section>
</#if>
<p>${strings.enter_new_password(userAccount.emailAddress)}</p>
<#if errorPasswordIsEmpty??>
<#assign errorMessage = strings.error_no_password />
<#elseif errorPasswordIsWrongLength??>
<#assign errorMessage = strings.error_password_length(minimumLength, maximumLength) />
<#elseif errorPasswordsDontMatch??>
<#assign errorMessage = strings.error_password_mismatch />
</#if>
<#if errorMessage?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="${strings.alt_error_alert}"/>
<p>${errorMessage}</p>
</section>
</#if>
<section id="reset-password" role="region">
<form method="POST" action="${formUrls.resetPassword}" class="customForm" role="create password">
<input type="hidden" name="user" value="${userAccount.emailAddress}" />
<input type="hidden" name="key" value="${userAccount.passwordLinkExpiresHash}" />
<label for="new-password">Password<span class="requiredHint"> *</span></label>
<label for="new-password">${strings.new_password}<span class="requiredHint"> *</span></label>
<input type="password" name="newPassword" value="${newPassword}" id="new-password" role="input" />
<p class="note">Minimum of ${minimumLength} characters in length.</p>
<p class="note">${strings.minimum_password_length(minimumLength)}</p>
<label for="confirm-password">Confirm Password<span class="requiredHint"> *</span></label>
<label for="confirm-password">${strings.confirm_password}<span class="requiredHint"> *</span></label>
<input type="password" name="confirmPassword" value="${confirmPassword}" id="confirm-password" role="input" />
<p><input type="submit" name="submit" value="Save changes" class="submit" /></p>
<p><input type="submit" name="submit" value="${strings.save_changes}" class="submit"/></p>
<p class="requiredHint">* required fields</p>
<p class="requiredHint">* ${strings.required_fields}</p>
</form>
</section>

View file

@ -21,20 +21,22 @@ ${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/uploadImages.cs
</#macro>-->
<#assign i18n = i18n() >
<section id="photoCroppingContainer" role="region">
<h2>Photo Upload</h2>
<h2>${i18n.upload_heading}</h2>
<!-- This is the image we're attaching Jcrop to -->
<section id="photoCroppingPreview" role="region">
<p class="photoCroppingTitleBody">Your profile photo will look like the image below. </p>
<p class="photoCroppingTitleBody">${i18n.cropping_caption}</p>
<section class="photoCroppedPreview" role="region">
<img src="${imageUrl}" id="preview" alt="Image to be cropped"/>
<img src="${imageUrl}" id="preview" alt="${i18n.alt_image_to_crop}"/>
</section>
<section id="photoCroppingHowTo" role="region">
<p class="photoCroppingNote">To make adjustments, you can drag around and resize the photo to the right. When you are happy with your photo click the "Save Photo" button. </p>
<p class="photoCroppingNote">${i18n.cropping_note}</p>
<form id="cropImage" action="${formAction}" method="post" role="form">
<!-- Javascript will populate these values -->
@ -43,15 +45,15 @@ ${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/uploadImages.cs
<input type="hidden" name="w" value="" />
<input type="hidden" name="h" value="" />
<input class="submit" type="submit" value="Save photo">
<input class="submit" type="submit" value="${i18n.submit_save}">
<span class="or"> or <a class="cancel" href="${cancelUrl}" title="cancel">Cancel</a></span>
<span class="or"> ${i18n.or} <a class="cancel" href="${cancelUrl}" title="${i18n.cancel_title}">${i18n.cancel_link}</a></span>
</form>
</section>
</section>
<section id="photoCropping" role="region">
<img src="${imageUrl}" id="cropbox" alt="Preview of photo cropped" />
<img src="${imageUrl}" id="cropbox" alt="${i18n.alt_preview_crop}" />
</section
</section>

View file

@ -7,29 +7,35 @@ ${scripts.add('<script type="text/javascript" src="${urls.base}/js/jquery.js"></
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/uploadImages.css" />')}
<#assign i18n = i18n() >
<section id="photoUploadContainer" role="region">
<h2>Photo Upload</h2>
<h2>${i18n.upload_heading}</h2>
<#if errorMessage??>
<section id="error-alert" role="alert"><img src="${urls.images}/iconAlert.png" alt="Error alert icon" />
<section id="error-alert" role="alert"><img src="${urls.images}/iconAlert.png" alt="${i18n.alt_error_alert}" />
<p>${errorMessage}</p>
</section>
</#if>
<section id="photoUploadDefaultImage" role="region">
<h3>Current Photo</h3>
<h3>${i18n.current_photo}</h3>
<img src="${thumbnailUrl}" width="115" height="115" alt="Individual photo" />
<img src="${thumbnailUrl}" width="115" height="115" alt="${i18n.alt_thumbnail_photo}" />
</section>
<form id="photoUploadForm" action="${formAction}" enctype="multipart/form-data" method="post" role="form">
<label>Upload a photo <span> (JPEG, GIF or PNG)</span></label>
<label>${i18n.upload_photo} <span>${i18n.photo_types}</span></label>
<input id="datafile" type="file" name="datafile" size="30" />
<p class="note">Maximum file size: ${maxFileSize} megabytes<br />
Minimum image dimensions: ${thumbnailWidth} x ${thumbnailHeight} pixels</p>
<input class="submit" type="submit" value="Upload photo"/>
<p class="note">${i18n.maximum_file_size(maxFileSize)}<br />
${i18n.minimum_image_dimensions(thumbnailWidth, thumbnailHeight)}</p>
<input class="submit" type="submit" value="${i18n.submit_upload}"/>
<span class="or"> or <a class="cancel" href="${cancelUrl}" title="cancel">Cancel</a></span>
<span class="or"> ${i18n.or} <a class="cancel" href="${cancelUrl}" title="${i18n.cancel_title}">${i18n.cancel_link}</a></span>
</form>
</section>
</section>
<script type="text/javascript">
i18n_confirmDelete = ${i18n.confirm_delete}
</script>

View file

@ -7,30 +7,36 @@ ${scripts.add('<script type="text/javascript" src="${urls.base}/js/jquery.js"></
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/uploadImages.css" />')}
<#assign i18n = i18n() >
<section id="photoUpload" role="region">
<h2>Photo Upload</h2>
<h2>${i18n.upload_heading}</h2>
<#if errorMessage??>
<section id="error-alert" role="alert"><img src="${urls.images}/iconAlert.png" alt="Error alert icon" />
<section id="error-alert" role="alert"><img src="${urls.images}/iconAlert.png" alt="${i18n.alt_error_alert}" />
<p>${errorMessage}</p>
</section>
</#if>
<section id="photoUploadDefaultImage" role="region">
<h3>Current Photo</h3>
<img src="${thumbnailUrl}" width="115" alt="Individual photo" />
<h3>${i18n.current_photo}</h3>
<img src="${thumbnailUrl}" width="115" alt="${i18n.alt_thumbnail_photo}" />
<a class="thumbnail" href="${deleteUrl}">Delete photo</a>
<a class="thumbnail" href="${deleteUrl}">${i18n.delete_link}</a>
</section>
<form id="photoUploadForm" action="${formAction}" enctype="multipart/form-data" method="post" role="form">
<label>Replace Photo <span> (JPEG, GIF or PNG)</span></label>
<label>${i18n.replace_photo} <span>${i18n.photo_types}</span></label>
<input type="file" name="datafile" size="30">
<p class="note">Maximum file size: ${maxFileSize} megabytes<br />
Minimum image dimensions: ${thumbnailWidth}x${thumbnailHeight} pixels</p>
<input class="submit" type="submit" value="Upload photo">
<p class="note">${i18n.maximum_file_size(maxFileSize)}<br />
${i18n.minimum_image_dimensions(thumbnailWidth, thumbnailHeight)}</p>
<input class="submit" type="submit" value="${i18n.submit_upload}">
<span class="or"> or <a class="cancel" href="${cancelUrl}" title="cancel">Cancel</a></span>
<span class="or"> ${i18n.or} <a class="cancel" href="${cancelUrl}" title="${i18n.cancel_title}">${i18n.cancel_link}</a></span>
</form>
</section>
</section>
<script type="text/javascript">
i18n_confirmDelete = "${i18n.confirm_delete}"
</script>

View file

@ -77,3 +77,7 @@ ${headScripts.add('<script type="text/javascript" src="${urls.base}/js/jquery_pl
${scripts.add('<script type="text/javascript" src="${urls.base}/js/imageUpload/imageUploadUtils.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/individualUriRdf.js"></script>')}
<script type="text/javascript">
i18n_confirmDelete = "${i18n().confirm_delete}"
</script>

View file

@ -9,14 +9,12 @@
<#-- This is included by identity.ftl -->
<#if selectLocale??>
<li>
<form method="get" action="${selectLocale.selectLocaleUrl}" >
<#list selectLocale.locales as locale>
<button type="submit" name="selection" value="${locale.code}">
<img src="${locale.imageUrl}" height="15" align="middle" alt="${locale.label}"/>
</button>
<#if locale_has_next>|</#if>
</#list>
</form>
<#list selectLocale.locales as locale>
<a href="${selectLocale.selectLocaleUrl}?selection=${locale.code}">
<img src="${locale.imageUrl}" height="15" align="middle" alt="${locale.label}"/>
</a>
<#if locale_has_next>|</#if>
</#list>
</li>
</#if>