From d4b376537f24ca836c94b504f1e894f147139382 Mon Sep 17 00:00:00 2001 From: Cody Date: Mon, 11 Nov 2024 21:48:27 -0800 Subject: [PATCH] one small step for man, one huge leap for mankind (#91) --- docs/api/index.html | 6 +- docs/guides/concepts/404-page-behavior.html | 4 +- docs/guides/concepts/dll-handling.html | 4 +- docs/guides/concepts/index.html | 5 +- .../assets/placeholder.html | 114 + .../database-management/best-practices.html | 208 + .../database-management/database-schema.html | 2306 + docs/guides/database-management/index.html | 133 + .../database-management/troubleshooting.html | 134 + docs/guides/docs/api-menu.html | 4 +- docs/guides/docs/build.html | 4 +- docs/guides/docs/code.html | 4 +- docs/guides/docs/conventions.html | 4 +- docs/guides/docs/folders.html | 4 +- docs/guides/docs/how-it-works.html | 4 +- docs/guides/docs/index.html | 4 +- docs/guides/docs/markdown.html | 8 +- docs/guides/docs/project.html | 4 +- docs/guides/docs/run-in-iis.html | 4 +- docs/guides/docs/tips/index.html | 4 +- .../create-solutions-for-each-extension.html | 4 +- .../use-nuget-for-dependencies.html | 4 +- docs/guides/extensions/build/dev.html | 4 +- docs/guides/extensions/build/index.html | 4 +- .../guides/extensions/build/installation.html | 4 +- docs/guides/extensions/build/package.html | 4 +- docs/guides/extensions/build/release.html | 4 +- docs/guides/extensions/index.html | 9 +- docs/guides/index.html | 6 +- docs/guides/installation/databases.html | 4 +- docs/guides/installation/deploy-to-azure.html | 4 +- .../development-vs-code-linux.html | 4 +- .../installation/development-vs-code.html | 4 +- docs/guides/installation/development.html | 4 +- docs/guides/installation/index.html | 4 +- .../linux-ubuntu-apache-mysql.html | 4 +- .../linux-ubuntu-apache-postgresql.html | 4 +- docs/guides/installation/maui-setup.html | 4 +- docs/guides/installation/resources.html | 4 +- docs/guides/installation/troubleshooting.html | 15 +- docs/guides/installation/upgrade.html | 4 +- .../installation/walkthrough-dev/index.html | 4 +- .../windows-iis-express-sql-express.html | 4 +- .../installation/windows-iis-localdb.html | 4 +- docs/guides/installation/windows-iis-sql.html | 4 +- .../marketplace/assets/placeholder.html | 4 +- docs/guides/marketplace/index.html | 5 +- docs/guides/marketplace/monetization.html | 4 +- .../marketplace/submitting-contributions.html | 4 +- docs/guides/marketplace/troubleshooting.html | 27 +- .../marketplace/using-oqtane-marketplace.html | 4 +- .../guides/migrations/assets/placeholder.html | 4 +- .../guides/migrations/database-migration.html | 205 + .../development-production-migration.html | 4 +- docs/guides/migrations/index.html | 28 +- docs/guides/migrations/troubleshooting.html | 4 +- docs/guides/modules/adding-modules.html | 4 +- docs/guides/modules/assets/placeholder.html | 4 +- docs/guides/modules/creating-a-module.html | 4 +- .../customizing-module-appearance.html | 4 +- docs/guides/modules/index.html | 7 +- docs/guides/modules/module-configuration.html | 4 +- docs/guides/modules/module-deployment.html | 4 +- docs/guides/modules/module-development.html | 4 +- docs/guides/modules/module-installation.html | 4 +- docs/guides/modules/modules.html | 4 +- docs/guides/modules/troubleshooting.html | 6 +- docs/guides/modules/working-with-modules.html | 4 +- docs/guides/render/index.html | 5 +- docs/guides/roadmap/index.html | 5 +- docs/guides/themes/assets/placeholder.html | 4 +- docs/guides/themes/generator/index.html | 4 +- docs/guides/themes/index.html | 5 +- .../themes/oqtane-theme-code-explained.html | 4 +- .../themes/oqtane-theme-distribution.html | 4 +- .../oqtane-theme-solution-explained.html | 4 +- .../themes/parts-of-an-oqtane-theme.html | 4 +- docs/guides/themes/theme-configuration.html | 4 +- docs/guides/themes/theme-development.html | 4 +- docs/guides/themes/theme-installation.html | 4 +- docs/guides/themes/troubleshooting.html | 4 +- .../troubleshooting/assets/placeholder.html | 4 +- docs/guides/troubleshooting/index.html | 12 +- .../troubleshooting-database.html | 203 + .../troubleshooting-developing-modules.html | 4 +- .../troubleshooting-developing-themes.html | 4 +- .../troubleshooting-file-manager.html | 192 + .../troubleshooting-installations.html | 4 +- .../troubleshooting-login-issues.html | 4 +- .../troubleshooting-marketplace.html | 4 +- .../troubleshooting-migrations.html | 4 +- .../troubleshooting-modules.html | 4 +- .../troubleshooting-themes.html | 4 +- ...oubleshooting-upgrading-installations.html | 205 + ...-user-registration-email-verification.html | 4 +- docs/index.html | 4 +- docs/index.json | 2172 +- docs/manifest.json | 4272 +- .../admin-management/file-management.html | 4 +- .../manuals/admin/admin-management/index.html | 4 +- .../admin-management/language-management.html | 4 +- .../admin-management/page-management.html | 4 +- .../admin-management/profile-management.html | 4 +- .../admin/admin-management/recycle-bin.html | 4 +- .../admin-management/role-management.html | 4 +- .../admin-management/search-settings.html | 4 +- .../admin/admin-management/site-settings.html | 4 +- .../admin/admin-management/url-mappings.html | 4 +- .../admin-management/user-management.html | 8 +- .../admin-management/visitor-management.html | 4 +- .../content-management/content-editor.html | 4 +- .../content-management/control-panel.html | 4 +- .../content-management/html-text-editor.html | 10 +- .../admin/content-management/index.html | 4 +- .../content-management/module-management.html | 4 +- .../content-management/page-management.html | 4 +- .../admin/host-management/event-log.html | 4 +- docs/manuals/admin/host-management/index.html | 4 +- .../host-management/language-management.html | 4 +- .../host-management/module-management.html | 8 +- .../admin/host-management/scheduled-jobs.html | 4 +- .../host-management/site-management.html | 4 +- .../admin/host-management/site-settings.html | 42 +- .../admin/host-management/sql-management.html | 4 +- .../admin/host-management/system-info.html | 4 +- .../admin/host-management/system-update.html | 4 +- .../host-management/theme-management.html | 6 +- docs/manuals/admin/index.html | 4 +- docs/manuals/admin/installation/index.html | 4 +- .../installation/installation-wizard.html | 4 +- .../admin/installation/troubleshooting.html | 4 +- docs/manuals/how-to/restart/index.html | 4 +- .../pages/guides/database-management/toc.html | 37 + .../pages/guides/database-management/toc.json | 2 + docs/pages/guides/modules/toc.html | 2 +- docs/pages/guides/modules/toc.json | 2 +- docs/pages/guides/toc.html | 30 +- docs/pages/guides/toc.json | 2 +- docs/pages/guides/troubleshooting/toc.html | 3 + docs/pages/guides/troubleshooting/toc.json | 2 +- ...te-module-settings-framework-reference.png | Bin 0 -> 91196 bytes docs/readme.html | 4 +- docs/toc.html | 2 +- docs/toc.json | 2 +- docs/xrefmap.yml | 38325 ---------------- src/docfx.json | 2 +- src/layout/images/favicon.png | Bin 1618 -> 8223 bytes src/layout/images/logo-50.png | Bin 0 -> 15876 bytes src/layout/images/logo-black-50.png | Bin 0 -> 11461 bytes src/pages/guides/concepts/index.md | 5 +- src/pages/guides/concepts/load-testing.md | 92 + src/pages/guides/concepts/toc.yml | 6 +- src/pages/guides/concepts/webhooks.md | 87 + .../database-management/assets/placeholder.md | 0 .../database-management/best-practices.md | 101 + .../database-management/database-schema.md | 2639 ++ src/pages/guides/database-management/index.md | 30 + src/pages/guides/database-management/toc.yml | 17 + .../database-management/troubleshooting.md | 23 + src/pages/guides/extensions/index.md | 12 +- src/pages/guides/index.md | 12 +- .../guides/installation/troubleshooting.md | 8 + src/pages/guides/marketplace/index.md | 2 + .../guides/marketplace/troubleshooting.md | 20 + .../guides/migrations/database-migration.md | 101 + src/pages/guides/migrations/index.md | 25 + src/pages/guides/modules/index.md | 4 +- .../guides/modules/module-development.md | 4 + src/pages/guides/modules/toc.yml | 2 +- src/pages/guides/render/index.md | 4 +- src/pages/guides/roadmap/index.md | 2 + src/pages/guides/themes/index.md | 2 + src/pages/guides/toc.yml | 5 + src/pages/guides/troubleshooting/index.md | 9 +- src/pages/guides/troubleshooting/toc.yml | 5 +- .../troubleshooting-database.md | 110 + .../troubleshooting-file-manager.md | 91 + .../troubleshooting-installations.md | 40 + ...troubleshooting-upgrading-installations.md | 105 + .../admin/admin-management/user-management.md | 6 +- .../content-management/html-text-editor.md | 4 +- ...te-module-settings-framework-reference.png | Bin 0 -> 91196 bytes .../host-management/module-management.md | 2 +- .../admin/host-management/site-settings.md | 34 +- .../admin/host-management/theme-management.md | 2 +- 185 files changed, 7859 insertions(+), 44938 deletions(-) create mode 100644 docs/guides/database-management/assets/placeholder.html create mode 100644 docs/guides/database-management/best-practices.html create mode 100644 docs/guides/database-management/database-schema.html create mode 100644 docs/guides/database-management/index.html create mode 100644 docs/guides/database-management/troubleshooting.html create mode 100644 docs/guides/migrations/database-migration.html create mode 100644 docs/guides/troubleshooting/troubleshooting-database.html create mode 100644 docs/guides/troubleshooting/troubleshooting-file-manager.html create mode 100644 docs/guides/troubleshooting/troubleshooting-upgrading-installations.html create mode 100644 docs/pages/guides/database-management/toc.html create mode 100644 docs/pages/guides/database-management/toc.json create mode 100644 docs/pages/manuals/admin/host-management/assets/module-management-create-module-settings-framework-reference.png create mode 100644 src/layout/images/logo-50.png create mode 100644 src/layout/images/logo-black-50.png create mode 100644 src/pages/guides/concepts/load-testing.md create mode 100644 src/pages/guides/concepts/webhooks.md create mode 100644 src/pages/guides/database-management/assets/placeholder.md create mode 100644 src/pages/guides/database-management/best-practices.md create mode 100644 src/pages/guides/database-management/database-schema.md create mode 100644 src/pages/guides/database-management/index.md create mode 100644 src/pages/guides/database-management/toc.yml create mode 100644 src/pages/guides/database-management/troubleshooting.md create mode 100644 src/pages/guides/migrations/database-migration.md create mode 100644 src/pages/guides/troubleshooting/troubleshooting-database.md create mode 100644 src/pages/guides/troubleshooting/troubleshooting-file-manager.md create mode 100644 src/pages/guides/troubleshooting/troubleshooting-upgrading-installations.md create mode 100644 src/pages/manuals/admin/host-management/assets/module-management-create-module-settings-framework-reference.png diff --git a/docs/api/index.html b/docs/api/index.html index 57e32e74e..b707927fc 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -10,12 +10,12 @@ - + - + @@ -109,7 +109,7 @@
Note
- Edit this page + Edit this page
diff --git a/docs/guides/concepts/404-page-behavior.html b/docs/guides/concepts/404-page-behavior.html index 0bcbff688..0e35721e5 100644 --- a/docs/guides/concepts/404-page-behavior.html +++ b/docs/guides/concepts/404-page-behavior.html @@ -15,7 +15,7 @@ - + @@ -110,7 +110,7 @@

Conclusion

- Edit this page + Edit this page
diff --git a/docs/guides/concepts/dll-handling.html b/docs/guides/concepts/dll-handling.html index 4b07886ec..3ad4cd443 100644 --- a/docs/guides/concepts/dll-handling.html +++ b/docs/guides/concepts/dll-handling.html @@ -15,7 +15,7 @@ - + @@ -104,7 +104,7 @@

Oqtane Concepts: DLL Handling

- Edit this page + Edit this page
diff --git a/docs/guides/concepts/index.html b/docs/guides/concepts/index.html index 37491bb68..321598a13 100644 --- a/docs/guides/concepts/index.html +++ b/docs/guides/concepts/index.html @@ -15,7 +15,7 @@ - + @@ -92,11 +92,12 @@

Oqtane Concepts

  • 404 Page Behavior
  • Feel free to dive deeper into these topics by following the provided links!

    +

    ← Back to Documentation Guides Home Page

    - Edit this page + Edit this page
    diff --git a/docs/guides/database-management/assets/placeholder.html b/docs/guides/database-management/assets/placeholder.html new file mode 100644 index 000000000..8422af920 --- /dev/null +++ b/docs/guides/database-management/assets/placeholder.html @@ -0,0 +1,114 @@ + + + + + | Oqtane Docs - APIs and more for the Modular Blazor Application Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    + + +
    + + + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/docs/guides/database-management/best-practices.html b/docs/guides/database-management/best-practices.html new file mode 100644 index 000000000..c42e5c3db --- /dev/null +++ b/docs/guides/database-management/best-practices.html @@ -0,0 +1,208 @@ + + + + + Best Practices for Oqtane Development | Oqtane Docs - APIs and more for the Modular Blazor Application Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +

    Best Practices for Oqtane Development

    + +

    This guide provides essential best practices for developing and maintaining an Oqtane-based application. By following these guidelines, you can ensure a more efficient, scalable, and secure development experience.

    +

    1. Organize Your Modules and Themes

    +

    1.1 Modular Design

    +

    Oqtane follows a modular architecture that enables you to extend its functionality by creating custom modules. When developing a new feature, it's recommended to:

    +
      +
    • Keep features encapsulated in their own modules for easier maintenance.
    • +
    • Follow the single responsibility principle: each module should focus on one area of functionality.
    • +
    +

    1.2 Consistent Theme Structure

    +

    Themes are essential for the visual look of your application. Follow these practices for managing themes:

    +
      +
    • Use a consistent folder structure for assets (CSS, images, scripts).
    • +
    • Separate core theme styles from custom modifications.
    • +
    • Maintain responsive design practices to ensure compatibility across devices.
    • +
    +

    2. Secure Your Application

    +

    2.1 Use Secure Communication (SSL/TLS)

    +

    Always use SSL/TLS for your Oqtane application, especially for production environments. This ensures secure communication between clients and servers.

    +
      +
    • Set up HTTPS for your web application.
    • +
    • Use strong certificates and avoid using expired or self-signed certificates in production.
    • +
    +

    2.2 Secure User Authentication

    +

    Make sure to implement strong authentication practices:

    +
      +
    • Use two-factor authentication (2FA) for administrative accounts.
    • +
    • Regularly review and update user roles and permissions.
    • +
    • Implement password strength policies and encourage users to update their passwords periodically.
    • +
    +

    2.3 Protect Sensitive Data

    +

    When dealing with sensitive data, ensure encryption and secure storage:

    +
      +
    • Encrypt sensitive data both at rest and in transit.
    • +
    • Use secure storage solutions for user credentials, such as hashing algorithms for passwords.
    • +
    +

    3. Optimize Performance

    +

    3.1 Enable Caching

    +

    Enable caching where appropriate to improve the performance of your Oqtane site:

    +
      +
    • Use the built-in caching mechanisms in Oqtane to store static content.
    • +
    • Cache database queries and frequently accessed data to reduce load on the server.
    • +
    +

    3.2 Optimize Database Queries

    +

    Efficient database interactions are key to performance:

    +
      +
    • Avoid complex queries that may impact performance.
    • +
    • Regularly review the database schema to ensure it is optimized for the queries it serves.
    • +
    +

    3.3 Minimize Frontend Asset Size

    +

    Minimize the size of your frontend assets:

    +
      +
    • Use minified versions of CSS and JavaScript files.
    • +
    • Combine smaller CSS and JS files into single files to reduce HTTP requests.
    • +
    +

    4. Maintainable Code and Version Control

    +

    4.1 Use Version Control (Git)

    +

    Make sure your codebase is under version control, and follow these best practices:

    +
      +
    • Create meaningful commit messages.
    • +
    • Use feature branches for new development and keep the main branch stable.
    • +
    +

    4.2 Code Reviews

    +

    Before merging new features or changes, perform code reviews:

    +
      +
    • Review for code quality, consistency, and adherence to Oqtane best practices.
    • +
    • Test the code in different environments (development, staging, production).
    • +
    +

    5. Backup and Recovery Strategy

    +

    5.1 Regular Backups

    +

    Create regular backups for your Oqtane application, including:

    +
      +
    • The application files and configuration.
    • +
    • The database, especially before and after migrations.
    • +
    +

    5.2 Disaster Recovery Plan

    +

    Develop a disaster recovery plan that includes:

    +
      +
    • Restoring the application from a backup.
    • +
    • Handling server outages or data corruption.
    • +
    +

    6. Documentation and Knowledge Sharing

    +

    6.1 Maintain Clear Documentation

    +

    Ensure that your code and processes are well-documented:

    +
      +
    • Write clear documentation for custom modules, themes, and configuration settings.
    • +
    • Update documentation regularly to reflect changes in functionality.
    • +
    +

    6.2 Share Knowledge with Your Team

    +

    Encourage team collaboration by:

    +
      +
    • Sharing best practices and lessons learned with other developers.
    • +
    • Maintaining an internal knowledge base for troubleshooting and solutions.
    • +
    + +
    + + + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/docs/guides/database-management/database-schema.html b/docs/guides/database-management/database-schema.html new file mode 100644 index 000000000..e96d33827 --- /dev/null +++ b/docs/guides/database-management/database-schema.html @@ -0,0 +1,2306 @@ + + + + + Oqtane Schema Documentation - Version 6.0.0 | Oqtane Docs - APIs and more for the Modular Blazor Application Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +

    Oqtane Schema Documentation - Version 6.0.0

    + +

    Table of Contents

    + +

    Enums

    +

    LogFunction Enum

    +

    The LogFunction enum categorizes log entries based on the type of operation being performed.

    +
      +
    • Create: Logs when a new entity is created.
    • +
    • Read: Logs when an entity is read.
    • +
    • Update: Logs when an entity is updated.
    • +
    • Delete: Logs when an entity is deleted.
    • +
    • Security: Logs security-related activities.
    • +
    • Other: Logs other activities not covered by the above.
    • +
    +

    Example:

    +
    LogFunction logFunction = LogFunction.Create;
    +
    +
    +

    LogLevel Enum

    +

    The LogLevel enum sets the verbosity level for log entries. Higher levels indicate more severe messages.

    +
      +
    • Trace: Detailed information for troubleshooting.
    • +
    • Debug: Debugging information for development purposes.
    • +
    • Information: Standard informational logs.
    • +
    • Warning: Warnings about potential issues.
    • +
    • Error: Logs errors that indicate a problem.
    • +
    • Critical: Critical errors requiring immediate attention.
    • +
    • None: No logging. +Description: This enum is used to set the level of verbosity for log entries. The higher the level, the more severe the message.
    • +
    +

    Example:

    +
    LogLevel logLevel = LogLevel.Error;
    +
    +
    +

    MigrationType Enum

    +

    The MigrationType enum specifies whether to apply or roll back database changes during migration.

    +
      +
    • Up: Migrating database schema upwards (applying changes).
    • +
    • Down: Rolling back database schema changes.
    • +
    +

    Example:

    +
    MigrationType migrationType = MigrationType.Up;
    +
    +
    +

    ResourceDeclaration Enum (Deprecated)

    +

    Description: This enum was used to define whether a resource (like a script or stylesheet) is declared at a local or global level. It is now deprecated and should not be used.

    +
      +
    • Local: Resource is declared at the local level (specific to the current scope).
    • +
    • Global: Resource is available globally across the application.
    • +
    +

    Note: Use ResourceLevel enum instead for specifying resource scope.

    +
    +

    ResourceLevel Enum

    +

    The ResourceLevel enum specifies the scope of a resource's availability, determining the context in which a resource is accessible.

    +
      +
    • Undefined: Resource level is not specified.
    • +
    • Site: Resource is associated with a specific site.
    • +
    • Page: Resource is associated with a specific page.
    • +
    • Module: Resource is associated with a specific module.
    • +
    +

    Example:

    +
    ResourceLevel resourceLevel = ResourceLevel.Page;
    +
    +
    +

    ResourceLocation Enum

    +

    The ResourceLocation enum specifies whether a resource (such as a script or CSS file) should be loaded in the <head> or <body> of an HTML document.

    +
      +
    • Head: Resource is placed in the <head> section.
    • +
    • Body: Resource is placed just before the closing </body> tag.
    • +
    +

    Example:

    +
    ResourceLocation resourceLocation = ResourceLocation.Head;
    +
    +
    +

    ResourceType Enum

    +

    The ResourceType enum defines the type of resource, which can either be a CSS file or a JavaScript file.

    +
      +
    • Stylesheet: Resource is a CSS stylesheet.
    • +
    • Script: Resource is a JavaScript script.
    • +
    +

    Example:

    +
    ResourceType resourceType = ResourceType.Stylesheet;
    +
    +
    +

    Runtime Enum

    +

    The Runtime enum specifies the runtime environment of the application, helping determine the appropriate execution context.

    +
      +
    • Server: Application is running on the server.
    • +
    • WebAssembly: Application is running in the WebAssembly environment (browser).
    • +
    • Auto: Automatically detects the runtime environment.
    • +
    • Hybrid: Supports both server and WebAssembly environments.
    • +
    +

    Example:

    +
    Runtime runtime = Runtime.Server;
    +
    +
    +

    SearchSortField Enum

    +

    The SearchSortField enum specifies the sorting order for search results, allowing control based on relevance, title, or last modified timestamp.

    +
      +
    • Relevance: Sort results by relevance to the search query.
    • +
    • Title: Sort results by the resource title.
    • +
    • LastModified: Sort results by the last modified date.
    • +
    +

    Example:

    +
    SearchSortField sortField = SearchSortField.Relevance;
    +
    +
    +

    SearchSortOrder Enum

    +

    The SearchSortOrder enum defines whether the search results should be sorted in ascending or descending order.

    +
      +
    • Ascending: Sort in ascending order.
    • +
    • Descending: Sort in descending order.
    • +
    +

    Example:

    +
    SearchSortOrder sortOrder = SearchSortOrder.Ascending;
    +
    +
    +

    SecurityAccessLevel Enum

    +

    The SecurityAccessLevel enum controls the level of access a user has in the system, ranging from no access (Anonymous) to full administrative or host access.

    +
      +
    • Anonymous: No authentication required; accessible by everyone.
    • +
    • View: Users can view content.
    • +
    • Edit: Users can edit content.
    • +
    • Admin: Users have administrative privileges.
    • +
    • Host: Users have host-level access (highest privilege).
    • +
    +

    Example:

    +
    SecurityAccessLevel accessLevel = SecurityAccessLevel.Admin;
    +
    +
    +

    Notes:

    +
      +
    • These enums are critical for managing various functionalities in the Oqtane framework, such as logging, resource management, security, and search sorting.
    • +
    • The ResourceDeclaration enum is marked as obsolete and should no longer be used in new development.
    • +
    +
    +

    Models

    +
    +

    Alias Model

    +

    The Alias model represents an alias for a site within the Oqtane framework.

    +

    Properties:

    +
      +
    • AliasId: Primary key used for internal site identification.
    • +
    • Name: The alias name, representing the URL (e.g., oqtane.me or oqtane.me/products).
    • +
    • TenantId: Foreign key referencing the Tenant to which the alias belongs.
    • +
    • SiteId: Foreign key referencing the Site to which the alias belongs.
    • +
    • IsDefault: Indicates whether this alias is the default for the Tenant/Site.
    • +
    • Path: Extracted from the URL to provide the part after the first slash, used for routing.
    • +
    • SiteKey: Combines TenantId and SiteId to create a unique identifier for the site.
    • +
    • Protocol: Defines the protocol (e.g., http:// or https://) for accessing the alias.
    • +
    • BaseUrl: Base URL for static resources, typically for remote clients.
    • +
    +

    Example Usage:

    +
    var alias = new Alias
    +{
    +    AliasId = 1,
    +    Name = "oqtane.me",
    +    TenantId = 1,
    +    SiteId = 1,
    +    IsDefault = true
    +};
    +
    +// Access the Path property
    +string path = alias.Path; // returns ""
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added primary properties for AliasId, Name, TenantId, SiteId, and IsDefault.
    • +
    • Enhancement: Added Path property to extract the URL part after the first slash.
    • +
    • Update: Introduced SiteKey and Protocol properties for better identification and request handling.
    • +
    • Refinement: Added BaseUrl property for accessing static resources.
    • +
    +
    +

    Culture Model

    +

    The Culture model represents a culture used within the Oqtane framework.

    +

    Properties:

    +
      +
    • Name: The culture's short code (e.g., en or en-US).
    • +
    • DisplayName: The friendly display name of the culture (e.g., English (United States)).
    • +
    • IsDefault: Indicates if this culture is the default for the system (currently unverified).
    • +
    +

    Example Usage:

    +
    var culture = new Culture
    +{
    +    Name = "en-US",
    +    DisplayName = "English (United States)",
    +    IsDefault = true
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Defined primary properties for Name, DisplayName, and IsDefault.
    • +
    +
    +

    Database Model

    +

    The Database model represents a database configuration within the Oqtane framework.

    +

    Properties:

    +
      +
    • Name: The name of the database.
    • +
    • ControlType: The UI control used to configure the database (e.g., SqlServerConfig).
    • +
    • DBType: The full namespace of the database type (e.g., SqlServerDatabase).
    • +
    • IsDefault: A flag indicating whether this database is the default database provider.
    • +
    +

    Example Usage:

    +
    var database = new Database
    +{
    +    Name = "OqtaneDB",
    +    ControlType = "Oqtane.Installer.Controls.SqlServerConfig, Oqtane.Client",
    +    DBType = "Oqtane.Database.SqlServer.SqlServerDatabase, Oqtane.Database.SqlServer",
    +    IsDefault = true
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Name, ControlType, DBType, and IsDefault.
    • +
    +
    +

    ExternalLoginProvider Model

    +

    The ExternalLoginProvider model represents an external login provider within the Oqtane framework.

    +

    Properties:

    +
      +
    • Name: The name of the external login provider (e.g., Google, Facebook).
    • +
    • Settings: A dictionary of key-value pairs for the provider's configuration settings.
    • +
    +

    Example Usage:

    +
    var externalLoginProvider = new ExternalLoginProvider
    +{
    +    Name = "Google",
    +    Settings = new Dictionary<string, string>
    +    {
    +        {"ClientId", "your-client-id"},
    +        {"ClientSecret", "your-client-secret"}
    +    }
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Defined properties for Name and Settings.
    • +
    +
    +

    File Model

    +

    The File model represents a file within the Oqtane framework.

    +

    Properties:

    +
      +
    • FileId: Primary identifier for the file.
    • +
    • FolderId: Foreign key referencing the folder the file belongs to.
    • +
    • Name: The name of the file.
    • +
    • Extension: File extension (e.g., 'jpg'), lowercase and without the dot.
    • +
    • Size: File size in bytes.
    • +
    • ImageHeight: Height of the image in pixels.
    • +
    • ImageWidth: Width of the image in pixels.
    • +
    • Description: Description of the file.
    • +
    • IsDeleted: Flag indicating if the file is marked as deleted (deprecated, not used).
    • +
    • Folder: Reference to the Folder object, used to determine the site the file belongs to.
    • +
    • Url: URL for accessing the file.
    • +
    +

    Example Usage:

    +
    var file = new File
    +{
    +    FileId = 1,
    +    FolderId = 10,
    +    Name = "example.jpg",
    +    Extension = "jpg",
    +    Size = 2048,
    +    ImageHeight = 1080,
    +    ImageWidth = 1920,
    +    Description = "An example image file",
    +    IsDeleted = false,
    +    Url = "/files/example.jpg"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial creation of File model.
    • +
    • Added properties for image dimensions.
    • +
    • Deprecated IsDeleted property.
    • +
    +
    +

    Folder Model

    +

    The Folder model represents a folder within the Oqtane framework.

    +

    Properties:

    +
      +
    • FolderId: Primary identifier for the folder.
    • +
    • SiteId: Foreign key referencing the site the folder belongs to.
    • +
    • ParentId: Foreign key referencing the parent folder, if any.
    • +
    • Type: Type of the folder based on predefined folder types.
    • +
    • Name: The name of the folder.
    • +
    • Path: Path to the folder.
    • +
    • Order: Sorting order of the folder.
    • +
    • ImageSizes: List of image sizes that can be generated from uploaded images.
    • +
    • Capacity: Maximum capacity of the folder in bytes.
    • +
    • IsSystem: Indicates if the folder is a system folder.
    • +
    • IsDeleted: Deprecated flag indicating if the folder is marked as deleted.
    • +
    • PermissionList: List of permissions for the folder.
    • +
    • Level: Depth level of the folder in the hierarchy.
    • +
    • HasChildren: Indicates if the folder has sub-items.
    • +
    • Permissions: Deprecated property for folder permissions (use PermissionList instead).
    • +
    +

    Example Usage:

    +
    var folder = new Folder
    +{
    +    FolderId = 1,
    +    SiteId = 1,
    +    ParentId = null,
    +    Type = "Documents",
    +    Name = "Project Files",
    +    Path = "/project-files",
    +    Order = 1,
    +    ImageSizes = "200x200,x200,200x",
    +    Capacity = 10485760,
    +    IsSystem = false,
    +    IsDeleted = false,
    +    PermissionList = new List<Permission>(),
    +    Level = 0,
    +    HasChildren = true
    +};
    +
    +// Accessing properties
    +string folderName = folder.Name; // returns "Project Files"
    +int folderCapacity = folder.Capacity; // returns 10485760 (10 MB)
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added primary properties for FolderId, SiteId, ParentId, Type, Name, Path, Order, ImageSizes, Capacity, IsSystem, and IsDeleted.
    • +
    • Enhancement: Added PermissionList, Level, and HasChildren properties.
    • +
    • Update: Deprecated the Permissions property and provided a replacement with PermissionList.
    • +
    +
    +

    Installation Model

    +

    The Installation model represents the result of an installation attempt within the Oqtane framework.

    +
      +
    • Success: Boolean flag indicating whether the installation was successful.
    • +
    • Message: Message or error description in case something failed.
    • +
    • Alias: Current alias value retrieved from the server during installation.
    • +
    +

    Example Usage:

    +
    var installation = new Installation
    +{
    +    Success = true,
    +    Message = "Installation completed successfully.",
    +    Alias = new Alias { AliasId = 1, Name = "oqtane.me", TenantId = 1, SiteId = 1 }
    +};
    +
    +// Accessing properties
    +bool isSuccess = installation.Success; // returns true
    +string installMessage = installation.Message; // returns "Installation completed successfully."
    +Alias installAlias = installation.Alias; // returns Alias object
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added primary properties for Success, Message, and Alias.
    • +
    +
    +

    Job Model

    +

    The Job model represents a scheduled task within the Oqtane framework.

    +
      +
    • JobId: Internal ID of the job.
    • +
    • Name: Name for simple identification.
    • +
    • JobType: Type of job.
    • +
    • Frequency: Unit used to define how often the job should run (e.g., 'm' for minutes, 'H' for hours).
    • +
    • Interval: How often the job should run, in conjunction with Frequency.
    • +
    • StartDate: When the job is to be run for the first time.
    • +
    • EndDate: When the job is to be run for the last time.
    • +
    • IsEnabled: Indicates if the job is activated/enabled.
    • +
    • IsStarted: Indicates if the job has ever started running.
    • +
    • IsExecuting: Indicates if the job is currently executing.
    • +
    • NextExecution: When the job will run next.
    • +
    • RetentionHistory: (Todo: Document the purpose of this property).
    • +
    +

    Example Usage:

    +
    var job = new Job
    +{
    +    JobId = 1,
    +    Name = "Daily Backup",
    +    JobType = "Backup",
    +    Frequency = "H",
    +    Interval = 24,
    +    StartDate = DateTime.Now,
    +    EndDate = DateTime.Now.AddYears(1),
    +    IsEnabled = true,
    +    IsStarted = false,
    +    IsExecuting = false,
    +    NextExecution = DateTime.Now.AddHours(24),
    +    RetentionHistory = 30
    +};
    +
    +// Accessing properties
    +bool isEnabled = job.IsEnabled; // returns true
    +DateTime? nextExecution = job.NextExecution; // returns the next execution time
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added primary properties for JobId, Name, JobType, Frequency, Interval, StartDate, EndDate, IsEnabled, IsStarted, IsExecuting, and NextExecution.
    • +
    • Enhancement: Added RetentionHistory property.
    • +
    +
    +

    JobLog Model

    +

    The JobLog model represents a record of a job execution within the Oqtane framework.

    +
      +
    • JobLogId: Internal ID of the job log.
    • +
    • JobId: Reference to the job that was run.
    • +
    • StartDate: Timestamp when the job started.
    • +
    • FinishDate: Timestamp when the job ended.
    • +
    • Succeeded: Indicates whether the job succeeded.
    • +
    • Notes: Additional protocol information left after the job ran.
    • +
    • Job: Reference to the job, though it's not clear if this is always populated.
    • +
    +

    Example Usage:

    +
    var jobLog = new JobLog
    +{
    +    JobLogId = 1,
    +    JobId = 100,
    +    StartDate = DateTime.Now,
    +    FinishDate = DateTime.Now.AddMinutes(30),
    +    Succeeded = true,
    +    Notes = "Backup completed successfully.",
    +    Job = new Job { JobId = 100, Name = "Daily Backup" }
    +};
    +
    +// Accessing properties
    +bool? succeeded = jobLog.Succeeded; // returns true
    +string logNotes = jobLog.Notes; // returns "Backup completed successfully."
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added primary properties for JobLogId, JobId, StartDate, FinishDate, Succeeded, Notes, and Job.
    • +
    +
    +

    For the database-schema.md file, you can simplify the documentation to make it concise and focused on essential details. Here’s an example of how you might document the Language model without the full class definition:

    +
    +

    Language Model

    +

    The Language model provides information about languages used on different sites within the Oqtane framework.

    +

    Properties:

    +
      +
    • LanguageId: Internal ID for the language.
    • +
    • SiteId: Nullable reference to a Site. Not all languages need to be linked to a specific site, hence the property is nullable.
    • +
    • Code: Language/Culture code (e.g., 'en-US') corresponding to Culture.Name.
    • +
    • IsDefault: Indicates if this is the default language for a site.
    • +
    • Name: (Not Mapped) Language name corresponding to Culture.DisplayName, not Culture.Name.
    • +
    • Version: (Not Mapped) Version of the satellite assembly.
    • +
    +

    Example Usage:

    +
    var language = new Language
    +{
    +    LanguageId = 1,
    +    SiteId = 100,
    +    Code = "en-US",
    +    IsDefault = true,
    +    Name = "English (United States)",
    +    Version = "1.0.0"
    +};
    +
    +// Cloning the language object
    +var clonedLanguage = language.Clone();
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added primary properties for LanguageId, SiteId, Code, IsDefault, Name, and Version.
    • +
    • Enhancement: Added Clone method for creating copies of the Language object.
    • +
    +
    +

    Log Model

    +

    The Log model represents an entry in the events log within the Oqtane framework.

    +

    Properties:

    +
      +
    • LogId: Internal ID of the log entry.
    • +
    • SiteId: Nullable reference to the Site related to this log entry.
    • +
    • LogDate: Timestamp when the log entry was created.
    • +
    • PageId: Nullable reference to the Page related to this log entry.
    • +
    • ModuleId: Nullable reference to the Module related to this log entry.
    • +
    • UserId: Nullable reference to the User related to this log entry.
    • +
    • Url: URL relevant to this log entry, if applicable.
    • +
    • Server: Name of the server that created this entry.
    • +
    • Category: Usually the full type name related to the log entry.
    • +
    • Feature: Feature associated with this log entry.
    • +
    • Function: Function or method associated with this log entry.
    • +
    • Level: Log level or severity of the log entry.
    • +
    • Message: Log message.
    • +
    • MessageTemplate: Template used for the log message.
    • +
    • Exception: Information about any exceptions raised.
    • +
    • Properties: Additional properties or metadata related to the log entry.
    • +
    +

    Example Usage:

    +
    var log = new Log
    +{
    +    LogId = 1,
    +    SiteId = 10,
    +    LogDate = DateTime.Now,
    +    PageId = 20,
    +    ModuleId = 30,
    +    UserId = 40,
    +    Url = "https://example.com",
    +    Server = "Server1",
    +    Category = "Oqtane.Pages.PageController",
    +    Feature = "PageLoad",
    +    Function = "GetPage",
    +    Level = "Error",
    +    Message = "An error occurred while loading the page.",
    +    MessageTemplate = "Error loading page {PageId}",
    +    Exception = "NullReferenceException",
    +    Properties = "Additional context or metadata"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added primary properties for LogId, SiteId, LogDate, PageId, ModuleId, UserId, Url, Server, Category, Feature, Function, Level, Message, MessageTemplate, Exception, and Properties.
    • +
    +
    +

    MigrationHistoryTable Model

    +

    The MigrationHistoryTable model provides information about the migration history table used for tracking database migrations within the Oqtane framework.

    +

    Properties:

    +
      +
    • TableName: Name of the migration history table.
    • +
    • TableSchema: Schema of the migration history table.
    • +
    • MigrationIdColumnName: Column name for the migration ID.
    • +
    • ProductVersionColumnName: Column name for the product version.
    • +
    • AppliedVersionColumnName: Column name for the applied version.
    • +
    • AppliedDateColumnName: Column name for the date when the migration was applied.
    • +
    +

    Example Usage:

    +
    var migrationHistoryTable = new MigrationHistoryTable
    +{
    +    TableName = "MigrationHistory",
    +    TableSchema = "dbo",
    +    MigrationIdColumnName = "MigrationId",
    +    ProductVersionColumnName = "ProductVersion",
    +    AppliedVersionColumnName = "AppliedVersion",
    +    AppliedDateColumnName = "AppliedDate"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for TableName, TableSchema, MigrationIdColumnName, ProductVersionColumnName, AppliedVersionColumnName, and AppliedDateColumnName.
    • +
    +
    +

    ModelBase Class

    +

    The ModelBase class is a base class for other models, providing common auditing properties.

    +

    Properties:

    +
      +
    • CreatedBy: The username or identifier of the user who created the record.
    • +
    • CreatedOn: The timestamp when the record was created.
    • +
    • ModifiedBy: The username or identifier of the user who last modified the record.
    • +
    • ModifiedOn: The timestamp when the record was last modified.
    • +
    +

    Example Usage:

    +
    public class ExampleModel : ModelBase
    +{
    +    public int ExampleModelId { get; set; }
    +    public string Name { get; set; }
    +}
    +
    +var example = new ExampleModel
    +{
    +    ExampleModelId = 1,
    +    Name = "Sample",
    +    CreatedBy = "admin",
    +    CreatedOn = DateTime.UtcNow,
    +    ModifiedBy = "admin",
    +    ModifiedOn = DateTime.UtcNow
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for CreatedBy, CreatedOn, ModifiedBy, and ModifiedOn.
    • +
    +
    +

    Module Model

    +

    The Module model describes a module instance that will be shown on a page. This is different from a ModuleDefinition which describes the module itself.

    +

    Properties:

    +
      +
    • ModuleId: The ID of this instance.
    • +
    • SiteId: Reference to the Site.
    • +
    • ModuleDefinitionName: Reference to the ModuleDefinition.
    • +
    • AllPages: Determines if this module should be shown on all pages of the current Site.
    • +
    • ModuleDefinition: (Not Mapped) Reference to the ModuleDefinition used for this module.
    • +
    • DeletedBy: (Not Mapped) The user who deleted this module (if applicable).
    • +
    • DeletedOn: (Not Mapped) The timestamp when the module was deleted (if applicable).
    • +
    • IsDeleted: (Not Mapped) Indicates if the module is deleted.
    • +
    • PermissionList: (Not Mapped) List of permissions for this module.
    • +
    • Settings: (Not Mapped) List of settings for this module.
    • +
    • PageModuleId: (Not Mapped) The ID of the PageModule instance.
    • +
    • PageId: (Not Mapped) Reference to the Page this module is on.
    • +
    • Title: (Not Mapped) Title of the PageModule instance.
    • +
    • Pane: (Not Mapped) The pane where this PageModule instance will be injected on the page.
    • +
    • Order: (Not Mapped) The order of the PageModule instance within the pane.
    • +
    • ContainerType: (Not Mapped) The container for the PageModule instance.
    • +
    • EffectiveDate: (Not Mapped) Start of when this module is visible.
    • +
    • ExpiryDate: (Not Mapped) End of when this module is visible.
    • +
    • ModuleType: (Not Mapped) Stores the type name for the module component being rendered.
    • +
    • PaneModuleIndex: (Not Mapped) The position of the module instance in a pane.
    • +
    • PaneModuleCount: (Not Mapped) The number of modules in a pane.
    • +
    • RenderId: (Not Mapped) A unique ID to help determine if a component should be rendered.
    • +
    • SecurityAccessLevel: (Not Mapped) The minimum access level to view the component being rendered.
    • +
    • ControlTitle: (Not Mapped) An optional title for the component.
    • +
    • Actions: (Not Mapped) Optional mapping of URL actions to a component.
    • +
    • UseAdminContainer: (Not Mapped) Indicates if a component should not be rendered with the default modal admin container.
    • +
    • RenderMode: (Not Mapped) Optionally specify the render mode for the component (overrides the site setting).
    • +
    • Prerender: (Not Mapped) Optionally specify if the component should be prerendered (overrides the site setting).
    • +
    • Permissions: (Deprecated, Not Mapped) Use PermissionList instead.
    • +
    +

    Example Usage:

    +
    var module = new Module
    +{
    +    ModuleId = 1,
    +    SiteId = 2,
    +    ModuleDefinitionName = "TextModule",
    +    AllPages = false,
    +    PageModuleId = 10,
    +    PageId = 20,
    +    Title = "Sample Module",
    +    Pane = "ContentPane",
    +    Order = 1,
    +    ContainerType = "Default",
    +    EffectiveDate = DateTime.Now,
    +    ExpiryDate = DateTime.Now.AddYears(1),
    +    DeletedBy = null,
    +    DeletedOn = null,
    +    IsDeleted = false,
    +    ModuleType = "Oqtane.Modules.Text.TextModule",
    +    PaneModuleIndex = 0,
    +    PaneModuleCount = 1,
    +    RenderId = Guid.NewGuid(),
    +    SecurityAccessLevel = SecurityAccessLevel.View,
    +    ControlTitle = "Text Module",
    +    Actions = "View;Edit",
    +    UseAdminContainer = true,
    +    RenderMode = "Server",
    +    Prerender = false,
    +    PermissionList = new List<Permission>(),
    +    Settings = new Dictionary<string, string>()
    +};
    +
    +// Cloning the module object
    +var clonedModule = module.Clone();
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added primary properties for ModuleId, SiteId, ModuleDefinitionName, AllPages, DeletedBy, DeletedOn, IsDeleted, PermissionList, Settings, PageModuleId, PageId, Title, Pane, Order, ContainerType, EffectiveDate, ExpiryDate, ModuleType, PaneModuleIndex, PaneModuleCount, RenderId, SecurityAccessLevel, ControlTitle, Actions, UseAdminContainer, RenderMode, and Prerender.
    • +
    • Enhancement: Added Clone method for creating copies of the Module object.
    • +
    +
    +

    ModuleContent Model

    +

    The ModuleContent model is used for enabling import/export of module data within the Oqtane framework.

    +

    Properties:

    +
      +
    • ModuleDefinitionName: Reference to the ModuleDefinition for which this content is relevant.
    • +
    • Version: Version of the ModuleDefinition used, not the version of the content.
    • +
    • Content: Serialized content of the module for import/export.
    • +
    +

    Example Usage:

    +
    var moduleContent = new ModuleContent
    +{
    +    ModuleDefinitionName = "TextModule",
    +    Version = "1.0.0",
    +    Content = "{\"Text\":\"Hello, world!\"}"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for ModuleDefinitionName, Version, and Content.
    • +
    +
    +

    ModuleDefinition Model

    +

    The ModuleDefinition model describes a module type in Oqtane. The available modules are determined at startup.

    +

    Properties:

    +
      +
    • ModuleDefinitionId: Reference to the ModuleDefinition.
    • +
    • ModuleDefinitionName: Name of the ModuleDefinition.
    • +
    • Name: Friendly name to show in the UI.
    • +
    • Description: Module description for admin dialogs.
    • +
    • Categories: Categories this module will be shown in (in the admin dialogs).
    • +
    • Version: Version information of this module based on the DLL / NuGet package.
    • +
    • Owner: (Not Mapped) Owner of the module.
    • +
    • Url: (Not Mapped) URL for more information about the module.
    • +
    • Contact: (Not Mapped) Contact information for the module.
    • +
    • License: (Not Mapped) License information for the module.
    • +
    • Runtimes: (Not Mapped) Supported runtimes for the module.
    • +
    • Dependencies: (Not Mapped) Dependencies required for the module.
    • +
    • PermissionNames: (Not Mapped) Names of permissions associated with the module.
    • +
    • ServerManagerType: (Not Mapped) Type of the server manager for the module.
    • +
    • ControlTypeRoutes: (Not Mapped) Routes for the control types used by the module.
    • +
    • ReleaseVersions: (Not Mapped) Comma-delimited list of all official release versions of the module (e.g., "1.0.0,1.0.1").
    • +
    • DefaultAction: (Not Mapped) Default action for the module.
    • +
    • SettingsType: (Not Mapped) Type of settings used by the module (added in 2.0.2).
    • +
    • PackageName: (Not Mapped) Package name of the module (added in 2.1.0).
    • +
    • Resources: (Not Mapped) List of resources used by the module (added in 4.0.0).
    • +
    • IsAutoEnabled: (Not Mapped) Indicates if the module is auto-enabled (added in 4.0.0).
    • +
    • PageTemplates: (Not Mapped) List of page templates associated with the module (added in 4.0.0).
    • +
    • SiteId: (Not Mapped) Internal property for the site ID.
    • +
    • IsEnabled: (Not Mapped) Indicates if the module is enabled.
    • +
    • ControlTypeTemplate: (Not Mapped) Template for the control type.
    • +
    • AssemblyName: (Not Mapped) Assembly name of the module.
    • +
    • PermissionList: (Not Mapped) List of permissions associated with the module.
    • +
    • Template: (Not Mapped) Template used by the module.
    • +
    • IsPortable: (Not Mapped) Indicates if the module is portable.
    • +
    • Permissions: (Deprecated, Not Mapped) Use PermissionList instead.
    • +
    +

    Example Usage:

    +
    var moduleDefinition = new ModuleDefinition
    +{
    +    ModuleDefinitionId = 1,
    +    ModuleDefinitionName = "TextModule",
    +    Name = "Text Module",
    +    Description = "A module for displaying text content.",
    +    Categories = "Content",
    +    Version = "1.0.0",
    +    Owner = "Oqtane",
    +    Url = "https://oqtane.org",
    +    Contact = "support@oqtane.org",
    +    License = "MIT",
    +    Runtimes = "netcoreapp3.1",
    +    Dependencies = "Oqtane.Modules.Text",
    +    PermissionNames = "View;Edit",
    +    ServerManagerType = "Oqtane.Modules.Text.ServerManager",
    +    ControlTypeRoutes = "View;Edit",
    +    ReleaseVersions = "1.0.0",
    +    DefaultAction = "View",
    +    SettingsType = "Oqtane.Modules.Text.Settings",
    +    PackageName = "Oqtane.Modules.Text",
    +    Resources = new List<Resource>(),
    +    IsAutoEnabled = true,
    +    PageTemplates = new List<PageTemplate>(),
    +    SiteId = 1,
    +    IsEnabled = true,
    +    ControlTypeTemplate = "Oqtane.Modules.Text.Template",
    +    AssemblyName = "Oqtane.Modules.Text",
    +    PermissionList = new List<Permission>(),
    +    Template = "Default",
    +    IsPortable = true
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added primary properties for ModuleDefinitionId, ModuleDefinitionName, Name, Description, Categories, Version, Owner, Url, Contact, License, Runtimes, Dependencies, PermissionNames, ServerManagerType, ControlTypeRoutes, ReleaseVersions, DefaultAction, SettingsType, PackageName, Resources, IsAutoEnabled, PageTemplates, SiteId, IsEnabled, ControlTypeTemplate, AssemblyName, PermissionList, Template, and IsPortable.
    • +
    • Enhancement: Added Permissions property as deprecated and provided PermissionList as a replacement.
    • +
    +
    +

    Notification Model

    +

    The Notification model represents a notification for a user, usually meant to be sent as an email.

    +

    Properties:

    +
      +
    • NotificationId: Internal ID.
    • +
    • SiteId: Reference to the Site on which the notification was created.
    • +
    • FromUserId: Nullable ID of the user who created the notification.
    • +
    • FromDisplayName: Display name of the creator.
    • +
    • FromEmail: Email address of the creator.
    • +
    • ToUserId: Nullable ID of the recipient user (can be null if the recipient is not a user).
    • +
    • ToDisplayName: Display name of the recipient.
    • +
    • ToEmail: Email address of the recipient.
    • +
    • ParentId: Nullable reference to an optional parent Notification in case of a thread with reply messages.
    • +
    • Subject: Subject of the notification.
    • +
    • Body: Body/content of the notification.
    • +
    • CreatedOn: Timestamp when the notification was created.
    • +
    • IsDelivered: Indicates whether the notification has been delivered.
    • +
    • DeliveredOn: Nullable timestamp when the notification was delivered.
    • +
    • DeletedBy: User who deleted the notification (if applicable).
    • +
    • DeletedOn: Nullable timestamp when the notification was deleted.
    • +
    • IsDeleted: Indicates whether the notification is deleted.
    • +
    • SendOn: Nullable timestamp when the notification should be sent.
    • +
    • IsRead: Indicates whether the notification has been read.
    • +
    +

    Example Usage:

    +
    var notification = new Notification
    +{
    +    NotificationId = 1,
    +    SiteId = 1,
    +    FromUserId = 2,
    +    FromDisplayName = "Admin",
    +    FromEmail = "admin@example.com",
    +    ToUserId = 3,
    +    ToDisplayName = "User",
    +    ToEmail = "user@example.com",
    +    Subject = "Welcome to Oqtane",
    +    Body = "Hello, welcome to Oqtane!",
    +    CreatedOn = DateTime.UtcNow,
    +    IsDelivered = false,
    +    SendOn = DateTime.UtcNow.AddHours(1)
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for NotificationId, SiteId, FromUserId, FromDisplayName, FromEmail, ToUserId, ToDisplayName, ToEmail, ParentId, Subject, Body, CreatedOn, IsDelivered, DeliveredOn, DeletedBy, DeletedOn, IsDeleted, SendOn, and IsRead.
    • +
    +
    +

    Package Model

    +

    The Package model represents a software package for installation within the Oqtane framework.

    +

    Properties:

    +
      +
    • PackageId: ID of the package, usually constructed from the namespace.
    • +
    • Owner: Owner of the package.
    • +
    • OwnerUrl: URL for the owner of the package.
    • +
    • Name: Friendly name of the package.
    • +
    • Description: Description of the package.
    • +
    • LogoFileId: Nullable ID for the logo file.
    • +
    • LogoUrl: URL for the logo image.
    • +
    • License: License for the package.
    • +
    • ProductUrl: URL for the product.
    • +
    • Version: Version as defined in the NuGet package.
    • +
    • Downloads: Download count to show how popular the package is.
    • +
    • ReleaseDate: Date the package was released.
    • +
    • PackageUrl: Direct URL for downloading the package.
    • +
    • SupportUrl: Direct URL for getting support for the package.
    • +
    • Vulnerabilities: Indicates if any known security vulnerabilities exist.
    • +
    • Price: (Commercial) Nullable price of the package.
    • +
    • PaymentUrl: (Commercial) URL for purchasing the package.
    • +
    • TrialPeriod: (Commercial) Trial period in days.
    • +
    • ExpiryDate: (Commercial) Nullable expiry date of the package.
    • +
    +

    Example Usage:

    +
    var package = new Package
    +{
    +    PackageId = "Oqtane.Modules.Text",
    +    Owner = "Oqtane",
    +    OwnerUrl = "https://oqtane.org",
    +    Name = "Text Module",
    +    Description = "A module for displaying text content.",
    +    LogoFileId = null,
    +    LogoUrl = "https://oqtane.org/images/logo.png",
    +    License = "MIT",
    +    ProductUrl = "https://oqtane.org",
    +    Version = "1.0.0",
    +    Downloads = 1000,
    +    ReleaseDate = DateTime.UtcNow,
    +    PackageUrl = "https://oqtane.org/downloads/textmodule.zip",
    +    SupportUrl = "https://oqtane.org/support",
    +    Vulnerabilities = 0,
    +    Price = 0.0m,
    +    PaymentUrl = "https://oqtane.org/payment",
    +    TrialPeriod = 30,
    +    ExpiryDate = null
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for PackageId, Owner, OwnerUrl, Name, Description, LogoFileId, LogoUrl, License, ProductUrl, Version, Downloads, ReleaseDate, PackageUrl, SupportUrl, Vulnerabilities, Price, PaymentUrl, TrialPeriod, and ExpiryDate.
    • +
    +
    +

    Page Model

    +

    The Page model describes a page in Oqtane.

    +

    Properties:

    +
      +
    • PageId: ID of the page.
    • +
    • SiteId: Reference to the Site.
    • +
    • Path: Path of the page.
    • +
    • ParentId: Nullable reference to the parent Page, if it has one.
    • +
    • Name: Name of the page.
    • +
    • Title: Page title shown in the browser tab.
    • +
    • Order: Sort order in the list of sibling pages.
    • +
    • Url: Full URL to this page.
    • +
    • ThemeType: Reference to the Theme used to display this page.
    • +
    • DefaultContainerType: Reference to the container used for modules on this page.
    • +
    • HeadContent: Content to be included in the head of the page.
    • +
    • BodyContent: Content to be included in the body of the page.
    • +
    • Icon: Icon class name for this page.
    • +
    • IsNavigation: Indicates if this page should be included in the navigation menu.
    • +
    • IsClickable: Indicates if this page should be clickable in the navigation menu.
    • +
    • IsPersonalizable: Indicates if the page is personalizable, allowing users to create custom versions.
    • +
    • UserId: Nullable reference to the user who owns the personalized page.
    • +
    • EffectiveDate: Nullable start date of when this page is visible.
    • +
    • ExpiryDate: Nullable end date of when this page is visible.
    • +
    • Level: (Not Mapped) The hierarchical level of the page.
    • +
    • HasChildren: (Not Mapped) Indicates if the page has sub-pages.
    • +
    • PermissionList: (Not Mapped) List of permissions for this page.
    • +
    • Settings: (Not Mapped) List of settings for this page.
    • +
    • Panes: (Not Mapped) List of pane names for the theme assigned to this page.
    • +
    • Resources: (Not Mapped) List of resources (CSS, JS) needed to render this page properly.
    • +
    • DeletedBy: User who deleted the page (if applicable).
    • +
    • DeletedOn: Nullable timestamp when the page was deleted.
    • +
    • IsDeleted: Indicates if the page is deleted.
    • +
    • EditMode: (Deprecated, Not Mapped) Indicates if the page is in edit mode.
    • +
    • LayoutType: (Deprecated, Not Mapped) Layout type of the page.
    • +
    • Permissions: (Deprecated, Not Mapped) Use PermissionList instead.
    • +
    +

    Example Usage:

    +
    var page = new Page
    +{
    +    PageId = 1,
    +    SiteId = 1,
    +    Path = "home",
    +    ParentId = null,
    +    Name = "Home",
    +    Title = "Home Page",
    +    Order = 1,
    +    Url = "/home",
    +    ThemeType = "DefaultTheme",
    +    DefaultContainerType = "DefaultContainer",
    +    HeadContent = "<meta name=\"description\" content=\"Home page\">",
    +    BodyContent = "<div>Welcome to the home page!</div>",
    +    Icon = "home",
    +    IsNavigation = true,
    +    IsClickable = true,
    +    IsPersonalizable = false,
    +    UserId = null,
    +    EffectiveDate = DateTime.UtcNow,
    +    ExpiryDate = null,
    +    Level = 0,
    +    HasChildren = false,
    +    PermissionList = new List<Permission>(),
    +    Settings = new Dictionary<string, string>()
    +};
    +
    +// Cloning the page object
    +var clonedPage = page.Clone();
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for PageId, SiteId, Path, ParentId, Name, Title, Order, Url, ThemeType, DefaultContainerType, HeadContent, BodyContent, Icon, IsNavigation, IsClickable, IsPersonalizable, UserId, EffectiveDate, ExpiryDate, Level, HasChildren, PermissionList, Settings, Panes, Resources, DeletedBy, DeletedOn, IsDeleted, EditMode, LayoutType, and Permissions.
    • +
    • Enhancement: Added Clone method for creating copies of the Page object.
    • +
    +
    +

    PageModule Model

    +

    The PageModule model provides information about a Module instance on a Page.

    +

    Properties:

    +
      +
    • PageModuleId: Internal ID to identify this instance.
    • +
    • PageId: Reference to the Page.
    • +
    • ModuleId: Reference to the Module.
    • +
    • Title: Module title shown in the container if the container shows titles.
    • +
    • Pane: The pane in which this module instance appears.
    • +
    • Order: The sorting order or position in the pane where this module appears.
    • +
    • ContainerType: Reference to a Razor container that wraps this module instance.
    • +
    • EffectiveDate: Nullable start date of when this assignment is valid.
    • +
    • ExpiryDate: Nullable end date of when this assignment is valid.
    • +
    • DeletedBy: User who deleted the instance (if applicable).
    • +
    • DeletedOn: Nullable timestamp when the instance was deleted.
    • +
    • IsDeleted: Indicates if the instance is deleted.
    • +
    • Module: The Module itself.
    • +
    • Page: The Page itself.
    • +
    +

    Example Usage:

    +
    var pageModule = new PageModule
    +{
    +    PageModuleId = 1,
    +    PageId = 2,
    +    ModuleId = 3,
    +    Title = "Sample Module",
    +    Pane = "ContentPane",
    +    Order = 1,
    +    ContainerType = "DefaultContainer",
    +    EffectiveDate = DateTime.UtcNow,
    +    ExpiryDate = DateTime.UtcNow.AddYears(1),
    +    DeletedBy = null,
    +    DeletedOn = null,
    +    IsDeleted = false,
    +    Module = new Module { ModuleId = 3, SiteId = 1, ModuleDefinitionName = "TextModule" },
    +    Page = new Page { PageId = 2, SiteId = 1, Path = "home" }
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for PageModuleId, PageId, ModuleId, Title, Pane, Order, ContainerType, EffectiveDate, ExpiryDate, DeletedBy, DeletedOn, IsDeleted, Module, and Page.
    • +
    +
    +

    Permission Model

    +

    The Permission model provides information about permissions for entities in Oqtane. Entities in Oqtane can be identified and described using this model.

    +

    Properties:

    +
      +
    • PermissionId: Internal ID storing this information.
    • +
    • SiteId: Reference to the Site which contains both the target entity and permissions.
    • +
    • EntityName: Name of the entity these permissions apply to (e.g., Module).
    • +
    • EntityId: ID of the entity these permissions apply to (e.g., a ModuleId). A value of -1 indicates the permission applies to all entity names regardless of ID (e.g., API permissions).
    • +
    • PermissionName: Name of the permission (e.g., View).
    • +
    • RoleId: Nullable ID of the Role this permission applies to. If null, then this is a user permission.
    • +
    • RoleName: (Not Mapped) The role name associated with the RoleId.
    • +
    • UserId: Nullable ID of the User this permission applies to. If null, then this is a role permission.
    • +
    • IsAuthorized: Indicates the type of permission (grant = true, deny = false).
    • +
    +

    Example Usage:

    +
    var permission = new Permission
    +{
    +    PermissionId = 1,
    +    SiteId = 1,
    +    EntityName = "Module",
    +    EntityId = 10,
    +    PermissionName = "View",
    +    RoleId = null,
    +    RoleName = "Administrator",
    +    UserId = null,
    +    IsAuthorized = true
    +};
    +
    +// Cloning the permission object
    +var clonedPermission = permission.Clone();
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for PermissionId, SiteId, EntityName, EntityId, PermissionName, RoleId, RoleName, UserId, and IsAuthorized.
    • +
    • Enhancement: Added Clone method for creating copies of the Permission object.
    • +
    +
    +

    Profile Model

    +

    The Profile model represents a single profile property information of a User. A user will have multiple profile properties to fully describe their profile.

    +

    Properties:

    +
      +
    • ProfileId: Internal ID.
    • +
    • SiteId: Nullable reference to the Site. Certain users, like super-users, may not belong to any specific site.
    • +
    • Name: Name of the profile property (not the user name).
    • +
    • Title: Label of the profile property.
    • +
    • Description: Description of the property for the UI.
    • +
    • Category: Category of the profile property for grouping, etc.
    • +
    • ViewOrder: Order of the property in the list of profile properties.
    • +
    • MaxLength: Limits the input length of the property.
    • +
    • DefaultValue: Initial or default value of the property.
    • +
    • IsRequired: Indicates if the profile property is required.
    • +
    • IsPrivate: Indicates if the profile property is private, meaning other users won't see them.
    • +
    • Options: Possible values for dropdown input fields.
    • +
    • Validation: Optional regular expression validation.
    • +
    • Rows: Optional number of rows for textarea input.
    • +
    • Autocomplete: Autocomplete setting for the property, enabling autocomplete for the corresponding input field if set.
    • +
    +

    Example Usage:

    +
    var profile = new Profile
    +{
    +    ProfileId = 1,
    +    SiteId = 2,
    +    Name = "FirstName",
    +    Title = "First Name",
    +    Description = "User's first name",
    +    Category = "Personal Information",
    +    ViewOrder = 1,
    +    MaxLength = 50,
    +    DefaultValue = "",
    +    IsRequired = true,
    +    IsPrivate = false,
    +    Options = null,
    +    Validation = "^[A-Za-z]+$",
    +    Rows = 1,
    +    Autocomplete = "given-name"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for ProfileId, SiteId, Name, Title, Description, Category, ViewOrder, MaxLength, DefaultValue, IsRequired, IsPrivate, Options, Validation, Rows, and Autocomplete.
    • +
    +
    +

    RequestCulture Model

    +

    The RequestCulture model describes culture information for a request, including both formatting and UI cultures.

    +

    Properties:

    +
      +
    • Culture: Gets the CultureInfo for the request to be used for formatting.
    • +
    • UICulture: Gets the CultureInfo for the request to be used for text, i.e., language.
    • +
    +

    Example Usage:

    +
    var requestCulture = new RequestCulture("en-US");
    +
    +// Accessing properties
    +CultureInfo culture = requestCulture.Culture; // returns CultureInfo for "en-US"
    +CultureInfo uiCulture = requestCulture.UICulture; // returns CultureInfo for "en-US"
    +
    +

    Constructors:

    +
      +
    • RequestCulture(CultureInfo culture): Creates a new RequestCulture object with both Culture and UICulture properties set to the same CultureInfo value.
    • +
    • RequestCulture(string culture): Creates a new RequestCulture object with both Culture and UICulture properties set to the same CultureInfo value.
    • +
    • RequestCulture(string culture, string uiCulture): Creates a new RequestCulture object with Culture and UICulture properties set to the respective CultureInfo values provided as strings.
    • +
    • RequestCulture(CultureInfo culture, CultureInfo uiCulture): Creates a new RequestCulture object with Culture and UICulture properties set to the respective CultureInfo values provided.
    • +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Culture and UICulture, and various constructors for initializing these properties.
    • +
    +
    +

    Resource Model

    +

    The Resource model describes a JavaScript or CSS file which is needed by the module to work.

    +

    Properties:

    +
      +
    • ResourceType: A ResourceType so the interop can properly create script or link tags.
    • +
    • Url: Path to the resource (query string parameters can be included for cache busting, e.g., ?v=#).
    • +
    • Integrity: Integrity checks to increase the security of resources accessed, especially common in CDN resources.
    • +
    • CrossOrigin: Cross-origin rules for this resource, usually anonymous.
    • +
    • Bundle: For scripts, a bundle can be used to identify dependencies and ordering in the script loading process.
    • +
    • Level: For stylesheets, this defines the relative position for cascading purposes.
    • +
    • Location: For scripts, this defines if the resource should be included in the head or body.
    • +
    • ES6Module: For scripts, allows type="module" registrations (not applicable to stylesheets).
    • +
    • Content: Allows specification of inline script (not applicable to stylesheets).
    • +
    • RenderMode: For scripts, this defines the render mode (default is all render modes) - not applicable to stylesheets.
    • +
    • Reload: Indicates that a script should be reloaded on every page transition - not applicable to stylesheets.
    • +
    • Namespace: The namespace of the component that declared the resource, used only in SiteRouter.
    • +
    • Declaration: (Deprecated) Use ResourceDeclaration instead.
    • +
    +

    Example Usage:

    +
    var resource = new Resource
    +{
    +    ResourceType = ResourceType.Script,
    +    Url = "/scripts/myscript.js?v=1.0.0",
    +    Integrity = "sha384-abc123",
    +    CrossOrigin = "anonymous",
    +    Bundle = "main",
    +    Level = ResourceLevel.Page,
    +    Location = ResourceLocation.Body,
    +    ES6Module = true,
    +    Content = "console.log('Hello, world!');",
    +    RenderMode = "Server",
    +    Reload = true,
    +    Namespace = "Oqtane.Modules"
    +};
    +
    +// Cloning the resource object
    +var clonedResource = resource.Clone(ResourceLevel.Page, "Oqtane.Modules");
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for ResourceType, Url, Integrity, CrossOrigin, Bundle, Level, Location, ES6Module, Content, RenderMode, Reload, Namespace, and Declaration.
    • +
    • Enhancement: Added Clone method for creating copies of the Resource object.
    • +
    +
    +

    Result Model

    +

    The Result model represents the outcome of an operation, including a success flag and an optional message.

    +

    Properties:

    +
      +
    • Success: Indicates whether the operation was successful.
    • +
    • Message: An optional message providing additional information about the result.
    • +
    +

    Example Usage:

    +
    var result1 = new Result(true);
    +var result2 = new Result(false, "An error occurred");
    +
    +// Accessing properties
    +bool isSuccess = result1.Success; // returns true
    +string message = result2.Message; // returns "An error occurred"
    +
    +

    Constructors:

    +
      +
    • Result(bool success): Initializes a new instance of the Result class with a success flag.
    • +
    • Result(bool success, string message): Initializes a new instance of the Result class with a success flag and a message.
    • +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Success and Message, along with constructors for initializing these properties.
    • +
    +
    +

    Role Model

    +

    The Role model describes a security role in Oqtane.

    +

    Properties:

    +
      +
    • RoleId: Primary ID.
    • +
    • SiteId: Nullable reference to a Site, if applicable.
    • +
    • Name: Role name to show in admin dialogs.
    • +
    • Description: Brief description for admin dialogs.
    • +
    • IsAutoAssigned: Determines if users automatically get assigned to this role.
    • +
    • IsSystem: Indicates if the role is a system role.
    • +
    +

    Example Usage:

    +
    var role = new Role
    +{
    +    RoleId = 1,
    +    SiteId = 2,
    +    Name = "Administrator",
    +    Description = "Admin role with full permissions",
    +    IsAutoAssigned = false,
    +    IsSystem = true
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for RoleId, SiteId, Name, Description, IsAutoAssigned, and IsSystem.
    • +
    +
    +

    Route Model

    +

    The Route model describes a route comprising multiple components. The structure is {scheme}://{hostname}/{aliaspath}/{pagepath}/*/{moduleid}/{action}/!/{urlparameters}?{query}#{fragment}.

    +

    Properties:

    +
      +
    • Authority: The host name or IP address and port number (does not include scheme or trailing slash).
    • +
    • Scheme: A fully qualified route contains a scheme (e.g., http, https).
    • +
    • Host: A fully qualified route contains a host name, which may include a port number.
    • +
    • Port: A host name may contain a port number.
    • +
    • AbsolutePath: The absolute path for the route.
    • +
    • PathAndQuery: The absolute path for the route including the query string.
    • +
    • AliasPath: An absolute path may contain an alias path.
    • +
    • PagePath: An absolute path may contain a page path.
    • +
    • ModuleId: A route may contain a module ID, located after the module delimiter segment (/*/).
    • +
    • Action: A route may contain an action, located after the module ID.
    • +
    • UrlParameters: A route may contain parameters located after the URL parameter delimiter segment (/!/).
    • +
    • Query: All query string parameters (prefixed with a ? delimiter).
    • +
    • Fragment: A route may contain a fragment located after the # delimiter.
    • +
    • RootUrl: Contains the resource identifier for the root of an Oqtane installation (including scheme).
    • +
    • SiteUrl: Contains the resource identifier for the home page of a specific Oqtane site (including scheme and possibly an alias path).
    • +
    +

    Example Usage:

    +
    var route = new Route("https://example.com/oqtane/home/*/10/View/!/param1?query=value#fragment", "oqtane");
    +
    +// Accessing properties
    +string authority = route.Authority; // returns "example.com"
    +string scheme = route.Scheme; // returns "https"
    +string host = route.Host; // returns "example.com"
    +string port = route.Port; // returns "443"
    +string absolutePath = route.AbsolutePath; // returns "/oqtane/home/*/10/View/!/param1"
    +string pathAndQuery = route.PathAndQuery; // returns "/oqtane/home/*/10/View/!/param1?query=value"
    +string aliasPath = route.AliasPath; // returns "oqtane"
    +string pagePath = route.PagePath; // returns "home"
    +string moduleId = route.ModuleId; // returns "10"
    +string action = route.Action; // returns "View"
    +string urlParameters = route.UrlParameters; // returns "param1"
    +string query = route.Query; // returns "?query=value"
    +string fragment = route.Fragment; // returns "#fragment"
    +string rootUrl = route.RootUrl; // returns "https://example.com"
    +string siteUrl = route.SiteUrl; // returns "https://example.com/oqtane"
    +
    +

    Constructors:

    +
      +
    • Route(): Parameterless constructor to prevent deserialization exceptions.
    • +
    • Route(string route, string aliaspath): Initializes a new instance of the Route class using the provided route and alias path.
    • +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Authority, Scheme, Host, Port, AbsolutePath, PathAndQuery, AliasPath, PagePath, ModuleId, Action, UrlParameters, Query, Fragment, RootUrl, and SiteUrl.
    • +
    • Enhancement: Added constructors for initializing these properties.
    • +
    +
    +

    SearchContent Model

    +

    The SearchContent model provides information about searchable content within a site in the Oqtane framework.

    +

    Properties:

    +
      +
    • SearchContentId: Internal ID of the searchable content.
    • +
    • SiteId: ID of the site containing this content.
    • +
    • EntityName: Name of the entity that this content pertains to.
    • +
    • EntityId: ID of the entity that this content pertains to.
    • +
    • Title: Title of the content.
    • +
    • Description: Description of the content.
    • +
    • Body: Body text of the content.
    • +
    • Url: URL where the content can be accessed.
    • +
    • Permissions: Comma-delimited string of permissions in the format EntityName:EntityId.
    • +
    • ContentModifiedBy: Username or identifier of the user who last modified the content.
    • +
    • ContentModifiedOn: Timestamp when the content was last modified.
    • +
    • AdditionalContent: Additional content or metadata.
    • +
    • CreatedOn: Timestamp when the content was created.
    • +
    • SearchContentProperties: (Not Mapped) List of properties related to the search content, used only during updates.
    • +
    • Count: (Not Mapped) Count of matching records, populated only for queries.
    • +
    • IsDeleted: (Not Mapped) Indicates if the content is deleted, used only during updates.
    • +
    • TenantId: (Not Mapped) ID of the tenant, used only during updates.
    • +
    • UniqueKey: (Not Mapped) Unique key for the content in the format TenantId:SiteId:EntityName:EntityId.
    • +
    +

    Example Usage:

    +
    var searchContent = new SearchContent
    +{
    +    SearchContentId = 1,
    +    SiteId = 1,
    +    EntityName = "Page",
    +    EntityId = "10",
    +    Title = "Home Page",
    +    Description = "This is the home page.",
    +    Body = "<p>Welcome to the home page!</p>",
    +    Url = "/home",
    +    Permissions = "Page:10,Module:20",
    +    ContentModifiedBy = "admin",
    +    ContentModifiedOn = DateTime.UtcNow,
    +    AdditionalContent = "",
    +    CreatedOn = DateTime.UtcNow,
    +    SearchContentProperties = new List<SearchContentProperty>(),
    +    Count = 0,
    +    IsDeleted = false,
    +    TenantId = 1
    +};
    +
    +// Accessing the unique key
    +string uniqueKey = searchContent.UniqueKey; // returns "1:1:Page:10"
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for SearchContentId, SiteId, EntityName, EntityId, Title, Description, Body, Url, Permissions, ContentModifiedBy, ContentModifiedOn, AdditionalContent, CreatedOn, SearchContentProperties, Count, IsDeleted, TenantId, and UniqueKey.
    • +
    +
    +

    SearchContentProperty Model

    +

    The SearchContentProperty model represents a property related to search content within a site in the Oqtane framework.

    +

    Properties:

    +
      +
    • PropertyId: Internal ID of the search content property.
    • +
    • SearchContentId: ID of the associated search content.
    • +
    • Name: Name of the property.
    • +
    • Value: Value of the property.
    • +
    +

    Example Usage:

    +
    var searchContentProperty = new SearchContentProperty
    +{
    +    PropertyId = 1,
    +    SearchContentId = 10,
    +    Name = "Author",
    +    Value = "John Doe"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for PropertyId, SearchContentId, Name, and Value.
    • +
    +
    +

    SearchContentWord Model

    +

    The SearchContentWord model represents the relationship between search content and search words, tracking occurrences of specific words within the content.

    +

    Properties:

    +
      +
    • SearchContentWordId: Internal ID of the search content word relationship.
    • +
    • SearchContentId: ID of the associated search content.
    • +
    • SearchWordId: ID of the associated search word.
    • +
    • Count: Number of times the word appears in the content.
    • +
    • CreatedOn: Timestamp when the relationship was created.
    • +
    • ModifiedOn: Timestamp when the relationship was last modified.
    • +
    • SearchWord: The associated SearchWord object.
    • +
    • SearchContent: The associated SearchContent object.
    • +
    +

    Example Usage:

    +
    var searchContentWord = new SearchContentWord
    +{
    +    SearchContentWordId = 1,
    +    SearchContentId = 10,
    +    SearchWordId = 5,
    +    Count = 3,
    +    CreatedOn = DateTime.UtcNow,
    +    ModifiedOn = DateTime.UtcNow,
    +    SearchWord = new SearchWord { SearchWordId = 5, Word = "example" },
    +    SearchContent = new SearchContent { SearchContentId = 10, Title = "Example Content" }
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for SearchContentWordId, SearchContentId, SearchWordId, Count, CreatedOn, ModifiedOn, SearchWord, and SearchContent.
    • +
    +
    +

    SearchQuery Model

    +

    The SearchQuery model represents the parameters used to perform a search within a site in the Oqtane framework.

    +

    Properties:

    +
      +
    • SiteId: ID of the site in which the search is performed.
    • +
    • Alias: The Alias associated with the site.
    • +
    • Keywords: Keywords used for the search.
    • +
    • IncludeEntities: Comma-delimited entities to include in the search.
    • +
    • ExcludeEntities: Comma-delimited entities to exclude from the search.
    • +
    • FromDate: Start date for the search range.
    • +
    • ToDate: End date for the search range.
    • +
    • Properties: Additional properties or filters for the search, represented as a dictionary.
    • +
    • PageIndex: Index of the current page of results.
    • +
    • PageSize: Number of results per page.
    • +
    • SortField: Field by which to sort the search results.
    • +
    • SortOrder: Order in which to sort the search results (ascending or descending).
    • +
    • BodyLength: Length of the body text to return in the search results, defaulting to 255 characters.
    • +
    +

    Example Usage:

    +
    var searchQuery = new SearchQuery
    +{
    +    SiteId = 1,
    +    Alias = new Alias { AliasId = 1, Name = "Default" },
    +    Keywords = "Oqtane",
    +    IncludeEntities = "Page,Module",
    +    ExcludeEntities = "User",
    +    FromDate = DateTime.UtcNow.AddMonths(-1),
    +    ToDate = DateTime.UtcNow,
    +    Properties = new Dictionary<string, string> { { "Category", "Documentation" } },
    +    PageIndex = 0,
    +    PageSize = 10,
    +    SortField = SearchSortField.Title,
    +    SortOrder = SearchSortOrder.Ascending,
    +    BodyLength = 255
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for SiteId, Alias, Keywords, IncludeEntities, ExcludeEntities, FromDate, ToDate, Properties, PageIndex, PageSize, SortField, SortOrder, and BodyLength.
    • +
    +
    +

    SearchResult Model

    +

    The SearchResult model extends the SearchContent model to include additional properties related to search results, such as score and snippet.

    +

    Properties:

    +
      +
    • SearchContentId: Inherited from SearchContent - Internal ID of the searchable content.

      +
    • +
    • SiteId: Inherited from SearchContent - ID of the site containing this content.

      +
    • +
    • EntityName: Inherited from SearchContent - Name of the entity that this content pertains to.

      +
    • +
    • EntityId: Inherited from SearchContent - ID of the entity that this content pertains to.

      +
    • +
    • Title: Inherited from SearchContent - Title of the content.

      +
    • +
    • Description: Inherited from SearchContent - Description of the content.

      +
    • +
    • Body: Inherited from SearchContent - Body text of the content.

      +
    • +
    • Url: Inherited from SearchContent - URL where the content can be accessed.

      +
    • +
    • Permissions: Inherited from SearchContent - Comma-delimited string of permissions in the format EntityName:EntityId.

      +
    • +
    • ContentModifiedBy: Inherited from SearchContent - Username or identifier of the user who last modified the content.

      +
    • +
    • ContentModifiedOn: Inherited from SearchContent - Timestamp when the content was last modified.

      +
    • +
    • AdditionalContent: Inherited from SearchContent - Additional content or metadata.

      +
    • +
    • CreatedOn: Inherited from SearchContent - Timestamp when the content was created.

      +
    • +
    • SearchContentProperties: Inherited from SearchContent - List of properties related to the search content, used only during updates.

      +
    • +
    • Count: Inherited from SearchContent - Count of matching records, populated only for queries.

      +
    • +
    • IsDeleted: Inherited from SearchContent - Indicates if the content is deleted, used only during updates.

      +
    • +
    • TenantId: Inherited from SearchContent - ID of the tenant, used only during updates.

      +
    • +
    • UniqueKey: Inherited from SearchContent - Unique key for the content in the format TenantId:SiteId:EntityName:EntityId.

      +
    • +
    • Score: Score of the search result.

      +
    • +
    • DisplayScore: Display score of the search result, formatted as a string.

      +
    • +
    • Snippet: Snippet of the content to display in the search result.

      +
    • +
    +

    Example Usage:

    +
    var searchResult = new SearchResult
    +{
    +    SearchContentId = 1,
    +    SiteId = 1,
    +    EntityName = "Page",
    +    EntityId = "10",
    +    Title = "Home Page",
    +    Description = "This is the home page.",
    +    Body = "<p>Welcome to the home page!</p>",
    +    Url = "/home",
    +    Permissions = "Page:10,Module:20",
    +    ContentModifiedBy = "admin",
    +    ContentModifiedOn = DateTime.UtcNow,
    +    AdditionalContent = "",
    +    CreatedOn = DateTime.UtcNow,
    +    SearchContentProperties = new List<SearchContentProperty>(),
    +    Count = 0,
    +    IsDeleted = false,
    +    TenantId = 1,
    +    Score = 0.95f,
    +    DisplayScore = "95%",
    +    Snippet = "Welcome to the home page!"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Score, DisplayScore, and Snippet.
    • +
    +
    +

    SearchResults Model

    +

    The SearchResults model represents the outcome of a search query, containing the list of search results and the total number of results.

    +

    Properties:

    +
      +
    • Results: List of search results (List<SearchResult>).
    • +
    • TotalResults: Total number of results returned by the search query.
    • +
    +

    Example Usage:

    +
    var searchResults = new SearchResults
    +{
    +    Results = new List<SearchResult>
    +    {
    +        new SearchResult
    +        {
    +            SearchContentId = 1,
    +            SiteId = 1,
    +            EntityName = "Page",
    +            EntityId = "10",
    +            Title = "Home Page",
    +            Description = "This is the home page.",
    +            Body = "<p>Welcome to the home page!</p>",
    +            Url = "/home",
    +            Permissions = "Page:10,Module:20",
    +            ContentModifiedBy = "admin",
    +            ContentModifiedOn = DateTime.UtcNow,
    +            AdditionalContent = "",
    +            CreatedOn = DateTime.UtcNow,
    +            SearchContentProperties = new List<SearchContentProperty>(),
    +            Count = 0,
    +            IsDeleted = false,
    +            TenantId = 1,
    +            Score = 0.95f,
    +            DisplayScore = "95%",
    +            Snippet = "Welcome to the home page!"
    +        }
    +    },
    +    TotalResults = 1
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Results and TotalResults.
    • +
    +
    +

    SearchWord Model

    +

    The SearchWord model represents a word that has been indexed for search purposes within a site in the Oqtane framework.

    +

    Properties:

    +
      +
    • SearchWordId: Internal ID of the search word.
    • +
    • Word: The word that has been indexed.
    • +
    • CreatedOn: Timestamp when the word was indexed.
    • +
    +

    Example Usage:

    +
    var searchWord = new SearchWord
    +{
    +    SearchWordId = 1,
    +    Word = "example",
    +    CreatedOn = DateTime.UtcNow
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for SearchWordId, Word, and CreatedOn.
    • +
    +
    +

    Setting Model

    +

    The Setting model represents a setting for various objects such as Tenant, Site, Page, Module, etc., within the Oqtane framework.

    +

    Properties:

    +
      +
    • SettingId: ID in the database, mainly used to later update an existing setting.
    • +
    • EntityName: Name of the entity the setting is for (e.g., Page, Site).
    • +
    • EntityId: ID of the entity being described (e.g., Site number 2).
    • +
    • SettingName: Name of the setting.
    • +
    • SettingValue: The value of the setting. It is always a string, so ensure to convert or cast as needed.
    • +
    • IsPrivate: Indicates if this setting is private, meaning it should be maintained on the server and not sent to the client.
    • +
    +

    Example Usage:

    +
    var setting = new Setting
    +{
    +    SettingId = 1,
    +    EntityName = "Site",
    +    EntityId = 2,
    +    SettingName = "Theme",
    +    SettingValue = "Default",
    +    IsPrivate = false
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for SettingId, EntityName, EntityId, SettingName, SettingValue, and IsPrivate.
    • +
    +
    +

    Site Model

    +

    The Site model describes a site in a Tenant within an Oqtane installation. Sites can have multiple Aliases.

    +

    Properties:

    +
      +
    • SiteId: The ID of the site.
    • +
    • TenantId: Reference to the Tenant the site is in.
    • +
    • Name: The site name.
    • +
    • LogoFileId: Reference to a File that has the logo for this site. Should be an image.
    • +
    • FaviconFileId: Reference to a File that has the favicon for this site. Should be an image.
    • +
    • DefaultThemeType: Default theme for the site.
    • +
    • DefaultContainerType: Default container for the site.
    • +
    • AdminContainerType: Default admin container.
    • +
    • PwaIsEnabled: Indicates if the site is a progressive web application (PWA).
    • +
    • PwaAppIconFileId: The app icon for the PWA.
    • +
    • PwaSplashIconFileId: The splash icon for the PWA.
    • +
    • AllowRegistration: Determines if visitors may register or create user accounts.
    • +
    • VisitorTracking: Determines if site visitors will be recorded.
    • +
    • CaptureBrokenUrls: Determines if broken URLs (404s) will be captured automatically.
    • +
    • SiteGuid: Unique GUID to identify the site.
    • +
    • RenderMode: The default render mode for the site (e.g., Static, Interactive, Headless).
    • +
    • Runtime: The render mode for UI components requiring interactivity (e.g., Server, WebAssembly, Auto).
    • +
    • Prerender: Indicates if the site supports prerendering (only applies to Interactive render mode).
    • +
    • Hybrid: Indicates if a site can be integrated with an external .NET MAUI hybrid application.
    • +
    • Version: Keeps track of site configuration changes and is used by the ISiteMigration interface.
    • +
    • HomePageId: The home page of the site. The "/" path will be used by default if no home page is specified.
    • +
    • HeadContent: Content to be included in the head of the page.
    • +
    • BodyContent: Content to be included in the body of the page.
    • +
    • IsDeleted: Indicates if the site is deleted.
    • +
    • DeletedBy: The user who deleted the site.
    • +
    • DeletedOn: The date the site was deleted.
    • +
    • ImageFiles: (Not Mapped) The allowable image file extensions.
    • +
    • UploadableFiles: (Not Mapped) The allowable file extensions which can be uploaded.
    • +
    • SiteTemplateType: (Not Mapped) Used when provisioning a site from a site template.
    • +
    • Settings: (Not Mapped) The settings for the site.
    • +
    • Pages: (Not Mapped) List of pages for the site.
    • +
    • Languages: (Not Mapped) List of languages for the site.
    • +
    • Themes: (Not Mapped) List of themes for the site.
    • +
    +

    Example Usage:

    +
    var site = new Site
    +{
    +    SiteId = 1,
    +    TenantId = 1,
    +    Name = "Example Site",
    +    LogoFileId = null,
    +    FaviconFileId = null,
    +    DefaultThemeType = "DefaultTheme",
    +    DefaultContainerType = "DefaultContainer",
    +    AdminContainerType = "AdminContainer",
    +    PwaIsEnabled = false,
    +    PwaAppIconFileId = null,
    +    PwaSplashIconFileId = null,
    +    AllowRegistration = true,
    +    VisitorTracking = true,
    +    CaptureBrokenUrls = true,
    +    SiteGuid = Guid.NewGuid().ToString(),
    +    RenderMode = "Static",
    +    Runtime = "Server",
    +    Prerender = false,
    +    Hybrid = false,
    +    Version = "1.0.0",
    +    HomePageId = 1,
    +    HeadContent = "<meta name=\"description\" content=\"Example site\">",
    +    BodyContent = "<div>Welcome to the example site!</div>",
    +    IsDeleted = false,
    +    DeletedBy = null,
    +    DeletedOn = null,
    +    ImageFiles = ".jpg,.png,.gif",
    +    UploadableFiles = ".jpg,.png,.gif,.pdf,.docx",
    +    SiteTemplateType = "DefaultTemplate",
    +    Settings = new Dictionary<string, string>(),
    +    Pages = new List<Page>(),
    +    Languages = new List<Language>(),
    +    Themes = new List<Theme>()
    +};
    +
    +// Cloning the site object
    +var clonedSite = site.Clone();
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for SiteId, TenantId, Name, LogoFileId, FaviconFileId, DefaultThemeType, DefaultContainerType, AdminContainerType, PwaIsEnabled, PwaAppIconFileId, PwaSplashIconFileId, AllowRegistration, VisitorTracking, CaptureBrokenUrls, SiteGuid, RenderMode, Runtime, Prerender, Hybrid, Version, HomePageId, HeadContent, BodyContent, IsDeleted, DeletedBy, DeletedOn, ImageFiles, UploadableFiles, SiteTemplateType, Settings, Pages, Languages, and Themes.
    • +
    • Enhancement: Added Clone method for creating copies of the Site object.
    • +
    +
    +

    Sitemap Model

    +

    The Sitemap model describes a sitemap within the Oqtane framework.

    +

    Properties:

    +
      +
    • Url: URL of the sitemap.
    • +
    • ModifiedOn: Timestamp indicating when the sitemap was last modified.
    • +
    +

    Example Usage:

    +
    var sitemap = new Sitemap
    +{
    +    Url = "https://example.com/sitemap.xml",
    +    ModifiedOn = DateTime.UtcNow
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Url and ModifiedOn.
    • +
    +
    +

    SiteTemplate Model

    +

    The SiteTemplate model represents a template for creating a new site within the Oqtane framework.

    +

    Properties:

    +
      +
    • Name: Name of the site template.
    • +
    • TypeName: Type name of the site template.
    • +
    +

    Example Usage:

    +
    var siteTemplate = new SiteTemplate
    +{
    +    Name = "Default Site Template",
    +    TypeName = "Oqtane.SiteTemplates.Default"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Name and TypeName.
    • +
    +
    +

    PageTemplate Model

    +

    The PageTemplate model represents a template for creating a new page within the Oqtane framework.

    +

    Properties:

    +
      +
    • Path: The path of the page.
    • +
    • Parent: The parent path of the page.
    • +
    • Name: The name of the page.
    • +
    • Title: The title of the page.
    • +
    • Order: The order of the page.
    • +
    • Url: The URL of the page.
    • +
    • ThemeType: The theme type of the page.
    • +
    • DefaultContainerType: The default container type of the page.
    • +
    • HeadContent: The content to be included in the head of the page.
    • +
    • BodyContent: The content to be included in the body of the page.
    • +
    • Icon: The icon of the page.
    • +
    • IsNavigation: Indicates if the page should be included in the navigation menu.
    • +
    • IsClickable: Indicates if the page should be clickable in the navigation menu.
    • +
    • IsPersonalizable: Indicates if the page is personalizable.
    • +
    • IsDeleted: Indicates if the page is deleted.
    • +
    • PermissionList: List of permissions for the page.
    • +
    • PageTemplateModules: List of modules for the page.
    • +
    • AliasName: The alias name of the page.
    • +
    • Version: The version of the page.
    • +
    • Update: Indicates if the page should be updated.
    • +
    • EditMode: (Obsolete) Indicates if the page is in edit mode.
    • +
    • PagePermissions: (Obsolete) Use PermissionList instead.
    • +
    +

    Example Usage:

    +
    var pageTemplate = new PageTemplate
    +{
    +    Path = "/example",
    +    Parent = "/",
    +    Name = "Example Page",
    +    Title = "Example Page Title",
    +    Order = 1,
    +    Url = "/example",
    +    ThemeType = "DefaultTheme",
    +    DefaultContainerType = "DefaultContainer",
    +    HeadContent = "<meta name=\"description\" content=\"Example page\">",
    +    BodyContent = "<div>Welcome to the example page!</div>",
    +    Icon = "example-icon",
    +    IsNavigation = true,
    +    IsClickable = true,
    +    IsPersonalizable = false,
    +    IsDeleted = false,
    +    PermissionList = new List<Permission>
    +    {
    +        new Permission(PermissionNames.View, RoleNames.Admin, true),
    +        new Permission(PermissionNames.Edit, RoleNames.Admin, true)
    +    },
    +    PageTemplateModules = new List<PageTemplateModule>(),
    +    AliasName = "default",
    +    Version = "1.0.0",
    +    Update = false
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Path, Parent, Name, Title, Order, Url, ThemeType, DefaultContainerType, HeadContent, BodyContent, Icon, IsNavigation, IsClickable, IsPersonalizable, IsDeleted, PermissionList, PageTemplateModules, AliasName, Version, Update, EditMode, and PagePermissions.
    • +
    +
    +

    PageTemplateModule Model

    +

    The PageTemplateModule model represents a module within a page template in the Oqtane framework.

    +

    Properties:

    +
      +
    • ModuleDefinitionName: The name of the module definition.
    • +
    • Title: The title of the module.
    • +
    • Pane: The pane in which the module is placed.
    • +
    • Order: The order of the module within the pane.
    • +
    • ContainerType: The container type of the module.
    • +
    • IsDeleted: Indicates if the module is deleted.
    • +
    • PermissionList: List of permissions for the module.
    • +
    • Content: The content of the module.
    • +
    • ModulePermissions: (Obsolete) Use PermissionList instead.
    • +
    +

    Example Usage:

    +
    var pageTemplateModule = new PageTemplateModule
    +{
    +    ModuleDefinitionName = "TextModule",
    +    Title = "Text Module",
    +    Pane = "ContentPane",
    +    Order = 1,
    +    ContainerType = "DefaultContainer",
    +    IsDeleted = false,
    +    PermissionList = new List<Permission>
    +    {
    +        new Permission(PermissionNames.View, RoleNames.Admin, true),
    +        new Permission(PermissionNames.Edit, RoleNames.Admin, true)
    +    },
    +    Content = "Sample text content"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for ModuleDefinitionName, Title, Pane, Order, ContainerType, IsDeleted, PermissionList, Content, and ModulePermissions.
    • +
    +
    +

    SqlQuery Model

    +

    The SqlQuery model represents a SQL query that belongs to a specific Tenant within the Oqtane framework.

    +

    Properties:

    +
      +
    • TenantId: Reference to the Tenant this query belongs to.
    • +
    • DBType: Type of the database.
    • +
    • DBConnectionString: Connection string for the database.
    • +
    • Query: The SQL query to be executed.
    • +
    • Results: List of results returned by the query, represented as a list of dictionaries.
    • +
    +

    Example Usage:

    +
    var sqlQuery = new SqlQuery
    +{
    +    TenantId = 1,
    +    DBType = "SQLServer",
    +    DBConnectionString = "Server=myServer;Database=myDB;User Id=myUser;Password=myPassword;",
    +    Query = "SELECT * FROM Users",
    +    Results = new List<Dictionary<string, string>>()
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for TenantId, DBType, DBConnectionString, Query, and Results.
    • +
    +
    +

    Sync Model

    +

    The Sync model represents a synchronization event within the Oqtane framework, containing the synchronization date and a list of synchronization events.

    +

    Properties:

    +
      +
    • SyncDate: The date and time when the synchronization occurred.
    • +
    • SyncEvents: List of synchronization events (List<SyncEvent>).
    • +
    +

    Example Usage:

    +
    var sync = new Sync
    +{
    +    SyncDate = DateTime.UtcNow,
    +    SyncEvents = new List<SyncEvent>
    +    {
    +        new SyncEvent
    +        {
    +            TenantId = 1,
    +            SiteId = 1,
    +            EntityName = "Page",
    +            EntityId = 10,
    +            Action = "Update",
    +            ModifiedOn = DateTime.UtcNow
    +        }
    +    }
    +};
    +
    +
    +

    SyncEvent Model

    +

    The SyncEvent model represents an individual synchronization event within the Oqtane framework.

    +

    Properties:

    +
      +
    • TenantId: ID of the tenant involved in the synchronization event.
    • +
    • SiteId: ID of the site involved in the synchronization event.
    • +
    • EntityName: Name of the entity involved in the synchronization event.
    • +
    • EntityId: ID of the entity involved in the synchronization event.
    • +
    • Action: Action performed in the synchronization event (e.g., "Update", "Delete").
    • +
    • ModifiedOn: Timestamp when the event occurred.
    • +
    +

    Example Usage:

    +
    var syncEvent = new SyncEvent
    +{
    +    TenantId = 1,
    +    SiteId = 1,
    +    EntityName = "Page",
    +    EntityId = 10,
    +    Action = "Update",
    +    ModifiedOn = DateTime.UtcNow
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for SyncDate and SyncEvents to the Sync model.
    • +
    • Initial Creation: Added properties for TenantId, SiteId, EntityName, EntityId, Action, and ModifiedOn to the SyncEvent model.
    • +
    +
    +

    Template Model

    +

    The Template model defines metadata for a module or theme template within the Oqtane framework.

    +

    Properties:

    +
      +
    • Name: Name of the template (folder name).
    • +
    • Title: Title of the template.
    • +
    • Type: Type of template (Internal or External).
    • +
    • Version: Minimum framework version dependency.
    • +
    • Namespace: Namespace of the template, which uses tokens.
    • +
    • Location: Location where the template will be created (dynamically set).
    • +
    +

    Example Usage:

    +
    var template = new Template
    +{
    +    Name = "MyModuleTemplate",
    +    Title = "My Module Template",
    +    Type = "Internal",
    +    Version = "1.0.0",
    +    Namespace = "Oqtane.Modules.MyModule",
    +    Location = "/path/to/template"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Name, Title, Type, Version, Namespace, and Location.
    • +
    +
    +

    Tenant Model

    +

    The Tenant model describes a tenant in Oqtane. Tenants can contain multiple Sites and have all their data in a separate database.

    +

    Properties:

    +
      +
    • TenantId: ID of the tenant.
    • +
    • Name: Name of the tenant to show in tenant lists.
    • +
    • DBConnectionString: Connection string to access this tenant's database.
    • +
    • DBType: Type of database used by this tenant (new in v2.1.0).
    • +
    • Version: Version of the tenant.
    • +
    +

    Example Usage:

    +
    var tenant = new Tenant
    +{
    +    TenantId = 1,
    +    Name = "Default Tenant",
    +    DBConnectionString = "Server=myServer;Database=myTenantDB;User Id=myUser;Password=myPassword;",
    +    DBType = "SQLServer",
    +    Version = "1.0.0"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for TenantId, Name, DBConnectionString, DBType, and Version.
    • +
    +
    +

    Theme Model

    +

    The Theme model provides information about a theme in Oqtane.

    +

    Properties:

    +
      +
    • ThemeId: Reference ID of the theme.
    • +
    • ThemeName: Full namespace/identifier of the theme.
    • +
    • Name: Friendly name to show in the UI.
    • +
    • Version: (Not Mapped) Version of the theme.
    • +
    • Owner: (Not Mapped) Owner of the theme.
    • +
    • Url: (Not Mapped) URL associated with the theme.
    • +
    • Contact: (Not Mapped) Contact information for the theme owner.
    • +
    • License: (Not Mapped) License of the theme.
    • +
    • Dependencies: (Not Mapped) Dependencies required by the theme.
    • +
    • ThemeSettingsType: (Not Mapped) Type of settings for the theme (added in v2.0.2).
    • +
    • ContainerSettingsType: (Not Mapped) Type of settings for the container (added in v2.0.2).
    • +
    • PackageName: (Not Mapped) Name of the package (added in v2.1.0).
    • +
    • Resources: (Not Mapped) List of resources associated with the theme (added in v4.0.0).
    • +
    • IsAutoEnabled: (Not Mapped) Indicates if the theme is auto-enabled (added in v4.0.0).
    • +
    • SiteId: (Not Mapped) Internal site ID.
    • +
    • IsEnabled: (Not Mapped) Indicates if the theme is enabled.
    • +
    • AssemblyName: (Not Mapped) Assembly name of the theme.
    • +
    • Themes: (Not Mapped) List of theme controls.
    • +
    • Containers: (Not Mapped) List of container controls.
    • +
    • Template: (Not Mapped) Template associated with the theme.
    • +
    • ThemeControls: (Obsolete, Not Mapped) Use Themes instead.
    • +
    • PaneLayouts: (Obsolete, Not Mapped) Use Layouts instead.
    • +
    • ContainerControls: (Obsolete, Not Mapped) Use Containers instead.
    • +
    • Layouts: (Obsolete, Not Mapped) List of theme layouts.
    • +
    +

    Example Usage:

    +
    var theme = new Theme
    +{
    +    ThemeId = 1,
    +    ThemeName = "Oqtane.Themes.Default",
    +    Name = "Default Theme",
    +    Version = "1.0.0",
    +    Owner = "Oqtane Community",
    +    Url = "https://oqtane.org",
    +    Contact = "support@oqtane.org",
    +    License = "MIT",
    +    Dependencies = "",
    +    ThemeSettingsType = "DefaultSettings",
    +    ContainerSettingsType = "DefaultContainerSettings",
    +    PackageName = "Oqtane.DefaultTheme",
    +    Resources = new List<Resource>(),
    +    IsAutoEnabled = true,
    +    SiteId = 1,
    +    IsEnabled = true,
    +    AssemblyName = "Oqtane.DefaultTheme",
    +    Themes = new List<ThemeControl>(),
    +    Containers = new List<ThemeControl>(),
    +    Template = "DefaultTemplate"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for ThemeId, ThemeName, Name, Version, Owner, Url, Contact, License, Dependencies, ThemeSettingsType, ContainerSettingsType, PackageName, Resources, IsAutoEnabled, SiteId, IsEnabled, AssemblyName, Themes, Containers, Template, ThemeControls, PaneLayouts, ContainerControls, and Layouts.
    • +
    +
    +

    ThemeControl Model

    +

    The ThemeControl model provides information about a theme control within the Oqtane framework.

    +

    Properties:

    +
      +
    • TypeName: Type name of the theme control.
    • +
    • Name: Friendly name of the theme control.
    • +
    • Thumbnail: URL or path to the thumbnail image of the theme control.
    • +
    • Panes: Information about the panes in the theme control.
    • +
    +

    Example Usage:

    +
    var themeControl = new ThemeControl
    +{
    +    TypeName = "Oqtane.Themes.Default.DefaultTheme",
    +    Name = "Default Theme",
    +    Thumbnail = "/images/default-theme-thumbnail.png",
    +    Panes = "ContentPane, SidePane"
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for TypeName, Name, Thumbnail, and Panes.
    • +
    +
    +

    UrlMapping Model

    +

    The UrlMapping model describes a URL mapping in Oqtane.

    +

    Properties:

    +
      +
    • UrlMappingId: ID of this URL mapping.
    • +
    • SiteId: Reference to a Site.
    • +
    • Url: A fully qualified URL.
    • +
    • MappedUrl: A URL to which the visitor will be redirected.
    • +
    • Requests: Number of requests all time for the URL.
    • +
    • CreatedOn: Date when the URL was first requested for the site.
    • +
    • RequestedOn: Date when the URL was last requested for the site.
    • +
    +

    Example Usage:

    +
    var urlMapping = new UrlMapping
    +{
    +    UrlMappingId = 1,
    +    SiteId = 1,
    +    Url = "https://example.com/old-url",
    +    MappedUrl = "https://example.com/new-url",
    +    Requests = 100,
    +    CreatedOn = DateTime.UtcNow.AddMonths(-6),
    +    RequestedOn = DateTime.UtcNow
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for UrlMappingId, SiteId, Url, MappedUrl, Requests, CreatedOn, and RequestedOn.
    • +
    +
    +

    User Model

    +

    The User model describes a user in Oqtane.

    +

    Properties:

    +
      +
    • UserId: ID of the user.
    • +
    • Username: Username used for login.
    • +
    • DisplayName: Name shown in menus and dialogs.
    • +
    • Email: User's email address.
    • +
    • PhotoFileId: Reference to a File containing the user's photo.
    • +
    • LastLoginOn: Timestamp of the user's last login.
    • +
    • LastIPAddress: IP address when the user last logged in.
    • +
    • TwoFactorRequired: Indicates if the user requires 2-factor authentication to sign in.
    • +
    • TwoFactorCode: Stores the 2-factor verification code.
    • +
    • TwoFactorExpiry: Expiry date and time for the 2-factor verification code.
    • +
    • SecurityStamp: (Not Mapped) A token indicating if a user's security properties have been modified.
    • +
    • SiteId: (Not Mapped) Reference to the Site this user belongs to.
    • +
    • Roles: (Not Mapped) Semi-colon delimited list of role names for the user.
    • +
    • DeletedBy: (IDeletable) The user who deleted this user.
    • +
    • DeletedOn: (IDeletable) Date when the user was deleted.
    • +
    • IsDeleted: (IDeletable) Indicates if the user is deleted.
    • +
    • Password: (Not Mapped) The user's password (not plaintext).
    • +
    • IsAuthenticated: (Not Mapped) Indicates if the user is authenticated.
    • +
    • FolderPath: (Not Mapped) Path name of the user's personal folder.
    • +
    • EmailConfirmed: (Not Mapped) Indicates if the user's email address is confirmed.
    • +
    • SuppressNotification: (Not Mapped) Indicates if new user should be notified by email.
    • +
    • Settings: (Not Mapped) Public user settings.
    • +
    +

    Example Usage:

    +
    var user = new User
    +{
    +    UserId = 1,
    +    Username = "john.doe",
    +    DisplayName = "John Doe",
    +    Email = "john.doe@example.com",
    +    PhotoFileId = null,
    +    LastLoginOn = DateTime.UtcNow,
    +    LastIPAddress = "192.168.1.1",
    +    TwoFactorRequired = true,
    +    TwoFactorCode = "123456",
    +    TwoFactorExpiry = DateTime.UtcNow.AddMinutes(10),
    +    SecurityStamp = "XYZ",
    +    SiteId = 1,
    +    Roles = "Admin;User",
    +    DeletedBy = null,
    +    DeletedOn = null,
    +    IsDeleted = false,
    +    Password = null,
    +    IsAuthenticated = true,
    +    EmailConfirmed = true,
    +    SuppressNotification = false,
    +    Settings = new Dictionary<string, string> { { "Theme", "Dark" } }
    +};
    +
    +// Accessing FolderPath
    +string folderPath = user.FolderPath; // returns "Users/1/"
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for UserId, Username, DisplayName, Email, PhotoFileId, LastLoginOn, LastIPAddress, TwoFactorRequired, TwoFactorCode, TwoFactorExpiry, SecurityStamp, SiteId, Roles, DeletedBy, DeletedOn, IsDeleted, Password, IsAuthenticated, FolderPath, EmailConfirmed, SuppressNotification, and Settings.
    • +
    +
    +

    UserRole Model

    +

    The UserRole model assigns a Role to a User.

    +

    Properties:

    +
      +
    • UserRoleId: ID of this assignment.
    • +
    • UserId: Reference to the User who receives this Role assignment.
    • +
    • RoleId: Reference to the Role which the User receives.
    • +
    • EffectiveDate: Start date of when this assignment is valid.
    • +
    • ExpiryDate: End date of when this assignment is valid.
    • +
    • IgnoreSecurityStamp: (Not Mapped) Indicates that the User Security Stamp should not be updated when this user role is added or updated.
    • +
    • Role: Direct reference to the Role object.
    • +
    • User: Direct reference to the User object.
    • +
    +

    Example Usage:

    +
    var userRole = new UserRole
    +{
    +    UserRoleId = 1,
    +    UserId = 10,
    +    RoleId = 2,
    +    EffectiveDate = DateTime.UtcNow,
    +    ExpiryDate = DateTime.UtcNow.AddYears(1),
    +    IgnoreSecurityStamp = false,
    +    Role = new Role { RoleId = 2, Name = "Admin" },
    +    User = new User { UserId = 10, Username = "john.doe" }
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for UserRoleId, UserId, RoleId, EffectiveDate, ExpiryDate, IgnoreSecurityStamp, Role, and User.
    • +
    +
    +

    UserValidateResult Model

    +

    The UserValidateResult model represents the result of validating a user within the Oqtane framework.

    +

    Properties:

    +
      +
    • Succeeded: Indicates whether the validation succeeded.
    • +
    • Errors: Dictionary containing error messages, if any, with the key as the error field and the value as the error message.
    • +
    +

    Example Usage:

    +
    var userValidateResult = new UserValidateResult
    +{
    +    Succeeded = true,
    +    Errors = new Dictionary<string, string>
    +    {
    +        { "Email", "Invalid email format" },
    +        { "Password", "Password must be at least 6 characters long" }
    +    }
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for Succeeded and Errors.
    • +
    +
    +

    Visitor Model

    +

    The Visitor model describes a visitor in Oqtane.

    +

    Properties:

    +
      +
    • VisitorId: ID of this visitor.
    • +
    • SiteId: Reference to a Site.
    • +
    • UserId: Reference to a User, if applicable.
    • +
    • Visits: Number of times a visitor has visited the site.
    • +
    • IPAddress: Last recorded IP address of the visitor.
    • +
    • UserAgent: Last recorded user agent of the visitor.
    • +
    • Language: Last recorded language of the visitor.
    • +
    • Url: Last recorded URL of the visitor.
    • +
    • Referrer: Last recorded referrer of the visitor.
    • +
    • CreatedOn: Date the visitor first visited the site.
    • +
    • VisitedOn: Date the visitor last visited the site.
    • +
    • User: Direct reference to the User object, if applicable.
    • +
    +

    Example Usage:

    +
    var visitor = new Visitor
    +{
    +    VisitorId = 1,
    +    SiteId = 1,
    +    UserId = 10,
    +    Visits = 5,
    +    IPAddress = "192.168.1.1",
    +    UserAgent = "Mozilla/5.0",
    +    Language = "en-US",
    +    Url = "https://example.com",
    +    Referrer = "https://google.com",
    +    CreatedOn = DateTime.UtcNow.AddMonths(-3),
    +    VisitedOn = DateTime.UtcNow,
    +    User = new User { UserId = 10, Username = "john.doe" }
    +};
    +
    +

    Change Log:

    +
      +
    • Initial Creation: Added properties for VisitorId, SiteId, UserId, Visits, IPAddress, UserAgent, Language, Url, Referrer, CreatedOn, VisitedOn, and User.
    • +
    +
    + +
    + + + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/docs/guides/database-management/index.html b/docs/guides/database-management/index.html new file mode 100644 index 000000000..1031eab93 --- /dev/null +++ b/docs/guides/database-management/index.html @@ -0,0 +1,133 @@ + + + + + Database Management in Oqtane | Oqtane Docs - APIs and more for the Modular Blazor Application Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +

    Database Management in Oqtane

    + +

    Managing databases is a key part of working with Oqtane. This section covers everything from database best practices to migration and schema management. Below is an overview of the topics related to database management.

    +

    Best Practices

    +

    Before diving into specific topics, it's important to be familiar with the best practices for managing databases in Oqtane. Refer to the Best Practices guide for tips and recommendations on optimizing your database performance, security, and scalability.

    +

    Database Setup and Installation

    +

    The installation of your chosen database system (SQL Server, MySQL, PostgreSQL, or SQLite) is crucial to ensure proper integration with Oqtane. For detailed instructions on setting up databases in various environments, refer to the Database Installation Guide, which provides step-by-step instructions for Windows and Linux platforms.

    +

    Database Migrations

    +

    Database migrations in Oqtane allow you to evolve your database schema over time. If you're looking to perform or manage migrations, refer to the Database Migrations guide, which covers the process of migrating your database schema with each Oqtane release.

    +

    Database Schema

    +

    Understanding the database schema is key to effective database management. The schema outlines the structure of the Oqtane database and is essential for customizations, troubleshooting, and performance optimizations. For detailed information on the Oqtane database schema, refer to the Database Schema page.

    + + +

    For a comprehensive setup guide, please refer to the Installation Guide for environment-specific instructions.

    +

    ← Back to Documentation Guides Home Page

    + +
    + + + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/docs/guides/database-management/troubleshooting.html b/docs/guides/database-management/troubleshooting.html new file mode 100644 index 000000000..347209c87 --- /dev/null +++ b/docs/guides/database-management/troubleshooting.html @@ -0,0 +1,134 @@ + + + + + Troubleshooting Database Management | Oqtane Docs - APIs and more for the Modular Blazor Application Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +

    Troubleshooting Database Management

    + +

    Overview

    +

    This section provides resources and guidance for troubleshooting various database-related issues in Oqtane. Whether you're configuring your database, resolving migration issues, or troubleshooting performance problems, this guide will help you navigate and fix common database issues.

    +

    Common Database Troubleshooting Topics

    +

    Below are the key areas covered in this troubleshooting guide:

    +
      +
    • Database Setup Issues
      +Troubleshoot common setup issues, including database connection problems and configuration errors.

      +
    • +
    • Database Migrations
      +Understand and resolve issues related to database migrations, including failed migrations and version conflicts.

      +
    • +
    • Performance Problems
      +Tips for identifying slow queries, optimizing database performance, and scaling your database effectively.

      +
    • +
    • Database Integrity and Security
      +Resolve issues with database security, access control, data corruption, and backup recovery.

      +
    • +
    +

    For detailed troubleshooting steps and solutions to specific database issues, refer to the full Database Troubleshooting Guide.

    + +
    + + + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/docs/guides/docs/api-menu.html b/docs/guides/docs/api-menu.html index 652b81d14..4d53b46e2 100644 --- a/docs/guides/docs/api-menu.html +++ b/docs/guides/docs/api-menu.html @@ -15,7 +15,7 @@ - + @@ -98,7 +98,7 @@

    How the API-Navigation (TOC) Works

    - Edit this page + Edit this page
    diff --git a/docs/guides/docs/build.html b/docs/guides/docs/build.html index b0d3022a7..254ed2470 100644 --- a/docs/guides/docs/build.html +++ b/docs/guides/docs/build.html @@ -15,7 +15,7 @@ - + @@ -195,7 +195,7 @@

    Questions

    - Edit this page + Edit this page
    diff --git a/docs/guides/docs/code.html b/docs/guides/docs/code.html index 243777337..1041026ac 100644 --- a/docs/guides/docs/code.html +++ b/docs/guides/docs/code.html @@ -15,7 +15,7 @@ - + @@ -130,7 +130,7 @@

    Documenting Namespaces

    - Edit this page + Edit this page
    diff --git a/docs/guides/docs/conventions.html b/docs/guides/docs/conventions.html index f00ec2cf1..64ab5e7c7 100644 --- a/docs/guides/docs/conventions.html +++ b/docs/guides/docs/conventions.html @@ -15,7 +15,7 @@ - + @@ -122,7 +122,7 @@

    4. Creativity and Contribution

    - Edit this page + Edit this page
    diff --git a/docs/guides/docs/folders.html b/docs/guides/docs/folders.html index 74a5471c8..109a4a747 100644 --- a/docs/guides/docs/folders.html +++ b/docs/guides/docs/folders.html @@ -15,7 +15,7 @@ - + @@ -105,7 +105,7 @@

    Assets Folders

    - Edit this page + Edit this page
    diff --git a/docs/guides/docs/how-it-works.html b/docs/guides/docs/how-it-works.html index 62a9a546f..403635883 100644 --- a/docs/guides/docs/how-it-works.html +++ b/docs/guides/docs/how-it-works.html @@ -15,7 +15,7 @@ - + @@ -125,7 +125,7 @@
    - Edit this page + Edit this page
    diff --git a/docs/guides/docs/index.html b/docs/guides/docs/index.html index 4af517252..4dad8ff0c 100644 --- a/docs/guides/docs/index.html +++ b/docs/guides/docs/index.html @@ -15,7 +15,7 @@ - + @@ -139,7 +139,7 @@

    Setup

    - Edit this page + Edit this page
    diff --git a/docs/guides/docs/markdown.html b/docs/guides/docs/markdown.html index 6720f80b3..fb097a1ba 100644 --- a/docs/guides/docs/markdown.html +++ b/docs/guides/docs/markdown.html @@ -15,7 +15,7 @@ - + @@ -91,8 +91,8 @@
    1. Link to a website [website](https://www.oqtane.org/)
    2. Link to another page [page](./build.md)
    3. -
    4. Link to some Oqtane.Models [](xref:Oqtane.Models) - will automatically pick the name of the target
    5. -
    6. Link to a class File [](xref:Oqtane.Models.File)
    7. +
    8. Link to some [](xref:Oqtane.Models) - will automatically pick the name of the target
    9. +
    10. Link to a class [](xref:Oqtane.Models.File)

    Images

    Images can be added it two ways - using markdown, or the HTML counterpart. @@ -113,7 +113,7 @@

    Videos

    - Edit this page + Edit this page
    diff --git a/docs/guides/docs/project.html b/docs/guides/docs/project.html index 10af45d39..4f1166845 100644 --- a/docs/guides/docs/project.html +++ b/docs/guides/docs/project.html @@ -15,7 +15,7 @@ - + @@ -144,7 +144,7 @@

    Contribute

    - Edit this page + Edit this page
    diff --git a/docs/guides/docs/run-in-iis.html b/docs/guides/docs/run-in-iis.html index ba81c42de..ef20c8f01 100644 --- a/docs/guides/docs/run-in-iis.html +++ b/docs/guides/docs/run-in-iis.html @@ -15,7 +15,7 @@ - + @@ -97,7 +97,7 @@

    Warning about Caching

    - Edit this page + Edit this page
    diff --git a/docs/guides/docs/tips/index.html b/docs/guides/docs/tips/index.html index a407d9028..b1c82be1b 100644 --- a/docs/guides/docs/tips/index.html +++ b/docs/guides/docs/tips/index.html @@ -15,7 +15,7 @@ - + @@ -158,7 +158,7 @@
    Tip
    - Edit this page + Edit this page
    diff --git a/docs/guides/extensions/best-practices/create-solutions-for-each-extension.html b/docs/guides/extensions/best-practices/create-solutions-for-each-extension.html index cc4217c34..b9be9d9e0 100644 --- a/docs/guides/extensions/best-practices/create-solutions-for-each-extension.html +++ b/docs/guides/extensions/best-practices/create-solutions-for-each-extension.html @@ -15,7 +15,7 @@ - + @@ -122,7 +122,7 @@
    Tip
    - Edit this page + Edit this page
    diff --git a/docs/guides/extensions/best-practices/use-nuget-for-dependencies.html b/docs/guides/extensions/best-practices/use-nuget-for-dependencies.html index ef4687cad..1e5edb86f 100644 --- a/docs/guides/extensions/best-practices/use-nuget-for-dependencies.html +++ b/docs/guides/extensions/best-practices/use-nuget-for-dependencies.html @@ -15,7 +15,7 @@ - + @@ -100,7 +100,7 @@
    Important
    - Edit this page + Edit this page
    diff --git a/docs/guides/extensions/build/dev.html b/docs/guides/extensions/build/dev.html index 7b70d77fc..be73ae434 100644 --- a/docs/guides/extensions/build/dev.html +++ b/docs/guides/extensions/build/dev.html @@ -15,7 +15,7 @@ - + @@ -123,7 +123,7 @@

    Remember to Restart your Oqtane

    - Edit this page + Edit this page
    diff --git a/docs/guides/extensions/build/index.html b/docs/guides/extensions/build/index.html index 900cf91fc..b48ffc1dd 100644 --- a/docs/guides/extensions/build/index.html +++ b/docs/guides/extensions/build/index.html @@ -15,7 +15,7 @@ - + @@ -168,7 +168,7 @@
    Tip
    - Edit this page + Edit this page
    diff --git a/docs/guides/extensions/build/installation.html b/docs/guides/extensions/build/installation.html index eba4c285d..d24157a6e 100644 --- a/docs/guides/extensions/build/installation.html +++ b/docs/guides/extensions/build/installation.html @@ -15,7 +15,7 @@ - + @@ -106,7 +106,7 @@

    Manual File-Copy Installation

    - Edit this page + Edit this page
    diff --git a/docs/guides/extensions/build/package.html b/docs/guides/extensions/build/package.html index 9894c44c9..90873dbdd 100644 --- a/docs/guides/extensions/build/package.html +++ b/docs/guides/extensions/build/package.html @@ -15,7 +15,7 @@ - + @@ -102,7 +102,7 @@

    Oqtane Extension - Nuget Package

    - Edit this page + Edit this page
    diff --git a/docs/guides/extensions/build/release.html b/docs/guides/extensions/build/release.html index 2708c6c13..d419fdcdc 100644 --- a/docs/guides/extensions/build/release.html +++ b/docs/guides/extensions/build/release.html @@ -15,7 +15,7 @@ - + @@ -186,7 +186,7 @@

    How can I change the Icon

    - Edit this page + Edit this page
    diff --git a/docs/guides/extensions/index.html b/docs/guides/extensions/index.html index 2e1d9351e..723000f19 100644 --- a/docs/guides/extensions/index.html +++ b/docs/guides/extensions/index.html @@ -15,7 +15,7 @@ - + @@ -126,10 +126,10 @@

    Prerequisites

  • Blazor programming skills
  • HTML / CSS / JavaScript / Bootstrap5 skills
  • Git / GitHub skills
  • -
  • Oqtane installation
  • +
  • Oqtane installation
  • Basic Setup

    -

    You will need to install Oqtane +

    You will need to install Oqtane on your development machine to get started. For this you have 2 options:

      @@ -147,11 +147,12 @@

      Next Steps

    1. Themes
    2. Modules
    +

    ← Back to Documentation Guides Home Page

    - Edit this page + Edit this page
    diff --git a/docs/guides/index.html b/docs/guides/index.html index f4eaf8114..6fc9613b2 100644 --- a/docs/guides/index.html +++ b/docs/guides/index.html @@ -15,7 +15,7 @@ - + @@ -106,7 +106,7 @@

    📚 Current Guides

  • Installation
    Step-by-step guide to getting Oqtane set up in your environment. Covers system requirements, installation procedures, and first-time setup.

  • -
  • Migration
    +

  • Migration
    Instructions for migrating your Oqtane environment from development to production or between servers.

  • Modules
    @@ -166,7 +166,7 @@

    📣 Stay Updated

    diff --git a/docs/guides/installation/databases.html b/docs/guides/installation/databases.html index 422997c94..09244ec9c 100644 --- a/docs/guides/installation/databases.html +++ b/docs/guides/installation/databases.html @@ -15,7 +15,7 @@ - + @@ -217,7 +217,7 @@ diff --git a/docs/guides/installation/deploy-to-azure.html b/docs/guides/installation/deploy-to-azure.html index 1e48cd9cd..4b4dfe6ab 100644 --- a/docs/guides/installation/deploy-to-azure.html +++ b/docs/guides/installation/deploy-to-azure.html @@ -15,7 +15,7 @@ - + @@ -125,7 +125,7 @@ diff --git a/docs/guides/installation/development-vs-code-linux.html b/docs/guides/installation/development-vs-code-linux.html index eaf3fe5fb..2f64b84e0 100644 --- a/docs/guides/installation/development-vs-code-linux.html +++ b/docs/guides/installation/development-vs-code-linux.html @@ -15,7 +15,7 @@ - + @@ -167,7 +167,7 @@ diff --git a/docs/guides/installation/development-vs-code.html b/docs/guides/installation/development-vs-code.html index 178a78965..525173acb 100644 --- a/docs/guides/installation/development-vs-code.html +++ b/docs/guides/installation/development-vs-code.html @@ -15,7 +15,7 @@ - + @@ -134,7 +134,7 @@ diff --git a/docs/guides/installation/development.html b/docs/guides/installation/development.html index d8c58f690..00330eee3 100644 --- a/docs/guides/installation/development.html +++ b/docs/guides/installation/development.html @@ -15,7 +15,7 @@ - + @@ -239,7 +239,7 @@ diff --git a/docs/guides/installation/index.html b/docs/guides/installation/index.html index f0f03e32c..b3f3b20a1 100644 --- a/docs/guides/installation/index.html +++ b/docs/guides/installation/index.html @@ -15,7 +15,7 @@ - + @@ -163,7 +163,7 @@

    Resources

    diff --git a/docs/guides/installation/linux-ubuntu-apache-mysql.html b/docs/guides/installation/linux-ubuntu-apache-mysql.html index 6cffd4e0b..b1bdabb32 100644 --- a/docs/guides/installation/linux-ubuntu-apache-mysql.html +++ b/docs/guides/installation/linux-ubuntu-apache-mysql.html @@ -15,7 +15,7 @@ - + @@ -473,7 +473,7 @@ diff --git a/docs/guides/installation/linux-ubuntu-apache-postgresql.html b/docs/guides/installation/linux-ubuntu-apache-postgresql.html index eaf0d61b2..40c1ea896 100644 --- a/docs/guides/installation/linux-ubuntu-apache-postgresql.html +++ b/docs/guides/installation/linux-ubuntu-apache-postgresql.html @@ -15,7 +15,7 @@ - + @@ -489,7 +489,7 @@ diff --git a/docs/guides/installation/maui-setup.html b/docs/guides/installation/maui-setup.html index 86c0894b2..24c583aa2 100644 --- a/docs/guides/installation/maui-setup.html +++ b/docs/guides/installation/maui-setup.html @@ -15,7 +15,7 @@ - + @@ -177,7 +177,7 @@

    Conclusion

    diff --git a/docs/guides/installation/resources.html b/docs/guides/installation/resources.html index fc849e90c..ba2ff3f22 100644 --- a/docs/guides/installation/resources.html +++ b/docs/guides/installation/resources.html @@ -15,7 +15,7 @@ - + @@ -190,7 +190,7 @@

    Resources

    diff --git a/docs/guides/installation/troubleshooting.html b/docs/guides/installation/troubleshooting.html index 55d639fb1..aadd14953 100644 --- a/docs/guides/installation/troubleshooting.html +++ b/docs/guides/installation/troubleshooting.html @@ -15,7 +15,7 @@ - + @@ -100,7 +100,7 @@

    Installation Troubleshooting Guides
  • Configuration File Errors: How to troubleshoot configuration file issues that prevent successful setup.
  • -
  • Upgrading Installations
    +

  • Upgrading Installations
    This guide provides troubleshooting steps specifically for administrators upgrading their Oqtane installation. It addresses:

  • +
  • Database Troubleshooting
    +This guide addresses common database-related issues during both installation and upgrade. It includes:

    + +
  • These guides are designed to provide practical solutions and best practices to help you install and upgrade Oqtane smoothly.

    - Edit this page + Edit this page
    diff --git a/docs/guides/installation/upgrade.html b/docs/guides/installation/upgrade.html index 3fc518e85..12b1ba3d6 100644 --- a/docs/guides/installation/upgrade.html +++ b/docs/guides/installation/upgrade.html @@ -15,7 +15,7 @@ - + @@ -151,7 +151,7 @@

    Resources

    - Edit this page + Edit this page
    diff --git a/docs/guides/installation/walkthrough-dev/index.html b/docs/guides/installation/walkthrough-dev/index.html index bdd4a6992..37708a0ef 100644 --- a/docs/guides/installation/walkthrough-dev/index.html +++ b/docs/guides/installation/walkthrough-dev/index.html @@ -15,7 +15,7 @@ - + @@ -161,7 +161,7 @@
    - Edit this page + Edit this page
    diff --git a/docs/guides/installation/windows-iis-express-sql-express.html b/docs/guides/installation/windows-iis-express-sql-express.html index 67d242b0e..ff2fd4549 100644 --- a/docs/guides/installation/windows-iis-express-sql-express.html +++ b/docs/guides/installation/windows-iis-express-sql-express.html @@ -15,7 +15,7 @@ - + @@ -244,7 +244,7 @@

    Resources

    - Edit this page + Edit this page
    diff --git a/docs/guides/installation/windows-iis-localdb.html b/docs/guides/installation/windows-iis-localdb.html index 1c6d1dbc4..2f3852f55 100644 --- a/docs/guides/installation/windows-iis-localdb.html +++ b/docs/guides/installation/windows-iis-localdb.html @@ -15,7 +15,7 @@ - + @@ -244,7 +244,7 @@

    Resources

    - Edit this page + Edit this page
    diff --git a/docs/guides/installation/windows-iis-sql.html b/docs/guides/installation/windows-iis-sql.html index c5cd794e3..fc1415acd 100644 --- a/docs/guides/installation/windows-iis-sql.html +++ b/docs/guides/installation/windows-iis-sql.html @@ -15,7 +15,7 @@ - + @@ -220,7 +220,7 @@

    Resources

    - Edit this page + Edit this page
    diff --git a/docs/guides/marketplace/assets/placeholder.html b/docs/guides/marketplace/assets/placeholder.html index b527d9e7f..f7ef3d19b 100644 --- a/docs/guides/marketplace/assets/placeholder.html +++ b/docs/guides/marketplace/assets/placeholder.html @@ -15,7 +15,7 @@ - + @@ -89,7 +89,7 @@
    Table of Contents
    - Edit this page + Edit this page
    diff --git a/docs/guides/marketplace/index.html b/docs/guides/marketplace/index.html index fdf385a6b..5cf92e1be 100644 --- a/docs/guides/marketplace/index.html +++ b/docs/guides/marketplace/index.html @@ -15,7 +15,7 @@ - + @@ -122,11 +122,12 @@

    Introduction

    Explore the Oqtane Marketplace and unleash the full potential of your Oqtane-based applications today!

    +

    ← Back to Documentation Guides Home Page

    - Edit this page + Edit this page
    diff --git a/docs/guides/marketplace/monetization.html b/docs/guides/marketplace/monetization.html index e6354784d..79b0905ed 100644 --- a/docs/guides/marketplace/monetization.html +++ b/docs/guides/marketplace/monetization.html @@ -15,7 +15,7 @@ - + @@ -107,7 +107,7 @@

    Promotional Strategies

    - Edit this page + Edit this page
    diff --git a/docs/guides/marketplace/submitting-contributions.html b/docs/guides/marketplace/submitting-contributions.html index 7d981b3ed..d6af28c83 100644 --- a/docs/guides/marketplace/submitting-contributions.html +++ b/docs/guides/marketplace/submitting-contributions.html @@ -15,7 +15,7 @@ - + @@ -107,7 +107,7 @@

    Promoting Your Contributions

    - Edit this page + Edit this page
    diff --git a/docs/guides/marketplace/troubleshooting.html b/docs/guides/marketplace/troubleshooting.html index dc8454ab0..10195c382 100644 --- a/docs/guides/marketplace/troubleshooting.html +++ b/docs/guides/marketplace/troubleshooting.html @@ -2,9 +2,9 @@ - | Oqtane Docs - APIs and more for the Modular Blazor Application Framework + Marketplace Troubleshooting | Oqtane Docs - APIs and more for the Modular Blazor Application Framework - + @@ -15,7 +15,7 @@ - + @@ -84,12 +84,29 @@
    Table of Contents
    - +

    Marketplace Troubleshooting

    + +

    Overview

    +

    This section provides resources and guidance for troubleshooting common issues related to the Oqtane Marketplace. Whether you're experiencing issues with installing, updating, or managing marketplace modules, this guide will help you resolve those problems efficiently.

    +

    Common Marketplace Troubleshooting Topics

    +

    Below are the main troubleshooting areas covered in this guide:

    + +

    For detailed troubleshooting steps and solutions, refer to the full Marketplace Troubleshooting Guide.

    - Edit this page + Edit this page
    diff --git a/docs/guides/marketplace/using-oqtane-marketplace.html b/docs/guides/marketplace/using-oqtane-marketplace.html index c2378778c..ce8295d1c 100644 --- a/docs/guides/marketplace/using-oqtane-marketplace.html +++ b/docs/guides/marketplace/using-oqtane-marketplace.html @@ -15,7 +15,7 @@ - + @@ -99,7 +99,7 @@

    Managing Installed Resources

    - Edit this page + Edit this page
    diff --git a/docs/guides/migrations/assets/placeholder.html b/docs/guides/migrations/assets/placeholder.html index bdd7513cc..59aa2c409 100644 --- a/docs/guides/migrations/assets/placeholder.html +++ b/docs/guides/migrations/assets/placeholder.html @@ -15,7 +15,7 @@ - + @@ -89,7 +89,7 @@
    Table of Contents
    - Edit this page + Edit this page
    diff --git a/docs/guides/migrations/database-migration.html b/docs/guides/migrations/database-migration.html new file mode 100644 index 000000000..14b670bd0 --- /dev/null +++ b/docs/guides/migrations/database-migration.html @@ -0,0 +1,205 @@ + + + + + Database Migrations | Oqtane Docs - APIs and more for the Modular Blazor Application Framework + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +

    Database Migrations

    + +

    Database migrations are essential in Oqtane to ensure that the database schema aligns with the application's version. These migrations help to safely apply changes to the database structure, such as adding new tables, modifying columns, or altering indexes, and are executed as part of the upgrade process.

    +

    This guide explains how to use the migration scripts, troubleshoot common issues, and resolve database-related problems during upgrades.

    +

    Overview

    +

    Oqtane uses migration scripts to handle changes to the database schema between versions. When upgrading from one version to another, migration scripts are applied to bring the database up to date with the new code changes.

    +

    The migration process typically involves:

    +
      +
    • Running pre-defined SQL scripts that modify the database structure.
    • +
    • Ensuring that database schema changes are consistent with the code's expectations.
    • +
    • Handling version-specific database changes (i.e., adding, altering, or removing columns or tables).
    • +
    +

    Running Database Migrations

    +

    To apply migrations, follow these steps:

    +
      +
    1. Backup the Database:
      +Before applying any migrations, ensure that you have a recent backup of your database to prevent data loss in case of errors.

      +
    2. +
    3. Verify the Database Version:
      +Ensure that you are upgrading from a compatible database version. Check your current database schema version and compare it with the version you're upgrading to.

      +
    4. +
    5. Run Migration Scripts:
      +Oqtane provides migration scripts that can be executed on your database to bring it up to date. These scripts can typically be run using the Oqtane Admin interface or manually using SQL tools like SQL Server Management Studio (SSMS) for SQL Server or MySQL Workbench for MySQL.

      +
    6. +
    7. Check for Errors:
      +If the migration fails, check the error messages for specific details. Look for issues such as:

      +
        +
      • Missing columns or tables
      • +
      • Foreign key constraints
      • +
      • Compatibility issues between the database version and the schema
      • +
      • Scripts that were not executed properly
      • +
      +

      For most issues, detailed error messages will help guide you to the specific cause of the failure.

      +
    8. +
    9. Confirm Successful Migration:
      +After the migration scripts are successfully executed, verify that the database schema matches the expected version. You may need to check specific tables or views to ensure that all changes were applied.

      +
    10. +
    +

    Common Migration Issues and Solutions

    +

    1. Migration Fails Due to Missing or Incompatible Columns

    +

    Symptom:
    +The migration fails with an error message stating that certain columns or tables are missing.

    +

    Solution:

    +
      +
    • Verify that the migration script is correctly applied. Sometimes, manual changes to the database schema (e.g., column removals or modifications) can cause incompatibilities.
    • +
    • Review the SQL script that was supposed to add the missing columns or tables and try to apply it manually.
    • +
    • If a column or table was removed intentionally, ensure that your migration script accounts for these changes.
    • +
    +

    2. Error During Database Schema Comparison

    +

    Symptom:
    +There is a mismatch between the current database schema and the new version after running migration scripts.

    +

    Solution:

    +
      +
    • Check if the database schema was altered manually before applying migrations. If manual changes were made, you may need to reverse them to allow the migration script to apply properly.
    • +
    • Compare the expected schema version with the current one and make necessary adjustments. Refer to the Database Schema Documentation for more details.
    • +
    +

    3. Migration Script Fails to Run on Production Database

    +

    Symptom:
    +Migration scripts run successfully in the development environment but fail in the production environment.

    +

    Solution:

    +
      +
    • Double-check that the correct database (development vs. production) is being used for the migration.
    • +
    • Ensure that the production database has the necessary permissions for applying migrations.
    • +
    • Review any environment-specific configurations that might be preventing the migration from executing properly on the production system.
    • +
    +

    4. Rollback Migration Script

    +

    Symptom:
    +The migration caused unintended changes to the database, and you need to revert to the previous version.

    +

    Solution:

    +
      +
    • If the migration supports rollback, use the rollback or revert command provided by Oqtane.
    • +
    • If rollback is not supported, you will need to manually revert the database schema using backup files or reverse-engineer the changes made during the migration.
    • +
    +

    Best Practices for Database Migrations

    +
      +
    1. Test in Development First:
      +Always test the migration on a development or staging environment before applying it to production. This ensures that any issues with the migration scripts are caught early.

      +
    2. +
    3. Backup Your Database:
      +Always take a full backup of the database before running any migrations. This protects your data in case something goes wrong.

      +
    4. +
    5. Review Release Notes:
      +Check the release notes for the specific Oqtane version you're upgrading to. There may be migration-specific instructions or known issues that need to be addressed.

      +
    6. +
    7. Ensure Database Compatibility:
      +Make sure the database server you're using is compatible with the version of Oqtane you're upgrading to. Database version upgrades may be required to fully support new schema changes.

      +
    8. +
    +
    +

    Conclusion

    +

    Database migrations are an essential part of maintaining an up-to-date Oqtane application. While they help automate database updates, it is important to monitor the migration process closely for any errors and follow best practices to ensure a smooth transition.

    +

    For additional information or troubleshooting, refer to the Migration Troubleshooting Guide or consult the Oqtane documentation for more details.

    + +
    + + + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/docs/guides/migrations/development-production-migration.html b/docs/guides/migrations/development-production-migration.html index a2dfb75ab..0ec754e31 100644 --- a/docs/guides/migrations/development-production-migration.html +++ b/docs/guides/migrations/development-production-migration.html @@ -15,7 +15,7 @@ - + @@ -140,7 +140,7 @@

    Best Practices for Productio diff --git a/docs/guides/migrations/index.html b/docs/guides/migrations/index.html index a8c36f7ca..f84f6f2c4 100644 --- a/docs/guides/migrations/index.html +++ b/docs/guides/migrations/index.html @@ -2,9 +2,9 @@ - | Oqtane Docs - APIs and more for the Modular Blazor Application Framework + Migrations in Oqtane | Oqtane Docs - APIs and more for the Modular Blazor Application Framework - + @@ -15,7 +15,7 @@ - + @@ -84,12 +84,30 @@

    Table of Contents
    - +

    Migrations in Oqtane

    + +

    Overview

    +

    This section provides guidance on handling database migrations in Oqtane. Whether you're moving from development to production, performing standard migrations, or troubleshooting migration issues, this guide will help you through each step of the process.

    +

    Migration Topics

    +

    Below are the key migration guides that will help you with various migration tasks in Oqtane:

    + +

    For further details on specific migration scenarios, follow the guides above based on your needs.

    +

    ← Back to Documentation Guides Home Page

    - Edit this page + Edit this page
    diff --git a/docs/guides/migrations/troubleshooting.html b/docs/guides/migrations/troubleshooting.html index de5fad296..8167cabb3 100644 --- a/docs/guides/migrations/troubleshooting.html +++ b/docs/guides/migrations/troubleshooting.html @@ -15,7 +15,7 @@ - + @@ -110,7 +110,7 @@

    Migration Troubleshooting Guides

    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/adding-modules.html b/docs/guides/modules/adding-modules.html index c2506ff52..f47f18b39 100644 --- a/docs/guides/modules/adding-modules.html +++ b/docs/guides/modules/adding-modules.html @@ -15,7 +15,7 @@ - + @@ -105,7 +105,7 @@

    Adding One Module Across Multip diff --git a/docs/guides/modules/assets/placeholder.html b/docs/guides/modules/assets/placeholder.html index 4610dedb8..da733b3b2 100644 --- a/docs/guides/modules/assets/placeholder.html +++ b/docs/guides/modules/assets/placeholder.html @@ -15,7 +15,7 @@ - + @@ -89,7 +89,7 @@

    Table of Contents
    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/creating-a-module.html b/docs/guides/modules/creating-a-module.html index ac865eef2..2a5d812cd 100644 --- a/docs/guides/modules/creating-a-module.html +++ b/docs/guides/modules/creating-a-module.html @@ -15,7 +15,7 @@ - + @@ -120,7 +120,7 @@

    Best Practices

    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/customizing-module-appearance.html b/docs/guides/modules/customizing-module-appearance.html index ef76408ca..3078af775 100644 --- a/docs/guides/modules/customizing-module-appearance.html +++ b/docs/guides/modules/customizing-module-appearance.html @@ -15,7 +15,7 @@ - + @@ -114,7 +114,7 @@

    Best Practices

    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/index.html b/docs/guides/modules/index.html index 62f8ef69f..581c21669 100644 --- a/docs/guides/modules/index.html +++ b/docs/guides/modules/index.html @@ -15,7 +15,7 @@ - + @@ -109,14 +109,15 @@

    Developing Modules

  • Creating Modules: Resources and guidelines for creating custom modules for Oqtane.
  • Developing Modules: Resources and guidelines for developing custom modules for Oqtane.
  • Module Deployment: Resources and guidelines for deploying custom modules for Oqtane.
  • -
  • Troubleshooting Module Development: Troubleshooting tips and solutions for common issues encountered with developing modules.
  • +
  • Troubleshooting Module Development: Troubleshooting tips and solutions for common issues encountered with developing modules.
  • Feel free to explore each topic to find the information you need to effectively work with modules in your Oqtane applications.

    +

    ← Back to Documentation Guides Home Page

    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/module-configuration.html b/docs/guides/modules/module-configuration.html index 124fe06ee..77f3810bb 100644 --- a/docs/guides/modules/module-configuration.html +++ b/docs/guides/modules/module-configuration.html @@ -15,7 +15,7 @@ - + @@ -114,7 +114,7 @@

    Best Practices

    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/module-deployment.html b/docs/guides/modules/module-deployment.html index 60595c751..8fff095c0 100644 --- a/docs/guides/modules/module-deployment.html +++ b/docs/guides/modules/module-deployment.html @@ -15,7 +15,7 @@ - + @@ -117,7 +117,7 @@

    Best Practices

    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/module-development.html b/docs/guides/modules/module-development.html index baf31e722..1ea4b84e0 100644 --- a/docs/guides/modules/module-development.html +++ b/docs/guides/modules/module-development.html @@ -15,7 +15,7 @@ - + @@ -115,7 +115,7 @@

    Best Practices

    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/module-installation.html b/docs/guides/modules/module-installation.html index 42389425d..5aec44211 100644 --- a/docs/guides/modules/module-installation.html +++ b/docs/guides/modules/module-installation.html @@ -15,7 +15,7 @@ - + @@ -107,7 +107,7 @@

    Installation Process

    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/modules.html b/docs/guides/modules/modules.html index 2973784be..cb813ba25 100644 --- a/docs/guides/modules/modules.html +++ b/docs/guides/modules/modules.html @@ -15,7 +15,7 @@ - + @@ -108,7 +108,7 @@

    Topics

    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/troubleshooting.html b/docs/guides/modules/troubleshooting.html index a496da051..fc32468e3 100644 --- a/docs/guides/modules/troubleshooting.html +++ b/docs/guides/modules/troubleshooting.html @@ -10,12 +10,12 @@ - + - + @@ -116,7 +116,7 @@

    Module Troubleshooting Guides

    - Edit this page + Edit this page
    diff --git a/docs/guides/modules/working-with-modules.html b/docs/guides/modules/working-with-modules.html index 04d70927f..20bebdd49 100644 --- a/docs/guides/modules/working-with-modules.html +++ b/docs/guides/modules/working-with-modules.html @@ -15,7 +15,7 @@ - + @@ -107,7 +107,7 @@

    Moving Modules

    - Edit this page + Edit this page
    diff --git a/docs/guides/render/index.html b/docs/guides/render/index.html index c89d191db..59fe894d8 100644 --- a/docs/guides/render/index.html +++ b/docs/guides/render/index.html @@ -15,7 +15,7 @@ - + @@ -154,11 +154,12 @@

    Flow of a Click - Event

    1. SSR: Click....tbd
    +

    ← Back to Documentation Guides Home Page

    - Edit this page + Edit this page
    diff --git a/docs/guides/roadmap/index.html b/docs/guides/roadmap/index.html index 137baf6fe..99ca5e8d7 100644 --- a/docs/guides/roadmap/index.html +++ b/docs/guides/roadmap/index.html @@ -15,7 +15,7 @@ - + @@ -338,11 +338,12 @@

    ← Back to Documentation Guides Home Page

    diff --git a/docs/guides/themes/assets/placeholder.html b/docs/guides/themes/assets/placeholder.html index 560b16ef7..46fda7c05 100644 --- a/docs/guides/themes/assets/placeholder.html +++ b/docs/guides/themes/assets/placeholder.html @@ -15,7 +15,7 @@ - + @@ -89,7 +89,7 @@

    Table of Contents
    - Edit this page + Edit this page
    diff --git a/docs/guides/themes/generator/index.html b/docs/guides/themes/generator/index.html index 799bfbd32..87f48eb5f 100644 --- a/docs/guides/themes/generator/index.html +++ b/docs/guides/themes/generator/index.html @@ -15,7 +15,7 @@ - + @@ -140,7 +140,7 @@

    You're all set

    - Edit this page + Edit this page
    diff --git a/docs/guides/themes/index.html b/docs/guides/themes/index.html index fd1ffa610..18cfc23bf 100644 --- a/docs/guides/themes/index.html +++ b/docs/guides/themes/index.html @@ -15,7 +15,7 @@ - + @@ -134,11 +134,12 @@

    Tasks to complete these guides

  • Best Practices for assets - especially JS/CSS
  • Some guidance on CSS variables / Bootstrap 5.3 conventions
  • +

    ← Back to Documentation Guides Home Page

    - Edit this page + Edit this page
    diff --git a/docs/guides/themes/oqtane-theme-code-explained.html b/docs/guides/themes/oqtane-theme-code-explained.html index aae0fe9c0..c80c06f74 100644 --- a/docs/guides/themes/oqtane-theme-code-explained.html +++ b/docs/guides/themes/oqtane-theme-code-explained.html @@ -15,7 +15,7 @@ - + @@ -367,7 +367,7 @@

    Blazor Components

    - Edit this page + Edit this page
    diff --git a/docs/guides/themes/oqtane-theme-distribution.html b/docs/guides/themes/oqtane-theme-distribution.html index 562b70af3..c5a46a88a 100644 --- a/docs/guides/themes/oqtane-theme-distribution.html +++ b/docs/guides/themes/oqtane-theme-distribution.html @@ -15,7 +15,7 @@ - + @@ -91,7 +91,7 @@

    Oqtane Theme - Distributio diff --git a/docs/guides/themes/oqtane-theme-solution-explained.html b/docs/guides/themes/oqtane-theme-solution-explained.html index 916ea1fb4..8b8fe9683 100644 --- a/docs/guides/themes/oqtane-theme-solution-explained.html +++ b/docs/guides/themes/oqtane-theme-solution-explained.html @@ -15,7 +15,7 @@ - + @@ -112,7 +112,7 @@

    Tip
    - Edit this page + Edit this page
    diff --git a/docs/guides/themes/parts-of-an-oqtane-theme.html b/docs/guides/themes/parts-of-an-oqtane-theme.html index 35823b1ab..a5bdfff57 100644 --- a/docs/guides/themes/parts-of-an-oqtane-theme.html +++ b/docs/guides/themes/parts-of-an-oqtane-theme.html @@ -15,7 +15,7 @@ - + @@ -96,7 +96,7 @@

    Themes Guide - Parts of a Theme

    - Edit this page + Edit this page
    diff --git a/docs/guides/themes/theme-configuration.html b/docs/guides/themes/theme-configuration.html index 948909345..c44f8c6c6 100644 --- a/docs/guides/themes/theme-configuration.html +++ b/docs/guides/themes/theme-configuration.html @@ -15,7 +15,7 @@ - + @@ -127,7 +127,7 @@

    Page Management

    - Edit this page + Edit this page
    diff --git a/docs/guides/themes/theme-development.html b/docs/guides/themes/theme-development.html index cb324ffd4..ada2c2d46 100644 --- a/docs/guides/themes/theme-development.html +++ b/docs/guides/themes/theme-development.html @@ -15,7 +15,7 @@ - + @@ -118,7 +118,7 @@

    Best Practices

    - Edit this page + Edit this page
    diff --git a/docs/guides/themes/theme-installation.html b/docs/guides/themes/theme-installation.html index fd80400f7..fbe98929d 100644 --- a/docs/guides/themes/theme-installation.html +++ b/docs/guides/themes/theme-installation.html @@ -15,7 +15,7 @@ - + @@ -109,7 +109,7 @@

    Additional Considerations

    - Edit this page + Edit this page
    diff --git a/docs/guides/themes/troubleshooting.html b/docs/guides/themes/troubleshooting.html index a0fee811d..80f30be79 100644 --- a/docs/guides/themes/troubleshooting.html +++ b/docs/guides/themes/troubleshooting.html @@ -15,7 +15,7 @@ - + @@ -116,7 +116,7 @@

    Theme Troubleshooting Guides

    - Edit this page + Edit this page
    diff --git a/docs/guides/troubleshooting/assets/placeholder.html b/docs/guides/troubleshooting/assets/placeholder.html index f377e5a28..fa834e690 100644 --- a/docs/guides/troubleshooting/assets/placeholder.html +++ b/docs/guides/troubleshooting/assets/placeholder.html @@ -15,7 +15,7 @@ - + @@ -89,7 +89,7 @@
    Table of Contents
    - Edit this page + Edit this page
    diff --git a/docs/guides/troubleshooting/index.html b/docs/guides/troubleshooting/index.html index 158ba31e1..0b5ccfab7 100644 --- a/docs/guides/troubleshooting/index.html +++ b/docs/guides/troubleshooting/index.html @@ -15,7 +15,7 @@ - + @@ -92,8 +92,11 @@

    What is the Oqtane Troubleshoo

    The Oqtane Troubleshooting Guide aims to assist users in resolving common problems related to login issues, user registration, system upgrades, and more. It serves as a comprehensive resource for both administrators and users facing challenges within the Oqtane Framework.

    Next Steps

    Read about the following troubleshooting sections to resolve specific issues:

    -

    User Management Troubleshooting

    +

    System Management Troubleshooting

    Installation, Upgrades, and Migration Troubleshooting