diff options
author | talasila <talasila@research.att.com> | 2017-02-07 15:03:57 -0500 |
---|---|---|
committer | talasila <talasila@research.att.com> | 2017-02-07 15:05:15 -0500 |
commit | 4ad39a5c96dd99acf819ce189b13fec946d7506b (patch) | |
tree | a1449286441947cc3d07a45227fa0d6f978e1a7d /ecomp-portal-FE/client/app/views/support | |
parent | 5500448cbd1f374d0ac743ee2fd636fe2d3c0027 (diff) |
Initial OpenECOMP Portal commit
Change-Id: I804b80e0830c092e307da1599bd9fbb5c3e2da77
Signed-off-by: talasila <talasila@research.att.com>
Diffstat (limited to 'ecomp-portal-FE/client/app/views/support')
11 files changed, 1147 insertions, 0 deletions
diff --git a/ecomp-portal-FE/client/app/views/support/contact-us/contact-us-manage/contact-us-manage.controller.js b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us-manage/contact-us-manage.controller.js new file mode 100644 index 00000000..368f2fe3 --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us-manage/contact-us-manage.controller.js @@ -0,0 +1,194 @@ +/*- + * ================================================================================ + * 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. + * ================================================================================ + */ +'use strict'; + +(function () { + class ContactUsManageController { + constructor($scope,$log, message, $q, $http, conf,contactUsService,confirmBoxService) { + $scope.contactUsList=[]; + $scope.contactUsAllAppList=[]; + $scope.errMsg=''; + $scope.newContactUs ={ + app:'', + name:'', + email:'', + url:'', + desc:'' + }; + /*Get the existing contact us first, then based on the existing, filter from all apps*/ + $scope.getContactUsList = function(){ + contactUsService.getContactUs().then(res=> { + // $log.info('getting getContactUs',res.response); + if(res!=null && res.response!=null){ + for(var i=0; i<res.response.length;i++){ + if(res.response[i].appId!=1) + $scope.contactUsList.push(res.response[i]); + } + } + /*get all the apps*/ + contactUsService.getListOfApp().then(res=> { + var tableData=[]; + $scope.contactUsAllAppListTemp=[]; + // $log.info('contactUsService::getListOfApp: getting res'); + var result = (typeof(res.data) != "undefined" && res.data!=null)?res.data:null; + // $log.info('contactUsService::getListOfApp: result',result); + var res1 = result; + var realAppIndex = 0; + $scope.contactUsAllAppList.length=0; + for (var i = 1; i <= res1.length; i++) { + if (!res1[i - 1].restrictedApp) { + var okToAdd = true; + for(var j =0; j<$scope.contactUsList.length;j++){ + if(res1[i - 1].title==$scope.contactUsList[j].appName) + okToAdd=false; + } + // not allowed to add(duplicate) another entry if the app is already available in the table + if(okToAdd){ + if(res1[i - 1].title){ + $scope.contactUsAllAppList.push({ + index: realAppIndex, + title: res1[i - 1].title, + value: res1[i - 1].index + }); + } + realAppIndex = realAppIndex + 1; + } + } else { + // $log.debug('contactUsService:getAvailableApps:: Restricted/URL only App will not be used = ' + res1[i - 1].title); + } + } + }).catch(err=> { + $log.error('contactUsService:error:: ', err); + + + }).finally(() => { + //this.isLoadingTable = false; + }); + }); + } + + $scope.getContactUsList(); + + $scope.closeDialog = function(){ + $scope.closeThisDialog( $scope.widgetData); + } + + /*Add new Contact Us*/ + $scope.newContactUsFun = function(){ + if($scope.newContactUs.app.title==null || $scope.newContactUs.app.title=='' ){ + confirmBoxService.showInformation('Please select an App to add').then(isConfirmed => { + return; + }); + } + + if($scope.newContactUs.url !=null && $scope.newContactUs.url != '' && !validateUrl($scope.newContactUs.url)){ + var warningMsg = "Please enter a valid URL"; + confirmBoxService.showInformation(warningMsg).then(isConfirmed => {return;}); + return; + } + + contactUsService.addContactUs($scope.newContactUs).then(res=> { + // $log.info('contactUsService: add ContactUs successfully'); + $scope.contactUsList.length=0; + // $log.info('contactUsService: refreshing the Contact US table'); + $scope.getContactUsList(); + $scope.errMsg=''; + /* confirmBoxService.showInformation('You have added a new Contact Us item').then(isConfirmed => { });*/ + var defaultSel={ + index: 0, + title: '', + value: '' + } + $scope.newContactUs ={ + app:defaultSel, + name:'', + email:'', + url:'', + desc:'' + }; + + }).catch(err=> { + $log.error('contactUsService: addContactUs error:: ', err); + // $scope.errMsg=err; + confirmBoxService.showInformation('Add Contact Us list failed: ' + err); + + }).finally(() => { + //this.isLoadingTable = false; + }); + } + /* Edit Contact Us*/ + $scope.editContactUsFun = function(contactObj){ + // $log.info('contactUsService: edit ContactUs save successfully', contactObj); + var contactUsObj={ + appId:contactObj.appId, + appName:contactObj.appName, + description:contactObj.description, + contactName:contactObj.contactName, + contactEmail:contactObj.contactEmail, + url:contactObj.url, + }; + + contactUsService.modifyContactUs(contactUsObj).then(res=> { + // $log.info('contactUsService: edit ContactUs successfully'); + // confirmBoxService.showInformation('You have saved the changes').then(isConfirmed => {}); + $scope.errMsg=''; + + }).catch(err=> { + $log.error('contactUsService: editContactUs error:: ', err); + confirmBoxService.showInformation('Edit Contact Us list failed: ' + err); + // $scope.errMsg=err; + }).finally(() => { + //this.isLoadingTable = false; + }); + + } + /*del Contact Us*/ + $scope.delContactUsFun = function(appObj){ + var confirmMsg = 'Are you sure you want to delete '+appObj.appName +' from the list?' + ' Press OK to delete.'; + confirmBoxService.confirm(confirmMsg).then(function (confirmed) { + if (confirmed == true) { + contactUsService.removeContactUs(appObj.appId).then(res=> { + // $log.info('delContactUsFun: delete ContactUs successfully',res); + $scope.errMsg=''; + $scope.contactUsList.length=0; + $scope.getContactUsList(); + confirmBoxService.showInformation('Item has been deleted').then(isConfirmed => {}); + }).catch(err=> { + $log.error('contactUsService: addContactUs error:: ', err); + confirmBoxService.showInformation('Deletion failed: ' + err); + // $scope.errMsg=err; + }).finally(() => { + //this.isLoadingTable = false; + }); + } + }); + + } + + } + } + ContactUsManageController.$inject = ['$scope','$log', 'message', '$q', '$http', 'conf','contactUsService','confirmBoxService']; + angular.module('ecompApp').controller('ContactUsManageController', ContactUsManageController); + + +})(); +function validateUrl(value){ + return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); + } diff --git a/ecomp-portal-FE/client/app/views/support/contact-us/contact-us-manage/contact-us-manage.controller.less b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us-manage/contact-us-manage.controller.less new file mode 100644 index 00000000..ef8c88df --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us-manage/contact-us-manage.controller.less @@ -0,0 +1,159 @@ +/*- + * ================================================================================ + * 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. + * ================================================================================ + */ + .searchLiHeader { +font-weight: bold; +color: #0574ac; +font-size: 16px; +padding-bottom: 10px; +line-height: 1.5; +font-family: arial; + +} + +.searchLiItems{ +cursor: pointer; +font-weight: normal; +font-size: 12px; +color: #444444; +font-family: arial; +} + +.searchUl { +list-style: none; +border-bottom: 1px solid #bbb; +padding-bottom: 20px; +} + +.manage-contactUs-home-title{ + color: #067ab4; + font-family: arial; + font-size: 24px; + margin-left: 78px; + width: 1170px; + } + +.manage-contactUs-home-manageWidgets-title{ + color: #067ab4; + font-family: arial; + font-size: 24px; + margin-left: 30px; + width: 1170px; + } + +#editWidgetsContent { + height: 300px; + width: 1250px; + } + +#editWidgetsContent .scroll-viewport { + height: 300px; + width: 1250px; + } + + .add-contact-us-field{ + width:250px; + display: inline-block; + margin:10px; + } + .add-contact-us-field-des{ + width:800px; + margin:10px; + } + +.errMsg{ + color:red; +} +.sucessMsg{ + color:green; +} +.contact-us-margin{ + margin-left: 80px; + margin-right: 120px; +} +.contact-us-manage-table { + + + .delete-contact-us{ + font-size:20px; + } + + .portal-add-button { + width: 160px; + } +} + +.select2-container .select2-chosen, .select2-container .select2-container input{ + line-height:39px; +} +.select2-container .select2-choice{ + -webkit-transition: border-color .2s ease-out; + -moz-transition: border-color .2s ease-out; + transition: border-color .2s ease-out; + background: #fff; + border-radius: 6px; + display: block; + border: 1px solid #888; + box-shadow: none; + filter: none; + height: 32px !important; + padding: 0; + position: relative; + z-index: 5; + cursor: pointer; +} + +.c-ecomp-att-abs-table .contactUs{ + + height:300px; + +} + +.ngdialog-overlay { + pointer-events: none !important; +} + +.input-text-area { + font-style: italic; + padding: 7px 10px; + width: 250px; + display: inline-block; + position: relative; + margin-bottom: 10px; + border-radius: 6px; + border: 1px solid #d8d8d8; + height: 32px !important; + border-color: slategrey !important; +} +.input-inline-edit-text { + font-style: italic; + padding: 7px 10px; + display: inline-block; + position: relative; + margin-bottom: 10px; + border-radius: 6px; + border: 1px solid #d8d8d8; + height: 32px; + border-color: slategrey !important; + width:100%; + } +.glyphicon { + position: relative !important; + line-height: 0 !important; +}
\ No newline at end of file diff --git a/ecomp-portal-FE/client/app/views/support/contact-us/contact-us-manage/contact-us-manage.html b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us-manage/contact-us-manage.html new file mode 100644 index 00000000..257226a0 --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us-manage/contact-us-manage.html @@ -0,0 +1,136 @@ +<!-- + ================================================================================ + 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. + ================================================================================ + --> +<div style="margin-top: 10px; margin-bottom: 10px;"> + +</div> +<br/> + +<div style="margin-top: 25px;"> + <div id="title" class="manage-contactUs-home-title">Manage Contact Us</div> + <div class="contact-us-margin"> + <div class="get-access-table"> + <div class="table-control"> + <div class="c-ecomp-att-abs-table" style="height:300px""> + <table att-table id="table-main" table-data="contactUsList" current-page="ignoredCurrentPage"> + <thead att-table-row type="header"> + <tr> + <th id="th-users-0" att-table-header key="ecomp_function" default-sort="a" >App Name</th> + <th id="th-users-1" att-table-header key="app_name" sortable="true" >Contact Name</th> + <th id="th-users-2" att-table-header key="app_name" sortable="true" >Contact Email</th> + <th id="th-users-3" att-table-header key="role_name" sortable="true">Contact URL</th> + <th id="th-users-4" att-table-header key="role_name" sortable="true" >Description</th> + <th id="th-users-5" att-table-header key="role_name" sortable="true" >Edit</th> + <th id="th-users-6" att-table-header key="role_name" sortable="true" >Delete</th> + </tr> + </thead> + <!-- Use track-by="UNIQUE KEY HERE" or leave out if no unique keys in data --> + <tbody att-table-row type="body" class="table-body" track-by="$index" row-repeat="rowData in contactUsList"> + <tr id="tr-rowData" ng-click=""> + <td att-table-body> + <div id="users-page-td-appName" ng-bind="rowData.appName"></div> + </td> + <td att-table-body> + <div id="users-page-td-name" ng-hide="rowData.showEdit" ng-bind="rowData.contactName"></div> + <input class="input-inline-edit-text" type="text" ng-show="rowData.showEdit" ng-model="contactUsList[$index].contactName"/> + </td> + <td att-table-body> + <div id="users-page-td-email" ng-hide="rowData.showEdit" ng-bind="rowData.contactEmail"></div> + <input class="input-inline-edit-text" type="text" ng-show="rowData.showEdit" ng-model="contactUsList[$index].contactEmail"/> + </td> + <td att-table-body> + <div id="users-page-td-url" ng-hide="rowData.showEdit" ng-bind="rowData.url"></div> + <input class="input-inline-edit-text" type="text" ng-show="rowData.showEdit" ng-model="contactUsList[$index].url"/> + </td> + <td att-table-body> + <div id="users-page-td-descr" ng-hide="rowData.showEdit" ng-bind=" rowData.description"></div> + <input class="input-inline-edit-text" type="text" ng-show="rowData.showEdit" ng-model="contactUsList[$index].description"/> + </td> + <td att-table-body> + <div class="delete-contact-us" ng-hide="rowData.showEdit" ng-click="rowData.showEdit=true"> + <span class="ion-edit"></span> + </div> + <span ng-show="rowData.showEdit" > + <a att-button btn-type="primary" ng-click="editContactUsFun(rowData); rowData.showEdit=false" class="button button--primary" size="small" >Save</a> + </span> + </td> + <td att-table-body> + <div class="delete-contact-us" ng-click="delContactUsFun(rowData)"> + <span class="ion-trash-b"></span> + </div> + </td> + </tr> + </tbody> + </table> + </div> + + <div att-divider-lines></div> + <div style="margin-top: 15px; margin-left: -78px;"> + <div id="addWidgetHeader" class="contact-us-margin"> + <h1 style="font-size:18px;">Add Application Contact Information</h1> + <!-- <div class="errMsg">{{errMsg}}</div> --> + </div> + <div id="addWidget" class="contact-us-margin"> + <div> + <div class="add-contact-us-field"> + <div id="mots-property-label" class="property-label">App Name</div> + <div class="form-field" att-select="contactUsAllAppList" ng-model="newContactUs.app" placeholder="Select an App"></div> + </div> + <br> + <div class="add-contact-us-field" > + <div class="property-label">Contact Name</div> + <input class="input-text-area" type="text" ng-model="newContactUs.name"/> + </div> + <div class="add-contact-us-field" > + <div class="property-label">Contact Email</div> + <input class="input-text-area" type="text" ng-model="newContactUs.email"/> + </div> + <div class="add-contact-us-field" > + <div class="property-label">Contact URL</div> + <input class="input-text-area" type="text" ng-model="newContactUs.url"/> + </div> + <div class="add-contact-us-field-des"> + <div class="property-label">Description</div> + <textarea style="margin-top: 0px; margin-bottom: 0px; height: 100px" ng-model="newContactUs.desc"></textarea> + </div> + </div> + <div style="height:50px;"> + <a style="float:right; margin-top:20px" att-button btn-type="primary" class="button button--primary" size="small" ng-click="newContactUsFun()">Add New</a> + </div> + + <div att-divider-lines></div> + + <div style="height:50px;"> + <a style="float:right; margin-right: -162px;" att-button btn-type="primary" class="button button--primary" size="small" ng-click="closeDialog()">Close</a> + </div> + + </div> + + </div> + + </div> + </div> + </div> +</div> + + <script type="application/javascript"> + $(document).ready(function(){ + $(".ngdialog-content").css("width","85%") + }); +</script>
\ No newline at end of file diff --git a/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.controller.js b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.controller.js new file mode 100644 index 00000000..63e38a48 --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.controller.js @@ -0,0 +1,166 @@ +/*- + * ================================================================================ + * 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. + * ================================================================================ + */ +'use strict'; + +(function () { + + class ContactUsCtrl { + constructor($log, contactUsService, applicationsService, $modal, ngDialog, $state) { + + contactUsService.getContactUSPortalDetails().then(res => { + // $log.info('ContactUsCtrl:: contactUsService getContactUSPortalDetails res',res); + // $log.info('getting res',res); + var result = (typeof(res.response) != "undefined" && res.response!=null)?res.response:null; + // $log.info('result',result); + // $log.info('done'); + var source = JSON.parse(result); + // $log.info(source); + this.ush_TicketInfoUrl = source.ush_ticket_url; + this.portalInfo_Address = source.feedback_email_address; + this.feedback_Url = source.portal_info_url; + }).catch(err=> { + $log.error('ContactUsCtrl:error:: ', err); + }).finally(() => { + }); + + let init = () => { + // $log.info('ecomp app::contact-us-controller::initializing...'); + this.appTable=[]; + this.functionalTableData=[]; + }; + init(); + + let updateContactUsTable = () => { + contactUsService.getAppsAndContacts().then(res=> { + // $log.info('ContactUsCtrl:: contactUsService getAppsAndContacts res',res); + var tableData=[]; + // $log.info('getting res',res); + var result = (typeof(res.response) != "undefined" && res.response!=null)?res.response:null; + // $log.info('result',result); + // $log.info('done'); + var source = result; + // $log.info(source); + // Drop Portal app, empty name entries + for(var i=0;i<source.length; i++) { + var dataArr = source[i]; + if ( !dataArr.appName || dataArr.appId == 1) { + continue; + } + var dataTemp={ + app_name: dataArr.appName, + contact_name: dataArr.contactName, + contact_email: dataArr.contactEmail, + desc: dataArr.description, + url_Info: dataArr.url, + app_Id: dataArr.appId, + } + tableData.push(dataTemp); + } + this.appTable=tableData; + }).catch(err=> { + $log.error('ContactUsCtrl.updateContactUsTable:error:: ', err); + }) + }; + + contactUsService.getAppCategoryFunctions().then(res=> { + // $log.info('ContactUsCtrl:: contactUsService getAppCategoryFunctionsthen res',res); + var tablefunctionalData=[]; + // $log.info('getting res',res); + var result = (typeof(res.response) != "undefined" && res.response!=null)?res.response:null; + // $log.info('result',result); + // $log.info('done'); + var source = result; + // $log.info(source); + for(var i=0;i<source.length; i++) { + var datafunctionalArr = source[i]; + var datafuntionalTemp={ + category: datafunctionalArr.category, + app_Name: datafunctionalArr.application, + functions: datafunctionalArr.functions, + app_Id: datafunctionalArr.appId, + } + tablefunctionalData.push(datafuntionalTemp); + } + this.functionalTableData=tablefunctionalData; + }).catch(err=> { + $log.error('ContactUsCtrl:error:: ', err); + }) + + updateContactUsTable(); + this.editContactUsModalPopup = () => { + // $log.debug('ContactUsCtrl::editContactUsModalPopup updating table data...'); + var modalInstance = ngDialog.open({ + templateUrl: 'app/views/support/contact-us/contact-us-manage/contact-us-manage.html', + controller: 'ContactUsManageController', + resolve: { + message: function message() { + var message = { + type: 'Contact', + }; + return message; + } + } + }).closePromise.then(needUpdate => { + updateContactUsTable(); + }); + }; + + this.goToSection = (id) => { + var targetDiv = document.getElementById(id); + var offSetHeight = 0; + for(var i=0;i<this.appTable.length;i++){ + if(this.appTable[i].app_Id==id) + break; + if(this.appTable[i].showFlag==true){ + offSetHeight+=document.getElementById('collapse'+i).clientHeight; + } + } + this.appTable.forEach(d => d.showFlag = false); + // let index = this.appTable.findIndex(a => a.app_Id == id); + var index =-1; + for(var i=0; i<this.appTable.length;i++){ + if(this.appTable[i].app_Id==id){ + index = i; + break; + } + } + console.log(index); + if (index > -1) { + // setting the showFlag to true based on index comparing with the app_Id + this.appTable[index].showFlag = true; + $('#contentId').animate({ + scrollTop: targetDiv.offsetTop-offSetHeight + 'px' + }, 'fast'); + } + + }; + + // Take the user to the application on the get access page. + this.goGetAccess = (appName) => { + // $log.debug('ContactUsCtrl::goGetAccess received name ' + appName); + applicationsService.goGetAccessAppName = appName; + $state.go('root.getAccess'); + }; + + } + } + ContactUsCtrl.$inject = ['$log','contactUsService', 'applicationsService', '$modal', 'ngDialog', '$state']; + angular.module('ecompApp').controller('ContactUsCtrl', ContactUsCtrl); +})(); diff --git a/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.controller.spec.js b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.controller.spec.js new file mode 100644 index 00000000..34042c14 --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.controller.spec.js @@ -0,0 +1,19 @@ +/*- + * ================================================================================ + * 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. + * ================================================================================ + */ diff --git a/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.less b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.less new file mode 100644 index 00000000..b0c0af4f --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.less @@ -0,0 +1,104 @@ +/*- + * ================================================================================ + * 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. + * ================================================================================ + */ + .w-ecomp-contactUs-home { + .bg_w; + position: @page-main-position; + top: @page-main-top; + left: @page-main-left; + right: @page-main-right; + bottom: @page-main-bottom; + padding-top: @padding-top; + padding-left: @padding-left-side; + + .contactUs-home-container { + .content_justify; + position: relative; + //padding-top: 15px; + padding-right: 0; + padding-left: 0; + padding-bottom: 32px; + width: 100%; + + .contactUs-home-title { + .a24r; + margin: auto; + .content_justify; + } + + .contactUs-general-div { + margin: auto; + padding-top: 15px; + padding-bottom: 15px; + .content_justify; + } + } + +.collapsibleArrow { + width: 30px; + height: 30px; + margin-left: 10px; + } + +.contactUs-collapsible-panel { + margin: auto; + width: 1170px; + + } + + .contactUs-collapsible-table { + margin: auto; + width: 1170px; + } + + .contactUs-txt { + font-weight: normal; + color: #666666; + font-size: 15px; + font-family: arial; + margin:10px; + } + +.contactUs-panel-header { + font-weight: normal; + color: #666666; + font-size: 18px; + font-family: sans-serif; + border-top: 1px solid #ccc; + outline : none; + height: 35px; + width: 1050px; + } + + .contactUs-panel-header:hover{ + color: #428bca; + background: #eae8e8; + cursor: pointer; cursor: hand; + } + +.contactUs-panel-labels { + font-weight: normal; + color: #666666; + font-size: 15px; + font-family: sans-serif; + padding-top: 5px; + padding-bottom: 5px; +} + +} diff --git a/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.tpl.html b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.tpl.html new file mode 100644 index 00000000..0b403ece --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/contact-us/contact-us.tpl.html @@ -0,0 +1,125 @@ +<!-- + ================================================================================ + 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. + ================================================================================ + --> +<div class="w-ecomp-contactUs-home"> + <div class="contactUs-home-container"> + <div class="admins-page-main" id="contentId"> + <div id="title" class="contactUs-home-title">Contact Us + <span ng-if="isAdminPortalAdmin == true" class="ion-edit" style="float: right;" ng-click="contact.editContactUsModalPopup()"></span> + </div> + + <div class="contactUs-general-div"> + <span class="contactUs-txt">To give feedback or report an issue to the OpenECOMP Portal team, send email to <a + ng-href="mailto:{{contact.portalInfo_Address}}" target="_top">{{contact.portalInfo_Address}}</a>. + </div> + + <br/> + <!-- Function Categories --> + <div id="appFunctionInfo" style="font-size: 20px;" class="contactUs-home-title"> Application Functions + <div class="contactUs-general-div"> + <div style="width: 1050px; height:auto;" class="c-ecomp-att-abs-table default"> + <table att-table id="table-main" + table-data="contact.functionalTableData" + current-page="ignoredCurrentPage"> + <thead att-table-row type="header"> + <tr> + <th id="th-functionalItem-0" style="width:20%;cursor: default" att-table-header sortable="false">Category</th> + <th id="th-functionalItem-1" style="width:60%;cursor: default" att-table-header sortable="false">ECOMP Functions</th> + <th id="th-functionalItem-2" style="cursor: default" att-table-header sortable="false">ECOMP Application</th> + <!-- <th id="th-functionalItem-3" att-table-header >Contact</th> --> + </tr> + </thead> + <!-- Use track-by="UNIQUE KEY HERE" or leave out if no unique keys in data --> + <tbody att-table-row + type="body" + class="table-body" + track-by="$index" + row-repeat="rowData in contact.functionalTableData"> + <tr id="tr-rowData" ng-click=""> + <td att-table-body> + <div id="functional-item-td-category" + ng-show="$index == 0 || contact.functionalTableData[$index-1].category != rowData.category" + ng-bind="rowData.category"> + </div> + </td> + <td att-table-body> + <div id="functional-item-td-functions" ng-bind="rowData.functions"></div> + </td> + <td att-table-body> + <a ng-click="contact.goToSection(rowData.app_Id, $index);">{{rowData.app_Name}}</a> + </td> + </tr> + </tbody> + </table> + </div> + </div> + </div> + <br/> + <!-- Display applicationInfo panels --> + <div id="allAppInfo"> + <div style="font-size: 20px;" class="contactUs-home-title"> All Applications + </div> + <div ng-repeat="rowData in contact.appTable" + class="contactUs-collapsible-panel"> + <div id="{{rowData.app_Id}}" style="height:60px; " class="contactUs-panel-header" ng-click="rowData.showFlag = !rowData.showFlag" > + <span ng-bind="rowData.app_name" style="position:relative; top:20px"></span> + + <span style="float: right; margin-right: 30px; margin-top:20px;"> + <span ng-hide="rowData.showFlag" class="ion-ios-arrow-down" alt="Expand app contact section"> </span> + <span ng-show="rowData.showFlag" class="ion-ios-arrow-up" alt="App contact section"> </span> + </span> + </div> + + <div id="collapse{{$index}}" ng-show="rowData.showFlag" + class="contactUs-collapsible-panel"> + <div class="contactUs-txt" ng-hide="rowData.contact_name || rowData.contact_email || rowData.url_Info || rowData.desc"> + <span style="margin-bottom: 20px;"> No application information is available. Please use the links above to contact the OpenECOMP Portal team. </span> + </div> + <div class="contactUs-txt" ng-show="rowData.contact_name || rowData.contact_email || rowData.url_Info || rowData.desc"> + <table style="border-spacing: 10px 5px; max-width:950px; margin:10px;"> + <tr> + <td class="contactUs-panel-labels" style="width: 120px;">Contact:</td> + <td class="contactUs-panel-labels" style="width: 830px;">{{rowData.contact_name}}</td> + </tr> + <tr> + <td class="contactUs-panel-labels">Email:</td> + <td class="contactUs-panel-labels"><a ng-href="mailto:{{rowData.contact_email}}" target="_top">{{rowData.contact_email}}</a></td> + </tr> + <tr> + <td class="contactUs-panel-labels">Info URL:</td> + <td class="contactUs-panel-labels"><a ng-href="{{rowData.url_Info}}" target="_blank">{{rowData.url_Info}}</a></td> + </tr> + <tr> + <td class="contactUs-panel-labels">Description:</td> + <td class="contactUs-panel-labels">{{rowData.desc}}</td> + </tr> + <tr> + <td class="contactUs-panel-labels">Get access:</td> + <td class="contactUs-panel-labels"><a href="" ng-click="contact.goGetAccess(rowData.app_name);">Click for application and role information</a></td> + </tr> + </table> + </div> + </div> + + </div> + </div> + + </div> +</div> +</div>
\ No newline at end of file diff --git a/ecomp-portal-FE/client/app/views/support/get-access/get-access.controller.js b/ecomp-portal-FE/client/app/views/support/get-access/get-access.controller.js new file mode 100644 index 00000000..b9b254ac --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/get-access/get-access.controller.js @@ -0,0 +1,70 @@ +/*- + * ================================================================================ + * 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. + * ================================================================================ + */ +'use strict'; +(function () { + class GetAccessCtrl { + constructor($log, $stateParams, getAccessService,applicationsService, ngDialog) { + // $log.debug('GetAccessCtrl: appService param is: ' + applicationsService.goGetAccessAppName); + + this.updateAppsList = () => { + getAccessService.getListOfApp().then(res=> { + var tableData=[]; + // $log.info('GetAccessCtrl::updateAppsList: getting res'); + var result = (typeof(res.data) != "undefined" && res.data!=null)?res.data:null; + // $log.info('GetAccessCtrl::updateAppsList: result',result); + // $log.info('GetAccessCtrl::updateAppsList: done'); + var source = result; + // $log.info('GetAccessCtrl::updateAppsList source: ', source); + for(var i=0;i<source.length; i++){ + var dataArr = source[i]; + var dataTemp={ + ecomp_function: dataArr.ecompFunction, + app_name:dataArr.appName, + role_name:dataArr.roleName + } + tableData.push(dataTemp); + } + this.appTable=tableData; + + if( $stateParams.appName != null) + this.searchString = $stateParams.appName; + else + this.searchString = applicationsService.goGetAccessAppName; + // the parameter has been used; clear the value. + applicationsService.goGetAccessAppName = ''; + }).catch(err=> { + $log.error('GetAccessCtrl:error:: ', err); + }).finally(() => { + this.isLoadingTable = false; + }); + }; + let init = () => { + // $log.info('GetAccessCtrl:: initializing...'); + this.searchString = ''; + this.getAccessTableHeaders = ['ECOMP Function', 'Application Name', 'Role Name']; + this.appTable=[]; + this.updateAppsList(); + }; + init(); + } + } + GetAccessCtrl.$inject = ['$log', '$stateParams', 'getAccessService', 'applicationsService', 'ngDialog']; + angular.module('ecompApp').controller('GetAccessCtrl', GetAccessCtrl); +})(); diff --git a/ecomp-portal-FE/client/app/views/support/get-access/get-access.controller.spec.js b/ecomp-portal-FE/client/app/views/support/get-access/get-access.controller.spec.js new file mode 100644 index 00000000..34042c14 --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/get-access/get-access.controller.spec.js @@ -0,0 +1,19 @@ +/*- + * ================================================================================ + * 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. + * ================================================================================ + */ diff --git a/ecomp-portal-FE/client/app/views/support/get-access/get-access.less b/ecomp-portal-FE/client/app/views/support/get-access/get-access.less new file mode 100644 index 00000000..20b406e9 --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/get-access/get-access.less @@ -0,0 +1,67 @@ +/*- + * ================================================================================ + * 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. + * ================================================================================ + */ + .w-ecomp-get-access-home { + .bg_w; + position: @page-main-position; + top: @page-main-top; + left: @page-main-left; + right: @page-main-right; + bottom: @page-main-bottom; + padding-top: @padding-top; + padding-left: @padding-left-side; + + .get-access-home-container { + .content_justify; + position: relative; + padding-right: 0; + padding-left: 0; + padding-bottom: 32px; + width: 100%; + + .get-access-home-title { + .a24r; + margin: auto; + .content_justify; + } + + .get-access-general-div { + margin: auto; + padding-top: 15px; + padding-bottom: 15px; + .content_justify; + } + } + + .get-access-table { + width: @table-width; + margin: @table-margin; + + .table-control { + .table-dropdown-filter { + width: @table-dropdown-filter-width; + display: @table-dropdown-filter-display; + } + } + + .table-body { + cursor: pointer; + } + } +} diff --git a/ecomp-portal-FE/client/app/views/support/get-access/get-access.tpl.html b/ecomp-portal-FE/client/app/views/support/get-access/get-access.tpl.html new file mode 100644 index 00000000..3ed92f14 --- /dev/null +++ b/ecomp-portal-FE/client/app/views/support/get-access/get-access.tpl.html @@ -0,0 +1,88 @@ +<!-- + ================================================================================ + 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. + ================================================================================ + --> +<div class="w-ecomp-get-access-home"> + <div class="get-access-home-container"> + <div class="admins-page-main" id="contentId"> + <div id="title" class="get-access-home-title">Get Access</div> + <div class="get-access-general-div"> + <span> + Request access for following functions by sending email to the Application's Admin. For Admin contact details, please <a href='contactUs'>click here</a>. + </span> + </div> + <div class="get-access-table"> + <div class="table-control"> + <input id="input-table-search" + class="table-search" + type="text" + placeholder="Search" + ng-model="access.searchString"/> + <span class="ecomp-spinner" ng-show="access.isLoadingTable"></span> + <div style="height: auto;" class="c-ecomp-att-abs-table default" ng-hide="access.isLoadingTable"> + <!-- expects data to arrive sorted by first column: ecomp_function --> + <table att-table id="table-main" + table-data="access.appTable" + search-string="access.searchString" + view-per-page="access.viewPerPageIgnored" + current-page="access.currentPageIgnored" + total-page="access.totalPageIgnored"> + <thead att-table-row type="header"> + <tr> + <th id="th-access-0" att-table-header key="ecomp_function" sortable="false">{{access.getAccessTableHeaders[0]}}</th> + <th id="th-access-1" att-table-header key="app_name" sortable="false">{{access.getAccessTableHeaders[1]}}</th> + <th id="th-access-2" att-table-header key="role_name" sortable="false">{{access.getAccessTableHeaders[2]}}</th> + </tr> + </thead> + <!-- Use track-by="UNIQUE KEY HERE" or leave out if no unique keys in data --> + <tbody att-table-row type="body" + class="table-body" + track-by="$index" + row-repeat="rowData in access.appTable"> + <tr id="tr-rowData" ng-click=""> + <td att-table-body> + <div id="access-page-function" + ng-show="$index == 0 || access.appTable[$index-1].ecomp_function != rowData.ecomp_function" + ng-bind="rowData.ecomp_function"> + </div> + </td> + <td att-table-body> + <div id="access-page-appName" + ng-show="$index == 0 || access.appTable[$index-1].app_name != rowData.app_name" + ng-bind="rowData.app_name"></div> + </td> + <td att-table-body> + <div id="access-page-roleName" ng-bind="rowData.role_name"></div> + </td> + </tr> + </tbody> + </table> + </div> + </div> + </div> + </div> +</div> +</div> +<style> +.tablesorter-default{ + cursor: default; +} +.admins-page-main .admins-table .table-body { + cursor: default; +} +</style> |