Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Create request join and update role dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Eng committed Mar 17, 2015
1 parent 1719dfb commit a9d3eac
Show file tree
Hide file tree
Showing 8 changed files with 127 additions and 89 deletions.
Expand Up @@ -52,77 +52,68 @@ public class LanguageJoinUpdateRoleAction implements Serializable {
private static final String EMAIL_TYPE_REQUEST_ROLE =
"request_role_language";

@In
private SendEmailAction sendEmail;
@In
private Messages msgs;

@In
private LocaleMemberDAO localeMemberDAO;

@In(required = false, value = JpaIdentityStore.AUTHENTICATED_USER)
private HAccount authenticatedAccount;

@Getter
@Setter
private Boolean requestAsTranslator;

@Getter
@Setter
private Boolean requestAsReviewer;
private boolean requestAsTranslator;

@Getter
@Setter
private Boolean requestAsCoordinator;
private boolean requestAsReviewer;

@Getter
@Setter
private String emailType;
private boolean requestAsCoordinator;

@Setter
@Getter
private String language;

private String title;

private String subject;
@In(value = JpaIdentityStore.AUTHENTICATED_USER, required = false)
private HAccount authenticatedAccount;

public boolean hasRoleRequest() {
public boolean hasSelectedRole() {
return requestAsTranslator || requestAsReviewer || requestAsCoordinator;
}

public String getSubject() {
if (emailType.equals(EMAIL_TYPE_REQUEST_JOIN)) {
subject =
msgs.format("jsf.email.joinrequest.Subject",
sendEmail.getFromLoginName(),
sendEmail.getLocale().getLocaleId().getId());
} else {
subject =
msgs.format("jsf.email.rolerequest.Subject",
sendEmail.getFromLoginName(),
sendEmail.getLocale().getLocaleId().getId());
public void bindRole(String role, boolean checked) {
if(role.equals("translator")) {
requestAsTranslator = checked;
} else if(role.equals("reviewer")) {
requestAsReviewer = checked;
} else if(role.equals("coordinator")) {
requestAsCoordinator = checked;
}
return subject;
}

public String getTitle() {
public String getSubject(String emailType) {
if (emailType.equals(EMAIL_TYPE_REQUEST_JOIN)) {
title =
msgs
.format("jsf.RequestToJoinLanguageTeamTitle",
sendEmail.getLocale().getLocaleId().getId());
return msgs.format("jsf.email.joinrequest.Subject",
getLoginName(), getLocaleId().getId());
} else {
title =
msgs
.format("jsf.RequestRoleLanguageTeamTitle",
sendEmail.getLocale().getLocaleId().getId());
return msgs.format("jsf.email.rolerequest.Subject",
getLoginName(), getLocaleId().getId());
}
return title;
}

private String getLoginName() {
if(authenticatedAccount != null) {
return authenticatedAccount.getUsername();
}
return "";
}

private LocaleId getLocaleId() {
return new LocaleId(language);
}

public boolean requestingTranslator() {
return requestAsTranslator != null && requestAsTranslator && !isTranslator();
return requestAsTranslator && !isTranslator();
}

public boolean isTranslator() {
Expand All @@ -134,7 +125,7 @@ public boolean isTranslator() {
}

public boolean requestingReviewer() {
return requestAsReviewer != null && requestAsReviewer && !isReviewer();
return requestAsReviewer && !isReviewer();
}

public boolean isReviewer() {
Expand All @@ -146,7 +137,7 @@ public boolean isReviewer() {
}

public boolean requestingCoordinator() {
return requestAsCoordinator != null && requestAsCoordinator && !isCoordinator();
return requestAsCoordinator && !isCoordinator();
}

public boolean isCoordinator() {
Expand Down
Expand Up @@ -225,11 +225,11 @@ public String send() {
locale.getLocaleId().getId(),
localeNativeName, htmlMessage,
languageJoinUpdateRoleAction
.getRequestAsTranslator(),
.isRequestAsTranslator(),
languageJoinUpdateRoleAction
.getRequestAsReviewer(),
.isRequestAsReviewer(),
languageJoinUpdateRoleAction
.getRequestAsCoordinator());
.isRequestAsCoordinator());
String msg = emailServiceImpl.sendToLanguageCoordinators(
locale, strategy);
FacesMessages.instance().add(msg);
Expand Down
6 changes: 3 additions & 3 deletions zanata-war/src/main/resources/messages.properties
Expand Up @@ -769,7 +769,7 @@ jsf.Loading=Loading...
jsf.AlreadyInTeam=Already in Team
jsf.Reviewer=Reviewer
jsf.Translator=Translator
jsf.RequestRoleAs=Request the following roles in the "{0}" language team:
jsf.RequestRoleAs=Please select your role:
jsf.MemberOfTeam=You are now a member of the {0} language team
jsf.LeftTeam=You have left the {0} language team
jsf.AddedAPermission={0} has been made a {1}
Expand Down Expand Up @@ -1159,8 +1159,8 @@ jsf.email.joingrouprequest.AdditionalInfoMessage=To ensure your request is proce
!FIXME make key similar to related keys
jsf.email.RequestToJoinLanguageTeam.title=Request to join {0} [{1}] language team
jsf.email.JoinGroupRequest.Subject=Request to join group "{0}"
jsf.email.joinrequest.Subject=User "{0}" wants to join the "{1}" language team
jsf.email.rolerequest.Subject=User "{0}" request for additional role in "{1}" language team
jsf.email.joinrequest.Subject=User:{0} request to join [{1}] language team
jsf.email.rolerequest.Subject=User:{0} request for additional role in [{1}] language team
jsf.email.AdditionalInfoMessage=To ensure your request is processed without delay, please provide any additional information that will help the team coordinators identify you and process your request.

jsf.message.admin.inquiry.subject=Inquiry on Zanata
Expand Down
Expand Up @@ -8,13 +8,12 @@

<script>
$(document).ready(function() {
jQuery(getContactAdminForm()).find('#' + jqSelector('#{rich:clientId('subject')}')).
jQuery('#' + jqSelector('#{rich:clientId('contact-admin-subject')}')).
val('#{msgs['jsf.message.admin.inquiry.subject']}');
});

function cancelContactAdmin() {
jQuery(getContactAdminForm()).find('#' + jqSelector('#{rich:clientId('message')}')).
val('');
jQuery('#' + jqSelector('#{rich:clientId('contact-admin-message')}')).val('');

jQuery(getContactAdminForm()).find('#send-button').removeClass('is-active');
return false;
Expand All @@ -38,10 +37,10 @@
</header>

<h:form id="contactAdminForm" styleClass="l--push-bottom-0">
<h:inputHidden id="subject" value="#{contactAdminAction.subject}"/>
<h:inputHidden id="contact-admin-subject" value="#{contactAdminAction.subject}"/>
<div class="modal__content l--pad-all-1">
<s:decorate id="messageField" template="../field.xhtml">
<h:inputTextarea id="message" value="#{contactAdminAction.htmlMessage}"
<h:inputTextarea id="contact-admin-message" value="#{contactAdminAction.htmlMessage}"
required="true">
<a4j:ajax event="blur" render="messageField" execute="@this"/>
</h:inputTextarea>
Expand Down
Expand Up @@ -8,19 +8,16 @@

<script>
$(document).ready(function() {
jQuery(getContactCoordinatorForm()).find('#' + jqSelector('#{rich:clientId('emailType')}')).
jQuery('#' + jqSelector('#{rich:clientId('contact-coordinator-emailType')}')).
val('contact_coordinator');
jQuery(getContactCoordinatorForm()).find('#' + jqSelector('#{rich:clientId('subject')}')).
jQuery('#' + jqSelector('#{rich:clientId('contact-coordinator-subject')}')).
val('#{msgs.format('jsf.message.coordinator.inquiry.subject', id, displayName)}');
jQuery(getContactCoordinatorForm()).find('#' + jqSelector('#{rich:clientId('id')}')).
val('#{id}');
jQuery('#' + jqSelector('#{rich:clientId('contact-coordinator-id')}')).val('#{id}');
});

function cancelContactCoordinator() {
jQuery(getContactCoordinatorForm()).find('#' + jqSelector('#{rich:clientId('id')}')).
val('');
jQuery(getContactCoordinatorForm()).find('#' + jqSelector('#{rich:clientId('message')}')).
val('');
jQuery('#' + jqSelector('#{rich:clientId('contact-coordinator-id')}')).val('');
jQuery('#' + jqSelector('#{rich:clientId('contact-coordinator-message')}')).val('');
jQuery(getContactAdminForm()).find('#send-button').removeClass('is-active');

return false;
Expand All @@ -44,13 +41,13 @@
</header>

<h:form id="contactCoordinatorForm" styleClass="l--push-bottom-0">
<h:inputHidden id="emailType" value="#{sendEmail.emailType}"/>
<h:inputHidden id="id" value="#{sendEmail.language}" />
<h:inputHidden id="subject" value="#{sendEmail.subject}"/>
<h:inputHidden id="contact-coordinator-emailType" value="#{sendEmail.emailType}"/>
<h:inputHidden id="contact-coordinator-id" value="#{sendEmail.language}" />
<h:inputHidden id="contact-coordinator-subject" value="#{sendEmail.subject}"/>

<div class="modal__content l--pad-all-1">
<s:decorate id="messageField" template="../field.xhtml">
<h:inputTextarea id="message" value="#{sendEmail.htmlMessage}"
<h:inputTextarea id="contact-coordinator-message" value="#{sendEmail.htmlMessage}"
required="true" styleClass="l--push-bottom-0">
<a4j:ajax event="blur" render="messageField" execute="@this"/>
</h:inputTextarea>
Expand Down
Expand Up @@ -65,6 +65,15 @@
<i class="i i--plus i__item__icon"></i>
</s:link>
</li>

<li>
<a href="#" class="i__item--right"
data-toggle="modal" onclick="return false;"
data-target="#joinLanguageDialog">
#{msgs['jsf.RequestToJoinLanguageTeam']}
<i class="i i--plus i__item__icon"></i>
</a>
</li>
</s:fragment>

<s:fragment
Expand Down Expand Up @@ -242,6 +251,12 @@
actionBean="#{languageAction.membersFilter}"/>

</div>
<s:fragment rendered="#{identity.loggedIn and not languageAction.isUserInTeam()}">
<ui:include src="request_join_modal.xhtml">
<ui:param name="id" value="#{languageAction.language}" />
<ui:param name="displayName" value="#{languageAction.locale.retrieveDisplayName()}" />
</ui:include>
</s:fragment>

<s:fragment
rendered="#{s:hasPermission(languageAction.locale, 'manage-language-team')}">
Expand Down
Expand Up @@ -3,24 +3,28 @@
xmlns:s="http://jboss.org/schema/seam/taglib"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
class="modal" id="requestJoinLanguageDialog" tabindex="-1" role="dialog"
xmlns:zanata="http://java.sun.com/jsf/composite/zanata"
class="modal" id="joinLanguageDialog" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel" aria-hidden="true">

<script>
//USED to determine email type for sendEmail bean
var EMAIL_TYPE = 'request_join_language';

$(document).ready(function() {
document.getElementById('#{rich:clientId('emailType')}').value = EMAIL_TYPE;
document.getElementById('#{rich:clientId('id')}').value = '#{id}';
jQuery('#' + jqSelector('#{rich:clientId('request-join-emailType')}')).
val('request_join_language');
jQuery('#' + jqSelector('#{rich:clientId('request-join-subject')}')).
val('#{languageJoinUpdateRoleAction.getSubject('request_join_language')}');
jQuery('#' + jqSelector('#{rich:clientId('request-join-id')}')).val('#{id}');
});

function cancelEmail() {
document.getElementById('#{rich:clientId('emailType')}').value = '';
document.getElementById('#{rich:clientId('id')}').value = '';
document.getElementById('#{rich:clientId('message')}').value = '';
function getJoinLanguageForm() {
return jQuery('#' + jqSelector('#{rich:clientId('joinLanguageForm')}'));
}

jQuery('#{rich:clientId('send')}').removeClass('is-active');
function cancelJoinLanguage() {
jQuery('#' + jqSelector('#{rich:clientId('request-join-id')}')).val('');
jQuery('#' + jqSelector('#{rich:clientId('request-join-message')}')).val('');
jQuery(getJoinLanguageForm()).find('#send-button').removeClass('is-active');
//reset all checkboxes
return false;
}
</script>
Expand All @@ -32,43 +36,74 @@
</h2>
<button type="button"
class="modal__close button--link"
data-dismiss="modal" onclick="cancelEmail();return false;">
data-dismiss="modal" onclick="cancelJoinLanguage();return false;">
<i class="i i--huge i--cancel"></i>
</button>
</header>

<h:form id="contactCoordinatorForm" styleClass="l--push-bottom-0">
<h:inputHidden id="emailType" value="#{sendEmail.emailType}"/>
<h:inputHidden id="id" value="#{sendEmail.language}" />
<h:inputHidden id="subject" value="#{sendEmail.subject}"/>
<h:form id="joinLanguageForm" styleClass="l--push-bottom-0">
<h:inputHidden id="request-join-emailType" value="#{sendEmail.emailType}"/>
<h:inputHidden id="request-join-id" value="#{sendEmail.language}" />
<h:inputHidden id="request-join-subject" value="#{sendEmail.subject}"/>

<a4j:jsFunction name="bindRole" action="#{languageJoinUpdateRoleAction.bindRole(key, checked)}"
limitRender="true" render="request-join-buttons">
<a4j:param name="val1" assignTo="#{key}"/>
<a4j:param name="val2" assignTo="#{checked}"/>
</a4j:jsFunction>

<a4j:jsFunction name="sendJoinLanguageEmail" action="#{sendEmail.send}"
execute="@form" oncomplete="jQuery(getJoinLanguageForm()).find('#cancel-button').click()"/>

<div class="modal__content l--pad-all-1">
<div class="form__item">
<span class="l--push-bottom-quarter">#{msgs['jsf.RequestRoleAs']}</span>
<s:fragment rendered="#{!languageJoinUpdateRoleAction.isTranslator()}">
<zanata:checkbox id="translatorChk" value="translator"
checked="#{languageJoinUpdateRoleAction.requestAsTranslator}"
onValueChanged="bindRole" label="#{msgs['jsf.Translator']}"/>
</s:fragment>

<s:fragment rendered="#{!languageJoinUpdateRoleAction.isReviewer()}">
<zanata:checkbox value="reviewer" checked="#{languageJoinUpdateRoleAction.requestAsReviewer}"
onValueChanged="bindRole" label="#{msgs['jsf.Reviewer']}"/>
</s:fragment>

<s:fragment rendered="#{!languageJoinUpdateRoleAction.isCoordinator()}">
<zanata:checkbox value="coordinator" checked="#{languageJoinUpdateRoleAction.requestAsCoordinator}"
onValueChanged="bindRole" label="#{msgs['jsf.Coordinator']}"/>
</s:fragment>
</div>

<s:decorate id="messageField" template="../field.xhtml">
<h:inputTextarea id="message" value="#{sendEmail.htmlMessage}"
<h:inputTextarea id="request-join-message" value="#{sendEmail.htmlMessage}"
required="true" styleClass="l--push-bottom-0">
<a4j:ajax event="blur" render="messageField" execute="@this"/>
</h:inputTextarea>
</s:decorate>
</div>

<a4j:jsFunction name="sendContactCoordinatorEmail" action="#{sendEmail.send}"
oncomplete="jQuery('#cancel').click()"/>

<footer class="modal__footer l--pad-h-1 l--pad-v-half bg--highest">
<div class="g--tight">
<div class="g__item w--2-3"/>
<div class="g__item w--1-3 txt--align-right">
<button id="cancel" onclick="cancelEmail();return false;"
<s:div id="request-join-buttons" styleClass="g__item w--1-3 txt--align-right">
<h:outputScript rendered="#{not languageJoinUpdateRoleAction.hasSelectedRole()}">
$(document).ready(function() {
jQuery(getJoinLanguageForm()).find('#send-button').attr('disabled', true);
});
</h:outputScript>

<button id="cancel-button" onclick="cancelJoinLanguage();return false;"
class="cancel button--link l--push-right-half"
data-dismiss="modal">
#{msgs['jsf.Cancel']}
</button>

<button id="send" class="button loader button--primary"
onclick="sendContactCoordinatorEmail()">
<button id="send-button" class="button loader button--primary"
onclick="sendJoinLanguageEmail()">
<span class="loader__label">#{msgs['jsf.email.Send']}</span>
</button>
</div>
</s:div>
</div>
</footer>
</h:form>
Expand Down
1 change: 1 addition & 0 deletions zanata-war/src/main/webapp/WEB-INF/pages.xml
Expand Up @@ -438,6 +438,7 @@

<page view-id="/language/language.xhtml">
<param name="id" value="#{languageAction.language}" />
<param name="id" value="#{languageJoinUpdateRoleAction.language}" />
</page>

<page view-id="/language/request_to_join_update_role.xhtml">
Expand Down

0 comments on commit a9d3eac

Please sign in to comment.