From 355889dc92fb627f6eebdc1410ae2671395f6311 Mon Sep 17 00:00:00 2001 From: argirok Date: Wed, 17 Jul 2024 13:23:46 +0300 Subject: [PATCH 01/13] [develop | DONE | ADDED] Add pricing page and section in home page --- src/app/app-routing.module.ts | 1 + src/app/app.component.ts | 6 +- .../communities/communities.component.html | 83 ++ src/app/pricing/pricing.component.ts | 848 ++++++++++++++++++ src/app/pricing/pricing.module.ts | 26 + 5 files changed, 962 insertions(+), 2 deletions(-) create mode 100644 src/app/pricing/pricing.component.ts create mode 100644 src/app/pricing/pricing.module.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 20c94d9..0c8d8c2 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -26,6 +26,7 @@ const routes: Routes = [ {path: 'about', redirectTo: 'about/learn-how', pathMatch: 'full'}, {path: 'about/learn-how', loadChildren: () => import('./learn-how/learn-how.module').then(m => m.LearnHowModule), data: {hasStickyHeaderOnMobile: true}}, {path: 'about/faq', loadChildren: () => import('./learn-how/faqs/faqs.module').then(m => m.FaqsModule), data: {hasStickyHeaderOnMobile: true}}, + {path: 'pricing', loadChildren: () => import('./pricing/pricing.module').then(m => m.PricingModule)}, {path: 'get-started', loadChildren: () => import('./get-started/get-started.module').then(m => m.GetStartedModule)}, { path: 'contact-us', diff --git a/src/app/app.component.ts b/src/app/app.component.ts index d1143c4..e4ebb21 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -509,8 +509,10 @@ export class AppComponent implements OnInit, OnDestroy { ] ) ); - this.menuItems.push( - new MenuItem("communities", "Communities", restrictedData ? url + "/search/find/communities" : "", restrictedData ? "" : "/search/find/communities", false, [], ['/search/find/communities'], {}), + this.menuItems.push(new MenuItem("pricing", "Pricing", restrictedData ? url + "/pricing" : "", + restrictedData ? "" : "/pricing", false, [], ["/pricing"], {})); + this.menuItems.push(new MenuItem("communities", "Communities", restrictedData ? url + "/search/find/communities" : "", + restrictedData ? "" : "/search/find/communities", false, [], ['/search/find/communities'], {}), ); this.bottomMenuItems = [ new MenuItem("", "About", "https://openaire.eu/project-factsheets", "", false, [], [], {}), diff --git a/src/app/communities/communities.component.html b/src/app/communities/communities.component.html index 95a0a94..f526073 100644 --- a/src/app/communities/communities.component.html +++ b/src/app/communities/communities.component.html @@ -272,6 +272,89 @@ +
+
+

+ Pricing plans +

+
+
+
+
+ +
+
+
CONNECT Standard
+
+ Suggested for thematic research communities. + +
+
+ +
+
+
+
+
+ +
+
+
CONNECT Advanced
+
+ Suggested for research infrastructures. + +
+
+ +
+
+
+
+
+ +
+
+
CONNECT Premium
+
+ Suggested for university alliances and networks of research organisations. + +
+
+ +
+
+
+
+
+
+ +
diff --git a/src/app/pricing/pricing.component.ts b/src/app/pricing/pricing.component.ts new file mode 100644 index 0000000..47157d8 --- /dev/null +++ b/src/app/pricing/pricing.component.ts @@ -0,0 +1,848 @@ +import {Component, OnDestroy, OnInit} from "@angular/core"; +import {CommunityService} from "../openaireLibrary/connect/community/community.service"; +import {Subscription} from "rxjs"; +import {Meta, Title} from "@angular/platform-browser"; +import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service"; +import {properties} from "../../environments/environment"; +import {Router} from "@angular/router"; +import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties"; +import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component"; + +@Component({ + selector: 'pricing', + template: ` +
+
+ +
+
+
+
+

Pricing

+ +
+
+ OpenAIRE CONNECT is a platform-as-a-service that enables research communities, research performing + organizations and research infrastructures to create customized web portals for discovering and sharing + their research outcomes and Open Science practices. In short, a virtual gateway for your community, however + you define it. +
+
+ It supports both public and private settings, integrates Open Science for enhanced collaboration, and offers + rapid setup and branding customization. This service significantly improves the visibility and dissemination + of research within and beyond the community, connecting it to the wider scientific landscape. +
+
+ Who is it for: Research communities that want to gather their research outcomes currently scattered + across multiple repositories and archives into a single entry-point. Examples: +
    +
  • Research projects that want a single entry-point with research outcomes related to a specific research + topic. +
  • +
  • Research infrastructures that want to track the research outcomes produced thanks to the resources + they offer. +
  • +
  • University alliances that want a single entry-point to all research outcomes of the universities of + the alliance. +
  • +
+
+ + +
+
+
+

Pricing plans

+
Based on your needs, we identified 3 Pricing Plans: CONNECT Standard, CONNECT Advanced, CONNECT Premium. Following is a + description + of the features. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

CONNECT Standard

+
+

CONNECT Advanced

+
+

CONNECT Premium

+
+

Suggested for

+
+

Thematic Communities

+
+

Research Infrastructures or Communities

+
+

Research Organizations and Networks

+
+

Annual fee

+
+

4000€

+
+

5500€

+
+

5500€ + 800€ per member

+
+

Gateway on the cloud

+
+

+
+

+ +
+

+
+

Gateway Customisation for Menu and Page Editing, and your Brand

+
+

+
+

+ +
+

+
+

Customised pages

+
+

+
+

+
+

+
+

Unlimited Number of Managers/Administrators

+
+

+
+

+ +
+

+
+

Login via OpenAIRE AAI

+
+

+
+

+ +
+

+
+

Standard search & browse

+
+

+
+

+ +
+

+
+

Search & browse by sub-communities

+
+

+
+

+
+

+
+

Search & browse by organisation members

+
+

+ +
+

+ +
+

coming soon

+
+

Fields of Science classification

+
+

+
+

+ +
+

+
+

Sustainable Development Goals classification

+
+

+
+

+ +
+

+
+

Research Linking Functionality

+
+

+
+

+ +
+

+
+

Link with your Zenodo Community

+ +
+

+
+

+ +
+

+
+

Curated Affiliations by OpenAIRE via OpenOrgs

+
+

+
+

+ +
+

+
+

Text mining

+ +
+

+
+

+ +
+

+
+

Customised text mining

+
+

+
+

+
+

+
+

Default Charts

+
+

+
+

+ +
+

+
+

Customized charts per organisation

+
+

+
+

+
+

coming soon

+
+

Data Update (via OpenAIRE Graph)

+
+

+
+

+ +
+

+
+

Integration of Community Services* +
+ *subject to feasibility study +

+
+

+
+

+
+

+
+

Metadata Access via APIs

+
+

+
+

+ +
+

+
+

Metadata Snapshots Every 6 Months if Public

+
+

+
+

+ +
+

+
+

Frequent metadata snapshot upon request

+
+

+
+

+
+

+
+

Support time to reply

+
+

72h

+
+

48h

+
+

48h

+
+

Training

+
+

1h

+
+

4h

+
+

10h

+
+

Backup, archive after the subscription ends

+
+

Up to 1 month

+ +
+

Up to 2 months

+ +
+

Up to 2 months

+ +
+

Trial Period

+
+

2 months

+
+

3 months

+
+

3 months

+
+
+
+

Special Packages

+
+
    +
  • CONNECT+MONITOR BUNDLE: It’s possible to combine OpenAIRE CONNECT Advanced and OpenAIRE + Monitor + premium at the Special Price of 10 000€ +
  • +
+
+
+
+
+

+
Let us help you select your plan
+ +

+ Contact + us +
+
+
+

Description of the features

+
The OpenAIRE CONNECT Dashboard (Gateway) provides a comprehensive set of features designed to support and + enhance research communities in bringing forward their results and Open Science activities/practices. When + not + specified, the feature is available for all pricing plans. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Features

+
+

Description

+
+

Gateway on the Cloud

+
+

Full IT support of the service: hosting, installation, maintenance, upgrade, backups. Ensures + reliable + and secure cloud deployment on the OpenAIRE infrastructure, providing scalable and accessible cloud + services.

+
+

Gateway Customization for Menu and Page Editing, and your Brand

+
+

Create your own menu, edit pages, and adapt to your visual identity with logo, banner, background, + buttons, colors. Edit the home page to include your personalised content.

+
+

Customized pages

+
+

Request new pages for you to customise

+
+

Unlimited Number of Managers/Administrators

+
+

Supports an unlimited number of administrators or managers, enhancing collaborative management and + oversight capabilities

+
+

Login via OpenAIRE AAI

+
+

Sign in via an institutional account (eduGAIN), GitHub, Google, LinkedIn, ORCID, or with an OpenAIRE + account.

+
+

Standard Search & Browse

+
+

Search and browse for research products, projects, and data sources.

+

Users can use all the filters of OpenAIRE Explore, + including + filters for type of products (publications, data, software and more), FoS (Field of Science) and SDGs + (UN Sustainable Development Goals). You can enable or disable the search functionality on specific + entity types according to your needs.

+
+

Search & browse by sub-communities

+
+

You define how your community is organised (e.g. by theme, by geographical nodes). OpenAIRE CONNECT + can + associate research products to the sub-communities and offer dedicated options to search and + browse.

+

Available for CONNECT Advanced.

+
+

Search & browse by organisation members

+
+

Search and browse for organisations that are members of your research communities. Filter research + products by organisation.

+

Coming soon for CONNECT Premium.

+
+

Fields of Science classification

+
+

Publications are classified by SciNoBo: a novel system classifying scholarly communication in a + dynamically constructed hierarchical Field-of-Science taxonomy - + https://doi.org/10.3389/frma.2023.1149834

+
+

Sustainable Development Goals classification

+
+

Publications are classified by SciNoBo. For more information, please visit + https://www.openaire.eu/openaire-explore-introducing-sdgs-and-fos

+
+

Research Linking Functionality

+
+

Allows your users to link articles, dataset, or software within a same project (see this guide) and claim their authorship with + ORCID + (guide) +

+
+

Link with your Zenodo Community

+
+

Seamlessly integrates with Zenodo communities, allowing users to manage and share their research + outputs within a dedicated community space.

+
+

Curated Affiliations by OpenAIRE Team via OpenOrgs

+
+

Utilizes affiliations curated by the OpenAIRE team, ensuring data accuracy and organizational + integrity + through verified affiliations.

+
+

Text mining

+
+

Employs advanced data mining algorithms to extract and analyze data, enhancing the platform's ability + to provide deep insights and comprehensive research intelligence. Learn more about the text mining + algorithms on the web site of + the + OpenAIRE Graph.

+
+

Customised text mining

+
+

OpenAIRE develops a text mining algorithm for the identification of research products of your + community. You help us with the tests and fine tuning to reach the optimal precision and recall.

+

Available for CONNECT Advanced and Premium.

+
+

Default Charts

+
+

A set of charts to check the uptake of Open Science practices within your community: percentage of + Open + Access publications and datasets, geographic distribution of publications, datasets with persistent + Identifiers over time, download counts of publications by year, and publications by access rights over + time.

+
+

Customised charts per organization

+
+

The set of default charts customised for the organisations that are members of your research + community.

+

Coming soon for CONNECT Premium.

+
+

Data Update (via OpenAIRE Graph)

+
+

Regularly, every time the OpenAIRE Graph is updated (about once a month)

+
+

Integration of community services

+
+

Integration of services developed and operated by your research community into your gateway. The + integration is subject to a feasibility study.

+

Available for CONNECT Advanced and Premium

+
+

Metadata Access via APIs

+
+

Provides API access to metadata, allowing for integration with other systems and enabling developers + to + build custom applications or enhance existing systems.

+
+

Metadata Snapshots Every 6 Months if Public

+
+

Takes snapshots of metadata every six months for publicly available data, facilitating data + preservation and historical analysis

+
+

Support time to reply

+
+

We support you during the business hours of the week, generally defined as 9:00 - 17:00 CET excluding + holidays and weekends. The OpenAIRE team is an international team working in Europe in different time + zones

+
+

Training

+
+

Online training sessions to help you set up your gateway. Based on your needs we can organise + trainings + on other OpenAIRE services related to CONNECT like PROVIDE (to support your repositories at becoming + compliant with the OpenAIRE guidelines)

+
+

Backup, archive after the subscription ends

+
+

OpenAIRE will keep a backup of your gateway configuration after the end of your subscriptions. Just + in + case you change your mind and do not want to start from scratch.

+
+

Trial Period

+
+

Try OpenAIRE CONNECT for free

+
+
+
+ `, + styles:[` + #pricing-table td:nth-child(3) { + border-right: 2px solid #211F7E; + border-left: 2px solid #211F7E; + } + #pricing-table tr:last-child td:nth-child(3) { + border-bottom: 2px solid #211F7E; + } + #pricing-table tr:first-child td:nth-child(3) { + border-top: 2px solid #211F7E; + background-color: #211F7E; + color: white; + } + + + `] +}) +export class PricingComponent implements OnInit, OnDestroy { + + public properties: EnvProperties = properties; + + private subscriptions: any[] = []; + public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Pricing'}]; + constructor(private communityService: CommunityService, + private seoService: SEOService, + private _meta: Meta, + private _router: Router, + private _title: Title) { + } + + ngOnInit() { + /* Metadata */ + const url = properties.domain + properties.baseLink + this._router.url; + this.seoService.createLinkForCanonicalURL(url, false); + this._meta.updateTag({content: url}, "property='og:url'"); + const description = "Pricing " + const title = "Pricing " + this._meta.updateTag({content: description}, "name='description'"); + this._meta.updateTag({content: description}, "property='og:description'"); + this._meta.updateTag({content: title}, "property='og:title'"); + this._title.setTitle(title); + + } + + ngOnDestroy() { + this.subscriptions.forEach(subscription => { + if (subscription instanceof Subscription) { + subscription.unsubscribe(); + } + }); + } +} diff --git a/src/app/pricing/pricing.module.ts b/src/app/pricing/pricing.module.ts new file mode 100644 index 0000000..41b6b76 --- /dev/null +++ b/src/app/pricing/pricing.module.ts @@ -0,0 +1,26 @@ +import {NgModule} from "@angular/core"; +import {CommonModule} from "@angular/common"; +import {PricingComponent} from "./pricing.component"; +import {RouterModule} from "@angular/router"; +import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard"; +import {PageContentModule} from "../openaireLibrary/dashboard/sharedComponents/page-content/page-content.module"; +import {IconsModule} from "../openaireLibrary/utils/icons/icons.module"; +import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module"; +import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard"; + +@NgModule({ + + imports: [CommonModule, RouterModule, RouterModule.forChild([ + { + path: '', + component: PricingComponent, + canDeactivate: [PreviousRouteRecorder], + canActivate: [IsRouteEnabled] + }, + ]), PageContentModule, IconsModule, BreadcrumbsModule], + declarations: [PricingComponent], + exports: [PricingComponent] +}) +export class PricingModule { + +} From edf7491c26e3194676f5543dabc57ce48745bb10 Mon Sep 17 00:00:00 2001 From: argirok Date: Wed, 17 Jul 2024 13:25:44 +0300 Subject: [PATCH 02/13] [develop | DONE | ADDED] Add Organization refine field in results for Connect --- angular.json | 36 +++++++++++- src/app/app.component.ts | 4 +- src/app/shared/searchFields.community.ts | 71 ++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 src/app/shared/searchFields.community.ts diff --git a/angular.json b/angular.json index b1b21c5..e5c0b72 100644 --- a/angular.json +++ b/angular.json @@ -34,6 +34,12 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { + "fileReplacements": [ + { + "replace": "src/app/openaireLibrary/utils/properties/searchFields.ts", + "with": "src/app/shared/searchFields.community.ts" + } + ], "outputPath": "dist/connect/browser", "index": "src/index.html", "main": "src/main.ts", @@ -74,6 +80,12 @@ "extractLicenses": true, "vendorChunk": false, "buildOptimizer": true, + "fileReplacements": [ + { + "replace": "src/app/openaireLibrary/utils/properties/searchFields.ts", + "with": "src/app/shared/searchFields.community.ts" + } + ], "styles": [ "src/assets/common-assets/library-css/material.scss" ], @@ -98,6 +110,10 @@ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.beta.ts" + }, + { + "replace": "src/app/openaireLibrary/utils/properties/searchFields.ts", + "with": "src/app/shared/searchFields.community.ts" } ], "optimization": { @@ -138,6 +154,10 @@ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" + }, + { + "replace": "src/app/openaireLibrary/utils/properties/searchFields.ts", + "with": "src/app/shared/searchFields.community.ts" } ], "optimization": { @@ -221,7 +241,13 @@ "sourceMap": false, "optimization": true, "vendorChunk": true, - "buildOptimizer": true + "buildOptimizer": true, + "fileReplacements": [ + { + "replace": "src/app/openaireLibrary/utils/properties/searchFields.ts", + "with": "src/app/shared/searchFields.community.ts" + } + ] }, "beta": { "outputHashing": "media", @@ -229,6 +255,10 @@ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.beta.ts" + }, + { + "replace": "src/app/openaireLibrary/utils/properties/searchFields.ts", + "with": "src/app/shared/searchFields.community.ts" } ], "sourceMap": false, @@ -241,6 +271,10 @@ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" + }, + { + "replace": "src/app/openaireLibrary/utils/properties/searchFields.ts", + "with": "src/app/shared/searchFields.community.ts" } ], "sourceMap": false, diff --git a/src/app/app.component.ts b/src/app/app.component.ts index e4ebb21..ae72668 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -309,11 +309,13 @@ export class AppComponent implements OnInit, OnDestroy { initAdminToolCommunity(communityId) { if (communityId) { this.properties.adminToolsPortalType = "community"; + this.properties.plan = communityId == 'covid-19'?'Premium':this.community.plan; if (this.document) { this.initLayout(communityId); } } else { this.properties.adminToolsPortalType = "connect"; + this.properties.plan = null; if (this.document) { this.initLayout(this.communityId?this.communityId:'connect'); } @@ -409,7 +411,7 @@ export class AppComponent implements OnInit, OnDestroy { new MenuItem("search", "Search", "", "/search/find", false, [], ["/search/find"], {}, null, null, null, null, "_blank", "internal", false, [ - new MenuItem("", OpenaireEntities.RESULTS, "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {resultbestaccessright: '"' + encodeURIComponent("Open Access") + '"'}), + new MenuItem("", OpenaireEntities.RESULTS, "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {}), new MenuItem("", OpenaireEntities.PROJECTS, "", "/search/find/projects/", false, ["project"], ["/search/find/projects"], {}), new MenuItem("", OpenaireEntities.DATASOURCES, "", "/search/find/dataproviders", false, ["datasource"], ["/search/find/dataproviders"], {}), ] diff --git a/src/app/shared/searchFields.community.ts b/src/app/shared/searchFields.community.ts new file mode 100644 index 0000000..131a24f --- /dev/null +++ b/src/app/shared/searchFields.community.ts @@ -0,0 +1,71 @@ +import {SearchFieldsBase} from "src/app/openaireLibrary/utils/properties/searchFields.base"; +import {properties} from "src/environments/environment"; + + +export class SearchFields extends SearchFieldsBase { + constructor() { + super(); + if(properties.plan == "Premium" && properties.environment != 'production'){ + this.RESULT_REFINE_FIELDS.push("relorganization"); + this.RESULT_FIELDS_ORDERED[3].values.push("relorganization") + } + } + public static getParameterOrder(fieldId: string, params): number { + let fields = []; + let searchFields = new SearchFields(); + if (searchFields.RESULT_REFINE_FIELDS.indexOf(fieldId) != -1) { + fields = searchFields.RESULT_REFINE_FIELDS; + } else if (searchFields.PROJECT_REFINE_FIELDS.indexOf(fieldId) != -1) { + fields = searchFields.PROJECT_REFINE_FIELDS + } else if (searchFields.ORGANIZATION_REFINE_FIELDS.indexOf(fieldId) != -1) { + fields = searchFields.ORGANIZATION_REFINE_FIELDS; + } else if (searchFields.DATASOURCE_REFINE_FIELDS.indexOf(fieldId) != -1) { + fields = searchFields.DATASOURCE_REFINE_FIELDS; + } + let index = fields.indexOf(fieldId); + let paramIndex = 0; + if (index != -1) { + for (let keyValue of params) { + if (fields.indexOf(keyValue[0]) > index) { + break; + } + paramIndex++ + } + } + return paramIndex; + } +} + +export enum OpenaireEntities { + RESULTS = "Research products", + PUBLICATIONS = "Publications", + DATASETS = "Research data", + SOFTWARE = "Research software", + OTHER = "Other research products", + PROJECTS = "Projects", + ORGANIZATIONS = "Organizations", + DATASOURCES = "Data sources", + SERVICES = "Services", + COMMUNITIES = "Research communities", + + RESULT = "Research product", + PUBLICATION = "Publication", + DATASET = "Research data", + SOFTWARE_SINGULAR = "Research software", + OTHER_SINGULAR = "Other research product", + PROJECT = "Project", + ORGANIZATION = "Organization", + DATASOURCE = "Data source", + SERVICE = "Service", + COMMUNITY = "Research community", + + RESULTS_FILE = "research-products", + PUBLICATIONS_FILE = "publications", + DATASETS_FILE = "research-data", + SOFTWARE_FILE = "research-software", + OTHER_FILE = "other-research-products", + PROJECTS_FILE = "projects", + ORGANIZATIONS_FILE = "organizations", + DATASOURCES_FILE = "data-sources", + SERVICES_FILE = "services", +} From 847a50dbf2f872917a22cd7a6215c903a1093950 Mon Sep 17 00:00:00 2001 From: argirok Date: Thu, 18 Jul 2024 09:56:17 +0300 Subject: [PATCH 03/13] [develop | DONE | FIXED] Develop: fix broken link to Selective Access APIs documentation, update text --- src/app/develop/develop.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/develop/develop.component.ts b/src/app/develop/develop.component.ts index 7250355..f4400e7 100644 --- a/src/app/develop/develop.component.ts +++ b/src/app/develop/develop.component.ts @@ -25,10 +25,10 @@ import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties"

For {{openaireEntities.RESULTS | lowercase}}

- For {{openaireEntities.RESULTS | lowercase}} ({{openaireEntities.PUBLICATIONS | lowercase}}, {{openaireEntities.DATASETS | lowercase}}, {{openaireEntities.SOFTWARE | lowercase}} and {{openaireEntities.OTHER | lowercase}}) you can use the Selective Access APIs by adding the community parameter. + For {{openaireEntities.RESULTS | lowercase}} ({{openaireEntities.PUBLICATIONS | lowercase}}, {{openaireEntities.DATASETS | lowercase}}, {{openaireEntities.SOFTWARE | lowercase}} and {{openaireEntities.OTHER | lowercase}}) you can use the Search API by adding the community parameter.
+ href="https://graph.openaire.eu/docs/apis/search-api/research-products" target="_blank"> Selective Access APIs From b11bd3b86fdb295fea1132f52e5675a9bd9f290d Mon Sep 17 00:00:00 2001 From: argirok Date: Fri, 19 Jul 2024 14:02:33 +0300 Subject: [PATCH 04/13] [develop | DONE | CHANGED] FAQs: update texts add categories --- src/app/learn-how/faqs/faqs.component.ts | 577 ++++++++++++++++------- src/app/learn-how/faqs/faqs.module.ts | 3 +- 2 files changed, 416 insertions(+), 164 deletions(-) diff --git a/src/app/learn-how/faqs/faqs.component.ts b/src/app/learn-how/faqs/faqs.component.ts index 039182e..71565e9 100644 --- a/src/app/learn-how/faqs/faqs.component.ts +++ b/src/app/learn-how/faqs/faqs.component.ts @@ -21,180 +21,424 @@ import {properties} from "../../../environments/environment";
+ +
  • - What is a "Research community"? + What is a Community Gateway?
  • -
  • - What is the difference between a Community Gateway and the - Research Community Dashboard (RCD)? - -
  • -
  • - How can Research Community thematic services integrate with - the Research Community Dashboard (RCD)? - -
  • -
  • What does my Research Community gain in terms of Open - Science? -
  • + What is OpenAIRE CONNECT? + -
    Sharing: - scientific literature is only the tip of the iceberg. With a Community Gateway, you say to the members - of your community that everything they produce is relevant and that they should get credit for it. +
  • +
  • + What is a “research community”? + -
    Credit for all: Making research data, software, methods and scientific - workflows available “as soon as possible” is one of the “mantra” of Open - Science. If your community has integrated Zenodo into a digital experiment platform, researchers no - longer bear the burden of manually publishing their research products, while it is also easier for - them to publish different versions, which reflect different stages of their activities. +
  • +
  • + What is a Community Gateway? + -
    Awareness: - Thanks to dedicated pages of the Community Gateway you can suggest best practices to the researchers - of the community. Open Science experts of OpenAIRE will be available to assist you. +
  • +
  • + What is a community manager or curator? + -
- -
  • - How is the service part of the European Open Science Cloud? - -
  • -
  • - Who owns the gateway? - -
  • -
  • - How is the gateway operated? - -
  • -
  • - What is the SLA of the service? - -
  • -
  • - What are the costs? -
  • +
  • + How does a Community Gateway help my research community at implementing Open Science practices? + -
    Please contact us to learn more about the service and the possible - options. +
  • +
  • + How to get a Community Gateway for my research community? + -
  • - -
  • - In what other areas can my Research community collaborate with - OpenAIRE? -
  • +
  • + How often is the searchable content of the gateway updated? + -
    -
    Train the trainer
    - Join the OpenAIRE - Community of Practice, an informal network to share training experience on Open Science, research - and e-infrastructures. +
  • +
  • + What are the costs? + -
    -
    Citizen Science
    - Do you collaborate with schools? Learn more about the - - OpenAIRE activities for Citizen Science - . +
  • + +
  • + Can I ask end-users to pay to access my Community Gateway? + -
    -
    Open Innovation Programme
    - Spread the word about the OpenAIRE - Open - Innovation programme - for SMEs, start-ups and research labs. The programme’s goal is to discover, support and fund - innovative - ideas and implementations of software in the Open Science domain. +
  • +
  • + How can I become a member of OpenAIRE? + - -
  • + +
  • + How does the gateway operate? + +
  • +
  • + Where can I find news about OpenAIRE CONNECT? + +
  • + + + + +
    +
      +
    • + Which customisation options does OpenAIRE CONNECT offer to community managers? + +
    • +
    • + Can I configure my gateway according to the visual identity of my research community? + +
    • +
    • + Can I integrate a community service in my gateway? + +
    • +
    • + Can I embed my gateway in my web site? + +
    • +
    • + Can I invite colleagues to manage the gateway with me? + +
    • +
    • + Can I keep the gateway restricted? + +
    • +
    +
    +
    + +
    +
      +
    • + I received an invitation to become manager but the link does not work. What can I do? + +
    • +
    • + How to avoid spam users who create wrong links in my Community Gateway? + +
    • + + +
    +
    +
    + +
    + +
    +
    - ` }) export class FaqsComponent { @@ -206,7 +450,14 @@ export class FaqsComponent { public divContents = null; public url: string = null; properties: EnvProperties; - + categories = [ + {name:"About Connect", id: "about", icon: "info"}, + {name:"Gateway configuration", id: "configuration", icon: "settings"}, + {name:"Troubleshooting", id: "troubleshooting", icon: "build"}, + {name:"Gateway functionality", id: "functionality", icon: "storage"} + ] + selectedCategory = this.categories[0].id; + constructor( private route: ActivatedRoute, private _router: Router, @@ -216,7 +467,7 @@ export class FaqsComponent { private _piwikService: PiwikService, private helper: HelperService) { } - + public ngOnInit() { this.properties = properties; @@ -226,18 +477,18 @@ export class FaqsComponent { this.updateUrl(this.url); this.updateTitle(this.pageTitle); this.updateDescription(this.pageDescription); - + //this.getDivContents(); this.getPageContents(); } - + private getPageContents() { this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'connect', this._router.url).subscribe(contents => { this.pageContents = contents; })); } - + private getDivContents() { this.subscriptions.push(this.helper.getDivHelpContents(this.properties, 'connect', this._router.url).subscribe(contents => { this.divContents = contents; @@ -251,18 +502,18 @@ export class FaqsComponent { } }); } - + private updateDescription(description: string) { this._meta.updateTag({content: description}, "name='description'"); this._meta.updateTag({content: description}, "property='og:description'"); } - + private updateTitle(title: string) { var _title = ((title.length > 50) ? title.substring(0, 50) : title); this._title.setTitle(_title); this._meta.updateTag({content: _title}, "property='og:title'"); } - + private updateUrl(url: string) { this._meta.updateTag({content: url}, "property='og:url'"); } diff --git a/src/app/learn-how/faqs/faqs.module.ts b/src/app/learn-how/faqs/faqs.module.ts index 182b5ba..8b767ec 100644 --- a/src/app/learn-how/faqs/faqs.module.ts +++ b/src/app/learn-how/faqs/faqs.module.ts @@ -13,11 +13,12 @@ import {Schema2jsonldModule} from "../../openaireLibrary/sharedComponents/schema import {SEOServiceModule} from "../../openaireLibrary/sharedComponents/SEO/SEOService.module"; import {BreadcrumbsModule} from "../../openaireLibrary/utils/breadcrumbs/breadcrumbs.module"; import {HtmlPagesModule} from "../../htmlPages/htmlPages.module"; +import {IconsModule} from "../../openaireLibrary/utils/icons/icons.module"; @NgModule({ imports: [ CommonModule, RouterModule, FaqsRoutingModule, HelperModule, - Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, HtmlPagesModule + Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, HtmlPagesModule, IconsModule ], declarations: [ FaqsComponent From 3968f744d5857591a3e7caf27db408824979316e Mon Sep 17 00:00:00 2001 From: argirok Date: Fri, 19 Jul 2024 14:03:05 +0300 Subject: [PATCH 05/13] [develop | DONE | CHANGED] Develop: update wording again to Graph API --- src/app/develop/develop.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/develop/develop.component.ts b/src/app/develop/develop.component.ts index f4400e7..b59b620 100644 --- a/src/app/develop/develop.component.ts +++ b/src/app/develop/develop.component.ts @@ -25,7 +25,7 @@ import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties"

    For {{openaireEntities.RESULTS | lowercase}}

    - For {{openaireEntities.RESULTS | lowercase}} ({{openaireEntities.PUBLICATIONS | lowercase}}, {{openaireEntities.DATASETS | lowercase}}, {{openaireEntities.SOFTWARE | lowercase}} and {{openaireEntities.OTHER | lowercase}}) you can use the Search API by adding the community parameter. + For {{openaireEntities.RESULTS | lowercase}} ({{openaireEntities.PUBLICATIONS | lowercase}}, {{openaireEntities.DATASETS | lowercase}}, {{openaireEntities.SOFTWARE | lowercase}} and {{openaireEntities.OTHER | lowercase}}) you can use the Graph API by adding the community parameter.
    From 65f85ef1bc00555288f17fb5c214d244cc6a193f Mon Sep 17 00:00:00 2001 From: "k.triantafyllou" Date: Mon, 22 Jul 2024 11:52:18 +0300 Subject: [PATCH 06/13] Update axios library --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e47956a..042ee3e 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@nguniversal/express-engine": "^16.1.1", "@node-minify/clean-css": "^6.2.0", "@node-minify/core": "^6.2.0", - "axios": "^0.27.2", + "axios": "^1.4.0", "clipboard": "^1.5.16", "core-js": "^2.5.4", "express": "^4.15.2", From 43dbbd4c474cc36e095fdde3c273673428ef68b4 Mon Sep 17 00:00:00 2001 From: argirok Date: Wed, 31 Jul 2024 11:42:13 +0300 Subject: [PATCH 07/13] [develop | DONE | CHANGED] Develop: update text Change pricing to subscriptions, updates on ssubscriptions content --- src/app/app-routing.module.ts | 2 +- src/app/app.component.ts | 4 +- .../communities/communities.component.html | 305 ++++++------ src/app/develop/develop.component.ts | 2 +- src/app/learn-how/learn-how.component.ts | 172 ++++++- src/app/pricing/pricing.component.ts | 444 ++++++++++-------- 6 files changed, 593 insertions(+), 336 deletions(-) diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 0c8d8c2..7a6ed0c 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -26,7 +26,7 @@ const routes: Routes = [ {path: 'about', redirectTo: 'about/learn-how', pathMatch: 'full'}, {path: 'about/learn-how', loadChildren: () => import('./learn-how/learn-how.module').then(m => m.LearnHowModule), data: {hasStickyHeaderOnMobile: true}}, {path: 'about/faq', loadChildren: () => import('./learn-how/faqs/faqs.module').then(m => m.FaqsModule), data: {hasStickyHeaderOnMobile: true}}, - {path: 'pricing', loadChildren: () => import('./pricing/pricing.module').then(m => m.PricingModule)}, + {path: 'subscriptions', loadChildren: () => import('./pricing/pricing.module').then(m => m.PricingModule)}, {path: 'get-started', loadChildren: () => import('./get-started/get-started.module').then(m => m.GetStartedModule)}, { path: 'contact-us', diff --git a/src/app/app.component.ts b/src/app/app.component.ts index ae72668..be16dbd 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -511,8 +511,8 @@ export class AppComponent implements OnInit, OnDestroy { ] ) ); - this.menuItems.push(new MenuItem("pricing", "Pricing", restrictedData ? url + "/pricing" : "", - restrictedData ? "" : "/pricing", false, [], ["/pricing"], {})); + this.menuItems.push(new MenuItem("subscriptions", "Subscriptions", restrictedData ? url + "/subscriptions" : "", + restrictedData ? "" : "/subscriptions", false, [], ["/subscriptions"], {})); this.menuItems.push(new MenuItem("communities", "Communities", restrictedData ? url + "/search/find/communities" : "", restrictedData ? "" : "/search/find/communities", false, [], ['/search/find/communities'], {}), ); diff --git a/src/app/communities/communities.component.html b/src/app/communities/communities.component.html index f526073..9361f1a 100644 --- a/src/app/communities/communities.component.html +++ b/src/app/communities/communities.component.html @@ -90,139 +90,139 @@ -
    -
    -

    - Our mission for an Open and FAIR science. -

    -
    -
    -
    -
    -
    -
    - A Virtual Research Environment -
    -
    -
    -
    -

    A Virtual Research - Environment

    -
    An overlay platform making it easy to share, link, disseminate and monitor all - your {{entities.PUBLICATIONS | lowercase}}, - {{entities.DATASETS | lowercase}}, {{entities.SOFTWARE | lowercase}}, methods. - In one place. -
    -
    -
    -
    -
      -
    • - - Access to OpenAIRE research graph -
    • -
    • - - Moderated, front-end linking -
    • -
    • - - Cross-platform search -
    • -
    -
    -
    -
    -
    -
    -
    -
    -
    - Open science in action -
    -
    -
    -
    -

    Open Science in action

    -
    A time-saving bundle of services for researchers to effortlessly practice open - science. An integral - part of the European Open Science Cloud. -
    -
    -
    -
    -
      -
    • - - Use of OpenAIRE Guidelines -
    • -
    • - - Publish and get DOIs with Zenodo -
    • -
    • - - EOSC Single Sign-On -
    • -
    -
    -
    -
    -
    -
    -
    -
    -
    - Customized to your needs -
    -
    -
    -
    -

    Customized to your needs

    -
    A Gateway with your own brand, rules for aggregation, text & data mining, - and presentation. Run - by you via a simple, yet powerful backend administration tool. -
    -
    -
    -
    -
      -
    • - - Access control -
    • - -
    • - - Look & feel to match your brand -
    • -
    -
    -
    -
    -
    -
    -
    -
    -
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    @@ -275,13 +275,13 @@

    - Pricing plans + Subscription plans

    -
    -
    +
    -
    CONNECT Standard
    +
    Standard
    Suggested for thematic research communities. @@ -302,7 +302,7 @@
    -
    +
    -
    CONNECT Advanced
    +
    Advanced
    Suggested for research infrastructures. @@ -323,7 +323,7 @@
    -
    +
    -
    CONNECT Premium
    +
    Premium
    Suggested for university alliances and networks of research organisations. @@ -343,12 +343,33 @@
    +
    +
    + +
    +
    +
    CONNECT +
    MONITOR BUNDLE
    +
    + Bundle CONNECT and MONITOR plans at a special price. + +
    +
    + +
    +
    +
    diff --git a/src/app/learn-how/learn-how.component.ts b/src/app/learn-how/learn-how.component.ts index 124cf60..1fc9180 100644 --- a/src/app/learn-how/learn-how.component.ts +++ b/src/app/learn-how/learn-how.component.ts @@ -9,6 +9,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo import {Subscriber} from "rxjs"; import {properties} from "../../environments/environment"; import {QuickContactService} from '../openaireLibrary/sharedComponents/quick-contact/quick-contact.service'; +import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields"; @Component({ selector: 'learn-how', @@ -19,7 +20,41 @@ import {QuickContactService} from '../openaireLibrary/sharedComponents/quick-con
    -
    +
    +
    +

    + OpenAIRE CONNECT is a platform-as-a-service that enables research communities, research performing organizations + and research infrastructures to create customized web portals for discovering and sharing their research + outcomes and Open Science practices. It supports both public and private settings, integrates Open Science for + enhanced collaboration, and offers rapid setup and branding customization. In short, a virtual gateway for your + community, however you define it. +

    +

    + OpenAIRE CONNECT significantly improves the visibility and dissemination of research within and beyond the + community, connecting it to the wider scientific landscape. +

    +

    + This service was created for use by research communities that want to gather their research outcomes, currently + scattered across multiple repositories and archives, into a single entry-point, such as: +

    +
      + + +
    • Research projects, that want research outcomes related to a specific research topic to be collected at a + single entry-point +
    • + +
    • Research infrastructures, that want to track the research outcomes produced thanks to the resources they + offer +
    • +
    • + University alliances, that require a single entry-point to all research outcomes of their alliance members +
    • +
    +
    +
    + +
    @@ -214,6 +249,139 @@ import {QuickContactService} from '../openaireLibrary/sharedComponents/quick-con
    +
    +
    +

    + Our mission for an Open and FAIR science. +

    +
    +
    +
    +
    +
    +
    + A Virtual Research Environment +
    +
    +
    +
    +

    A Virtual Research + Environment

    +
    An overlay platform making it easy to share, link, disseminate and monitor all + your {{entities.PUBLICATIONS | lowercase}}, + {{entities.DATASETS | lowercase}}, {{entities.SOFTWARE | lowercase}}, methods. + In one place. +
    +
    +
    +
    +
      +
    • + + Access to OpenAIRE research graph +
    • +
    • + + Moderated, front-end linking +
    • +
    • + + Cross-platform search +
    • +
    +
    +
    +
    +
    +
    +
    +
    +
    + Open science in action +
    +
    +
    +
    +

    Open Science in action

    +
    A time-saving bundle of services for researchers to effortlessly practice open + science. An integral + part of the European Open Science Cloud. +
    +
    +
    +
    +
      +
    • + + Use of OpenAIRE Guidelines +
    • +
    • + + Publish and get DOIs with Zenodo +
    • +
    • + + EOSC Single Sign-On +
    • +
    +
    +
    +
    +
    +
    +
    +
    +
    + Customized to your needs +
    +
    +
    +
    +

    Customized to your needs

    +
    A Gateway with your own brand, rules for aggregation, text & data mining, + and presentation. Run + by you via a simple, yet powerful backend administration tool. +
    +
    +
    +
    +
      +
    • + + Access control +
    • + +
    • + + Look & feel to match your brand +
    • +
    +
    +
    +
    +
    +
    +
    +
    +

    We look forward to working together and helping you unlock the full potential of your research community through open science.

    Contact us @@ -225,6 +393,8 @@ export class LearnHowComponent implements OnInit { public pageContents = null; public divContents = null; public activeStep = 0; + public entities = OpenaireEntities; + steps: any[] = [ {name: 'All 4 Steps', icon: ''}, {name: '1st Step', icon: ''}, diff --git a/src/app/pricing/pricing.component.ts b/src/app/pricing/pricing.component.ts index 47157d8..54de0f1 100644 --- a/src/app/pricing/pricing.component.ts +++ b/src/app/pricing/pricing.component.ts @@ -13,62 +13,38 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo template: `
    - +
    -

    Pricing

    +

    Subscriptions

    - OpenAIRE CONNECT is a platform-as-a-service that enables research communities, research performing - organizations and research infrastructures to create customized web portals for discovering and sharing - their research outcomes and Open Science practices. In short, a virtual gateway for your community, however - you define it. + As demand for our services grows, along with the features included in each of them, traditional sources of + funding may not be sufficient. By introducing subscription fees, we can ensure their long-term + sustainability; by achieving financial stability we can continue to invest in better resources, technology, + and talent, thereby increasing our capacity to deliver impactful programs and services to all interested + parties. Subscriptions support immediate operational needs, while at the same time enabling us to scale our + efforts and make a greater, more sustainable difference in the communities we serve.
    -
    - It supports both public and private settings, integrates Open Science for enhanced collaboration, and offers - rapid setup and branding customization. This service significantly improves the visibility and dissemination - of research within and beyond the community, connecting it to the wider scientific landscape. -
    -
    - Who is it for: Research communities that want to gather their research outcomes currently scattered - across multiple repositories and archives into a single entry-point. Examples: -
      -
    • Research projects that want a single entry-point with research outcomes related to a specific research - topic. -
    • -
    • Research infrastructures that want to track the research outcomes produced thanks to the resources - they offer. -
    • -
    • University alliances that want a single entry-point to all research outcomes of the universities of - the alliance. -
    • -
    -
    - -
    -

    Pricing plans

    -
    Based on your needs, we identified 3 Pricing Plans: CONNECT Standard, CONNECT Advanced, CONNECT Premium. Following is a - description - of the features. -
    + @@ -82,28 +58,15 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    Research Infrastructures or Communities

    - - - - - - - + + @@ -399,7 +363,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo + + + + + +
    -

    CONNECT Standard

    +

    STANDARD

    -

    CONNECT Advanced

    +

    ADVANCED

    -

    CONNECT Premium

    +

    PREMIUM

    -

    Research Organizations and Networks

    +

    Research Organisations and Networks

    -

    Annual fee

    -
    -

    4000€

    -
    -

    5500€

    -
    -

    5500€ + 800€ per member

    -

    Gateway on the cloud

    @@ -113,7 +76,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -121,14 +84,15 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo
    -

    Gateway Customisation for Menu and Page Editing, and your Brand

    +

    Gateway Customisation for Menu and Page Editing, and your Brand +

    - +

    @@ -157,7 +121,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -172,7 +136,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -187,7 +151,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -213,11 +177,11 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    - +

    coming soon

    @@ -232,7 +196,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -247,7 +211,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -262,7 +226,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -271,14 +235,14 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    Link with your Zenodo Community

    - +

    - +

    @@ -293,7 +257,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -302,14 +266,14 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    Text mining

    - +

    - +

    @@ -338,7 +302,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -346,7 +310,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo
    -

    Customized charts per organisation

    +

    Customised charts per organisation

    @@ -367,7 +331,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -376,7 +340,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    Integration of Community Services* -
    +
    *subject to feasibility study

    - +

    @@ -414,7 +378,7 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    - +

    @@ -468,20 +432,21 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    Up to 1 month

    - +

    Up to 2 months

    - +

    Up to 2 months

    - +
    -

    Trial Period

    +

    Trial Period +

    2 months

    @@ -493,164 +458,236 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo

    3 months

    +

    Annual fee (€)

    +
    +

    4000

    +
    +

    5500

    +
    +

    5500 + 800 per member

    +
    -
    -
    -

    Special Packages

      -
    • CONNECT+MONITOR BUNDLE: It’s possible to combine OpenAIRE CONNECT Advanced and OpenAIRE + + +
    • 0% VAT (24% VAT applies only for Greek TAX ID number holders)
    -
    -
    -

    -
    Let us help you select your plan
    - -

    - Contact - us +
    +

    Special Packages

    + +
    +
    +
    +
    + +
    +
    +
    OpenAIRE CONNECT and MONITOR
    at the special price + of 10 000€
    + +
    + +
    +
    +
    + + +
    +
    + +
    +
    +
    OpenAIRE members
    get a 30% discount
    + +
    + +
    +
    +
    +
    +
    +

    Description of the features

    -
    The OpenAIRE CONNECT Dashboard (Gateway) provides a comprehensive set of features designed to support and - enhance research communities in bringing forward their results and Open Science activities/practices. When - not - specified, the feature is available for all pricing plans. +
    The OpenAIRE CONNECT Gateway provides a comprehensive set of features designed to support and enhance research communities in bringing forward their results and Open Science activities/practices.
    - +
    - - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -659,53 +696,59 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo outputs within a dedicated community space.

    - + - + - + - + - + - + - + - + - + - + - + - + - +
    +

    Features

    +

    Description

    + + +
    +
    + +
    +
    +

    +
    Contact us to discover OpenAIRE CONNECT and the rest of OpenAIRE services.
    + +

    + Contact + us +
    +
    + `, - styles:[` - #pricing-table td:nth-child(3) { - border-right: 2px solid #211F7E; - border-left: 2px solid #211F7E; - } + styles: [` + /* #pricing-table td:nth-child(3) { + !*border-right: 2px solid #211F7E;*! + !*border-left: 2px solid #211F7E;*! + background-image: linear-gradient(110deg,#feca1d 0,#fe9f1d 100%); + color:black; + }*/ #pricing-table tr:last-child td:nth-child(3) { - border-bottom: 2px solid #211F7E; - } - #pricing-table tr:first-child td:nth-child(3) { - border-top: 2px solid #211F7E; - background-color: #211F7E; - color: white; + /*border-bottom: 2px solid #211F7E;*/ } - + #pricing-table tr:first-child td:nth-child(3) { + /*border-top: 2px solid #211F7E;*/ + /*background-color: #211F7E;*/ + /*color: white;*/ + } + + `] }) export class PricingComponent implements OnInit, OnDestroy { @@ -816,7 +881,8 @@ export class PricingComponent implements OnInit, OnDestroy { public properties: EnvProperties = properties; private subscriptions: any[] = []; - public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Pricing'}]; + public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Subscriptions'}]; + constructor(private communityService: CommunityService, private seoService: SEOService, private _meta: Meta, @@ -825,16 +891,16 @@ export class PricingComponent implements OnInit, OnDestroy { } ngOnInit() { - /* Metadata */ - const url = properties.domain + properties.baseLink + this._router.url; - this.seoService.createLinkForCanonicalURL(url, false); - this._meta.updateTag({content: url}, "property='og:url'"); - const description = "Pricing " - const title = "Pricing " - this._meta.updateTag({content: description}, "name='description'"); - this._meta.updateTag({content: description}, "property='og:description'"); - this._meta.updateTag({content: title}, "property='og:title'"); - this._title.setTitle(title); + /* Metadata */ + const url = properties.domain + properties.baseLink + this._router.url; + this.seoService.createLinkForCanonicalURL(url, false); + this._meta.updateTag({content: url}, "property='og:url'"); + const description = "Subscriptions " + const title = "Subscriptions " + this._meta.updateTag({content: description}, "name='description'"); + this._meta.updateTag({content: description}, "property='og:description'"); + this._meta.updateTag({content: title}, "property='og:title'"); + this._title.setTitle(title); } From d15c3bd565f70f1e11e208afe4a8f91e968dbf4d Mon Sep 17 00:00:00 2001 From: argirok Date: Wed, 14 Aug 2024 15:31:17 +0300 Subject: [PATCH 08/13] [develop | DONE | REMOVED] remove FAQ pages - add link to helpdesk --- src/app/app-routing.module.ts | 1 - src/app/app.component.ts | 2 +- src/app/community/community.component.ts | 28 +- src/app/learn-how/faqs/faqs-routing.module.ts | 16 - src/app/learn-how/faqs/faqs.component.ts | 520 ------------------ src/app/learn-how/faqs/faqs.module.ts | 33 -- 6 files changed, 15 insertions(+), 585 deletions(-) delete mode 100644 src/app/learn-how/faqs/faqs-routing.module.ts delete mode 100644 src/app/learn-how/faqs/faqs.component.ts delete mode 100644 src/app/learn-how/faqs/faqs.module.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 7a6ed0c..61155fd 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -25,7 +25,6 @@ const routes: Routes = [ }, {path: 'about', redirectTo: 'about/learn-how', pathMatch: 'full'}, {path: 'about/learn-how', loadChildren: () => import('./learn-how/learn-how.module').then(m => m.LearnHowModule), data: {hasStickyHeaderOnMobile: true}}, - {path: 'about/faq', loadChildren: () => import('./learn-how/faqs/faqs.module').then(m => m.FaqsModule), data: {hasStickyHeaderOnMobile: true}}, {path: 'subscriptions', loadChildren: () => import('./pricing/pricing.module').then(m => m.PricingModule)}, {path: 'get-started', loadChildren: () => import('./get-started/get-started.module').then(m => m.GetStartedModule)}, { diff --git a/src/app/app.component.ts b/src/app/app.component.ts index be16dbd..ac7a710 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -507,7 +507,7 @@ export class AppComponent implements OnInit, OnDestroy { new MenuItem("", "Learn the process", restrictedData ? url + "/about/learn-how" : "", restrictedData ? "" : "/about/learn-how", false, [], ["/about/learn-in-depth"], {}), new MenuItem("", "Publications", restrictedData ? url + "/publications" : "", restrictedData ? "" : "/publications", false, [], ["/publications"], {}), new MenuItem("", "Roadmap", "https://trello.com/b/yfzUz0kp/openaire-connect-dashboard", "", false, [], [], {}), - new MenuItem("", "FAQs", restrictedData ? url + "/about/faq" : "", restrictedData ? "" : "/about/faq", false, [], ["/about/faq"], {}) + new MenuItem("", "FAQs", "https://helpdesk.openaire.eu/help/en-gb/6", "", false, [], ["/about/faq"], {}) ] ) ); diff --git a/src/app/community/community.component.ts b/src/app/community/community.component.ts index e064a84..2a59aac 100644 --- a/src/app/community/community.component.ts +++ b/src/app/community/community.component.ts @@ -66,23 +66,23 @@ export class CommunityComponent { this.url = properties.domain + properties.baseLink + this._router.url; this.seoService.createLinkForCanonicalURL(this.url, false); this._meta.updateTag({content: this.url}, "property='og:url'"); + this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => { this.user = user; + this.subscriptions.push(this._communityService.getCommunityAsObservable().subscribe( + community => { + this.community = community; + if(community && !ConnectHelper.isPrivate(community, this.user)) { + + this._meta.updateTag({content: community.description}, "name='description'"); + this._meta.updateTag({content: community.description}, "property='og:description'"); + this._meta.updateTag({content: community.displayTitle}, "property='og:title'"); + this._title.setTitle(community.displayTitle); + this.subscriptions.push(this._piwikService.trackView(this.properties, community.displayTitle).subscribe()); + this.getPagePlugins(); + } + })); })); - this.subscriptions.push(this._communityService.getCommunityAsObservable().subscribe( - community => { - this.community = community; - if(community && !ConnectHelper.isPrivate(community, this.user)) { - - this._meta.updateTag({content: community.description}, "name='description'"); - this._meta.updateTag({content: community.description}, "property='og:description'"); - this._meta.updateTag({content: community.displayTitle}, "property='og:title'"); - this._title.setTitle(community.displayTitle); - this.subscriptions.push(this._piwikService.trackView(this.properties, community.displayTitle).subscribe()); - this.getPagePlugins(); - - } - })); } diff --git a/src/app/learn-how/faqs/faqs-routing.module.ts b/src/app/learn-how/faqs/faqs-routing.module.ts deleted file mode 100644 index 04c6f61..0000000 --- a/src/app/learn-how/faqs/faqs-routing.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {NgModule} from '@angular/core'; -import {RouterModule} from '@angular/router'; - -import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; -import {FaqsComponent} from "./faqs.component"; -import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard"; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: '', component: FaqsComponent, canActivate: [ IsRouteEnabled], canDeactivate: [PreviousRouteRecorder] } - - ]) - ] -}) -export class FaqsRoutingModule { } diff --git a/src/app/learn-how/faqs/faqs.component.ts b/src/app/learn-how/faqs/faqs.component.ts deleted file mode 100644 index 71565e9..0000000 --- a/src/app/learn-how/faqs/faqs.component.ts +++ /dev/null @@ -1,520 +0,0 @@ -import {Component} from '@angular/core'; -import {Breadcrumb} from "../../openaireLibrary/utils/breadcrumbs/breadcrumbs.component"; -import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; -import {ActivatedRoute, Router} from "@angular/router"; -import {Meta, Title} from "@angular/platform-browser"; -import {SEOService} from "../../openaireLibrary/sharedComponents/SEO/SEO.service"; -import {PiwikService} from "../../openaireLibrary/utils/piwik/piwik.service"; -import {HelperService} from "../../openaireLibrary/utils/helper/helper.service"; -import {Subscriber} from "rxjs"; -import {properties} from "../../../environments/environment"; - -@Component({ - selector: 'faqs', - template: ` - -
    -
    - -
    -
    -
    -
    -

    Frequently Asked Questions

    - - - -
    - - -
    -
      -
    • - What is a Community Gateway? - -
    • -
    • - What is OpenAIRE CONNECT? - -
    • -
    • - What is a “research community”? - -
    • -
    • - What is a Community Gateway? - -
    • -
    • - What is a community manager or curator? - -
    • -
    • - How does a Community Gateway help my research community at implementing Open Science practices? - -
    • -
    • - How to get a Community Gateway for my research community? - -
    • -
    • - How often is the searchable content of the gateway updated? - -
    • -
    • - What are the costs? - -
    • - -
    • - Can I ask end-users to pay to access my Community Gateway? - -
    • -
    • - How can I become a member of OpenAIRE? - -
    • -
    • - How does the gateway operate? - -
    • -
    • - Where can I find news about OpenAIRE CONNECT? - -
    • - - -
    -
    -
    - -
    -
      -
    • - Which customisation options does OpenAIRE CONNECT offer to community managers? - -
    • -
    • - Can I configure my gateway according to the visual identity of my research community? - -
    • -
    • - Can I integrate a community service in my gateway? - -
    • -
    • - Can I embed my gateway in my web site? - -
    • -
    • - Can I invite colleagues to manage the gateway with me? - -
    • -
    • - Can I keep the gateway restricted? - -
    • -
    -
    -
    - -
    -
      -
    • - I received an invitation to become manager but the link does not work. What can I do? - -
    • -
    • - How to avoid spam users who create wrong links in my Community Gateway? - -
    • - - -
    -
    -
    - -
    - -
    -
    -
    - ` -}) -export class FaqsComponent { - public pageTitle: string = "OpenAIRE - Connect | FAQs"; - public pageDescription: string = "Frequently asked questions about OpenAIRE Connect research gateway"; - public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'About', route: '/about'}, {name: 'FAQs'}]; - private subscriptions = []; - public pageContents = null; - public divContents = null; - public url: string = null; - properties: EnvProperties; - categories = [ - {name:"About Connect", id: "about", icon: "info"}, - {name:"Gateway configuration", id: "configuration", icon: "settings"}, - {name:"Troubleshooting", id: "troubleshooting", icon: "build"}, - {name:"Gateway functionality", id: "functionality", icon: "storage"} - ] - selectedCategory = this.categories[0].id; - - constructor( - private route: ActivatedRoute, - private _router: Router, - private _meta: Meta, - private _title: Title, - private seoService: SEOService, - private _piwikService: PiwikService, - private helper: HelperService) { - } - - public ngOnInit() { - - this.properties = properties; - this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe()); - this.url = this.properties.baseLink + this._router.url; - this.seoService.createLinkForCanonicalURL(this.url); - this.updateUrl(this.url); - this.updateTitle(this.pageTitle); - this.updateDescription(this.pageDescription); - - //this.getDivContents(); - this.getPageContents(); - - } - - private getPageContents() { - this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'connect', this._router.url).subscribe(contents => { - this.pageContents = contents; - })); - } - - private getDivContents() { - this.subscriptions.push(this.helper.getDivHelpContents(this.properties, 'connect', this._router.url).subscribe(contents => { - this.divContents = contents; - })); - } - - ngOnDestroy() { - this.subscriptions.forEach(subscription => { - if (subscription instanceof Subscriber) { - subscription.unsubscribe(); - } - }); - } - - private updateDescription(description: string) { - this._meta.updateTag({content: description}, "name='description'"); - this._meta.updateTag({content: description}, "property='og:description'"); - } - - private updateTitle(title: string) { - var _title = ((title.length > 50) ? title.substring(0, 50) : title); - this._title.setTitle(_title); - this._meta.updateTag({content: _title}, "property='og:title'"); - } - - private updateUrl(url: string) { - this._meta.updateTag({content: url}, "property='og:url'"); - } -} diff --git a/src/app/learn-how/faqs/faqs.module.ts b/src/app/learn-how/faqs/faqs.module.ts deleted file mode 100644 index 8b767ec..0000000 --- a/src/app/learn-how/faqs/faqs.module.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {RouterModule} from '@angular/router'; - -import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; -import {PiwikService} from '../../openaireLibrary/utils/piwik/piwik.service'; - -import {FaqsComponent} from "./faqs.component"; -import {FaqsRoutingModule} from "./faqs-routing.module"; -import {HelperModule} from "../../openaireLibrary/utils/helper/helper.module"; -import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard"; -import {Schema2jsonldModule} from "../../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module"; -import {SEOServiceModule} from "../../openaireLibrary/sharedComponents/SEO/SEOService.module"; -import {BreadcrumbsModule} from "../../openaireLibrary/utils/breadcrumbs/breadcrumbs.module"; -import {HtmlPagesModule} from "../../htmlPages/htmlPages.module"; -import {IconsModule} from "../../openaireLibrary/utils/icons/icons.module"; - -@NgModule({ - imports: [ - CommonModule, RouterModule, FaqsRoutingModule, HelperModule, - Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, HtmlPagesModule, IconsModule - ], - declarations: [ - FaqsComponent - ], - exports: [ - FaqsComponent - ], - providers:[ - PreviousRouteRecorder, PiwikService, IsRouteEnabled - ] -}) -export class FaqsModule { } From 75714b8b2750e3a0e4076d9746fd4502b81e24f5 Mon Sep 17 00:00:00 2001 From: argirok Date: Fri, 30 Aug 2024 13:11:13 +0300 Subject: [PATCH 09/13] [develop | DONE | ADDED] server.ts add custom css when generating the community css --- server.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server.ts b/server.ts index 7087769..7d16511 100644 --- a/server.ts +++ b/server.ts @@ -26,7 +26,7 @@ var bodyParser = require('body-parser') var jsonParser = bodyParser.json() -function buildCss(portal: string, suffix = null, variables: {} = null) { +function buildCss(portal: string, suffix = null, variables: {} = null, customCss = "") { let lessFile = 'community.less' if (portal === 'connect') { lessFile = 'connect.less' @@ -48,7 +48,7 @@ function buildCss(portal: string, suffix = null, variables: {} = null) { rewriteUrls: 'all', modifyVars: modifyVars }; - less.render(input, options, function (error, result) { + less.render(customCss + input , options, function (error, result) { if (error) { console.log(error); } else { @@ -80,7 +80,7 @@ function buildAll(res: Response = null) { if (response.data && Array.isArray(response.data) && response.data.length > 0) { response.data.forEach((layout: Layout) => { let variables = Layout.getVariables(CustomizationOptions.checkForObsoleteVersion(layout.layoutOptions, layout.portalPid)); - buildCss(layout.portalPid, layout.date ? layout.date : null, variables); + buildCss(layout.portalPid, layout.date ? layout.date : null, variables, layout.layoutOptions.identity.customCss); }); if (res) { res.status(200).send({ @@ -191,7 +191,7 @@ export function app() { server.post('/build-css/:id/:suffix', jsonParser,(req, res) => { let variables = Layout.getVariables(CustomizationOptions.checkForObsoleteVersion(req.body, req.params.id)); - buildCss(req.params.id , req.params.suffix, variables); + buildCss(req.params.id , req.params.suffix, variables, req.body.layoutOptions.identity.customCss); res.status(200).send({ code: 200, message: 'CSS build for ' + req.params.id + ' layout was successful' @@ -200,7 +200,7 @@ export function app() { server.post('/build-css/preview/:id/:suffix', jsonParser, (req, res) => { let variables = Layout.getVariables(CustomizationOptions.checkForObsoleteVersion(req.body, req.params.id)); - buildCss(req.params.id, req.params.suffix, variables); + buildCss(req.params.id, req.params.suffix, variables, req.body.identity.customCss); res.status(200).send({code: 200, message: 'CSS build for ' + req.params.id + ' layout was successful'}); }); server.get('/health-check', async (_req, res, _next) => { From 40a060ed214ad37887156d9e1317c668e990e1ef Mon Sep 17 00:00:00 2001 From: argirok Date: Mon, 2 Sep 2024 11:50:46 +0300 Subject: [PATCH 10/13] [develop | DONE | FIXED] fixed keyword search in Search projects --- src/app/searchPages/simple/searchProjects.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/searchPages/simple/searchProjects.component.ts b/src/app/searchPages/simple/searchProjects.component.ts index f2eba04..5c6d13b 100644 --- a/src/app/searchPages/simple/searchProjects.component.ts +++ b/src/app/searchPages/simple/searchProjects.component.ts @@ -123,7 +123,7 @@ export class OpenaireSearchProjectsComponent { this.disableForms = true; this.disableRefineForms = true; this.enableSearchView = false; - this.subscriptions.push(this._searchProjectsService.searchProjectsWithPaging(this.properties, this.communityId, this.searchUtils.page, this.searchUtils.size, this.searchUtils.keyword, this.selectedFunder, "name" ).subscribe( + this.subscriptions.push(this._searchProjectsService.searchProjectsWithPaging(this.properties, this.communityId, this.searchUtils.page, this.searchUtils.size, this.keyword, this.selectedFunder, "name" ).subscribe( data => { this.searchUtils.totalResults = data['totalElements']; this.filters = this.selectedFunder?this.createFilters([this.selectedFunder]):this.createFilters(this.originalFunders); From 3e55965ec7c9ebe27320f0034fe81f0bff412e2a Mon Sep 17 00:00:00 2001 From: argirok Date: Mon, 2 Sep 2024 12:23:04 +0300 Subject: [PATCH 11/13] [develop | DONE | FIXED] fixed loosing funder filter wn change page --- src/app/searchPages/simple/searchProjects.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/searchPages/simple/searchProjects.component.ts b/src/app/searchPages/simple/searchProjects.component.ts index 5c6d13b..bce84fc 100644 --- a/src/app/searchPages/simple/searchProjects.component.ts +++ b/src/app/searchPages/simple/searchProjects.component.ts @@ -135,6 +135,7 @@ export class OpenaireSearchProjectsComponent { this.disableRefineForms = false; this.enableSearchView = true; this.searchUtils.refineStatus = this.errorCodes.DONE; + this.searchPage.prepareFiltersToShow(this.filters, this.searchUtils.totalResults); }, err => { this.handleError("Error getting projects for community with id: " + this.communityId, err); From 760afd89ea0ef5ec4295ea0cfc96c78396b8c2ce Mon Sep 17 00:00:00 2001 From: Alex Martzios Date: Thu, 5 Sep 2024 13:49:50 +0300 Subject: [PATCH 12/13] [develop | DONE | CHANGED] adminToolsAPIURL: remove duplicate '/' --- src/app/openaireLibrary | 2 +- src/app/utils/services/statistics.service.ts | 2 +- src/assets/common-assets | 2 +- src/assets/openaire-theme | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/openaireLibrary b/src/app/openaireLibrary index 04a3916..ad17ffa 160000 --- a/src/app/openaireLibrary +++ b/src/app/openaireLibrary @@ -1 +1 @@ -Subproject commit 04a3916389fd24705b64242dbee69473e044c14b +Subproject commit ad17ffaf9510b1252964834aa2f5c2c695201009 diff --git a/src/app/utils/services/statistics.service.ts b/src/app/utils/services/statistics.service.ts index 2341b6a..f4a6eaa 100644 --- a/src/app/utils/services/statistics.service.ts +++ b/src/app/utils/services/statistics.service.ts @@ -21,7 +21,7 @@ export class StatisticsService { } getCommunityAdminStatisticsChoices(properties: EnvProperties, communityId: string): Observable { - let url = properties.adminToolsAPIURL+"/statistics/"+communityId; + let url = properties.adminToolsAPIURL+"statistics/"+communityId; //console.log(`getting admin choices for statistics from: ${url}`); return this.http.get((properties.useCache) ? (properties.cacheUrl + encodeURIComponent(url)) : url) //.map(stats => stats.json()) diff --git a/src/assets/common-assets b/src/assets/common-assets index 651102a..6bc0212 160000 --- a/src/assets/common-assets +++ b/src/assets/common-assets @@ -1 +1 @@ -Subproject commit 651102a5ba049b71bed8eb6a85a8d02cefcb24cc +Subproject commit 6bc02125166daa907d39ff523cd635088bdb63c2 diff --git a/src/assets/openaire-theme b/src/assets/openaire-theme index 37639ea..b4d09b7 160000 --- a/src/assets/openaire-theme +++ b/src/assets/openaire-theme @@ -1 +1 @@ -Subproject commit 37639eab68c63a506b7df10c42e3379c4a05d94d +Subproject commit b4d09b7cd942893c238d4152eeac1bbc822a0b13 From 7d8e78f02525996b4b58ec0e40e646a4bb65df0b Mon Sep 17 00:00:00 2001 From: argirok Date: Mon, 9 Sep 2024 12:54:04 +0300 Subject: [PATCH 13/13] [develop | DONE | FIXED] customCss add checks if identity/customCss not defined --- server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.ts b/server.ts index 7d16511..7529b1d 100644 --- a/server.ts +++ b/server.ts @@ -191,7 +191,7 @@ export function app() { server.post('/build-css/:id/:suffix', jsonParser,(req, res) => { let variables = Layout.getVariables(CustomizationOptions.checkForObsoleteVersion(req.body, req.params.id)); - buildCss(req.params.id , req.params.suffix, variables, req.body.layoutOptions.identity.customCss); + buildCss(req.params.id , req.params.suffix, variables, req.body.layoutOptions?.identity?.customCss); res.status(200).send({ code: 200, message: 'CSS build for ' + req.params.id + ' layout was successful'