+
+
+
+
+
+
+
{% trans "Something Went Wrong" %}
+
+
+ {% if message is defined and message != "" %}
+
{{ message }}
+ {% else %}
+
+ {% trans "An unexpected error occurred. Please try again or contact support if the problem persists." %}
+
+ {% endif %}
+
+
+
+
+ {% trans "Redirecting to dashboard in" %} 15 {% trans "seconds" %}…
+
+
+
+
+
+
+
diff --git a/ots-signs/views/layout-designer-page.twig b/ots-signs/views/layout-designer-page.twig
index 971e812..9610990 100644
--- a/ots-signs/views/layout-designer-page.twig
+++ b/ots-signs/views/layout-designer-page.twig
@@ -1,17 +1,26 @@
{#
/**
- * OTS Signs — Layout Designer Page (with embed mode support)
+ * OTS Signs — Layout Designer Page
*
- * Overrides the Xibo core layout-designer-page.twig to add an embeddable
- * layout editor mode for use inside an iframe in external applications.
+ * Overrides the Xibo core layout-designer-page.twig to add two tailored
+ * editor experiences alongside the standard full-page mode.
*
* Usage:
- * Normal: /layout/designer/{layoutId}
- * Embed: /layout/designer/{layoutId}?embed=1
+ * Normal: /layout/designer/{layoutId}
+ * Deep-link: /layout/designer/{layoutId}?deeplink=1[&returnUrl=/app/layouts/123]
+ * Embed: /layout/designer/{layoutId}?embed=1
*
- * In embed mode:
- * - All CMS navigation is hidden (sidebar, topbar, help pane)
- * - Back/Exit buttons in the editor toolbar are hidden
+ * Deep-link mode (?deeplink=1):
+ * - Designed for direct navigation from an external React app.
+ * - All Xibo chrome is stripped (sidebar, topbar, help pane, back buttons).
+ * - A minimal OTS branded back bar is rendered at the top of the viewport.
+ * - Clicking "Back" navigates to ?returnUrl= (relative paths only) or
+ * falls back to window.history.back() if the param is absent/invalid.
+ * - The editor options dropdown (Publish, Checkout, Discard…) stays visible.
+ *
+ * Embed mode (?embed=1):
+ * - All CMS navigation is hidden (sidebar, topbar, help pane).
+ * - Back/Exit buttons in the editor toolbar are hidden.
* - postMessage events are sent to the parent window:
* xibo:editor:ready, xibo:editor:save, xibo:editor:publish, xibo:editor:exit
* - Parent can send: xibo:editor:requestSave
@@ -33,7 +42,7 @@
{% block headContent %}
{{ parent() }}
- {# Embed mode: early body class to prevent FOUC #}
+ {# Early mode detection — prevents FOUC for both embed and deep-link modes #}
+
+ {# ── Deep-link mode: returnUrl back navigation ────────────── #}
+
{% endblock %}
diff --git a/ots-signs/views/login.twig b/ots-signs/views/login.twig
index 3333d33..bf0fd3a 100644
--- a/ots-signs/views/login.twig
+++ b/ots-signs/views/login.twig
@@ -1,6 +1,15 @@
+
+
+
+
+
+
404
+
+
{% trans "Page Not Found" %}
+
+ {% trans "Sorry, we couldn't find the page you were looking for." %}
+ {% trans "It may have been moved, renamed, or it may not exist." %}
+
+
+
+
+
+ {% trans "Redirecting to dashboard in" %} 10 {% trans "seconds" %}…
+
+
+
+
+
+
+
diff --git a/settings-custom.php b/settings-custom.php
new file mode 100644
index 0000000..15613fc
--- /dev/null
+++ b/settings-custom.php
@@ -0,0 +1,93 @@
+ [
+ 'jit' => true,
+ 'field_to_identify' => 'UserName',
+ 'libraryQuota' => 1000,
+ 'homePage' => 'icondashboard.view',
+ 'slo' => true,
+ 'mapping' => [
+ 'UserID' => '',
+ // usertypeid: Set to 1 (super-admin) for members of admin groups.
+ // Requires a custom SAML property mapping in Authentik (see notes above).
+ 'usertypeid' => 'usertypeid',
+ 'UserName' => 'http://schemas.goauthentik.io/2021/02/saml/username',
+ 'email' => 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress',
+ ],
+ 'group' => 'Users',
+ 'matchGroups' => [
+ 'enabled' => true,
+ 'attribute' => 'http://schemas.xmlsoap.org/claims/Group',
+ 'extractionRegEx' => null,
+ ],
+ ],
+ 'strict' => true,
+ 'debug' => true,
+ 'baseurl' => 'https://app.ots-signs.com/{CUSTOMER_SLUG}/cms/saml',
+ 'idp' => [
+ 'entityId' => 'signs-otsdemo-cms',
+ 'singleSignOnService' => [
+ 'url' => 'https://app.ots-signs.com/auth/application/saml/{AUTHENTIK_SLUG}/sso/binding/redirect/',
+ 'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
+ ],
+ 'singleLogoutService' => [
+ 'url' => 'https://app.ots-signs.com/auth/application/saml/{AUTHENTIK_SLUG}/slo/binding/redirect/',
+ 'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
+ ],
+ 'x509cert' => '',
+ ],
+ 'sp' => [
+ 'entityId' => 'https://app.ots-signs.com/{CUSTOMER_SLUG}/cms/saml/metadata',
+ 'assertionConsumerService' => [
+ 'url' => 'https://app.ots-signs.com/{CUSTOMER_SLUG}/cms/saml/acs',
+ 'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
+ ],
+ 'singleLogoutService' => [
+ 'url' => 'https://app.ots-signs.com/{CUSTOMER_SLUG}/cms/saml/sls',
+ 'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
+ ],
+ 'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',
+ 'x509cert' => '',
+ 'privateKey' => '',
+ ],
+ 'security' => [
+ 'nameIdEncrypted' => false,
+ 'authnRequestsSigned' => false,
+ 'logoutRequestSigned' => false,
+ 'logoutResponseSigned' => false,
+ 'signMetadata' => false,
+ 'wantMessagesSigned' => false,
+ 'wantAssertionsSigned' => false,
+ 'wantAssertionsEncrypted' => false,
+ 'wantNameIdEncrypted' => false,
+ ],
+];
+
+// {{ EXCLUDED_GROUPS_COMMENT: Groups to exclude from Xibo sync: OTS IT }}