diff options
Diffstat (limited to 'ecomp-portal-BE/war/WEB-INF/fusion/jsp')
20 files changed, 3625 insertions, 0 deletions
diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/.gitignore b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/.gitignore new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/.gitignore diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/collaborateList.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/collaborateList.jsp new file mode 100644 index 00000000..21497518 --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/collaborateList.jsp @@ -0,0 +1,101 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> +<script src= "static/ebz/angular_js/angular.js"></script> +<script src= "static/ebz/angular_js/angular-sanitize.js"></script> + +<script src= "static/ebz/angular_js/app.js"></script> +<script src= "static/ebz/angular_js/gestures.js"></script> + +<script src="static/js/jquery-1.10.2.js"></script> +<script src="static/js/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> +<script src="static/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script> +<%@ include file="/WEB-INF/fusion/jsp/popup_modal.html" %> +<div ng-controller="collaborateListController"> + <div> + <h1 class="heading1" style="margin-top:20px;">Collaborate List</h1> + <div style="margin-top:30px"> + <table att-table table-data="tableData" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage"> + + <thead att-table-row type="header"> + <tr> + <th att-table-header key="id">User ID</th> + <th att-table-header key="last_name">Last Name</th> + <th att-table-header key="first_name">First Name</th> + <th att-table-header key="email">Email</th> + <th att-table-header key="sbcid">ATTUID</th> + <th att-table-header key="active">Online/Offline</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="rowData in tableData"> + <tr> + <td att-table-body >{{rowData.id}}</td> + <td att-table-body >{{rowData.lastName}}</td> + <td att-table-body >{{rowData.firstName}}</td> + <td att-table-body >{{rowData.email}}</td> + <td att-table-body >{{rowData.sbcid}}</td> + <td att-table-body > + <tag-badges ng-hide="rowData.online" style-type="color" class="lred" ng-click="rowData.isActive=true;openCollaboration(rowData.sbcid)">Offline</tag-badges> + <tag-badges ng-show="rowData.online" style-type="color" class="lgreen" ng-click="rowData.isActive=false;openCollaboration(rowData.sbcid)">Online</tag-badges> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <input ng-model="currentPage"></input> +</div> + +<script> +app.controller("collaborateListController", function ($scope,$http,modalService, $modal) { + // Table Data + $scope.tableData=${model.profileList}; + $scope.viewPerPage = 20; + $scope.scrollViewsPerPage = 2; + $scope.currentPage = 1; + $scope.totalPage; + $scope.searchCategory = ""; + $scope.searchString = ""; + /* modalService.showSuccess('','Modal Sample') ; */ + for(x in $scope.tableData){ + if($scope.tableData[x].active_yn=='Y') + $scope.tableData[x].active_yn=true; + else + $scope.tableData[x].active_yn=false; + } + $scope.openCollaboration = function(userId){ + openInNewTab('collaboration?user_id=' + userId); + } + + $scope.toggleProfileActive = function(profileId) { + if (confirm("You are about to change user's active status. Do you want to continue?")) { + $http.get("profile/toggleProfileActive?profile_id="+profileId).success(function(){}); + } + }; + +}); + +function openInNewTab(url) { + var win = window.open(url, '_blank'); + win.focus(); +}; + +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_footer.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_footer.jsp new file mode 100644 index 00000000..ae72af66 --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_footer.jsp @@ -0,0 +1,63 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<script src="static/ebz/js/footer.js"></script> +<script type="text/javascript" src="static/ebz/js/attHeaderSnippet.js"></script> +<link rel="stylesheet" type="text/css" href="static/ebz/footer_new.css" > + + + +<div class="footerContainer" id="footerContainer"> + <div class="footerWrapper" id="footerWrapper"> + + <div class="footerItem"> + + </div> + <div class="feedbackSection"> + <div class="dividerTop"></div> + <div class="feedbackContent"> + <form id="feedbackForm" name="feedbackForm" action="javascript: void(0)" method="post"> + <div class="feedbackInfo">Please tell us about your AT&T Business Center experience. Your feedback is appreciated and will help us improve the site.</div> + <div class="feedbackTextSection"> + <textarea id="feedbackText" class="feedbackText" name="feedbackText" maxlength="4000"></textarea> + <button type="submit" class="feedbackSubmitButton" id="feedbackSubmitButton" name ="feedbackSubmitButton" >Submit</button> + </div> + </form> + </div> + </div> + <div class="dividerBottom" id="feedbackResultDivider"></div> + <div class="feedbackResultMsg"> + <div class='readFeedBackMessage' tabindex='-1' style="outline:0px; display:inline-block" aria-live="assertive"></div> + <span class="icon-included-checkmark" id="feedbackMsgCheck"></span> + <button id="feedbackOkButton" class="feedbackMsgOKButton">OK</button> + </div> + <div class="dividerBottom"></div> + <div class="feedbackButtonDiv"> + <button type="button" class="feedbackButton" id="feedbackButton" name ="feedbackButton" >Feedback<span class="icon-chevron-down"></span></button> + </div> + + <div class="attFooterInfo"> + <div class="footerLastSection"> + </div> + </div> + </div> +</div> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_header.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_header.jsp new file mode 100644 index 00000000..e4cd224c --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz/ebz_header.jsp @@ -0,0 +1,303 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> + <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + <%@ page isELIgnored ="false" %> + <%@ page import="org.openecomp.portalsdk.core.util.SystemProperties" %> + <link rel="stylesheet" type="text/css" href="static/ebz/header_new.css"> + <script src= "static/ebz/js/attHeaderSnippet.js"></script> + <script src= "static/ebz/js/attHeader_new.js"></script> + <c:set var="menu" value="<%=session.getAttribute(SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_ATTRIBUTE_NAME))%>"/> + + <style> + li { + list-style: none; + } + + #userIcon:hover { + color: rgb(191, 231, 239); + } + + #headerChatIcon:hover { + background: url(static/images/headerChatIcon_hover.png) no-repeat -3px + -3px !important; + } + + .headerContentContainer .primaryMenuContainer .headerIconContainer .popbox .openpopbox:hover + { + color: #bfe7fb; + margin-top: -2px; + text-decoration: none; + outline: none + } + /* .headerContentContainer .primaryMenuContainer .headerIconContainer .popbox .openpopbox:focus{color:#bfe7fb;margin-top:-2px;text-decoration:none;outline:none} */ + .headerContentContainer .primaryMenuContainer .headerIconContainer .popbox .openpopbox + { + color: #fff; + display: block; + min-width: 70px; + max-width: 115px; + text-decoration: none + } + + a { + -webkit-transition: all .3s ease-out; + -moz-transition: all .3s ease-out; + transition: all .3s ease-out + } + + a:active,a:hover { + outline: 0 + } + + b,strong { + font-weight: 700 + } + + .thirdMenuContainer { + width: 100%; + overflow: auto; + margin-top: 101px; + position: fixed; + z-index: 3000; + min-height: 140px; + max-height: 500px; + opacity: 1; + background-color: rgb(255, 255, 255); + } +</style> + <div style="position:relative; z-index:999;"> + <div class="headerContainer" id="headerContainer" > + <div class="headerContentContainer"> + <div class="primaryMenuContainer"> + <div style="background: url(static/ebz/images/att_logo.png) no-repeat scroll -10px -10px transparent; !important;"></div> + <div class="attHomeContainer"> + <div class="businessCenterR"> + <a id="attBusinessCenter" href="">OpenECOMP Portal</a> + </div> + </div> + <div class="primaryMenuOptionsContainer" > + + <div class="primaryMenuOption"> + <a class="primaryMenuOptionLink" href="javascript:openSecondLevel('m')">Manage</a> + </div> + <div class="primaryMenuOption"> + <a id="supportFirstLevel" class="primaryMenuOptionLink" href="javascript:openSecondLevel('s')">Support</a> + + </div> + <div id="indicator" class="selectedOptionIndicator" style="display:none"></div> + </div> + <div class="headerIconContainer"> + <%-- <div class="loginName" style="width:107px;"> + <span class="popbox" > + <a style="color:#ffffff;display: block;min-width: 70px;max-width: 115;" class="openpopbox" href="#" > + <div id="headerLoginIcon" class="loginIcon"><span id="userIcon" style="font-size:19px;" class="icon-user"></span> </div> + <div id="headerNameEllipsis" class="ellipsis-header-name">${ociUserName}</div> + </a> + <div class="box1" style="line-height: normal; right: 167px; min-height: 200px; height: auto; width: 390px !important; display: none; top: 0px; left: -230.5px;" target="auth"> + <div class="arrow" style="left: 230px;"></div> + <div id="reg-header-snippet"> + <div class="reg-profilePicture" style="min-height: 215px;" id="reg-profile-links"> + <div id="reg-profileImage"> + <div style="clear: both; height: 80px; position: relative; width: 80px;" class=""> + <img id="reg-userProfilePicture-id" style="height: 80px; width: 80px; float: left;" src="" alt=""> + <span style=" background-position: -1px -1px; height: 81px;left: 0;position: absolute;top: 0;width: 81px;"> </span> + </div> + </div> + <div id="reg-myprofile-link"> + <a href="">My Profile</a> + </div> + <div id="reg-companyProfile-link"> + <a href="">Company Profile</a> + </div> + <div id="reg-logout-div"> + <a class="reg-logout-btn" href="ebiz_logout.htm">Log Out</a> + </div> + </div> + <div tabindex="0" class="reg-profileDetails" id="reg-profiledetails-id"> + <ul class="reg-Details-table"> + <li><div class="reg-userName-table"><div id="reg-userName-table-row"><div id="reg-userName-table-cell"><h3 class="att-global-fonts" id="reg-userName">${ociUserName} </h3><span class="visuallyhidden">.</span></div></div></div></li> + <li><div class="reg-userEmail-label"><span class="reg-userEmail-label-spn">EMAIL<span class="visuallyhidden">:</span></span></div></li> + <li><div class="reg-userEmail-value"><span class="reg-userEmail-value-spn">${email}<span class="visuallyhidden">.</span></span></div></li> + <li><div class="reg-userRole-label"><span class="reg-userRole-label-spn">PROFILE ID<span class="visuallyhidden">:</span></span></div></li> + <li><div class="reg-userRole-value"><span class="reg-userRole-value-spn">${groupId}<span class="visuallyhidden">.</span></span></div></li> + <li><div class="reg-userCompany-label"><span class="reg-userCompany-spn"> ENTERPRISE NAME<span class="visuallyhidden">:</span></span></div></li> + <li><div class="reg-userCompany-value"><span class="reg-userCompany-spn">${serviceProviderId}<span class="visuallyhidden">.</span></span></div></li> + </ul> + </div> + </div> + </div> + </span> + </div> --%> + <!-- Chat --> + + + <!-- <div id="headerChatIcon" class='chatIcon' style="background: url(static/images/headerChatIcon.png) no-repeat -3px -3px;"></div> + <div class="chatBox"> + <div class='arrow'></div> + <div class="chatBox-header"> + <span class="chatBox-heading">Live Chat</span> + <i class="icon-erase circle_close_chat"></i> + </div> + + </div> --> + </div> + </div> + </div> + <!-- HTML for the secondary menu for dashboard. --> + <div id="secondLevel" class="secondaryMenuContainer secondaryMenuContainerForDashboard" style="display:none;"> + <div id="secondaryMenuContentContainer" class="secondaryMenuContentContainer" style=""> + <c:forEach items="${menu}" var="menuItem"> + <div class="secondaryMenuOption" style="margin-left:20px; font-size:16px !important;"> + <a id="${menuItem.id}" href="${menuItem.action}" class="secondaryMenuOptionLink selectedSecondaryMenuOption">${menuItem.label}</a> + </div> + </c:forEach> + </div> + </div> + <c:forEach items="${menu}" var="menuItem"> + <c:if test="${!empty menuItem.childMenus}"> + <div id="thirdLevel${menuItem.id}" class="secondaryMenuContainer secondaryMenuContainerForDashboard" style="display:none;"> + <div id="secondaryMenuContentContainer${menuItem.id}" class="secondaryMenuContentContainer" style=""> + <c:forEach items="${menuItem.childMenus}" var="subMenuItem"> + <div class="secondaryMenuOption" style="margin-left:20px; font-size:16px !important;"> + <a id="${subMenuItem.id}" href="${subMenuItem.action}" class="thirdMenuOptionLink selectedSecondaryMenuOption">${subMenuItem.label}</a> + </div> + </c:forEach> + </div> + </div> + </c:if> + </c:forEach> + <%-- <c:forEach items="${menu}" var="menuItem"> + <c:if test="${!empty menuItem.childMenus}"> + <div id="thirdLevel${menuItem.id}" class="secondaryMenuContainer secondaryMenuContainerForDashboard" style="display:none;"> + <div id="secondaryMenuContentContainer${menuItem.id}" class="secondaryMenuContentContainer" style=""> + <c:forEach items="${menuItem.childMenus}" var="subMenuItem"> + <div class="secondaryMenuOption" style="margin-left:20px; font-size:16px !important;"> + <a id="${subMenuItem.id}" href="${subMenuItem.action}" class="thirdMenuOptionLink selectedSecondaryMenuOption">${subMenuItem.label}</a> + </div> + </c:forEach> + </div> + </div> + </c:if> + </c:forEach> --%> + </div> + </div> + + <c:forEach items="${menu}" var="menuItem"> + <c:if test="${!empty menuItem.childMenus}"> + <c:forEach items="${menuItem.childMenus}" var="subMenuItem"> + <div id="megaMenu${subMenuItem.id}" class="megaMenuContainer" style="right:0px; margin-top:145px; display:none;"> + <div class="megaMenuContentContainer"> + <ul class="megaMenuTable" id="megaMenuTable" style="padding:0px;"> + <li class="megaMenuFirstRow megaMenuRow" > + <ul style=" display: flex; flex-direction: column; flex-wrap: wrap; height:500px;"> + <li class="categoryContainerColumn" style="margin-right:30px;"> + <div class="categoryContainer" align="left" style="margin-top:10px; margin-left:40px;"> + <c:forEach items="${subMenuItem.childMenus}" var="childSubMenuItem"> + <div class="categoryOption" style="margin-bottom:13px; width:500px; "> + <a class="categoryOptionLink" style="margin-bottom:0px; font-size:16px;" href="${childSubMenuItem.action}">${childSubMenuItem.label}</a> + </div> + </c:forEach> + </div> + </li> + </ul> + </li> + </ul> + </div> + </div> + </c:forEach> + </c:if> + </c:forEach> + <div id="megaMenuContainerTemp" class="megaMenuContainer" style="right:0px; margin-top:89px; display:none;"> + <div class="megaMenuContentContainer"> + <ul class="megaMenuTable" id="megaMenuTable" style="padding:0px;"> + <li class="megaMenuFirstRow megaMenuRow" > + <ul style=" display: flex; flex-direction: column; flex-wrap: wrap; height:500px;"> + <li class="categoryContainerColumn" style="margin-right:30px;"> + <div class="categoryContainer" align="left" style="margin-bottom:0px; margin-left:40px;"> + <div class="categoryTitle" style="margin-top:10px; min-width:160px;"></div> + <div class="categoryOption" style="margin-bottom:13px;"> + <a class="categoryOptionLink" style="margin-bottom:0px;" href="#"></a> + </div> + </div> + </li> + </ul> + </li> + <li class="megaMenuSecondRow megaMenuRow" style="display:none"></li> + </ul> + </div> + </div> + + + <script> + + $(document).ready(function() { + $(document).on('mouseleave', '#megaMenuContainer', function() { + $("#thirdLevel").css("display", "none"); + $("#megaMenuContainerTemp").css("display", "none"); + + }); + $(document).on('mouseleave', '#megaMenuContainerTemp', function() { + $("#megaMenuContainerTemp").css("display", "none"); + }); + + $(document).on('mouseenter', '#secondLevel', function() { + <c:forEach items="${menu}" var="menuItem"> + <c:choose> + <c:when test="${!empty menuItem.childMenus}"> + $("#${menuItem.id}").hover(function() { + <c:forEach items="${menu}" var="menuItem2"> + <c:if test="${!empty menuItem2.childMenus}"> + $("#thirdLevel${menuItem2.id}").css("display", "none"); + </c:if> + </c:forEach> + $(".megaMenuContainer").css("display", "none"); + $("#thirdLevel${menuItem.id}").css("display", "inline"); + }); + </c:when> + <c:otherwise> + $("#${menuItem.id}").hover(function() { + <c:forEach items="${menu}" var="menuItem2"> + <c:if test="${!empty menuItem2.childMenus}"> + $("#thirdLevel${menuItem2.id}").css("display", "none"); + </c:if> + </c:forEach> + $(".megaMenuContainer").css("display", "none"); + }); + </c:otherwise> + </c:choose> + </c:forEach> + }); + + $('.thirdMenuOptionLink').hover(function() { + $(".megaMenuContainer").css("display", "none"); + + var id= "#megaMenu"+this.id; + $(id).css("display", "inline"); + }); + }); + function openSecondLevel(item){ + if(item=='m'){ + $("#secondLevel").css("display", "inline"); + } + } + + + </script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template.jsp new file mode 100644 index 00000000..32010111 --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template.jsp @@ -0,0 +1,44 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> +<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> +<!DOCTYPE html> +<html ng-app="abs"> + <head> + <%@ include file="/WEB-INF/fusion/jsp/meta.jsp" %> + <script src="static/js/jquery-1.10.2.js" type="text/javascript"></script> + </head> + <body class="templatebody" style="opacity: 1; background-color: rgb(242, 242, 242); padding: 0px;"> + <div class="applicationWindow"> + <div> + <tiles:insertAttribute name="header" /> + </div> + <br> + <div class="content" style="margin-left:100px; margin-right:100px;"> + <div style="margin-top: 50px;"> + <tiles:insertAttribute name="body" /> + </div> + </div> + <br> + <div> + <tiles:insertAttribute name="footer" /> + </div> + </div> + </body> +</html> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template_noheader_nofooter.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template_noheader_nofooter.jsp new file mode 100644 index 00000000..c3f9fef9 --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/ebz_template_noheader_nofooter.jsp @@ -0,0 +1,35 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> +<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> +<!DOCTYPE html> +<html ng-app="abs"> + <%@ include file="/WEB-INF/fusion/jsp/meta.jsp" %> + <body class="templatebody" style="opacity: 1; background-color: rgb(242, 242, 242); padding: 0px;"> + <div class="applicationWindow"> + + <div class="content" style="margin-left:100px; margin-right:100px;"> + <div style="margin-top: 50px;"> + <tiles:insertAttribute name="body" /> + </div> + </div> + + </div> + </body> +</html> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/include.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/include.jsp new file mode 100644 index 00000000..e4ca6e4b --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/include.jsp @@ -0,0 +1,30 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> +<%@ page import="org.openecomp.portalsdk.core.util.SystemProperties" %> +<%@ page import="org.openecomp.portalsdk.core.web.support.AppUtils" %> + +<%@ page import="java.util.LinkedHashMap" %> + + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +<c:set var="request" value="<%=request%>"/> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/jcs_admin.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/jcs_admin.jsp new file mode 100644 index 00000000..bf56c56b --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/jcs_admin.jsp @@ -0,0 +1,149 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> +<%-- <%@ include file="/WEB-INF/fusion/jsp/include.jsp"%> --%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox.css" > +<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css"> + +<script src= "static/ebz/angular_js/angular.js"></script> +<script src= "static/ebz/angular_js/angular-sanitize.js"></script> +<script src= "static/ebz/angular_js/att_abs_tpls.js"></script> +<script src= "static/ebz/angular_js/app.js"></script> +<script src= "static/ebz/angular_js/gestures.js"></script> + +<script src="static/js/jquery-1.10.2.js"></script> +<script src="static/js/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> +<jsp:include page="/WEB-INF/fusion/jsp/popup_modal.html" ></jsp:include> + +<div align="left" ng-controller="cacheAdminController"> + <div class="pageTitle"><h3>Cache Regions</h3></div> + These are the regions which are currently defined in the cache. 'Items' and 'Bytes' refer to the elements currently in memory (not spooled). + You can clear all items for a region by clicking on the Clear icon next to the desired region below. You can also <a href="#" ng-click="clearAll();">clear all regions</a> which + empties the entire cache. <br /><br /> + + <div style="width: 97%; border-top: 1px solid #c4c4c4; margin-top: 0px; background-color: #fff; padding: 10px 0; color: #646464s"> + <div style="margin: 0 20px 10px 0px; font-size: 80%; float: left; width: 97%;"> + <div class="col-md-4"><b>Cache Name</b></div> + <div class="col-md-2"><b># of Items</b></div> + <div class="col-md-2"><b>Bytes</b></div> + <div class="col-md-2"><b>Status</b></div> + <div class="col-md-3"><b>Memory Hits</b></div> + <div class="col-md-3"><b>Aux Hits</b></div> + <div class="col-md-3"><b>Not Found Misses</b></div> + <div class="col-md-3"><b>Expired Misses</b></div> + <div class="col-md-1"><b>Clear?</b></div> + <div class="col-md-1"><b>Items</b></div> + </div> + <div ng-repeat="region in regions"> + <div style="margin: 0 20px 10px 0px; font-size: 80%; float: left; width: 97%;"> + <div class="col-md-4"><a href="#" tooltip="Click to Show Region Details" ng-click="showRegionDetails(region.cacheName);">{{region.cacheName}}</a></div> + <div class="col-md-2">{{region.size}}</div> + <div class="col-md-2">{{region.byteCount}}</div> + <div class="col-md-2">{{region.status}}</div> + <div class="col-md-3">{{region.hitCountRam}}</div> + <div class="col-md-3">{{region.hitCountAux}}</div> + <div class="col-md-3">{{region.missCountNotFound}}</div> + <div class="col-md-3">{{region.missCountExpired}}</div> + <div class="col-md-1"> + <div ng-click="clearRegion(region.cacheName);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div> + </div> + <div class="col-md-1"><span class="att--tree__plus col-md-1" ng-class="{minus: bling$index}" ng-click="bling$index = !bling$index" style="display: block;"></span></div> + </div> + <div style="margin: 0px 20px 0px 30px; font-size: 80%; float: left; width: 95%; border-top: 1px solid #e4e4e4; padding-top: 10px" + ng-show="bling$index"> + <span class="att--tree__arrow" style="height: 20px; width: 20px; display: inline-block; float: left"></span> + <div class="col-md-12"><b>Key</b></div> + <div class="col-md-2"><b>Eternal?</b></div> + <div class="col-md-4"><b>Created</b></div> + <div class="col-md-2"><b>Max Life</b></div> + <div class="col-md-2"><b>Expires</b></div> + <div class="col-md-1"><b>Clear?</b></div> + </div> + <div ng-repeat="item in region.items"> + <div style="margin: 0px 20px 0px 30px; font-size: 80%; float: left; width: 95%;" ng-show="bling$index"> + <span class="att--tree__arrow" style="height: 20px; width: 20px; display: inline-block; float: left"></span> + <div class="col-md-12"><a href="#" tooltip="Click to Show Item Details" ng-click="showItemDetails(region.cacheName,item.key);">{{item.key}}</a></div> + <div class="col-md-2">{{item.eternal}}</div> + <div class="col-md-4">{{item.createTime}}</div> + <div class="col-md-2">{{item.maxLifeSeconds}}</div> + <div class="col-md-2">{{item.expiresInSeconds}}</div> + <div class="col-md-1"><a ng-click="clearItem(region.cacheName,item.key);"><img src="static/fusion/images/deleteicon.gif"></a></div> + </div> + </div> + <div style="clear: both"></div> + </div> + </div> +</div> + +<script> +app.controller('cacheAdminController', function ($scope,$interval,$http,$modal,modalService){ + $scope.regions=${model}; + + $scope.clearAll = function() { + if(confirm('You are about to clear all of the items for all cache regions. Do you want to continue?')){ + $http.get("jcs_admin/clearAll").success(function(response){$scope.regions=response;}); + } + }; + + $scope.clearRegion = function(cacheName) { + if(confirm('You are about to clear all of the items in the cache region "' + cacheName + '". Do you want to continue?')){ + $http.get("jcs_admin/clearRegion?cacheName="+cacheName).success(function(response){$scope.regions=response;}); + } + }; + + $scope.clearItem = function(cacheName,key) { + if(confirm('You are about to clear this item from the cache region "' + cacheName + '". Do you want to continue?')){ + $http.get("jcs_admin/clearItem?keyName="+key+"&cacheName="+cacheName).success(function(response){$scope.regions=response;}); + } + }; + + $scope.showRegionDetails = function(cacheName) { + $http.get("jcs_admin/showRegionDetails?cacheName="+cacheName).success(function(response){modalService.showSuccess('',response);}); + }; + + $scope.showItemDetails = function(cacheName,key) { + $http.get("jcs_admin/showItemDetails?keyName="+key+"&cacheName="+cacheName).success(function(response){ + var message = "CacheName: "+ response.cacheName + +"\nkey: "+response.key + +"\nIS_SPOOL: "+response.attr.IS_SPOOL + +"\nIS_LATERAL: "+response.attr.IS_LATERAL + +"\nIS_REMOTE: "+response.attr.IS_REMOTE + +"\nIS_ETERNAL: "+response.attr.IS_ETERNAL + +"\nversion: "+response.attr.version + +"\nmaxLifeSeconds: "+response.attr.maxLifeSeconds + +"\nmaxIdleTimeSeconds: "+response.attr.maxIdleTimeSeconds + +"\nsize: "+response.attr.size + +"\ncreateTime: "+response.attr.createTime + +"\nlastAccessTime: "+response.attr.lastAccessTime + +"\nidleTime: "+response.attr.idleTime + +"\ntimeToLiveSeconds: "+response.attr.timeToLiveSeconds + +"\nisSpool: "+response.attr.isSpool + +"\nisLateral: "+response.attr.isLateral + +"\nisRemote: "+response.attr.isRemote + +"\nisEternal: "+response.attr.isEternal; + modalService.showSuccess('',message);}); + }; +}); +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/meta.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/meta.jsp new file mode 100644 index 00000000..1899b79f --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/meta.jsp @@ -0,0 +1,35 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> + <link rel="stylesheet" type="text/css" href="static/ebz/fn-ebz.css" > + <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/demo.css" > + <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/base.css" > + <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/btn.css" > + <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/dtpk.css" > + <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/frms.css" > + <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/sldr.css" > + <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/style.css" > + <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/tbs.css" > + +</head> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal.html b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal.html new file mode 100644 index 00000000..82c5616f --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal.html @@ -0,0 +1,311 @@ +<!-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --> + +<script type="text/ng-template" id="modal_informative.html"> + <div class="modal__informative font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Success!</h2> + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content" style="white-space: pre-wrap;">{{message.text}}</div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Dismiss</button> + </div> + </div> + </script> + + + <script type="text/ng-template" id="delete_informative.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Are you sure you want to delete the profile?</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + Deletions are not reversible.<br/> {{message.text}} + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + <script type="text/ng-template" id="email_report_informative.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Mailing your report...</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + The report will be sent to your email soon! + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Ok</button> + </div> + </div> + </script> + <script type="text/ng-template" id="delete_authCode.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Are you sure you want to delete the Authorization Code(s)?</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + Deletions are not reversible.<br/> {{message.text}} + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + <script type="text/ng-template" id="delete_Schedule.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Schedule(s) ?</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + Deletions are not reversible.<br/> {{message.text}} + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + <script type="text/ng-template" id="alternate_number.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Number ?</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + Deletions are not reversible.<br/> {{message.text}} + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + <script type="text/ng-template" id="manage_device.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Line Port ?</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + Deletions are not reversible.<br/> {{message.text}} + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + <script type="text/ng-template" id="delete_virtualOnNet.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Are You Sure You Want to Delete this Virtual On-Net User?</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + Deletions are not reversible.<br/> {{message.text}} + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + <script type="text/ng-template" id="delete_user_meet_me_conference.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Are You Sure You Want to Delete this Conference?</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + Deletions are not reversible.<br/> {{message.text}} + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + <script type="text/ng-template" id="confirmation_informative.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">{{message.title}}</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content" style="white-space: pre-wrap;">{{message.text}}<br/></div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + + <script type="text/ng-template" id="confirmation_for_delete.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name"> <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This {{message.title}}?</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content">Deletions are not reversible. {{message.text}}<br/></div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + + <script type="text/ng-template" id="modal_warning.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Unable to process your request!</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content" style="white-space: pre-wrap;">Unable to process your request. <br/>{{message.text}}<br/> + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Dismiss</button> + </div> + </div> + </script> + + <script type="text/ng-template" id="modal_warning_message.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Warning</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content" style="white-space: pre-wrap;">{{message.text}}<br/> + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Dismiss</button> + </div> + </div> + </script> + + + + <script type="text/ng-template" id="modal_prompt.html"> + <div class="modal__warning font-showcase"> + <div class="modal__header"> + <h2 class="font-showcase-font-name">Unable to process your request. </h2> + <i class="icon-circle-action-close close-modal modal__header--close" ng-click="$dismiss()"></i> + + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + Unable to process your request. <br/> {{message.text}} + </div> + </div> + </script> + <script type="text/ng-template" id="delete_device.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Are You Sure You Want to Delete This Device?</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + Deletions are not reversible.<br/> {{message.text}} + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + <script type="text/ng-template" id="delete_multiple_device.html"> + <div class="modal__warning font-showcase" > + <div class="modal__header"> + <h2 class="font-showcase-font-name">Are You Sure You Want to Delete The Device(s)?</h2> + + <div class="modal__header--icon"></div> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + Deletions are not reversible.<br/> {{message.text}} + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$close()">Yes</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="$dismiss()">Cancel</button> + </div> + </div> + </script> + +<script> + +//.controller('modalpopupController', function ($scope, $modalInstance){ +var modalpopupController = function ($scope, $modalInstance, message){ + + $scope.message = message; + + + $scope.hello = function () { + $modalInstance.close($scope.digitPattern); + }; + $modalInstance.ok = function() { + //add the ok functionality + alert("Logout"); + }; + $modalInstance.cancel = function() { + //add the cancel functionality + alert("Keep Log in"); + }; + $modalInstance.cancelbutton = function() { + //add the cancel functionality + alert("Modal Waring popup close event"); + }; +} + + +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_role.html b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_role.html new file mode 100644 index 00000000..eae53e4f --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_role.html @@ -0,0 +1,257 @@ +<!-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --> + +<script type="text/ng-template" id="role_functions_popup.html"> + <div class="modal__informative font-showcase" style="width:700px;"> + <div class="modal__header"> + <h2 class="font-showcase-font-name" style="width: 500px;">Select Role Functions</h2> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + <table table-data="availableRoleFunctions" att-table> + <thead att-table-row type="header"> + <tr> + <th att-table-header sortable="false" width="10%"> </th> + <th att-table-header sortable="false" width="90%">Role Function</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="availableRoleFunction in availableRoleFunctions track by availableRoleFunction.code" style="max-height: 980px;" > + <tr> + + <td width="10%"> + <div ng-click="toggleRoleFunction(availableRoleFunction.selected,availableRoleFunction);"> + <input type="checkbox" ng-model="availableRoleFunction.selected" att-toggle-main> + </div> + </td> + <td width="90%">{{ availableRoleFunction.name }}</td> + + </tr> + </tbody> + </table> + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button> + </div> + </div> +</script> + + +<script type="text/ng-template" id="child_roles_popup.html"> + <div class="modal__informative font-showcase" style="width:700px;"> + <div class="modal__header"> + <h2 class="font-showcase-font-name" style="width: 500px;">Select Child Roles</h2> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + <table table-data="availableRoles" att-table> + <thead att-table-row type="header"> + <tr> + <th att-table-header sortable="false" width="10%"> </th> + <th att-table-header sortable="false" width="90%">Role</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="availableRole in availableRoles track by availableRole.id" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody--> + <tr> + <td att-table-body width="10%"> + <div ng-click="toggleChildRole(availableRole.selected,availableRole);"> + <input type="checkbox" ng-model="availableRole.selected" att-toggle-main> + </div> + </td> + <td att-table-body width="90%">{{ availableRole.name }}</td> + </tr> + </tbody> + </table> + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button> + </div> + </div> +</script> + +<script> + +var rolepopupController = function ($scope, $modalInstance, role){ + $scope.role = role; + + if($scope.role.childRoles==null){ + $scope.role.childRoles=[]; + } + + $scope.ociavailableRoles=${availableRoles}; + console.log($scope.ociavailableRoles); + $scope.availableRoles=[]; + if($scope.ociavailableRoles) + $.each($scope.ociavailableRoles, function(i, a){ + var availableRole = a; + availableRole.selected = false; + if($scope.role.childRoles){ + $.each($scope.role.childRoles, function(j, b){ + if(a.id === b.id) { + availableRole.selected = true; + } + }); + }; + $scope.availableRoles.push(availableRole); + }); + ; + + $scope.ociavailableRoleFunctions=${availableRoleFunctions}; + + $scope.availableRoleFunctions = []; + if($scope.ociavailableRoleFunctions) + $.each($scope.ociavailableRoleFunctions, function(i, a){ + var availableRoleFunction = a; + availableRoleFunction.selected = false; + $.each($scope.role.roleFunctions, function(j, b){ + if(a.code === b.code) { + availableRoleFunction.selected = true; + } + }); + $scope.availableRoleFunctions.push(availableRoleFunction); + }); + ; + + $scope.toggleRoleFunction = function(selected,availableRoleFunction) { + //alert('toggleRole: '+selected); + + if(!selected) { + //remove role function + if(role.id==null){ + var index = $scope.role.roleFunctions.indexOf(availableRoleFunction); + if(index>=0) + $scope.role.roleFunctions.splice(index, 1); + return; + } + var uuu = "role/removeRoleFunction.htm?role_id=${param.role_id}"; + if (confirm("You are about to remove the role funtcion "+availableRoleFunction.name+" from the role for "+$scope.role.name+". Do you want to continue?")) { + + var postData={roleFunction:availableRoleFunction}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){$scope.role=data.role;}); + }, + error : function(data){ + alert("Error while saving."); + } + }); + } else { + availableRoleFunction.selected=true; + } + } else { + //add role function + if(role.id==null){ + $scope.role.roleFunctions.push(availableRoleFunction); + return; + } + var uuu = "role/addRoleFunction.htm?role_id=${param.role_id}"; + + var postData={roleFunction:availableRoleFunction}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){$scope.role=data.role;}); + }, + error : function(data){ + alert("Error while saving."); + } + }); + } + + + }; + + $scope.toggleChildRole = function(selected,availableRole) { + //alert('toggleRole: '+selected); + + if(!selected) { + //remove role + if(role.id==null){ + var index = $scope.role.childRoles.indexOf(availableRole); + if(index>=0) + $scope.role.childRoles.splice(index, 1); + return; + } + var uuu = "role/removeChildRole.htm?role_id=${param.role_id}"; + if (confirm("You are about to remove the child role "+availableRole.name+" from the role for "+$scope.role.name+". Do you want to continue?")) { + + var postData={childRole:availableRole}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + console.log('role',data.role); + $scope.$apply(function(){$scope.role=data.role;}); + }, + error : function(data){ + alert("Error while saving."); + } + }); + } else { + availableRole.selected=true; + } + } else { + //add role + if(role.id==null){ + $scope.role.childRoles.push(availableRole); + return; + } + var uuu = "role/addChildRole.htm?role_id=${param.role_id}"; + + var postData={childRole:availableRole}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){$scope.role=data.role;}); + }, + error : function(data){ + alert("Error while saving."); + } + }); + } + + + }; + + + $scope.close = function() { + console.log('role', $scope.role); + $modalInstance.close({role:$scope.role}); + }; + +} + + +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_rolefunction.html b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_rolefunction.html new file mode 100644 index 00000000..958333de --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/popup_modal_rolefunction.html @@ -0,0 +1,87 @@ +<!-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --> +<script type="text/ng-template" id="edit_role_function_popup.html"> + <div class="modal__informative font-showcase" style="width:400px;"> + <div class="modal__header"> + <h2 class="font-showcase-font-name" style="width: 500px;">{{label}}</h2> + </div> + <div class="divider-container"><hr> </div> + <div class="modal__content"> + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label"><sup><b>*</b></sup>Name:</label><br> + <input type="text" class="fn-ebz-text" ng-model="editRoleFunction.name" + maxlength="30" /> + </div> + <br/> + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label"><sup><b>*</b></sup>Code:</label><br> + <input type="text" class="fn-ebz-text" ng-model="editRoleFunction.code" ng-disabled="disableCd" + maxlength="30" /> + </div> + </div> + <div class="modal__footer"> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="saveRoleFunction(editRoleFunction);">Save</button> + <button class="button button--primary button--small" herf="javascript:void(0)" ng-click="close()">Close</button> + </div> + </div> +</script> + +<script> + +var rolefunctionpopupController = function ($scope, $modalInstance, message){ + if(message.availableRoleFunction==null) + $scope.label='Add Role Function' + else{ + $scope.label='Edit Role Function' + $scope.disableCd=true; + } + $scope.editRoleFunction = message.availableRoleFunction; + + $scope.saveRoleFunction = function(availableRoleFunction) { + var uuu = "role_function_list/saveRoleFunction.htm"; + var postData={availableRoleFunction: availableRoleFunction}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){ + //$scope.availableRoleFunctions=[];$scope.$apply(); + $scope.availableRoleFunctions=data.availableRoleFunctions;}); + //alert("Update Successful.") ; + console.log($scope.availableRoleFunctions); + + //$scope.editRoleFunction = null; + $modalInstance.close({availableRoleFunctions:$scope.availableRoleFunctions}); + }, + error : function(data){ + alert("Error while saving."); + } + }); + }; + + $scope.close = function() { + $modalInstance.close(); + }; +} + +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/post_search.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/post_search.jsp new file mode 100644 index 00000000..3e0b16ab --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/post_search.jsp @@ -0,0 +1,370 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> +<%@ page import="java.util.*" %> +<%@ page import="com.fasterxml.jackson.databind.ObjectMapper" %> +<%@ page import="org.json.JSONObject" %> + +<%-- <%@ include file="/WEB-INF/fusion/jsp/include.jsp"%> --%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css"> + +<script src= "static/ebz/angular_js/angular.js"></script> +<script src= "static/ebz/angular_js/angular-sanitize.js"></script> +<script src="static/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script> +<script src= "static/ebz/angular_js/app.js"></script> +<script src= "static/ebz/angular_js/gestures.js"></script> +<script src="static/js/jquery-1.10.2.js"></script> +<script src="static/js/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> + +<div ng-controller="postSearchController" > + +<h1 class="heading1" style="margin-top:20px;">WEBPHONE Search</h1> + <%-- <h3> + <div class="pageTitle"><fmt:message key="post-search.title"/></div> + </h3> --%> + <br> + Please enter search criteria below:<br/> + + <div class="fn-ebz-container"> + Last Name:<br/> + <input class="fn-ebz-text" type="text" ng-model="postSearchBean.lastName" value="" size="25"> + </div> + + <div class="fn-ebz-container"> + First Name:<br/> + <input class="fn-ebz-text" type="text" ng-model="postSearchBean.firstName" value="" size="25"> + </div> + + <div class="fn-ebz-container"> + ATTUID:<br/> + <input class="fn-ebz-text" type="text" ng-model="postSearchBean.sbcid" value="" size="25"> + </div> + + <div class="fn-ebz-container"> + Manager ATTUID:<br/> + <input class="fn-ebz-text" type="text" ng-model="postSearchBean.managerAttuid" value="" size="25"> + </div> + <br> + <div class="fn-ebz-container"> + Organization:<br/> + <input class="fn-ebz-text" type="text" ng-model="postSearchBean.orgCode" value="" size="25"> + </div> + + <div class="fn-ebz-container"> + Email:<br/> + <input class="fn-ebz-text" type="text" ng-model="postSearchBean.email" value="" size="25"> + </div> + <br> +<!-- Sort By: <br/> + <div class="fn-ebz-container" > + + <div class="fn-ebz-container"> + <div class="form-field" att-select="sortByList" ng-model="postSearchBean.sortBy1"></div> + </div> + </div> + + + + + <div class="fn-ebz-container" > + <br/> + + + <div class="fn-ebz-container"> + <div class="form-field" att-select="sortByList" ng-model="postSearchBean.sortBy2"></div> + </div> + </div> + + + <div class="fn-ebz-container" > + <br/> + + <div class="fn-ebz-container"> + <div class="form-field" att-select="sortByList" ng-model="postSearchBean.sortBy3"></div> + </div> + </div> --> + <div> + <input att-button btn-type="primary" size="small" class="button" type="submit" value="Search" ng-click="search(postSearchBean);" /> + + <input att-button btn-type="primary" size="small" class="button" type="submit" value="Reset" ng-click="reset();"/> + </div> + <br> + {{noResultsString}} + <div ng-if="profileList.length != 0"> + <table att-table table-data="profileList" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage"> + <thead att-table-row type="header" > + <tr> + <th att-table-header width="5%" align="left">No</th> + <th att-table-header width="30%" key="lastName" align="left">Name</th> + <th att-table-header width="5%" key="sbcid" align="left">ATTUID</th> + <th att-table-header width="10%" key="orgCode" align="left">Organization</th> + <th att-table-header width="20%" align="left">Phone</th> + <th att-table-header width="20%" key="email" align="left">Email</th> + <th att-table-header width="10%" align="left">Import?</th> + </tr> + </thead> + + <tbody att-table-row type="body" row-repeat="profile in profileList" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody--> + <tr > + <td att-table-body width="5%" align="left"> + {{$index + 1}} + </td> + <td att-table-body width="30%" align="left"> + <div ng-if="ngexistingUsers[profile.sbcid] == null"> + {{profile.lastName}}, {{profile.firstName}} + </div> + <div ng-if="ngexistingUsers[profile.sbcid] != null"> + <a href="profile.htm?profile_id={{ngexistingUsers[profile.sbcid]}}" alt="View/Edit Profile"> + {{profile.lastName}}, {{profile.firstName}} + </a> + </div> + + </td> + <td att-table-body width="5%" align="left"> + {{profile.sbcid}} + </td> + <td att-table-body width="10%" align="left"> + {{profile.orgCode}} + </td> + <td att-table-body width="20%" align="left"> + {{profile.phone}} + </td> + <td att-table-body width="20%" align="left"> + {{profile.email}} + </td> + + <td att-table-body width="10%" align="left"> + <div ng-if="ngexistingUsers[profile.sbcid] == null"> + <div ng-click="toggleSelection(profile);"> + <input name="selected" type="checkbox" ng-model="profile.selected" att-checkbox/> + </div> + </div> + <div ng-if="ngexistingUsers[profile.sbcid] != null"> + Exists + </div> + </td> + </tr> + </tbody> + </table> + <div class="fn-ebz-container"> + Rows Per Page: + <input class="fn-ebz-text" type="text" ng-model="viewPerPage" size="5" style="width: 47px;"> + </div> + <div class="fn-ebz-container"> + Current Page: + <input class="fn-ebz-text" type="text" ng-model="currentPage" size="5" style="width: 47px;"> + </div> + <div class="fn-ebz-container"> + Total Page(s): + <input class="fn-ebz-text" type="text" ng-model="totalPage" size="5" readonly="true" style="width: 47px;"> + </div> + + <div ng-if="profileList.length != 0"> + <input att-button btn-type="primary" size="small" class="button" type="submit" value="Import" ng-click="process();"/> + </div> + + </div> + + + + +</div> +<script> + app.controller('postSearchController', function ($scope){ + + $scope.viewPerPage = 200; + $scope.currentPage = 1; + $scope.totalPage; + $scope.searchCategory = ""; + $scope.searchString = ""; + + $scope.noResultsString = ""; + + $scope.postSearchBean=${postSearchBean}; + $scope.profileList=${profileList}; + //console.log($scope.postSearchBean); + + $scope.ngexistingUsers=${existingUsers}; + console.log($scope.ngexistingUsers); + + $scope.ocisortByList=${sortByList}; + $scope.sortByList = []; + if($scope.ocisortByList) + $.each($scope.ocisortByList, function(i, a){ + var sortBy = {"index":i, "value":a.value, "title":a.label}; + $scope.sortByList.push(sortBy); + }); + ; + + $scope.search = function(postSearchBean) { + console.log(postSearchBean); + var uuu = "post_search/search"; + var postData={postSearchBean:postSearchBean}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){ + $scope.profileList=data.postSearchBean.searchResult; + //$scope.postSearchBean={}; + console.log($scope.profileList); + if($scope.profileList.length == 0) + $scope.noResultsString = "There is currently no one matching your search criteria."; + else + $scope.noResultsString = ""; + }); + }, + error : function(data){ + console.log(data); + alert("Error while searching: "+ data.responseText); + } + }); + + }; + + $scope.reset = function() { + $scope.postSearchBean={}; + $scope.profileList=[]; + $scope.noResultsString = ""; + //console.log($scope.postSearchBean); + }; + + $scope.process = function() { + $scope.prepareProfileSelection(); + var uuu = "post_search/process"; + var postData={postSearchBean:$scope.postSearchBean}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){ + $scope.profileList=data.postSearchBean.searchResult; + //$scope.postSearchBean={}; + $scope.ngexistingUsers=data.existingUsers; + $scope.postSearchBean.selected=null; + }); + }, + error : function(data){ + console.log(data); + alert("Error while searching: "+ data.responseText); + } + }); + + }; + $scope.importProfileList=[]; + $scope.toggleSelection = function(profile) { + if(profile.selected) + $scope.importProfileList.push(profile); + else{ + var index = $scope.importProfileList.indexOf(profile); + if(index>=0) + $scope.importProfileList.splice(index, 1); + } + }; + + $scope.prepareProfileSelection = function() { + if($scope.importProfileList) + $.each($scope.importProfileList, function(i, profile){ + $scope.preparePostSearchBean(profile); + }); + ; + } + + $scope.preparePostSearchBean = function(profile) { + //console.log('Importing: '+profile.sbcid); + //console.log('ngexistinguser:'+$scope.ngexistingUsers[profile.sbcid]) + if($scope.postSearchBean.selected==null){ + $scope.postSearchBean.selected=[]; + $scope.postSearchBean.postSbcid=[]; + $scope.postSearchBean.postHrid=[]; + $scope.postSearchBean.postFirstName=[]; + $scope.postSearchBean.postLastName=[]; + $scope.postSearchBean.postOrgCode=[]; + $scope.postSearchBean.postPhone=[]; + $scope.postSearchBean.postEmail=[]; + $scope.postSearchBean.postAddress1=[]; + $scope.postSearchBean.postAddress2=[]; + $scope.postSearchBean.postCity=[]; + $scope.postSearchBean.postState=[]; + $scope.postSearchBean.postZipCode=[]; + $scope.postSearchBean.postLocationClli=[]; + $scope.postSearchBean.postBusinessCountryCode=[]; + $scope.postSearchBean.postBusinessCountryName=[]; + $scope.postSearchBean.postDepartment=[]; + $scope.postSearchBean.postDepartmentName=[]; + $scope.postSearchBean.postBusinessUnit=[]; + $scope.postSearchBean.postBusinessUnitName=[]; + $scope.postSearchBean.postJobTitle=[]; + $scope.postSearchBean.postManagerAttuid=[]; + $scope.postSearchBean.postCommandChain=[]; + $scope.postSearchBean.postCompanyCode=[]; + $scope.postSearchBean.postCompany=[]; + $scope.postSearchBean.postCostCenter=[]; + $scope.postSearchBean.postSiloStatus=[]; + $scope.postSearchBean.postFinancialLocCode=[]; + } + + $scope.postSearchBean.selected.push(profile.sbcid); + $scope.postSearchBean.postSbcid.push(profile.sbcid); + $scope.postSearchBean.postHrid.push(profile.hrid); + $scope.postSearchBean.postFirstName.push(profile.firstName); + $scope.postSearchBean.postLastName.push(profile.lastName); + $scope.postSearchBean.postOrgCode.push(profile.orgCode); + $scope.postSearchBean.postPhone.push(profile.phone); + $scope.postSearchBean.postEmail.push(profile.email); + $scope.postSearchBean.postAddress1.push(profile.address1); + $scope.postSearchBean.postAddress2.push(profile.address2); + $scope.postSearchBean.postCity.push(profile.city); + $scope.postSearchBean.postState.push(profile.state); + if(profile.zipCodeSuffix==null) + $scope.postSearchBean.postZipCode.push(profile.zipCode); + else + $scope.postSearchBean.postZipCode.push(profile.zipCode+'-'+profile.zipCodeSuffix); + $scope.postSearchBean.postLocationClli.push(profile.locationClli); + $scope.postSearchBean.postBusinessCountryCode.push(profile.businessCountryCode); + $scope.postSearchBean.postBusinessCountryName.push(profile.businessCountryName); + $scope.postSearchBean.postDepartment.push(profile.department); + $scope.postSearchBean.postDepartmentName.push(profile.departmentName); + $scope.postSearchBean.postBusinessUnit.push(profile.businessUnit); + $scope.postSearchBean.postBusinessUnitName.push(profile.businessUnitName); + $scope.postSearchBean.postJobTitle.push(profile.jobTitle); + $scope.postSearchBean.postManagerAttuid.push(profile.managerAttuid); + $scope.postSearchBean.postCommandChain.push(profile.commandChain); + $scope.postSearchBean.postCompanyCode.push(profile.companyCode); + $scope.postSearchBean.postCompany.push(profile.company); + $scope.postSearchBean.postCostCenter.push(profile.costCenter); + $scope.postSearchBean.postSiloStatus.push(profile.siloStatus); + $scope.postSearchBean.postFinancialLocCode.push(profile.financialLocCode); + }; + + }); +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile.jsp new file mode 100644 index 00000000..7e10a213 --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile.jsp @@ -0,0 +1,442 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> +<%@ page import="org.openecomp.portalsdk.core.domain.User"%> +<%@ page import="org.openecomp.portalsdk.core.web.support.UserUtils"%> + +<%@page import="org.openecomp.portalsdk.core.web.support.ControllerProperties"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css"> + +<script src= "static/ebz/angular_js/angular.js"></script> +<script src= "static/ebz/angular_js/angular-sanitize.js"></script> +<script src="static/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script> +<script src= "static/ebz/angular_js/app.js"></script> +<script src= "static/ebz/angular_js/gestures.js"></script> + +<script src="static/js/jquery-1.10.2.js"></script> +<script src="static/js/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> + + + +<link rel="stylesheet" type="text/css" href="static/ebz/fn-ebz.css" > +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox.css" > +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-base.css" > +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-buttons.css" > +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-datepicker.css" > +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-forms.css" > +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-slider.css" > +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/sandbox-tables.css" > +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox/ui-charts-tpls.css" > +<link rel="stylesheet" type="text/css" href="static/ebz/icons/style.css" > +<%@ include file="/WEB-INF/fusion/jsp/include.jsp"%> + +<div class="pageTitle"> + <h3> + <c:choose> + <c:when test="${!empty profileId}"> + <h1 class="heading1" style="margin-top:20px;">Profile Edit</h1> + </c:when> + <c:otherwise> + <h1 class="heading1" style="margin-top:20px;">Profile Edit</h1> + </c:otherwise> + </c:choose> + </h3> +</div> + +<div ng-controller="profileController" > + + Please edit the profile details below: <br><br> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label"><sup><b>*</b></sup>First Name:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.firstName" + maxlength="30" /> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label"><sup><b>*</b></sup>Last Name:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.lastName" + maxlength="30" /> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">OrgUserId:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.orgUserId" + maxlength="30" style="margin-right:0px;"/> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">Manager OrgUserId:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.orgManagerUserId" + maxlength="30" style="margin-right:0px;"/> + </div> +<BR> + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">Login Id:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.loginId" + maxlength="30" /> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">Password:</label><BR> + <input type="password" att-form-field ng-model="profile.loginPwd" + maxlength="30" /> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label"><sup><b>*</b></sup>Phone:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.phone" + maxlength="30" /> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">Fax:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.fax" + maxlength="30" /> + </div> +<BR> + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">Cellular:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.cellular" + maxlength="30" /> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label"><sup><b>*</b></sup>Email:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.email" + maxlength="30" /> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">Address 1:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.address1" + maxlength="30" /> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">Address 2:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.address2" + maxlength="30" /> + </div> +<BR> + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">City:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.city" + maxlength="30" /> + </div> + + <div class="fn-ebz-container"> + <label class="fn-ebz-text-label">State:</label><BR> + <div class="form-field" att-select="stateList.options" ng-model="stateList.selected"></div> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">Zip Code:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="profile.zipCode" + maxlength="30" /> + </div> + + <div class="fn-ebz-container"> + <label class="fn-ebz-text-label">Country:</label><BR> + <div class="form-field" att-select="countries" ng-model="selectedCountry"></div> + </div> + <BR> + <div class="fn-ebz-container"> + <label class="fn-ebz-text-label">Time Zone:</label><BR> + <div class="form-field" att-select="timeZones" ng-model="selectedTimeZone"></div> + </div> + + <div align="left" > + <button type="submit" ng-click="saveProfile();" att-button + btn-type="primary" size="small">Save</button> + </div> + +<br> + <div class="pageTitle"> + <label>Roles</label> + <a ng-click="addNewRolePopup();" class="icon-add" size="small"></a> + + </div> + + <table att-table table-data="profile.roles" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage"> +<!-- <table border="1" class="hovertable_1"> --> + <thead att-table-row type="header"> + <tr> + <th att-table-header sortable="false" align="left" width="90%">Name</th> + <th att-table-header sortable="false" width="10%">Remove?</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="role in profile.roles" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody--> +<!-- <tr ng-repeat="role in profile.roles track by role.id"> --> + <tr> + <td att-table-body width="90%" >{{ role.name }}</td> + <td att-table-body width="10%"> + <a ng-click="removeRole(role);" ><img src="static/fusion/images/deleteicon.gif"></a> + </td> + </tr> + </tbody> + </table> + + + <div id="dialog" title="Select Roles"> + <table table-data="availableRoles" att-table > + <thead att-table-row type="header"> + <tr> + <th att-table-header sortable="false" width="10%"> </th> + <th att-table-header sortable="false" width="90%">Role</th> + </tr> + </thead> + + <tbody att-table-row type="body" row-repeat="availableRole in availableRoles" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody--> + <tr> + <td att-table-body width="10%"> + <div ng-click="toggleRole(availableRole.selected,availableRole);"> + <input type="checkbox" ng-model="availableRole.selected" att-toggle-main> + </div> + </td> + <td att-table-body width="90%">{{ availableRole.name }}</td> + </tr> + </tbody> + </table> + </div> + +</div> + + + +<script> +app.controller('profileController', function ($scope){ + + $scope.profile=${model.profile}; + $scope.sbcid=$scope.profile.sbcid; + $scope.managerAttuid=$scope.profile.managerAttuid; + + $scope.viewPerPage = 2; + $scope.currentPage = 1; + $scope.totalPage; + $scope.searchCategory = ""; + $scope.searchString = ""; + + $( "#dialog" ).hide(); + + $scope.ociavailableRoles=${model.availableRoles}; + //modalService.showFailure('Error','') ; + $scope.availableRoles = []; + if($scope.ociavailableRoles) + $.each($scope.ociavailableRoles, function(i, a){ + var availableRole = a; + availableRole.selected = false; + $.each($scope.profile.roles, function(j, b){ + if(a.id === b.id) { + availableRole.selected = true; + } + }); + $scope.availableRoles.push(availableRole); + }); + ; + + $scope.ociTimeZones = ${model.timeZones}; + $scope.timeZones = []; + $scope.selectedTimeZone = null; + if($scope.ociTimeZones){ + $.each($scope.ociTimeZones, function(i, a){ + var timeZone = {"index":i, "value":a.value, "title":a.label}; + $scope.timeZones.push(timeZone); + if($scope.profile.timeZoneId !== null && a.value === $scope.profile.timeZoneId.toString()){ + $scope.selectedTimeZone = timeZone; + } + }); + }; + + $scope.ociCountries = ${model.countries}; + $scope.countries = []; + $scope.selectedCountry = null; + //alert($scope.ociCountries[0].label); + if($scope.ociCountries) + $.each($scope.ociCountries, function(i, a){ + var country = {"index":i, "value":a.value, "title":a.label}; + $scope.countries.push(country); + if(a.value === $scope.profile.country){ + $scope.selectedCountry = country; + } + }); + ; + + var stateList=${model.stateList}; + //alert(stateList[0].label); + stateList = stateList== null? []: stateList; + var selectedState= $scope.profile.state ? $scope.profile.state:""; + $scope.stateList = initDropdownWithLookUp(stateList,selectedState ); + + $scope.saveProfile = function() { + var uuu = "profile/saveProfile?profile_id=${param.profile_id}"; + var postData={profile: $scope.profile, + selectedCountry:$scope.selectedCountry!=null?$scope.selectedCountry.value:"", + selectedState:$scope.stateList.selected!=null?$scope.stateList.selected.value:"", + selectedTimeZone:$scope.selectedTimeZone!=null?$scope.selectedTimeZone.value:"" + }; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + alert("Update Successful.") ; + }, + error : function(data){ + alert("Error while saving."); + } + }); + }; + + $scope.addNewRolePopup = function(role) { + $( "#dialog" ).dialog({ + modal: true + }); + }; + + $scope.toggleRole = function(selected,availableRole) { + //alert('toggleRole: '+selected); + if(!selected) { + //remove role + var uuu = "profile/removeRole?profile_id=${param.profile_id}"; + if (confirm("You are about to remove the role "+availableRole.name+" from the profile for "+$scope.profile.firstName+" "+$scope.profile.lastName+". Do you want to continue?")) { + + var postData={role:availableRole}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){$scope.profile=data;}); + }, + error : function(data){ + alert("Error while saving."); + } + }); + } else { + availableRole.selected=true; + } + } else { + //add role + var uuu = "profile/addNewRole?profile_id=${param.profile_id}"; + if (confirm("You are about to add the role "+availableRole.name+" from the profile for "+$scope.profile.firstName+" "+$scope.profile.lastName+". Do you want to continue?")) { + var postData={role:availableRole}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){$scope.profile=data;}); + }, + error : function(data){ + alert("Error while saving."); + } + }); + } + } + + + }; + + $scope.removeRole = function(role) { + if (confirm("You are about to remove the role "+role.name+" from the profile for "+$scope.profile.firstName+" "+$scope.profile.lastName+". Do you want to continue?")) { + //alert('deleted'+role.name); + var uuu = "profile/removeRole?profile_id=${param.profile_id}"; + var postData={role:role}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){ + $scope.profile=data; + $.each($scope.availableRoles, function(k, c){ + if(c.id === role.id) { + c.selected = false; + } + }); + }); + + }, + error : function(data){ + alert("Error while saving."); + } + }); + } + + }; + + function initDropdownWithLookUp(arr,selectedValue){ + var dropdownArray=[]; + var selected = null; + if(arr){ + for(var i = 0,l = arr.length; i < l; i++) { + var option = { + "index" : i , + "value" : arr[i].value, + "title" : arr[i].label + }; + dropdownArray.push(option); + if(arr[i].value === selectedValue){ + selected = option; + } + } + } + var dropDown={}; + dropDown.options = dropdownArray; + dropDown.selected = selected; + return dropDown; + }; + + $scope.doRolePopup = function() { + var modalInstance = $modal.open({ + templateUrl: 'roles_popup.html', + controller: 'rolepopupController', + resolve: { + message: function () { + var message ={ + availableRoles: $scope.availableRoles + }; + return message; + } + } + }); + modalInstance.result.then(function (opts) { + if(opts!=null){ + $scope.profile=opts.profile; + } + }); + } + + +}); +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile_search.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile_search.jsp new file mode 100644 index 00000000..e7ad5762 --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/profile_search.jsp @@ -0,0 +1,100 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> +<script src= "static/ebz/angular_js/angular.js"></script> +<script src= "static/ebz/angular_js/angular-sanitize.js"></script> + +<script src= "static/ebz/angular_js/app.js"></script> +<script src= "static/ebz/angular_js/gestures.js"></script> + +<script src="static/js/jquery-1.10.2.js"></script> +<script src="static/js/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> +<script src="static/ebz/sandbox/att-abs-tpls.js" type="text/javascript"></script> +<%@ include file="/WEB-INF/fusion/jsp/popup_modal.html" %> +<div ng-controller="profileSearchController"> + <div> + <h1 class="heading1" style="margin-top:20px;">Profile Search</h1> + <div style="margin-top:30px"> + <table att-table table-data="tableData" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage"> + + <thead att-table-row type="header"> + <tr> + <th att-table-header key="id">User ID</th> + <th att-table-header key="last_name">Last Name</th> + <th att-table-header key="first_name">First Name</th> + <th att-table-header key="email">Email</th> + <th att-table-header key="sbcid">ATTUID</th> + <th att-table-header key="manager_attuid">Manager ATTUID</th> + <th att-table-header >Edit</th> + <th att-table-header key="active">Active?</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="rowData in tableData"> + <tr> + <td att-table-body >{{rowData.id}}</td> + <td att-table-body >{{rowData.lastName}}</td> + <td att-table-body >{{rowData.firstName}}</td> + <td att-table-body >{{rowData.email}}</td> + <td att-table-body >{{rowData.sbcid}}</td> + <td att-table-body >{{rowData.managerId}}</td> + <td att-table-body ><a href="" ng-click="editRow(rowData.id)" class="icon-edit" style="color: #888;font-size:20px;"></a></td> + <td att-table-body > + <div ng-click="toggleProfileActive(rowData.id)"> + <input type="checkbox" ng-model="rowData.active" att-toggle-main> + </div> + </td> + </tr> + </tbody> + </table> + </div> + </div> + <input ng-model="currentPage"></input> +</div> + +<script> +app.controller("profileSearchController", function ($scope,$http,modalService, $modal) { + // Table Data + $scope.tableData=${model.profileList}; + $scope.viewPerPage = 5; + $scope.scrollViewsPerPage = 2; + $scope.currentPage = 1; + $scope.totalPage; + $scope.searchCategory = ""; + $scope.searchString = ""; + modalService.showSuccess('','Modal Sample') ; + for(x in $scope.tableData){ + if($scope.tableData[x].active_yn=='Y') + $scope.tableData[x].active_yn=true; + else + $scope.tableData[x].active_yn=false; + } + $scope.editRow = function(profileId){ + window.location = 'profile?profile_id=' + profileId; + } + + $scope.toggleProfileActive = function(profileId) { + if (confirm("You are about to change user's active status. Do you want to continue?")) { + $http.get("profile/toggleProfileActive?profile_id="+profileId).success(function(){}); + } + }; + +}); +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role.jsp new file mode 100644 index 00000000..e1c100db --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role.jsp @@ -0,0 +1,298 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> + +<%@ include file="/WEB-INF/fusion/jsp/include.jsp"%> --%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox.css" > +<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css"> + +<script src= "static/ebz/angular_js/angular.js"></script> +<script src= "static/ebz/angular_js/angular-sanitize.js"></script> +<script src= "static/ebz/angular_js/att_abs_tpls.js"></script> +<script src= "static/ebz/angular_js/app.js"></script> +<script src= "static/ebz/angular_js/gestures.js"></script> + +<script src="static/js/jquery-1.10.2.js"></script> +<script src="static/js/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> +<%@ include file="/WEB-INF/fusion/jsp/popup_modal_role.html" %> +<style type="text/css"> + .bc-style{ + margin: 20px; + align: left; + } +</style> +<div class="bc-style"> + <ul class="breadcrumb" > + <li><a href="welcome">Home</a></li> + <li><a href="role_list">Roles</a></li> + <li class="active">Role</li> + </ul> +</div> +<div class="pageTitle"> +<h3> + <c:choose> + <c:when test="${!empty param.role_id}"> + <h1 class="heading1" style="margin-top:20px;">Role Edit</h1> + </c:when> + <c:otherwise> + <h1 class="heading1" style="margin-top:20px;">Role Create</h1> + </c:otherwise> + </c:choose> + </h3> +</div> + +<div ng-controller="roleController" > + + <br> + Please edit the role details below: <br> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label"><sup><b>*</b></sup>Name:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="role.name" + maxlength="30" /> + </div> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label">Priority:</label><BR> + <input type="text" class="fn-ebz-text" ng-model="role.priority" + maxlength="30" /> + </div> + + <div align="left" > + <button type="submit" ng-click="saveRole();" att-button + btn-type="primary" size="small">Save</button> + </div> + + <br> + <div class="pageTitle"> + <label>Role Functions</label> + <a ng-click="addNewRoleFunctionModalPopup();" class="icon-add" size="small"></a> + </div> + + <table table-data="role.roleFunctions" att-table > + <thead att-table-row type="header"> + <tr> + <th att-table-header sortable="false" align="left" width="90%">Name</th> + <th att-table-header sortable="false" width="10%">Remove?</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="roleFunction in role.roleFunctions track by roleFunction.code" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody--> + <tr> + <td att-table-body width="90%" >{{ roleFunction.name }}</td> + <td att-table-body width="10%"> + <div ng-click="removeRoleFunction(roleFunction);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div> + </td> + </tr> + </tbody> + </table> + <a href="role_function_list.htm">Manage Role Functions</a><br><br> + + <div class="pageTitle"> + <label>Child Roles</label> + <a ng-click="addNewChildRoleModalPopup();" class="icon-add" size="small"></a> + </div> + + <table table-data="role.childRoles" att-table > + <thead att-table-row type="header"> + <tr> + <th att-table-header sortable="false" align="left" width="90%">Name</th> + <th att-table-header sortable="false" width="10%">Remove?</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="role in role.childRoles track by role.id" style="max-height: 980px;" > + <tr> + <td att-table-body width="90%" >{{ role.name }}</td> + <td att-table-body width="10%"> + <div ng-click="removeChildRole(role);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div> + </td> + </tr> + </tbody> + </table> + + <div id="dialogChildRole" title="Select Child Roles"> + <table table-data="availableRoles" att-table> + <thead att-table-row type="header"> + <tr> + <th att-table-header sortable="false" width="10%"> </th> + <th att-table-header sortable="false" width="90%">Role</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="availableRole in availableRoles track by availableRole.id" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody--> + <tr> + <td att-table-body width="10%"> + <div ng-click="toggleChildRole(availableRole.selected,availableRole);"> + <input type="checkbox" ng-model="availableRole.selected" att-toggle-main> + </div> + </td> + <td att-table-body width="90%">{{ availableRole.name }}</td> + + </tr> + </tbody> + </table> + </div> +</div> + + + +<script> +app.controller('roleController', function ($scope, modalService, $modal){ + $scope.role=${role}; + console.log($scope.role); + + $( "#dialogRoleFunction" ).hide(); + $( "#dialogChildRole" ).hide(); + + $scope.ociavailableRoleFunctions=${availableRoleFunctions}; + + $scope.availableRoleFunctions = []; + if($scope.ociavailableRoleFunctions) + $.each($scope.ociavailableRoleFunctions, function(i, a){ + var availableRoleFunction = a; + availableRoleFunction.selected = false; + $.each($scope.role.roleFunctions, function(j, b){ + if(a.code === b.code) { + availableRoleFunction.selected = true; + } + }); + $scope.availableRoleFunctions.push(availableRoleFunction); + }); + ; + + $scope.saveRole = function() { + var uuu = "role/saveRole.htm?role_id=${param.role_id}"; + var postData={role: $scope.role, childRoles: $scope.role.childRoles, roleFunctions : $scope.role.roleFunctions}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + alert("Update Successful.") ; + }, + error : function(data){ + console.log(data); + alert("Error while saving."); + } + }); + }; + + $scope.addNewRoleFunctionModalPopup = function() { + var modalInstance = $modal.open({ + templateUrl: 'role_functions_popup.html', + controller: 'rolepopupController', + resolve: { + role: function () { + return $scope.role; + } + } + }); + modalInstance.result.then(function(response){ + console.log('response', response); + $scope.role=response.role; + }); + }; + + $scope.addNewChildRoleModalPopup = function() { + var modalInstance = $modal.open({ + templateUrl: 'child_roles_popup.html', + controller: 'rolepopupController', + resolve: { + role: function () { + return $scope.role; + } + } + }); + modalInstance.result.then(function(response){ + console.log('response', response); + $scope.role=response.role; + }); + }; + + + + $scope.removeRoleFunction = function(roleFunction) { + if (confirm("You are about to remove the role function "+roleFunction.name+" from the role for "+$scope.role.name+". Do you want to continue?")) { + //alert('deleted'+role.name); + var uuu = "role/removeRoleFunction.htm?role_id=${param.role_id}"; + var postData={roleFunction:roleFunction}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){ + $scope.role=data.role; + $.each($scope.availableRoleFunctions, function(k, c){ + if(c.code === roleFunction.code) { + c.selected = false; + } + }); + }); + + }, + error : function(data){ + alert("Error while saving."); + } + }); + }; + + }; + + $scope.removeChildRole = function(childRole) { + if (confirm("You are about to remove the child role "+childRole.name+" from the role for "+$scope.role.name+". Do you want to continue?")) { + //alert('deleted'+role.name); + var uuu = "role/removeChildRole.htm?role_id=${param.role_id}"; + var postData={childRole:childRole}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){ + $scope.role=data.role; + $.each($scope.availableRoles, function(k, c){ + if(c.id === childRole.id) { + c.selected = false; + } + }); + }); + + }, + error : function(data){ + alert("Error while saving."); + } + }); + }; + + }; + +}); +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_function_list.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_function_list.jsp new file mode 100644 index 00000000..51aea051 --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_function_list.jsp @@ -0,0 +1,225 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> + +<%-- <%@ include file="/WEB-INF/fusion/jsp/include.jsp" %> --%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox.css" > +<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css"> + +<script src= "static/ebz/angular_js/angular.js"></script> +<script src= "static/ebz/angular_js/angular-sanitize.js"></script> +<script src= "static/ebz/angular_js/att_abs_tpls.js"></script> +<script src= "static/ebz/angular_js/app.js"></script> +<script src= "static/ebz/angular_js/gestures.js"></script> + +<script src="static/js/jquery-1.10.2.js"></script> +<script src="static/js/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> +<%@ include file="/WEB-INF/fusion/jsp/popup_modal_rolefunction.html" %> +<div ng-controller="roleFunctionListController" > + <div class="pageTitle"> + + <h1 class="heading1" style="margin-top:20px;">Role Functions</h1> + + <a ng-click="addNewRoleFunctionModalPopup();" class="icon-add" size="small" ></a> + <br><br> + + </div> + + <br> + Click on the edit icon to update a role function, the plus icon to add additional role functions, or the delete icon to remove them. + <br> + <div id="rolesTable" title="Role Functions"> + <table att-table table-data="availableRoleFunctions" current-page="1"> + <thead att-table-row type="header"> + <tr> + <th att-table-header width="70%">Name</th> + <th att-table-header width="10%">Code</th> + <th att-table-header width="10%">Edit?</th> + <th att-table-header width="10%">Delete?</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="availableRoleFunction in availableRoleFunctions" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody--> + <tr> + <td att-table-body width="70%">{{ availableRoleFunction.name }}</td> + <td att-table-body width="10%">{{ availableRoleFunction.code }}</td> + <td att-table-body width="10%"> + <!-- <a ng-click="editRoleFunctionPopup(availableRoleFunction);" > + <img src="static/fusion/images/editicon.gif"> + </a> --> + <div ng-click="editRoleFunctionModalPopup(availableRoleFunction);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-edit"></a></div> + </td> + <td att-table-body width="10%"> + <!-- <a ng-click="removeRole(availableRoleFunction);" ><img src="static/fusion/images/deleteicon.gif"></a> --> + <div ng-click="removeRole(availableRoleFunction);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div> + </td> + </tr> + </tbody> + </table> + </div> + +<!-- <div align="left" style="marin-bottom: 50px;"> --> +<!-- <button type="submit" onClick="window.location='role_function.htm';" att-button --> +<!-- btn-type="primary" size="small">Create</button> --> +<!-- </div> --> + + <div id="dialog" title="Add Role Function"> + + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label"><sup><b>*</b></sup>Name:</label><br> + <input type="text" class="fn-ebz-text" ng-model="editRoleFunction.name" + maxlength="30" /> + </div> + <br/> + <div class="fn-ebz-container" > + <label class="fn-ebz-text-label"><sup><b>*</b></sup>Code:</label><br> + <input type="text" class="fn-ebz-text" ng-model="editRoleFunction.code" ng-disabled="editRoleFunction.code!=null" + maxlength="30" /> + </div> + <br/> + <button type="submit" ng-click="saveRoleFunction(editRoleFunction);" att-button + btn-type="primary" size="small">Save</button> + + </div> + +</div> + + + + +<script> +app.controller('roleFunctionListController', function ($scope, modalService, $modal){ + $( "#dialog" ).hide(); + $scope.availableRoleFunctions=${availableRoleFunctions}; + + + $scope.editRoleFunction = null; + var dialog = null; + $scope.editRoleFunctionPopup = function(availableRoleFunction) { + $scope.editRoleFunction = availableRoleFunction; + $( "#dialog" ).dialog({ + modal: true + }); + }; + + $scope.editRoleFunctionModalPopup = function(availableRoleFunction) { + $scope.editRoleFunction = availableRoleFunction; + var modalInstance = $modal.open({ + templateUrl: 'edit_role_function_popup.html', + controller: 'rolefunctionpopupController', + resolve: { + message: function () { + var message = { + availableRoleFunction: $scope.editRoleFunction + }; + return message; + } + } + }); + modalInstance.result.then(function(response){ + console.log('response', response); + $scope.availableRoleFunctions=response.availableRoleFunctions; + }); + }; + + $scope.addNewRoleFunctionModalPopup = function(availableRoleFunction) { + $scope.editRoleFunction = null; + var modalInstance = $modal.open({ + templateUrl: 'edit_role_function_popup.html', + controller: 'rolefunctionpopupController', + resolve: { + message: function () { + var message = { + availableRoleFunction: $scope.editRoleFunction + }; + return message; + } + } + }); + modalInstance.result.then(function(response){ + console.log('response', response); + $scope.availableRoleFunctions=response.availableRoleFunctions; + }); + }; + + $scope.addNewRoleFunctionPopup = function() { + $scope.editRoleFunction = null; + $( "#dialog" ).dialog({ + modal: true + }); + }; + + $scope.saveRoleFunction = function(availableRoleFunction) { + var uuu = "role_function_list/saveRoleFunction.htm"; + var postData={availableRoleFunction: availableRoleFunction}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){ + $scope.availableRoleFunctions=[];$scope.$apply(); + $scope.availableRoleFunctions=data.availableRoleFunctions;}); + //alert("Update Successful.") ; + console.log($scope.availableRoleFunctions); + + $scope.editRoleFunction = null; + $( "#dialog" ).dialog("close"); + }, + error : function(data){ + alert("Error while saving."); + } + }); + }; + + + $scope.removeRole = function(availableRoleFunction) { + if (confirm("You are about to delete the role function "+availableRoleFunction.name+". Do you want to continue?")) { + //alert('deleted'+roleFunction.name); + var uuu = "role_function_list/removeRoleFunction.htm"; + var postData={availableRoleFunction: availableRoleFunction}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){$scope.availableRoleFunctions=data.availableRoleFunctions;}); + }, + error : function(data){ + console.log(data); + alert("Error while deleting: "+ data.responseText); + } + }); + } + + }; + + +}); +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_list.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_list.jsp new file mode 100644 index 00000000..f35d975e --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/role_list.jsp @@ -0,0 +1,147 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> + +<%-- <%@ include file="/WEB-INF/fusion/jsp/include.jsp" %> --%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +<script src= "static/ebz/angular_js/angular.js"></script> +<script src= "static/ebz/angular_js/angular-sanitize.js"></script> +<script src= "static/ebz/angular_js/att_abs_tpls.js"></script> +<script src= "static/ebz/angular_js/app.js"></script> +<script src= "static/ebz/angular_js/gestures.js"></script> + +<script src="static/js/jquery-1.10.2.js"></script> +<script src="static/js/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> + +<div class="pageTitle"> + <h1 class="heading1" style="margin-top:20px;">Roles</h1> +</div> +<br> +Click on a Role to view its details. + +<div ng-controller="roleListController" > + <div id="dialog" title="Roles"> + <table att-table table-data="availableRoles" current-page="1"> + <thead att-table-row type="header"> + <tr> + <th att-table-header width="70%">Name</th> + <th att-table-header width="10%">Priority</th> + <th att-table-header width="10%">Active?</th> + <th att-table-header width="10%">Delete?</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="availableRole in availableRoles track by availableRole.id" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody--> +<!-- <tr ng-repeat="availableRole in availableRoles track by availableRole.id"> --> + <tr> + <td width="70%"><a href="role.htm?role_id={{availableRole.id}}">{{ availableRole.name }}</a></td> + <td width="10%">{{ availableRole.priority }}</td> + <td width="10%"> + <div ng-click="toggleRole(availableRole.active,availableRole);"> + <input type="checkbox" ng-model="availableRole.active" att-toggle-main> + </div> + </td> + <td att-table-body width="10%"> + <div ng-click="removeRole(availableRole);" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div> + </td> + </tr> + </tbody> + </table> + </div> + + <div align="left" style="marin-bottom: 50px;"> + <button type="submit" onClick="window.location='role.htm';" att-button + btn-type="primary" size="small">Create</button> + </div> + +</div> + + + + +<script> +app.controller('roleListController', function ($scope){ + + $scope.availableRoles=${availableRoles}; + //console.log($scope.availableRoles); + $scope.toggleRole = function(selected,availableRole) { + //alert('toggleRole: '+selected); + var toggleType = null; + if(selected) { + toggleType = "activate"; + } else { + toggleType = "inactivate"; + } + + if (confirm("You are about to "+toggleType+" the test role "+availableRole.name+". Do you want to continue?")) { + + var uuu = "role_list/toggleRole"; + + var postData={role:availableRole}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + console.log(data); + $scope.$apply(function(){$scope.availableRoles=data.availableRoles;}); + console.log($scope.availableRoles); + }, + error : function(data){ + console.log(data); + alert("Error while saving. "); + } + }); + } + + }; + + $scope.removeRole = function(role) { + if (confirm("You are about to delete the role "+role.name+". Do you want to continue?")) { + //alert('deleted'+role.name); + var uuu = "role_list/removeRole"; + var postData={role:role}; + $.ajax({ + type : 'POST', + url : uuu, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(postData), + success : function(data){ + $scope.$apply(function(){$scope.availableRoles=data.availableRoles;}); + }, + error : function(data){ + console.log(data); + alert("Error while deleting: "+ data.responseText); + } + }); + } + + }; + + +}); +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/usage_list.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/usage_list.jsp new file mode 100644 index 00000000..11e2439e --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/usage_list.jsp @@ -0,0 +1,99 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> + +<%-- <%@ include file="/WEB-INF/fusion/jsp/include.jsp" %> --%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + +<link rel="stylesheet" type="text/css" href="static/ebz/sandbox.css" > +<link rel="stylesheet" type="text/css" href="static/fusion/css/jquery-ui.css"> + +<script src= "static/ebz/angular_js/angular.js"></script> +<script src= "static/ebz/angular_js/angular-sanitize.js"></script> +<script src= "static/ebz/angular_js/att_abs_tpls.js"></script> +<script src= "static/ebz/angular_js/app.js"></script> +<script src= "static/ebz/angular_js/gestures.js"></script> + +<script src="static/js/jquery-1.10.2.js"></script> +<script src="static/js/modalService.js"></script> +<script src="static/js/jquery.mask.min.js" type="text/javascript"></script> +<script src="static/js/jquery-ui.js" type="text/javascript"></script> + +<div ng-controller="usageListController" > + <div class="pageTitle"> + <h3> + Usage + </h3> + </div> + <br/> + The following shows all users currently logged into the application. Click the icon to expel a user from the application. + + <div title="Current User Sessions"> + <table att-table table-data="users" current-page="1"> + + <thead att-table-row type="header"> + <tr> + <th att-table-header sortable="false" width="10%" align="left">Current User Sessions</th> + <th att-table-header sortable="false" width="10%" align="center"></th> + <th att-table-header sortable="false" width="10%" align="center"></th> + <th att-table-header sortable="false" width="10%" align="center"></th> + <th att-table-header sortable="false" width="10%" align="center"></th> + <th att-table-header sortable="false" width="10%" align="center"></th> + </tr> + <tr> + <th att-table-header sortable="false" width="10%" align="center">User Id</th> + <th att-table-header sortable="false" width="10%" align="center">User Name</th> + <th att-table-header sortable="false" width="10%" align="center">Email</th> + <th att-table-header sortable="false" width="10%" align="center">Last Access Time (minutes)</th> + <th att-table-header sortable="false" width="10%" align="center">Time Remaining (minutes)</th> + <th att-table-header sortable="false" width="10%" align="center">Expel?</th> + </tr> + </thead> + <tbody att-table-row type="body" row-repeat="user in users" style="max-height: 980px;" ><!-- background colors will alternate not properly with multiple tbody--> + <tr> + <td att-table-body width="10%">{{user.id}}</td> + <td att-table-body width="10%">{{user.lastName}}</td> + <td att-table-body width="10%">{{user.email}}</td> + <td att-table-body width="10%">{{user.lastAccess}}</td> + <td att-table-body width="10%">{{user.remaining}}</td> + <td att-table-body width="10%"><div ng-hide="user.delete=='yes'">Current Session</div> + <div ng-click="removeSession(user.sessionId);" ng-hide="user.delete=='no'" style="font-size:20px;"><a href="javascript:void(0)" class="icon-trash"></a></div> + </td> + </tr> + </tbody> + </table> + </div> +</div> + + + + +<script> +app.controller('usageListController', function ($scope,$interval,$http,$modal,modalService){ + + $scope.users=${model};console.log($scope.users); + $scope.removeSession = function(sessionId) { + if(confirm("You are about to expel this user from the application. All of their unsaved data will be lost. Do you want to continue?")){ + $http.get("usage_list/removeSession?deleteSessionId="+sessionId).success(function(response){$scope.users=response;}); + } + } +}); +</script> diff --git a/ecomp-portal-BE/war/WEB-INF/fusion/jsp/webrtc/collaboration.jsp b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/webrtc/collaboration.jsp new file mode 100644 index 00000000..b0480d45 --- /dev/null +++ b/ecomp-portal-BE/war/WEB-INF/fusion/jsp/webrtc/collaboration.jsp @@ -0,0 +1,529 @@ +<%-- + ================================================================================ + eCOMP Portal + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ================================================================================ + --%> +<!DOCTYPE html> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> + <link type="text/css" rel="stylesheet" href="static/fusion/css/layout/layout-default-latest.css" /> + <link rel="stylesheet" type="text/css" href="static/ebz/sandbox/styles/btn.css" > + <link rel="stylesheet" type="text/css" href="static/ebz/fn-ebz.css" > + <style type="text/css"> + /* + * NOTE: All CSS is purely cosmetic - it does not affect functionality + * http://layout.jquery-dev.com/demos.cfm + */ + + /* customize borders to avoid double-borders around inner-layouts */ + .ui-layout-pane { + border: 0; /* override layout-default-latest.css */ + border-top: 1px solid #BBB; + border-bottom: 1px solid #BBB; + } + .ui-layout-pane-north , + .ui-layout-pane-south { + border: 1px solid #BBB; + overflow: auto; + } + .ui-layout-pane-west , + .ui-layout-pane-east { + } + .ui-layout-pane-center { + border-left: 0; + border-right: 0; + } + .inner-center { + border: 1px solid #BBB; + } + + /* add shading to outer sidebar-panes */ + .outer-west , + .outer-east { + background-color: #EEE; + } + .middle-west , + .middle-east { + background-color: #F8F8F8; + } + + /* remove padding & scrolling from panes that are 'containers' for nested layouts */ + .outer-center , + .middle-center { + border: 0; /* cosmetic */ + padding: 0; + overflow: auto; + } + + /* + * customize borders on panes/resizers to make pretty + */ + .ui-layout-pane-west { border-right: 0; } + .ui-layout-resizer-west { border-left: 1px solid #BBB; } + .ui-layout-pane-east { border-left: 0; } + .ui-layout-resizer-east { border-right: 1px solid #BBB; } + .ui-layout-pane-north { border-bottom: 0; } + .ui-layout-resizer-north { border-top: 1px solid #BBB; } + .ui-layout-pane-south { border-top: 0; } + .ui-layout-resizer-south { border-bottom: 1px solid #BBB; } + /* + * add borders to resizers when pane is 'closed' + * + *.ui-layout-resizer-closed { border: 1px solid #BBB; } + */ + /* + * show both borders when the resizer is 'dragging' + */ + .ui-layout-resizer-west-dragging , + .ui-layout-resizer-east-dragging { + border-left: 1px solid #BBB; + border-right: 1px solid #BBB; + } + .ui-layout-resizer-north-dragging , + .ui-layout-resizer-south-dragging { + border-top: 1px solid #BBB; + border-bottom: 1px solid #BBB; + } + + + /* + layout toggler background image + */ + .ui-layout-toggler-west, .ui-layout-toggler-east { + border-width: 1px 0; + background-image: url("static/fusion/images/layout/panel-e-w-toggle.png"); + background-size: 10px 10px; + background-repeat: no-repeat; + background-position: center; + } + + .ui-layout-toggler-north, .ui-layout-toggler-south { + border-width: 0 1px; + background-image: url("static/fusion/images/layout/panel-n-s-toggle.png"); + background-size: 10px 10px; + background-repeat: no-repeat; + background-position: center; + } + + </style> + + + <!-- LAYOUT v 1.3.0 --> + <script type="text/javascript" src="static/fusion/js/layout/jquery-latest.js"></script> + <script type="text/javascript" src="static/fusion/js/layout/jquery-ui-latest.js"></script> + <script type="text/javascript" src="static/fusion/js/layout/jquery.layout-latest.js"></script> + <script type="text/javascript" src="static/fusion/webrtc/js/RTCMultiConnection.js"></script> + <script type="text/javascript" src="static/fusion/webrtc/js/peerBroadcast.js"></script> + <script type="text/javascript" src="static/fusion/js/layout/debug.js"></script> + + <script type="text/javascript"> + + + $(document).ready(function () { + + // OUTER-LAYOUT + panelLayout = $('body').layout({ + center__paneSelector: ".outer-center" + , west__paneSelector: ".outer-west" + , east__paneSelector: ".outer-east" + , west__size: 500 + , east__size: 200 + , spacing_open: 8 // ALL panes + , spacing_closed: 12 // ALL panes + + , center__childOptions: { + center__paneSelector: ".inner-center" + , west__paneSelector: ".inner-west" + , east__paneSelector: ".inner-east" + , west__size: 75 + , east__size: 75 + , spacing_open: 8 // ALL panes + , spacing_closed: 8 // ALL panes + , west__spacing_closed: 12 + , east__spacing_closed: 12 + } + + + + + }); + + + function initializeConnections() { + + var channelId = null; var audioVideo = true; var data = true; + channelId = location.href.replace(/\/|:|#|%|\.|\[|\]/g, ''); + var videoChannelId = channelId.concat("video"); + var screenChannelId = channelId.concat("screen"); + + videoConnection = new RTCMultiConnection(videoChannelId); + screenConnection = new RTCMultiConnection(screenChannelId); + + + if( window.location.protocol == 'http:' && DetectRTC.browser.isChrome ) { + audioVideo = false; + console.log("Video Chat is not supported over unsecured connection for Chrome; Use Firefox") + } + configConnection(videoConnection,audioVideo,audioVideo,false,true,false); + configConnection(screenConnection,false,false,true,false,true); + + }; + + function configConnection(_connection, _audio, _video, _screen, _data, _oneway) { + _connection.session = { + audio: _audio, // by default, it is true + video: _video, // by default, it is true + screen: _screen, + data: _data, + oneway: _oneway, + broadcast: false + }; + + _connection.direction = "one-to-one"; + + if( _data == true ) { + _connection.onmessage = function(e) { + appendDIV(e.data); + + console.debug(e.userid, 'posted', e.data); + console.log('latency:', e.latency, 'ms'); + }; + } + + + }; + + function assignStreamToDom() { + + + screenConnection.screenbody = document.querySelector('.screenContainer1'); + screenConnection.videobody = document.querySelector('.videoContainer2'); + + videoConnection.screenbody = document.querySelector('.screenContainer2'); + videoConnection.videobody = document.querySelector('.videoContainer1'); + }; + + function maximizeLayout() { + + // open the panes and maximize the window. + top.window.resizeTo(screen.availWidth,screen.availHeight); + // lets keep this closed as its the screen share panel; will be opened up in future release + panelLayout.open('west'); + // panelLayout.open('south'); is not working due to state initialization problem; debug to find out. so replacing the call with work around below - hack. + // $(".ui-layout-toggler-south-closed").first().click(); + + }; + + function minimizeLayout() { + + // close the panes and minimize the window. + top.window.resizeTo(screen.availWidth - 2*screen.availWidth/3, screen.availHeight - screen.availHeight/2); + panelLayout.close('west'); + // panelLayout.close('south'); is not working due to state initialization problem; debug to find out. so replacing the call with work around below - hack. + $(".ui-layout-toggler-south-opened").first().click(); + }; + + function emptyContainers() { + $('.screenContainer1').empty(); + $('.videoContainer2').empty(); + + $('.screenContainer2').empty(); + $('.videoContainer1').empty(); + }; + + function appendDIV(div, parent) { + if (typeof div === 'string') { + var content = div; + div = document.createElement('div'); + div.innerHTML = content; + }; + + var chatOutput = document.getElementById('chat-output'), + fileProgress = document.getElementById('file-progress'); + + if (!parent) {chatOutput.appendChild(div, chatOutput.firstChild); chatOutput.scrollTop = chatOutput.scrollHeight; + } + else fileProgress.insertBefore(div, fileProgress.firstChild); + + div.tabIndex = 0; + $('#chat-input').focus(); + }; + + function confirmClose() { + var message = "Are you sure you want to close the session?"; + + // if(popupModalService != undefined) { + // popupModalService.popupConfirmWin("Confirm", message, function(){ location.reload();}); + // } + + if (confirm(message) == true) { + location.reload(); + //window.opener.location.reload(); // go to the parent window + //close(); + } else { + // do nothing + } + + }; + + function notifyOthers() { + + // var websocket = localStorage.getItem('notifySocket'); + //if( websocket != null) { + // handling websocket peer broadcast session + var currentUser = "${sessionScope.user.orgUserId}"; + var initialPageVisit = "${sessionScope.initialPageVisit}"; + var remoteUser = ''; + + var userList = location.search.split('chat_id=')[1].split('-'); + for(var i=0;i<userList.length;i++) { + if(userList[i] !== currentUser) { + remoteUser = userList[i]; + break; + } + } + + socketSetup(initialPageVisit, currentUser, remoteUser,"socketSend"); + + + + + + + }; + + function makeChatVisible() { + + $('#chat-input').css("visibility", 'visible'); + }; + + function srcDestinationSessionAction() { + var url = window.location.href; + var chatId = ""; + + try{ + chatId = url.split("chat_id=")[1]; + } + catch(err) { + chatId =""; + } + // window.localStorage.getItem(chatId) == "source" + if(chatId != "" && getCookie(chatId) == "source") { + startSession(); + setCookie(chatId,"",-1); + //window.localStorage.removeItem(chatId); + } else { + viewSession(); + } + + }; + + function startSession() { + + emptyContainers(); + videoConnection.close(); + screenConnection.close(); + + maximizeLayout(); + emptyContainers(); + makeChatVisible(); + + videoConnection.open(); + screenConnection.open(); + + + notifyOthers(); + }; + + function viewSession() { + maximizeLayout(); + emptyContainers(); + makeChatVisible(); + + // timeout is required for the sharing to properly work + setTimeout(function() { + screenConnection.connect(); + },2000); + setTimeout(function() { + videoConnection.connect(); + },1000); + }; + + + function setCookie(cname,cvalue,exdays) { + var d = new Date(); + d.setTime(d.getTime() + (exdays*24*60*60*1000)); + var expires = "expires=" + d.toGMTString(); + document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; + } + + function getCookie(cname) { + var name = cname + "="; + var decodedCookie = decodeURIComponent(document.cookie); + var ca = decodedCookie.split(';'); + for(var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') { + c = c.substring(1); + } + if (c.indexOf(name) == 0) { + return c.substring(name.length, c.length); + } + } + return ""; + } + + + + /* on click button enabled*/ + document.getElementById('share-screen').onclick = function() { + startSession(); + }; + + document.getElementById('stop-share-screen').onclick = function() { + + emptyContainers(); + + videoConnection.close(); + screenConnection.close(); + + confirmClose(); + + }; + + document.getElementById('view-screen').onclick = function() { + viewSession(); + }; + + document.getElementById('chat-input').onkeypress = function(e) { + if (e.keyCode !== 13 || !this.value) return; + var message = "<b>${model.name}</b>: " + this.value; + appendDIV(message); + + // sending text message + videoConnection.send(message); + + this.value = ''; + }; + + /* + document.getElementById('file').onchange = function() { + videoConnection.send(this.files[0]); + }; + */ + + + //document.querySelector('.screenContainerPane').appenChild(document.querySelector('.screenContainer')); + //document.querySelector('.videoContainerPane').appendChild(document.querySelector('.videoContainer')); + + //panelLayout.bindButton($('#share-screen'), 'open', 'outer-west'); + //panelLayout.bindButton($('#stop-share-screen'), 'close', 'outer-west'); + var videoConnection = null, screenConnection = null; + initializeConnections(); + assignStreamToDom(); + srcDestinationSessionAction(); + + // start the share + //document.getElementById('share-screen').click(); + // + }); + + +</script> + + +</head> + +<body> +<!-- + <button id="share-screen" hidden="true" style="display: none;" class="setup">Share Your Screen</button> + <button id="stop-share-screen" hidden="true" style="display: none;" class="setup">Stop Share Your Screen</button> + <button id="view-screen" hidden="true" style="display: none;" class="setup">View My Screen</button> + + --> + +<div class="outer-center" style="position: absolute; left: 12px; right: 0px; top: 0px;bottom: 0px;"> + <div class="inner-center"> + + <!-- <jsp:include page="/WEB-INF/fusion/zul/chatOne.zul" /> --> + + + + <table style="width: 100%;"> + <tbody><tr> + <td> + <button id="share-screen" style="display:none" class="button button--primary button--small setup">Start Session</button> + <button id="stop-share-screen" style="display:none" class="button button--primary button--small setup">Stop Session</button> + <button id="view-screen" style="display:none" class="button button--primary button--small setup">View</button> + + </td> + <td> + + </td> + + </tr> + </tbody> + + <tbody> + <tr> + <td> + <div class="videoContainer1"></div> + <div class="videoContainer2"></div> + </td> + </tr> + </tbody> + </table> + + + </div> + <!-- + <div id="inner-south" class="ui-layout-south"> + <!-- + <div class="videoContainer1"></div> + <div class="videoContainer2"></div> + --> + + </div> + --> +</div> + +<div class="outer-west"> + <!-- + <div class="screenContainer1"></div> + <div class="screenContainer2"></div> + <div ng-controller="collaborationController"> </div> + --> + + + <div style="height: 90%;overflow-y: scroll;overflow-x: hidden;overflow-wrap: break-word;word-wrap: break-word;" id="chat-output"></div> + + <div style="bottom:0;width: 100%;"> + <input type="text" id="chat-input" style="font-size: 1.2em;width: 100%;" placeholder="Please type and hit return to send..."/> + </div> + + + +</div> + + + + + +</body> +</html> |