Commit 689650cd by Harsh Shah

Admin Portal - Show pages in iframe. Can be managed by keyfile entry "show.admin.portal.in.iframe"

parent 80e0ee6e
......@@ -13,13 +13,14 @@ import oneit.objstore.*;
import oneit.objstore.rdbms.filters.*;
import oneit.objstore.utils.ObjstoreUtils;
import oneit.security.*;
import static oneit.security.SecUser.PASSWORD_WRITEABILITY_KEY;
import oneit.security.jsp.*;
import oneit.security.oauth.form.*;
import oneit.servlets.forms.*;
import oneit.servlets.jsp.ui.DefaultUICustomiser;
import oneit.servlets.orm.DataMap;
import oneit.servlets.process.ORMProcessState;
import oneit.servlets.security.SessionSecUserDecorator;
import oneit.servlets.utils.BaseHttpServletRequest;
import oneit.utils.*;
import oneit.utils.filter.*;
import oneit.utils.parsers.FieldException;
......@@ -30,7 +31,6 @@ import performa.form.LinkedInOAuthLoginFP;
import performa.orm.*;
import performa.orm.types.*;
import performa.search.SearchApplicant;
import performa.search.SearchWorkFlowTemplate;
/**
*
......@@ -49,6 +49,8 @@ public class Utils
public static final String ADVT_CONFIG_EMAIL_EXTENSION = ConfigMgr.getKeyfileString ("advt.config.email.extension", "matchdmail.com");
public static final String APPLICANT_VERIFY_LINK = "/ApplicantPortal-Applicant_Account_Verification.htm";
public static final String APPLICANT_LINK = "/ApplicantPortal-ApplyJob.htm";
public static final String ADMIN_IFRAME_PAGE_ROUTE = "/admin/iframe-page";
public static final boolean SHOW_ADMIN_PORTAL_IN_IFRAME = ConfigMgr.getKeyfileBoolean ("show.admin.portal.in.iframe", true);
public static Role getRole(String role, ObjectTransaction transaction)
{
......@@ -801,4 +803,68 @@ public class Utils
return CollectionUtils.addTo(globalTemplates, hiringTeamTemplates);
}
public static String getClientUserName(SecUser clientUser)
{
if(clientUser != null)
{
StringBuilder sb = new StringBuilder();
if(clientUser.getFirstName() != null)
{
sb.append(clientUser.getFirstName());
if (StringUtils.subBlanks(clientUser.getLastName()) != null)
{
sb.append(" ");
if((sb.length() + clientUser.getLastName().length()) > 20)
{
sb.append(clientUser.getLastName().charAt(0));
sb.append(".");
}
else
{
sb.append(clientUser.getLastName());
}
}
}
else
{
sb.append(clientUser.getUserName());
}
return sb.toString();
}
return null;
}
public static HiringTeam getSelectedTeam(HttpServletRequest request, CompanyUser companyUser, ObjectTransaction objTran) throws StorageException, FieldException
{
HiringTeam selectedTeam = (HiringTeam) request.getSession().getAttribute("SelectedHiringTeam");
if(selectedTeam != null && companyUser != null)
{
companyUser.setSelectedTeam(selectedTeam.getInTransaction(objTran));
}
if(selectedTeam == null && companyUser != null)
{
selectedTeam = companyUser.getSelectedTeam();
}
if(selectedTeam != null)
{
selectedTeam = selectedTeam.getInTransaction(objTran);
}
return selectedTeam;
}
public static String getURLForParent(HttpServletRequest request)
{
return HTTPRequestDetails.getContextFreeURL(request,
StringUtils.replace(DefaultUICustomiser.ANGULAR_BASE_PATH + ADMIN_IFRAME_PAGE_ROUTE + "/${url}",
new String[] { "${url}" },
new String[] { StringUtils.urlEncode(BaseHttpServletRequest.getOriginalURI(request)) +
StringUtils.urlEncode(BaseHttpServletRequest.getOriginalQueryString(request))}));
}
}
\ No newline at end of file
package performa.ws;
import java.util.*;
import oneit.appservices.config.ConfigMgr;
import oneit.appservices.ws.*;
import oneit.appservices.ws.services.BasicJSONService;
import oneit.business.content.*;
import oneit.business.content.jsp.*;
import oneit.objstore.*;
import oneit.security.SecUser;
import oneit.security.jsp.AssumeUserFP;
import oneit.servlets.jsp.BaseJSP;
import oneit.utils.*;
import oneit.utils.parsers.FieldException;
import oneit.utils.transform.MapTransform;
import oneit.utils.transform.param.PrefixCompoundTransform;
import org.json.*;
import performa.utils.*;
/**
*
* @author harsh
*/
public class AdminMenuJSONService extends BasicJSONService
{
private static final PersonalisationHelper HELPER = (PersonalisationHelper)ConfigMgr.getConfigObject("CONFIG.CONTENT", "StandardPersonalisationHelper");
@Override
public JSONObject serviceRequestSafe(JSONServiceRequest request) throws MultiException, FieldException, Exception
{
ObjectTransaction objTran = WSUtils.createTransaction(request);
try
{
JSONObject result = new JSONObject();
SecUser user = SecUser.getTXUser(objTran);
SecUser clientUser = Utils.checkAdminPortalAccess(user) ? user : null;
result.put("userMenu", createUserMenu(request, objTran, clientUser));
result.put("sidebarMenu", createSidebarMenu(request, objTran, clientUser));
return result;
}
finally // Clean up tranasaction in a finally
{
objTran.releaseResources();
}
}
private JSONObject createUserMenu(JSONServiceRequest request, ObjectTransaction objTran, SecUser clientUser) throws JSONException
{
JSONObject menu = new JSONObject();
JSONArray children= new JSONArray();
Article myDetailsArticle = WebUtils.getArticleByShortCut(objTran, WebUtils.MY_DETAILS);
Article homeArticle = WebUtils.getArticleByShortCut(objTran, WebUtils.ADMIN_HOME);
String homeUrl = homeArticle.getLink(request.getRequest());
String signoutUrl = request.getRequest().getContextPath() + "/logout.jsp?nextURL=" + homeUrl;
String myDetailsLink = myDetailsArticle.getLink(request.getRequest(), CollectionUtils.mapEntry("cms.rm", "Page").toMap());
children.put(createMenuItem("My Details", null, new String[] {Utils.ADMIN_IFRAME_PAGE_ROUTE, myDetailsLink}));
children.put(createMenuItem("Sign Out", signoutUrl, null));
if (request.getRequest().getSession().getAttribute (AssumeUserFP.UNASSUME_SEC_USER_ID) != null)
{
children.put(createMenuItem("Unassume", request.getRequest().getContextPath() + "/editor/index_unassume.jsp", null));
}
menu.put("label", Utils.getClientUserName(clientUser));
menu.put("children", children);
return menu;
}
private JSONObject createMenuItem(String label, String link, String[] routerLink) throws JSONException
{
JSONObject item = new JSONObject();
item.put("label", label);
item.put("url", link);
item.put("routerLink", JsonUtils.getJSONForm(routerLink));
return item;
}
//Most of the code copied from CMSMenuTag.java
private JSONObject createSidebarMenu(JSONServiceRequest request, ObjectTransaction objTran, SecUser clientUser) throws JSONException
{
JSONObject menu = new JSONObject();
JSONArray children= new JSONArray();
Article adminArticle= WebUtils.getArticleByShortCut(objTran, WebUtils.ADMIN_PORTAL);
NavigationBar adminNavbar = NavigationBarDF.loadSiteTree(objTran, adminArticle);
NavigationBar navbar = adminNavbar.getChildNavBarFor(adminArticle);
MenuItemArbitrator arbitrator = new MenuItemArbitrator("On Left Menu");
NavigationBar[] menus = navbar.getSubMenuItems(clientUser, arbitrator, new Integer(0));
request.getRequest().setAttribute(BaseJSP.JSP_DATA, new HashMap());
BaseJSP.addData(request.getRequest(), PersonalisationDF.HELPER, HELPER);
if(menus != null)
{
for (int i=0; i < menus.length; i++)
{
Article article = menus[i].getEntry();
String link = article.getLink(request.getRequest());
ObjectTransform attribTransform = CollectionUtils.getTransform(new ObjectTransform[] {new CMSMenuTag.AttributeTransform(request.getRequest(), menus[i]), StringUtils.TO_HTML_TRANSFORM});
Object disabled = new MenuItemDisableTransformFactory().createTransform(article, request.getRequest(), objTran).transform("disabled");
Object brakeLine = new BracklineSeparatorTransformFactory().createTransform(article, request.getRequest(), objTran).transform("true");
Map params = CollectionUtils.mapEntry("link", link)
.mapEntry("title", arbitrator.getTitle(request.getRequest(), menus[i], 0, menus[i].getSelected()))
.toMap();
PrefixCompoundTransform paramTransform = new PrefixCompoundTransform();
paramTransform.add("attrib", attribTransform);
paramTransform.setDefault(new MapTransform(params));
Object routerLink = attribTransform.transform("Router Link");
if(StringUtils.subBlanks(routerLink) == null)
{
routerLink = new String[] {Utils.ADMIN_IFRAME_PAGE_ROUTE, link};
}
Map menuItemMap = CollectionUtils.mapEntry("link", link)
.mapEntry("disabled", disabled)
.mapEntry("linkCSSClass", paramTransform.transform("attrib:Additional CSS Class"))
.mapEntry("iconCSSClass", paramTransform.transform("attrib:Menu Icon CSS"))
.mapEntry("title", paramTransform.transform("attrib:Menu Title|title"))
.mapEntry("brakeLine", brakeLine)
.mapEntry("routerLink", routerLink)
.toMap();
children.put(JsonUtils.getJSONForm(menuItemMap));
}
}
menu.put("children", children);
return menu;
}
}
\ No newline at end of file
package performa.ws;
import oneit.appservices.ws.*;
import oneit.appservices.ws.serialisation.*;
import oneit.appservices.ws.services.*;
import oneit.components.InitialisationParticipant;
import oneit.objstore.ObjectTransaction;
import oneit.security.SecUser;
import oneit.utils.MultiException;
import oneit.utils.parsers.FieldException;
import org.json.*;
import performa.orm.*;
import performa.utils.*;
/**
*
* @author harsh
*/
public class AdminUserDetailsJSONService extends BasicJSONService implements InitialisationParticipant
{
@Override
public JSONObject serviceRequestSafe(JSONServiceRequest request) throws MultiException, FieldException, Exception
{
ObjectTransaction objTran = WSUtils.createTransaction(request);
try
{
JSONObject result = new JSONObject();
SecUser user = SecUser.getTXUser(objTran);
SecUser clientUser = Utils.checkAdminPortalAccess(user) ? user : null;
Company company = null;
JSONSerialiser serialiser = new JSONSerialiser(new ProfileAttribSerialiser(null));
serialiser.setServices(request);
if(clientUser != null)
{
if(clientUser.getExtension(CompanyUser.REFERENCE_CompanyUser) != null)
{
company = clientUser.getExtension(CompanyUser.REFERENCE_CompanyUser).getCompany();
}
CompanyUser companyUser = clientUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
HiringTeam selectedTeam = (HiringTeam) request.getRequest().getSession().getAttribute("SelectedHiringTeam");
result.put("ClientName", Utils.getClientUserName(clientUser));
result.put("HomeURL", WebUtils.getArticleByShortCut(user.getTransaction(), WebUtils.ADMIN_HOME).getLink(request.getRequest()));
if(company != null)
{
result.put("CompanyName", company.getCompanyName());
}
if(companyUser != null)
{
result.put("CompanyUser", serialiser.convertBBCToJSON(companyUser));
JSONArray hiringTeamJSON = new JSONArray();
for(HiringTeam hiringTeam : Utils.getHiringTeamsByUser(companyUser))
{
hiringTeamJSON.put(serialiser.convertBBCToJSON(hiringTeam));
}
result.put("HiringTeams", hiringTeamJSON);
if(selectedTeam == null)
{
selectedTeam = companyUser.getSelectedTeam();
}
}
if(selectedTeam != null)
{
selectedTeam = selectedTeam.getInTransaction(objTran);
result.put("SelectedTeam", serialiser.convertBBCToJSON(selectedTeam));
result.put("CreateJobDisabled", !selectedTeam.hasBillingSetup());
}
}
return result;
}
finally // Clean up tranasaction in a finally
{
objTran.releaseResources();
}
}
}
\ No newline at end of file
......@@ -2,16 +2,18 @@ package performa.ws;
import java.util.Set;
import oneit.appservices.ws.JSONServiceRequest;
import oneit.business.content.Article;
import oneit.logging.LogLevel;
import oneit.logging.LogMgr;
import oneit.logging.LoggingArea;
import oneit.objstore.BaseBusinessClass;
import oneit.objstore.ObjectTransaction;
import oneit.utils.BusinessException;
import oneit.utils.MultiException;
import oneit.utils.*;
import org.json.JSONException;
import org.json.JSONObject;
import performa.orm.HiringTeam;
import performa.orm.types.RoleType;
import performa.utils.WebUtils;
public class CreateJobVisibilityFP extends BaseCreateJobVisibilityFP
......@@ -37,9 +39,25 @@ public class CreateJobVisibilityFP extends BaseCreateJobVisibilityFP
{
boolean canCreateJob = selectedTeam.allowJobCreation();
boolean trialNotAllowed = selectedTeam.trialJobNotAllowed();
String redirectURL;
result.append("AllowCreateJob", canCreateJob ? "SUCCESS" : trialNotAllowed ? "TRIAL" : "REACHED_CAP");
result.put("AllowCreateJob", canCreateJob ? "SUCCESS" : trialNotAllowed ? "TRIAL" : "REACHED_CAP");
if (!canCreateJob)
{
Article companyArticle = WebUtils.getArticleByShortCut(objTran, WebUtils.MY_COMPANY);
redirectURL = companyArticle.getLink(request.getRequest(), CollectionUtils.mapEntry("cms.rm", selectedTeam.getCardID() == null ? "Billing" : "ManagePlan").toMap());
result.put("StandardUser", getCompanyUser().getRoleForHiringTeam(selectedTeam) == RoleType.STANDARD);
}
else
{
Article jobsArticle = WebUtils.getArticleByShortCut(objTran, WebUtils.JOBS);
redirectURL = jobsArticle.getLink(request.getRequest(), CollectionUtils.mapEntry("cms.rm", WebUtils.START_JOB).toMap());
}
result.put("redirectURL", redirectURL);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Can Create Job : " , canCreateJob , " Trial Not Allowed: ", trialNotAllowed);
}
......
......@@ -13,6 +13,10 @@
Debug.assertion(company != null , "Invalid company in admin portal my company");
if(hiringTeam == null) //When request comes from angular page
{
hiringTeam = Utils.getSelectedTeam(request, companyUser, objTran);
}
Debug.assertion(hiringTeam != null , "Invalid hiring team in admin portal my company");
String hiringTeamList = WebUtils.getSamePageInRenderMode(request, "Page");
......
......@@ -10,5 +10,17 @@
</div>
</div>
<oneit:dynInclude page="/extensions/feedback/feedbackFrontEnd.jsp" data="<%= CollectionUtils.EMPTY_MAP %>"/>
<%
if(Utils.SHOW_ADMIN_PORTAL_IN_IFRAME)
{
%>
<script>
$(document).ready (function (){
sendLoadingCompletedMessage();
});
</script>
<%
}
%>
</body>
</html>
......@@ -8,24 +8,8 @@
Company company = clientUser != null && clientUser.getExtension(CompanyUser.REFERENCE_CompanyUser) != null
? clientUser.getExtension(CompanyUser.REFERENCE_CompanyUser).getCompany() : null;
CompanyUser companyUser = clientUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
HiringTeam selectedTeam = (HiringTeam) session.getAttribute("SelectedHiringTeam");
String gtmKey = oneit.appservices.config.ConfigMgr.getKeyfileString("gtm.key","GTM-M6M4SW6");
if(selectedTeam != null && companyUser != null)
{
companyUser.setSelectedTeam(selectedTeam.getInTransaction(objTran));
}
if(selectedTeam == null && companyUser != null)
{
selectedTeam = companyUser.getSelectedTeam();
}
if(selectedTeam != null)
{
selectedTeam = selectedTeam.getInTransaction(objTran);
}
HiringTeam selectedTeam = Utils.getSelectedTeam(request, companyUser, objTran);
%>
<title><%= "Matchd" + (company != null ? " - " + company.getCompanyName() : "")%></title>
......@@ -38,6 +22,31 @@
<script src="https://cdn.jsdelivr.net/npm/@riophae/vue-treeselect@0.0.38/dist/vue-treeselect.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@riophae/vue-treeselect@0.0.38/dist/vue-treeselect.min.css">
<%
if(Utils.SHOW_ADMIN_PORTAL_IN_IFRAME)
{
String redirectURL = Utils.getURLForParent(request);
%>
<script>
function inIframe () {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
}
if(!inIframe()) {
window.location.href = '<%= redirectURL %>';
}
</script>
<style>
.dashboard-content-area, .main-content-area {
width: 100% !important;
}
</style>
<%
}
%>
<!-- Google Tag Manager -->
<script>
dataLayer = [{
......@@ -101,27 +110,8 @@
if(clientUser != null)
{
StringBuilder sb = new StringBuilder();
if(clientUser.getFirstName()!=null)
{
sb.append(clientUser.getFirstName());
sb.append(" ");
if(clientUser.getLastName()!= null && !clientUser.getLastName().isEmpty() && ( sb.length() + clientUser.getLastName().length()) > 20 )
{
sb.append(clientUser.getLastName().charAt(0));
sb.append(".");
}
else
if(!Utils.SHOW_ADMIN_PORTAL_IN_IFRAME)
{
sb.append(clientUser.getLastName());
}
}
else
{
sb.append(clientUser.getUserName());
}
%>
<header>
<oneit:form name="headerForm" method="post" enctype="multipart/form-data">
......@@ -196,7 +186,7 @@
</div>
<div class="user-profile-dropdown">
<a href="#" class="user-name" data-toggle="dropdown">
<oneit:toString value="<%= sb.toString() %>" mode="EscapeHTML"/>
<oneit:toString value="<%= Utils.getClientUserName(clientUser) %>" mode="EscapeHTML"/>
<img src="images/arrow.svg"/>
</a>
<ul class="profile-dropdown dropdown-menu">
......@@ -297,16 +287,16 @@
</oneit:form>
<%
}
}
%>
<script type="text/javascript">
$(document).ready(function()
{
if($('.dashboard-content-area').height() < $(window).height())
if($('.dashboard-content-area').height() < $(window.parent.document).height())
{
($('.dashboard-content-area').hasClass('second-part') ) ?
$('.dashboard-content-area').height($(window).height() - $('.dashboard-content-area').outerHeight() + $('.dashboard-content-area').height() - 65) :
$('.second-part').innerHeight( $(window).height() - $('.dashboard-first-part').outerHeight() - 65 )
$('.dashboard-content-area').height($(window.parent.document).height() - $('.dashboard-content-area').outerHeight() + $('.dashboard-content-area').height() - 65) :
$('.second-part').innerHeight( $(window.parent.document).height() - $('.dashboard-first-part').outerHeight() - 65 )
}
});
</script>
......
......@@ -2,7 +2,7 @@
<div class="container-fluid">
<div class="row content">
<%
if(clientUser != null)
if(!Utils.SHOW_ADMIN_PORTAL_IN_IFRAME && clientUser != null)
{
Article apAricle = WebUtils.getArticleByShortCut(objTran, WebUtils.ADMIN_PORTAL);
NavigationBar apSiteNavbar = navbar.getChildNavBarFor(apAricle);
......
......@@ -12,6 +12,10 @@
CompanyUser companyUser = loggedInUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
HiringTeam hiringTeam = (HiringTeam) process.getAttribute("HiringTeam");
if(hiringTeam == null) //When request comes from angular page
{
hiringTeam = Utils.getSelectedTeam(request, companyUser, objTran);
}
Debug.assertion(hiringTeam != null , "Invalid Hiring Team in admin portal manage plan");
PaymentPlan[] paymentPlans = PaymentPlan.SearchByAll()
......
......@@ -22,7 +22,7 @@
<NODE name="Menu Icon CSS" factory="String" value="template-icon"/>
<NODE name="On Left Menu" factory="Boolean" value="true"/>
<NODE name="Shortcuts" factory="String" value="MessageTemplates"/>
<NODE name="Router Link" factory="String" value="message-template"/>
<NODE name="Router Link" factory="String" value="list-message-templates"/>
<NODE name="Exclude From Navigation" factory="Boolean" value="false"/>
<NODE name="On Footer Right" factory="Boolean" value="false"/>
</articleAttributeChanges>
......
......@@ -22,7 +22,7 @@
<NODE name="Menu Icon CSS" factory="String" value="template-icon"/>
<NODE name="On Left Menu" factory="Boolean" value="true"/>
<NODE name="Shortcuts" factory="String" value="WorkflowTemplates"/>
<NODE name="Router Link" factory="String" value="workflow-template"/>
<NODE name="Router Link" factory="String" value="list-workflow-templates"/>
<NODE name="Exclude From Navigation" factory="Boolean" value="false"/>
<NODE name="On Footer Right" factory="Boolean" value="false"/>
</articleAttributeChanges>
......
......@@ -84,6 +84,9 @@
<Overview>This service uses to get the cms text by shortcut of article</Overview>
</NODE>
<NODE name="AdminUserDetails" factory="Participant" class="performa.ws.AdminUserDetailsJSONService" privilege="TL_AccessAdminPortal"/>
<NODE name="AdminMenu" factory="Participant" class="performa.ws.AdminMenuJSONService" privilege="TL_AccessAdminPortal"/>
<NODE name="MessageTemplates" factory="Participant" class="oneit.appservices.ws.services.ORMSearchJSONService" boClass="performa.orm.MessageTemplate" privilege="*">
<Overview>This service returns all the message templates</Overview>
......@@ -108,11 +111,11 @@
<Overview>This service will set all messages to read in given job application</Overview>
</NODE>
<NODE name="CreateJobVisibility" factory="Participant" class="oneit.appservices.ws.services.ORMFormProcessorService" fpClass="performa.ws.CreateJobVisibilityFP" privilege="*">
<NODE name="CreateJobVisibility" factory="Participant" class="oneit.appservices.ws.services.ORMFormProcessorService" fpClass="performa.ws.CreateJobVisibilityFP" privilege="TL_AccessAdminPortal">
<Overview>This service will return whether a job can be created for the selected hiring team</Overview>
</NODE>
<NODE name="SelectHiringTeam" factory="Participant" class="oneit.appservices.ws.services.ORMFormProcessorService" fpClass="performa.ws.SelectHiringTeamFP" privilege="*">
<NODE name="SelectHiringTeam" factory="Participant" class="oneit.appservices.ws.services.ORMFormProcessorService" fpClass="performa.ws.SelectHiringTeamFP" privilege="TL_AccessAdminPortal">
<Overview>This service will set the selected hiring team to the session</Overview>
</NODE>
......
......@@ -29,6 +29,7 @@
<oneit:script src="/scripts/slick.min.js"/>
<oneit:script src="/scripts/raphael-min.js"/>
<oneit:script src="/scripts/jBox.js"/>
<oneit:script src="/scripts/iframeResizer.contentWindow.min.js"/>
</oneit:script>
<script>
......
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