You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
("Name",newJsonSchemaBuilder().Type(SchemaValueType.String).Description("Unique friendly time zone name.")),
20
+
("TimeZoneId",newJsonSchemaBuilder().Type(SchemaValueType.String).Description("IANA time zone identifier to store for this map.")),
21
+
("OwnerId",newJsonSchemaBuilder().Type(SchemaValueType.String).Description("The user id of the user creating the entry. Leave it blank to use the current user's Id.")),
22
+
("Author",newJsonSchemaBuilder().Type(SchemaValueType.String).Description("The username of the user creating the entry. Leave it blank to use the current username.")))
Copy file name to clipboardExpand all lines: src/CrestApps.Docs/docs/changelog/v2.0.0.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -103,6 +103,8 @@ Large parts of the reusable AI infrastructure are no longer implemented only ins
103
103
- Omnichannel campaign, AI workflow direct-config, and content access control admin editors now use the current `ocat-*` admin theme field and checkbox layout classes instead of legacy `mb-3` and `form-label` markup, keeping labels, validation, and checkbox alignment consistent with the modern Orchard Core admin UI
104
104
- AI memory, prompting, documents, and post-session admin editors now use the current `ocat-*` admin theme field and checkbox layout classes for settings rows, template selectors, attached-file editors, and post-session task headings, preserving existing client-side behavior while aligning with the modern Orchard Core admin UI
105
105
- admin `.SummaryAdmin.cshtml` metadata badges that previously always showed `CreatedUtc` now prefer `ModifiedUtc` when available across the affected AI and Omnichannel catalog summaries, so admins see the latest meaningful update time
106
+
- the new Time Zones admin list now shows the mapped `TimeZoneId` as a badge, renders the author through the shared `user-display-name` summary badge, and preserves `Author`, `OwnerId`, `CreatedUtc`, and `ModifiedUtc` metadata through recipe and deployment import/export
107
+
- the Time Zones docs now clarify that the module overrides Orchard Core's `ITimeZoneSelectListProvider`, so Orchard time zone menus switch to the mapped friendly-name list when callers use that shared provider, and the seed recipe now stamps admin-owned audit metadata through shared recipe variables
106
108
- Orchard AI deployment selection code and guidance now use `AIDeploymentPurpose` and the purpose-based deployment manager APIs instead of the obsolete `AIDeploymentType` helpers
107
109
- Added `Vision` as a new deployment purpose; the default deployment settings UI now includes a Vision dropdown, and chat UIs pass a `visionEnabled` flag to the frontend when a vision deployment is available
108
110
- AI deployment admin UI relabeled from "Type" to "Purpose" to align with the new `AIDeploymentPurpose` enum
@@ -119,6 +121,7 @@ Large parts of the reusable AI infrastructure are no longer implemented only ins
119
121
- Content Transfer imports now commit inline status changes before their deferred background jobs run, use **Pending**, **Paused**, and **Deleting** import states in the admin list, surface **Resume import** and **Pause import** actions instead of the earlier cancel/process wording, and migrate older canceled import rows to the paused state
120
122
- Omnichannel contact import and export now map the first contact-method bag entries to workbook `Email`, `Cell Phone`, and `Phone` columns, also read and write `DoNotCall`, `DoNotCallUtc`, `DoNotSms`, `DoNotSmsUtc`, `DoNotEmail`, `DoNotEmailUtc`, `DoNotChat`, and `DoNotChatUtc` on `OmnichannelContactPart`, advertise `true` and `false` for the `DoNot*` boolean columns, default duplicate-phone filtering to enabled, add skipped duplicate rows to the error export with a reason, batch-check duplicate phone numbers against both the import file and the existing Orchard contact records, fall back to legacy stored phone values when older tenants have not yet backfilled normalized-phone indexes, normalize non-E.164 import numbers before handing them to DNC registry providers, and can enforce national do-not-call registry checks through **Settings** -> **Import Content Settings**
121
123
- Omnichannel contacts now store a `TimeZoneId` on `OmnichannelContactPart`; Content Transfer imports and exports include that column, missing values can be inferred from imported phone numbers through `IPhoneNumberService`, and the scheduled activities list can now filter by lead time zone while showing each contact's current local time with a tooltip for the full local date/time and IANA time zone id
124
+
- Added a new `CrestApps.OrchardCore.TimeZones` module that manages friendly named time zone maps through admin UI, recipes, deployment plans, and a create-time seed migration recipe, and Omnichannel time zone selectors now read their available options from `ITimeZoneSelectListProvider` instead of Orchard Core's full raw IANA list
122
125
-`OmnichannelContactPart` now supports part settings for **Require time zone** and opt-in rendering of the Do not SMS, Do not chat, and Do not email preference fields, with **Require time zone** and **Use Do not call** enabled by default
123
126
- Omnichannel contact and communication-preference content-item indexes now subscribe to Orchard's default content-item collection instead of the custom omnichannel document collection, so publishing or updating a contact reliably refreshes its index rows
124
127
- upgrade repairs now delete the empty legacy omnichannel-collection contact index tables created by earlier previews, recreate the correct default-collection tables, and reindex published contacts so activity phone, time-zone, and do-not-call filters keep working after upgrade
Provides friendly named time zone maps so editors can pick labels like `Eastern Time (US & Canada)` instead of scanning the full Orchard Core IANA time zone list.
14
+
15
+
## Overview
16
+
17
+
The module adds:
18
+
19
+
- an admin UI under **Tools -> Time Zones**
20
+
- a catalog-backed store of unique named time zone maps
21
+
- an `ITimeZoneSelectListProvider` override that replaces Orchard Core's default time zone select-list implementation
22
+
- recipe import support through `TimeZoneMaps`
23
+
- deployment export support for time zone maps
24
+
- seeded starter mappings for common worldwide time zones
25
+
26
+
Because this module overrides Orchard Core's `ITimeZoneSelectListProvider`, enabling **Time Zones** changes the time zone menus Orchard Core renders anywhere that service is used. Consumers should resolve `ITimeZoneSelectListProvider` instead of building their own time zone list so the user always sees the mapped, human-friendly names.
27
+
28
+
Each map stores:
29
+
30
+
- a unique **Name** shown to editors
31
+
- a **TimeZoneId** value stored in Orchard Core data
32
+
-**Author**, **OwnerId**, **CreatedUtc**, and **ModifiedUtc** metadata for admin auditing
33
+
34
+
## Admin management
35
+
36
+
Enable the feature, then open **Configuration -> Time Zones**.
37
+
38
+
Create one map entry for each friendly label you want to expose. Names are unique and immutable after creation. The admin list shows the mapped `TimeZoneId`, the author display name, and the latest created or modified timestamp as badges so editors can scan changes quickly.
39
+
40
+
## Recipe support
41
+
42
+
Use the `TimeZoneMaps` step to create or update maps:
43
+
44
+
```json
45
+
{
46
+
"name": "TimeZoneMaps",
47
+
"Maps": [
48
+
{
49
+
"Name": "Eastern Time (US & Canada)",
50
+
"TimeZoneId": "America/New_York",
51
+
"OwnerId": "[js: parameters('AdminUserId')]",
52
+
"Author": "[js: parameters('AdminUsername')]"
53
+
},
54
+
{
55
+
"Name": "India Standard Time",
56
+
"TimeZoneId": "Asia/Kolkata",
57
+
"OwnerId": "[js: parameters('AdminUserId')]",
58
+
"Author": "[js: parameters('AdminUsername')]"
59
+
}
60
+
]
61
+
}
62
+
```
63
+
64
+
Recipe imports update existing entries by `ItemId` when provided, then fall back to the unique `Name`. The step also accepts `Author`, `OwnerId`, `CreatedUtc`, and `ModifiedUtc` so seeded or deployed entries can preserve audit metadata.
65
+
66
+
## Deployment support
67
+
68
+
When **OrchardCore.Deployment** is enabled, deployment plans can export all time zone maps or a selected subset. The exported plan uses the same `TimeZoneMaps` recipe step shape, so it can be imported directly into another tenant.
69
+
70
+
## Seeded starter maps
71
+
72
+
The initial migration runs an embedded partial recipe through Orchard Core's recipe executor and creates a starter set of common worldwide mappings. The seed recipe sets `OwnerId` from `parameters('AdminUserId')`, `Author` from `parameters('AdminUsername')`, and shares a single `utcNow()` value through recipe variables so all seeded entries keep consistent audit metadata. The starter mappings include:
73
+
74
+
- Pacific, Mountain, Central, Eastern, and Atlantic North American zones
75
+
- UTC, Western European, Central European, and Eastern European zones
76
+
- India, China, Japan, Gulf, Australia Eastern, and New Zealand zones
77
+
78
+
You can edit or delete these entries after the feature is enabled.
Copy file name to clipboardExpand all lines: src/Modules/CrestApps.OrchardCore.Omnichannel.Managements/CrestApps.OrchardCore.Omnichannel.Managements.csproj
Copy file name to clipboardExpand all lines: src/Modules/CrestApps.OrchardCore.Omnichannel.Managements/Drivers/BulkManageActivityFilterDisplayDriver.cs
+8-11Lines changed: 8 additions & 11 deletions
Original file line number
Diff line number
Diff line change
@@ -24,7 +24,7 @@ internal sealed class BulkManageActivityFilterDisplayDriver : DisplayDriver<Bulk
0 commit comments