Public Backlog

WebinOne announcements, releases, updates and achievements

v7.0.3 Release date: 06 Sep, 2024

Full Release Notes

BACKLOG

Validation for Module Names

New feature to prevent the creation of custom modules with duplicate names.

  • When you try to create a new module, the system will automatically check if a module with the same name already exists.
  • If a duplicate name is detected, a pop-up message will appear, advising you to change the module's name.

Screenshots:
https://prnt.sc/LPkuPb-A5CAU

Enhanced Export Logic for Orders

The Order Export feature has been enhanced to provide more detailed information and greater control over the data being exported.

The new capabilities include:

Screenshots:
https://prnt.sc/3OF_uujwkFj5
https://prnt.sc/t5-Lu3-FvxVP
https://prnt.sc/1PD-3dcGF46y
https://prnt.sc/-YJuwkISlCmc

New System Page: reset-password-result

A new system page for reset-password-result has been added. After resetting the password, the user is redirected to this page from the reset-password system page. This page also contains the formSubmissionData object, which, if there are errors, includes a list of errors that are displayed.

Added this.formSubmissionData liquid object with the following structure

{
     "form_alias": "reset-password",
     "error": 0,
     "errormessages": [],
     "formtype": "System"
}
  • 'formtype' is always 'System'
  • 'form_alias' is always 'reset-password'
  • 'error' and 'errormessages' should be set based on errors occurred during the reset-password flow. On success, 'error' = 0

Screenshots:
https://prnt.sc/Bx_O-nZ4DZNy
https://prnt.sc/pm10eXlMZxZu
https://prnt.sc/VvZs_4r7tkJG
https://prnt.sc/GjctWpl-FFBH

When we enter the same password reset link for the second time:
https://prnt.sc/4dMqo0FeWQLV
https://prnt.sc/QXPFHEKxNe5M

Add this.siteURL to all emails and provide all variables in toolbox

1) Add this.siteURL parameter to all email’s liquid context. The parameter should appear here in the toolbox https://prnt.sc/hdl6H0MHqPLq

It should contain protocol and domain (save that domain that was used by the site visitor at the time the email sending was scheduled).

List of emails:

  • form autoresponders
  • system emails
  • custom emails and custom workflows

2) Provide toolboxes ( https://prnt.sc/ru2bmo) to all emails with the list of variables that are accessible on this object in liquid context for:

  • form autoresponders
  • system emails
  • custom emails

Screenshots:
https://prnt.sc/uhHv1Mu4SSeq
https://prnt.sc/0eq81KiJLCh9

New Component for Booking Subscriptions

Add new component tag for Bookings.

The {% component type:"booking_subscriptions" %} component returns subscriptions. It either returns all existing subscriptions or only the subscriptions of the current user.

Pattern:

{% component type:"booking_subscriptions", viewType:"[[viewType]]", object:"[[object]]", currentMemberOnly: [[currentMemberOnly]], filterBy:"[[filterBy]]", filterValue:"[[filterValue]]", filterCondition:"[[filterCondition]]", collectionVariable:"", layout:"", sortBy:"", sortOrder:"", limit:"[[limit]]", offset:"[[offset]]" %}
  • viewType
    • List [default]
    • Detail
  • currentMemberOnly [Boolean | default = true] (not required)
    • if false get all booking subscriptions of all users
    • otherwise get booking subscriptions of current logged in CRM member only
  • object [item|collection - default = collection] (not required)
  • collectionVariable (not required)
    • works the same way as in type: module.
  • layout (not required)
    • path to FTP file that will contain layout content that needs to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.
  • sortBy (not required)
    • Id [default]
    • FormId
    • MemberId
    • FormName
    • CreatedDateTime
  • sortOrder (not required)
    • ASC
    • DESC [default]
  • filterBy (not required) [default = empty]
    • Id
    • FormId
    • MemberId
    • FormName
    • CreatedDateTime
  • filterValue (not required)
    • value to use in filtering condition
  • filterCondition (not required)
    • Equally [default]
    • less
    • more
    • lessEqually
    • moreEqualy
    • contains
  • limit (not required) [default = 10]
  • offset (not required) [default = 0]

Single tag item context is described below.
If object = collection than this contains attribute property that holds the list of attributes (ie: {{this.items}}):

viewType == list

{
    "formId": 0,
    "memberId": 0,
    "id": 0,
    "formName": "",
    "EventName": "",
    "Allocation": 0,
    "Price": "",
    "dateSubmission": ""
}

viewType == detail

{
    "formId": 0,
    "memberId": 0,
    "fields": [
       {
          "name": "",
          "alias": "",
          "value": "",
          "type": ""
       }
    ],
    "id": 0,
    "formName": "",
    "EventName": "",
    "Allocation": 0,
    "Price": "",
    "dateSubmission": ""
}

Default virtual layout:

<ul>
    {% for item in this.items %}
    <li>
        <strong>{{item.formName}}</strong>
        <span>Date Submission: {{item.dateSubmission | format_date: "dddd, MMMM dd, yyyy"}}</span>
    </li>
    {% endfor %}
</ul>

The new component will be added here: https://prnt.sc/wqRi_L8xLv9o

Screenshots:
https://prnt.sc/6cP1FQJD1Z2y
https://prnt.sc/AS93RF_SyYZe

Improvement to the ‘Setup Analytics’ file input

If a Service Account Key File has already been uploaded, the file input will be filled with asterisks to indicate that a file is present.

A "Delete" button will now be visible. Clicking this button will trigger a confirmation popup: "Are you sure you want to remove this file?"

If the user clicks "Ok," the file data will be removed from the Google Analytics configuration in the database.

If a new file is uploaded and submitted with the setup analytics form, it will replace the old one.

If no file is submitted with the form, the existing file data in the Google Analytics configuration will not be removed.

DESIGN: https://invis.io/TA104JA6C9VP

Screenshots:
https://prnt.sc/g4sA72UFpT-F

Website Backup Scheduling Interface Updates

The Website Backup extension scheduling options have been adjusted.

The "Period" and "Every" dropdowns have been switched: https://prnt.sc/TJUqZPQ6NC5i

A new "Hour" option has been added to the "Period" dropdown.

If "Hour" is selected, the time dropdown will be removed.

When "Hour" is selected, the "Every" dropdown will show options for 6 and 12 hours (default is 12).

If a user had a backup previously, we would count a time based on the previous backup time. The tooltip should say: “Your next backup creation will be launched approximately at [time]”

If the user didn't have a backup and it's their first backup, we will do a backup within the next hour. The tooltip should say: “Your next backup creation will be launched approximately at [time]”

Screenshots:
https://prnt.sc/99KgYCCAX8Wm
https://prnt.sc/qEsk4gu7bUU8

eCommerce Сatalog duplication with or without sub-content

Now, users can choose to duplicate not only the catalogs but also the products within those catalogs.

When duplicating a catalog, a message will appear with two options:

  • Duplicate Sub-Catalogs Only:
    This option allows you to duplicate the catalog along with its sub-catalogs, but without duplicating the products.
  • Duplicate Sub-Catalogs and Products:
    This option duplicates both the catalog with its sub-catalogs and all the products within them.

Screenshots:
https://prnt.sc/kMUu0iyQ3C7O

Custom Modules Advanced Filtering

Public Backlog request link: https://webinone.com/public-backlog-state/delivered/custom-modules-advanced-filtering

Add the "Where" parameter to the admin panel. This parameter will be used for the items.

Add the "Filter Type" dropdown with the 2 options: "Simple Filtering" and "Advanced Filtering". The default is "Simple filtering". Default view will show a "Filter Type" dropdown and a "Filter by" dropdown.

If the user switches to "Advanced filtering" in the "Filter Type" dropdown, the "Filter By" dropdown will be removed and replaced with the "Where" drop-down, which will be a text input field.

If the user configures both "Filter By" and "Where", then "Where" will be prioritized, and the system will do filtering based on "Where". "Filter By" will be ignored in such case.

The filter value will use the JSON Query Language format as per: https://github.com/clue/json-query-language/blob/master/SYNTAX.md

Screenshot:
https://prnt.sc/-YJuwkISlCmc

Liquid Parser Inside Text Based Files

Backlog request: https://webinone.com/public-backlog-state/request/custom-modules-advanced-filtering

Liquid (and module rendering) is now available inside other text based files such as .css, .js, .xml, .json, .txt, etc.

Add the liquid parameter to the file URL to force it to be processed by the liquid engine.

Example

File:

/assets/css/main.css

In order to parse file with liquid reference the file with the URL parameter:

/assets/css/main.css?liquid=1

With the new functionality, the liquid will be parsed within the file, so the file is returned with the parsed liquid, providing the URL param is used when referencing the file.

Show more less
New Feature

Custom Modules Advanced Filtering

- Ability to filter Custom Module items using JSON Query Language Syntax inside "filterBy" parameter of Liquid module component.
NOTE: This feature will complete all the BC's module_data filtering capabilities.

  • Custom Modules
New Feature

Liquid Parser Inside Text Based Files

Liquid (and module rendering) inside other text based files such as .css, .js, .xml, .json, .txt, etc.
Add ".liquid" suffix to the file URL to force it to be processed by the liquid engine.

Example

File:
/assets/css/main.css
In order to parse file by liquid first use such link:
/assets/css/main.css.liquid
  • Liquid