Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions 15/umbraco-cms/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,15 @@ Umbraco CMS is a flexible and editor-friendly Content Management System (CMS) th
Learn more about Umbraco CMS and get an overview of the top features on [Umbraco.com](https://umbraco.com/products/umbraco-cms/).

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Fundamentals</strong></td><td>Learn the basics of working with Umbraco CMS. How to install and setup your first site is also included in this section.</td><td><a href=".gitbook/assets/rocket-hero.png">rocket-hero.png</a></td><td><a href="fundamentals/get-to-know-umbraco.md">get-to-know-umbraco.md</a></td></tr><tr><td><strong>Install Umbraco CMS</strong></td><td>Ready to get started with Umbraco? Head over to the Setup section to learn how to install Umbraco CMS.</td><td><a href=".gitbook/assets/docs-style-hero.png">docs-style-hero.png</a></td><td><a href="fundamentals/setup/install/">install</a></td></tr><tr><td><strong>Tutorials</strong></td><td>Find detailed step-by-step guides on everything from building a site from scratch to implementing a custom maintenance page.</td><td><a href=".gitbook/assets/reversed-heart-hero.png">reversed-heart-hero.png</a></td><td><a href="tutorials/overview.md">overview.md</a></td></tr></tbody></table>

## New articles for Umbraco 15

* [Tutorial: Extending the Help Menu](tutorials/extending-the-help-menu.md)

***

## Umbraco Training

Umbraco HQ offers a full-day training course covering the basic concepts and features needed for building an Umbraco CMS website. The course targets frontend and backend developers, designers, and technical users who want to build a website from scratch in Umbraco,

[Explore the Fundamentals Training Course](https://umbraco.com/training/course-details/fundamentals-details/) to learn more about the topics covered and how it can enhance your Umbraco development skills.
1 change: 1 addition & 0 deletions 15/umbraco-cms/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,4 @@
* [Custom value conversion for rendering](tutorials/creating-a-property-editor/custom-value-conversion-for-rendering.md)
* [Adding server-side validation](tutorials/creating-a-property-editor/adding-server-side-validation.md)
* [Default Property Editor Schema aliases](tutorials/creating-a-property-editor/default-property-editor-schema-aliases.md)
* [Extending the Help Menu](tutorials/extending-the-help-menu.md)
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,10 @@ In this section, you will find all the resources you need to build an intuitive

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Dashboards</strong></td><td>The dashboard is where all the main functionality of the backoffice will be.</td><td><a href="dashboards.md">dashboards.md</a></td><td><a href="../.gitbook/assets/dashboards-image.png">dashboards-image.png</a></td></tr><tr><td><strong>Sections and Trees</strong></td><td>Extend the backoffice by customizing existing and building new sections and trees.</td><td><a href="section-trees/">section-trees</a></td><td><a href="../.gitbook/assets/trees.image.png">trees.image.png</a></td></tr><tr><td><strong>Property Editors</strong></td><td>Learn how to extend and build some of the main building blocks in Umbraco CMS.</td><td><a href="../fundamentals/backoffice/property-editors/">property-editors</a></td><td><a href="../.gitbook/assets/property-image.png">property-image.png</a></td></tr></tbody></table>

***

## Umbraco Training

Umbraco HQ offers a training course covering extending and customizing the Umbraco Backoffice to enhance the editing experience. The course targets frontend and backend developers familiar with Umbraco who want to extend the UI for editors.

[Explore the Extending the Backoffice Training Course](https://umbraco.com/training/course-details/extending-the-backoffice-details/) to learn more about the topics covered and how it can enhance your Umbraco development skills.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Entry Point
# Backoffice Entry Point

{% hint style="warning" %}
This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,41 +46,93 @@ The following conditions are available out of the box, for all extension types t
You can make your own conditions by creating a class that implements the `UmbExtensionCondition` interface.

```typescript
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import {
ManifestCondition,
UmbConditionConfigBase,
UmbConditionControllerArguments,
UmbExtensionCondition,
ManifestCondition,
UmbConditionConfigBase,
UmbConditionControllerArguments,
UmbExtensionCondition
} from '@umbraco-cms/backoffice/extension-api';
import { UMB_SECTION_CONTEXT } from '@umbraco-cms/backoffice/section';
import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry';
import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';

type MyConditionConfig = UmbConditionConfigBase & {
match: string;
export type MyConditionConfig = UmbConditionConfigBase & {
match: string;
};

export class MyExtensionCondition extends UmbControllerBase implements UmbExtensionCondition {
config: MyConditionConfig;
permitted = false;

constructor(args: UmbConditionControllerArguments<MyConditionConfig>) {
super(args.host);
// This condition aproves after 10 seconds
setTimeout(() => {
this.permitted = strue;
args.onChange();
}, 10000);
}
export class MyExtensionCondition extends UmbConditionBase<MyConditionConfig> implements UmbExtensionCondition {
constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<MyConditionConfig>) {
super(host, args);

// enable extension after 10 seconds
setTimeout(() => {
this.permitted = true;
args.onChange();
}, 10000);
}
}
```

This has to be registered in the extension registry, like this:
This has to be registered in the extension registry like shown below:

```typescript
export const manifest: ManifestCondition = {
type: 'condition',
name: 'My Condition',
alias: 'My.Condition.TenSecondDelay',
alias: 'My.Condition.CustomName',
api: MyExtensionCondition,
};
```

Finally, you can make use of the condition in your configuration. See an example of this below:

```typescript
{
type: 'workspaceAction',
name: 'example-workspace-action',
alias: 'My.Example.WorkspaceAction',
elementName: 'my-workspace-action-element',
conditions: [
{
alias: 'Umb.Condition.SectionAlias',
match: 'My.Example.Workspace'
},
{
alias: 'My.Condition.CustomName'
}
]
}
```

As can be seen in the code above, we never make use of `match`. We can do this by replacing the timeout with some other check.

```typescript
// ...

export class MyExtensionCondition extends UmbConditionBase<MyConditionConfig> implements UmbExtensionCondition {
constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<MyConditionConfig>) {
super(host, args);

if (args.config.match === 'Yes') {
this.permitted = true;
args.onChange();
}
}
}

// ...
```

With all that in place, the configuration can look like shown below:

```typescript
{
// ...
conditions: [
// ...
{
alias: 'My.Condition.CustomName',
match: 'Yes'
} as MyConditionConfig
]
}
```
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ You can create your own sections to extend Umbraco with room for more features.

### **Manifests**

When creating a new section it's recommended to use a [Entry Point](../../../extending/backoffice-setup/extension-registry/entry-point.md)-extension in your [Umbraco Package Manifest](../../package-manifest.md). This is to get better control over all the additional extensions required for the new section.
When creating a new section it's recommended to use a [Entry Point](../../../customizing/extending-overview/extension-types/backoffice-entry-point.md)-extension in your [Umbraco Package Manifest](../../package-manifest.md). This is to get better control over all the additional extensions required for the new section.

Create a section by defining a manifest for it:

Expand Down
2 changes: 1 addition & 1 deletion 15/umbraco-cms/extending/database.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: A guide to creating a custom Database table in Umbraco

# Creating a Custom Database Table

It is possible to add custom database tables to your site to store additional data that should not be stored as normal content nodes.
Umbraco ships with [NPoco](https://github.com/schotime/NPoco), which enables mapping the results of database queries to Common Language Runtime (CLR) objects. NPoco allows custom database tables to be added to your site to store additional data that should not be stored as normal content nodes.

The end result looks like this:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,6 @@ else

This example only enables HSTS if the app is not running in development mode. `UseHsts` isn't recommended in development because the HSTS settings are highly cacheable by browsers.

Full details of `UseHsts`, and additional configuration, can be found in the [ASP.NET Core documentation](https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-5.0\&tabs=visual-studio#http-strict-transport-security-protocol-hsts-1).
It is possible to configure a timespan for the HSTS, preferably six months. This can be done by adding a new builder to the `Program.cs` file. Learn more in the [official Microsoft Documentation](https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-8.0&tabs=visual-studio%2Clinux-ubuntu#http-strict-transport-security-protocol-hsts).

Full details of `UseHsts`, and additional configuration, can be found in the [ASP.NET Core documentation](https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-8.0&tabs=visual-studio%2Clinux-ubuntu#http-strict-transport-security-protocol-hsts).
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ The `UmbTinyMcePluginBase` class is a class provided by Umbraco that you can use
{% code title="App_Plugins/MyTinyMCEPlugin/plugin.js" lineNumbers="true" %}

```js
import { UmbTinyMcePluginBase } from '@umbraco-cms/backoffice/tinymce';
import { UmbTinyMcePluginBase } from '@umbraco-cms/backoffice/tiny-mce';

export default class UmbTinyMceMediaPickerPlugin extends UmbTinyMcePluginBase {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ EditorModel notifications enable you to manipulate the model used by the backoff

Example usage of the `SendingContentNotification` - e.g. set the default PublishDate for a new NewsArticle to be today's Date:

{% code overflow="wrap" lineNumbers="true" fullWidth="false" %}
```csharp
using System;
using System.Linq;
Expand Down Expand Up @@ -56,6 +57,7 @@ public class EditorSendingContentNotificationHandler : INotificationHandler<Send
}
}
```
{% endcode %}

Another example could be to set the default Member Group for a specific Member Type using `SendingMemberNotification`:

Expand Down
8 changes: 8 additions & 0 deletions 15/umbraco-cms/reference/routing/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,11 @@ Routing requirements for authenticated controllers for both front-end and the ba
## [URL Tracking](url-tracking.md)

Moving and renaming Umbraco documents will lead to URL redirects to be created.

***

## Umbraco Training

Umbraco HQ offers a full-day training course covering advanced routing, custom page controllers and models, and backoffice integration. The course targets backend ASP.NET MVC developers working with service and application integration on Umbraco.

[Explore the Application Integration Training Course](https://umbraco.com/training/course-details/application-integration-details/) to learn more about the topics covered and how it can enhance your Umbraco development skills.
8 changes: 8 additions & 0 deletions 15/umbraco-cms/reference/searching/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,11 @@ Examine and Lucene are external parts used in Umbraco. When working with either
{% endhint %}

Understand how Examine works and walk through the many available options and settings in Umbraco.

***

## Umbraco Training

Umbraco HQ offers a full-day training course covering the inner workings of Examine and Lucene, query debugging, and knowledge of the search tool. The course targets backend ASP.NET MVC developers who need to build real-world search applications with Umbraco.

[Explore the Searching and Indexing with Examine Training Course](https://umbraco.com/training/course-details/searching-and-indexing/) to learn more about the topics covered and how it can enhance your Umbraco development skills.
8 changes: 8 additions & 0 deletions 15/umbraco-cms/reference/security/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,11 @@ If you need to reset accounts of every other user while you still have administr
## Other articles related to security

* [Health Checks](../../extending/health-check/)

***

## Umbraco Training

Umbraco HQ offers a full-day training course covering an overview of Transport Layer Security (TLS), understanding threats, two-factor authentication, and more. The course targets frontend and backend developers, designers, and technical users.

[Explore the Security Training Course](https://umbraco.com/training/course-details/security/) to learn more about the topics covered and how it can enhance your Umbraco development skills.
8 changes: 8 additions & 0 deletions 15/umbraco-cms/tutorials/editors-manual/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,11 @@ How to work with media, organize folders, and do image editing.
## [Tips and Tricks](tips-and-tricks/)

Providing a few tips and tricks on how to work with Content using Umbraco.

***

## Umbraco Training

Umbraco HQ offers a training course that covers an overview of the Umbraco backoffice, workflows, and best practices for managing content and media. The course targets content editors, project managers, and decision-makers who want to understand how Umbraco works.

[Explore the Umbraco Content Management Training Course](https://umbraco.com/training/course-details/content-management/) to learn more about the topics covered and how it can enhance your Umbraco development skills.
1 change: 1 addition & 0 deletions 15/umbraco-forms/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,4 @@

* [Overview](tutorials/overview.md)
* [Creating a Contact Form](tutorials/creating-a-contact-form.md)
* [Creating a Multi-Page Form](tutorials/creating-a-multipage-form.md)
11 changes: 10 additions & 1 deletion 15/umbraco-forms/developer/configuration/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ For illustration purposes, the following structure represents the full set of op
"SiteKey": "",
"PrivateKey": "",
"Domain": "Google",
"VerificationUrl": "https://www.google.com/recaptcha/api/siteverify"
"VerificationUrl": "https://www.google.com/recaptcha/api/siteverify",
"ShowFieldValidation": false
},
"RichText": {
"DataTypeId": "ca90c950-0aff-4e72-b976-a30b1ac57dad"
Expand Down Expand Up @@ -508,6 +509,14 @@ By default, the server-side validation of the reCAPTCHA response is sent to Goog

Some customers with a locked-down production environment cannot configure the firewall to allow these requests and instead use a proxy server. They can use this setting to configure the URL to their proxy server, which will relay the request to and response from Google.

#### ShowFieldValidation

By default the validation message returned from a failed reCAPTCHA 3 request will be displayed only in the form level validation summary.

To render also at a field level, set this value to `true`.

We expect to make the default value for this option `true` in Umbraco Forms 15.

### Rich text field type configuration

#### DataTypeId
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 5 additions & 4 deletions 15/umbraco-forms/developer/localization.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Umbraco Forms ships with translations for the following languages:
- Polish (`pl-pl.js`)
- UK English (`en-gb.js`)
- US English (`en-us.js`)
- Dutch (`nl-nl.js`)

If the language you require does not exist, it's possible to create your own by duplicating the default `en-us.js` file. You can then save it with the appropriate culture code for the language you need and replace the English text with the translated version.

Expand All @@ -34,12 +35,12 @@ Once translated, the new file should be saved somewhere in the `App_Plugins` fol
"extensions": [
{
"type": "localization",
"alias": "UmbracoForms.Localize.NlNL",
"name": "Dutch (Netherlands)",
"alias": "UmbracoForms.Localize.DeDE",
"name": " German (Germany)",
"meta": {
"culture": "nl-nl"
"culture": "de-de"
},
"js": "/App_Plugins/UmbracoFormsLocalization/nl-nl.js"
"js": "/App_Plugins/UmbracoFormsLocalization/de-de.js"
}
]
}
Expand Down
39 changes: 39 additions & 0 deletions 15/umbraco-forms/developer/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,42 @@ In introducing the user group based permissions, we've taken care to ensure a mi
* If you have any exceptions - where a particular user needs a particular combination of permissions that you can't or don't want to provide via the user groups - it's always possible to re-create a user permission record that will take precedence over the group based permissions.

![User group permissions](../../../10/umbraco-forms/developer/images/user-group-permissions.png)

## Handling Sensitive Data in Umbraco Forms

Marking fields and properties as sensitive will hide the data in those fields for backoffice users that are not privy to the data. Built-in features are available to help you secure sensitive information. For more information, see the [Sensitive data](https://docs.umbraco.com/umbraco-cms/reference/security/sensitive-data-on-members) article.

The following sections covers how to grant or deny access to sensitive data for specific users and how to mark form questions as sensitive.

### Assigning Users to the Sensitive Data Group

To allow users to view and handle sensitive data in Umbraco Forms, you must assign them to the _Sensitive Data_ user group:

1. Navigate to the **Users** section in the Umbraco Backoffice.
2. Select the user you want to grant access to.
3. Click **Choose** in the Groups field under the **Assign access** section.
4. Select **Sensitive Data** from the list of User Groups.
5. Click **Submit**.
6. Click **Save**.

![Assigning Users to the Sensitive Data Group](images/assign-sensitive-data-to-user.png)

### Marking Questions in Forms as Sensitive

Once the users are set up with the appropriate permissions, the next step is to identify which form fields should be marked as sensitive.

Marking a field as sensitive ensures that only authorized users in the Sensitive Data user group can access data from these fields.

To mark questions as sensitive, follow these steps:

1. Navigate to the **Forms** section in the Umbraco Backoffice.
2. Open the form you wish to configure (for example: Contact Form).
3. Click on the cogwheel icon next to the form field you want to secure.
4. Enable the **Sensitive data** setting for the field.

![Mark Question as Sensitive](images/mark-field-as-sensitive.png)

5. Click **Submit**.
6. Click **Save**.

![Sensitive Data on Field](images/sensitive-data-field.png)
14 changes: 14 additions & 0 deletions 15/umbraco-forms/editor/creating-a-form/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,20 @@ Once have created the Form, save the design by clicking the **Save** button.

![Form save Form](images/FormDesignerSaveV14.png)

## Importing a Form

**Import Form Definition** allows you to import a form into your Umbraco site using a predefined JSON file. This file contains the form’s structure, fields, validations, workflows, and settings.

When you import a form definition, Umbraco uses the JSON structure to recreate the form as it was defined, enabling you to:

- Reuse existing forms across multiple projects or environments.
- Migrate forms between development, testing, and production environments.
- Restore forms from backups or previously exported definitions.

Using the **Import Form Definition** option, you can manage your forms without having to recreate them.

![Import a Form](images/import-form.png)

## Organizing Forms in Folders

If the product installation is set up to store form definitions in the database, you will be able to store forms within folders. This can help with organization and makes it easier to locate the forms for modification, especially if you plan to create many Forms.
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading