Public Backlog

WebinOne announcements, releases, updates and achievements

v 3.1 Release date: 29 Jan, 2019

Full Release Notes

Backlog

Event Groups and Events (CRUD)

Create two nested system modules (Event Group and Event) similar to the blog structure (Blog and Blog Post).

Event Group module created in order to help grouping events rather than keeping them all in one single list. Although, you're still able to view events in one list. For this reason List View was set as default layout (with ability to switch to Tree View http://prntscr.com/mf70zr
Unlike the blog and blog posts - events are allowed to be created in the root level of Event Groups and events (Blog post can’t be created in the root level only in the blog for example).

Event module has event specific fields:

  • Date From
  • Date To
  • Capacity: (number)
  • Hide when full: (boolean)
  • Price : (number)
  • Allow multiple subscription per one email: (boolean)

Backlog

CRM -> Booking Subscriptions created by an Event Form submission

If formData.eventId is not null - trigger eventSubscription flow:

  • Set allocations from formData.allocations. If value is empty or "<1" then set allocations=1
  • Validate Event Subscription (separate task created with the description)
  • If event has price not null and ">0" then trigger event payment flow
    • if payment is succeed
      • use standard form's redirect/output flow
    • Otherwise show payment error message from the payment flow
  • Otherwise - create event booking record from formData info and use standard form's redirect/output flow

Backlog

Form -> Event subscription validation

Event Subscription Validation:

  • Check event exists by formData.eventId:
    • if not found, alert: Event with such id does not exist
  • Check event is still available:
    • not disabled
    • Current Date is between EventDateStart and EventDateEnd (if EventDateEnd is empty - use EventDateStart with time 23:59:59)
    • Current Date is between ReleaseDate and ExpiryDate (same way as used now in custom modules), alert: The event you are subscribing for is not available
  • Check capacity and allocation requested. Messages:
    • if capatity = current event allocation, alert: The event is full
    • elseif capatity < (currentEventAllocation + formData.allocation), alert: The event hasn't enough seats. Only [[capatity-currentEventAllocation]] seats left.
  • Check Allow multiple subscription per one email
    • If Allow multiple subscription per one email option is false and formData.email is already subscribed to the event, alert: You already subscribed to this event

Backlog

Events

Permissions and Menu integration

Backlog

CRM -> Booking Subscription

Permissions and Menu integration

Backlog

CRM -> Orders section

Permissions and Menu integration

Backlog

Component box -> Events

  • List of Events and Event Groups (same as for module items but with such fields as capacity, price etc)
  • Event Subscription Form
    • List of Events to choose from. Default option is "For detail layout" which gives the form a value as {{this['id']}}. Example:
      {% component type: "form", alias: "[[formAlias]]", eventId: "{{this['id']}}" %}
    • list of forms (that has acceptEventSubscription field enabled).
    • Once user selects form and an event item, show code for copying, example: {% component type: "form", alias: "payment_form", eventId: 1939 %}

Backlog

Settings -> Payment Settings

Payments Gateways Section (also added to Permissions and Menu integration)

Gateway (select) options:

  • Stripe

Backlog

Payments Gateway - Section [Stripe]


Stripe Settings:

  • Key (required) (string)
  • Currency (string) (Default USD)
  • Image (string) (with upload widget like http://prntscr.com/mbx4v0
    Tooltip: A relative or absolute URL pointing to a square image of your brand or product.
    The recommended minimum size is 128x128px.The supported image types are: .gif, .jpeg, and .png

Specified image will be shown here http://prntscr.com/mf7c8a

Backlog

Form -> Form builder -> 'Accept Payment' and 'Accept Event Subscription' buttons

Option to add 'Accept Payment' and 'Accept Event Subscription' to the form on form builder section

  • Accept Event Subscription, generates the below code before the
    element:

    {% if params.eventId != null %}

    {% component source: "Event", layout: "", filterBy: "id", filterValue: "{{params.eventId}}", collectionVariable: "formEventData", type: "module" %}

    {% assign formEvent = formEventData.items[0] %}

    {% assign paymentAmount = formEvent.price %}

    {% assign orderDescription = formEvent.name %}

    {% assign orderName = "Book an event" %}

    {% endif %}

    Generated inside the element:

    {% if params.eventId != null %}

    <input type="hidden" name="eventId" value="{{formEvent.id}}" data-trp_price="{{paymentAmount}}">

    <label for="allocations">Allocation</label>

    <input type="text" name="allocations" data-trp_quantity="1" value="1">

    {% endif %}

    Therefore:

    If form has “Accept Event Subscription” field selected – you can specify event you want to subscribe for by id in component tag:
    {% component type: "form", alias: " [[formAlias]]", eventId: "1939" %}

  • Accept Payment, generates the below code inside the element:

    <label for="PaymentType">Payment Type</label>

    <select id="PaymentType" name="paymentType"> <option data-currency="" data-image="" data-key="" value="stripe">Stripe</option> </select>

    <input type="hidden" name="paymentData" value="">

    <label for="Amount">Amount</label>

    {% if paymentAmount == null %}

    {% assign paymentAmount = params.price | default: 0 %}

    {% endif %}

    <input type="text" id="Amount" name="Amount" value="{{paymentAmount}}" data-trp_price="{{paymentAmount}}">

    Generated as data-attributes on the element:


    data-trp_order_name="{{orderName | default: this.name}}" data-trp_order_description="{{orderDescription}}"

    Generated inside the page element:

    <script src="https://checkout.stripe.com/checkout.js"></script>
    <script src="/cms-assets/js/payment.js"></script>

    Therefore:

    If form has “Accept Payment” field selected – you can specify price in component tag:
    {% component type: "form", alias: "[[formAlias]]", price: "20" %}

Backlog

Add file payment.js and main.css to /cms-assets directory

Create/Update files:

  • /cms-assets/js/payment.js
    (for payment flow in general and stripe flow in particular)
  • /cms-assets/css/main.css
    (minified version of the default styles)

NOTE:

All files in /cms-assets folder could be overridden by treepl team via sprint updates. So don’t make any changes in those files. If you want to change something that is affected by those files – add them to your own files or remove default scripts and styles from desired pages.

Backlog

Payment Form Processing Logic

Payment flow

  1. If Form Payment type:
    • Event:
      • Get event.price
      • get totalAmount = event.price * allocations
    • General:
      • get totalAmount = formData.Amount
  2. Payment process:
    • If formData.paymentType == 'stripe'
      • Get token from formData.paymentData
      • Verify totalAmount with token
      • If success - end flow
      • else - show message: Payment is failed: [[error message from stripe]]

Backlog

System Email -> Invoice

Create new System Email that should be sent on successful payment

{{this.order}} liquid object contains

  • {{this.order.id}}
  • {{this.order.MemberEmail}}
  • {{this.order.MemberId}}
  • {{this.order.MemberLink}} (link to admin to CRM -> Order -> particular order)
  • {{this.order.Link}}
  • {{this.order.items}} collection of objects. Object ({% for item in this.order.items %}):
    • {{item.entityid}}
    • {{item.entityType}} (Event, Form)
    • {{item.name}}
    • {{item.price}} (totalCost/quantity)
    • {{item.quantity}}
    • {{item.totalCost}}
    • {{item.currency.code}}
    • {{item.currency.symbol}}
    • {{item.currency.digitalCode}}
    • {{item.currency.name}}
  • {{this.order.Status}}
  • {{this.order.PaymentType}}
  • {{this.order.TotalCost}}
  • {{this.order.currency.code}}
  • {{this.order.currency.symbol}}
  • {{this.order.currency.digitalCode}}
  • {{this.order.currency.name}}
  • {{this.order.TransactionID}}
  • {{this.order.CreatedDateTime}}
  • {{this.order.UpdatedDateTime}}

Backlog

Submission Process -> Custom Invoice behavior

On form submission process:

  • If payment
    • Check for name="customInvoiceId" field.
      • If found Email by that id - use that content for invoice
      • If not found or name="customInvoiceId" is null - send default System Email -> invoice

Backlog

Set admin page titles

Setup page titles in admin the same as in the title inside the content http://prntscr.com/m8rw77

Backlog

Recaptcha V3

  • Recaptcha v3 now a new button in the Form -> form builder.
  • Disallow - recaptcha v2 and recaptcha v3 to be selected together for a form (validation upon save)

Backlog

Add form related scripts only if they are required

Scripts should be automatically added before ONLY if there is at least one form that requires it.

  • recaptchav2
  • recaptchav3
  • acceptPayment field

Backlog

Sitemap generator - release/expiry options fix

Apply release/expiry options on Sitemap generator Only if they are Enabled in the module settings

Example:

  1. http://prntscr.com/m82qpa
  2. http://prntscr.com/m82qdp

Backlog

Upgrade liquid filters to the latest version of the liquid library

This fixed some issues like:

  • Divided_by will no longer be integer division.
    {{3 | divided_by : 2}} will be 1.5 instead of 1 as it was before
  • Sort filter now can sort simple arrays (not only array of objects by object’s field as it was before)
    {% assign arr = "c,d,a,b" | split: ","| sort | join: "," %}
    {{arr}}
    now returns a,b,c,d
  • Added sort_natural filer (case insensitive sorting)

Filter list now is (bolded items are new):

  • Array Filters:
    • join
    • first
    • last
    • concat
    • map
    • reverse
    • size
    • sort
    • sort_natural
    • uniq
  • Misc Filters
    • default
    • date
    • format_date
    • compact
    • url_encode
    • url_decode
    • strip_html
    • escape
    • escape_once
    • handle
    • handleize
  • Number Filters
    • ceil
    • divided_by
    • floor
    • minus
    • modulo
    • plus
    • round
    • times
  • String Filters
    • append
    • capitalize
    • downcase
    • lstrip
    • rstrip
    • newline_to_br
    • prepend
    • removefirst
    • remove
    • replacefirst
    • replace
    • slice
    • split
    • strip
    • truncate
    • truncatewords
    • upcase

Backlog

Empty custom menu fix

If custom menu consist only from empty items force redirect to menu configurator not the login screen.

Backlog

Add datasource name and datasource url to the item liquid data

Add datasource name and datasource url to the item liquid data:

  • {{this.dataSourcePropertyAlias}} - ID as it is now
  • {{this.dataSourcePropertyAlias_name}} - name of the datasource item OR null (if no item found by dataSourcePropertyAlias ID).
  • {{this.dataSourcePropertyAlias_url}} - url of the datasource item OR null (if no item found by dataSourcePropertyAlias ID).

Backlog

Convert Author image custom property from type Text to type Media

Convert Author image custom property from type Text to type Media (without losing currently saved values)

Backlog

Search custom modules by parentId and url slug

Add ability to search custom modules using

  • prop_Slug (equals rule)
  • prop_Url (contains rule)
  • prop_ParentId (add by default to search form html under prop_ModuleId with value "":
    • "-1" means the parent module's root folder id.
    • Empty means skip this filter

Backlog

Create new module - disable save button while saving

While creating a custom module when clicked save once Save button should become inactive.

If validation errors occurs - enable button

Bug

Default gallery layout wasn't patched

In Gallery/Slider Layouts -> Default List now creates correctly functioning layout code:

Bug

First login (after some time past) to the site admin issue

When admin user tried to login to the admin panel (after some time past) - it just keeps looping the login page (first time).

After refresh the page login works fine

Bug

Can't save page when its ftp html file name contains Capital letters

After creating an HTML page via the File Manager an error would be thrown if attempting to later save that page via the admin 'Pages' section.

Bug

Liquid engine – recursion fix

  • In menu sub item layout (/_MenuLayouts//sub_items.layout)
  • if replace {% for item in currentItem.items %} with {% for item in this.items %}
  • would result in infinite recursion that dramatically slowed down the site
Show more less
New Feature

Canada (Central) Data Center

Ability to create sites on Canada (Central) data center. Existing live and trial sites of Treepl Partners from Canada will be transferred by our admins upon request.
  • Infrastructure
New Feature

Booking Records

Adding event subscriptions as separate records inside CRM.
  • CRM
  • Events
New Feature

Payable Events, Items, Forms

- Ability to create events
- Ability to create event subscriptions
- Ability to create forms with payments
- Payments go through Stripe
  • Custom Modules
  • Ecommerce
  • Events
Improvement

reCAPTCHA v3 Support

The ability to add reCAPTCHA "invisible" so the user would not have to "solve" the reCAPTCHA by clicking the relevant images.
  • Forms
  • Member Area