From 46f4c2ab5fc870f424e8f74a179ec3bea2c96537 Mon Sep 17 00:00:00 2001 From: Eddie Arrage Date: Tue, 22 May 2018 22:08:13 +0000 Subject: Implemented directory within OVP portal - Added OVP directory to portal home page as summary view to showcase vendors offerings that have received marks - Each row of table in directory summary represents a product offering that has received compliance verification marks and will be ordered by approve date - Currently, a vendor with multiple products will be displayed as separate rows, as agreed by OPNFV marketing - Added new angular component/controller for OVP directory secondary drill-down view, which provides more detailed info including Description, Product Info, SUT HW Version (optional from vendor) and SUT Version. Product info links to product_documentation field in Applications collection but can be improved as requirements are flushed out - Added new db fields to existing applications collection in mongodb - Applications collection is fetched on home page and detailed directory views - Updated Applications management view (administrator role) with new db fields including description, ovp_category, ovp_version, company_logo, approve_date, approved, sut_version, sut_hw_version, allowing admin to delete and add back with updates. - Updated participation form link for exemption process addition - Consider for another patch - upload form for company logos in Applications view for administrator to add. The initial wave of logos will need to be included in the patch for now when available from OPNFV marketing - Consider for another patch - improve 'Product Info' field to accept HTML as input allowing administrator to add raw HTML in mongod - Consider for another patch - update an existing application for admin role in Applications view rather than forcing a delete/add operation for an update Change-Id: I41d08a7164ee4513106bd09ea30d20be5abd911e Signed-off-by: Eddie Arrage --- cvp/3rd_party/static/testapi-ui/app.js | 5 ++ .../static/testapi-ui/assets/css/home/home.css | 33 ++++++++++ .../components/application/application.html | 72 ++++++++++++++++++++++ .../application/applicationController.js | 18 +++++- .../testapi-ui/components/directory/directory.html | 34 ++++++++++ .../components/directory/directoryController.js | 44 +++++++++++++ .../static/testapi-ui/components/home/home.html | 30 ++++++++- .../testapi-ui/components/home/homeController.js | 20 +++++- cvp/3rd_party/static/testapi-ui/index.html | 1 + 9 files changed, 251 insertions(+), 6 deletions(-) create mode 100644 cvp/3rd_party/static/testapi-ui/components/directory/directory.html create mode 100644 cvp/3rd_party/static/testapi-ui/components/directory/directoryController.js diff --git a/cvp/3rd_party/static/testapi-ui/app.js b/cvp/3rd_party/static/testapi-ui/app.js index eea8e38e..02cd7688 100644 --- a/cvp/3rd_party/static/testapi-ui/app.js +++ b/cvp/3rd_party/static/testapi-ui/app.js @@ -45,6 +45,11 @@ templateUrl: 'testapi-ui/components/about/about.html', controller: 'AboutController as ctrl' }). + state('directory', { + url: '/directory/:companyID&:logo', + templateUrl: 'testapi-ui/components/directory/directory.html', + controller: 'DirectoryController as ctrl' + }). state('guidelines', { url: '/guidelines', templateUrl: 'testapi-ui/components/guidelines/guidelines.html', diff --git a/cvp/3rd_party/static/testapi-ui/assets/css/home/home.css b/cvp/3rd_party/static/testapi-ui/assets/css/home/home.css index 04db323a..ce8c88e2 100644 --- a/cvp/3rd_party/static/testapi-ui/assets/css/home/home.css +++ b/cvp/3rd_party/static/testapi-ui/assets/css/home/home.css @@ -28,3 +28,36 @@ .home-content-img { width: 80%; } + +#directory_inner th { + font-size: 20px; +} + +#directory_inner tbody { + font-size: 18px; +} + +#directory_inner tr { + vertical-align: center; +} + +#directory_inner { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} + +#directory_break { + height: 1px; + display: flex; + border: 1px solid #ccc; +} + +#directory_inner > thead > tr > th { + border-bottom: 2px solid #ddd; + padding: 8px; +} + +#directory_inner > tbody > tr > td { + border-bottom: 1px solid #ddd; +} diff --git a/cvp/3rd_party/static/testapi-ui/components/application/application.html b/cvp/3rd_party/static/testapi-ui/components/application/application.html index 5d57fe78..dc27585d 100644 --- a/cvp/3rd_party/static/testapi-ui/components/application/application.html +++ b/cvp/3rd_party/static/testapi-ui/components/application/application.html @@ -123,6 +123,62 @@ urpose. Once we understand more about your product or service, we can determine +
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
@@ -179,6 +235,14 @@ urpose. Once we understand more about your product or service, we can determine Primary phone number User ID Type User ID + Description + SUT version + SUT HW version + OVP version + OVP category + Company logo + Approve date + Approved Location Operation @@ -230,6 +294,14 @@ urpose. Once we understand more about your product or service, we can determine {{ app.prim_phone }} {{ app.id_type }} {{ app.user_id }} + {{ app.description }} + {{ app.sut_version }} + {{ app.sut_hw_version }} + {{ app.ovp_version }} + {{ app.ovp_category }} + {{ app.company_logo }} + {{ app.approve_date }} + {{ app.approved }} {{ app.lab_location | labLocation}} diff --git a/cvp/3rd_party/static/testapi-ui/components/application/applicationController.js b/cvp/3rd_party/static/testapi-ui/components/application/applicationController.js index f392d05e..32f1053e 100644 --- a/cvp/3rd_party/static/testapi-ui/components/application/applicationController.js +++ b/cvp/3rd_party/static/testapi-ui/components/application/applicationController.js @@ -43,7 +43,15 @@ ctrl.prim_address = null; ctrl.prim_phone = null; ctrl.id_type = "Linux Foundation"; - ctrl.user_id = null; + ctrl.user_id = null; + ctrl.description = null; + ctrl.sut_version = null; + ctrl.sut_hw_version = null; + ctrl.ovp_version = "2018.01"; + ctrl.ovp_category = "Infrastructure"; + ctrl.company_logo = null; + ctrl.approve_date = null; + ctrl.approved = "false"; ctrl.lab_location="internal"; ctrl.lab_name = null; ctrl.lab_email=null; @@ -78,6 +86,14 @@ "prim_phone": ctrl.prim_phone, "id_type": ctrl.id_type, "user_id": ctrl.user_id, + "description": ctrl.description, + "sut_version": ctrl.sut_version, + "sut_hw_version": ctrl.sut_hw_version, + "ovp_version": ctrl.ovp_version, + "ovp_category": ctrl.ovp_category, + "company_logo": ctrl.company_logo, + "approve_date": ctrl.approve_date, + "approved": ctrl.approved, "lab_location": ctrl.lab_location, "lab_email": ctrl.lab_email, "lab_address": ctrl.lab_address, diff --git a/cvp/3rd_party/static/testapi-ui/components/directory/directory.html b/cvp/3rd_party/static/testapi-ui/components/directory/directory.html new file mode 100644 index 00000000..d1383138 --- /dev/null +++ b/cvp/3rd_party/static/testapi-ui/components/directory/directory.html @@ -0,0 +1,34 @@ +
+

OPNFV Verified Product Directory

+ +
+

Compliance Marks Granted to {{ctrl.companyID}}

+ + + + + + + + + + + + + + + + + + + + + + + + +
ProductDescriptionOVP CateogryOVP VersionProduct InfoSUT VersionSUT HW Version
{{ prod.product_name}}{{ prod.description}}{{ prod.ovp_category}}{{ prod.ovp_version}}{{ prod.product_documentation}}{{ prod.sut_version}}{{ prod.sut_hw_version}}
+ +
+ +
diff --git a/cvp/3rd_party/static/testapi-ui/components/directory/directoryController.js b/cvp/3rd_party/static/testapi-ui/components/directory/directoryController.js new file mode 100644 index 00000000..18fda09e --- /dev/null +++ b/cvp/3rd_party/static/testapi-ui/components/directory/directoryController.js @@ -0,0 +1,44 @@ +/* + * 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. + */ + +(function () { + 'use strict'; + + angular + .module('testapiApp') + .controller('DirectoryController', DirectoryController); + + DirectoryController.$inject = ['$location', '$http', '$stateParams', + 'testapiApiUrl' + ]; + + /** + * This controller handles the directory page + */ + function DirectoryController($location, $http, $stateParams, testapiApiUrl) { + var ctrl = this; + + ctrl.companyID = $stateParams.companyID; + ctrl.company_logo = $stateParams.logo; + getDirectory(); + + function getDirectory(){ + $http.get(testapiApiUrl + "/cvp/applications").then(function(response){ + ctrl.directory = response.data.applications; + }, function(error){ + }); + } + + } +})(); diff --git a/cvp/3rd_party/static/testapi-ui/components/home/home.html b/cvp/3rd_party/static/testapi-ui/components/home/home.html index e748dcd3..f7d61cda 100644 --- a/cvp/3rd_party/static/testapi-ui/components/home/home.html +++ b/cvp/3rd_party/static/testapi-ui/components/home/home.html @@ -17,7 +17,7 @@
Terms & Conditions 
Process Workflow 
-
Participation Form 
+
Participation Form 
@@ -100,7 +100,7 @@
-

+

The OPNFV Verified program demonstrates the readiness and availability of commercial products based on OPNFV. Verified products and services submitted by vendors and service providers become compliant by implementing explicitly defined interfaces, behaviors and key features while retaining distinct and value-added innovations across features and capabilities. @@ -109,6 +109,32 @@

+
+
+
+

OPNFV Verified Products Directory

+
+
+ + + + + + + + + + + + + + + + + +
CompanyProductCateogryVersion
 {{ app.organization_name}}{{ app.product_name}}{{ app.ovp_category}}{{ app.ovp_version}}
+
+ diff --git a/cvp/3rd_party/static/testapi-ui/components/home/homeController.js b/cvp/3rd_party/static/testapi-ui/components/home/homeController.js index 4a31448b..bed86ab7 100644 --- a/cvp/3rd_party/static/testapi-ui/components/home/homeController.js +++ b/cvp/3rd_party/static/testapi-ui/components/home/homeController.js @@ -20,7 +20,7 @@ .controller('HomeController', HomeController); HomeController.$inject = [ - '$scope', '$rootScope', '$state' + '$http', '$scope', '$rootScope', '$state', 'testapiApiUrl' ]; /** @@ -28,10 +28,11 @@ * This controller is for the '/results' page where a user can browse * a listing of community uploaded results. */ - function HomeController($scope, $rootScope, $state) { + function HomeController($http, $scope, $rootScope, $state, testapiApiUrl) { var ctrl = this; + getApplication(); - ctrl.height = $(document).height() - 115; + ctrl.height = $(document).height() + 500; ctrl.gotoApplication = function(){ if($rootScope.auth.isAuthenticated){ @@ -40,5 +41,18 @@ $rootScope.auth.doSignIn('cas'); } } + + function getApplication(){ + $http.get(testapiApiUrl + "/cvp/applications").then(function(response){ + ctrl.applications = response.data.applications; + }, function(error){ + }); + } + + ctrl.getCompany = function(row){ + //console.log(row) + $state.go('directory', {'companyID': row.organization_name, 'logo': row.company_logo}); + } + } })(); diff --git a/cvp/3rd_party/static/testapi-ui/index.html b/cvp/3rd_party/static/testapi-ui/index.html index 497e4a0b..29d4316a 100644 --- a/cvp/3rd_party/static/testapi-ui/index.html +++ b/cvp/3rd_party/static/testapi-ui/index.html @@ -53,6 +53,7 @@ + -- cgit 1.2.3-korg