Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
PERFORMA_REPLICA
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Muhammad Usman
PERFORMA_REPLICA
Commits
d704e5ff
Commit
d704e5ff
authored
Dec 12, 2017
by
Nilu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
C002, Auto save.
parent
9ed66a9d
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
214 additions
and
53 deletions
+214
-53
CompleteApplicationFP.java
cmsWebApp/src/performa/form/CompleteApplicationFP.java
+9
-1
ValidateApplicationFP.java
cmsWebApp/src/performa/form/ValidateApplicationFP.java
+49
-0
JobApplication.java
cmsWebApp/src/performa/orm/JobApplication.java
+8
-0
Utils.java
cmsWebApp/src/performa/utils/Utils.java
+1
-1
CustomServlets_applicantPortal.xml
...nsions/applicantportal/CustomServlets_applicantPortal.xml
+5
-0
application_outline.jsp
...ebroot/extensions/applicantportal/application_outline.jsp
+4
-2
application_main_tabs.jsp
.../extensions/applicantportal/inc/application_main_tabs.jsp
+6
-5
save_assessment_criteria_answers.jsp
.../applicantportal/inc/save_assessment_criteria_answers.jsp
+39
-0
messagesOverride.txt
.../extensions/applicantportal/messages/messagesOverride.txt
+2
-1
selection_criteria.jsp
...webroot/extensions/applicantportal/selection_criteria.jsp
+91
-43
No files found.
cmsWebApp/src/performa/form/CompleteApplicationFP.java
View file @
d704e5ff
...
...
@@ -59,11 +59,19 @@ public class CompleteApplicationFP extends SaveFP
public
void
validate
(
ORMProcessState
process
,
SubmissionDetails
submission
,
MultiException
exceptions
,
Map
params
)
throws
StorageException
{
HttpServletRequest
request
=
submission
.
getRequest
();
ObjectTransaction
objTran
=
ObjectTransaction
.
getTransaction
();
JobApplication
jobApplication
=
(
JobApplication
)
process
.
getAttribute
(
"JobApplication"
);
if
(!
jobApplication
.
cultureCompleted
())
{
BusinessObjectParser
.
assertFieldCondition
(
jobApplication
.
getCandidate
().
getCultureCriteriaAnswersCount
()>
0
,
jobApplication
,
jobApplication
.
FIELD_ObjectID
,
"completeCulture"
,
exceptions
,
true
,
request
);
BusinessObjectParser
.
assertFieldCondition
(
jobApplication
.
getCandidate
().
getCultureCriteriaAnswersCount
()>
0
,
jobApplication
,
JobApplication
.
FIELD_ObjectID
,
"completeCulture"
,
exceptions
,
true
,
request
);
}
if
(
jobApplication
.
isIncludeAssessmentCriteria
())
{
JobApplication
application
=
jobApplication
.
getInTransaction
(
objTran
);
BusinessObjectParser
.
assertFieldCondition
(
jobApplication
.
getJob
().
getAssessmentCriteriasCount
()
==
application
.
getAssessmentCriteriaAnswersCount
(),
jobApplication
,
JobApplication
.
FIELD_ObjectID
,
"completeAssessment"
,
exceptions
,
true
,
request
);
}
super
.
validate
(
process
,
submission
,
exceptions
,
params
);
...
...
cmsWebApp/src/performa/form/ValidateApplicationFP.java
0 → 100644
View file @
d704e5ff
package
performa
.
form
;
import
java.util.Map
;
import
javax.servlet.http.HttpServletRequest
;
import
oneit.objstore.ObjectTransaction
;
import
oneit.objstore.StorageException
;
import
oneit.objstore.parser.BusinessObjectParser
;
import
oneit.servlets.forms.SubmissionDetails
;
import
oneit.servlets.forms.SuccessfulResult
;
import
oneit.servlets.process.ORMProcessState
;
import
oneit.servlets.process.ProcessRedirectResult
;
import
oneit.servlets.process.SaveFP
;
import
oneit.utils.BusinessException
;
import
oneit.utils.Debug
;
import
oneit.utils.MultiException
;
import
performa.orm.JobApplication
;
public
class
ValidateApplicationFP
extends
SaveFP
{
@Override
public
SuccessfulResult
processForm
(
ORMProcessState
process
,
SubmissionDetails
submission
,
Map
params
)
throws
BusinessException
,
StorageException
{
return
new
ProcessRedirectResult
((
String
)
submission
.
getRequest
().
getAttribute
(
"nextPage"
),
new
String
[
0
]);
}
@Override
public
void
validate
(
ORMProcessState
process
,
SubmissionDetails
submission
,
MultiException
exceptions
,
Map
params
)
throws
StorageException
{
super
.
validate
(
process
,
submission
,
exceptions
,
params
);
HttpServletRequest
request
=
submission
.
getRequest
();
ObjectTransaction
objTran
=
ObjectTransaction
.
getTransaction
();
JobApplication
jobApplication
=
(
JobApplication
)
process
.
getAttribute
(
"JobApplication"
);
boolean
fromRequirements
=
request
.
getAttribute
(
"fromRequirements"
)
!=
null
?
(
boolean
)
request
.
getAttribute
(
"fromRequirements"
):
false
;
Debug
.
assertion
(
jobApplication
!=
null
,
"No jobApplication found . Call from "
+
getClass
().
getName
());
if
(
jobApplication
.
isIncludeAssessmentCriteria
()
&&
fromRequirements
)
{
JobApplication
application
=
jobApplication
.
getInTransaction
(
objTran
);
BusinessObjectParser
.
assertFieldCondition
(
jobApplication
.
getJob
().
getAssessmentCriteriasCount
()
==
application
.
getAssessmentCriteriaAnswersCount
(),
jobApplication
,
JobApplication
.
FIELD_ObjectID
,
"completeAssessment"
,
exceptions
,
true
,
request
);
}
}
}
\ No newline at end of file
cmsWebApp/src/performa/orm/JobApplication.java
View file @
d704e5ff
...
...
@@ -187,6 +187,14 @@ public class JobApplication extends BaseJobApplication
}
public
AssessmentCriteriaAnswer
getAssessmentCriteriaAnswer
(
AssessmentCriteria
criteria
)
{
Filter
<
AssessmentCriteriaAnswer
>
filter
=
AssessmentCriteriaAnswer
.
SearchByAll
().
andAssessmentCriteria
(
new
EqualsFilter
<>(
criteria
));
return
pipelineJobApplication
().
toAssessmentCriteriaAnswers
(
filter
).
val
();
}
public
boolean
selectionCompleted
()
//req
{
if
(
getJob
()!=
null
&&
getJob
().
getIncludeAssessmentCriteria
()!=
Boolean
.
TRUE
)
...
...
cmsWebApp/src/performa/utils/Utils.java
View file @
d704e5ff
...
...
@@ -339,7 +339,7 @@ public class Utils
{
SecUser
secUser
=
SecUser
.
searchNAME
(
objTran
,
email
.
toLowerCase
());
if
(
isCandidate
)
if
(
isCandidate
&&
secUser
!=
null
)
{
Candidate
candidate
=
secUser
.
getExtension
(
Candidate
.
REFERENCE_Candidate
);
...
...
cmsWebApp/webroot/extensions/applicantportal/CustomServlets_applicantPortal.xml
View file @
d704e5ff
...
...
@@ -7,6 +7,7 @@
<ApplicantAccountCreatedEmailer
factory=
"Participant"
class=
"oneit.email.ConfigurableArticleTemplateEmailer"
templateShortcut=
"ApplicantAccountCreatedMail"
/>
</FORM>
<FORM
name=
"*.completeApplication"
factory=
"Participant"
class=
"performa.form.CompleteApplicationFP"
/>
<FORM
name=
"*.validateApplication"
factory=
"Participant"
class=
"performa.form.ValidateApplicationFP"
/>
<FORM
name=
"*.saveAndExitExperienece"
factory=
"Participant"
class=
"performa.form.SaveAndExitExperienceFP"
/>
<FORM
name=
"*.saveAndExitCulture"
factory=
"Participant"
class=
"performa.form.SaveAndExitCultureFP"
/>
<FORM
name=
"*.saveAndExitWorkStyle"
factory=
"Participant"
class=
"performa.form.SaveAndExitWorkStypeFP"
/>
...
...
@@ -43,4 +44,8 @@
<NODE
name=
"save_job_match_answers_jsp"
factory=
"Participant"
>
<INHERITS
factory=
"Named"
nodename=
"CoreORMAdminNoPriv"
/>
</NODE>
<NODE
name=
"save_assessment_criteria_answers_jsp"
factory=
"Participant"
>
<INHERITS
factory=
"Named"
nodename=
"CoreORMAdminNoPriv"
/>
</NODE>
</OBJECTS>
cmsWebApp/webroot/extensions/applicantportal/application_outline.jsp
View file @
d704e5ff
...
...
@@ -223,9 +223,11 @@
else
{
%>
<oneit:button value="<%= btnText %>" name="
gotoPag
e" skin="link" cssClass="box-btn"
<oneit:button value="<%= btnText %>" name="
sav
e" skin="link" cssClass="box-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.mapEntry("attribNamesToRestore", Collections.singleton("JobApplication"))
.mapEntry("restartProcess", Boolean.TRUE)
.mapEntry(NotificationUtils.DISPLAY_NOTIFICATION_PARAM, false)
.toMap() %>"/>
<%
}
...
...
cmsWebApp/webroot/extensions/applicantportal/inc/application_main_tabs.jsp
View file @
d704e5ff
...
...
@@ -17,6 +17,8 @@
Boolean isSelectionComplete = jobApplication.selectionCompleted(); //REQ
Boolean isCultureComplete = jobApplication.cultureCompleted();
Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
boolean fromRequirements = pageNumber == "1";
%>
<oneit:dynIncluded>
...
...
@@ -40,21 +42,20 @@
}
%>
<li class="<%= pageNumber == "2" ? "active" : isCultureComplete ? "complate" : ""%>">
<oneit:button value=" " name="
gotoPage"
skin="link" disabled="<%= isCultureComplete ? "true" : "false"%>"
<oneit:button value=" " name="
validateApplication"
skin="link" disabled="<%= isCultureComplete ? "true" : "false"%>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", secondPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.mapEntry("fromRequirements", fromRequirements)
.toMap() %>">
<span><%= isCultureComplete ? "<img src=\"images/right-mark.png\" />" : (includeAssessment ? "2" : "1")%></span>
<div class="mobile-hide">Workplace Preferences</div>
</oneit:button>
</li>
<li class="<%= pageNumber == "3" ? "active" : isAssesmentComplete ? "complate" : ""%>">
<oneit:button value=" " name="
save"
skin="link" disabled="<%= isAssesmentComplete ? "true" : "false"%>"
<oneit:button value=" " name="
validateApplication"
skin="link" disabled="<%= isAssesmentComplete ? "true" : "false"%>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", thirdPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry(NotificationUtils.DISPLAY_NOTIFICATION_PARAM, false)
.mapEntry("attribNamesToRestore", Collections.singleton("JobApplication"))
.mapEntry("fromRequirements", fromRequirements)
.toMap() %>">
<span><%= isAssesmentComplete ? "<img src=\"images/right-mark.png\" />" : (includeAssessment ? "3" : "2")%></span>
<div class="mobile-hide">Your Work Style</div>
...
...
cmsWebApp/webroot/extensions/applicantportal/inc/save_assessment_criteria_answers.jsp
0 → 100644
View file @
d704e5ff
<%@ page extends="oneit.servlets.process.AJAXProcessJSP" %>
<%@ page import="oneit.servlets.jsp.*,oneit.servlets.orm.*,oneit.servlets.objstore.*,oneit.servlets.jsp.tabs.*,oneit.logging.*,oneit.sql.*,oneit.objstore.services.*" %>
<%@ page import="performa.orm.*,performa.orm.types.*,performa.utils.*, java.util.*, oneit.objstore.*, oneit.servlets.process.*, oneit.utils.*" %>
<%@ page import="oneit.utils.filter.Filter, oneit.objstore.rdbms.filters.EqualsFilter" %>
<%@ include file="../../../setuprequest.jsp" %>
<%! protected String getName (ServletConfig config) { return "save_assessment_criteria_answers_jsp"; } %>
<oneit:form method="POST">
<%
ORMProcessState process = (ORMProcessState)ProcessDecorator.getDefaultProcess(request);
ObjectTransaction objTran = ObjectTransaction.getTransaction();
Long criteriaID = Long.valueOf(request.getParameter ("criteriaID"));
boolean answerOption = Boolean.valueOf(request.getParameter ("answerOption"));
String note = request.getParameter ("note");
Long jobAppId = (Long) process.getAttribute("JobApplicationID");
JobApplication jobApplication = JobApplication.getJobApplicationByID(objTran, jobAppId);
jobApplication = (JobApplication) jobApplication.getInTransaction (objTran);
Debug.assertion (jobApplication.getObjectWriteability() == FieldWriteability.TRUE, "Must be able to edit");
AssessmentCriteria criteria = AssessmentCriteria.getAssessmentCriteriaByID(objTran, criteriaID);
AssessmentCriteriaAnswer answer = jobApplication.getAssessmentCriteriaAnswer(criteria);
if(answer == null)
{
answer = AssessmentCriteriaAnswer.createAssessmentCriteriaAnswer(objTran).getInTransaction (objTran);
jobApplication.addToAssessmentCriteriaAnswers(answer);
answer.setAssessmentCriteria(criteria);
}
answer.setAnswer(answerOption);
answer.setNotes(note);
%>
</oneit:form>
\ No newline at end of file
cmsWebApp/webroot/extensions/applicantportal/messages/messagesOverride.txt
View file @
d704e5ff
#completeCulture = Please complete the culture assessment.
#completeCulture = Please complete workplace preferences.
#completeAssessment = Please complete your experience.
#emailExists = An account already exists with this email address.
#emailSent = A verification email has been sent to you. Please check your email :).
#alreadyApplied = You have already applied for this job.
cmsWebApp/webroot/extensions/applicantportal/selection_criteria.jsp
View file @
d704e5ff
...
...
@@ -5,18 +5,35 @@
<oneit:dynIncluded>
<%
ObjectTransaction objTran = process.getTransaction ();
String nextPage = WebUtils.getSamePageInRenderMode(request, "WorkplaceCulture");
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
ObjectTransaction objTran = ObjectTransaction.getTransaction();
String nextPage = WebUtils.getSamePageInRenderMode(request, "WorkplaceCulture");
Long jobAppId = process.getAttribute("JobApplicationID") != null ?
(Long) process.getAttribute("JobApplicationID") :
((JobApplication) process.getAttribute("JobApplication")).getID().longValue();
JobApplication jobApplication = null;
if(jobAppId != null)
{
jobApplication = JobApplication.getJobApplicationByID(objTran, jobAppId);
}
if(jobApplication == null)
{
jobApplication = (JobApplication) process.getAttribute("JobApplication");
}
Debug.assertion(jobApplication != null, "Job Application cannot be null in applicant portal - selection criteria ");
if(process.getAttribute("JobApplicationID") == null)
{
process.setAttribute("JobApplicationID" , jobApplication.getID().longValue());
}
Job job = jobApplication.getJob();
String exitPage = WebUtils.getArticleLink(request, objTran, WebUtils.APPLY_JOB, "Page");
exitPage = exitPage + "&id=" + job.getID() + "&key=" + job.getRandomKey();
// Boolean alreadyCompletedCulture = (Boolean) process.getAttribute("AlreadyCompletedCulture");
// Boolean alreadyCompletedRole = (Boolean) process.getAttribute("AlreadyCompletedRole");
Boolean isCultureComplete = jobApplication.cultureCompleted();
Boolean isAssesmentComplete = jobApplication.assessmentCompleted();
boolean toRedirect = jobApplication.createAssessmentCriteriaObjects();
if(isCultureComplete && isAssesmentComplete)
{
...
...
@@ -26,13 +43,6 @@
{
nextPage = WebUtils.getSamePageInRenderMode(request, "JobMatchAssessment");
}
if (toRedirect)
{
%>
<%@ include file="/saferedirect.jsp" %>
<%
}
%>
<script type="text/javascript">
$(document).ready(function()
...
...
@@ -40,8 +50,43 @@
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
$('.first-element-focus').focus();
$('.timer').countimer({
displayMode: 1,
initMinutes: 0,
minuteIndicator: ' min ago',
leadingZeros: 0
});
});
function saveAnswer(criteriaID, answerOption, note)
{
ajaxProcessAddJQ ("<%= request.getContextPath() %>/extensions/applicantportal/inc/save_assessment_criteria_answers.jsp", 'form' ,
{criteriaID : criteriaID, answerOption: answerOption, note: note},
function () {},
function (jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 0) {
log("Empty Response. Status : " + jqXHR.status);
} else {
window.alert("Error processing request:" + errorThrown);
}
},
"POST");
if(answerOption === true)
{
$('#' + criteriaID).removeClass("hide");
$('#' + criteriaID).addClass("show");
}
else
{
$('#' + criteriaID).removeClass("show");
$('#' + criteriaID).addClass("hide");
}
$('.timer').countimer('start');
}
$(document.body).addClass('bg-color');
</script>
...
...
@@ -86,57 +131,58 @@
</p>
</div>
<%
FormTag applicationForm = FormTag.getActiveFormTag(request);
FormBuilder formBuilder = applicationForm.getFormBuilder();
boolean first = true;
for(CriteriaType ct: CriteriaType.getCriteriaTypeArray())
{
Collection<AssessmentCriteria
Answer> answerList = jobApplication.getACAnswers
ByType(ct);
Collection<AssessmentCriteria
> criteriaList = jobApplication.getJob().getAssessmentCritera
ByType(ct);
if(!
answer
List.isEmpty())
if(!
criteria
List.isEmpty())
{
%>
<div class="selection-br-line"></div>
<div class="main-sc-section">
<div class="selection-form-title"><oneit:toString value="<%= ct %>" mode="EscapeHTML"/></div>
<%
int total =
answer
List.size();
int total =
criteria
List.size();
int answerNo = 1;
for(AssessmentCriteria
Answer answer: answer
List)
for(AssessmentCriteria
criteria : criteria
List)
{
String optionKey = WebUtils.getInputKey(request, answer, AssessmentCriteriaAnswer.FIELD_Answer);
String formValue = formBuilder.fieldValue (optionKey, answer.getAnswer() == null ? "" : String.valueOf(answer.getAnswer()));
String trueID = answer.getObjectID() + "_Y";
String falseID = answer.getObjectID() + "_N";
String trueSelected = CollectionUtils.equals("true", formValue) ? "checked" : "";
String falseSelected = CollectionUtils.equals("false", formValue) ? "checked" : "";
String trueID = criteria.getObjectID() + "_Y";
String falseID = criteria.getObjectID() + "_N";
String trueSelected = "";
String falseSelected = "";
AssessmentCriteriaAnswer answer = jobApplication.getAssessmentCriteriaAnswer(criteria);
if(answer != null)
{
trueSelected = CollectionUtils.equals(answer.getAnswer(), Boolean.TRUE) ? "checked" : "";
falseSelected = CollectionUtils.equals(answer.getAnswer(), Boolean.FALSE) ? "checked" : "";
}
%>
<div class="form-group-new question-y-n">
<label class="second-label">
<oneit:toString value="<%=
answer.getAssessmentCriteria()
%>" mode="EscapeHTML"/>
<oneit:toString value="<%=
criteria
%>" mode="EscapeHTML"/>
</label>
<div class="radio radio-primary second-radio-primary">
<input type="radio" name="<%=
optionKey %>" value="true" id="<%= trueID%>" <%= trueSelected %> class="<%= first ? "first-element-focus" : ""%>
"/>
<label for="<%= trueID%>">
<input type="radio" name="<%=
criteria.getObjectID() %>" value="true" id="<%= trueID%>" <%= trueSelected %> class="<%= first ? "first-element-focus" : ""%>" onchange="saveAnswer(<%= criteria.getObjectID() %>, true)
"/>
<label for="<%= trueID
%>">
Yes
</label>
</div>
<div class="radio radio-primary second-radio-primary">
<input type="radio" name="<%=
optionKey %>" value="false" id="<%= falseID%>" <%= falseSelected %>
/>
<label for="<%= falseID%>">
<input type="radio" name="<%=
criteria.getObjectID() %>" value="false" id="<%= falseID%>" <%= falseSelected %> onchange="saveAnswer(<%= criteria.getObjectID() %>, false)"
/>
<label for="<%= falseID
%>">
No
</label>
</div>
</div>
<oneit:recalcClass htmlTag="div" classScript="answer.getAnswer() != null && answer.getAnswer() ? 'show': 'hide'" answer="<%= answer %>">
<div class="textarea-box">
<oneit:ormtextarea obj="<%= answer %>" attributeName="Notes" cssClass="form-control second-style"
placeholder="Please add any notes to support your answer"/>
<div id="<%= criteria.getObjectID() %>" class="<%= (answer != null && answer.getAnswer() != null && answer.getAnswer() ? "show": "hide") + " textarea-box" %>">
<textarea name="<%= criteria.getObjectID() + "_notes"%>" placeholder="Please add any notes to support your answer"
class="form-control second-style" onblur="saveAnswer(<%= criteria.getObjectID() %>, true, this.value)"><%= answer != null && answer.getNotes() != null ? answer.getNotes() : ""%></textarea>
</div>
</oneit:recalcClass>
<%
first = false;
...
...
@@ -155,14 +201,14 @@
}
}
%>
<div class="auto-save">
Autosaved <span class="timer"></span>
</div>
<div class="selection-br-line"></div>
<div class="main-sc-section-bottom btn-remove-padd">
<div class="section-btn text-center">
<oneit:button value="Save and exit" name="saveAndExitExperienece" cssClass="box-btn-gray half-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", exitPage)
.mapEntry ("JobApplication", jobApplication)
.mapEntry(UpdateMappedObjFP.FAIL_VALIDATION_ERRORS, Boolean.FALSE)
.toMap() %>"/>
<a href="<%= exitPage%>" class="btn box-btn-gray">Save and exit</a>
<%
if(isCultureComplete && isAssesmentComplete)
{
...
...
@@ -179,12 +225,14 @@
{
%>
<oneit:button value="Proceed to next step" name="
gotoPage"
cssClass="box-btn m-hide"
<oneit:button value="Proceed to next step" name="
validateApplication"
cssClass="box-btn m-hide"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("fromRequirements", true)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>"/>
<oneit:button value="Proceed" name="
gotoPage"
cssClass="box-btn show-mobile"
<oneit:button value="Proceed" name="
validateApplication"
cssClass="box-btn show-mobile"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("fromRequirements", true)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>"/>
<%
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment