Commit 1576dac4 by David Barton

Finish Release-20171020

parents 873012d0 21b0d10f
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS name="" xmlns:oneit="http://www.1iT.com.au"><NODE name="Script" factory="Vector">
<NODE name="DDL" factory="Participant" class="oneit.sql.transfer.DefineTableOperation">
<tableName factory="String">it_does_not_matter</tableName>
<column name="object_id" type="Long" nullable="false" length="11"/>
<column name="object_last_updated_date" type="Date" nullable="false" length="22"/>
<column name="object_created_date" type="Date" nullable="false" length="22"/>
<column name="" type="CLOB" nullable="true"/>
</NODE>
</NODE></OBJECTS>
\ No newline at end of file
......@@ -26,6 +26,7 @@
<column name="level_id" type="Long" length="11" nullable="false"/>
<column name="client_id" type="Long" length="11" nullable="true"/>
<column name="company_user_id" type="Long" length="11" nullable="true"/>
<column name="shortened_url_id" type="Long" length="11" nullable="true"/>
</NODE>
<NODE name="INDEX" factory="Participant" class="oneit.sql.transfer.DefineIndexOperation" tableName="tl_job" indexName="idx_tl_job_client_id" isUnique="false"><column name="client_id"/></NODE>
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS name="" xmlns:oneit="http://www.1iT.com.au"><NODE name="Script" factory="Vector">
<NODE name="DDL" factory="Participant" class="oneit.sql.transfer.DefineTableOperation">
<tableName factory="String">tl_shortened_url</tableName>
<column name="object_id" type="Long" nullable="false" length="11"/>
<column name="object_last_updated_date" type="Date" nullable="false" length="22"/>
<column name="object_created_date" type="Date" nullable="false" length="22"/>
<column name="code" type="String" nullable="false" length="8"/>
<column name="url_link" type="CLOB" nullable="false"/>
</NODE>
</NODE></OBJECTS>
\ No newline at end of file
-- DROP TABLE it_does_not_matter;
CREATE TABLE it_does_not_matter (
object_id int NOT NULL ,
object_last_updated_date datetime DEFAULT getdate() NOT NULL ,
object_created_date datetime DEFAULT getdate() NOT NULL
,
text NULL
);
ALTER TABLE it_does_not_matter ADD
CONSTRAINT PK_it_does_not_matter PRIMARY KEY
(
object_id
) ;
\ No newline at end of file
......@@ -25,7 +25,8 @@ CREATE TABLE tl_job (
country varchar(200) NULL,
level_id numeric(12) NOT NULL,
client_id numeric(12) NULL,
company_user_id numeric(12) NULL
company_user_id numeric(12) NULL,
shortened_url_id numeric(12) NULL
);
......
-- DROP TABLE tl_shortened_url;
CREATE TABLE tl_shortened_url (
object_id int NOT NULL ,
object_last_updated_date datetime DEFAULT getdate() NOT NULL ,
object_created_date datetime DEFAULT getdate() NOT NULL
,
code varchar(8) NOT NULL,
url_link text NOT NULL
);
ALTER TABLE tl_shortened_url ADD
CONSTRAINT PK_tl_shortened_url PRIMARY KEY
(
object_id
) ;
\ No newline at end of file
-- DROP TABLE it_does_not_matter;
CREATE TABLE it_does_not_matter (
object_id number(12) NOT NULL ,
object_last_updated_date date DEFAULT SYSDATE NOT NULL ,
object_created_date date DEFAULT SYSDATE NOT NULL
,
clob NULL
);
ALTER TABLE it_does_not_matter ADD
CONSTRAINT PK_it_does_not_matter PRIMARY KEY
(
object_id
) ;
\ No newline at end of file
......@@ -26,7 +26,8 @@ CREATE TABLE tl_job (
country varchar2(200) NULL,
level_id number(12) NOT NULL,
client_id number(12) NULL,
company_user_id number(12) NULL
company_user_id number(12) NULL,
shortened_url_id number(12) NULL
);
......
-- DROP TABLE tl_shortened_url;
CREATE TABLE tl_shortened_url (
object_id number(12) NOT NULL ,
object_last_updated_date date DEFAULT SYSDATE NOT NULL ,
object_created_date date DEFAULT SYSDATE NOT NULL
,
code varchar2(8) NOT NULL,
url_link clob NOT NULL
);
ALTER TABLE tl_shortened_url ADD
CONSTRAINT PK_tl_shortened_url PRIMARY KEY
(
object_id
) ;
\ No newline at end of file
-- @AutoRun
-- drop table it_does_not_matter;
CREATE TABLE it_does_not_matter (
object_id numeric(12) NOT NULL ,
object_last_updated_date timestamp DEFAULT NOW() NOT NULL ,
object_created_date timestamp DEFAULT NOW() NOT NULL
,
text NULL
);
ALTER TABLE it_does_not_matter ADD
CONSTRAINT pk_it_does_not_matter PRIMARY KEY
(
object_id
) ;
\ No newline at end of file
......@@ -26,7 +26,8 @@ CREATE TABLE tl_job (
country varchar(200) NULL,
level_id numeric(12) NOT NULL,
client_id numeric(12) NULL,
company_user_id numeric(12) NULL
company_user_id numeric(12) NULL,
shortened_url_id numeric(12) NULL
);
......
-- @AutoRun
-- drop table tl_shortened_url;
CREATE TABLE tl_shortened_url (
object_id numeric(12) NOT NULL ,
object_last_updated_date timestamp DEFAULT NOW() NOT NULL ,
object_created_date timestamp DEFAULT NOW() NOT NULL
,
code varchar(8) NOT NULL,
url_link text NOT NULL
);
ALTER TABLE tl_shortened_url ADD
CONSTRAINT pk_tl_shortened_url PRIMARY KEY
(
object_id
) ;
\ No newline at end of file
package performa.batch;
import oneit.appservices.batch.ORMBatch;
import oneit.logging.LogLevel;
import oneit.logging.LogMgr;
import oneit.logging.LoggingArea;
import oneit.objstore.ObjectTransaction;
import oneit.objstore.StorageException;
import oneit.objstore.rdbms.filters.IsNullFilter;
import oneit.utils.parsers.FieldException;
import performa.orm.Job;
public class URLShortnerBatch extends ORMBatch
{
public static LoggingArea URL_SHORTNER_BATCH = LoggingArea.createLoggingArea("URLShortnerBatch");
@Override
public void run(ObjectTransaction ot) throws StorageException, FieldException
{
LogMgr.log (URL_SHORTNER_BATCH, LogLevel.DEBUG2, "RUNNING URL Shortner Batch");
Job[] jobs = Job.SearchByAll()
.andShortenedURL(new IsNullFilter<>())
.search(ot);
for (Job job : jobs)
{
try
{
job.createShortenedURL();
LogMgr.log(URL_SHORTNER_BATCH, LogLevel.DEBUG2, "Setting Shortened URL to job : ", job);
}
catch(StorageException | FieldException e)
{
LogMgr.log(LoggingArea.ALL, LogLevel.PROCESSING1, e, "Error while setting shortened URL to job : " + job);
}
}
}
}
\ No newline at end of file
......@@ -53,6 +53,11 @@ public class BulkUpdateFP extends SaveFP
{
application.setApplicationStatus(ApplicationStatus.SUBMITTED);
}
else if(job.getAppProcessOption() == AppProcessOption.TO_UNSUITABLE)
{
application.setApplicationStatus(ApplicationStatus.UNSUITABLE);
}
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In BulkUpdateFP Job Application Status successfully changed : ", application );
}
......
......@@ -8,6 +8,7 @@ import oneit.email.ConfigurableEmailer;
import oneit.logging.*;
import oneit.net.LoopbackHTTP;
import oneit.objstore.*;
import oneit.objstore.parser.BusinessObjectParser;
import oneit.objstore.rdbms.filters.EqualsFilter;
import oneit.security.SecUser;
import oneit.servlets.forms.*;
......@@ -29,15 +30,16 @@ public class ForgotPasswordFP extends SaveFP
HttpServletRequest request = submission.getRequest();
ObjectTransaction objTran = process.getTransaction();
Job job = (Job) process.getAttribute("Job");
CompanyUser companyUser = (CompanyUser) request.getAttribute("CompanyUser");
String email = job != null ? job.getEmail() : (companyUser != null ? companyUser.getEmail() : null);
CompanyUserNPO tmpComUser = (CompanyUserNPO) request.getAttribute("CompanyUser");
String email = job != null ? job.getEmail() : (tmpComUser != null ? tmpComUser.getEmail() : null);
Map emailParams = null;
Debug.assertion(StringUtils.subBlanks(email) != null, "Email not avaialble");
email = StringUtils.trim(email);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Started to send pasword reset link email.", email);
SecUser secUser = SecUser.searchNAME (objTran, email);
if(secUser == null)
......@@ -54,11 +56,15 @@ public class ForgotPasswordFP extends SaveFP
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Inside ForgotPasswordFP for send reset pasword link mail to ", email);
Map emailParams;
companyUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
if(companyUser != null)
if(tmpComUser != null)
{
CompanyUser companyUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
if(companyUser == null)
{
throw new BusinessException("Sorry, you are not an authorised user to access admin portal.");
}
if(companyUser.getForgotPasswordKey() == null)
{
String resetCode = new RandomStringGen().generateHumanAlphaNum(DEFAULT_PASSWORD_LENGTH);
......@@ -72,7 +78,7 @@ public class ForgotPasswordFP extends SaveFP
+ "?id=" + companyUser.getID()
+ "&key=" + companyUser.getForgotPasswordKey()).toMap();
}
else
else if(job != null)
{
Candidate candidate = secUser.getExtension(Candidate.REFERENCE_Candidate);
......@@ -130,4 +136,23 @@ public class ForgotPasswordFP extends SaveFP
resetCodeEmailer = (ConfigurableEmailer)(context.getSingleChild("ResetCodeEmailer"));
}
@Override
public void validate(ORMProcessState process, SubmissionDetails submission, MultiException exceptions, Map params) throws StorageException
{
super.validate(process, submission, exceptions, params);
HttpServletRequest request = submission.getRequest();
Job job = (Job) process.getAttribute("Job");
CompanyUserNPO companyUser = (CompanyUserNPO) request.getAttribute("CompanyUser");
if(job != null)
{
BusinessObjectParser.assertFieldCondition(StringUtils.subBlanks(job.getEmail()) != null, job, Job.FIELD_Email, "mandatory", exceptions, true, request);
}
else if(companyUser != null)
{
BusinessObjectParser.assertFieldCondition(StringUtils.subBlanks(companyUser.getEmail()) != null, companyUser, CompanyUserNPO.FIELD_Email, "mandatory", exceptions, true, request);
}
}
}
\ No newline at end of file
......@@ -50,6 +50,7 @@ public class LoadJobFromTemplateFP extends ORMProcessFormProcessor
job.setCompletedAssessmentType(Boolean.TRUE);
job.setCompletedRequirements(Boolean.TRUE);
job.setCompletedCulture(Boolean.TRUE);
job.setShortenedURL(null);
LogMgr.log(Job.LOG, LogLevel.PROCESSING1, "LoadJobFromTemplateFP completed for ", job);
......
......@@ -14,6 +14,7 @@ import oneit.servlets.process.SaveFP;
import oneit.utils.BusinessException;
import oneit.utils.DateDiff;
import performa.orm.Job;
import performa.orm.ShortenedURL;
import performa.orm.types.JobStatus;
......@@ -29,12 +30,17 @@ public class SaveJobFP extends SaveFP
Job oldJob = (Job) job.getEarliestBackup();
if(oldJob != null && oldJob.getJobStatus() == JobStatus.DRAFT)
if(oldJob != null && oldJob.getJobStatus() == JobStatus.DRAFT && job.getJobStatus() == JobStatus.OPEN)
{
job.setJobStatus(JobStatus.OPEN);
job.setApplyBy(DateDiff.add(DateDiff.getToday(), Calendar.DATE, 30));
job.setOpenDate(new Date());
}
}
if(job.getJobStatus() == JobStatus.OPEN && job.getShortenedURL() == null)
{
job.createShortenedURL();
}
return super.processForm(process, submission, params);
}
}
\ No newline at end of file
......@@ -48,7 +48,7 @@ public class SaveUserDetailsFP extends SaveFP
{
if(companyUser.getConfirmPassword() == null)
{
submission.getRequest().setAttribute("EmailChanged", true);
request.setAttribute("EmailChanged", true);
return RedisplayResult.getInstance();
}
else
......@@ -57,7 +57,7 @@ public class SaveUserDetailsFP extends SaveFP
if(!validPassword)
{
submission.getRequest().setAttribute("EmailChanged", false);
request.setAttribute("EmailChanged", false);
companyUser.setConfirmPassword(null);
}
......@@ -67,12 +67,10 @@ public class SaveUserDetailsFP extends SaveFP
{
// companyUser.setIsAccountVerified(Boolean.FALSE);
companyUser.setIsEmailChanged(Boolean.TRUE);
Utils.sendEmailChangedMail(companyUser, request, emailer, SaveUserDetailsFP.class.getName());
}
}
// secUser.setEmail(secUser.getUserName());
}
else //email changed for social login
{
......@@ -85,13 +83,17 @@ public class SaveUserDetailsFP extends SaveFP
}
}
User intercomUser = IntercomUtils.updateIntercomUser(secUser);
User intercomUser = (User)request.getSession().getAttribute("IntercomUser");
if(intercomUser == null)
{
performa.intercom.resources.Company intercomCompany = IntercomUtils.findOrCreateCompany(companyUser.getCompany());
IntercomUtils.createIntercomUser(secUser, "Hiring Team", intercomCompany);
IntercomUtils.createIntercomUser(secUser, "Hiring Team", intercomCompany, companyUser.getPhone());
}
else
{
IntercomUtils.updateIntercomUser(secUser, companyUser.getPhone());
}
}
......
......@@ -38,18 +38,22 @@ public class SendCompanyUserInvitesFP extends SaveFP
HttpServletRequest request = submission.getRequest();
Company company = (Company) process.getAttribute("Company");
CompanyUser companyUser = (CompanyUser) request.getAttribute("CompanyUser");
Boolean isSkip = CollectionUtils.equals((Boolean) request.getAttribute("Skip"), Boolean.TRUE);
if(companyUser != null && companyUser == company.getAddedByUser())
{
for(CompanyUser cUser : company.getUsersSet())
if(!isSkip)
{
if(!CollectionUtils.equals(cUser, company.getAddedByUser()))
for(CompanyUser cUser : company.getUsersSet())
{
SecUser secUser = cUser.getUser();
if(!CollectionUtils.equals(cUser, company.getAddedByUser()))
{
SecUser secUser = cUser.getUser();
BusinessObjectParser.assertFieldCondition(secUser.getEmail()!= null, secUser, SecUser.FIELD_Email, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(secUser.getEmail()!= null, secUser, SecUser.FIELD_Email, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(!Utils.isCompanyUserEmailFound(process.getTransaction(), secUser.getEmail()), secUser, SecUser.FIELD_Email, "emailExists", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(!Utils.isCompanyUserEmailFound(process.getTransaction(), secUser.getEmail()), secUser, SecUser.FIELD_Email, "emailExists", exceptions, true, request);
}
}
}
......@@ -72,9 +76,11 @@ public class SendCompanyUserInvitesFP extends SaveFP
CompanyUser companyUser = (CompanyUser) request.getAttribute("CompanyUser");
SecUser secUser = companyUser.getUser();
Boolean socialLogin = CollectionUtils.equals(process.getAttribute("socialLogin"), Boolean.TRUE);
Boolean isSkip = CollectionUtils.equals((Boolean) request.getAttribute("Skip"), Boolean.TRUE);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Verifing Company User", companyUser, secUser);
companyUser.setRole(RoleType.ADMIN);
companyUser.setIsAccountVerified(Boolean.TRUE);
company.setIsVerified(Boolean.TRUE);
......@@ -82,7 +88,6 @@ public class SendCompanyUserInvitesFP extends SaveFP
if(!socialLogin)
{
request.getSession().setAttribute (SecUser.SEC_USER_ID, secUser);
request.getSession().setAttribute (SessionSecUserDecorator.REFRESH_SECURITY, Boolean.TRUE);
......@@ -96,22 +101,33 @@ public class SendCompanyUserInvitesFP extends SaveFP
//process user invitations
for(CompanyUser cUser : company.getUsersSet())
{
if(!CollectionUtils.equals(cUser, companyUser))
if(!CollectionUtils.equals(cUser, company.getAddedByUser()))
{
SecUser sUser = cUser.getUser();
LogMgr.log(LOG, LogLevel.PROCESSING1, "Started to send invitaion email.", cUser);
sUser.setUserName(sUser.getEmail().toLowerCase());
sUser.setAttribute("md5:" + SecUser.FIELD_Password, CompanyUser.DEFAULT_PASSWORD);
sUser.addRole(Utils.getRole(Utils.ROLE_CLIENT, objTran));
companyUser.setRole(RoleType.STANDARD);
LogMgr.log(LOG, LogLevel.PROCESSING1, "New user created :: ", sUser);
sendInvitationMail(cUser, request);
LogMgr.log(LOG, LogLevel.PROCESSING1, "End of sending invitation email.", cUser);
if(isSkip) //remove invitaions due to skip
{
sUser.removeFromExtensions(cUser);
cUser.delete();
sUser.delete();
LogMgr.log(LOG, LogLevel.PROCESSING1, "Removed user details for skip.", cUser, sUser);
}
else
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Started to send invitaion email.", cUser);
sUser.setUserName(sUser.getEmail().toLowerCase());
sUser.setAttribute("md5:" + SecUser.FIELD_Password, CompanyUser.DEFAULT_PASSWORD);
sUser.addRole(Utils.getRole(Utils.ROLE_CLIENT, objTran));
cUser.setRole(RoleType.STANDARD);
LogMgr.log(LOG, LogLevel.PROCESSING1, "New user created :: ", sUser);
sendInvitationMail(cUser, request);
LogMgr.log(LOG, LogLevel.PROCESSING1, "End of sending invitation email.", cUser);
}
}
}
}
......@@ -120,7 +136,7 @@ public class SendCompanyUserInvitesFP extends SaveFP
performa.intercom.resources.Company intercomCompany = IntercomUtils.findOrCreateCompany(company);
IntercomUtils.createIntercomUser(secUser, "Hiring Team", intercomCompany);
IntercomUtils.createIntercomUser(secUser, "Hiring Team", intercomCompany, companyUser.getPhone());
return super.processForm(process, submission, params);
}
......
......@@ -176,7 +176,7 @@ public class SendVerificationMailFP extends SaveFP
+ "&aid=" + candidate.getID()
+ "&pin=" + candidate.getVerificationKey();
Map defaultParams = CollectionUtils.mapEntry("link", link).toMap();
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, candidate);
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, candidate.getUser());
Utils.sendMail(emailer, transform, new String[]{candidate.getUser().getUserName()}, null, candidate);
......
......@@ -57,7 +57,6 @@ public class SignInCandidateFP extends LoginProcessor
BusinessObjectParser.assertFieldCondition(job.getEmail()!= null, job, Job.FIELD_Email, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(job.getPassword()!= null, job, Job.FIELD_Password, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(!Utils.emailExists(job.getTransaction(), job.getEmail()), job, Job.FIELD_Email, "emailExists", exceptions, true, request);
return super.validate(submission, exceptions);
}
......
......@@ -27,5 +27,10 @@ public class UserLoginFP extends LoginProcessor
{
throw new FieldException("You're not an authorised user to access this portal.", SecUser.FIELD_UserName);
}
else if(companyUser.getIsEmailChanged()==Boolean.TRUE)
{
//verify email address change
companyUser.changeEmail(submission.getRequest());
}
}
}
\ No newline at end of file
......@@ -2,10 +2,12 @@ package performa.form;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import oneit.business.content.Article;
import oneit.components.ParticipantInitialisationContext;
import oneit.email.ConfigurableArticleTemplateEmailer;
import oneit.email.ConfigurableEmailerException;
import oneit.logging.*;
import oneit.net.LoopbackHTTP;
import oneit.objstore.StorageException;
import oneit.objstore.parser.BusinessObjectParser;
import oneit.security.SecUser;
......@@ -16,9 +18,10 @@ import oneit.utils.*;
import performa.intercom.utils.IntercomUtils;
import performa.orm.*;
import performa.utils.Utils;
import performa.utils.WebUtils;
public class VerifyIdentityFP extends ORMProcessFormProcessor
public class VerifyIdentityFP extends SaveFP
{
private static LoggingArea LOG = LoggingArea.createLoggingArea("VerifyIdentity");
protected ConfigurableArticleTemplateEmailer emailer;
......@@ -27,7 +30,6 @@ public class VerifyIdentityFP extends ORMProcessFormProcessor
protected Map validate(SubmissionDetails submission, MultiException exceptions)
{
HttpServletRequest request = submission.getRequest();
Boolean isVerify = CollectionUtils.equals(request.getAttribute("isVerify"), Boolean.TRUE);
Job job = (Job) request.getAttribute("Job");
Candidate candidate = (Candidate) request.getAttribute("Candidate");
SecUser secUser = candidate.getUser();
......@@ -39,16 +41,7 @@ public class VerifyIdentityFP extends ORMProcessFormProcessor
BusinessObjectParser.assertFieldCondition(secUser.getFirstName() != null, secUser, SecUser.FIELD_FirstName, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(secUser.getLastName() != null, secUser, SecUser.FIELD_LastName, "mandatory", exceptions, true, request);
if(isVerify)
{
BusinessObjectParser.assertFieldCondition(job.getPassword()!= null, job, Job.FIELD_Password, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(job.getConfirmPassword()!= null, job, Job.FIELD_ConfirmPassword, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(CollectionUtils.equals(job.getPassword(), job.getConfirmPassword()), job, Job.FIELD_ConfirmPassword, "passwordNotMatch", exceptions, true, request);
}
return super.validate(submission, exceptions);
}
......@@ -68,22 +61,22 @@ public class VerifyIdentityFP extends ORMProcessFormProcessor
LogMgr.log(LOG, LogLevel.PROCESSING1, "Verifing User", job, secUser);
if(CollectionUtils.equals(job.getPassword(), job.getConfirmPassword()))
{
secUser.setAttribute("md5:" + SecUser.FIELD_Password, job.getPassword());
// if(CollectionUtils.equals(job.getPassword(), job.getConfirmPassword()))
// {
// secUser.setAttribute("md5:" + SecUser.FIELD_Password, job.getPassword());
candidate.setIsAccountVerified(Boolean.TRUE);
sendMail(candidate, request);
sendMail(candidate, job, request);
// Create a applicant user in intercom
IntercomUtils.createIntercomUser(secUser, "Applicant", null);
IntercomUtils.createIntercomUser(secUser, "Applicant", null, candidate.getPhone());
request.getSession().setAttribute (SecUser.SEC_USER_ID, secUser);
request.getSession().setAttribute (SessionSecUserDecorator.REFRESH_SECURITY, Boolean.TRUE);
// request.setAttribute("nextPage", nextPage + "&JobID=" + job.getObjectID());
LogMgr.log(LOG, LogLevel.PROCESSING1, "Password resetted", job, secUser);
}
// }
}
process.completeAndRestart();
......@@ -97,18 +90,23 @@ public class VerifyIdentityFP extends ORMProcessFormProcessor
{
super.init(context);
emailer = (ConfigurableArticleTemplateEmailer) (context.getSingleChild("AccountCreatedEmailer"));
emailer = (ConfigurableArticleTemplateEmailer) (context.getSingleChild("ApplicantAccountCreatedEmailer"));
}
protected void sendMail(Candidate candidate, HttpServletRequest request) throws BusinessException
protected void sendMail(Candidate candidate, Job job, HttpServletRequest request) throws BusinessException
{
try
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sending Account Created mail from VerifyIdentityFP to :: ", candidate);
Map defaultParams = CollectionUtils.EMPTY_MAP;
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, candidate);
Article applyJobArticle = WebUtils.getArticleByShortCut(candidate.getTransaction(), WebUtils.APPLY_JOB);
String link = LoopbackHTTP.getRemoteAccessURL(request)
+ applyJobArticle.getLink(request, CollectionUtils.mapEntry("cms.rm", WebUtils.FORGOT_PASSWORD).toMap(), "/")
+ "&id=" + job.getID()
+ "&key=" + job.getRandomKey();
Map defaultParams = CollectionUtils.mapEntry("link", link).toMap();
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, candidate.getUser());
Utils.sendMail(emailer, transform, new String[]{candidate.getUser().getUserName()}, null, candidate);
......
......@@ -2,7 +2,6 @@ package performa.intercom.utils;
import java.util.HashMap;
import java.util.Map;
import oneit.appservices.config.ConfigMgr;
import oneit.logging.LogLevel;
import oneit.logging.LogMgr;
import oneit.logging.LoggingArea;
......@@ -11,17 +10,19 @@ import performa.intercom.resources.Company;
import performa.intercom.resources.CustomAttribute;
import performa.intercom.resources.Intercom;
import performa.intercom.resources.User;
import performa.utils.Utils;
public class IntercomUtils
{
static
{
Intercom.setToken(ConfigMgr.getKeyfileString("intercom.token", ""));
Intercom.setToken(Utils.INTERCOM_TOKEN);
Intercom.setAppID(Utils.INTERCOM_APP_ID);
}
public static User createIntercomUser(SecUser secUser, String role, Company company)
public static User createIntercomUser(SecUser secUser, String role, Company company, String phone)
{
try
{
......@@ -30,6 +31,7 @@ public class IntercomUtils
user.setUserId(secUser.getIdentification());
user.setEmail(secUser.getEmail());
user.setName(secUser.getName());
user.setPhone(phone);
user.addCustomAttribute(CustomAttribute.newStringAttribute("role", role));
if(company != null)
......@@ -67,7 +69,7 @@ public class IntercomUtils
}
public static User updateIntercomUser(SecUser secUser)
public static User updateIntercomUser(SecUser secUser, String phone)
{
try
{
......@@ -77,6 +79,7 @@ public class IntercomUtils
{
user.setEmail(secUser.getEmail());
user.setName(secUser.getName());
user.setPhone(phone);
User.update(user);
}
......
......@@ -176,7 +176,7 @@ public abstract class BaseCultureCriteria extends BaseBusinessClass
metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
metaInfo.put ("dbcol", "importance");
metaInfo.put ("defaultValue", "Importance.DESIRABLE");
metaInfo.put ("defaultValue", "Importance.NOT_APPLICABLE");
metaInfo.put ("mandatory", "true");
metaInfo.put ("name", "Importance");
metaInfo.put ("type", "Importance");
......@@ -217,7 +217,7 @@ public abstract class BaseCultureCriteria extends BaseBusinessClass
super._initialiseNewObjAttributes (transaction);
_Importance = (Importance)(Importance.DESIRABLE);
_Importance = (Importance)(Importance.NOT_APPLICABLE);
}
......
package performa.orm;
import javax.servlet.http.HttpServletRequest;
import oneit.logging.LogLevel;
import oneit.logging.LogMgr;
import oneit.logging.LoggingArea;
import oneit.objstore.*;
import oneit.security.SecUser;
......@@ -90,19 +93,6 @@ public class CompanyUser extends BaseCompanyUser
}
public Boolean emailExists()
{
if(getEmail() != null)
{
SecUser user = SecUser.searchNAME(getTransaction(), getEmail().toLowerCase());
return user != null && user.getExtension(CompanyUser.REFERENCE_CompanyUser) != null;
}
return Boolean.FALSE;
}
public String getEmailAddressFromUser()
{
return StringUtils.isEmailAddress(getUser().getUserName()) ? getUser().getUserName() : getUser().getEmail();
......@@ -114,4 +104,43 @@ public class CompanyUser extends BaseCompanyUser
return !StringUtils.isEmailAddress(getUser().getUserName());
}
//verfy and cahnge email
public void changeEmail(HttpServletRequest request) throws FieldException
{
if(getIsEmailChanged()==Boolean.TRUE)
{
if(request.getSession().getAttribute("EmailToVerify")!=null)
{
if(CollectionUtils.equals(request.getSession().getAttribute("EmailToVerify"), getUser()))
{
setIsEmailChanged(Boolean.FALSE);
if(!isLoggedViaSocial())
{
SecUser secUser = getUser();
secUser.setUserName(secUser.getEmail());
LogMgr.log(LoggingArea.ALL, LogLevel.PROCESSING2, "User name changed.", secUser);
}
request.getSession().setAttribute("EmailVerified", true);
LogMgr.log(LoggingArea.ALL, LogLevel.PROCESSING1, "User Email verified", this);
}
else
{
request.getSession().setAttribute("EmailStillNotVerified", true);
}
request.getSession().removeAttribute("EmailToVerify");
}
else
{
request.getSession().setAttribute("EmailStillNotVerified", true);
}
}
}
}
\ No newline at end of file
package performa.orm;
import oneit.security.SecUser;
public class CompanyUserNPO extends BaseCompanyUserNPO
{
private static final long serialVersionUID = 0L;
// This constructor should not be called
public CompanyUserNPO ()
{
// Do not add any code to this, always put it in initialiseNewObject
}
public Boolean emailExists()
{
if(getEmail() != null)
{
SecUser user = SecUser.searchNAME(getTransaction(), getEmail().toLowerCase());
return user != null && user.getExtension(CompanyUser.REFERENCE_CompanyUser) != null;
}
return Boolean.FALSE;
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<ROOT xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='http://www.oneit.com.au/schemas/5.2/BusinessObject.xsd'>
<BUSINESSCLASS name="CompanyUserNPO" package="performa.orm" superclass="NonPersistentBO">
<IMPORT value="oneit.servlets.orm.*"/>
<TABLE name="it_does_not_matter" tablePrefix="object" polymorphic="FALSE">
<ATTRIB name="Email" type="String" validators="Email" />
</TABLE>
</BUSINESSCLASS>
</ROOT>
\ No newline at end of file
package performa.orm;
import oneit.utils.BusinessException;
public class CultureCriteria extends BaseCultureCriteria
{
......
......@@ -7,7 +7,7 @@
<TABLE name="tl_culture_criteria" tablePrefix="object" polymorphic="FALSE">
<ATTRIB name="Importance" type="Importance" dbcol="importance" attribHelper="EnumeratedAttributeHelper" mandatory="true" defaultValue="Importance.DESIRABLE"/>
<ATTRIB name="Importance" type="Importance" dbcol="importance" attribHelper="EnumeratedAttributeHelper" mandatory="true" defaultValue="Importance.NOT_APPLICABLE"/>
<SINGLEREFERENCE name="CultureElement" type="CultureElement" dbcol="culture_element_id" mandatory="true" />
<SINGLEREFERENCE name="CultureElementRating" type="CultureElementRating" dbcol="culture_element_rating_id" mandatory="true" />
......
......@@ -2,6 +2,7 @@ package performa.orm;
import java.util.*;
import oneit.logging.LoggingArea;
import oneit.net.LoopbackHTTP;
import oneit.objstore.*;
import oneit.objstore.cloning.AssocCopyingRule;
import oneit.objstore.cloning.BusinessCopyHelper;
......@@ -390,6 +391,7 @@ public class Job extends BaseJob
}
options.add(AppProcessOption.REMOVE_FROM_SHORTLIST);
options.add(AppProcessOption.TO_UNSUITABLE);
return options;
}
......@@ -473,11 +475,11 @@ public class Job extends BaseJob
public BinaryContent getLogo()
{
if(isClientAvailable() && getClient().getClientLogo()!= null)
if(isClientAvailable())
{
return getClient().getClientLogo();
}
else if(getCompanyUser() != null && getCompanyUser().getCompany().getCompanyLogo() != null)
else if(getCompanyUser() != null)
{
return getCompanyUser().getCompany().getCompanyLogo();
}
......@@ -499,4 +501,43 @@ public class Job extends BaseJob
return Arrays.asList(new JobStatus[]{JobStatus.OPEN, JobStatus.COMPLETE, JobStatus.FILLED});
}
private String getURL()
{
return "/ApplicantPortal-ApplyJob.htm?" + "id=" + getID() + "&key=" + getRandomKey();
}
public void createShortenedURL() throws StorageException, FieldException
{
ShortenedURL shortenedURL = ShortenedURL.createShortenedURL(getTransaction());
shortenedURL.setUrlLink(getURL());
shortenedURL.setCode(generateUniqueCode());
setShortenedURL(shortenedURL);
}
private String generateUniqueCode()
{
String randomString;
while (true)
{
randomString = RandomStringGen.getRandomStringGen().generateAlphaNum(6);
ShortenedURL[] searchByCode = ShortenedURL.searchByCode(getTransaction(), randomString);
if (searchByCode.length == 0)
{
return randomString;
}
}
}
public String getShortenedUrlLink()
{
return LoopbackHTTP.getRemoteAccessURL("/j/" + (getShortenedURL() != null ? getShortenedURL().getCode() : ""));
}
}
\ No newline at end of file
......@@ -36,7 +36,7 @@
<ATTRIB name="JobStatus" type="JobStatus" dbcol="job_status" attribHelper="EnumeratedAttributeHelper" mandatory="true"/>
<ATTRIB name="OpenDate" type="Date" dbcol="open_date"/>
<ATTRIB name="ApplyBy" type="Date" dbcol="apply_by"/>
<ATTRIB name="IncludeAssessmentCriteria" type="Boolean" dbcol="include_assessment_criteria" mandatory="true" defaultValue="Boolean.TRUE"/>
<ATTRIB name="IncludeAssessmentCriteria" type="Boolean" dbcol="include_assessment_criteria" mandatory="true" defaultValue="Boolean.FALSE"/>
<ATTRIB name="AssessmentType" type="AssessmentType" dbcol="assessment_type" attribHelper="EnumeratedAttributeHelper" mandatory="true" defaultValue="AssessmentType.COMPREHENSIVE"/>
<ATTRIB name="RandomKey" type="String" dbcol="random_key" length="10"/>
<ATTRIB name="JobType" type="JobType" dbcol="job_type" attribHelper="EnumeratedAttributeHelper" mandatory="true" defaultValue="JobType.FULL_TIME"/>
......@@ -50,6 +50,7 @@
<SINGLEREFERENCE name="Level" type="Level" dbcol="level_id" mandatory="true"/>
<SINGLEREFERENCE name="Client" type="Client" dbcol="client_id" backreferenceName="Jobs"/>
<SINGLEREFERENCE name="CompanyUser" type="CompanyUser" dbcol="company_user_id" />
<SINGLEREFERENCE name="ShortenedURL" type="ShortenedURL" dbcol="shortened_url_id" />
</TABLE>
......
......@@ -348,14 +348,53 @@ public class JobApplication extends BaseJobApplication
return getRequirementFit() != null ? (Long) getRequirementFit().get(null) : 0;
}
public String getCultureFitColor()
{
long score = getCultureFitScore();
return score >= 70 ? "green" : (score >= 50 ? "yellow" : "red-b");
}
public String getRequirementFitColor()
{
long score = getRequirementFitScore();
Filter filter = AssessmentCriteria.SearchByAll().andImportance(new EqualsFilter<>(Importance.ESSENTIAL));
Collection<AssessmentCriteria> essentialRequirements = CollectionFilter.filter(getJob().getAssessmentCriteriasSet(), filter);
if(essentialRequirements.size() > 0)
{
Filter negativeFilter = AssessmentCriteriaAnswer.SearchByAll().andAnswer(new EqualsFilter<>(Boolean.FALSE));
if(CollectionFilter.filter(getRequirementAnswersByImportance().getValuesForKey(Importance.ESSENTIAL), negativeFilter).size() > 0)
{
return "red-b";
}
}
return score >= 80 ? "green" : (score >= 60 ? "yellow" : "red-b");
}
//This will return relative percentage considering topper as 100%
public Double getRoleFitPercentage()
{
JobApplication jobTopper = getJob() != null ? getJob().getTopper() : null;
Double myScore = getRoleFitScore();
Double topScore = jobTopper != null ? jobTopper.getRoleFitScore() : null;
Double myScore = getRoleFitScore();
return NullArith.round(NullArith.divide(NullArith.multiply(myScore, 100), topScore), 2);
if(myScore > 0 && getCandidate() != null && getJob() != null && getJob().getLevel() != null)
{
TestAnalysis testAnalysis = getCandidate().getTestAnalysisFor(getJob().getLevel());
if(testAnalysis != null)
{
Double topScore = AnalysisEngine.getSuitabilityScore(testAnalysis, true).get0();
if(topScore > 0)
{
return NullArith.round(NullArith.divide(NullArith.multiply(myScore, 100), topScore), 2);
}
}
}
return 0d;
}
public List<AppProcessOption> getValidProcessOptions()
......@@ -426,9 +465,9 @@ public class JobApplication extends BaseJobApplication
//to get pending time to complete job application
public Integer getRemainingTime()
{
//req-07 min
//cul-07 min
//req-26 min
//req-05 min
//cul-05 min
//req-20 min
int remainingTime = 0;
......@@ -437,21 +476,19 @@ public class JobApplication extends BaseJobApplication
{
if(!selectionCompleted())
{
remainingTime += 7;
remainingTime += 5;
}
}
if(!cultureCompleted())
{
remainingTime += 7;
remainingTime += 5;
}
//ROLE
remainingTime += getRoleTestRemainingTime() ;
if(!assessmentCompleted())
{
remainingTime += 6;
remainingTime += getRoleTestRemainingTime() ;
}
return remainingTime;
......
package performa.orm;
import oneit.objstore.StorageException;
import oneit.utils.CollectionUtils;
public class ShortenedURL extends BaseShortenedURL
{
private static final long serialVersionUID = 0L;
// This constructor should not be called
public ShortenedURL ()
{
// Do not add any code to this, always put it in initialiseNewObject
}
@Override
public boolean filterByCode(String code) throws StorageException
{
return CollectionUtils.equals(code, getCode());
}
}
\ No newline at end of file
<?xml version="1.0"?>
<ROOT xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='http://www.oneit.com.au/schemas/5.2/BusinessObject.xsd'>
<BUSINESSCLASS name="ShortenedURL" package="performa.orm">
<TABLE name="tl_shortened_url" tablePrefix="object" polymorphic="FALSE">
<ATTRIB name="Code" type="String" dbcol="code" mandatory="true" length="8"/>
<ATTRIB name="UrlLink" type="String" dbcol="url_link" mandatory="true" />
</TABLE>
<SEARCH type="all" paramFilter="object_id is not null" orderBy="object_created_date desc">
</SEARCH>
<SEARCH type="ByCode" paramFilter="object_id is not NULL" checkTXObjects="TRUE">
<PARAM name="Code" type="String" paramFilter="trim(code) = ${Code}"/>
</SEARCH>
</BUSINESSCLASS>
</ROOT>
\ No newline at end of file
......@@ -20,12 +20,14 @@ public class AppProcessOption extends AbstractEnumerated
public static final EnumeratedFactory FACTORY_AppProcessOption = new AppProcessOptionFactory();
public static final AppProcessOption TO_SHORTLIST = new AppProcessOption ("TO_SHORTLIST", "TO_SHORTLIST", "To Shortlist", false);
public static final AppProcessOption TO_SHORTLIST = new AppProcessOption ("TO_SHORTLIST", "TO_SHORTLIST", "To Shortlisted", false);
public static final AppProcessOption REMOVE_FROM_SHORTLIST = new AppProcessOption ("REMOVE_FROM_SHORTLIST", "REMOVE_FROM_SHORTLIST", "Remove From Shortlist", false);
public static final AppProcessOption REMOVE_FROM_SHORTLIST = new AppProcessOption ("REMOVE_FROM_SHORTLIST", "REMOVE_FROM_SHORTLIST", "Remove From Shortlisted", false);
public static final AppProcessOption TO_UNSUITABLE = new AppProcessOption ("TO_UNSUITABLE", "TO_UNSUITABLE", "To Unsuitable", false);
private static final AppProcessOption[] allAppProcessOptions =
new AppProcessOption[] { TO_SHORTLIST,REMOVE_FROM_SHORTLIST};
new AppProcessOption[] { TO_SHORTLIST,REMOVE_FROM_SHORTLIST,TO_UNSUITABLE};
private static AppProcessOption[] getAllAppProcessOptions ()
......
......@@ -3,8 +3,9 @@
<ROOT>
<CONSTANT package="performa.orm.types" name="AppProcessOption">
<VALUE name="TO_SHORTLIST" value="TO_SHORTLIST" description="To Shortlist"/>
<VALUE name="REMOVE_FROM_SHORTLIST" value="REMOVE_FROM_SHORTLIST" description="Remove From Shortlist"/>
<VALUE name="TO_SHORTLIST" value="TO_SHORTLIST" description="To Shortlisted"/>
<VALUE name="REMOVE_FROM_SHORTLIST" value="REMOVE_FROM_SHORTLIST" description="Remove From Shortlisted"/>
<VALUE name="TO_UNSUITABLE" value="TO_UNSUITABLE" description="To Unsuitable"/>
</CONSTANT>
</ROOT>
......@@ -134,7 +134,7 @@ public class AssessmentType extends AbstractEnumerated
public static void defineAdditionalData ()
{
COMPREHENSIVE.HeaderDesc = " – Up to 96% accuracy on candidate suitability ";
COMPREHENSIVE.AdditionalDesc = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh.";
COMPREHENSIVE.AdditionalDesc = "";
COMPREHENSIVE.QuestionDetails = " (250 Questions - 20 Minutes)";
COMPREHENSIVE.TestDescr = "Comprehensive Assessment";
EXPRESS.HeaderDesc = "";
......
......@@ -9,7 +9,7 @@
<DATA name="TestDescr" type="String" />
<VALUE name="COMPREHENSIVE" description="Talentology Comprehensive" HeaderDesc='" – Up to 96% accuracy on candidate suitability "'
AdditionalDesc='"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh."'
AdditionalDesc='""'
QuestionDetails='" (250 Questions - 20 Minutes)"'
TestDescr='"Comprehensive Assessment"'/>
<VALUE name="EXPRESS" description="Talentology Express" HeaderDesc='""'
......
......@@ -37,10 +37,17 @@ public class CriteriaType extends AbstractEnumerated
return allCriteriaTypes;
}
private transient boolean IsSingular;
private CriteriaType (String name, String value, String description, boolean disabled)
{
super (name, value, description, disabled);
}
public boolean getIsSingular()
{
return IsSingular;
}
public static final Comparator COMPARE_BY_POSITION = new CompareEnumByPosition (allCriteriaTypes);
......@@ -109,6 +116,10 @@ public class CriteriaType extends AbstractEnumerated
public static void defineAdditionalData ()
{
QUALIFICATION.IsSingular = false;
SKILL.IsSingular = false;
EXPERIENCE.IsSingular = true;
KNOWLEDGE.IsSingular = true;
}
......@@ -136,6 +147,7 @@ public class CriteriaType extends AbstractEnumerated
{
Map attribs = new HashMap ();
attribs.put ("IsSingular", ArrayFormatter.toObject(getIsSingular()));
return attribs;
}
......
......@@ -3,10 +3,12 @@
<ROOT>
<CONSTANT package="performa.orm.types" name="CriteriaType">
<VALUE name="QUALIFICATION" value="QUALIFICATION" description="Qualifications"/>
<VALUE name="SKILL" value="SKILL" description="Skills"/>
<VALUE name="EXPERIENCE" value="EXPERIENCE" description="Experience"/>
<VALUE name="KNOWLEDGE" value="KNOWLEDGE" description="Knowledge"/>
<DATA name="IsSingular" type="boolean"/>
<VALUE name="QUALIFICATION" value="QUALIFICATION" description="Qualifications" IsSingular="false"/>
<VALUE name="SKILL" value="SKILL" description="Skills" IsSingular="false"/>
<VALUE name="EXPERIENCE" value="EXPERIENCE" description="Experience" IsSingular="true"/>
<VALUE name="KNOWLEDGE" value="KNOWLEDGE" description="Knowledge" IsSingular="true"/>
</CONSTANT>
</ROOT>
......@@ -41,6 +41,8 @@ public class Importance extends AbstractEnumerated
private transient Integer WeightingScore;
private transient String CultureDescription;
private Importance (String name, String value, String description, boolean disabled)
{
super (name, value, description, disabled);
......@@ -55,6 +57,11 @@ public class Importance extends AbstractEnumerated
{
return WeightingScore;
}
public String getCultureDescription()
{
return CultureDescription;
}
public static final Comparator COMPARE_BY_POSITION = new CompareEnumByPosition (allImportances);
......@@ -125,12 +132,16 @@ public class Importance extends AbstractEnumerated
{
NOT_APPLICABLE.ConsiderForAssessment = false;
NOT_APPLICABLE.WeightingScore = 0;
NOT_APPLICABLE.CultureDescription = "Not Applicable";
DESIRABLE.ConsiderForAssessment = true;
DESIRABLE.WeightingScore = 2;
DESIRABLE.CultureDescription = "Somewhat Important";
HIGHLY_DESIRABLE.ConsiderForAssessment = true;
HIGHLY_DESIRABLE.WeightingScore = 5;
HIGHLY_DESIRABLE.CultureDescription = "Important";
ESSENTIAL.ConsiderForAssessment = true;
ESSENTIAL.WeightingScore = 10;
ESSENTIAL.CultureDescription = "Essential";
}
......@@ -160,6 +171,7 @@ public class Importance extends AbstractEnumerated
attribs.put ("ConsiderForAssessment", ArrayFormatter.toObject(getConsiderForAssessment()));
attribs.put ("WeightingScore", ArrayFormatter.toObject(getWeightingScore()));
attribs.put ("CultureDescription", ArrayFormatter.toObject(getCultureDescription()));
return attribs;
}
......
......@@ -5,11 +5,12 @@
<DATA name="ConsiderForAssessment" type="boolean" />
<DATA name="WeightingScore" type="Integer"/>
<DATA name="CultureDescription" type="String"/>
<VALUE name="NOT_APPLICABLE" description="Not Applicable" ConsiderForAssessment="false" WeightingScore="0"/>
<VALUE name="DESIRABLE" description="Desirable" ConsiderForAssessment="true" WeightingScore="2"/>
<VALUE name="HIGHLY_DESIRABLE" description="Highly Desirable" ConsiderForAssessment="true" WeightingScore="5"/>
<VALUE name="ESSENTIAL" description="Essential" ConsiderForAssessment="true" WeightingScore="10"/>
<VALUE name="NOT_APPLICABLE" description="Not Applicable" ConsiderForAssessment="false" WeightingScore="0" CultureDescription='"Not Applicable"'/>
<VALUE name="DESIRABLE" description="Desirable" ConsiderForAssessment="true" WeightingScore="2" CultureDescription='"Somewhat Important"'/>
<VALUE name="HIGHLY_DESIRABLE" description="Highly Desirable" ConsiderForAssessment="true" WeightingScore="5" CultureDescription='"Important"'/>
<VALUE name="ESSENTIAL" description="Essential" ConsiderForAssessment="true" WeightingScore="10" CultureDescription='"Essential"'/>
</CONSTANT>
</ROOT>
\ No newline at end of file
......@@ -438,18 +438,18 @@ public class AnalysisEngine
}
scoreMap.put(factorClass, new Tuple.T2(score, colorCode));
}
scoreMap.put(null, getSuitabilityScore(testAnalysis));
scoreMap.put(null, getSuitabilityScore(testAnalysis, false));
}
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1, "AnalysisEngine --> getRoleFitSuitability completed for candidate ", candidate, " Level ", level);
return scoreMap;
}
public static Tuple.T2<Double, ColorCode> getSuitabilityScore(TestAnalysis testAnalysis)
public static Tuple.T2<Double, ColorCode> getSuitabilityScore(TestAnalysis testAnalysis, boolean maxScore)
{
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1, "AnalysisEngine --> getSuitabilityScore called for testAnalysis ", testAnalysis);
Double totalScore = testAnalysis.getWghtdLevelScore();
Double totalScore = maxScore ? testAnalysis.getMaxWghtdLevelScore() : testAnalysis.getWghtdLevelScore();
Double wghtdMeanScore = 0d;
Double wghtdStdDevScore = 0d;
Double suitabilityScore = 0d;
......
......@@ -103,6 +103,10 @@ public class PerformaOAuthCallbackDecorator implements ServletDecorator, Initial
companyUser.setRole(RoleType.ADMIN);
}
else if(companyUser.getIsEmailChanged()==Boolean.TRUE)
{
companyUser.changeEmail(request);
}
}
transaction.commit();
......
package performa.utils;
import oneit.appservices.config.ConfigMgr;
import oneit.components.InitialisationParticipant;
import oneit.components.ParticipantInitialisationContext;
import oneit.logging.LogLevel;
import oneit.logging.LogMgr;
import oneit.logging.LoggingArea;
import oneit.net.LoopbackHTTP;
import oneit.objstore.ObjectTransaction;
import oneit.objstore.services.TransactionServicesFactory;
import oneit.servlets.utils.BaseHttpServletRequest;
import oneit.servlets.utils.BaseHttpServletResponse;
import oneit.servlets.utils.decorator.ServletDecorator;
import oneit.servlets.utils.decorator.ServletDecoratorConfig;
import oneit.utils.BusinessException;
import oneit.utils.InitialisationException;
import performa.orm.ShortenedURL;
public class ShortenedURLDecorator implements ServletDecorator, InitialisationParticipant
{
public static final LoggingArea LOG = LoggingArea.createLoggingArea("ShortenedURLFilter");
public static final String JOB_URL_PREFIX = "/j/";
@Override
public void processRequest(ServletDecoratorConfig config, BaseHttpServletRequest request, BaseHttpServletResponse response) throws Exception
{
String pathInfo = request.getServletPath();
LogMgr.log(LOG, LogLevel.PROCESSING1, "ShortenedURLFilter.doFilter: ", pathInfo);
if (pathInfo != null && pathInfo.contains(JOB_URL_PREFIX))
{
int lastIndex = pathInfo.lastIndexOf("/");
String shortcut = pathInfo.substring(lastIndex+1);
try
{
TransactionServicesFactory servicesFactory = (TransactionServicesFactory) ConfigMgr.getConfigObject(ConfigMgr.GLOBAL_CONFIG_SYSTEM, "TransactionServices");
ObjectTransaction objTran = new ObjectTransaction (servicesFactory);
ShortenedURL[] shortURL = ShortenedURL.searchByCode(objTran, shortcut);
if(shortURL != null && shortURL.length > 0)
{
request.setAttribute("DecoratorFilter.TERMINATE", "Yes");
response.sendRedirect(LoopbackHTTP.getRemoteAccessURL(shortURL[0].getUrlLink()));
return;
}
}
catch (Exception e)
{
LogMgr.log(LOG, LogLevel.BUSINESS2, e, "Problem find the shorted url");
throw new BusinessException("Something went wrong. Please contact Admin");
}
}
config.forwardRequest(request, response);
}
@Override
public void init(ParticipantInitialisationContext context) throws InitialisationException
{
}
}
\ No newline at end of file
......@@ -45,6 +45,8 @@ public class Utils
public static final String LEVEL_MANAGEMENT = "Management";
public static final String LEVEL_EXECUTIVE = "Executive";
public static final String HEAP_ANALYSIS_ID = ConfigMgr.getKeyfileString("heap.analysis.id", "3411110378");
public static final String INTERCOM_APP_ID = ConfigMgr.getKeyfileString("intercom.appId", "");
public static final String INTERCOM_TOKEN = ConfigMgr.getKeyfileString("intercom.token", "");
public static Role getRole(String role, ObjectTransaction transaction)
{
......@@ -463,7 +465,7 @@ public class Utils
Map defaultParams = CollectionUtils.mapEntry("link", link).toMap();
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser);
Utils.sendMail(emailer, transform, new String[]{companyUser.getEmailAddressFromUser()}, null, companyUser);
Utils.sendMail(emailer, transform, new String[]{companyUser.getUser().getEmail()}, null, companyUser);
LogMgr.log(CompanyUser.LOG, LogLevel.PROCESSING1, "Sent email changed mail successfully from " + callingClass + " to :: ", companyUser);
}
......
......@@ -47,6 +47,7 @@ public class WebUtils
public static final String RESET_PASSWORD = "ResetPassword";
public static final String COMPANY_PROFILE = "CompanyProfile";
public static final String INVITE_USERS = "InviteUsers";
public static final String FORGOT_PASSWORD = "ForgotPassword";
public static String getArticleLink(HttpServletRequest request, ObjectTransaction objTran, String articleShortcut, String renderMode)
......
......@@ -1467,23 +1467,33 @@ span.rate-label {
margin-right: 8px;
}
.share-link {
width: 30.578%;
width: 40%;
background: url(../images/link-icon.png) no-repeat ;
height: 100px;
text-align: left;
background-position: left 20px center;
padding: 30px 0 20px 60px;
}
.copy-link{
font-size: 11px;
color: #9b9b9b;
}
.share-btn {
width: 13.002%;
width: 12%;
background-color: #efefef;
}
.linkdin-icon {
width: 13.6%;
width: 12%;
}
.facebook-icon {
width: 13.73%;
width: 12%;
}
.shape-icon{
width: 14.73%;
width: 12%;
}
.more-icon {
width: 14.3%;
width: 12%;
}
.goto-job-btn{
display: inline-block;
......@@ -2950,6 +2960,16 @@ span.export-candidate,span.appli-status-short{
.pro-bar {
padding: 28px 38px 22px 62px;
text-align: left;
cursor: pointer;
}
.pro-bar:hover{
box-shadow: 3px 3px 15px #666;
border-color:#C76C0C;
cursor: pointer;
/*Opacity*/
zoom: 1;
filter: alpha(opacity=100);
opacity: 1;
}
span.appli-percen {
color: #67b413;
......@@ -3238,21 +3258,21 @@ input.add-note-btn:hover{
padding: 0 !important;
}
.red-b {
background: #f9623d none repeat scroll 0 0 !important;
background: #fb5d67 none repeat scroll 0 0 !important;
float: left;
position: relative;
z-index: 10;
/*height: 10px;*/
}
.yellow-b{
background-color: #ffd14c !important;
background-color: #fedd6f !important;
float: left;
position: relative;
z-index: 10;
/*height: 10px;*/
}
.green-b{
background-color: #03ac66 !important;
background-color: #41bdb4 !important;
float: left;
position: relative;
z-index: 10;
......@@ -5561,4 +5581,185 @@ input{
color: #7d7f82;
padding: 16px;
float: left;
}
\ No newline at end of file
}
.skip-btn{
letter-spacing: 1px;
color: #ffffff;
font-size: 11px;
font-weight: 500;
border-radius: 100px;
background-color: #667281;
display: inline-block;
min-height: 45px;
line-height: 45px;
padding: 0 23.37px;
text-transform: uppercase;
background-repeat: no-repeat;
background-position: center left 20px;
padding: 0px 35px 0px 35px;
margin-top: 10px
}
/*password popup*/
.strength_wrapper {
position: relative;
text-align: left;
}
.strength_meter {
position: absolute;
left: 0px;
top: 0px;
width: 100%;
z-index: -1;
overflow: hidden;
}
.button_strength {
text-decoration: none;
color: #4d4d4d;
font-size: 13px;
display: block;
}
.strength_meter div {
width: 0%;
height: 34px;
-webkit-transition: all .3s ease-in-out;
-moz-transition: all .3s ease-in-out;
-o-transition: all .3s ease-in-out;
-ms-transition: all .3s ease-in-out;
transition: all .3s ease-in-out;
}
.strength_meter div p {
position: absolute;
right: 10px;
color: #4d4d4d;
font-size: 13px;
padding-right: 30px;
}
.veryweak {
background-color: #FF7979;
width: 25% !important;
}
.weak {
background-color: #FDA068;
width: 50% !important;
}
.medium {
background-color: #FFE560;
width: 75% !important;
}
.strong {
background-color: #9BF47D;
width: 100% !important;
}
.info_box {
position: relative;
background: #fff;
border: 1px solid #ccc;
padding: 15px;
}
.info_box:after, .info_box:before{
right:100%;
top:50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
.info_box:after{
border-color: rgba(255,255,255,0);
border-right-color: #fff;
border-width: 15px;
margin-top: -15px;
}
.info_box:before{
border-color: rgba(204,204,204,0);
border-right-color: #ccc;
border-width: 16px;
margin-top: -16px;
}
/* Styles for verification */
.pswd_info {
position:absolute;
width: 280px;
padding:0;
/* background:#fefefe; */
font-size:20px;
/* border-radius:15px;
box-shadow:0 1px 3px #ccc;
border:1px solid #ddd;*/
display:none;
z-index: 1000;
top: -25px;
right: -295px;
/* background-color: rgb(238,238,238);*/
/*box-shadow: 5px 5px 5px #888888;*/
}
/*
.pswd_info:before,
.pswd_info:after {
position: absolute;
bottom: 100%;
content: '';
}
.pswd_info:before {
right: 52px;
border-right: 17px solid transparent;
border-bottom: 17px solid #ddd;
border-left: 17px solid transparent;
}
.pswd_info:after {
right: 53px;
border-right: 16px solid transparent;
border-bottom: 16px solid rgb(238,238,238);
border-left: 16px solid transparent;
}*/
.pswd_info h4 {
margin:0 0 10px 0;
padding:0;
font-weight:normal;
font-size: 1em;
font-size: 0.7em;
}
.pswd_info ul {
padding: 0;
margin: 0;
list-style-type: none;
font-size: 17px;
}
.pswd_info ul li {
visibility: visible !important;
height: 20px !important;
min-height: 20px !important;
line-height:24px;
font-size: 0.7em;
padding-left: 24px !important;
}
.pswd_info .invalid {
background:url(../images/invalid.png) no-repeat 0 50%;
color:#ec3f41;
}
.pswd_info .valid {
background:url(../images/valid.png) no-repeat 0 50%;
color:#3a7d34;
}
......@@ -3,6 +3,8 @@
<%@ include file="inc/dynamic_content_core_top.jsp" %>
<%@ include file="/inc/stdimports50.jsp" %>
<%@ page import="performa.utils.*"%>
<%@ page import="performa.intercom.utils.*"%>
<%@ page import="performa.intercom.resources.User"%>
<%
ORMProcessState process = (ORMProcessState)(ProcessDecorator.getDefaultProcess(request));
......
<%@ page import="oneit.servlets.jsp.*, oneit.servlets.process.*,java.util.*,java.io.*" %>
<%@ page extends="oneit.servlets.jsp.BaseJSP" %>
<%! protected String getName (ServletConfig config) { return "process_error_jsp"; } %>
<%@ include file="./skin/oneit/include/small_head_pre.jspf" %>
<title>We signed you out</title>
<%@ include file="./skin/oneit/include/small_head_post.jspf" %>
<%
String restartLink = "../index.jsp";
%>
<body>
<%@ include file="./skin/oneit/include/small_content_pre.jspf" %>
<p class="info_header">We signed you out</p>
<p class="info_text">
To help protect your account, we automatically sign you out of Talentology after a long period of inactivity.
</p>
<%
if(restartLink != null)
{
%>
<p class="info_text"><a href="<%= restartLink %>">Sign in again</a></p>
<% } %>
<p class="info_text">
Message generated on <br/>
<span style="font-size: 12px;">
<%= new java.util.Date().toString()%>.
</span>
</p>
<%@ include file="./skin/oneit/include/small_content_post.jspf" %>
</body>
</html>
\ No newline at end of file
<?xml version="1.0"?>
<OBJECTS name="AdminPortal">
<NODE name="DecoratorFilter::performa">
<DECORATOR factory="Participant" class="performa.utils.ShortenedURLDecorator"/>
</NODE>
<NODE name="dynamic_content_form_client" factory="Participant">
<INHERITS factory="Named" nodename="dynamic_content_form"/>
......@@ -32,7 +36,7 @@
<FORM name="*.changeApplicationStatus" factory="Participant" class="performa.form.ChangeApplicationStatusFP"/>
<FORM name="*.bulkupdate" factory="Participant" class="performa.form.BulkUpdateFP"/>
<FORM name="*.navigateBetweenStatus" factory="Participant" class="performa.form.NavigateBetweenStatusFP"/>
<FORM name="*.sendCompanyUserInvites" factory="Participant" class="performa.form.SendCompanyUserInvitesFP">
<FORM name="*.sendCompanyUserInvites" factory="Participant" class="performa.form.SendCompanyUserInvitesFP">
<AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/>
<InvitationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="InvitationMail"/>
</FORM>
......
......@@ -128,6 +128,15 @@
</TASK>
<TASK factory="Participant" class="oneit.appservices.batch.DefaultTask" lockName="performa">
<RUN class="performa.batch.URLShortnerBatch" factory="Participant"/>
<WHEN factory="MetaComponent" component="BatchSchedule" selector="performa.runbatch">
<NODE name="schedule" class="oneit.appservices.batch.NeverSchedule">
</NODE>
</WHEN>
</TASK>
</NODE>
......
......@@ -77,7 +77,7 @@
<div class="create-job">
<div class="assessment-criteria">
<div class="form-group">
<label>Include Assessment Criteria for this position? <a href="#" class="info-icon"><img src="images/info-icon.png" /></a> </label>
<label>Include Requirements for this Job? <a href="#" class="info-icon"><img src="images/info-icon.png" /></a> </label>
<span class="pull-right">
<label class="switch">
<oneit:recalcClass htmlTag="span" classScript="job.showAssessmentCriteriaSection() ? 'checkbox checked': 'checkbox unchecked'" job="<%= job %>">
......@@ -129,7 +129,7 @@
</oneit:recalcClass>
<oneit:recalcClass htmlTag="span" class="skill-label" classScript="job.getAssessmentCriteraCountByType(criteria) > 0 ? 'hide': 'show'" job="<%= job %>" criteria="<%= criteria %>">
<span class="skill-label">No <oneit:toString value="<%= criteria %>" mode="EscapeHTML"/> currently added for this role.</span>
<span class="skill-label">No required <oneit:toString value="<%= criteria %>" mode="EscapeHTML"/><%= criteria.getIsSingular() ? " has" : " have"%> been added.</span>
</oneit:recalcClass>
</span>
......
......@@ -74,7 +74,7 @@
</div>
<div class="text-center company-profile-btn">
<oneit:button value="Confirm details & invite users" name="gotoPage" cssClass="btn btn-primary box-btn"
<oneit:button value="Confirm details & invite teammates" name="gotoPage" cssClass="btn btn-primary box-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage).toMap() %>"/>
</div>
</div>
......
......@@ -13,8 +13,9 @@
Debug.assertion(job != null, "Job is null in admin portal create job");
String url = LoopbackHTTP.getRemoteAccessURL("/ApplicantPortal-ApplyJob.htm?" + "id=" + job.getID() + "&key=" + job.getRandomKey());
String nextPage = WebUtils.getSamePageInRenderMode(request, WebUtils.VIEW_APPLICANTS);
String url = job.getShortenedUrlLink();
boolean fromJob = request.getParameter("fromJob") != null ? Boolean.parseBoolean(request.getParameter("fromJob")) : false;
String nextPage = WebUtils.getSamePageInRenderMode(request, (fromJob ? "Page" : WebUtils.VIEW_APPLICANTS));
%>
<script>
......@@ -35,7 +36,14 @@
<div class="main-created-job">
<h1 class="page-title created-job-title">
Congratulations! Your job is now open
<%
if(fromJob)
{
%>
Congratulations! Your job is now open
<%
}
%>
<a href="<%= url %>" id="jobURL" style="display:none;">
<%= url %>
</a>
......@@ -43,23 +51,31 @@
<div class="form-page-area">
<div class="job-share-icon">
<ul>
<li class="share-link" onclick="copyToClipboard()"><a href="#"><img src="images/link-icon.png" /> Copy link to clipboard</a></li>
<li class="share-btn"><a href="#">Share</a></li>
<li class="share-link" onclick="copyToClipboard()">
<a class="linked-col" href="#">
<div><%= url %></div>
<span class="copy-link">(Copy link to clipboard)</span>
</a>
</li>
<!-- <li class="share-btn"><a href="#">Share</a></li>
<li class="linkdin-icon"><a href="#"><img src="images/linkedin-icon.png" /></a></li>
<li class="facebook-icon"><a href="#"><img src="images/facebook-icon.png"/></a></li>
<li class="shape-icon"><a href="#"><img src="images/shape.png" /></a></li>
<li class="more-icon"><a href="#"><img src="images/more-icon.png" /></a></li>
<li class="more-icon"><a href="#"><img src="images/more-icon.png" /></a></li>-->
</ul>
</div>
<p class="job-txt">
This job will be open for 30 days until&nbsp;<oneit:toString value="<%= job.getApplyBy() %>" mode="PerformaDate"/>.
</p>
<div class="text-center">
<oneit:button value="Go to Job" name="gotoPage" cssClass="btn btn-primary largeBtn"
<oneit:button value="<%= "Go to Job" + (fromJob ? "s" : "")%>" name="gotoPage" cssClass="btn btn-primary largeBtn"
requestAttribs='<%= CollectionUtils.mapEntry("nextPage", nextPage).toMap() %>'/>
</div>
<div class="space-55"></div>
</div>
</div>
<style>
.job-share-icon li a.linked-col {line-height: 20px;}
</style>
</oneit:form>
</oneit:dynIncluded>
......@@ -76,7 +76,7 @@
<div class="form-brack-line-sub"></div>
<div class="form-group">
<label class="label-16">Job Match Assessment</label>
<label class="label-16">Role</label>
</div>
<div class="form-group">
<div class="beloning job-match-ass">
......
......@@ -16,7 +16,6 @@
//to process company user verification
String id = request.getParameter("id");
String key = request.getParameter("key");
Boolean invalid = Boolean.TRUE;
if(id!=null && key!=null)
{
......@@ -24,38 +23,16 @@
if(companyUser!=null && companyUser.getIsEmailChanged()==Boolean.TRUE)
{
try
{
companyUser.setIsEmailChanged(Boolean.FALSE);
companyUser.setIsAccountVerified(Boolean.TRUE);
objTran.commit();
objTran.commitResources();
}
finally
{
objTran.releaseResources();
}
invalid = Boolean.FALSE;
// response.sendRedirect(nextPage);
session = request.getSession();
session.removeAttribute(SecUser.SEC_USER_ID);
session.setAttribute("EmailToVerify", companyUser.getUser());
response.sendRedirect(nextPage);
return;
}
}
if(invalid)
{
%>
<h3>Verification Error</h3>
<p><span>Access expired.</span></p>
<%
}
else
{
%>
<p>Your e-mail address is successfully verified! Please login to access your account!</p>
<a class="btn btn-primary" href="<%= nextPage %>">Go to login</a>
<%
}
%>
<h3>Verification Error</h3>
<p><span>Access expired.</span></p>
<%@ include file="inc/htmlfooter_nopriv.jsp" %>
\ No newline at end of file
......@@ -19,9 +19,10 @@
</script>
<style>
.btn-disabled button{
.btn-disabled{
opacity: 0.6;
background-color: #0582ba;
cursor: not-allowed;
}
#right-mark {
......@@ -42,10 +43,11 @@
margin: auto auto;
}
</style>
<%
ORMProcessState process = (ORMProcessState) ProcessDecorator.getDefaultProcess(request);
ObjectTransaction objTran = process.getTransaction ();
CompanyUser companyUser = CompanyUser.createCompanyUser(objTran);
CompanyUserNPO companyUser = CompanyUserNPO.createCompanyUserNPO(objTran);
%>
<oneit:form name="forgotPassword" method="post" enctype="multipart/form-data">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
......@@ -64,12 +66,15 @@
</oneit:recalcClass>
</div>
<div class="form-group">
<oneit:recalcClass htmlTag="div" classScript="companyUser.emailExists() ? 'show': 'btn-disabled'" companyUser="<%= companyUser %>">
<oneit:recalcClass htmlTag="div" classScript="companyUser.emailExists() ? 'show': 'hide'" companyUser="<%= companyUser %>">
<oneit:button value="Send reset link" name="forgotPassword" cssClass="box-btn send-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", "reset_password_sent.jsp")
.mapEntry ("CompanyUser", companyUser)
.toMap() %>"/>
</oneit:recalcClass>
<oneit:recalcClass htmlTag="div" classScript="companyUser.emailExists() ? 'hide': 'show'" companyUser="<%= companyUser %>">
<input type="button" value="Send reset link" disabled="true" class="box-btn send-btn btn-disabled">
</oneit:recalcClass>
</div>
</div>
</oneit:form>
......
......@@ -34,25 +34,31 @@
</oneit:button>
</li>
<li class="<%= tabNumber == "2" ? "active" : "" %>">
<oneit:button value=" " name="gotoPage" skin="link"
<%
int noOfShortlisted = job.getNoOfCandidatesShortlisted();
%>
<oneit:button value=" " name="gotoPage" skin="link" disabled="<%= noOfShortlisted > 0 ? "false" : "true" %>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", secondTab)
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap())
.toMap() %>">
<span>
<oneit:toString value="<%= job.getNoOfCandidatesShortlisted() %>" mode="Integer" />
<oneit:toString value="<%= noOfShortlisted %>" mode="Integer" />
</span>
Shortlist
Shortlisted
</oneit:button>
</li>
</ul>
</div>
<div class="unsutable <%= tabNumber == "3" ? "active" : "" %>">
<oneit:button value=" " name="gotoPage" skin="link"
<%
int noOfUnsuitable = job.getNoOfCandidatesUnsuitable();
%>
<oneit:button value=" " name="gotoPage" skin="link" disabled="<%= noOfUnsuitable > 0 ? "false" : "true" %>"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", thirdTab)
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap())
.toMap() %>">
<span>
<oneit:toString value="<%= job.getNoOfCandidatesUnsuitable() %>" mode="Integer" />
<oneit:toString value="<%= noOfUnsuitable %>" mode="Integer" />
</span>
Unsuitable
</oneit:button>
......
......@@ -30,10 +30,10 @@
.mapEntry("procParams", CollectionUtils.mapEntry("Company", company).toMap())
.toMap() %>">
<span>2</span>
<div>Invite Users</div>
<div>Invite Teammates</div>
</oneit:button>
</li>
<li><a href="#"><span>3</span><div>Create a Job</div></a></li>
<li><a href="#"><span>3</span><div>Welcome</div></a></li>
</ul>
</div>
......
......@@ -5,8 +5,15 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"></meta>
<meta name="viewport" content="width=device-width, initial-scale=1"></meta>
<%
Company company = clientUser != null && clientUser.getExtension(CompanyUser.REFERENCE_CompanyUser) != null
? clientUser.getExtension(CompanyUser.REFERENCE_CompanyUser).getCompany() : null;
Company company = clientUser != null && clientUser.getExtension(CompanyUser.REFERENCE_CompanyUser) != null
? clientUser.getExtension(CompanyUser.REFERENCE_CompanyUser).getCompany() : null;
User intercomUser = (User)session.getAttribute("IntercomUser");
if(intercomUser == null)
{
intercomUser = IntercomUtils.findUserByID(clientUser);
session.setAttribute("IntercomUser" , intercomUser);
}
%>
<title><%= "Talentology" + (company != null ? " - " + company.getCompanyName() : "")%></title>
......@@ -16,7 +23,8 @@
</head>
<script>
window.intercomSettings = {
app_id: "kqed9h3r"
app_id: "<%= Utils.INTERCOM_APP_ID %>",
user_id: "<%= clientUser.getID().toString() %>"
};
</script>
<script>
......
......@@ -41,7 +41,7 @@
<div class="main-user-invite" id="<%= secUser.getID() %>">
<span class="delete-company-user" onclick="return deleteUser (<%= deleteVarKey %>)"><span></span></span>
<oneit:ormInput obj="<%= secUser %>" type="text" attributeName="Email" cssClass="form-control" />
<oneit:ormInput obj="<%= secUser %>" type="text" attributeName="Email" cssClass="form-control" style="text-transform: lowercase"/>
</div>
</oneit:evalBody>
......
......@@ -16,7 +16,7 @@
<oneit:button value=" " name="gotoPage" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", firstPage)
.toMap() %>">
Company Details
Hiring Team Details
</oneit:button>
</li>
<li class="">Manage Plan</li>
......
......@@ -6,7 +6,7 @@
<%
String tabNumber = (String) getData(request, "TabNumber");
String firstPage = WebUtils.getSamePageInRenderMode(request, WebUtils.MY_DETAILS);
String firstPage = WebUtils.getSamePageInRenderMode(request, "Page");
%>
<oneit:dynIncluded>
......
......@@ -126,7 +126,7 @@
<div class="<%= job.getIncludeAssessmentCriteria()==Boolean.TRUE ? "col-sm-4" : "col-sm-6" %> col-xs-12 text-center thr-block role-fit" href="#1a" data-toggle="tab" id="progress1" onClick="tabToggle('#tab1', '.role-fit')">
<label class="progress-label">role fit</label>
<div class="<%= colorClass %> fixed-width">
<p style="display:none;"><oneit:toString value="<%= roleFitData.get0()!=null?roleFitData.get0():0D %>" mode="TwoDPDouble" nullValue="0"/></p>
<p style="display:none;"><oneit:toString value="<%= jobApplication.getRoleFitPercentage() %>" mode="TwoDPDouble" nullValue="0"/></p>
</div>
<div class="row four-label">
<%
......@@ -171,7 +171,7 @@
</div>
<div class="<%= job.getIncludeAssessmentCriteria()==Boolean.TRUE ? "col-sm-4" : "col-sm-6" %> col-xs-12 text-center thr-block culture-fit" href="#2a" data-toggle="tab" id="progress2" onClick="tabToggle('#tab2', '.culture-fit')">
<label class="progress-label">culture fit</label>
<div class="percent-green fixed-width">
<div class="<%= "percent-" + jobApplication.getCultureFitColor() + " fixed-width" %>">
<p style="display:none;"><oneit:toString value="<%= jobApplication.getCultureFitScore() %>" mode="TwoDPDouble" /></p>
</div>
<div class="row four-label">
......@@ -221,7 +221,7 @@
%>
<div class="col-sm-4 col-xs-12 text-center thr-block requirement-fit" href="#3a" data-toggle="tab" id="progress3" onClick="tabToggle('#tab3','.requirement-fit')">
<label class="progress-label">requirements</label>
<div class="percent-blue fixed-width">
<div class="<%= "percent-" + jobApplication.getRequirementFitColor() + " fixed-width" %>">
<p style="display:none;"><oneit:toString value="<%= jobApplication.getRequirementFitScore() %>" mode="TwoDPDouble" /></p>
</div>
<div class="row four-label">
......@@ -287,7 +287,7 @@
<div class="main-pro-bar">
<div class="pro-bar">
<span class="appli-label"><oneit:toString value="<%= factorClass %>" mode="EscapeHTML"/></span>
<span class="appli-percen gray"><oneit:toString value="<%= rating %>" mode="TwoDPDouble"/></span>
<span class="appli-percen gray"><oneit:toString value="<%= rating %>" mode="WholeNumber"/></span>
<span class="appli-progress-bar">
<div class="progress">
<div class="progress-bar <%= cssClass %>" role="progressbar" aria-valuenow="<%= rating %>" aria-valuemin="0" aria-valuemax="100" style="width:<%= rating %>%"></div>
......@@ -361,7 +361,7 @@
<div class="main-pro-bar">
<div class="pro-bar">
<span class="appli-label"><oneit:toString value="<%= cClass %>" mode="EscapeHTML"/></span>
<span class="appli-percen gray"><oneit:toString value="<%= rating %>" mode="WholeNumber" /></span>
<span class="appli-percen gray"><oneit:toString value="<%= rating %>" mode="PercentageWholeNumber" /></span>
<span class="appli-progress-bar">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="<%= rating %>" aria-valuemin="0" aria-valuemax="100" style="width:<%= rating %>%;"></div>
......@@ -412,7 +412,7 @@
<div class="main-pro-bar <%= importance %>">
<div class="pro-bar">
<span class="appli-label"><oneit:toString value="<%= importance %>" mode="EscapeHTML"/></span>
<span class="appli-percen gray"><oneit:toString value="<%= rating %>" mode="WholeNumber" /></span>
<span class="appli-percen gray"><oneit:toString value="<%= rating %>" mode="PercentageWholeNumber" /></span>
<span class="appli-progress-bar">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="<%= rating %>" aria-valuemin="0" aria-valuemax="100" style="width:<%= rating %>%"></div>
......
......@@ -79,8 +79,18 @@
<oneit:button value="Send invites & proceed" name="sendCompanyUserInvites" cssClass="btn btn-primary box-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("CompanyUser", companyUser)
.mapEntry("Skip", Boolean.FALSE)
.mapEntry("procParams", CollectionUtils.mapEntry("socialLogin", socialLogin).mapEntry("Company", company).toMap())
.toMap() %>"/>
<div>
<oneit:button value="Skip" name="sendCompanyUserInvites" cssClass="btn skip-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("CompanyUser", companyUser)
.mapEntry("Skip", Boolean.TRUE)
.mapEntry("procParams", CollectionUtils.mapEntry("socialLogin", socialLogin).mapEntry("Company", company).toMap())
.toMap() %>"/>
</div>
</div>
</div>
</oneit:form>
......
......@@ -6,13 +6,13 @@
<oneit:dynIncluded>
<%
Job job = (Job) process.getAttribute("Job");
String nextPage = WebUtils.getSamePageInRenderMode(request, WebUtils.CREATED_JOB);
String nextPage = WebUtils.getSamePageInRenderMode(request, WebUtils.CREATED_JOB) + "&fromJob=true";
String firstPage = WebUtils.getSamePageInRenderMode(request, WebUtils.CREATE_JOB);
String secondPage = WebUtils.getSamePageInRenderMode(request, WebUtils.ASSESSMENT_CRITERIA);
String thirdPage = WebUtils.getSamePageInRenderMode(request, WebUtils.WORKPLACE_CULTURE);
String fourthPage = WebUtils.getSamePageInRenderMode(request, WebUtils.JOB_MATCH);
Article jobsArticle = WebUtils.getArticleByShortCut(transaction, WebUtils.JOBS);
String jobsPage = jobsArticle.getLink(request, CollectionUtils.mapEntry("cms.rm", WebUtils.VIEW_APPLICANTS).toMap());
String fifthPage = WebUtils.getSamePageInRenderMode(request, WebUtils.JOB_REVIEW);
String jobsPage = WebUtils.getSamePageInRenderMode(request, "Page");
if(job == null && request.getParameter("JobID")!= null)
{
......@@ -102,7 +102,7 @@
<div class="form-brack-line-sub"></div>
<div class="form-group">
<label class="label-16">Job Match Assessment</label>
<label class="label-16">Role</label>
<oneit:button value="EDIT" name="gotoPage" cssClass="add-more-btn review-edit-btn pull-right" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", fourthPage)
.mapEntry("procParams", CollectionUtils.mapEntry("Job", job).toMap())
......@@ -214,6 +214,7 @@
<oneit:button value="Open this job" name="saveJob" cssClass="btn btn-primary btn-green top-margin-25 largeBtn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry ("fromPage", fifthPage)
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry ("attribNamesToRestore", Collections.singleton("Job"))
.toMap() %>" />
......
......@@ -48,7 +48,9 @@
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="jobs-list-shorting">
<div class="d-job-title all-jobs-title">All Jobs</div>
<div class="d-job-title all-jobs-title">
<%= jobStatus == null ? "All" : jobStatus.getDescription() %> Jobs
</div>
<div class="job-filter">
<ul class="">
<li class="lable-job-shorting">showing</li>
......@@ -59,7 +61,7 @@
.toMap() %>"/>
</li>
<%
for (JobStatus status : JobStatus.getJobStatusArray())
for (JobStatus status : Utils.getJobStatusesForClient())
{
%>
<li class="<%= (jobStatus != null && jobStatus == status ? "active" : "" )%>">
......
......@@ -47,19 +47,43 @@
Collection<CompanyUser> sortedCompanyUsers = Utils.getUsersSorted(companyUsers, userSortOpt);
Collection<CompanyUser> sortedPendingUsers = Utils.getUsersSorted(pendingUsers, userSortOpt);
company.setRoleType(RoleType.STANDARD);
%>
<script type="text/javascript">
$(document).ready(function()
{
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
$(".user-role").change(function()
{
var id = $(this).closest('.user-list-row').attr('id');
$('.save-user' + id).click();
});
validate();
$('input[name$=UserEmail]').keyup(function() {
recalcFunction();
validate();
});
});
function validate() {
if ($('.invite-btn').hasClass('disabled')) {
$('.btn-invite').attr('disabled', 'disabled');
} else {
$('.btn-invite').removeAttr('disabled');
}
}
</script>
<style>
button[disabled]{
opacity: 0.6;
background-color: #0582ba;
}
</style>
<oneit:form name="listUsers" method="post" enctype="multipart/form-data">
<div class="dashboard-content-area second-part">
......@@ -69,7 +93,7 @@
<div class="eq-justify-content">
<div class="manage-user-left">
<div class="jobs-list-shorting">
<div class="d-job-title all-jobs-title">Manage Users</div>
<div class="d-job-title all-jobs-title">Manage Teammates</div>
<div class="shorting-dropdown">
<span class="order-label">order by</span>
<select class="form-control" onChange="location=this.value">
......@@ -166,7 +190,7 @@
</div>
<div class="manage-user-right">
<div class="sidebar-title">
Invite a user
Invite a teammate
</div>
<div class="form-group">
<label><oneit:label GUIName="Email Address" /></label>
......@@ -184,13 +208,13 @@
<label><oneit:label GUIName="Role" /></label>
<oneit:ormEnum obj="<%= company %>" attributeName="RoleType" cssClass="form-control"/>
</div>
<div class="invite-btn">
<oneit:recalcClass htmlTag="div" classScript="company.getUserEmail()== null? 'invite-btn disabled': 'invite-btn enabled'" company="<%= company %>">
<oneit:button value="Invite" name="sendUserInvites" cssClass="btn btn-invite"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "invitationSent")
.toMap() %>" />
</div>
</oneit:recalcClass>
</div>
</div>
</div>
......
......@@ -32,5 +32,6 @@ Company.UserEmail = Email Address
Company.FirstName = First Name
Company.LastName = Last Name
Company.RoleType = Role
Company.CompanyLogo = Company Logo
Company.CompanyLogo = Logo
Company.HiringTeamType = Hiring Team
Company.CompanyName = Hiring Team Name
......@@ -4,3 +4,4 @@
#passwordNotMatch = The password does not match. Please try again.
#invitationSent = Your invitation has been successfully sent.
#invalidEmail = Invalid email address.
#emailChangeVefified = Your email address has been successfully changed and you can now use new email address when signing in.
\ No newline at end of file
......@@ -32,7 +32,7 @@
<div class="container-fluid">
<div class="row content">
<div class="main-content-area">
<h1 class="page-title">My Company</h1>
<h1 class="page-title">My Hiring Team</h1>
<div class="my-company-area">
<oneit:form name="editCompany" method="post" enctype="multipart/form-data">
......@@ -47,10 +47,10 @@
<div class="tab-content">
<div class="tab-pane active" id="company-detail">
<div class="tabpage-title">
<label class="label-16">Company Details</label>
<label class="label-16">Hiring Team Details</label>
</div>
<div class="form-group">
<label><oneit:label GUIName="Company Name" /></label>
<label><oneit:ormlabel obj="<%= company %>" field="CompanyName" /></label>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="CompanyName" cssClass="form-control" />
</div>
<div class="form-group">
......
......@@ -6,13 +6,14 @@
<oneit:dynIncluded>
<%
SecUser loggedInUser = SecUser.getTXUser(transaction);
CompanyUser companyUser = loggedInUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
ObjectTransaction objTran = process.getTransaction ();
SecUser loggedInUser = SecUser.getTXUser(transaction);
CompanyUser companyUser = loggedInUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
Debug.assertion(companyUser != null , "Invalid user in admin portal my details");
String nextPage = WebUtils.getSamePageInRenderMode(request, "Page");
boolean emailChanged = request.getAttribute("EmailChanged") != null ? (boolean) request.getAttribute("EmailChanged") : false;
String nextPage = WebUtils.getSamePageInRenderMode(request, "Page");
boolean emailChanged = request.getAttribute("EmailChanged") != null ? (boolean) request.getAttribute("EmailChanged") : false;
%>
<script type="text/javascript">
$(document).ready(function()
......@@ -31,15 +32,27 @@
});
});
</script>
</script>
<oneit:form name="editUser" method="post" enctype="multipart/form-data">
<div class="container-fluid">
<div class="row content">
<div class="main-content-area">
<h1 class="page-title">My Details</h1>
<h1 class="page-title">My Details</h1>
<div style="padding-left: 15px; padding-right: 15px;">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<%
if(companyUser.getIsEmailChanged()==Boolean.TRUE && request.getSession().getAttribute("EmailStillNotVerified")!=null)
{
request.getSession().removeAttribute("EmailStillNotVerified");
%>
<div class="error-message message-common">
<img src="images/infomation-icon.png" class="alert-icon">
<span class="message-txt">Your email address change still hasn't been verified!</span>
</div>
<%
}
%>
</div>
<div class="my-company-area">
<oneit:dynInclude page="/extensions/adminportal/inc/my_details_tabs.jsp" TabNumber="1" data="<%= CollectionUtils.EMPTY_MAP%>"/>
......
......@@ -14,10 +14,33 @@
{
CompanyUser companyUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
if(companyUser!=null && companyUser.isLoggedViaSocial() && companyUser.getIsAccountVerified()!=Boolean.TRUE)
if(companyUser!=null)
{
response.sendRedirect(WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.COMPANY_ACCOUNT_VERIFICATION).getLink(request));
return;
if(companyUser.isLoggedViaSocial() && companyUser.getIsAccountVerified()!=Boolean.TRUE)
{
response.sendRedirect(WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.COMPANY_ACCOUNT_VERIFICATION).getLink(request));
return;
}
//to notify email address change still not verified
if(request.getSession().getAttribute("EmailStillNotVerified")!=null)
{
response.sendRedirect(WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.MY_DETAILS).getLink(request));
return;
}
//to notify email address changed
if(request.getSession().getAttribute("EmailVerified")!=null)
{
request.getSession().removeAttribute("EmailVerified");
request.setAttribute(NotificationUtils.NOTIFICATION_MSG_PARAM, "emailChangeVefified");
String messageId = NotificationUtils.getNotifyIdIfRequired(process, request);
String link = WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.MY_DETAILS).getLink(request);
response.sendRedirect(NotificationUtils.appendNotifyIDToURL(link, messageId));
return;
}
}
}
......
......@@ -48,13 +48,24 @@
}
</style>
<%
if(request.getSession().getAttribute("EmailToVerify")!=null)
{
%>
<div class="form-group">
<p>Please login to verify your email address.</p>
</div>
<%
}
%>
<div class="main-box-layout login-box">
<oneit:form name="login" method="post">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="form-group text-left">
<label>Email Address</label>
<input type="text" class="form-control" name="username" required>
<input type="text" class="form-control" name="username" required spellcheck="false">
</div>
<div class="form-group text-left">
<label>Password</label>
......@@ -69,7 +80,7 @@
requestAttribs="<%= CollectionUtils.EMPTY_MAP%>"/>
</div>
<div class="form-group">
<oneit:button value="Dont have an account? Create account" name="gotoPage" cssClass="forgot-pass" skin="link"
<oneit:button value="Don&CloseCurlyQuote;t have an account? Sign up" name="gotoPage" cssClass="forgot-pass" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", "sign_up.jsp")
.toMap() %>"></oneit:button>
</div>
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS name="" xmlns:oneit="http://www.1iT.com.au">
<NODE name="Script" factory="Vector">
<NODE name="DDL" factory="Participant" class="oneit.sql.transfer.RedefineTableOperation">
<tableName factory="String">tl_job</tableName>
<column name="shortened_url_id" type="Long" length="11" nullable="true"/>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS name="" xmlns:oneit="http://www.1iT.com.au">
<NODE name="Script" factory="Vector">
<NODE name="DDL" factory="Participant" class="oneit.sql.transfer.DefineTableOperation">
<tableName factory="String">tl_shortened_url</tableName>
<column name="object_id" type="Long" nullable="false" length="11"/>
<column name="object_last_updated_date" type="Date" nullable="false" length="22"/>
<column name="object_created_date" type="Date" nullable="false" length="22"/>
<column name="code" type="String" nullable="false" length="8"/>
<column name="url_link" type="CLOB" nullable="false"/>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS xmlns:oneit="http://www.1iT.com.au" name="">
<NODE factory="Vector" name="Script"><NODE class="oneit.appservices.upgrade.cms.CMSArticleUpdateOperation" factory="Participant" name="ManageUsers">
<createSpecificIdentifier factory='String' value='C3QBLBVFH29N1DW078Q67SC93TQ2W6'/>
<articleIdentifiers factory="Array" class="java.lang.String">
<NODE factory="String" value="C3QBLBVFH29N1DW078Q67SC93TQ2W6"/>
</articleIdentifiers>
<createdLabel factory="String" value="C3QBLBVFH29N1DW078Q67SC93TQ2W6"/>
<articleAttributeChanges factory="Map">
<NODE name="Additional CSS Class" factory="String" value="second-menu"/>
<NODE name="Exclude From Sitemap" factory="Boolean" value="false"/>
<NODE name="Exclude from SEO Indexing" factory="Boolean" value="false"/>
<NODE name="Allow Disable" factory="Boolean" value="false"/>
<NODE name="Add Brackline Separator" factory="Boolean" value="true"/>
<NODE name="On Top Menu" factory="Boolean" value="false"/>
<NODE name="On Footer Left" factory="Boolean" value="false"/>
<NODE name="Menu Title" factory="String" value="Manage Teammates"/>
<NODE name="On Footer Menu" factory="Boolean" value="false"/>
<NODE name="Exclude From Search" factory="Boolean" value="false"/>
<NODE name="Menu Icon CSS" factory="String" value="manage-icon"/>
<NODE name="On Left Menu" factory="Boolean" value="true"/>
<NODE name="Shortcuts" factory="String" value="ManageUsers"/>
<NODE name="Exclude From Navigation" factory="Boolean" value="false"/>
<NODE name="On Footer Right" factory="Boolean" value="false"/>
</articleAttributeChanges>
<ormAttributeChanges factory="Map">
<NODE name="PublishDate" factory="Date" value="2017-07-04 00:00:00"/>
<NODE name="WithdrawDate" factory="Date" value="2067-07-04 10:00:00"/>
<NODE name="Title" factory="String" value="ManageUsers"/>
<NODE name="ShortTitle" factory="String" value="ManageUsers"/>
<NODE name="SortOrder" factory="Integer" value="37839081"/>
<NODE name="Type" factory="Enumerated" class="oneit.business.content.ArticleType" value="ARTICLE"/>
<NODE name="Template" factory="Enumerated" class="oneit.business.content.ArticleTemplate" value="MANAGE_USERS"/>
</ormAttributeChanges>
<content factory="Map"> <NODE name="Body" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
<NODE name="Synopsis" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
</content>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS xmlns:oneit="http://www.1iT.com.au" name="">
<NODE factory="Vector" name="Script"><NODE class="oneit.appservices.upgrade.cms.CMSArticleUpdateOperation" factory="Participant" name="MyCompany">
<createSpecificIdentifier factory='String' value='L81G02K5MTK0TOFUS8WCGZ42NSR06P'/>
<articleIdentifiers factory="Array" class="java.lang.String">
<NODE factory="String" value="L81G02K5MTK0TOFUS8WCGZ42NSR06P"/>
</articleIdentifiers>
<createdLabel factory="String" value="L81G02K5MTK0TOFUS8WCGZ42NSR06P"/>
<articleAttributeChanges factory="Map">
<NODE name="Additional CSS Class" factory="String" value="second-menu"/>
<NODE name="Exclude From Sitemap" factory="Boolean" value="false"/>
<NODE name="Exclude from SEO Indexing" factory="Boolean" value="false"/>
<NODE name="Allow Disable" factory="Boolean" value="false"/>
<NODE name="Add Brackline Separator" factory="Boolean" value="false"/>
<NODE name="On Top Menu" factory="Boolean" value="false"/>
<NODE name="On Footer Left" factory="Boolean" value="false"/>
<NODE name="Menu Title" factory="String" value="My Hiring Team"/>
<NODE name="On Footer Menu" factory="Boolean" value="false"/>
<NODE name="Exclude From Search" factory="Boolean" value="false"/>
<NODE name="Menu Icon CSS" factory="String" value="company-icon"/>
<NODE name="On Left Menu" factory="Boolean" value="true"/>
<NODE name="Shortcuts" factory="String" value="MyCompany"/>
<NODE name="Exclude From Navigation" factory="Boolean" value="false"/>
<NODE name="On Footer Right" factory="Boolean" value="false"/>
</articleAttributeChanges>
<ormAttributeChanges factory="Map">
<NODE name="PublishDate" factory="Date" value="2017-07-04 00:00:00"/>
<NODE name="WithdrawDate" factory="Date" value="2067-07-04 10:00:00"/>
<NODE name="Title" factory="String" value="MyCompany"/>
<NODE name="ShortTitle" factory="String" value="MyCompany"/>
<NODE name="SortOrder" factory="Integer" value="37839082"/>
<NODE name="Type" factory="Enumerated" class="oneit.business.content.ArticleType" value="ARTICLE"/>
<NODE name="Template" factory="Enumerated" class="oneit.business.content.ArticleTemplate" value="MY_COMPANY"/>
</ormAttributeChanges>
<content factory="Map"> <NODE name="Body" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
<NODE name="Synopsis" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
</content>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
......@@ -43,17 +43,33 @@
&& companyUser.getIsAccountVerified()!=Boolean.TRUE)
{
socialLogin = Boolean.TRUE;
invalid = Boolean.FALSE;
}
else
if(invalid)
{
response.sendRedirect(WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.ADMIN_HOME).getLink(request));
}
}
process.setAttribute("Company", companyUser.getCompany());
Debug.assertion(companyUser != null, "Invalid CompanyUser in admin portal");
process.setAttribute("Company", companyUser.getCompany());
%>
<oneit:script>
<oneit:script src="/scripts/password_strength_lightweight.js"/>
</oneit:script>
<style>
button[disabled] {
opacity: 0.6;
background-color: #0582ba;
}
</style>
<oneit:form name="verify" method="post">
<%
String key = Utils.getPwdKeyOfSecUser(request, secUser, true);
%>
<script type="text/javascript">
$(document.body).addClass('bg-color');
......@@ -61,6 +77,11 @@
validate();
$('input').on('change keyup', function() { validate() });
interval = setInterval(function() { validate(); }, 500);
$('#myPassword').strength_meter({
"inputName" : "<%= key %>"
});
});
function validate() {
......@@ -78,19 +99,10 @@
$('.verify-btn').attr('disabled', 'disabled');
} else {
$('.verify-btn').removeAttr('disabled');
clearInterval(interval);
// clearInterval(interval);
}
}
</script>
<style>
button[disabled] {
opacity: 0.6;
background-color: #0582ba;
}
</style>
<oneit:form name="verify" method="post">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="main-box-layout login-box">
......@@ -99,11 +111,9 @@
<%
if(!socialLogin)
{
String key = Utils.getPwdKeyOfSecUser(request, secUser, true);
%>
<div class="form-group text-left">
<div class="form-group text-left" id="myPassword">
<label>Password</label>
<oneit:input type="password" name="<%= key %>" class="form-control second-style reset-pw"/>
</div>
<div class="form-group text-left">
<label>Confirm password</label>
......
......@@ -143,7 +143,7 @@
<div class="jcc-box">
<div class="job-match jcc">
<img src="images/app-job-match-icon.svg"> Role fit
<span><oneit:toString value="<%= jobApplication.getRoleFitScore() %>" mode="TwoDPDouble" /></span>
<span><oneit:toString value="<%= jobApplication.getRoleFitPercentage() %>" mode="PercentageTwoDP" /></span>
</div>
<div class="detail-box">
<%
......@@ -157,7 +157,7 @@
<oneit:toString value="<%= factorClass %>" mode="EscapeHTML"/>
</div>
<div class="detail-no green">
<oneit:toString value="<%= roleScoreMap.get(factorClass).get0() %>" mode="TwoDPDouble"/>
<oneit:toString value="<%= roleScoreMap.get(factorClass).get0() %>" mode="PercentageWholeNumber"/>
</div>
</div>
<%
......@@ -172,7 +172,7 @@
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicationPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>">
<oneit:toString value="<%= jobApplication.getCultureFitScore() %>" mode="WholeNumber" />
<oneit:toString value="<%= jobApplication.getCultureFitScore() %>" mode="PercentageWholeNumber" />
</oneit:button>
</span>
</div>
......@@ -189,7 +189,7 @@
%>
<div class="detail-row">
<div class="detail-label"><oneit:toString value="<%= cClass %>" mode="EscapeHTML"/></div>
<div class="detail-no green"><oneit:toString value="<%= cultureFitData.get(cClass) != null ? cultureFitData.get(cClass).get0() : 0 %>" mode="WholeNumber" /></div>
<div class="detail-no green"><oneit:toString value="<%= cultureFitData.get(cClass) != null ? cultureFitData.get(cClass).get0() : 0 %>" mode="PercentageWholeNumber" /></div>
</div>
<%
}
......@@ -206,7 +206,7 @@
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicationPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>">
<oneit:toString value="<%= jobApplication.getRequirementFitScore() %>" mode="WholeNumber" />
<oneit:toString value="<%= jobApplication.getRequirementFitScore() %>" mode="PercentageWholeNumber" />
</oneit:button>
</span>
</div>
......@@ -219,7 +219,7 @@
%>
<div class="detail-row">
<div class="detail-label"><oneit:toString value="<%= importance %>" mode="EscapeHTML"/></div>
<div class="detail-no green"><oneit:toString value="<%= requirementFitData.get(importance) %>" mode="WholeNumber" /></div>
<div class="detail-no green"><oneit:toString value="<%= requirementFitData.get(importance) %>" mode="PercentageWholeNumber" /></div>
</div>
<%
}
......
......@@ -147,7 +147,7 @@
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicationPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>">
<oneit:toString value="<%= jobApplication.getRoleFitScore() %>" mode="TwoDPDouble" />
<oneit:toString value="<%= jobApplication.getRoleFitPercentage() %>" mode="PercentageWholeNumber" />
</oneit:button>
</span>
</div>
......@@ -158,7 +158,7 @@
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicationPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>">
<oneit:toString value="<%= jobApplication.getCultureFitScore() %>" mode="WholeNumber" />
<oneit:toString value="<%= jobApplication.getCultureFitScore() %>" mode="PercentageWholeNumber" />
</oneit:button>
</span>
</div>
......@@ -173,7 +173,7 @@
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", applicationPage)
.mapEntry("procParams", CollectionUtils.mapEntry("JobApplication", jobApplication).toMap())
.toMap() %>">
<oneit:toString value="<%= jobApplication.getRequirementFitScore() %>" mode="WholeNumber" />
<oneit:toString value="<%= jobApplication.getRequirementFitScore() %>" mode="PercentageWholeNumber" />
</oneit:button>
</span>
</div>
......
......@@ -45,31 +45,31 @@
valElement: 'p',
strokeWidth: 15,
bgColor: '#e5e8eb',
ringColor: '#f9623d',
ringColor: '#fb5d67',
textColor: '#4a4a4a',
fontSize: '30px',
fontWeight: 'normal',
showPercent: false
showPercent: true
});
$('.percent-yellow-b').percentageLoader({
valElement: 'p',
strokeWidth: 15,
bgColor: '#e5e8eb',
ringColor: '#ffd14c',
ringColor: '#fedd6f',
textColor: '#4a4a4a',
fontSize: '30px',
fontWeight: 'normal',
showPercent: false
showPercent: true
});
$('.percent-green-b').percentageLoader({
valElement: 'p',
strokeWidth: 15,
bgColor: '#e5e8eb',
ringColor: '#03ac66',
ringColor: '#41bdb4',
textColor: '#4a4a4a',
fontSize: '30px',
fontWeight: 'normal',
showPercent: false
showPercent: true
});
$('.percent-green').percentageLoader({
......@@ -80,9 +80,9 @@
textColor: '#4a4a4a',
fontSize: '30px',
fontWeight: 'normal',
showPercent: false
showPercent: true
});
$('.percent-blue').percentageLoader({
$('.percent-yellow').percentageLoader({
valElement: 'p',
strokeWidth: 15,
bgColor: '#e5e8eb',
......@@ -90,7 +90,7 @@
textColor: '#4a4a4a',
fontSize: '30px',
fontWeight: 'normal',
showPercent: false
showPercent: true
});
});
......
......@@ -15,17 +15,23 @@
<script type="text/javascript">
function moveImportanceSection(elementRating){
function enableElementRating(importanceRadio){
var importanceDiv = $(elementRating).closest('.criteria_section').find('.work-rating');
var radioGroup = $("[name='" + $(elementRating).attr('name') +"']");
if(radioGroup.is(':checked')){
importanceDiv.insertAfter($("[name='" + $(elementRating).attr('name') +"']:checked").parent());
importanceDiv.show();
var importanceGroup = $(importanceRadio).closest('.rate-toggle');
importanceGroup.find('li.active').removeClass("active" );
importanceGroup.find("input[type='radio']:checked").closest('li').addClass("active" );
var criteriaDiv = $(importanceRadio).closest('.criteria_section');
if(importanceGroup.find("input[type='radio']:checked").val() !== 'NOT_APPLICABLE')
{
criteriaDiv.find(".element_rating_radio").removeProp("disabled");
}
else{
importanceDiv.hide();
else
{
criteriaDiv.find(".element_rating_radio").prop("disabled",true);
criteriaDiv.find(".element_rating_radio").prop('checked', false);
}
}
......@@ -33,25 +39,17 @@
recalcFunction = setupRecalc ($("form"), {'recalcOnError':true});
$(".element_rating_radio").each(function (){
moveImportanceSection(this);
});
$(".element_rating_radio").change(function(){
moveImportanceSection(this);
});
$(".importance_radio").change(function(){
var importanceGroup = $(this).closest('.rate-toggle');
importanceGroup.find('li.active').removeClass("active" );
importanceGroup.find("input[type='radio']:checked").closest('li').addClass("active" );
enableElementRating(this);
});
$(".importance_radio").each(function(){
enableElementRating(this);
});
$("select[name$='CultureTemplate']").change(function(){
$("button[name$='loadCultureFromTemplate']").click();
});
var showError = true;
addPostRecalcHandler (function ($fieldThatChanged) {
if(showError) {
......@@ -88,7 +86,6 @@
<div class="form-group">
<label class="label-16 work-title">Culture</label>
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit.
</p>
</div>
<%
......@@ -125,7 +122,7 @@
<oneit:ormInput obj="<%= job %>" id="is-remote" attributeName="Remote" type="checkbox"/>
<oneit:recalcClass htmlTag="span" classScript="job.getRemote() != null && job.getRemote() ? 'checked': 'unchecked'" job="<%= job %>">
<label for="is-remote">
<oneit:label GUIName="Remote?" />
<oneit:label GUIName="Working remotely is an option" />
</label>
</oneit:recalcClass>
</div>
......@@ -158,21 +155,6 @@
<div class="work-radio-title">
<oneit:toString value="<%= criteria.getCultureElement() %>" mode="EscapeHTML"/>
</div>
<%
for (CultureElementRating rating : criteria.getCultureElement().getRatingsSet())
{
String ratingId = String.valueOf(rating.getID().longID());
String selectedStr = (CollectionUtils.equals(ratingId, formValue) ? "checked" : "");
%>
<div class="<%= "radio radio-primary workplace-radio " %>">
<input type="radio" name="<%= optionKey %>" id="<%= ratingId %>" class="element_rating_radio" value="<%= ratingId %>" <%= selectedStr %> >
<label for="<%= ratingId %>">
<oneit:toString value="<%= rating %>" mode="EscapeHTML"/>
</label>
</div>
<%
}
%>
<div class="work-rating">
<div class="rate-background">
<span class="arrow-up-gray"></span>
......@@ -196,7 +178,7 @@
<a href="javascript:void(0)" class="importance">
<input type="radio" name="<%= importanceKey %>" id="<%= importanceId %>" class="importance_radio" value="<%= importance.getName() %>" <%= selected %>/>
<label for="<%= importanceId %>"><oneit:toString value="<%= importance %>" mode="EscapeHTML" /></label>
<label for="<%= importanceId %>"><oneit:toString value="<%= importance.getCultureDescription() %>" mode="EscapeHTML" /></label>
</a>
</li>
<%
......@@ -206,6 +188,21 @@
</span>
</div>
</div>
<%
for (CultureElementRating rating : criteria.getCultureElement().getRatingsSet())
{
String ratingId = String.valueOf(rating.getID().longID());
String selectedStr = (CollectionUtils.equals(ratingId, formValue) ? "checked" : "");
%>
<div class="<%= "radio radio-primary workplace-radio " %>">
<input type="radio" name="<%= optionKey %>" id="<%= ratingId %>" class="element_rating_radio" value="<%= ratingId %>" <%= selectedStr %> >
<label for="<%= ratingId %>">
<oneit:toString value="<%= rating %>" mode="EscapeHTML"/>
</label>
</div>
<%
}
%>
</div>
<div class="form-brack-line-sub"></div>
<%
......
......@@ -4,7 +4,7 @@
<NODE name="dynamic_content_form::APPLICANT_PORTAL" factory="Participant">
<FORM name="*.signIn" factory="Participant" class="performa.form.SignInCandidateFP"/>
<FORM name="*.verifyIdentity" factory="Participant" class="performa.form.VerifyIdentityFP">
<AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/>
<ApplicantAccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="ApplicantAccountCreatedMail"/>
</FORM>
<FORM name="*.completeApplication" factory="Participant" class="performa.form.CompleteApplicationFP"/>
<FORM name="*.saveAndExitExperienece" factory="Participant" class="performa.form.SaveAndExitExperienceFP"/>
......
......@@ -42,9 +42,19 @@
}
</style>
<%
ORMProcessState process = (ORMProcessState) ProcessDecorator.getDefaultProcess(request);
ObjectTransaction objTran = process.getTransaction ();
Job job = (Job) process.getAttribute("Job");
ORMProcessState process = (ORMProcessState) ProcessDecorator.getDefaultProcess(request);
ObjectTransaction objTran = process.getTransaction ();
Job job = (Job) process.getAttribute("Job");
String id = request.getParameter("id");
String key = request.getParameter("key");
if(id != null && key != null)
{
job = Job.searchJobKey(objTran, Long.parseLong(id), key);
process.setAttribute("Job", job);
}
Debug.assertion(job != null, "Invalid job in applicant portal");
%>
<div class="main-verify-identity">
<div class="login-logo"><img src="<%= request.getContextPath() %>/images/logo.svg" /></div>
......
......@@ -16,7 +16,6 @@
List<Question> totalQuestions = (List<Question>) process.getAttribute("TotalQuestions");
List<Question> allQuestions = (List<Question>) process.getAttribute("AllQuestions");
String exitPage = WebUtils.getArticleLink(request, transaction, WebUtils.APPLY_JOB, "Page") + "&id=" + job.getID() + "&key=" + job.getRandomKey();
boolean showHelp = process.getAttribute("ShowHelp")!= null ? (boolean)process.getAttribute("ShowHelp") : true;
if(totalQuestions == null)
{
......@@ -126,20 +125,11 @@
<div class="section-page-area section-job-match">
<%
if(actualNumber == 1 ) //|| (showHelp && questionType != QuestionType.SCALAR)
if(actualNumber == 1 )
{
int maxRating = 7;
int midRating = 4;
String otherRating = "2, 3, 5, 6";
// if(questionType != QuestionType.SCALAR)
// {
// process.setAttribute("ShowHelp", false);
//
// maxRating = 3;
// midRating = 5;
// otherRating = "2, 4";
// }
%>
<div class="main-sc-section sj-1">
<p>Using the scale given, indicate how important to you are the following aspects in your work life. Use the following system:</p>
......@@ -153,6 +143,17 @@
<div class="selection-br-line"></div>
<%
}
else if(questionType == QuestionType.IPSATIVE && actualNumber == 31)
{
%>
<div class="main-sc-section sj-1">
<p>
For questions like these, indicate your preference by selecting the number closest to the term or idea that's most like you. We know that it can be challenging to make a choice sometimes, but try to avoid selecting the middle value.
</p>
</div>
<div class="selection-br-line"></div>
<%
}
%>
<div class="main-sc-section main-rate-section">
<%
......
......@@ -60,11 +60,11 @@
<div class="clearfix no-height"></div>
</div>
<div class="show-mobile-title">
<div class="mobile-title-page">Requirements</div>
<div class="mobile-title-page">Your Experience</div>
<div class="mobile-estimated">Estimated time to complete: <b>5 mins</b></div>
</div>
<div class="section-c-title m-hide">
Requirements
Your Experience
<span class="estimated-time">Estimated time to complete:
<span>5 mins</span>
</span>
......
......@@ -150,7 +150,7 @@
<div class="form-group text-left" id="email-div">
<label>Email Address</label>
<oneit:ormInput obj="<%= job %>" type="text" attributeName="Email" cssClass="form-control second-style" style="text-transform: lowercase" autocomplete="off"/>
<oneit:ormInput obj="<%= job %>" type="text" attributeName="Email" cssClass="form-control second-style" style="text-transform: lowercase" autocomplete="off" spellcheck="false"/>
<oneit:recalcClass htmlTag="div" classScript="job.isEmailFound() ? 'show': 'hide'" job="<%= job %>" class="right-mark">
<span id="right-mark"><img src="images/right-mark.svg"/></span>
</oneit:recalcClass>
......
......@@ -9,7 +9,7 @@
String nextPage = WebUtils.getSamePageInRenderMode(request, "SelectionCriteria");
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
Job job = jobApplication.getJob();
String exitPage = WebUtils.getArticleLink(request, objTran, WebUtils.APPLY_JOB, "Page") + "&id=" + job.getID() + "&key=" + job.getRandomKey();
String exitPage = WebUtils.getSamePageInRenderMode(request, "Page") + "&JobID=" + job.getObjectID(); //WebUtils.getArticleLink(request, objTran, WebUtils.APPLY_JOB, "Page") + "&id=" + job.getID() + "&key=" + job.getRandomKey();
%>
<script>
$(document.body).addClass('bg-color');
......
<?xml version="1.0" encoding="UTF-8"?>
<OBJECTS xmlns:oneit="http://www.1iT.com.au" name="">
<NODE factory="Vector" name="Script">
<NODE class="oneit.appservices.upgrade.cms.CMSArticleUpdateOperation" factory="Participant" name="Applicant Account Created Mail">
<createSpecificIdentifier factory='String' value='0QBF1OPIDVFDHJVKG22GUAY0OXAXPP'/>
<articleIdentifiers factory="Array" class="java.lang.String">
<NODE factory="String" value="0QBF1OPIDVFDHJVKG22GUAY0OXAXPP"/>
</articleIdentifiers>
<createdLabel factory="String" value="0QBF1OPIDVFDHJVKG22GUAY0OXAXPP"/>
<newParentCategory factory="String" value="RESOURCE_LIBRARY"/>
<articleAttributeChanges factory="Map">
<NODE name="EmailTo" factory="Null"/>
<NODE name="EmailFrom" factory="String" value="help@talentology.com"/>
<NODE name="EmailSubject" factory="String" value="Welcome to Talentology!"/>
<NODE name="Shortcuts" factory="String" value="ApplicantAccountCreatedMail"/>
<NODE name="EmailCC" factory="Null"/>
<NODE name="EmailBCC" factory="Null"/>
</articleAttributeChanges>
<ormAttributeChanges factory="Map">
<NODE name="PublishDate" factory="Date" value="2016-02-05 00:00:00"/>
<NODE name="WithdrawDate" factory="Date" value="2066-02-05 16:00:00"/>
<NODE name="Title" factory="String" value="Applicant Account Created Mail"/>
<NODE name="ShortTitle" factory="String" value="Reset Code Email"/>
<NODE name="SortOrder" factory="Integer" value="-200926"/>
<NODE name="Type" factory="Enumerated" class="oneit.business.content.ArticleType" value="ARTICLE"/>
<NODE name="Template" factory="Enumerated" class="oneit.business.content.ArticleTemplate" value="EMAIL_TEMPLATE"/>
</ormAttributeChanges>
<content factory="Map">
<NODE name="EmailBody" factory="Map">
<NODE name="Content" factory="String"><![CDATA[<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="HTML Tidy, see www.w3.org" name="generator">
<title></title>
</head>
<body>
<p>Hi ${SecUser:FirstName},</p>
<p>Welcome! You&rsquo;re now ready to apply for job opportunities that are powered by Talentology!</p>
<p>Your account&rsquo;s been set up and you&rsquo;re all ready to go. Whenever you sign in to Talentology, be sure to use <strong>${SecUser:UserName}</strong> along with the password that you just created.</p>
<p>And don&rsquo;t worry: If you ever forget your password, you can <a href="${link}">reset it</a> anytime.</p>
<p>Thanks,</p>
<p>The Talentology Team</p>
</body>
</html>
]]></NODE>
<NODE name="TransformedContent" factory="String"><![CDATA[<p>Hi ${SecUser:FirstName},</p><p>Welcome! You&rsquo;re now ready to apply for job opportunities that are powered by Talentology!</p><p>Your account&rsquo;s been set up and you&rsquo;re all ready to go. Whenever you sign in to Talentology, be sure to use <strong>${SecUser:UserName}</strong> along with the password that you just created.</p><p>And don&rsquo;t worry: If you ever forget your password, you can <a href="${link}">reset it</a> anytime.</p><p>Thanks,</p><p>The Talentology Team</p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
<NODE name="" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
</content>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS xmlns:oneit="http://www.1iT.com.au" name="">
<NODE factory="Vector" name="Script">
<NODE class="oneit.appservices.upgrade.cms.CMSArticleUpdateOperation" factory="Participant" name="Account Verification Mail">
<createSpecificIdentifier factory='String' value='I90Q26LQURCWXZZFP21EWM3EHUGXTJ'/>
<articleIdentifiers factory="Array" class="java.lang.String">
<NODE factory="String" value="I90Q26LQURCWXZZFP21EWM3EHUGXTJ"/>
</articleIdentifiers>
<createdLabel factory="String" value="I90Q26LQURCWXZZFP21EWM3EHUGXTJ"/>
<newParentCategory factory="String" value="RESOURCE_LIBRARY"/>
<articleAttributeChanges factory="Map">
<NODE name="EmailTo" factory="Null"/>
<NODE name="EmailFrom" factory="String" value="help@talentology.com"/>
<NODE name="EmailSubject" factory="String" value="Please verify your email address"/>
<NODE name="Shortcuts" factory="String" value="AccountVerificationMail"/>
<NODE name="EmailCC" factory="Null"/>
<NODE name="EmailBCC" factory="Null"/>
</articleAttributeChanges>
<ormAttributeChanges factory="Map">
<NODE name="PublishDate" factory="Date" value="2016-02-05 00:00:00"/>
<NODE name="WithdrawDate" factory="Date" value="2066-02-05 16:00:00"/>
<NODE name="Title" factory="String" value="Account Verification Mail"/>
<NODE name="ShortTitle" factory="String" value="Reset Code Email"/>
<NODE name="SortOrder" factory="Integer" value="-200926"/>
<NODE name="Type" factory="Enumerated" class="oneit.business.content.ArticleType" value="ARTICLE"/>
<NODE name="Template" factory="Enumerated" class="oneit.business.content.ArticleTemplate" value="EMAIL_TEMPLATE"/>
</ormAttributeChanges>
<content factory="Map">
<NODE name="EmailBody" factory="Map">
<NODE name="Content" factory="String"><![CDATA[<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="HTML Tidy, see www.w3.org" name="generator">
<title></title>
</head>
<body>
<p>Hi,</p>
<p>You entered <strong>${SecUser:UserName}</strong> as your email address for your Talentology account.<br>Please verify this email address by clicking this link:</p>
<p>
<a href="${link}">Verify now</a>
</p>
<p>Thanks,</p>
<p>The Talentology Team</p>
</body>
</html>
]]></NODE>
<NODE name="TransformedContent" factory="String"><![CDATA[<p>Hi,</p><p>You entered <strong>${SecUser:UserName}</strong> as your email address for your Talentology account.<br>Please verify this email address by clicking this link:</p><p>
<a href="${link}">Verify now</a>
</p><p>Thanks,</p><p>The Talentology Team</p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
<NODE name="" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
<NODE name="" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
<NODE name="" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
<NODE name="" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
</content>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
......@@ -60,35 +60,9 @@
Debug.assertion(job != null && !toRedirect, "Invalid job in applicant portal");
Debug.assertion(candidate != null, "Invalid candidate in applicant portal");
%>
<script type="text/javascript">
$(document.body).addClass('bg-color');
$(document).ready(function() {
validate();
$('input').on('change keyup', function() { validate() });
interval = setInterval(function() { validate(); }, 500);
});
function validate() {
var empty = false;
$('input[required]').each(function() {
if ($( this ).val() == '') {
empty = true;
if ($( this ).css('background-color') == 'rgb(250, 255, 189)') {
empty = false;
}
}
});
if (empty) {
$('.verify-btn').attr('disabled', 'disabled');
} else {
$('.verify-btn').removeAttr('disabled');
clearInterval(interval);
}
}
</script>
<oneit:script>
<oneit:script src="/scripts/password_strength_lightweight.js"/>
</oneit:script>
<style>
button[disabled] {
opacity: 0.6;
......@@ -97,7 +71,41 @@
</style>
<oneit:form name="signIn" method="post" enctype="multipart/form-data">
<%
String passkey = Utils.getPwdKeyOfSecUser(request, secUser, true);
%>
<script type="text/javascript">
$(document.body).addClass('bg-color');
$(document).ready(function() {
validate();
$('input').on('change keyup', function() { validate() });
interval = setInterval(function() { validate(); }, 500);
$('#myPassword').strength_meter({
"inputName" : "<%= passkey %>"
});
});
function validate() {
var empty = false;
$('input[required]').each(function() {
if ($( this ).val() == '') {
empty = true;
if ($( this ).css('background-color') == 'rgb(250, 255, 189)') {
empty = false;
}
}
});
if (empty) {
$('.verify-btn').attr('disabled', 'disabled');
} else {
$('.verify-btn').removeAttr('disabled');
clearInterval(interval);
}
}
</script>
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="main-verify-identity">
......@@ -138,23 +146,12 @@
if(isVerify)
{
%>
<div class="form-group text-left">
<div class="form-group text-left" id="myPassword">
<label>Password</label>
<oneit:ormInput obj="<%= job %>" type="password" attributeName="Password" cssClass="form-control second-style reset-pw" required="true"/>
</div>
<div class="form-group text-left">
<label>Confirm password</label>
<oneit:ormInput obj="<%= job %>" type="password" attributeName="ConfirmPassword" cssClass="form-control second-style reset-pw " required="true"/>
</div>
<div class="form-group text-left">
<p>
Your password must:
<ul>
<li>* begin with a letter of the alphabet</li>
<li>* include at least one number</li>
<li>* not include any spaces or special characters.</li>
</ul>
</p>
<oneit:input type="password" name="<%= passkey + 2 %>" class="form-control second-style reset-pw"/>
</div>
<%
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment