v 5.5 Release date: 20 Aug, 2020

Full Release Notes

BACKLOG

File Manager:
Files/folder lazy loading

Improve file manager to use lazy loading functionality (to show only those elements that are visible on screen) in order to prevent long loading of the files and folders when there are a lot of files and/or sub-folders.

Once user scrolls the active area, show following elements and hide previous so browser would not be overloaded.

BACKLOG

Custom Shipping Layouts Bug

eCommerce JS should not overwrite the <options> layout entirely.
Option layout should be taken from the ’data-cms_cart_shipping_option_name_layout’ attribute that is located on the <select> tag.

If no data attribute would be found - js will use default option name layout.

Back-end:

Default layout should be improved by adding ’data-cms_cart_shipping_option_name_layout="{itemName} ({itemPrice})"’ to the select tag http://prntscr.com/tcue19

BACKLOG

3rd Party Shipping Integration:
Order States and Tracking Info Management

1) Add two system fields to the ’Order’ item in the admin (after Invoice Date http://prntscr.com/tb49jp):

  • AWB Number
  • Tracking URL (as an active link)

Also added to the ‘Order’ liquid object.

2) Provide ability to edit some Order details: http://prntscr.com/tb48qa

  • Status Type (rename label to Status)
  • Invoice Date

3) Add new admin panel page: ‘Ecommerce’ > ‘Settings’:

Move here Shopping cart life time setting from Misc settings (https://prnt.sc/sw1toc)

4) Order Statuses should be reworked:

DESIGN http://prntscr.com/u6s8kg.

Add ’Manage Statuses’ Tab to ’eCommerce’ -> ‘Shop Settings’ page


Provide Ability to Create, Update, Delete Status and change their order in the dropdown on the ’eCommerce’ -> ‘Shop Settings’ -> ’Manage Statuses Page’ (http://prntscr.com/u6s8s9)

Add/Edit contains following fields:

  • Status Name (required)
  • Type (not editable. For display purposes only)
    • Custom (default)
    • New
    • AwaitingPayment
    • PendingCharge
    • PaymentCanceled
    • Paid
  • Workflow (multi-select)
    • Not Set (default)
    • --- list of workflows ---
  • Notify Customer
    • boolean (default false)

Provide following delete logic:

  • Only Statuses with Type=’Custom’ could be deleted.
  • Don't show delete button and don't execute delete operation on statuses that has type other than ’Custom’

Pre-create following statuses (set all to: Workflow=Not Set, Notify Customer=False)

  • New (selected when order is created)
  • Awaiting Payment (selected when create order via checkout form)
  • Pending Charge (selected when two step card payment successfully placed funds for the order on hold)
  • Payment Canceled (selected when: admin canceled the pending charge payment, or, pending charge payment was expired and as a result was canceled)
  • Success (selected when CMS retrieves a message from payment provider that payment was successfully processed)
  • Payment Failed (selected when CMS retrieves a message from payment provider that payment failed)

Remap all orders with current enum statuses as follows:

  • AwaitingPayment => Awaiting Payment (Type=AwaitingPayment)
  • Succeed => Success (Type=Paid)
  • Failed => Payment Failed (Type=PaymentFailed)
  • New => New (Type=New)

5) Add new system email (‘Email Notifications’ > ‘System Emails’):

  • ‘Order Status Changed’
  • Order Status
    • dropdown of all order statuses.
    • based on the selected status, show associated ’System Email Details’ and ’Content’ fields.
    • store ’System Email Details’ and ’Content’ fields data for each Order Status separately.
    • store this set of system emails on FTP in separate folder:
      • /Content/SystemEmails/OrderStatusChanged/[[order-status-name]].html
      • each time when new custom order status will be created - create [[order-status-name]].html file
      • each time when custom order status name will be changed- changed [[order-status-name]].html file
      • apply FTP synchronization to these files (update file content will update Content field of the email)

Liquid scope for "this":

  • order
  • oldOrderStatus
  • customer
  • siteUrl

eg:
Dear {{this.customer.firstname}},
The status of your order (#{{this.order.invoiceNumber}}) has been changed from {{this.oldOrderStatus}} to {{this.order.status}}.

6) Add functionality to the order status change event:

When changed (manually or via backend flow logic) - get new status settings and

  • send ’Order Status Changed’ system email if ’Notify Customer’ setting is True
  • send all selected workflows that are selected in the ’Workflow’ setting (if there is a workflow selected)

BACKLOG

3rd Party Shipping Integration:
(BASE LOGIC)

1) Shop Measurements Setup

Add the following settings to the ’eCommerce’ -> Settings’.

Determines the unit of measure to be applied to the Shipping options and Products Width, Height, Depth and Weight for the calculation of shipping price.

Preset kg and cm for all sites in Database by default.

Options:

  • dimension:
    • cm (default)
    • in
    • mm
    • m
    • ft
    • yd
  • weight:
    • kg (default)
    • lb
    • oz
    • g

2) Shipping Option Integration Setup

Modify the shipping option Details form according to the following fields order:

  • Name
  • Currency / Country
  • Type (new extended list)
    • User Defined
    • FedEx
    • UPS
    • USPS
    • Canada Post
    • Australia Post
    • New Zealand Post
  • Tax Code
  • Price

Once any type with Shipping Integration selected- hide ’Price’ fields and show additional fields specific to the selected shipping provider:

  • Origin Zip/Postcode (string)
  • Shipping Provider Services (dropdown)

unique fields for the particular shipping provider including api access params.
BC Example for each shipping provides:

3) Shipping option integration on front-end UI

Design: http://prntscr.com/u6s6cf

When shipping option that has shipping provider integration is selected, show additional input field: “Destination Zip/PostCode”

  • If shipping provider accepts any other additional fields that affects the cost - show them (For example: “Address is residential” field for UPS Air https://prnt.sc/talnkb, https://prnt.sc/talo94)
  • Once zip is entered - request available shipping Options from the shipping provider via API and show them under ’Destination Zip/PostCode’
    (here is an example of shipping options retrieving for FedEx https://www.fedex.com/lite/lite-ship.html?locale=en_us&cntry_code=us#address)
  • If there are several options available for the destination - provide the ability to choose one.
  • If there are only one option available - preselect it.
  • if no options available - show message "No shipping options available for this destination".
  • if any error occured - show error message.

4) Shipping option display based on order rules

Shipping options that have shipping provider integration should follow the same rules as currently works for ’User Defined’ shipping options (Shipping Option -> Settings tab).

This includes:

  • measurement constraints
  • price constraints
  • limit delivery to country
  • exclude if purchase from catalogs

5) Shipping Price Calculation Rules

Once shipping provider returns the options and their prices - extract ’shippingTaxRate’, ‘shippingPrice’ based on the response data (if no tax set in the CMS the tax info will be taken from the shipping integrator if provided).

Then recalculate base shipping price by adding any ’Handling Charge’ and ’Additional Per item Handling Charge’.

And then recalculate ’shippingTaxPrice’, ‘shippingTotal’ and all other related prices like it works for ’user defined’ shipping options.

Set resulting values to the liquid object of the shopping cart.

Return to UI prices that already includes ’Handling Charge’, ’Additional Per item Handling Charge’ and ’taxPrice’. Basically the ’shippingTotal’ (https://prnt.sc/talnkb)

6) Checkout form improvement based on the shipping providers integration

Set zip code field to disabled (it is not allowed to be changed) and pre-filled by the value chosen on the shopping cart step (similar to how country is pre-selected based on the country selected on the shopping cart and not allowed to be changed).

BACKLOG

3rd Party Shipping Integration:
Liquid component tag for shipping providers additional fields

Add new component tag for "shippingProvidesFields":

{% component type:"shippingProvidesFields", collectionVariable:"", layout:"" %}

  • collectionVariable (not required) - works the same way as in other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

Item context: empty

Default virtual layout:
<div data-cms_cart_shipping_provider_fields_holder></div>

BACKLOG

3rd Party Shipping Integration:
(FedEx)

Implement Shipping provider API according to BASE LOGIC API: https://www.fedex.com/en-us/developer.html

BACKLOG

3rd Party Shipping Integration:
(UPS)

Implement Shipping provider API according to BASE LOGIC API: https://www.ups.com/upsdeveloperkit?loc=en_US

BACKLOG

3rd Party Shipping Integration:
(USPS)

Implement Shipping provider API according to BASE LOGIC API: https://www.usps.com/business/web-tools-apis/documentation-updates.htm
and
https://www.usps.com/business/web-tools-apis/rate-calculator-api.pdf

BACKLOG

3rd Party Shipping Integration:
(Canada Post)

Implement Shipping provider API according to BASE LOGIC API: https://www.canadapost.ca/cpo/mc/business/productsservices/developers/services/rating/getrates/default.jsf

BACKLOG

3rd Party Shipping Integration:
(Australia Post)

Implement Shipping provider API according to BASE LOGIC API: https://developers.auspost.com.au/

BACKLOG

3rd Party Shipping Integration:
(New Zealand Post)

Implement Shipping provider API according to BASE LOGIC API:
https://www.nzpost.co.nz/business/developer-resource-centre

BACKLOG

2 Factor Auth for admin portal

1) Implement 2FA for the Treepl SSO service (Use google authenticator)

2) enable 2FA on edit account (partner portal): http://prntscr.com/u6s3zj

3) each time on login to portal or any site

  • show QR code and code field on separate page after successful login (if 2FA not set up for the current user)
    http://prntscr.com/u6s4y8
  • show code field on separate page after successful login (if 2FA is set up for the current user) (without QR code)

4) add ability to enable 2FA for the site on site details and show indicator on sites list

  • similar checkbox setting as on edit profile
  • show if 2FA is enabled for the site

5) for site admin users (if 2FA for the site is enabled) each time on login:

  • show QR code and code field on separate page after successful login (if 2FA not set up for the current user)
    http://prntscr.com/u6s4y8
  • show code field on separate page after successful login (if 2FA is set up for the current user) (without QR code)

BACKLOG

Replace old order.totalHtmlPrice and remove property

Replace all occurrences of ’totalHtmlPrice’ to ’totalPriceHtml’ within order or shopping cart objects in following places:

  • System emails:
    • Supplier Notification
    • Invoice
    • OfflineCreditCardPayment
  • Forms:
    • Checkout
  • System Pages:
    • offline-credit-card-payment
    • order-receipt
    • shopping_cart

ATTENTION:

Custom includes, layouts or snippets where totalHtmlPrice has been used as part of any custom logic will not be replaced. It needs to be replaced to totalPriceHtml by the partner manually.

BACKLOG

Payment gateways:
Paypal

1) Create support for Paypal Payment gateway.

2) Gateway logic should support following flows of capturing price:

  • ‘Instant payment’ (charge money right away)


Places for logic to be implemented in:

  • ‘Settings’ -> ’Payment’:
    Provide ability to setup API credentials for Paypal
  • Page rendering function:
    Setup auto-add Paypal payment scripts in <head> section (similar to how it's done for eway and stripe)
  • Payment form submit processor:
    Setup charging process via Paypal API using token retrieved from formData

Forum Backlog: https://treepl.co/public-backlog-state/coming-next/paypal-payment-gateway

BACKLOG

Payment gateways:
Authorize.net

1) Create support for Authorize.net Payment gateway.

2) Gateway logic should support following flows of capturing price:

  • ‘Instant payment’ (charge money right away)

Places for logic to be implemented in:

  • ‘Settings’ -> ’Payment’:
    Provide ability to setup API credentials for Authorize.net
  • Page rendering function:
    Setup auto-add authorize payment scripts in <head> section similar to how it's done for eway and stripe
  • Payment form submit processor:
    Setup charging process via Authorize.net API using token retrieved from formData

BACKLOG

{% break %} and {% continue %} not working in liquid 2.0

Example:

{% for item in (1..10) %}
{{item}}<br>

{% if item == 6 %} THIS SHOULD BREAK HERE! <br>{% break %} {% endif %}

{% endfor %}

<br>

<hr>

<br>

{% for item in (1..10) %}

{% if item >= 6 %} THIS SHOULD CONTINUE HERE! <br>{% continue %} {% endif %}

{{item}}<br>

{% endfor %}

Expected: https://prnt.sc/s7gxh0

Actual: https://prnt.sc/s7gyj1

Source:

https://forum.treepl.co/t/bug-break-not-working-within-if-statement-in-forloop/963

BACKLOG

Add module ID/alias to the Liquid item object

Extend module item object by adding following properties:

  • Module_ID
  • Module_Alias

BACKLOG

Increase File Manager Upload limit

Set the maximum length of content in a request to be 300MB in the File Manager.

Update the validation message when trying to upload more than 300MB.

BACKLOG

Banner system module release and expiry date

Upgrade module settings for ’Banner’ system module so it will have ’release’ and ’expiry’ date enabled by default.

BACKLOG

Show 404 Page when file is not found

Modify CMS error handler so if URL that leads to a file (.pdf, .doc, etc.) is not found - display 404 System Page.

BACKLOG

Add invoice number column to CRM -> Order list

Add new column on the CRM > Orders page: “Invoice number”

Example: https://prnt.sc/s7h68k

BACKLOG

Download from media type

Add Download button alongside media type fields and in the File Manager:

https://drive.google.com/file/d/1GFcEG2gjC5tNrcM8F_YX3N8EbebbSQXS/view?usp=sharing

BACKLOG

Data Source for system modules extending

Allow to select module for Data Source property from the FULL list of modules (system and custom modules)

Bug

Module archive fix

Fixed ‘module_archive’ component for items that belong to the current month (previously they were skipped).

Bug

Bug from forum - not correct code for Event Group

https://forum.treepl.co/t/possible-bug-in-event-group-component/1205

Toolbox generates incorrect code for event groups. Should be like this:

{% component source: "Event group", layout: "Detail", type: "module" %}

Show more less
New Feature

Ecommerce: 3rd Party Shipping Integration

Add 3rd party shipping APIs to eCommerce.

Integrations that partners have "voted" for:

· FedEx
· UPS
· USPS
· Canada Post
· Australia Post
· New Zealand Post

  • eCommerce
  • New
New Feature

Authorize.net Payment Gateway

Auhtorize.net payment gateway for ecommerce and payable forms / events / subscriptions.

  • eCommerce
  • New
  • BC Equivalent
New Feature

PayPal Payment Gateway

Paypal Standard (non seamless) and PayPal PayFlow (seamless) for ecommerce and payable forms / events / subscriptions.
  • eCommerce
  • BC Equivalent
New Feature

BONUS: 2FA (two-factor authentication)

The ability to enable 2FA (two-factor authentication) for site admin acccess and Treepl Portal access.
  • Admin Panel
  • General
  • New
v 5.4 Release date: 13 Jul, 2020

Full Release Notes

BACKLOG

Payment Flow For Europe:
Two-step card payments

1) Add new setting to the form settings (show only if at least one of the selected payment gateways support Two-step card payments)

  • Payment Flow
    • Instant payment (default)
    • Two-step card payments

2) Payment gateways with Two-step card payments support:

  • Stripe
  • Bambora

3) Current payment flow logic is Instant payment.
Once
Two-step card payments selected and if payment gateway supports Two-step card payments - setup and apply following payment flow logic:

  • documentation (from Stripe)
    -
    https://stripe.com/docs/charges/placing-a-hold
    or
    -
    https://stripe.com/docs/payments/capture-later
  • Once user submitted a payment form - place required funds on hold.
  • Creating order, email notifications etc should be created/sent similar as for Instant payment flow but set cost to pending amount value. Set payment state to pending. Set Order state to pending charge.
  • Add ability on order -> payments to proceed hold payment https://prnt.sc/ruktxm
    • If clicked and payment proceed successfully - set payment state to Success
    • otherwise - set payment state to canceled and Order state to Payment Canceled.
  • If hold is expired (7 days period of hold) - then force change payment state to canceled. Order to Payment Canceled.
  • Add cancel button. Release the hold funds and payment state to canceled. Order state to Payment Canceled.
  • Failed order could be fixed via adding cash payment record or via deferred payment flow.
  • If order consists of downloadable products only - force process Instant payment flow

4) Add Amount captured column on the Order -> Payments table http://prntscr.com/tfci79

BACKLOG

Payment Flow For Europe:

Stripe for EU (SCA via 3D Secure)

1) Implement Strong Customer Authentication (SCA):

(SCA) is a regulatory requirement in effect as of September 14, 2019, that impacts many European online payments.
It requires customers to use two-factor authentication like 3D Secure to verify their purchase.

2) Add setting to stripe Payment Gateway (Enable 3D Secure)

Enabling this setting will force payment form to trigger Payment Intents flow with support of 3D Secure rather then Charges

3) Create new system page: Checkout payment (/checkout-payment)

4) Payment Intents flow will not ask you for card details on the form but once the form is sent - it should redirect you to Checkout payment system page.

In case you are paying for Event, secure zone subscription or general payment:

  • order should be created after payment is confirmed
  • secure zone subscription should be applied after payment is confirmed
  • event subscription should be added after payment is confirmed

5) If shopping cart total price was changed after user comes to Checkout payment system page - show validation error on submit:

“Price of the shopping cart was changed.
Please go back to the <a href="/shopping_cart">Shopping Cart</a> page, verify the data and re-submit the form.”

BACKLOG

Payment gateways:

Bambora Payment gateway

1) Create support for Bambora Payment gateway.

Use Norway and Switzerland logic version:

https://developer.bambora.com/europe/checkout/getting-started/create-payment

2) Gateway logic should support following flows of capturing price that should be configured via gateway settings (similar as for stripe):

  • Instant payment: charge money right away
  • Two-step card payments: place money on hold allowing to charge manually via order

3) Show error message if domain is not verified (endpoint is not valid error from bambora) on charging:

“The payment can't be processed. This domain is not verified by Bambora. Please contact their support in order to get the domain verified.”

BACKLOG

Custom Reports:

Builder

DESIGN http://prntscr.com/thh497

1) Add page and menu item: ‘Reports’ > ‘Custom Reports’

Provide ability to:

  • Add new report
  • list reports (with pagination 20 per page)
  • Show only reports marked as public or that were created by the current logged in Admin User


2) All functionality with Custom Reports is available starting from Pro plan.

3) Reports Builder:

SETTINGS

Save the report by name and set as public option that allows you to share the report with other admin users. If Make public set to false - you are the only one who will see this report.

TYPE

The type determines what fields should be collected for Fields and Filters steps and what entities should be collected for the final report.

- Contacts (default)

- Contacts and Cases

- Contacts and Orders

- Contacts and Event Bookings

FORM FILTER

Select a form (from all available web forms) to filter only those cases,orders or event bookings that belong to this form.

Show section only if type is one of:

- Contacts and Cases

- Contacts and Orders

- Contacts and Event Bookings

---------

FIELDS

Select Fields to be seen on report as column headers

  • Fields For Cases:
    • Case Id
    • Form name
    • Date Submission
  • Fields For Orders
    • Order Id
    • Form name
    • Date Submission
    • Currency
    • Country
    • Total Cost
    • Amount Paid
    • Pending Collection
    • Shipping Address
    • Shipping City
    • Shipping State
    • Shipping Zip Code
    • Shipping Country
    • Invoice Number
    • Invoice Date
    • Status
  • Fields For Booking Subscriptions
    • Booking Subscription Id
    • Form name
    • Booking Date
    • Allocation
    • Price
    • Event Id
    • Event Name
  • Contact fields
    • Contact
    • First name
    • Last Name
    • E-mail
    • Address
    • City
    • State
    • Zip Code
    • Country
    • Site
    • Phone
    • Status
    • Notes
    • Type
  • Form fields (show only if certain form was included for report)
    • <list of all selected form's custom fields>

---------

FILTERS

  • Field (to filter by)
    • <all fields available from the report type>
  • Condition options (depending on Field value type)
    • Equals
    • NotEqualTo
    • LessThan
    • GreaterThan
    • LessOrEqual
    • GreaterOrEqual
    • Contains
    • DoesNotContain
    • StartsWith
  • Value (depending on Field type)
    • if the field is general string or number type - show text field
    • if it's a dropdown or radiolist - show dropdown

Ability to add additional filtering rules

---------

RESULTS

Generate sortable and paginated results table.

Ability to export to Excel file.

BACKLOG

Custom Reports:

Export

Provide ability to export Custom report to Excel file.

Columns should be the same as the report.

BACKLOG

Import/Export of prices, attributes and inventory

Export format:

Add all system properties of the product after default properties and before custom properties

Product area should be defined as (http://prntscr.com/rhxeho):

  • (1) first line - info of the product and its relations
  • (2) all lines under with the same SKU code before end of file or another SKU code (SKU code should be same and present in all lines of the product data)

Add following fields for specific-serialized relations:

  • Parents [name of the parent module]. eg: `Catalog`
    • Value: [parent item urls separated by `;`].
      eg:
      `/catalog-1/sub-catalog;/catalog-1;/;`
  • Sale Price
    • Value: [country]-[currency]/[sale-price],[quantity for threshold option №1]/[price threshold option №1],[quantity for threshold option №2]/[price threshold option №2];
      eg: AU-AUD/30.00,2/26.00,5/22.00;AU-USD/20.00,10/18.00,100/16.00;

      NOTES:
      If no [currency] specified - use Currency-By-Country-Defaults.json mapper as default currency for country definition
  • Retail Price
    • Value: [country]-[currency]/[sale-price];
      eg:

    AU-AUD/30.00;AU-USD/20.00;

    NOTES:
    If no [currency] specified - use Currency-By-Country-Defaults.json mapper as default currency for country definition

  • Tax Code
    • Value: [country]/[tax_name or "Never"];
      eg:
      AU/Never;US/AZ;

      NOTES:
      If [tax_name] not set to the country or [tax_name] === ”Never”, do not apply tax
  • Grouping Product Codes
    • Value: [product_sku_code][Is_main_product];
      eg:
      sub_prod_1;main_prod*;sub_prod_2;

      NOTES:
      If [Is_main_product] == "*" then this product IS main. Otherwise this product IS NOT main.

      If several products shown to be main - use last one as main and ignore others.
  • Grouping Product Display Name
    • Value: [product_display_name];
      eg:
      Sub product 1;;Sub product 2;

      NOTES:
      Can be empty.
  • Related Products
    • Value: [product_sku_code];
      eg:
      HAYNM5AXVB;sub_prod_1;HMDP9271;
  • Low Stock Notification
    • Value: number
      eg:
      50

      NOTES:
      Greater than or equal to 0
  • Enable Inventory Control
    • Value: (boolean) true or false
      eg:
      Y or TRUE
      N or FALSE or empty
  • Can Pre-Order
    • Value: (boolean) true or false
      eg:
      Y or TRUE
      N or FALSE or empty
  • Hide if Out of Stock
    • Value: (boolean) true or false
      eg:
      Y or TRUE
      N or FALSE or empty
  • Attributes
    (ignore this cell value if product ALREADY EXIST AND has GENERATED VARIATIONS AND "Variations Enabled" cell != FALSE)
    • Value: (complex pattern described below, intended to be on one line)

      [attribute name][is_required]
      |
      [attribute_type]
      |
      [is_inventory_item]
      :
      [option_name]
      |
      [option_image_path]
      |
      [country]-[currency]
      /
      [option_price_1]
      |
      [country]-[currency]
      /
      [option_price_2]
      ,
      [option_name]
      |
      [option_image_path]
      |
      [country]-[currency]
      /
      [option_price_1]
      ,
      [option_name]
      ||
      [country]-[currency]
      /
      [option_price_1]
      ; (repeat)

      NOTES:
      I
      f no [currency] specified - use Currency-By-Country-Defaults.json mapper as default currency for country definition

      [option_name] CAN'T contain following symbols
      - |
      - ,
      - '
      - *

      If [is_required] == * then this product IS required. Otherwise it’s not.

      [attribute_type] is one of the following:
      - 5 or DropDownList
      - 6 or CheckBoxList
      - 7 or RadioList

      [is_inventory_item] - determines if current attribute is inventory attribute, one of:
      - Y or True - (boolean) true
      - N or False - (boolean) false

      [option_image_path] and option prices are not required and can be skipped in format string.

      Example string:
      Test attr checklist*|6|N:option checklist 1|/img.jpg|AU/10|US/5,option checklist 2|/img.jpg|AU/20|US/15,option ck 3|;Test attr Dropdown List*|5|Y:option droplist 1|/img.jpg|AU/10|US/5,option droplist 2|/img.jpg|AU/20|US/15;Test attr radiolist*|7|Y:option radiolist 1|/img.jpg|AU/10|US/5,option radiolist 2|/img.jpg|AU/20|US/15;ddfdsd*|5|Y:aasas||AU/20|US/15,xasas||AU/20|US/15

  • Wholesale Sale Price
    • Value: (pattern described below, intended to be on one line)

      [country]-[currency]
      /
      [sale-price]
      ,
      [quantity for threshold option №1]
      /
      [price threshold option №1]
      ,
      [quantity for threshold option №2]
      /
      [price threshold option №2]
      ; (repeat)

      NOTES:
      If no [currency] specified - use Currency-By-Country-Defaults.json mapper as default currency for country definition

      Example String:
      AU-AUD/30.00,2/26.00,5/22.00;AU-USD/20.00,10/18.00,100/16.00;
  • Recurring Type
    • Value: one of (numeric or string value)
      - 1 or Once
      - 2 or Daily
      - 3 or Weekly
      - 4 or Fortnightly
      - 5 or Monthly
      - 6 or Quarterly
      - 7 or Half Yearly
      - 8 or Yearly
  • Hide if Out of Stock
    • Value: (boolean) true or false
      eg:
      Y or TRUE
      N or FALSE or empty

      NOTES:
      If TRUE and no variations was created earlier - generate all variations and edit them by the values within columns
      Variations Code, Enabled, In Stock, Pre-Order determining variation by attribute options combination in the column Variation Options.
      If FALSE - discard variations.
  • Variation SKU Code
    This column and columns below are assigned both to initial (global) product and to it’s variations.
    - Value for the first row assigned to the global product settings.
    - Values in the row/s below (that relate to initial product) are assigned to each variation row.
    • Value: string (unique SKU code, should be empty for product row but required for variation row)
      If not set - ignore entire variation row data.

      Eg:
      HAYNM5AXVB
  • Enabled
    • Value: (boolean) true or false
      eg:
      Y or TRUE
      N or FALSE or empty
  • Variation Options
    • Value:
      [option_of_attribute_1]
      ;
      [option_of_attribute_2]
      ; etc.

      NOTES:
      Determines what variation should be edited by the fields:
      - Variations Code
      - Enabled
      - In Stock
      - Pre-Order

      If such combination not found in the product - ignore changes in this row for the following columns:
      - Variations Code
      - Enabled
      - In Stock
      - Pre-Order

      eg:
      HAYNM5AXVB;sub_prod_1;HMDP9271;
  • In Stock
    • Value: number (greater than or equal to 0)
  • Pre-Order
    • Value: number (greater than or equal to 0)

BACKLOG

Liquid security issue on form submission

Add algorithm that will protect user-submitted content of liquid and JS injection in all form submissions and when user adds or edits a module item, for all text fields.

  • IF Module -> Settings ->Site User Permissions -> Requires Approval == disabled https://prnt.sc/sq0ga9
    AND
  • IF it contains any of the following substring:
    • {%
    • %}
    • {{
    • }}
    • <script
    • <style
    • </script>
    • </style>
  • do the following:
    • if any liquid symbols was found
      • remove tags from the content
      • wrap all content with value here
    • then replace
      • <script to the <script-is-not-allowed
      • <style to the <style-is-not-allowed
      • </script> to the </script-is-not-allowed>
      • </style> to the </style-is-not-allowed>
    • run current item create/edit logic
  • else
    • run current item create/edit logic
  • If user edits the item and Module -> Settings ->Site User Permissions -> Requires Approval == enabled
    • Disable item after performing the changes

IMPORTANT:

Validate text value length AFTER the wrapping if it has occurred. So if original value fits the single line text field but once wrapped it doesn't - the validation error should be shown.

Example:

<div>

<h1>Some title</h1>

{{this}}

<script>location.href = "https://some-fishing.site"</script>

<style>body{display: none !important;}</style>

</div>

Replace with:


<div>

<h1>Some title</h1>

{{this}}

<script-is-not-allowed>location.href = "https://some-fishing.site";</script-is-not-allowed>

<style-is-not-allowed>body{display: none !important;}</style-is-not-allowed>

</div>

BACKLOG

Datasource Field:

When focus a field - get first 50 datasource items

Improve Datasource Form control:

  • perform search by focusing the field (trigger empty search if keyword is not set or empty)
  • Show 50 items of found results
  • Add search icon that will submit search request by entered keyword
  • Add remove icon that will erase entered keyword and will submit empty search request

BACKLOG

Recaptcha v3 validation JS fix

Fix for general form

Fix for payment form

CMS generated javascript changes to avoid conflicts with payment JS. No Partner/front-end changes required.

BACKLOG

Advanced CRM:

Custom Fields Groups CRUD Page

Add page for Custom CRM groups list (http://prntscr.com/thh86e).

Provide ability to add, edit, delete the Custom CRM group.

Provide ability to use pagination for Custom CRM groups.

Add/Edit form should contain following fields:

  • Form name (string)
  • Apply To (dropdown) - list of entries allowed to applied CRM group to:
  • CRM fields (panel with list of custom fields with ability to create/update/delete field. Similar to form fields builder)
    Allowed field types:
    • DateTime
    • CheckboxList
    • DropdownList
    • DropdownList (multiple)
    • ListboxList
    • RadioList
    • Boolean
    • Multiline
    • String
    • Upload
    • DataSource
    • Number

Design: http://prntscr.com/thh7y7

BACKLOG

Advanced CRM:

Custom CRM Field Groups attaching rules and linkage

There should be 2 types of custom crm groups linkage

Global setting:

  • Determines what groups are marked as Attached to ALL CRM contacts.
  • Represented as list of groups.

Individual Contact record Attachment:

  • Determines group to certain contact linkage. 1 to 1.
  • Represented as list of Groups-to-Contact records.

Saved custom crm group values for the contact should be saved as group-field-contact-value records.

group-field-contact-value records should not be deleted on unassigning Global setting or Certain Contact record Attachment from the crm contact.

Description

  • If custom CRM group is attached to Contacts via global setting then each contact should view that group in the bottom of the contact details page
  • If custom CRM group is attached to the certain Contact record via:
    • form submission
    • adding via button on contact detail view http://prntscr.com/orpcbb
      • Then view that groups in the bottom of the contact details page.

Linkage entities (each should have EDIT entity button and "Add Custom Fields" button https://prnt.sc/orpcbb):

  • Contacts
  • Form Submissions
  • Orders
  • Booking Subscriptions

Group Displaying Rules:

  • Display custom group for the entity IF
    • Current entity type was added in the "Apply to" property of the CRM group settings.
    • OR
    • Custom group was checked in the "Add Custom Fields" setting of the current entity https://prnt.sc/orpcbb
  • "Add Custom Fields" settings https://prnt.sc/orpcbb should be all unchecked by default.
    Admin user is the only one person that could check any of those custom groups.

BACKLOG

Advanced CRM:

Attach Custom field groups to web forms

Provide ability to choose Custom CRM Groups and attach them to the form.

http://prntscr.com/thh94m

Default layout builder should build all fields of each group similar to the form's custom fields.

Name should be:

[[GroupAlias]]_[[FieldAlias]]

Example:
Group alias: AccountInfo
Field alias: Position
Field:
<input type="text" name="AccountInfo_Position">

BACKLOG

Advanced CRM:

Add custom CRM field groups to CRM record

CRM contact detail page should contain new button:

Add Custom Fields

Clicking on that button should show panel that allows to select existing custom CRM forms.
When selecting a form and click save - that custom CRM group should be attached to the Contact (Certain Contact record Attachment).

http://prntscr.com/thhakq

BACKLOG

Advanced CRM:

Liquid component tag for custom CRM fields

Add new component tag component type:"CRMContactCustomGroup":

Pattern:

{% component type:"CRMContactCustomGroup", groupAlias:"[[groupAlias]]", fieldAlias:"[[fieldAlias]]", entityType:"[[entityType]]", entityId:"[[contactId]]", collectionVariable:"", layout:"" %}

  • groupAlias (required) - alias of the custom CRM group.
    • All group fields with their values should be set to the {{this.fields}} array of objects if fieldAlias is not set. Otherwise {{this.fields}} should contain only one element, being the object for the specified field set via fieldAlias.
  • entityType (not required) - determines the CRM entity type to retrieve custom group for. Values can be:
    • form_submission
    • event_booking
    • order
    • contact (default, if no type set for the component)
  • entityId (not required) - determines the CRM entity to retrieve custom group for
    • if entityType is contact
      • If field is empty - try use current logged in CRM contact id. - If no logged in users found return empty context item
      • If CRM contact has isDataUsingAllowed not equal to true than return empty context item
    • else
      • If field is empty - return empty context item
  • fieldAlias (not required) - alias of the CRM group field. Should be used to find a particular group field value for the CRM contact (determined by entityId and the group determined by groupAlias).
  • collectionVariable (not required) - works the same way as other modules.
  • layout (not required) - path to FTP file that will contain layout content for the data.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

Item context:

{
    "Alias": "",
    "Fields" :
    [
        {
            "Name" : "",
            "Alias": "",
            "Value" : ""
        },
        ...
    ]
}

Default virtual layout:

{{this.fields[0].value}}

BACKLOG

Advanced CRM:

Toolbox - Liquid component tag for custom CRM fields

Add new item to toolbox:

  • CRM
    • CRM Contact Custom Group

BACKLOG

Advanced CRM:

Plan restrictions

All functionality with advanced CRM custom groups should be available starting from Pro plan.

Add to menu:

  • CRM
    • Advanced CRM Groups

BACKLOG

CRM Records as Datasource:

System property for allowing using crm contact records

Add new system property to CRM Contact record:

isDataUsingAllowed (bool)

  • label: Allow listing my contact data in the CMS
  • default value: false
  • can be set to true via edit account form
    (Add this field to the edit account form html that generates by toolbox)
  • can NOT be set to true via admin panel

CRM records that has this checkbox ticked ON will be allowed to:

  • be assigned to module items (should help with the GDPR since this checkbox allows user to disallow using his record just by unchecking the checkbox on the profile page).
  • be used by liquid component for retrieving and listing contacts.

BACKLOG

CRM Records as Datasource:

Module item custom property - CRMRecord

Add new Module item property type:

CRM record

  • property allows to assign any CRM record that has "isDataUsingAllowed=true"
  • holds id of crm contact record (similar to datasource).
  • switching "isDataUsingAllowed" to false should trigger removing that crm record id from all module items that have properties of CRM record type with that saved id.

BACKLOG

CRM Records as Datasource:

Liquid output of CRM records

Add new component tag component type:"CRMContacts":

Pattern:

{% component type:"CRMContacts", filterBy:"", filterValue:"", limit:"", offset:"", sortBy:"", sortOrder:"", collectionVariable:"", layout:"" %}

Component should filter, sort and return list of CRM contacts that has isDataUsingAllowed equal to true ONLY

  • filterBy (not required) - CRM Contact property name to perform filtering by.
  • filterValue (not required) - value to perform filtering by param set in filterBy. Similar to module component filtering.
  • limit (not required) - number of tags to be rendered (Default value is 10)
  • offset (not required) - number of contacts in the result list to skip retrieving start from (Default value is 0)
  • sortBy (not required) - any contact system properties (Default value is FirstName)
  • sortOrder (not required) - ASC or DESC (Default value is ASC)
  • collectionVariable (not required) - works the same way as other modules.
  • layout (not required) - path to FTP file that will contain layout content for the data.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

Default virtual layout:

<ul>

{% for contact in this.items %}

<li>{{contact.FirstName}} {{contact.LastName}} - {{contact.Email}}</li>

{% endfor %}

</ul>

Item context:

{

"items" :

[

{

"id": 0,

"email": "",

"firstname": "",

"lastname": "",

"address": "",

"city": "",

"state": "",

"zipcode": "",

"country": "",

"site": "",

"phone": "",

"status": "",

"notes": "",

"createddatetime": "",

"updateddatetime": "",

},

...

]

}

BACKLOG

CRM Records as Datasource:

Toolbox - Liquid output of crm records

Add new item to toolbox

  • CRM
    • CRM Contact List

BACKLOG

Ability To Parse JSON With Liquid

1) Add new component tag: component type:"json":

Pattern:

{% component type: "json", source_type:"[[source_type]]", source:"[[source]]", layout:"[[layout]]", collectionVariable:"[[collectionVariable]]" %}

  • source_type (required param):
    • path
    • url
    • string
  • source (required param):
    • path - any path to FTP file that contains JSON as content. Example: '/some/path/filename.json'
    • url - any internal or external URL that returns JSON response. Example: 'https://some.domain/some_api/'
    • string - JSON string. Example: '{"some" : "value"}'
  • collectionVariable (not required) - works the same way as in other components.
  • layout (not required) - path to FTP file that will contain layout content for the data.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

Default virtual layout:

{{this}}

{{this}} variable contains the parsed json object.

If parse error occurred {{this}} will be NULL

2) Component added to Toolbox (https://prnt.sc/s2pmv2):

  • Liquid Data
    • JSON Data

=================

Public Backlog item:

BACKLOG

Extend URL slug max length

Allow slug max length to be 254 symbols instead of current 200

BACKLOG

Add shipping address to order (system fields)

1) Add shipping address as system fields to the order in the admin

Extend order model by adding shipping address as system fields http://prntscr.com/tet3te

Separate address to the following fields and allow editing via order edit operation:

  • Shipping Address
  • Shipping City
  • Shipping State
  • Shipping ZipCode
  • Shipping country

2) Extend Order liquid object

Extend Order liquid object by adding following fields:

  • shippingAddress
    • addressLine
    • city
    • state
    • zipCode
    • country

So they could be listed like

  • {{this.order.shippingAddress.addressLine}}
  • {{this.order.shippingAddress.zipCode}}
  • etc

BACKLOG

Last sorting state saving for the module list view

Remember the latest sorting field and sorting direction for each module on list view http://prntscr.com/t97vsn

Once admin user comes back to the module items list view in the admin - the sorting should be the exact same as it was saved earlier.

BACKLOG

Re-send Invoice

1) Provide ability to re-send invoice email from the admin dashboard (on edit order page) to:
- Order creator/customer (‘Email Invoice’ button)

- Custom email (‘Send Test Email’ button): once clicked - shows text field to enter email address (pre-filled by current admin email)

BETA

Feature flags updates for v5.4

For Trial Sites:

Flags moved to internal section AND set to enabled:

  • Advanced payment flow
  • Advanced URL manager
  • New liquid engine & nICE 2.0

For Live sites:

Flags move to internal section AND set to enabled:

  • Advanced URL manager

BETA

Make reCaptcha to be required for users not logged in

1) Feature flag: Anti-spam protection

Enables logic restriction that doesn't allow to submit any web form for not logged in users if the form doesn't include reCAPTCHA (v2 or v3)

Apply restriction as part of validation if

  • form has no payment fields (if has - no need for forced reCAPTCHA)
  • user is not logged in (if user is logged in - no need for forced reCAPTCHA)

2) WARNING:

The flag will be force enabled in 5.5 release (but it still could be temporarily disabled for certain sites on demand).

So change your forms accordingly for 5.5 release.

And in 5.6 this logic will be applied permanently.

Bug

Url (and all other system properties) names should be restricted for custom properties of the module

When creating custom properties, for any module, using a name of any system property the property should not be created since such alias in use.

System should say “Property with specified name already exists”

THIS FLOW SHOULD WORK FOR ALL SYSTEM PROPERTIES

Bug

Verified domains to be case insensitive

Validate email domains using case insensitive comparison:

https://prnt.sc/t6vj5q

Bug

{{this}} in Snippet is incorrect

Snippet should contain the same object within this variable that is accessible outside snippet.

1. Create snippet and write {{this}} http://prntscr.com/sos6mn

2. Create a Page and output that snippet http://prntscr.com/sos7qe

3. Create another page and write {{this}}

Expected:

The only difference between those 2 pages should be only in additional “params” property available in snippet this output http://prntscr.com/sos9nf

Actual:

Properties of this object shown incorrectly http://prntscr.com/thgqkk

Bug

Treepl main CSS link position

Fixed to be prepended to the head section instead of append.

https://forum.treepl.co/t/treepl-ecommerce-css-link/1063

Show more less
New Feature

Assign CRM Records To Module Items As Datasource

1) "isDataUsingAllowed" - system property type checkbox added to CRM record (only crm records that has this checkbox ticked on will be allowed to be assigned to module items (should help with the GDPR since this checkbox allows user to disallow using his record just by uncheckin the checkbox on the profile page).

2) CRM record - type property...
  • Custom Modules
  • CRM
New Feature

Custom Reports

Ability to create custom records based form submissions, booking records, contacts etc.
  • CRM
New Feature

Advanced CRM

Customization of forms, form submissions and contacts by a set of predefined groups of fields.
  • CRM
  • BC Equivalent
v 5.3 Release date: 06 May, 2020

Full Release Notes

BACKLOG

Module Duplication

Function restriction upgrade: Allow copying module starting from Pro plan

BACKLOG

`ProductDataJsonHTML` to product detail layout

Exclusively for Product Module:

Automatically add {{this.ProductDataJsonHTML}} to the product detail if there is no manual output inside the layout

BACKLOG

Parent Child module links in module settings

Add ability to switch between parent and child module via links.
Made them in the way that clearly shows what module is parent and what is child.

Useful if you want to go to Blog post settings from blog settings.

Design - https://prnt.sc/skhen8

BACKLOG

Search keywords field

Added search keywords field to import/export

BACKLOG

Downloadable products: System Properties

Add following fields to the system properties for Products module:

  • Enable Shipping

    • (boolean)

    • default `true` (preset `true` to all products that was created before this update)

  • Is Downloadable Product

    • (boolean)

    • default `false`

    • once `true` - show Product File

  • Product File

    • (file)

    • Store file in a folder not accessible via ftp (as a result - not accessible by direct URL)

    • Show new control "Product File" with:

      • download (once clicked – allow user to download the file if an admin)

      • upload (once clicked raise file uploader window)

    • show non-editable file name

    • on upload remove old file, add new file

    • on upload new file show popup: “Are you sure you want to replace already uploaded file?”

    • if `Is Downloadable Product == false`

      • remove access to the file.

      • If `true` restore access

Design https://prnt.sc/skhijv

BACKLOG

Downloadable products: Processing Logic

1) Add api to retrieve downloadable file

  • URL: `/api/get_order_file/[order_line_id]`

  • If order is successfully paid (order pending price == 0) AND product has `Is Downloadable Product == true`

    • Download file

    • else; Show 404 page

2) If product has been deleted - delete file as well.

On delete - show popup:

“You have downloadable file attached to the item and it will be deleted with the item. Are you sure you want to delete this item?”

BACKLOG

Downloadable products: Shipping Options logic upgrade

HIDE shipping options only if ALL products in shopping cart has:

  • `Enable Shipping == false`

Return an undefined `Enable Shipping` value as `true` if:

  • `Is Downloadable Product == true`

OR

  • `Is Gift Voucher == true`

Otherwise it's `false`

BACKLOG

Downloadable products: Downloadable link for the order line liquid scope

Add property `downloadableFileURL` to `order` line liquid object.
Accessible everywhere that `order` liquid object is added to the liquid scope (thankyou page, invoice, workflow, supplier emails, etc).

  • Value is a downloadable link.
  • if product is not downloadable - value is `null`

Modify thank you page and invoice email (default layouts) to show download link if order line is downloadable product

Design https://prnt.sc/skhlt9

BACKLOG

Downloadable products: Count downloads logic

Add `Max Downloads Allowed` system field to product module:

  • type: `int`
  • default: `0`

If value is > 0

  • Allow verified downloading process not more times than `Max Downloads Allowed` for the order line (product['MaxDownloadsAllowed'] * orderlineQuantity)
  • If someone tries download file but gets 404 - DO NOT COUNT it as download attempt
  • Else; If admin downloads the file - allow them to download the file BUT DO NOT COUNT it as download attempt
  • Else; download the file and COUNT it as download attempt for the order line

Else (value is 0 or empty)

  • Allow unlimited file downloading
  • COUNT it as download attempt for the order line

BACKLOG

Downloadable products: Downloadable link in admin

Wrap the product name in `order -> products` tab with a link to downloadable file if it is a downloadable product.

BACKLOG

Stripe customers in advanced payment logic

Modify payment via stripe logic.

  • Add customer based on the `formData.Email` field to stripe if they don't exist.
  • Check if current card's fingerprint (taken from the token) is already added to this stripe's customer
    • If added - use this added card to process payment
    • else; add card source (token) to this customer and process payment

As a result if same customer submits several payments - it will always be as one single record in vendor's stripe account.

And they will have attached list of non-repeated credit cards that is based on tokens provided while payment.

BACKLOG

Attribute and attribute options ordering

Provide ability to change order of the attributes and options for products via drag-and-drop functionality, which applies the ordering to:

  • Admin UI interface
  • liquid object for attributes and options via `{% component type: "item_attributes" %}`
  • object returned for `productDataJSON` property
  • order line attributes object


Hide drag-and-drop functionality on mobile devices.

BACKLOG

Show number of products in all shopping carts

Ecommerce -> Product -> inventory:

Show number of items added to all shopping cart sessions under the label of: `Added to shopping cart`

Add to general product and product with variations screens:

http://prntscr.com/riwxwb

http://prntscr.com/rix0au

BACKLOG

Link to order on gift voucher

Ecommerce -> Gift voucher edit page:

BACKLOG

Add link to order from Case, booking

Add link to order from:

BACKLOG

Daily recurring subscriptions

Add daily recurring subscriptions option to the secure zone.


Modify subscription expiration extending logic:
Add +5 hrs to secure zone expiration date (but not to the payment subscription) in order to avoid temporary loosing of the access while waiting for the IPN notification regarding successful payment

BACKLOG

Order Management Upgrade

Split form submissions and booking subscriptions in orders detail page

BACKLOG

Grouped products form improvement

Remove description field from the grouped product object.

Leave display name only

BACKLOG

Add tax in product order line + extended tags

Details here:
Calculation Spreadsheet

Equivalents:

1) Add following properties to the order line liquid object:

  • taxRate

    • Shows decimal value of the tax rate

  • unitTaxPrice

    • Shows (unitprice*taxRate) numeric value

  • unitTaxPriceHtml

    • Shows (unitprice*taxRate) numeric value wrapped with holder compatible with ecomerce.js

    • Add js calculation for this property

  • totalPriceExcludingTax

    • Shows (unitprice*quantity) numeric value

  • totalPriceExcludingTaxHtml

    • Shows (unitprice*quantity) numeric value wrapped with holder compatible with ecommerce.js

    • Add js calculation for this property

  • taxPercentHtml

    • Shows percent value of the order line tax with % sign wrapped with holder compatible with ecommerce.js

    • Add js calculation for this property once tax for order line is changed

  • totalHtmlPrice rename property to totalPriceHtml

    • On appstart - edit shopping cart, invoice, checkout thankyou pages fixing old property usage to the new one

  • totalHtmlPriceExcludingTax rename property to totalPriceExcludingTaxHtml

Example of missing properties and its values: https://prnt.sc/rwvj2f


These properties should be accessible wherever order line object occurs in liquid; ie: on orders and shopping cart, in invoice, workflow, supplier emails and on checkout thank you page.


2) Add following properties to order (see above Example Spreadsheet for calculation definition)

  • shippingPrice

  • shippingPriceHtml

    • price of shipping option without tax

    • Add js calculation for ...Html property

  • shippingTaxRate

    • tax rate applied to the shipping option

    • Add js calculation for ...Html property

  • shippingTaxPercentHtml

    • tax percent applied to the shipping option

    • Add js calculation for ...Html property

  • shippingTaxPrice

  • shippingTaxPriceHtml

    • tax price applied to the shipping option

    • Add js calculation for ...Html property

  • shippingTotalPrice

    • shipping price with tax

  • subTotalPrice

  • subTotalPriceHtml

    • fix property calculation - should be

      • sum of item.totalPriceExcludingTax

      • instead of current

      • sum of item.totalPrice

  • subTotalTaxPrice

  • subTotalTaxPriceHtml

    • sum of item.taxPrice

    • Add js calculation for ...Html property

  • discountedSubTotalTaxPrice

  • discountedSubTotalTaxPriceHtml

    • subTotalTaxPrice - productTaxDiscount

    • Add js calculation for ...Html property

  • taxPrice

  • taxPriceHtml

    • fix property calculation - should be

      • discountedSubTotalTaxPrice + shippingTaxPrice

      • instead of current

      • sum of item.taxPrice

    • Add js calculation for ...Html property

  • grandTotalPrice

  • grandTotalPriceHtml

    • subTotalPrice + subTotalTaxPrice

    • Add js calculation for ...Html property

  • totalPriceExcludingTaxAndGiftVoucherAmount

  • totalPriceExcludingTaxAndGiftVoucherAmountHtml

    • subTotalPrice + shippingPrice - discountPriceExcludingTax

      • discountPriceExcludingTax is (based on discount type)

        • subTotalPrice*discountRate

        • or

        • discountAmount

    • Add js calculation for ...Html property

  • totalPriceExcludingTax

  • totalPriceExcludingTaxHtml

    • subTotalPrice + shippingPrice - discountPriceExcludingTax - giftVoucherPrice

    • Add js calculation for ...Html property

BACKLOG

Out of stock - hide product

If product in inventory tab has Out of stock property value equals to `hide product` (https://prnt.sc/rseiyi)

Add rule to remove such items from filtering and searching logic of the site.

When accessing by direct link - show 404

BACKLOG

Instock logic review

Change the logic to NOT storing reserved for shopping cart items in In Stock property:

  • In Stock

    • Always positive value or 0

  • Pre-order

    • Always positive or 0

    • shows number of items that was bought after in stock value becomes 0

  • Added to shopping cart

    • add this property as display field to the inventory tab (https://prnt.sc/rq90pu) for both global inventory settings and each variation line and the total below.

    • Always positive or 0

    • shows number of items stored in all existed shopping cart sessions

    • Return quantity when canceling order or destroying shopping cart:

      • if pre-order > 0

        • if return quantity > pre-order

          • instock = instock + (return quantity - pre-order)

          • pre-order = 0

        • else

          • pre-order = (pre-order - return quantity)

      • else

        • instock = instock + return quantity

BACKLOG

Orders submission flow rework

Save form submission data to stripe metadata when performing a payment.

Once stripe sends success callback - create form submission record based on data in metadata field

BACKLOG

Add Shop settings page and Format settings update

1) Create groups on the `Settings -> Misc` page

Admin Panel Settings

  • Enable text wrapping on a new line in the ace editor.
  • Enable 24 Hours Format in the Date Picker

Recaptcha settings

  • Recaptcha V3 Score

Shop settings

  • Shopping Cart Life Time (Default 24 hrs)
    Use this value to determine how long shopping cart could exist (use shoppingCart['lastUpdateDate'] property).
    Once time is exceeded - delete shopping cart.

2) Extend `Currency and Format` settings panel (Settings > Domains > Currency and Formatting)

Add `Use Custom Number/Currency Format` checkbox (https://prnt.sc/rrnzsp)

  • If enabled - show customization layout with examples similar to this one (https://prnt.sc/re4w3m)

    Apply using these settings in all places where format settings are used in the system (ie: All ...Html properties of the product, orderline, order, etc. and liquid filters that are relying on format settings

Params to be listed in user friendly way:

  • CurrencyGroupSeparator (string) = ","
  • CurrencyGroupSizes (string) = new[] {2, 1, 2}
    CSV string of numbers. Determines pattern for Group sizes (from right to left. Last digit would be repeated)

    Moreinfo: patterns

    Examples:
    • 0 or empty (eg: 123456789)
    • 3 (eg: 123,456,789)
    • 3,0 (eg: 123456,789)
    • 3,2 (eg: 12,34,56,789)
  • CurrencyDecimalSeparator (string) = "."
  • CurrencySymbol (string) = $"GRN"
    (Preset with the symbol of the selected currency)
  • CurrencyNegativePattern = 8
    dropdown with UI friendly labels.
    As per these patterns: patterns
  • CurrencyPositivePattern = 2
    dropdown with UI friendly labels.
    As per these patterns: patterns

BACKLOG

Country list management for shopping cart

1) Add ability to choose what countries to show on the shopping cart.

Add `allowedCountries` option to the {% component type:"countries" %}

Value:

  • Comma separated list of country codes (eg: US,AU)
  • default value is empty string
  • if empty - show ALL countries
  • else; show only those countries that determined in the comma separated list

Example:

{% component type:"countries", collectionVariable:"", allowedCountries:"US,AU" %}

2) Add ability to select countries via multiselect dropdown in the component toolbox

BACKLOG

nICE color picker z index issue

Would it be possible for the algorithm to have a minimum z index of at least 100.

It seems like it's calculating it at 5 on any complex website, there are going to be items that are over that z-index.

BACKLOG

Offline Credit Card Payment System page

NOTE: To be renamed “Deferred Order Payment”

Create new system page

  • Offline Credit Card Payment

Liquid scope of the page should include the `order` object (same as is accessible on checkout thank you page)

Page should contain a new system form with:

  • payment fields for the current domains' payment gateway
  • hidden input for order id with preset orderId value via {{this.order.id}}

Add to component toolbox ability to retrieve offline payment HTML form code

  • Ecommerce > Offline Payment Form

BACKLOG

Offline Credit Card Payment Email

NOTE: To be renamed “Deferred Order Payment”


Add new System email

  • Offline Credit Card Payment

  • Subject: Pay an Order #{{this.order.id}}

Liquid scope

  • siteURL

  • order

  • customer

    • The CRM record that is attached to the order. Same as added in {{request.member}}

  • offlinePaymentPageURL

    • Required to be in the email content. Should contain domain that was saved within the order.
      Provide validation and do not allow to save content if email content does not contain {{this.offlinePaymentPageURL}} string

BACKLOG

Offline Payments flow

NOTE: To be renamed “Deferred Order Payment”

Provide ability to send Offline Credit Card Payment Email from the `Order -> Payments` tab (https://prnt.sc/rvjj8g)

  • Send Offline Credit Card Payment button

  • Email should be triggered for the domain that is attached to the current order

Alternatively, provide ability to go directly to `Offline Credit Card Payment` system page URL (front-end) from this tab

  • Pay By Credit Card button

  • link to system page should contain orderId

When submitting a form from the Offline Credit Card Payment system page

  • Validate payment data

  • if error - show same error message as for the web forms

  • else - proceed payment and

    • if success attach it to the order that is referenced via hidden input

      • Set order status to success

      • add success payment line to `Order -> Payment` tab

    • else - show error payment message.

Provide ability to set `redirectURL` param. Same as for general forms (form input field)

Provide ability to use `jsonResponse=1` param. Same as for general forms

BACKLOG

Password change in CRM

1) Add ability to change password for the CRM contact record.

When admin changing password - send `Password Changed` system email


2) Add new system email `Password Changed`

  • When saving email perform validation

    • {{this.adminEmail}} liquid output is required

  • Liquid scope of this:

    • siteUrl

    • adminEmail

    • newPassword

    • member (object - all data of crm contact like it outputs in {{request.currentmember}})

  • Subject

    • “Your password has been changed on {{this.siteUrl}} by the admin”

  • Content

    • “Hello {{this.member.firstname}},

      Your password on ({{this.siteUrl}}) website has been changed to <strong>{{this.newPassword}}</strong> by the admin ({{this.adminEmail}}).

      If you did not request this change, please contact your website administrator.”

BACKLOG

Bulk delete booking subscriptions

On `Event -> subscription` tab (https://prnt.sc/rq7cff) provide ability to

  • delete all button
  • select several items and click delete selected items

BACKLOG

"Today" Button For Release/Expiry Date Functionality

Add a "Today" button on Release/Expiry Date fields for making inputting date easier, as in BC.

https://prnt.sc/rvix5f

BACKLOG

Payment Fields Appearance Management

1) Add ability to manage layout that is generated by payment systems (https://prnt.sc/rsfhq7):

Added two tabs:

  • Settings (Current content)
  • Appearance (List of setting for the current payment gateway)

Create list of fields based on the documentation below:

2) Apply chosen appearance settings to the payment fields within all payment forms' layouts

Modify {% component type:"payment_form_fields", formAlias:"{{this.alias}}" %} layout or payment script JS GET params for this task.

BACKLOG

Case Insensitive URL redirect param

1) Add additional checkbox field to specify if url redirect is case sensitive or not.

  • Is Case Insensitive

    • default value is true

    • by default set once on app-start values of existed redirects to true


logic:

  • If value is true

    • compare requested URL with saved redirect URL and ignore the letters case

      • Request URL /content will trigger URL redirect /Content => /new-content

      • Request URL /Content will trigger URL redirect /Content => /new-content

      • Request URL /Content will trigger URL redirect /content => /new-content

  • else

    • compare requested URL with saved redirect URL including comparing the letters case

      • Request URL /content will NOT trigger URL redirect /Content => /new-content

      • Request URL /Content will trigger URL redirect /Content => /new-content

      • Request URL /Content will NOT trigger URL redirect /content => /new-content

2) Add column to list layout for Is Case Insensitive property


3) Add column to import/export URL redirects flow.

BACKLOG

Control default styles and scripts

Provide ability to disable auto-added default CMS assets to the head section of pages. Under `Settings -> Misc => CMS Assets Management`

1) Global Settings

Fields (and show which resources not to add to the head):

  • Main CSS
  • Ecommerce JS
  • Recaptcha JS
  • Payment JS

2) For the Content Template

Provide same list of fields on the `Content Template` add/edit layout to override global defaults (ie: use global setting by default)

3) Implement logic to check CMS Assets Management settings in the Content Template (or in the Global Settings if Use global setting option is selected for the template).
Based on the retrieved value either append appropriate styles and scripts html tags to the head or not.

BACKLOG

Re-apply folder detail instead of page detail layout for folders

Check if there are Page Folder items that have applied detail layout with ID 1525 (Page Detail)

If found - attach to them Folder Detail layout (ID 1519 ) and save item.

BACKLOG

| set_money_format And | set_number_format upgrade

Modify liquid filters

  • set_money_format

  • set_number_format

Parse argument the following way

  • If can be converted to long int

    • determine argument as ID

    • find format setting by ID

  • Else

    • determine argument as Name

    • find format setting by Name

BACKLOG

Add URL to order line

Add URL to order line liquid object.

Redo `shopping cart` system page and `invoice` layouts to wrap product name with the link to the product.

BACKLOG

Add .dwg format to the staticContent section

Add “.dwg” extension to the list of allowed to be accessed via URL (Static content list)

Misc

Order migration (old data to new)

Migrate order that was created not by Advanced Payment Flow to the latest version of the orders logic.

Apply main order param for the orders that was created for recurring payments (secure zone subscriptions) according to the latest version of the orders logic .

BACKLOG

this.order in workflow emails scope

Add this.order object (same as added in invoice email) to the workflow email liquid context if form has "Accept Payment" option enabled.

If no order was created during form submission - set this.order to null

BACKLOG

Add to cart - param for button text

Add buttonName param to:

{% component type: "ecommerce_add_to_cart" %}

{% component type: "ecommerce_buy_now" %}

Example:

{% component type: "ecommerce_add_to_cart", buttonName: "Add Me!!!" %}

Default value is empty

Replace in default layout:

`Add to cart` text to `{{this.buttonName | default:"Add to cart"}}`

Replace in default layout:

`Buy now` text to `{{this.buttonName | default:"Buy now "}}`

BACKLOG

Type Media module item property UX upgrade

Change the algorithm of opening file manager when clicking icon for Type Media module item property https://prnt.sc/sjsoxe:

  • if the property contains any file path - try to open file manager to that folder location
  • otherwise open root folder as it worked currently

BACKLOG

Modify shopping cart object

https://prnt.sc/sapq1j

1) Add `eCommerceItemId` to the shopping_cart order-line object

2) Add attribute images to the order `options` object

SOURCE:

Use-case for having access to this data:

I had the requirement to display the chosen attribute option image in the cart, but had to do several more look ups and collection loops to retrieve it.

Not directly having the product ID meant I had to look up the product via SKUCode instead which isn't as stable.
But the item ID should always be available IMO.

BACKLOG

Remove Product from cart data attribute selector instead of <tr> (ecommerce.js)

Modify the functionality, when removing product from cart, so it will try to find parent HTML element by data attribute `data-cms_cart_order_line_holder`.

Add autoFix of the shopping cart layout on our template and sites created based on ecommerce template (for the backward compatibility.)

BACKLOG

Rebuild module after import module items

Set to queue entire module rebuild when import module items process is finished

BACKLOG

Priced ...HTML properties decimals after dot fix

PriceHTML and other ...HTML properties render to 4 decimals.

Should render such number of decimals as configured in Format Settings attached to the current domain

BACKLOG

Add Paginate items parameter for component type module, module_of_member

Add new parameter to the {% component type:"module" %} and {% component type:"module_of_member" %}

  • Parameter name

    • enablePagination

  • Default value

    • true

  • Not required (not show this param in toolbox if param is checked)

  • Logic

    • if false - do not apply pagination logic via get params. Return same items as it shown when no pagination params occured in URL

BACKLOG

Order -> Payment tab UX improvement

View Total cost and pending cost on the page.

When click pay by cash - automatically preset amount equal to pending cost

Design: https://prnt.sc/skioca

BACKLOG

12-24 hrs format switcher for admin datepickers

Add switcher between 12 and 24 hrs formats on datepickers on `Settings -> Misc` page.

Datepickers hrs time format (select) (options):

- 12

- 24

Applied to datepickers throughout admin.

Bug

Duplicating Event

When duplicating an event item

Expected:
It should not contain any subscriber.
All already duplicated items' counters should be fixed on app start

Actual:

Duplicated item has same subscribers counter as original item has https://prnt.sc/rv91k4.

SOURCE https://forum.treepl.co/t/duplicating-event-bug/1026

Bug

Parent Child module links in module settings - disappear icon "Folder"

Go to Settings Blog and select Items List View http://prntscr.com/sbq62x

After saving Folders icons are disappear as well as path to Blog Post settings http://prntscr.com/sbq6ms

When showing settings tab CMS should return system modules parent-child linkage in order to not override it when saving other settings of the blog http://prntscr.com/sbqbz1

Bug

Bug from forum - not correct import URLs

https://forum.treepl.co/t/url-slug-changes-not-updated-on-item-import-bug/1002

Bug

Tax deleting error

When deleting a tax sometimes we get Internal error:

The primary key value cannot be deleted because references to this key still exist. [ Foreign key constraint name = ForeignKey.ShippingOptionBase.TaxCode ]

Bug

Inventory - When Out of Stock hide button

  • Setup inventory
  • Select “Show product but don't accept orders “ in “When Out of Stock”
  • This two buttons should be disabled http://prntscr.com/rh8o7n

Bug

Bugs from forum - Secure Zone Question

  • Create custom module with the properties Multiple and String
  • Create 2 items and fill those fields with any text
  • Get export of those items
  • Change text in the cells to any numbers
  • Make import of the result file - error https://prnt.sc/ra8k6j

Bug

Bugs from slack - disappear product on Thank you page

Products on the Thank you page are disappeared http://prntscr.com/r7ukr9

Bug

Bugs from slack - error when related item disable

Bug

Bugs from slack - import/export

A product export file re-imported presents ‘Internal Error’.

Bug

Bugs from slack - error when apply discount with currency DKK

Bug

Choose different shipping info

  • Create shipping option
  • Go to product and add it to cart
  • Go to the shopping cart and select United State and the sipping option
  • Go to checkout
  • In another window open shopping cart and change country
  • Go to checkout – price should be recalculated

Bug

Bug from forum - Liquid code to list files from a particular directory

https://forum.treepl.co/t/liquid-code-to-list-files-from-a-particular-directory/928/2

Bug

Products - add check on Minimum Units and Maximum

Add validation of these fields: Minimum Units and Maximum Units https://prnt.sc/riulyw when adding products to cart

Bug

Bug from client - import/export CRM

Add ability to edit Type

SOURCE:

I am seeing an "Excel row number: 2. Detail: Invalid member type." on all 20 lines I try to import to the CRM, but there is no "type" in the file? The only row that works is the first and they all look similar?

I guess it is something REALLY simple, but not sure? Normally I don't have any problems importing.

The first line is exported from the CRM to have something to work from.

https://prnt.sc/skj0vv

Bug

[UI] Unruly link manager in WYSIWYG editor

https://forum.treepl.co/t/unruly-link-manager-in-wysiwyg-editor/1003

Bug

Bugs from slack - payment unsuccessful

Fix the workflow sending when eWAY payment is unsuccessful http://prntscr.com/rre3lp

Bug

Bug from client - change logic Exclude from Catalogs

  • Go to Shipping Option
  • Create new shipping option and set Exclude from Catalogs
  • Exclude from Catalogs should exclude this shipping option if shopping cart has at least one product that attached to any of the selected catalogs within this field http://prntscr.com/rwk7el

Bug

Bug from forum - Mandatory Custom Module Fields Reflect in User form

https://forum.treepl.co/t/mandatory-custom-module-fields-reflect-in-user-form/1054

Bug

Bug from client - not correct time in invoice

Bug

Portal Bug from slack - doesn't duplicate Feature flag

Bug

Popup with shopping cart - doesn't display total price

Bug

Workflow - doesn't changes name of workflow

Bug

Search forms - doesn't display SKU Code, Seo title and Meta description

Bug

Bug from Adam - not correct show price when set up 2 prices

Bug

URL output {{request.request_url.href}} is fixed (was broken and accessible via incorrect alias: {{request.request_url.ref}})

“href” param is broken and outputs via “ref” instead.
Output on the page {{request.request_url}} and here should be “href” http://prntscr.com/sgmgsj

Bug

Bug from Peter - edit name Catalogs

Change catalog name and click save

Go to the list of the catalogs

Catalog name is not changed http://prntscr.com/sh8xf5

Show more less
Improvement

Misc Improvements (5.3)

This list of improvements is gathered from Treepl users' feedback from forum and support:
  • Ability to copy existing custom module "Pro" plan
  • Parent child module links in module settings
  • search keywords field to import/export
  • nICE color picker z index issue
  • Case Insensitive URL redirect param
  • Add option to disable default styles and scripts in Misc settings
  • Re-apply folder detail...
  • eCommerce
Improvement

Ecommerce Improvements (5.3)

This list of improvements is gathered from Treepl users' feedback:
  • Auto add this.ProductDataJsonHTML to product detail layout
  • Stripe customers in advanced payment logic
  • Attribute and attribute options ordering
  • Show number of products in shopping cart in the product
  • Link to order on gift voucher
  • Add link to order from Case, booking
  • Daily recurring subscriptions
  • Order Management Upgrade - final...
  • eCommerce
New Feature

Deferred Order Payment

Ability to manually pay for order through a dedicated system page (link is available through admin).

  • eCommerce
New Feature

Downloadable Products

Ability to create downloadable products (files).
It will operate similar way it did in BC.
  • eCommerce
Improvement

"Today" Button For Release/Expiry Date Functionality

Add a "Today" button on Release/Expiry Date fields for making inputting date easier, as in BC.
today-button.png
  • UI/UX
  • Custom Modules
  • New
Improvement

Manually Add Password To A CRM Record

The ability to add a password manually in the CRM.

  • CRM
v 5.2 Release date: 15 Apr, 2020

Full Release Notes

Version 5.2 is being deployed to trial sites in a period between April 20 and 24.
Live sites will get this update starting April 27th.
Follow our System Status page for announcements.
Show more less
Improvement

Performance Update and General Overhaul

Liquid 2.0 + nICE 2.0 polishing and finalization
Overall system performance upgrade (up to 80% on pages with multitude of module items and components)
  • General
Improvement

Treepl Portal: Upgrade Website

Ability to upgrade a paid website, with difference in cost applied billed through PayPal or Stripe
  • Treepl Portal
v 5.1 Release date: 18 Mar, 2020

Full Release Notes

Beta

Email Domain Verification

Email Domain Verification released from beta flag into production

Backlog

eWay Payment Gateway:
Update Payment Gateway Settings Page in the admin

1) Add ability to select eWAY as a payment gateway in Settings > Payment > Gateway tab.

If eWAY selected - show fields that are required for eWAY. If stripe selected - show stripe fields. http://prntscr.com/r5p0os 

2) REMOVE IMAGE FIELD FROM THE STRIPE FIELDS
3) Required fields
- Key
- Secret
- Password
- Endpoint: Production, Sandbox

eWay API key reference: http://prntscr.com/rcm99b

Backlog

eWay Payment Gateway:
Integrate eWay API to Payment Flows

Add eWAY payment API library to the system.

Implement following payment flows:

- single item payment (for "Advanced Payment" flag on and off)
- item/event payment (for "Advanced Payment" flag on and off)
- checkout payment

For secure zone recurring subscriptions and eWAY payment gateway enabled for the country/currency:

- Show validation message and stop processing form submit immediately:
"Recurring payments are not allowed for eWAY payment Gateway yet."

Backlog

eWay Payment Gateway:
Integrate eWAY API for payment forms frontend JS

Apply eWAY apis to provide credit card fields via JS for payable forms in order to tokenize the card and pass token to the backend for charging process.

Apply backend auto-add js file script tag to the page similar to the stripe js (provide all required payment settings via get params to eway.js file)

Backlog

eWay Payment Gateway:
New component for payment fields

Add new component tag of type "payment_form_fields":
{% component type:"payment_form_fields", formAlias:"[[formAlias]]" %}

- formAlias (required) - alias of the form

Single tag item context is described below:

{
    "formAlias": 0,    
}

Default virtual layout:

<div id="paymentFields_{{this.formAlias}}"></div>
<input type="hidden" name="Payment_Data"/>
<div id="paymentErrors_{{this.formAlias}}" role="alert"></div>

Add this component to the default form layout that system generates for forms with payments instead of static html.

Backlog

Ecommerce Improvements:
Product Detail layout improvement

1) Tax price on product detail (+ in product attributes)

Add additional properties to products object

- taxRate
- priceWithTax
- priceWithTaxHtml

Upgrade ’item_attributes’ liquid component with ‘includeTax’ parameter:
{% component source: "Products", itemId: "5651", type: "item_attributes", includeTax: true %}

- includeTax (not required). By default use false.
- if true:
attrOption.formattedPrice - set price with tax

2) Ability to see stock quantity for product variations + disabling variation

Add this.productDataJSON property. Value is an object. Example:

{
    "itemId": 5651,
    "attributes": {
      "12462596046050033665": {
        "id": "12462596046050033665",
        "isInventory": true,
        "name": "sdvsd",
        "type": 2,
        "required": true,
        "optionIds": [
          "16234894512508370945",
          "16234894512508370946"
        ]
      }
    },
    "variations": {
      "8200195854968029199": {
        "id": "8200195854968029199",
        "enabled": true,
        "inStock": 3,
        "optionIds": [
          "16234894512508370945"
        ]
      },
      "8200195854968029200": {
        "id": "8200195854968029200",
        "enabled": true,
        "inStock": 0,
        "optionIds": [
          "16234894512508370946"
        ]
      }
    },
    "options": {
      "16234894512508370945": {
        "id": "16234894512508370945",
        "attributeId": "12462596046050033665",
        "name": "sdvsdvfgbfg",
        "image": null,
        "price": 0.0000
      },
      "16234894512508370946": {
        "id": "16234894512508370946",
        "attributeId": "12462596046050033665",
        "name": "sdvsdv",
        "image": null,
        "price": 0.0000
      }
    },
    "inStockTotal": 3,
    "recommendedPrice": 0.0000,
    "prices": {
      "0": 33.7700
    },
    "taxInPercent": 0.0,
    "taxRate": 0.0,
    "enablePreOrder": true,
    "QuantityThreshold": [
      {
        "Quantity": 0,
        "Price": 33.7700
      }
    ]
  }

Add this.productDataJsonHTML property.

ATTENTION: this property required to be rendered on Detail or list layout, because treepl cms ecommerce js works based on it’s data.
Otherwise add to cart, buy now buttons and in-stock calculations wouldn’t work.

Value is:
<script>             
initEcommerceProductPriceVariations({{this.Id}}, {{this.ProductDataJson}});
</script>

Modify JS to:

- calculate inStockHtml value based on selected attribute options and this.productDataJsonHTML Data (inventoryVariations)

- disable attribute options according to disabled variations in inventory  and this.productDataJsonHTML Data (inventoryVariations)

- calculate priceHTML and priceWithTaxHtml based on this.productDataJsonHTML Data (quantityThreshold)

Backlog

Ecommerce Improvements:
Admin panel speed improvement

Unite custom menu API and default menu API in to the one API request

Add properties to each menu item object:
- type

- id of the item

- default view (for module)

Remove UI bug when items list requested several times in a row if fast clicking between different module list pages

Desired result is speed improvement in the admin when:
- initial admin panel load

- module item list/tree view load

Backlog

Ecommerce Improvements:
Volume discount info to liquid

Add volume discount collection to this object of a module item that "is product" ONLY (module setting EnablePricing == true).


Property:

- volumeDiscount

Collection structure:

[
    {
        "quantity" : 10.
        "price"      : 200
    },
    ...
]

Backlog

Ecommerce Improvements:
Hide ecommerce items on lower site plans

1) If site plan is lower than ecommerce hide following items:

  • workflows:
    • Low stock notification Workflow
  • system pages:
    • checkout
    • order-receipt
    • shopping_cart
  • system emails:
    • Low Stock Notification
    • Supplier Notification
    • GiftVoucher
  • Setup logic on form submit if form.type == checkout
    • Show validation message and stop processing form submit immediately:
      "Checkout forms can not be processed on the current site plan."


2) If site plan is lower than pro hide following items:

  • system emails:
    • Invoice
  • File Manager:
    • ability to secure folders
  • Settings -> Payment:
    • menu item and pages
  • Settings -> Domains:
    • CURRENCY AND FORMAT tab
  • Events:
    • pricing tab
  • FORM builder:
    • Hide ability to change form types (for new select generic, For existed non generic - not change) http://prntscr.com/rh6dxz 

Backlog

Ecommerce Improvements:
Restore system pages and system email to default button

Add ”Restore to default” buttons to:
- system pages 

- system emails

Backlog

Ecommerce Improvements:
Move Currency and Format tab to Domain settings

Move Currency and Format tab from 

Settings->Payment

to

Settings->Domains

Backlog

Ecommerce Improvements:
Disable Secure form submission folder feature

Disable Secure form submission folder feature.
In one of the upcoming releases it will returned back with ability to configure what form should secure uploads and what should not.

Backlog

Ecommerce Improvements:
New component added for Cases

Add new component tag of type:"cases":

{% component type:"cases", 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 (not required)
    • if false get all cases of all users
    • otherwise get cases of current logged in crm member only (default true)
  • object (not required)
    • item
    • collection (default)
  • collectionVariable (not required) - works the same way as other modules.
  • layout (not required) - path to FTP file that will contain layout content 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 value is 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) - number of items to get (default value is 10)
  • offset (not required) - number of items to skip before get (default value is 0)

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


List View:

{
    "formId": 0,
    "memberId": 0,
    "id": 0,
    "formName": "",
    "dateSubmission": ""
}

Detail View:

{
    "formId": 0,
    "memberId": 0,
    "fields":
    [
        {
            "name": "",
            "alias": "",
            "value": "",
            "type": ""
        }
    ],
    "id": 0,
    "formName": "",
    "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>

Toolbox:
CRM > Cases

Backlog

Ecommerce Improvements:
New component added for Orders

Add new component tag of type:"orders":

{% component type:"orders", viewType:"[[viewType]]", object:"[[object]]", currentMemberOnly: [[currentMemberOnly]], filterBy:"[[filterBy]]", filterValue:"[[filterValue]]", filterCondition:"[[filterCondition]]",  collectionVariable:"", layout:"", sortBy:"", sortOrder:"", limit:"[[limit]]" %}

  • viewType
    • list (default)
    • detail
  • currentMemberOnly (not required) - default true
    • if false get all orders of all users
    • otherwise get orders of current logged in crm member only (default is true)
  • object (not required)
    • item
    • collection (default)
  • collectionVariable (not required) - works the same way as in type: module.
  • layout (not required) - path to FTP file that will contain layout content that need 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
    • caseId
    • name 
    • invoiceNumber
    • invoiceDate
    • paymentType
    • AmountPending
    • AmountPaid
    • subTotalPrice
    • taxPercent
    • taxPrice
    • totalPrice
  • sortOrder (not required)
    • ASC
    • DESC (default)
  • filterBy (not required) - Default value is empty
    • id
    • formId
    • memberId
    • caseId
    • name   
    • invoiceNumber
    • invoiceDate
    • paymentType
    • AmountPending
    • AmountPaid
    • subTotalPrice
    • taxPercent
    • taxPrice
    • totalPrice
  • filterValue (not required)
    • value to use in filtering condition
  • filterCondition (not required)
    • equally (default)
    • less
    • more
    • lessEqually
    • moreEqualy
    • contains
  • limit  (not required) - number of items to get (default value is 10)
  • offset (not required) - number of items to skip before get (default value is 0)

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

List View:

{
    "id": 0,
    "formId": 0,
    "memberId": 0,
    "caseId": 0,
    "name": "",    
    "invoiceNumber": "",
    "invoiceDate": "",  
    "domainCountryCode,
    "formatSettingId,
    "paymentType" : "",
    "AmountPending" : 0,
    "AmountPaid" : 0,
    "subTotalPrice" : 0,
    "taxPercent" : 0,
    "taxPrice" : 0,
    "totalPrice" : 0
}

Detail View:

{
    "id": 0,
    "formId": 0,
    "memberId": 0,
    "caseId": 0,
    "name": "",    
    "invoiceNumber": "",
    "invoiceDate": "",
    "items" : [see Data Structure for this component (see v5.0 release notes)],
    "formatSetting" : [see Data Structure for this component (see v5.0 release notes)],
    "domainCountry" : [see Data Structure for this component (see v5.0 release notes)],
    "destinationCountry" : [see Data Structure for this component (see v5.0 release notes)],
    "shippingOption" : [see Data Structure for this component (see v5.0 release notes)],
    "discount" : [see Data Structure for this component (see v5.0 release notes)],
    "giftVoucher" : [see Data Structure for this component (see v5.0 release notes)],
    "paymentType" : "",
   "AmountPending" : 0
    "AmountPaid" : 0 
    "subTotalPrice" : 0
    "taxPercent" : 0,
    "taxPrice" : 0,
    "totalPrice" : 0
}

Default virtual layout:

<ul>
    {% for order in this.items %}
        <li> 
            <strong>{{order .name}}</strong>    
            <span>Invoice Date: {{order.invoiceDate | format_date: "dddd, MMMM dd, yyyy"}}</span>  
            <span>Total Cost: {{order.totalPrice | set_money_format : order.domainCountryCode,  order.formatSettingId}}</span>
        </li>
    {% endfor %}
</ul>

Toolbox:
CRM > Orders

HOTPATCH

Ecommerce Improvements:
Auto add this.ProductDataJsonHTML to product detail layout
(will be released via hotpatch v5.1.1 on March 23)

Exclusively for Product Module:

Automatically add {{this.ProductDataJsonHTML}} to the product detail if there is no manual output inside the layout

HOTPATCH

Module copy function restriction upgrade
(will be released via hotpatch v5.1.1 on March 23)

Allow module copying starting Pro plan

Bug

List of bug fixes

eCommerce related:

  • Disable Checkout button when applied price changes
  • add TaxPriceHtml to shoppingcartdata object
  • Fixed displaying of Recommended Retail Price https://prnt.sc/r7u7yq 
  • Gift Voucher shows incorrect Currency in giftvoucher email
  • liquid error Component RelatedItem and Component GroupedItems
  • {{this.order}} is now accessible in workflow email content.
  • Product Detail layout improvement - removed price rounding when selecting attributes
  • Fixed incorrect calculating In Stock quantity when add product with attributes
  • Fixed incorrect priceHtml value displaying on product detail (previously shows 4 decimals) http://prntscr.com/rjpuq9 
  • form submissiondataobject doesn’t accessible in invoice email
  • Product Detail layout improvement - Inventory control (In Stock)
  • Fixed incorrect order prices displayed on thank you page

Show more less
New Feature

Ecommerce Template: "Furniture"

New ecommerce/Foundation/WCAG 2.1 compliant template:"Furniture"
  • Templates
New Feature

eWAY Payment Gateway

eWAY payment gateway for ecommerce and payable forms/events/subscriptions.
  • eCommerce
Improvement

Ecommerce Additions

  • Tax price on product detail and in attribute component
  • Ability to see stock quantity for product variations with disabling of variations
  • Volume discount info available via Liquid
  • A button to restore all system pages and system emails to default
  • eCommerce
Bugfix

BUG: Item Duplication of an already Duplicated Item

If you duplicate an item (from within the edit page), save it as a new item, then duplicate that item (still within the edit page), it actually duplicates the original/first item instead of the new one.

  • Admin Panel
  • Pages and Templates
  • New
  • Bugs
v 5.0 Release date: 19 Feb, 2020

Full Release Notes

Misc

Events:
Merge event module to configuration of custom module with system properties

  • Create System properties holder to the proto-module
  • Add event specific properties to the system module properties
    • Redo admin UI to use capacity, start end time and prices from system module properties
    • Restrict using names of system properties in any module custom properties section.
    • Already existed properties with the same name should be deleted and it’s values should be saved to the corresponded system properties
  • Payment flow should use system module properties price instead of old event specific properties.
  • Liquid output should remain the same
  • Search indexes should save data from system properties instead of old event specific properties
  • JS calendar should work the same way as was before this change
  • Redo toolboxes

Misc

Events:
Upgrade for Global Payments Flow

Set Allow pricing to Events module by default
Transfer Event Price from system properties to Pricing table.
Override system price property

‘Advanced Settings’ -> ’Enable Subscription’ checkbox added.

When enabled (which is default):

  • show capacity field in module item page
  • allows event subscription logic to work for item

Misc

recaptcha v3 execution default JS improvement

Change default recaptcha V3 js code to the one specified in the file recaptcha v3 execution on form submit-min.js

New code will execute recaptcha V3 validation once user triggers submit form event Submission will be longer, but this solution removes validation issues with the old code that gives you 2 minutes starting from the page loaded state to submit the form (validated token expired after 2 minutes). Old code launched validation on page load event.

Example:

http://prntscr.com/q62rvs

Misc

Rename Categories, Tags and Authors tab name

On item add/Edit view - rename tab name for categories, tags and Authors

  • From ”System Properties”
  • to “Default Properties”

Misc

‘Added by’ field refactoring #1

Hide field "Added by" and do not request CRM contact records on item Add/Edit form if ALL settings below are set to false:

  • Allow Add New Items
  • Allow Edit Items
  • Allow Delete Items

Attention: Even if field is hidden if it has a value previously - it will not be erased on clicking save item

Misc

Recaptcha v3 validation score management

In Settings -> Misc
Add ability to set Minimum validation score:

  • value should be between 0 and 1.0
  • default value is 0.5

On webform validation if success check if validation score is greater or equals to the one set here.

Misc

Add keywords field for site search

Add default field to all modules:

  • Site Search Keywords
  • type: text

Should contain CSV list of keywords.

When user will perform site search - apply searching by this new field as well as it currently does for name and description

Misc

Index writing/reading flow upgrade

Change the way reindex works:

  • launch reindex check each 2 seconds instead of 5
  • stabilize index read/write operations so they will no longer conflict with each other (causing incorrect output via component when filtering by tags or categories)
  • Apply “reindex item” flow in site search similar to “reindex module item” instead of the WHOLE SITE SEARCH reindex (causing delays in component output when filtering by tags or categories)
  • When changing module settings - launch module reindex ONLY if module url was changed.
  • Optimize reindexing process to significantly reduce time for reindex module or reindex site search
    • Causing reduced speed of whole site (frontend and admin) since site is sharing same processor resources with the reindex process.
    • causing incorrect output via component when filtering by tags or categories

BUG fix: Check that reindex module flow takes ACTUAL documents. Not the cached ones.

Beta

Feature flags updates for 5.0-5.1

Remove from internal section flags listed below:

  • Advanced search
  • Date Time Management
  • Rebuild queue
  • Advanced multi-level categories
  • Customizable columns for module items view

Move ’Email domain verification’ flag to Internal flags.

Beta

ps1
Advanced Payment Flow:
Advanced Payment feature flag

Feature flag: Advanced payment flow

Improves payment flow using defined by the customer price formats and currencies attached to domain payment was made from.

Beta

ps2
Advanced Payment Flow:
Modify "payment gateway" setting page to "payment settings" page

New Payment Setting Page should contain tabs:

Gateway:

design: http://prntscr.com/rbhtr9

  • Move old "payment gateway" page content to gateway tab
  • Remove Currency selector from gateway section.
  • show list of gateway settings assigned to country-currency allowed by site domains

Currency and Format:

design: http://prntscr.com/rbhtz4

Default setting will be pre-configured (which can not be edited or deleted). This format setting will be used as default if no format setting specified for the domain.

Default settings:

  • Name: Default
  • Culture: English (United States)
  • Currency: USD
  • Number of digits after coma: 2

Beta

ps3
Advanced Payment Flow:
Extend Domains settings with "Currency and Price format" and "Country"

Entity relation Diagram:

https://prnt.sc/oz7a11

Beta

ps4
Advanced Payment Flow: Domain Settings component

Add new component tag "domain_settings":

{% component type:"domain_settings", domain:"", collectionVariable:"" %}

  • domain (not required param) - domain to retrieve settings for (current domain is default if param is empty)
  • collectionVariable (required param) - works the same way as other components.

collectionVariable context is an OBJECT described below:

  • Domain (string)
  • LandingPage (object)
    • Id (int)
    • Url (string)
    • Name (string)
  • Country (object)
    • Name (string) - country code
    • Code (string) - country code
  • FormatSetting (object)
    • Name (string)
    • Culture (string)
    • Currency (object)
      • Code (string)
      • Symbol (string)
      • DigitalCode (string)
      • Name (string)
    • DecimalsQuantity (int)

Beta

ps5
Advanced Payment Flow:
Admin UI dates format improvement

Display dates in the admin using Default domain Format setting

Beta

ps6
Advanced Payment Flow:
Domain currency and format settings to the order

When creating an order, save currency and price format settings chosen for the domain the order was purchased from, to the order at the moment of purchase.

So that if admin changes the currency and price format settings for the domain - the order will still keep those settings that were at the moment of purchase.

Display prices in order list and detail view based on these saved currency settings:

Beta

ps7
Advanced Payment Flow:
Invoice System Email modification

Use currency and format settings saved in orders to display prices in invoice email.

Liquid {{this.order}} example:

{

 "id": "12877807959236673593",

 "State": "AwaitingPayment",

 "formId": 0,

 "memberId": 7,

 "caseId": 0,

 "name": "Checkout 04 Mar 2020 09:06 AM",

 "invoiceNumber": 6,

 "invoiceDate": "2020-03-04T15:06:40.145232Z",

 "formatSetting": {

  "name": "Default",

  "culture": "en-US",

  "decimalsQuantity": "2",

  "currency": {   

    "name": "US Dollar"

    "code": "USD"

    "symbol": "$"

    "digitalCode": "840"

  },

 },

 "domainCountry": {

  "name": "UNITED STATES",

  "code": "US"

 },

 "destinationCountry": {

  "name": "UNITED STATES",

  "code": "US"

 },

 "shippingOption": {

  "id": "12252410371037462536",

  "shippingOptionId": "7361027874612051972",

  "name": "Free",

  "price": 0.0000,

  "taxPercent": 0.0,

  "taxPrice": 0.0,

  "totalPrice": 0.0000,

  "subTotalPrice": 0.0000

 },

 "discount": {

  "id": "16801218532107878402",

  "code": "test",

  "type": "FixedAmount",

  "amount": 5.0000

 },

 "discountPrice": 5.0000,

 "giftVoucher": {

  "id": "7532467322502512642",

  "code": "test",

  "amount": 20.0000,

  "balance": 20.0000

 },

 "paymentType": "Offline",

 "amountPending": 8.7700,

 "amountPaid": 0.0,

 "subTotalPrice": 33.7700,

 "taxPercent": 0.0,

 "taxPrice": 0.0,

 "totalPrice": 8.7700,

 "items": [

  {

   "id": "15049017874163171346",

   "smallImage": null,

   "name": "test prod",

   "type": "ModuleItem",

   "moduleId": 0,

   "SKUCode": "eb8da3f4-2037-42c8-ab84-20d7c85ea224",

   "quantity": 1,

   "Url": "/catalogs/test-prod",

   "price": 33.7700,

   "taxPercent": 0.0000,

   "unitPrice": 33.7700,

   "taxPrice": 0.00000000,

   "unitTotalPrice": 33.77000000,

   "totalPrice": 33.77000000,

   "unitTotalPriceHtml": "$33.77",

   "priceHtml": "$33.77",

   "unitPriceHtml": "$33.77",

   "taxPriceHtml": "$0.00",

   "totalHtmlPrice": "$33.77",

   "quantityHtml": "",

   "removeHtml": "",

   "attributes": []

  }

 ],

 "giftVoucherPrice": 20.0000,

 "discountPriceHtml": "$5.00",

 "taxPriceHtml": "$0.00",

 "shippingTotalPriceHtml": "$0.00",

 "giftVoucherPriceHtml": "$20.00",

 "totalPriceHtml": "$8.77",

 "amountPaidHtml": "$0.00",

 "amountPendingHtml": "$8.77"

}

Beta

Advanced Payment Flow:
Form Builder (Form logic modified)

Add system field

  • FormType
  • Values:
    • Generic (default)
    • SingleItem
    • Checkout

Add formType property to the following liquid objects:

  • form context (applied in {% component type:"form" %})
  • form submission data object {{ formSubmissionData }}

If Advanced Payment Feature flag is enabled – all payment forms (with selected Accept Payment property) start working via the new flow:

For any form type:

IMPORTANT: Default html form template generates completely differently from the old one. Payment forms created earlier WILL NOT BE COMPATIBLE with the new flow since JS and backend logic was completely reworked for multiple payment methods and payment gateways.

If form type is ‘Generic’:

http://prntscr.com/rbyrbh (old html template on the left side and new one on the right)

  • (1) Removed data attributes for order name and description. They will be set on the backend by the internal rules.
  • (2) PaymentType field was reworked to accept payment types not payment gateway as it wrongly did before. Renamed to Payment_Type and accept following options
    • CreditCard:
      Replacement of the old Stripe code. Gateway will be determined by the current domain.
      Stripe key, currency and other gateway details now passed via get params of the payment gateway js that is automatically attached to the head of the page if page contains at least one component type form with selected accept payment field
    • Free:
      Option that is accepted only if submitted amount is equal to 0. Submitting such form still creates order-form_submission pair.
    • Offline:
      Option that allows creating order in Awaiting Payment state. So you will be able to add offline payment on order in Payments tab that will change order state to Success
  • (3) Payment fields that collect tokenized credit card data was reworked. In upcoming update (18 March) static html will be replaced by {% component type:"payment_form_fields", formAlias:"[[formAlias]]" %} that will have virtual layout that is same as on the right side in the screenshot above. This section will be used to output validation errors, set tokenized card data from payment provider and to display payment fields using capabilities that selected payment gateway give.
  • (4) Amount field was transformed to Payment_Amount field.
    Value of the this.paymentAmount will be set based on price param if form does not contain any secure zone with paid recurring subscriptions.
    If form contain such secure zone then price value will be overridden by sum of all paid subscriptions.
  • Examples of the form component:
    {% component type: "form", alias: "payment_form", price: "20.10" %}

If form type is ‘SingleItem’:

http://prntscr.com/rbz6gd (compared to the generic type)

  • Form template generates an additional field Payment_ModuleItemId
    This field will be prefilled by the id of the item specified in form component moduleItemID or eventId param (value of this.moduleItemId will be set based on moduleItemID or eventId param)
  • Examples of the form component:
    {% component type: "form", alias: "payment_form", moduleItemID: "3065" %}
    or
    {% component type: "form", alias: "payment_form", eventId: "3065" %}

If form type is ‘Checkout’:

http://prntscr.com/rbzkcs (compared to the generic type)

  • Form template includes fields for giftvoucher and shipping address details
  • Value of the this.paymentAmount will be set based on the checkout totalPrice value.
  • Examples of the form component:
    (no difference between checkout and simple form component. But form template will not be rendered if the site plan is lower than eCommerce)
    {% component type: "form", alias: "payment_form" %}

Guide to convert Event Payment forms html layout from

old payment flow to new one:

1. Choose SingleItem form type.

2. Do manipulations described below referencing this screenshot:

http://prntscr.com/rcjv8o (OLD on left | NEW on right)

(1) This part is unnecessary. Remove it.

(2) These attributes are unnecessary. Remove it.

(3)

paymentType Select form field should be renamed to Payment_Type.

Value should be CreditCard.

Example: <option value="CreditCard">Credit Card</option>

(4)

paymentData field should be replaced with:

<div id="paymentFields_{{this.alias}}"></div>

<input type="hidden" name="Payment_Data" />

<div id="paymentErrors_{{this.alias}}" role="alert"></div>

(5)

Amount field name should be renamed to Payment_Amount.

Value should be changed from {{paymentAmount}} to

{{this.paymentAmount}}.

"If" liquid code is unnecessary.

(6)

"If" liquid code is unnecessary.

eventId field should be renamed to Payment_ModuleItemId.

Value should be changed to {{this.moduleItemId}}.

allocations field should be renamed to Payment_ItemQuantity

Add data-event_one_item_price="{{this.paymentAmount}}" data

attribute to the field so it will be calculated by CMS payment js.

Beta

Advanced Payment Flow:
Event payment logic redo

Redo event payment logic to ecommerce payment - single item flow

  • on form
  • in toolbox

Beta

ps8
Advanced Payment Flow:
Add liquid filter | domain_number_format

Add new liquid filter:

{{ numberVar | domain_number_format }}

  • Convert number to formatted string based on current domain Currency and format setting. Without currency related settings
    If liquid parsing is outside of domain scope - use default domain and it's settings.
    • else - do not change the variable

Beta

ps9
Advanced Payment Flow:
Add liquid filter | domain_money_format

Add new liquid filter:

{{ numberVar | domain_money_format }}

  • Convert number to formatted string based on current domain Currency and format setting. Including all currency related settings
    If liquid parsing works outside of domain scope - use default domain and it's settings.
    • else - do not change the variable

Beta

Advanced Payment Flow:
Add liquid filter | set_money_format

Add new liquid filter:

  • Pattern:
    • {{ numberVar | set_money_format : "[[formatSettingId]]"}}
  • When applied -
    • if variable is number - should convert number to money-formatted string based on country and format setting
    • else - do not change the variable

Note: The ID value to use for “formatSettingId” is currently not readily available and will be a fix for this soon.

Beta

Advanced Payment Flow:
Add liquid filter | set_number_format

Add new liquid filter:

  • Pattern:
    • {{ numberVar | set_number_format : "[[formatSettingId]]" }}
  • When applied -
    • if variable is number - should convert number to number-formatted string based on country and format setting
    • else - do not change the variable

Backlog

Secure Zones:
Subscription/Membership pricing

Add Price section for secure zone subscription.
http://prntscr.com/rbkz2c

Backlog

Secure Zones:
Files and Folders tab in secure zone

Add new step to secure zones "Files and Folders"
Provide ability to assign/unassign separate files or folders to/from secure zone.
DESIGN: http://prntscr.com/r7d8m1

Backlog

Secure Zones:
Secured files and folders in file manager

Provide ability to see and assign/unassign files and folders to/from secure zone(s)
DESIGN:
http://prntscr.com/r7d9w9
http://prntscr.com/r7da2c

Backlog

Secure Zones:
Secured files and folders logic

On each request to file after checking redirects, follow steps:

  1. If current use is ADMIN user go to step 4
  2. Compare current request path (case insensitive) to ANY path of secured file.
    1. If found - go to step 3
    2. If not found - check if current request path (case insensitive) contains ANY path of secured folder.
      1. If found - go to step 3
      2. If not found - go to step 4
  3. Validate if ANY user's secure zone subscriptions contains AT LEAST ONE of the found entry secure zones.
    1. If not contains redirect to 403 system page
  4. Allow file to be requested

Backlog

Make form submission files secure

On each request to file after checking redirects:

  1. If request link pattern is like "/_form-submissions/*"
    1. If current user is ADMIN user go to step 2
    2. redirect to 403 system page
  2. Allow file to be requested

Backlog

c1
Ecommerce:
Catalogs

Create new System module under eCommerce menu called "Catalogs"

- allow creating Catalogs and Products on root level and inner level

- has new ‘Simplified Tree View’

- has system field for a Thumbnail Image (media)

Design:

http://prntscr.com/r7gnqx

Backlog

c2
Ecommerce:
Catalogs
New item view type

Add new view of items:

  • Simplified Tree View

Extend Module -> Advanced Settings:

  • View Settings (add new checkbox) “Allow Items Simplified Tree View”
  • Default view (Add new option) “Simplified Tree View”

Simplified Tree View page for catalog view provides ability to:

  • Create new catalog on the root level
  • Edit existing catalog
  • Delete catalog
  • Move catalog under another catalog
  • Reorder catalog on the particular level
  • Create catalog under another catalog


Design:

http://prntscr.com/r7gotn

Backlog

c4
Ecommerce:
Catalogs
Advanced Module Settings -> Allow multiple parent items

Add new module setting under Advanced Settings -> Allow multiple parent items

If this option of the child module is enabled - display Tab with the name of the Parent module (for child module item view) or the name of the Child module (for parent module item view).

Example:

Module Catalogs is parent to Products.
If Products module has Allow multiple parent items=true than product item page will contain Catalogs tab, and catalog item page will contain Products tab

The tab content has a multiple item selector:

http://prntscr.com/r7gmkh

https://prnt.sc/r7gmps

Selecting multiple parents saves a list of the parent module items.

List of parent module items determines the list of urls of which each will lead to the detail page of the item.

Backlog

p1
Ecommerce:
Products

New System module under eCommerce menu called "Products"

System properties:

  • Small Image (media)
  • Large Image (media)
  • On Sale (boolean)
  • Is Gift Voucher (boolean)
  • Product Weight (number)
  • Product Width (number)
  • Product Height (number)
  • Product Depth (number)
  • Enable Drop Shipping (boolean)
  • Supplier (CRM contact picker)
  • Unit Type (string)
  • Minimum Units (number)
  • Maximum Units (number)
  • Product Keywords (string)
  • Recurring Type (dropdown)
    • None
    • Daily
    • Weekly
    • Fortnightly
    • Monthly
    • Quarterly
    • Half Yearly
    • Yearly

Backlog

p2
Ecommerce:
Products
Add/Edit Product Page

Since product allows multiple parents - provide ability to see multiple urls for the module item.

Design:

http://prntscr.com/r7gqcj

Backlog

p3
Ecommerce:
Products
Default module property - SKU Code

Add new default property ’SKUCode’ (string) to all modules.

Add to liquid scope property ’SKUCode’

Show system property SKUCode on Add/Edit module item page -> settings page if

  • Advanced Settings -> Enable Inventory = true
    or
  • Advanced Settings -> Enable Price = true

(Advanced settings hidden and restricted to change for now. Enabled for Event and Product modules only)

Backlog

p4
Ecommerce:
Products > Prices

Price entity list:

Design: http://prntscr.com/rb0z9b

Display list of prices (price entities) based on Currency/country pairs.

(Currency/country pairs can be achieved from list of domains and cultures and countries attached to them)

List shows only price entities that are attached to active Currency/country pairs.

If admin changes Currency/country pair for some domain but some module item already has attached price entity based on that Currency/country pair that was previously attached to the domain, than this price entity should not be visible but still saved in the db. So if admin sets back that currency/country pair to any domain, that module item will restore visibility of that price entity in the price list.

Price entity properties:

  • Currency (one of currency list)
  • Country (one of country list)
  • PriceList (list)
    • RetailPrice
    • SellPrice
    • Tax (one of tax codes filtered by PriceEntity Country setting)
    • priceForUserType (one of:)
      • Consumer
      • Wholesaler
      • may be more in the future
  • VolumeDiscountPriceList (list) may be zero or many
    • Quantity
    • SellPrice

Liquid Scope Extending

Module item liquid scope should be extended by property Price {{this.price}} that should return price based on the current domain.

Searching and filtering impact

Price property should be searched or filtered based on the current domain’s country/currency settings.

Backlog

p5
Ecommerce:
Products > Attributes

Add new module setting

  • Advanced Settings -> Enable Attributes (hidden and restricted to change for now. Available for Products module only)

If option enabled - show ’Attributes’ tab in the Add/Edit module item page

Attributes list:

Attributes provide ability to add/edit/delete product attributes and attribute options.

Design: http://prntscr.com/rb16h8

Attribute entity:

Attribute entity holds list of attribute options with their prices based on currency/country list from site domains.

Properties:

  • Name (string)
  • Attribute Type (one of)
    • dropdown
    • checklist
    • radiolist
    • numeric
  • Value Type (one of)
    • fixed price
  • Required (boolean)
  • AddToInventory (boolean)
  • Options (list)
    • Name
    • Image
    • PriceList (list)
      • Price
      • Currency (one of currency list)
      • Country (one of country list)

Searching and filtering impact

Attributes and their options can not be searched or filtered via module component.

Backlog

p6
Ecommerce:
Products > Inventory

Design: http://prntscr.com/rb12ji

Inventory entity

Clicking on Generate Variations (setting it to true) should hide InStock and PreOrder options and create variant products as per any attribute options that have AddToInventory = true.


Set initial InStock value of the first variant product to the products stock level, where all others are 0.

Sum of all insock values of all variant products should be set to Inventory.InStock property.

Clicking on Disable Variations (setting it to false) should show InStock and PreOrder options and remove variant products entirely.

Both changes should be applied if user clicks save button ONLY. If user set Generate Variations = false than show confirmation window before saving:

Are you sure you want to remove all product variations?

OK CANCEL

Inventory entity properties and relations

  • Enabled (boolean)
  • Generate Variations (boolean)
  • WhenOutOfStock (one of)
    • Show [module alt name] but don't accept orders
    • Hide [module alt name]
    • Enable pre-ordering
  • LowStockNotification (number)
  • InStock (number)
  • PreOrder (number)
  • Variations (list)
    • Title (string)
    • SKUCode (string) - UNIQUE between all variation Codes and all module item SKUCodes
    • InStock (number)
    • Enable (boolean)
    • AttributeOptionsVariation (one of variant products made by attribute options of attributes that have AddToInventory = true)

Searching and filtering impact

Inventory data can't be searched or filtered for now.

Backlog

p7
Ecommerce:
Products
{% component type:"item_attributes" %}

New component tag "item_attributes":

{% component type:"item_attributes", object:"[[object]]", module:"[[moduleIdentifier]]", itemId:"[[itemId]]", collectionVariable:"", layout:"", sortBy:"", sortOrder:"" %}

  • moduleIdentifier (required param) - moduleName or moduleId.
  • itemId (required param) - id of the module item to get attributes from
  • object (not required param) - item or collection (Default).
  • collectionVariable (not required param) - works the same way as in other modules.
  • layout (not required param) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything (suppress layout).
    • If not specified at all - render default virtual layout.
  • sortBy (not required param) - any module item properties - Default is Id.
  • sortOrder (not required param) - ASC (Default) or DESC.

item context is described below. If object = collection (which is default) than this contains attributes property that holds the list of attributes ({{this.attributes}}):

  • ecommerceItemId (number) - itemId that was set in the component params
  • attributes (list)
    • Id (number)
    • Name (string)
    • AttributeType (string)
    • ValueType (string)
    • Required (boolean)
    • AddToInventory (boolean)
    • Options (list)
      • Id (number)
      • Name (string)
      • Image (string)
      • PriceValue (number)
      • FormattedPrice (string)
      • Currency (object)
        • Code (string)
        • Symbol (string)
        • DigitalCode (string)
        • Name (string)
      • Country (string) - country code

Default virtual layout can be seen/copied via FTP in ‘cms_assets’ folder.

Backlog

p8
Ecommerce:
Module toolbox

Add new toolbox items

  • eCommerce:
    • Catalogs list (default module items list toolbox for catalogs)
    • Products list (default module items list toolbox for products)
    • Related products {% component type:"related_items" %}
    • Grouped products {% component type:"grouped_items" %}
    • Product Attributes {% component type:"attributes" %}
  • Liquid Data
    • {% component type:"domain_settings" %}

Backlog

CRM:
Contact type field

New entity of ‘Contact Type’ with options:

  • Consumer
  • Wholesaler

Extend CRM Contact entity by Type field. Set ’Consumer’ value to all CRM contact records by default:

  • on create contact
  • preset for all existed contacts

Backlog

Ecommerce:
Taxes

Ability to view list of taxes and perform create/edit and delete tax operations.

Design: http://prntscr.com/rbjty8

Columns of the list view:

  • Name
  • Tax Percentage Amount
  • Country
  • Actions

Provide ability to pre-create taxes for countries (http://prntscr.com/rbjts6):

  • USA (see taxes on Acceptance criteria)

http://prntscr.com/ovgi09 - clicking on the button should create set of tax codes for selected country if system has preset of taxes for that country.

Create/edit form:

  • Country (select). Options:
    • use the same list of countries that used for Domains settings ->"Country"
    • On add new tax - preselect the country that is attached to the main domain by default
  • Tax Code (string) (required)
  • Tax Rate (number) - (type float) number of percent. Value should be between 0 and 100 including edges.

Backlog

Ecommerce:
Discount codes

Ability to view list of discount codes and perform create/edit and delete discount code operations.

Design: http://prntscr.com/rbjuge

Columns of the list view:

  • Code
  • Type
  • Amount
  • Release Date
  • Expiry Date
  • Enabled
  • Actions

Create/edit form:

  • Code (string) (required)
  • Description (string).
  • Type (select). options:
    • Fixed Amount (used by default)
    • Percentage of Order
    • Free Shipping
  • Amount (number) - (type float) discount amount. Value may represent an actual amount or percent of order.
  • Currency (select). options
    • use list of currencies that are applied to all domains of the site
  • Min Order Cost Limitation (number) - (type float).
  • Expire after x redemptions (number) - (type int). Validate values to be integer and greater or equal to 0.
  • Catalogs (multi-select). Options:
    • list of ecommerce catalogs module items.
  • Release Date (datetime)
  • Expiry Date (datetime)
  • Enabled (bool) - checked by default

Backlog

Ecommerce:
Gift Vouchers

Ability to view list of Gift Vouchers and perform create/edit and delete Gift Voucher operations.

Design: http://prntscr.com/rbjuz8

Columns of the list view:

  • Name
  • Amount (show values with 3 letter currency code)
  • Balance (show values with 3 letter currency code)
  • Recipient
  • Enabled
  • Actions

Create/edit form:

Details tab:

  • Currency (select) - options:
    • use the same list of countries that used for Domains settings ->"Country"
  • Name (string) (required) - unique value
  • Amount (number) - (type float). (required)
  • Balance (number) - (type float).
  • Type (select). Not selectable. Preselect value by default or based on initial value. Options:
    • Manual (default)
    • Via Shop
  • Enabled (bool) - checked by default

Recipient tab:

  • Name (string) (required)
  • Email (string) (required)
  • Message (string) (required)

Buttons:

  • Email me - sends gift voucher system email to current logged in admin user.
  • Email Recipient - sends gift voucher system email to recipient in the form above.

Backlog

Ecommerce:
Gift Vouchers System Email

Add new system email
Design: http://prntscr.com/rbjvhn

  • Name: Gift Voucher
  • Content: see screenshot

Liquid scope (this):

  • RecipientName - use the data from gift voucher -> recipient record
  • RecipientAddress - use the data from gift voucher -> recipient record (Email)
  • PurchaserName - TBD - this will be the full name from the CRM record that is assigned to the order that contains gift voucher product that creates this gift voucher and triggers the system email. Leave empty if gift voucher was created manually.
  • GiftVoucherCode - use the data from gift voucher -> Details record
  • GiftVoucherAmount - use the data from gift voucher -> Details record
  • GiftVoucherCurrency - object - use currency that is related with the gift voucher country
    • code
    • symbol
    • digitalCode
    • name
  • Message - use the data from gift voucher -> recipient record
  • SiteUrl - protocol and site domain. Use the same logic as in "Secure Zone Login Details"

EXAMPLE:
{

  "Message": "test test test",

  "SiteUrl": "https://vlad.z.treepl.co",

  "GiftVoucher":

  {

    "Name": "GV431795",

    "Amount": 100.00000000,

    "Balance": 100.00000000,

    "Type": "ViaShop",

    "Currency": "$",

    "Enabled": true,

    "RecipientName": "test@gmail.com",

    "RecipientEmail": "test@gmail.com",

    "RecipientMessage": "test test",

    "CreatedDateTime": "0001-01-01T00:00:00",

    "UpdatedDateTime": "0001-01-01T00:00:00"

  },

  "RecipientName": "test@gmail.com",

  "PurchaserName": "test2 test2",

  "PurchaserEmail": "test2@gmail.com",

  "GiftVoucherAmount": 1100.00000000,

  "GiftVoucherCode": "GV431795",

  "GiftVoucherCurrency":

  {

    "Code": "USD",

    "Symbol": "$",

    "DigitalCode": "840",

    "Name": "US Dollar"

  }

}

Backlog

Ecommerce:
Shipping options

Ability to view list of Shipping options and perform create/edit and delete Shipping option operations.

Design: http://prntscr.com/rbjxt3

Columns of the list view:

  • Name
  • Price (show values with 3 letter currency code)
  • Currency/Country
  • Actions

Create/edit form:

Details tab:

  • Name (string) (required)
  • Price (number) - (type float). (required)
  • Currency/Country (select) - options:
    • use pairs of country and currency that are retrieved from
      • list of currencies that are applied to all domains of the site
      • list of countries that are applied to all domains of the site
  • Type (select). Options: (required)
    • User Defined (default)
  • Tax Code (select). Options:
    • None (default)
    • list of discount codes for the selected country

Settings tab:

  • Handling Charge (number) - (type float).
  • Additional Per Item Handling Charge (number) - (type float).
  • Weight Limitations
    • Min (number) - (type float).
    • Max (number) - (type float).
  • Width Limitations
    • Min (number) - (type float).
    • Max (number) - (type float).
  • Height Limitations
    • Min (number) - (type float).
    • Max (number) - (type float).
  • Depth Limitations
    • Min (number) - (type float).
    • Max (number) - (type float).
  • Order Price Limitations
    • Min (number) - (type float).
    • Max (number) - (type float).
  • Show Shipping option to (select) - options:
    • All (default)
    • Consumer
    • Wholesaler
  • Limit Delivery to Following Countries (multi-select)
    • use the same list of all countries
  • Exclude Shipping if Purchasing from these Catalogs (multi-select)
    • future list of catalogs. Leave empty for now.

Backlog

eCommerce:
JS oriented properties

Liquid properties created for all price related objects to correctly output HTML markup to work with JS functionality.

For example, where you might have an output for a products price value such as:
{{this.price}}

Output is just a value:
5.00

But for the shop JS functionality data attributes are required for correct updating of prices, etc. So formatted objects are available, eg:
{{this.priceHtml}}

Output is HTML:

<span data-cms_product_data_price="[[itemId]]">[[ItemPrice]]</span>

Backlog

eCommerce:
JS and functionality

Create js function for ecommerce.js that will

  • collect item quantity
  • collect item attributes selected
  • trigger add to cart flow based on info collected above

Backlog

Shopping cart:
JS and functionality

Create js function for ecommerce.js that will

  • Enter Discount Code
  • Enter Gift Voucher
  • Clear Cart Flow
  • Change shoppingCart Item quantity
  • Choose shipping
  • Change Destination Country
  • Change Tax Code

Backlog

Shopping cart:
System page and default structure

Create new system page

  • Shopping Cart
  • URL: “/shopping_cart”

Default layout - inserts all JS and html code that will provide shopping cart functions

http://prntscr.com/rbk9w0

Backlog

Shopping Cart:
ShippingOptions, TaxCodes and Country/Currency lists

Add new component tags:

{% component type:"countries", collectionVariable:"", layout:"" %}

{% component type:"currencies", collectionVariable:"", layout:"" %}

{% component type:"shipping_options", collectionVariable:"", layout:"" %}

{% component type:"tax_codes", collectionVariable:"", layout:"" %}

  • collectionVariable (not required) - works the same way as other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

collectionVariable context is an OBJECT described below:

countries:

{

    "items":

    [

        {

            "Code": "string",

            "DisplayName": "string"

        }

    ]

}

currencies:

{

    "items":

    [

        {

            "Code": "string",

            "Symbol": "string",

            "DigitalCode": "string",

            "Name": "string",

      }

    ]

}

shipping_options:

{

    "items":

    [

        {

            "Id": "string",

            "Name": "string",

            "Price": 0,

            "TaxPercent": "0",

            "TaxPrice": "0",

            "TotalPrice": 0,

            "CountryCurrency": {

              "CurrencyCode": "string",

              "CurrencyName": "string",

              "CountryDisplayName": "string",

              "CountryCode": "string"

            }

        }

    ]

}

tax_codes:

{

    "items":

    [

        {

          "Id": "string",

          "TaxCode": "string",

          "CountryCode": "string",

          "Amount": 0

        }

    ]

}

Default virtual layout:

countries:

<select>

    {% for item in this.items %}

        <option value="{{item.Code}}" >{{item.displayName}}</option>

    {% endfor %}

</select>

currencies:

<select>

    {% for item in this.items %}

        <option value="{{item.Code}}" >{{item.Name}} ({{item.Symbol}})</option>

    {% endfor %}

</select>

shipping_options:

<select>

    {% for item in this.items %}

        <option value="{{item.Id}}" >{{item.Name}} ({{item.TotalPrice | domain_money_format }})</option>

    {% endfor %}

</select>

tax_codes:

<select>

    {% for item in this.items %}

        <option value="{{item.Id}}" >{{item.TaxCode}} ({{item.Amount}}%)</option>

    {% endfor %}

</select>

Toolbox:

  • eCommerce
    > Checkout Countries Select
    > Checkout Currencies Select
    > Checkout Shipping Options Select
    > Checkout Taxes Select

Backlog

Shopping cart summary widget
Component tag

Add new component tag component type:"shopping_cart":

{% component type:"shopping_cart", collectionVariable:"", layout:"" %}

  • collectionVariable (not required) - works the same way as in other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

‘collectionVariable’ context is an OBJECT described below:

{

  "Id": "1907185188476026940",

  "totalItemsCount": 1,

  "unitsCountHtml": "<span data-cms_cart_units_count=\"1907185188476026940\">1</span>",

  "paymentType": null,

  "hasGiftVoucherProducts": false,

  "formatSetting": {

    "name": "En-US USD my",

    "culture": "en-US",

    "decimalsQuantity": "2",

    "currency": {

      "code": "USD",

      "symbol": "$",

      "digitalCode": "840",

      "name": "US Dollar"

    }

  },

  "domainCountry": {

    "name": "UNITED STATES",

    "code": "US"

  },

  "destinationCountry": {

    "name": "UNITED STATES",

    "code": "US"

  },

  "shippingOption": {

    "id": "12252410371037462538",

    "shippingOptionId": "7361027874612051972",

    "name": "Free",

    "price": 0.0000,

    "taxPercent": 0.0,

    "taxPrice": 0.0,

    "totalPrice": 0.0000,

    "subTotalPrice": 0.0000

  },

  "discount": {

    "id": "16801218532107878403",

    "code": "test",

    "type": "FixedAmount",

    "amount": 5.0000

  },

  "giftVoucher": {

    "id": "7532467322502512643",

    "code": "test",

    "amount": 20.0000,

    "balance": 0.0000

  },

  "discountPrice": 5.0000,

  "subTotalPrice": 33.7700,

  "subTotalPriceHtml": "<span data-cms_cart_subtotal=\"1907185188476026940\">$33.77</span>",

  "taxCodeId": null,

  "taxPercent": 0.0,

  "taxPrice": 0.0000,

  "taxPriceHtml": "<span data-cms_cart_tax_price=\"1907185188476026940\">$0.00</span>",

  "totalPrice": 28.7700,

  "totalPriceHtml": "<span data-cms_cart_total=\"1907185188476026940\">$28.77</span>",

  "discountPriceHtml": "<span data-cms_cart_discount_price=\"1907185188476026940\">$5.00</span>",

  "giftVoucherPriceHtml": "<span data-cms_cart_gift_voucher_price=\"1907185188476026940\">$0.00</span>",

  "giftVoucherPrice": 0.0000,

  "shippingTotalPriceHtml": "<span data-cms_cart_shipping_price=\"1907185188476026940\">$0.00</span>",

  "checkoutButtonHtml": "<button class=\"system_button\" data-cms_cart_checkout=\"\">checkout</button>",

  "clearCartHtml": "<button class=\"system_button\" data-cms_cart_clear_card=\"\">Clear cart</button>",

  "giftVoucherHtml": "<input type=\"text\" data-cms_cart_gift_voucher=\"\" value=\"test\" />",

  "discountCodeHtml": "<input type=\"text\" data-cms_cart_discount_code=\"\" value=\"test\" />",

  "items": [

    {

      "id": "15049017874163171349",

      "smallImage": null,

      "name": "test prod",

      "type": "ModuleItem",

      "moduleId": 0,

      "SKUCode": "eb8da3f4-2037-42c8-ab84-20d7c85ea224",

      "quantity": 1,

      "Url": "/catalogs/test-prod",

      "price": 33.7700,

      "taxPercent": 0.0000,

      "unitPrice": 33.7700,

      "taxPrice": 0.00000000,

      "unitTotalPrice": 33.77000000,

      "totalPrice": 33.77000000,

      "unitTotalPriceHtml": "<span data-cms_cart_item_total_unit_price=\"15049017874163171349\">$33.77</span>",

      "priceHtml": "<span data-cms_cart_item_price=\"15049017874163171349\">$33.77</span>",

      "unitPriceHtml": "<span data-cms_cart_item_subtotal_price=\"15049017874163171349\">$33.77</span>",

      "taxPriceHtml": "<span data-cms_cart_item_tax=\"15049017874163171349\">$0.00</span>",

      "totalHtmlPrice": "<span data-cms_cart_item_total_price=\"15049017874163171349\">$33.77</span>",

      "quantityHtml": "<input type=\"number\" value=\"1\" data-cms_cart_item_quantity=\"15049017874163171349\" />",

      "removeHtml": "<a target="_blank" href=\"javascript:\" data-cms_cart_remove_order_line=\"15049017874163171349\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" /><path d=\"M0 0h24v24H0z\" fill=\"none\" /></svg></a>",

      "attributes": []

    }

  ]

}

Default virtual layout:

<div class="shoppingCartWidget" data-ecommerce_shopping_cart_widget>

{% if this.totalItemsCount > 0 %}

{{this.totalItemsCount}} item(s), Total: {{this.totalPrice | domain_money_format }} <a class="shoppingCartLink" href="/shopping_cart">View Cart</a>

{% else %}

Shopping cart is empty.

{% endif %}

</div>

Toolbox:

  • eCommerce > Shopping Cart

Backlog

Add to Cart:
Component tag

Add new component tag component type:"ecommerce_add_to_cart":

{% component type:"ecommerce_add_to_cart", itemId: "", collectionVariable:"", layout:"" %}

  • itemId (not required) - determines what item should be added to the cart once clicked
    • default - {{this.id}}
  • collectionVariable (not required param) - works the same way as other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

collectionVariable context is an OBJECT that is equal to module item selected by itemId param.

Default virtual layout:

<a target="_blank" href="javascript:" data-ecommerce_add_to_cart_Item="{{this.id}}" class="ecommerceAddToCartItem">{{this.name}}</a>

Toolbox:

  • eCommerce > Add to cart button

Backlog

Buy Now:
Component tag

Add new component tag component type:"ecommerce_buy_now":

{% component type:"ecommerce_buy_now", itemId: "", collectionVariable:"", layout:"" %}

  • itemId (not required param) - determines what item should be added to the cart once clicked
    • default - {{this.id}}
  • collectionVariable (not required param) - works the same way as in type: module.
  • layout (not required param) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

collectionVariable context is an OBJECT that is equal to module item selected by itemId param.

Default virtual layout:

<a target="_blank" href="javascript:" data-ecommerce_buy_now_Item="{{this.id}}" class="ecommerceBuyNow_Item">{{this.name}}</a>

Toolbox:

  • eCommerce > Buy now button

Button should add item to cart and then redirect user to shopping cart.

Backlog

Item Quantity:
Component tag

Add new component tag component type:"ecommerce_item_quantity":

{% component type:"ecommerce_item_quantity", itemId: "", collectionVariable:"", layout:"" %}

  • itemId (not required) - determines what item should be added to the cart once clicked
    • default - {{this.id}}
  • collectionVariable (not required) - works the same way other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

collectionVariable context is an OBJECT that is equal to module item selected by itemId param.

Default virtual layout:

<input type="number" data-ecommerce_qunatity_field="{{this.id}}" name="ecommerce_qunatity_field" value="1"/>

Toolbox:

  • eCommerce > Item Quantity Field

Backlog

/cms-assets/payment/ecommerce.js file specification and Linkage rules

File specification:

Create file “/cms-assets/payment/ecommerce.js”

File contains functions that supply:

  • Add to cart flow:
    Update item quantity, attributes, shopping cart widgets after adding to cart successfully
  • Enter Discount Code:
    Update shopping cart view based on applied Discount Code
  • Enter Gift Voucher:
    Update shopping cart view based on applied Gift Voucher
  • Clear Cart Flow:
    Update shopping cart view
  • Change shoppingCart Item quantity:
    Update shopping cart view based on applied item changes
  • Choose shipping:
    Update shopping cart view based on applied shipping option
  • Change Destination Country
  • Change Tax Code:
    Update shopping cart view based on applied tax

Logic should be based on layouts generated by

  • {% component type:"ecommerce_add_to_cart" %}
  • {% component type:"ecommerce_item_quantity" %}
  • {% component type:"item_attributes" %}
  • {% component type:"shopping_cart" %}

Linkage rules:

<script src="/cms-assets/payment/ecommerce.js?v=[[cms_version]]"></script> should be added to head of the page when:

  • shopping cart system page is loaded
  • {% component type:"ecommerce_add_to_cart" %} was parsed at least once

Backlog

Append to ecommerce.js 3 culture params

Pass site culture settings to ecommerce.js for price calculation and JS output.

Pattern:
ecommerce.js?thousands_separator=[[thousands_separator]]&decimals_separator=[[decimals_separator]]&decimals_count=[[decimals_count]]

Fill thousands_separator, decimals_separator and decimals_count based on the culture of the site domain.

Backlog

System page:
Checkout page

Create new system page

  • Checkout
  • URL: “/checkout”


Add Checkout Form to page and apply cms default styles.
Form component:

{% component type:"form", alias:"checkout_form", formType: "checkout" %}

Backlog

Preset Checkout From

Create Checkout From.

Alias checkout_form

Implement base styles for the form in /cms-assets/css/main.css

Backlog

System page:
Checkout thankyou page (Order Receipt)

Add system page

  • Order Receipt
  • URL: “/order-receipt”


Show this page if form with type "checkout" is submitted (instead of form thankyou page).

Provide liquid objects (this.formSubmissionData and this.order) those are required to build the page by design below:
http://prntscr.com/rbkkcf

Backlog

System email:
Supplier Workflow Notification

Add new Supplier Workflow Notification system email

Design - http://prntscr.com/rbkktt

Also add invoice liquid data to the following emails:

  • Any workflow email attached to the form.
    • all order info
  • Form Autoresponder
    • all order info
  • Supplier Workflow Notification
    • only their product info

Backlog

System email & System Workflow:
Low Stock Notification

Add new Low Stock Notification system email
Design - http://prntscr.com/rbkl5i

Add new Low Stock Workflow system workflow (undeletable)

Backlog

System email:
Invoice redo

Redo invoice system email HTML content to match the shopping cart table

http://prntscr.com/rbkojy

Backlog

eCommerce:
Order management

In ‘CRM’ > ‘Orders’ ability to

Backlog

eCommerce:
Search and filtering by price & parent id

Setup Advanced Search and filtering by

  • price
    • Save to index price based on currency/country pair
    • on search or filtering - take currency/country pair by current (or default) domain and combine to search criteria by price
    • Price determined as Numeric field. So in searching you can search price range via use of ‘prop_Price_Min’ and ‘prop_Price_Max’ params.
  • parentId
    • save to index list of parentId's
    • on search - apply search by list of parent id's (similar to search by category when multiple categories applied)

Backlog

Advanced Module Settings:
Related "Module item"

Create setting that will allow module item to have list of related module items

  • Advanced Settings ->Enable related module items (hidden and restricted to change for now. Enabled for Products module only)

If option enabled - view tab on add/edit item page:

http://prntscr.com/rbktkw

Provide ability to

  • choose multiple module items of the same module.

Chosen module items will be determined as RelatedModuleItemsList

Backlog

Advanced Module Settings:
Group "Module item"

Create setting that will allow module item to have list of related module items

  • Advanced Settings ->Enable module items grouping (hidden and restricted to change for now. Enabled for Products module only)

If option enabled - view tab on add/edit item page:

http://prntscr.com/rbkvxk

Provide ability to:

  • choose multiple module items of the same module
  • choose which module item will be the main.
  • reorder module items list

Further details:

Can sort grouped products ordering via drag-and-drop.

Always show main product as first item in list.

On change main product - set it's order position to first.

When trying to add product to group - if it's already added to any other group - show popup:
"This item is already added to another group ("[[name of the main item in the group]]"). Are you sure you want to remove it from that group and add it here?"

When clicking yes:

  • if the product was main in another group - apply main flag to the first ordered item left in the group
  • if the group consist of 2 items - destroy that group since there is no need to exist a group with only one product

Backlog

Module item Pricing tab upgrade

Provide UI upgrade that allows to see what price is edited right now (highlight editing price line).

When choosing another country/currency value - highlight the actual pricing record

Backlog

eCommerce:
{% component type:"related_items" %}

Add new component tag component type:"related_items":

{% component type:"related_items", object:"[[object]]", source:"[[moduleIdentifier]]", itemId:"[[itemId]]", limit:"[[limit]]", collectionVariable:"", layout:"", sortBy:"", sortOrder:"" %}

  • source (required) - moduleName or moduleId.
  • itemId (required) - id of the module item that has relations
  • object (not required) - item|collection
    • Default value is collection.
  • limit (not required) - number of items to be rendered
    • Default is ALL.
  • collectionVariable (not required) - works the same way as other modules.
  • layout (not required) - path to FTP file that will contain layout content to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.
  • sortBy (not required):
    • All module item properties
    • Default value is ’Name’.
  • sortOrder (not required):
    • ASC (default)
    • DESC

Single tag item context is the same as for type:"module":

Default virtual layout:

<ul>

    {% for item in this.items %}

        <li>

            <a target="_blank" href="{{item.url}}" title="{{item.name}}">{{item.name}}</a>

        </li>

    {% endfor %}

</ul>

Backlog

eCommerce:
{% component type:"grouped_items" %}

Add new component tag component type:"grouped_items":

{% component type:"grouped_items", object:"[[object]]", source:"[[moduleIdentifier]]", itemId:"[[itemId]]", collectionVariable:"", layout:"" %}

  • moduleIdentifier (required param) - moduleName or moduleId.
  • itemId (required param) - id of the module item that has relations
  • object (not required param) - item|collection
    • Default value is collection.
  • collectionVariable (not required param) - works the same way as in type: module.
  • layout (not required param) - path to FTP file that will contain layout content that need to be parsed.
    • If specified empty string - do not render anything.
    • If not specified at all - render default virtual layout.

Single tag item context is

  • the same as for type:"module".
  • should have one additional property IsMainGroupItem (boolean) that has value taken from module item grouping tab
  • Module items should be ordered by saved order from product Group Items tab.

Default virtual layout:

<select>
{% for item in this.items %}
<option value="{{item.id}}" {% if this.id = item.id %}selected="selected"{% endif %}>{{item.name}}</option>
{% endfor %}
</select>

Bug

Advanced URL bug fix

I created pages in the root directory but then needed to create 2 sub folders (en-gb & fi). I moved the files into the en-gb folder but they also show in the root directory?

  • Expected
    • Items shown in "moved to" folder only
  • Actual
    • Items shown in "moved to" folder AND in previous folder at the same time

Bug

Edit secure zone

Fixed Internal error bug (http://prntscr.com/r295iq) then changing secure zone type from free to paid and clicking save.

Bug

Delete last product from shopping cart

Now when deleting last product from the shopping cart – the page refresh state to Shopping Cart is empty automatically. No need to manually refresh the page

Bug

Change logic when choose another country on Shopping Cart

When selecting another country the shipping options will no longer disappear (if no country limitation option applied to the particular shipping options).

Bug

Not correct calculated pre-order variations

  1. Create product
  2. Create attributes and generate variations
  3. Set in-stock values (10 for each variation)
  4. Go to product page and buy any product variation
  5. Go back to product variations page

Expected:

  • In-stock 9, Pre-order 0 for bought product variation

Actual

  • In-stock 9, Pre-order 1 for bought product variation

Bug

Secure Zone custom date

Create a Secure Zone with Custom Date http://prntscr.com/r26h9g But applied incorrect date http://prntscr.com/r26hdm

Bug

Add cursor to indicate drag and drop functionality

Add cursor on hover in Catalogs and Products assignment pages. So user can determine that he can drag and drop items http://prntscr.com/qytfem

Bug

Change sorting on Orders list

Change ordering on CRM -> Orders. Last created orders should be shown first (sort by date created DESC).

Bug

Update table in eCommerce

Update Custom Columns so user can select eCommerce related properties
http://prntscr.com/r0keqv

Bug

Change title on Shipping Option

Go to Shipping Option, Click on Add new Shipping Option, Change title http://prntscr.com/qyah0h

Bug

Change shipping option when change quantity

  • Create shipping option
  • Apply min items quantity param (for example 8)
  • Go to Product and add it to the cart
  • Go to shopping cart
  • Change item quantity to be
  • Expected result: shipping option shows right after change quantity event was triggered http://prntscr.com/qyd2qp
    Actual – you need to refresh the page to see that shipping option

Bug

Adding product with different attribute separately to cart

  • Add product with attribute options white, black
  • Go to product and add it to cart with selected white option
  • Click again add to cart but with selected black option
  • Go to cart
  • Expected: two order lines that represent two different variations of the same product http://prntscr.com/qyd4nf
    Actual: one order line that represents the product but with quantity 2

Bug

Tax on shopping cart should change dynamically

Output the tax on the shopping cart http://prntscr.com/qydqbo . It should be changed dynamically when applying new tax (user should not refreshing the page to see the applied taxes) http://prntscr.com/qydqv2

Bug

Generate Inventory

  • Create product
  • Go to the product detail page
  • Add it to cart
  • Go back to admin
  • Create attributes for this product
  • Go to inventory and click generate variations
  • Unexpected error – http://prntscr.com/quzx7q

Bug

In Stock showing when inventory disabled

If Enable inventory checkbox is not checked than In stock:0 should not be shown http://prntscr.com/qvjbxa

Bug

Discount code valued at more than the order total

Order totalPrice should not be less than 0 when applying amount discount that is bigger than totalCost of the order http://prntscr.com/qvjely

Bug

Not saving Catalogs in Discount Code

Catalogs restriction field in discount code not saving. http://prntscr.com/qv4k1k

  • Go to discount code
  • Select catalogs
  • Click save
  • Refresh the page
  • Unexpected result – catalogs not selected for the discount code

Bug

Gift Voucher doesn't work

Bug

Removing Discount codes after applying him

Bug

2 price in product

When product that has several prices is added to the cart – shopping cart shows incorrect price https://prnt.sc/qv4sqs

Bug

CRM Wholesaler

CRM Wholesaler type doesn't change logged in users Liquid 'Type' value, nor does it change product pricing to wholesaler when logged in.

Bug

Canonical links in product

Go to detail Product (product must be in several Catalogs) Open tab SEO and set canonical link http://prntscr.com/quyzkm absent name product AND when you change canonical link - must be preselected information - but now is empty http://prntscr.com/quz19h

Bug

Catalogs Detail Layout

Fix the Catalog detail layout https://prnt.sc/quz56n

Bug

Clear cart

Clearing the cart doesn’t restore instock value of the product.
Expected: once clear cart action triggered – restore in-stock values for all product variations in the cart

Bug

Check 'Price' and 'PriceHtml'

A Product has Liquid values 'Price' and 'PriceHtml', but these appear to be the same (eg: 18.0000). The 'priceHtml' should be the country/currency "formatted price"

Bug

Optimize Speed opening Component Manager

Optimize loading of the Components Manager http://prntscr.com/qs84xx

Bug

Typo in {{this.InStoke}}

It says {{this.InStoke}}. Again a minor thing and {{this.InStockHtml}} will solve this. https://treepl.slack.com/archives/CRUAT8GGZ/p1579791435006900?thread_ts=1579765114.003400&cid=CRUAT8GGZ

Bug

Mistake in spelling

Under Product 'Group Items' there are some typos for the description placeholder: "Description" and "e.q" http://prntscr.com/qs4lr4 and without the dot in the end http://prntscr.com/qs4mgw

Bug

Group Items selection

Go to Product->Group Items You can't choose itself https://prnt.sc/qs4n4f

Bug

UI improvement for Site Information

https://forum.treepl.co/t/ui-improvement-for-site-information/836

Bug

Liquid error

When price is added it breaks the product detail page with this "Liquid Error: Object reference not set to an instance of an object.""

Bug

Error when delete product

It seems that sometimes I am not able to add new products, when I press Save it gives me the classic "You have unsaved changes. Leave the page?" If I press OK I end up on the front page (Analytics)

Bug

Change this.name on detail product

Small thing and since all will change the product detail page it doesn't matter that much. The name of the product is "hardcoded" to be "Product 1". Should be {{this.name}} ?

Bug

Added by member - doesn't show

“Added by” CRM contact not showing on Module Item Detail Page http://prntscr.com/qxdk80

Show more less
New Feature

BONUS: UK Data Center

New data center: UK (London)
More details in our blog post
  • Infrastructure
New Feature

eCommerce

Ecommerce release schedule
  • Products
  • Catalogs
  • Discounts
  • Taxes
  • Shipping
  • Gift vouchers
  • Related products
  • Shopping cart and checkout process

  • eCommerce
Improvement

Ability To Assign Documents To A Secure Zone

Ability to make documents such as PDFs and Word docs secure by assigning them to a secure zone. And/or the ability to assign a folder and all the documents in it to a secure zone so that no one can access or download the document unless they are logged into the secure zone.

  • Secure Zones
v 4.14 Release date: 29 Jan, 2020
New Feature

eCommerce beta

Ecommerce release schedule
  • Products
  • Catalogs
  • Discounts
  • Taxes
  • Shipping
  • Gift vouchers
  • Related products
  • Shopping cart and checkout process

  • eCommerce
v 4.12 Release date: 25 Dec, 2019
Improvement

Treepl Portal: Monthly Billing

Ability to bill by the month
  • Treepl Portal
v 4.11 Release date: 27 Nov, 2019

Full Release Notes

Backlog

Secure Zone Subscription:
Settings for recurring subscription

Enable Paid Access control:

  • fields for paid Membership subscription:
    • Membership Fees Amount (Price)
    • Membership Renewal Rate (Recurring period)
      • Monthly
      • Yearly
  • If Paid Access is selected, hide expiration date settings and show fields for Membership subscription and vice versa
  • on saving settings with changed recurring period - validate that there is no secure zone subscriptions in the system that used different, previous subscription period. If found - show error message.

Setting page (http://prntscr.com/q77nx4)

Backlog

Secure Zone Subscription:
CRM Contact update

Subscription page (http://prntscr.com/q77mxb)

  • Add Cancel subscription button near secure zones that have one. Once clicked - trigger Cancel Membership subscription flow
  • On successful canceling - remove all canceling links related to this subscription

Backlog

Secure Zone Subscription:
Recurring Payment flow on form with secure zone submit

Once form is submitted

  • Check if form has event subscriptions
    • if yes continue GENERAL Event payment FLOW
    • if no Check if form has attached secure zones
      • if yes
        • take formData.amount and assert it with SUM(sz.membershipPrice) for each secureZone => sz
        • if equals - proceed subscription
        • if no - show validation error message
      • if no - continue GENERAL FLOW

Backlog

Secure Zone Subscription:
Cancel Membership subscription flow

Once Cancel Membership subscription flow triggered:

  • check if subscription contains several secure zones
    • if found several - show attention popup and ability to continue or cancel
    • if not found - show Are you sure default popup, similar to the one that’s shown on delete flow.
  • if user chooses to proceed further - cancel subscription in stripe and remove cancel subscription link.
  • Show successful canceling message

Backlog

Secure Zone Subscription:
Form saving changes to assigned secure zones

On saving Form settings with changed secure zones list - validate that all secure zones have the same recurring period or have no recurring at all. If found different recurring period - show error message

Backlog

Secure Zone Subscription:
Sell membership form selector in toolbox

Add new toolbox item (http://prntscr.com/pu6m4d)

  • Secure Zone
    • Sell Membership Form

Shows list of forms that have assigned secure zones WITH sell membership option enabled.

On selecting a Form, show form tag with price attribute that corresponds to the SUM of all secure zones prices

Example:

{% component type: "form", alias: "membership_form", price: "25.25" %}

Backlog

Secure Zone Subscription:
Already subscribed membership price change

Behavior for saving secure zone membership settings if there are already existing subscriptions in the system.

1) On disable membership or setting membership price lower than before - show popup:
“You can't set price for membership lower than before since you have active subscriptions”
[Cancel all memberships and save changes] [Cancel]

2) On setting membership price higher than before - show popup:

“You have active subscriptions for this membership in the system.
Should it be canceled?”
[Leave all memberships and save changes] [Cancel all memberships and save changes] [Cancel]

http://prntscr.com/q77owl

Bug

Page URL link broken in Pages Module

Page URL display link in admin not linking correctly.

https://forum.treepl.co/t/bug-page-url-link-broken-in-pages-module/805

Bug

Admin console breadcrumbs with incorrect links

Admin console breadcrumbs for module items incorrectly linking back to parent items.

https://forum.treepl.co/t/bug-admin-console-breadcrumbs-url-incorrect/795

Bug

Rebuild index Fix

After being renamed, Custom Module items would disappear from the list view on the front end. Only after re-indexing the site it displays again.

Bug

Secure Zone - delete contact with secure zone

Attempting to delete a contact assigned to a secure zone results in error “Internal Error”

Bug

Forloop.index is missing in nested loops bug

When using nested for loops then forloop.index and other properties of forloop was working in the deepest loop only. Expected to get it working in each level of nested for loops.
Example: http://prntscr.com/q781gb
Was: http://prntscr.com/q781m4
Now: http://prntscr.com/q781ph

Show more less
New Feature

Sell Secure Zone Memberships

Functionality to sell membership to a secure zone e.g.: on annual, monthly, weekly, daily basis.
Payment gateway: Stripe.
  • Secure Zones
  • eCommerce
v 4.10 Release date: 15 Nov, 2019

Full Release Notes

Template

“Travel”

https://treepl.co/cms-template/travel

Misc

Performance Optimization

Performed several core improvements that increase

  • module item list and tree view load speed in admin
  • pages load speed

Misc

"module_category_list" component improvements

Modifications:

  • Modify component type:"module_category_list" to set twice URL encoded category fullName to URL
  • this will allow to find categories that contain special characters (comma) in their names
  • On filtering or searching - apply twice URL decode functionality to category fullName in order to correctly split them by comma and not break categories that contain commas in their names.
  • Modify component type:"categories" to set to option values URL encoded category fullNames
  • Add two fields to Single category item context if Advanced multi-level categories flag is enabled:
    • Id
    • FullName

Beta

Advanced multi-level categories update

Force enable flag “Advanced multi-level categories”

NOTE: This feature flag activation may need a manual site index rebuild from the admin. If any module item lists on frontend used filtering by category – they may show nothing until index is rebuilt.

Bug

Advanced URL manager fixes

Core bugs that previously broke saving and duplication of module items when Advanced URL Manager was enabled has been fixed.

Bug

Corrupted images in file manager

When replacing image in file manager, image becomes corrupted

https://www.loom.com/share/7bd0760eaf5e4b07973556abeccc2a6a

Bug

Verified domains in Firefox

Verified email domains could not be added via Firefox

https://forum.treepl.co/t/verified-domains-and-workflows-notification-emails/776

Bug

Email tags for Case and Contact admin links

Case and Contact admin links generated via Liquid tag render old admin links and needed updating

https://forum.treepl.co/t/bug-case-and-contact-admin-links-need-updating/763

v 4.10.1 Patch

Bug

Email domain verification autoresponders

Verifying a domain using the new email domain verification method, autoresponders are not coming through

Bug

Advanced URL Manager

Testing multi slug: Custom Module ‘Items’ fail (404) (https://forum.treepl.co/t/treehouse-meeting-10/767/22)

Bug

Filter by tag

Filter by tag doesn't work - in collection (patch will force rebuild index process)

Bug

Site Search

Site search shows "Liquid Error: Object reference not set to an instance of an object"

Show more less
v 4.9 Release date: 23 Oct, 2019

Full Release Notes

Beta

Advanced URL Manager Part 1

Beta Feature needs turning on to use.

Advanced URL Manager

Allows setting multiple parent items to a single item in order to get several URLs leading to the item's detail page

Beta

Advanced URL Manager Part 1: URL manager reconstruction

Create custom URL manager that will improve Module and Module Items URL management.

  • Allows:
    • To set URL prefix to module that contains several slugs (http://prntscr.com/ov1ezq). Right now only one slug for the module URL is allowed (http://prntscr.com/ov1esj).
      Example:
      /eng/my-custom-module
    • To make module url to NOT HOLD that url to any module item. Right now module url occupies the url that is set on the settings page and no module item allowed to be created under the same url.
      Example:
      Module with url "/my-custom-module" should not occupy "/my-custom-module" URL.
      So user can create module item using slug "my-custom-module".
    • user to choose empty (root) url for module so it's items will have urls that starts from domain without prefix slug (http://prntscr.com/ov1gjq)
    • to set to any custom module a URL that is already used by any other module. But validate module items url to be UNIQUE between ALL global set of URL's of all module items.
  • Item Full URL structure description due to points above:
    • /module/url-part/parent-item-url-slug/sub-parent-item-url-slug/item-url-slug
    • Where:
      Black part is module URL.
      Description:
      Can contain several url slugs.
      Should not actually reserve URL. That's why:
      • Can be the same as in any other module
      • Can be the same as already used full URL of any item
      • Can be empty
    • Blue part is list of parent items slugs. Can contain several slugs. Slugs represent nested parent-child module item structure.

    • Red part is module item slug

Beta

Advanced URL Manager Part 1: Ability to assign multiple URLs for a single content item

Allow to assign multiple parent module items to the single module item in order to get multiple URLs for an item.

Module Settings


Add new module setting

  • Advanced Settings -> Allow multiple parent items

If option of the child module is enabled - display Tab with the value of "name" setting of Parent (for child module item view) or Child (for parent module item view) module.

Example:

  • Module ’Catalogs’ is parent to ’Products’
  • If ’Products’ module has ”Allow multiple parent items” = true than ’product item’ page will contain ’Catalogs’ tab
    And ’catalog item’ page will contain ’Products’ tab

The tab content is multiple item selector

https://prnt.sc/pn2ysg

Selecting multiple parents should save list of the parent module items.

List of parent module items determines the list of urls each of will lead to the detail page of the item.

Beta

Email domains verification: Email Domains Page

Beta Feature turned on by default.

Ability to verify domain with Amazon SES to use in "From" field in your email notifications.

This avoids emails being rejected or delivered as spam.

Add tabs to ‘Settings’ > ‘Domains’

  • “Site Domains” tab
    As per current “Domains” page content.
  • “Email Domains” tab
    New page provide ability to:
    • view list of site domains with states:
      • verified
      • not verified
      • verification failed
    • add new domain verification process
    • apply verification
    • delete domain

Beta

Email domains verification: Email validation on FROM fields

  • For all ’From’ field provide an indicator of the email verification (if using verified domain or not).
    • On changing email - run verification checking (js).
    • Places where From field occurs:
      • Each workflow email (Email notification -> Workflow Emails)
      • Each system email (Email notification -> System Emails)
      • Each module settings -> Autoresponder settings (Any module -> Settings -> Auto-response open-close)
      • Each form autoresponder (Any form-> Settings -> Auto-response)
      • Mailing List
      • Email Campaign
      • Create Email Toolbox
  • When clicking on email verification indicator (unverified state) - show description of unverified domain and link to allowed verified domains
    • Clicking on the link will show all verified domains in toolbox panel.

Beta

Email domains verification: Email sender applying flow

Setup new email sending flow (via amazon account).

On each email sending - check From email

  • If email has verified domain - send via new email sender (amazon account)
  • Otherwise - send via old email sender

Backlog

SSO integration: Authorization Token Renew

Adding background token renew flow to avoid unnecessary re-authentication.

https://forum.treepl.co/t/admin-logged-out-warning-or-keep-alive/717/5

Backlog

WYSIWYG Editor

Remove the default width from the images when placed using the WYSIWYG editor:

https://forum.treepl.co/t/resizing-image-with-editor/738/3

Backlog

Forms list view

‘Workflow’ name column added to Forms list:

https://forum.treepl.co/t/one-more-column-in-forms/731/2

Backlog

Improve custom table columns

Include ‘Meta Description’ in custom table columns:

https://forum.treepl.co/t/request-meta-description-included-in-custom-table-columns/713

Backlog

Liquid filter inconsistency (replace_first, remove_first)

Original filter ‘replacefirst’, now added ‘replace_first’
Original filter ‘removefirst’, now added ‘remove_first’
to match Shopify documented syntax.
Note: Original filters continue to work.

https://forum.treepl.co/t/liquid-filter-inconsistency-replace-first-remove-first/718/2

Show more less
New Feature

Advanced URL Management Part 1

UPDATE TO EXISTING MULTIPLE URL MANAGER
- Ability to assign multiple URL's for a single content item (by attaching mulitple parents items)
- Ability to assign multi-slug for Custom Modules (for example: eng/my-module)
- Ability to assign already taken slug for Custom Module (for example: /inventory - is a page or page folder. Custom Module inventory can also take /inventory...
  • Pages and Templates
  • General
New Feature

Email Domain Verification

Ability to verify domain with Amazon SES to use in "From" field in your email notifications.
This allows avoiding emails to be rejected or delivered as spam.
  • Workflow
  • Emails
Improvement

Authorization Token Renew

Adding background token renew flow to avoid unnecessary re-authentication.
  • Admin Panel
v 4.8.0-2 Release date: 03 Oct, 2019

Full Release Notes

Portal

Primary domain change/secondary domain deletion

Ability to mark a secondary domain as a primary one http://prntscr.com/pb2z50 and delete a secondary domain http://prntscr.com/pb2zf1

Portal

Live/trial sites search option

Ability to search sites by site name and url http://prntscr.com/panppi

Portal

Live/trial sites columns sorting

Ability to sort domains by site name, url, status, expiration date and plan http://prntscr.com/papd0j

Portal

Site activation improvements

1) Ability to activate a domain without www: http://prntscr.com/pans0e

2) "Site type" step removed

3) Automatic nameservers check and ability to skip "checking NS" step and move to the final "Add A record"

Portal

My invoices section

Ability to view invoices for the sites http://prntscr.com/paov9o with an option to send an invoice to your email address http://prntscr.com/paovsf and download it http://prntscr.com/paow9v http://prntscr.com/pasvyo

Portal

Password recovery

Ability to recover your password using recover link here: http://prntscr.com/pde73q

Backlog

Single Sign-On integration with admin:

Login flow

Change the login to Treepl admin flow to use Single Sign-On identity provider:

When a user goes to /admin - check his logged in state on identity provider

  • Check the logged in state on identity provider
  • If logged in, redirect to the dashboard
  • Otherwise, redirect to partner’s branded identity login page. If the login is successful, redirect to the site’s dashboard.

Backlog

Single Sign-On integration with admin:

Reset password flow

Add Restore Password link to the login form http://prntscr.com/pcyqxh

Add Reset Password Page similar to login page (branded page). Fields:

  • Email

Add Restore Password Confirm Page similar to login page (branded page). Fields:

  • Password
  • Confirm Password

On successful restore password confirmation, redirect to the login page.

Backlog

Single Sign-On integration with admin:

Invite user flow (invite/register)

Redesign Add/edit admin user views:

  • remove add/edit user and set password pages
  • Add new user button will call a popup
  • name field
  • email field
  • choose role field
  • role field
  • Edit users also calls a popup:
  • Name and email - displayed as a text.
  • choose role field
  • reset password button
  • For all existing admin users – show re-invite button that needs to be clicked by a partner in order to trigger invite admin flow with password reset email sent to the admin user in order to allow them to set a password.
    All the admin users that have not passed this flow will not be able to login to the cms admin.

Backlog

Single Sign-On integration with admin:

Invite Admin User system email

Create new System email

  • Name
  • Invite Admin User
  • Content
  • See Acceptance Criteria below
  • Email liquid:
  • {{this.siteURL}} should return Primary live domain or Default domain if site is trial
  • {{this.invitePasswordSetUrl}} should be replaced with the invitation link
  • {{this.isNewUser}} - Boolean. True is if an admin user has been created and false if just invited an existing one.

Design - http://prntscr.com/pcyrv1

Backlog

Single Sign-On integration with admin:

Restore Admin User Password system email

Create new System email

  • Name
  • Restore Admin User Password
  • Content
  • See Acceptance Criteria below
  • Email liquid:
  • {{this.restorePasswordUrl}} should be replaced with the link to set password page.

Design - http://prntscr.com/pcysal

Backlog

Single Sign-On integration with admin:

D
elete admin user

Clicking on delete admin user should launch un-invite flow on identity server.

Backlog

Ecommerce New Plan

Plans restrictions changes

Rename Pro+ plan to eCommerce

Restrict for all plans lower than eCommerce and allow on eCommerce CRUD and list operations

  • eCommerce Settings
  • Tax
  • Discount codes
  • Gift vouchers
  • Shipping options

  • Customizable columns are available starting Business plan (Update existing restrictions)
  • API integrations are now available starting Business plan (Add this new restriction for future use)
  • Payable events, items, forms are available starting Pro plan (Add this new restriction and use it for)
  • Payment gateways are available starting Pro plan (Add this new restriction and use it for Settings->payment page)

Beta

Payment Settings: Currency and format settings

Beta Feature:

Title:

  • Currency and price format settings

Description:

  • Improves payment flow using defined by the customer price formats and currencies associated with the domain the payment was made from.

Beta

Payment Settings: Currency and format setting:

Modify "payment gateway" setting page to "payment settings" page

  • New Payment Settings Page should contain the tabs as follows:
  • gateway
  • Move old "payment gateway" page content to gateway tab
  • Remove Currency selector from gateway section.
  • currency and format
  • Display list of added Payment Format settings to the system
  • On clicking add button - display a form with the following fields allowing to add new Payment Format settings
  • Name - (string)
  • Culture - (select) list of cultures
  • use list of cultures
  • Currency - (select) Options:
  • use table of currencies already set into the system in order to show currencies
  • Number of digits after coma - (select) options:
  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Edit button should display the same form with preselected fields
  • On clicking delete, display standard confirmation dialog box

Beta

Payment Settings: Currency and format setting:

Default format setting

  • Pre-create one format setting - Default.
  • Make it undeletable and not editable "default" format (no edit or delete buttons and no possibility to delete it via API).
  • This format setting will be used as default format setting if no format setting specified for the domain.
  • Use
  • Name
  • English (United States)
  • Culture - (select) list of cultures
  • English (United States)
  • Currency
  • USD
  • Number of digits after coma
  • 2

Beta

Payment Settings: Currency and format setting:

Extend Domains settings by "Currency and Price format" and "Country"

  • Show list of created "Currency and Price format" settings
  • Use Default by default
  • Setting "Country"
  • Show list of countries (use list of countries that is used in the forms)
  • Use United States by default

Beta

Payment Settings: Currency and format setting:

Format rules for Format setting

Display dates in the admin using default domain Format setting

Beta

Payment Settings: Currency and format setting:

Save domain currency and number format settings to the order

When creating an order - save currency and price format settings chosen for the domain purchase made from the order at the moment of purchase.

So that if an admin changes the currency and price format settings for the domain, the order will still keep those settings that were at the moment of purchase

Beta

Payment Settings: Currency and format setting:

Orders in admin list and detail view modification

Use saved currency and format settings in orders in order to display prices in order list and detail view:

Beta

Payment Settings: Currency and format setting:

Invoice System Email modification

Use saved currency and format settings in orders in order to display prices in invoice email.

Liquid changes:

  • {{this.order.items}}
  • {{item.price}} - no changes
  • {{item.TotalCost}} - no changes
  • {{item.formattedPrice}} - ADD new property. Apply price format and currency position settings saved in the order in order to retrieve formatted price string
  • {{item.formattedTotalCost}} - ADD new property. Apply price format and currency position settings saved in the order in order to retrieve formatted price string

  • use currency that is saved in the order for the following properties:
  • {{item.currency.code}} - use currency that is saved in the order
  • {{item.currency.symbol}} - use currency that is saved in the order
  • {{item.currency.digitalCode}} - use currency that is saved in the order
  • {{item.currency.name}} - use currency that is saved in the order

  • {{this.order.totalCost}} - no changes
  • {{this.order.formattedTotalCost}} - ADD new property. Apply price format and currency position settings saved in the order in order to retrieve formatted price string
  • use currency that is saved in the order for the following properties:
  • {{this.order.currency.code}}
  • {{this.order.currency.symbol}}
  • {{this.order.currency.digitalCode}}
  • {{this.order.currency.name}}

Beta

Payment Settings: Currency and format setting:

Add liquid filter | domain_number_format

Add new liquid filter:

  • Pattern:
  • {{ numberVar | domain_number_format }}
  • When applied -
  • If variable is a number - should convert number to formatted string based on current domain Currency and format setting without currency related settings
    if liquid parsing works outside of domain scope, use default domain and its settings.
  • otherwise - do not change the variable

Beta

Payment Settings: Currency and format setting:

Add liquid filter | domain_money_format

Add new liquid filter:

  • Pattern:
  • {{ numberVar | domain_money_format }}
  • When applied -
  • If variable is a number - should convert number to formatted string based on current domain Currency and format setting including all currency related settings
    if liquid parsing works outside of domain scope - use default domain and its settings.
  • otherwise- do not change the variable

Beta

Ecommerce Settings: Tax

Ecommerce -> Taxes Page

Ability to view list of taxes and perform create/edit and delete tax operations.


Columns of the list view:

  • Name
  • Tax Percentage Amount
  • Country
  • Actions

Provide ability to pre-create taxes for countries:

  • USA

http://prntscr.com/ovgi09 - clicking on the button should create set of tax codes for selected country if system has preset of taxes for that country.

Create/edit form:

  • Country (select). Options:
  • use the same list of countries that was used for Domains settings ->"Country"
  • On adding new tax - preselect the country that is attached to the main domain by default
  • Tax Code (string) (required)
  • Tax Rate (number) - (type float) number of percent. Value should be between 0 and 100 including edges.

Beta

Ecommerce Settings: Discount codes

Ecommerce -> Discount codes Page

Ability to view list of discount codes and perform create/edit and delete discount code operations.

Columns of the list view:

  • Code
  • Type
  • Amount
  • Release Date
  • Expiry Date
  • Enabled
  • Actions

Create/edit form:

  • Code (string) (required)
  • Description (string).
  • Type (select). options:
  • Fixed Amount (used by default)
  • Percentage of Order
  • Free Shipping
  • Amount (number) - (type float) discount amount. Value may represent an actual amount or percentage of the order.
  • Currency (select). options
  • use list of currencies applied to all domains of the site
  • Min Order Cost Limitation (number) - (type float).
  • Expire after x redemptions (number) - (type int). Validate values to be int and greater or equal to 0.
  • Catalogs (multi-select). Options:
  • list of ecommerce catalogs module items.
  • Release Date (datetime)
  • Expiry Date (datetime)
  • Enabled (bool) - checked by default

Beta

Ecommerce Settings: Gift vouchers

Ecommerce -> Gift Vouchers Page

Ability to view list of Gift Vouchers and perform create/edit and delete Gift Voucher operations.

Columns of the list view:

  • Name
  • Amount (show values with 3 letter currency code)
  • Balance (show values with 3 letter currency code)
  • Recipient
  • Enabled
  • Actions

Create/edit form:

Details tab:

  • Currency (select) - options:
  • use the same list of countries that were used for Domains settings -> Country
  • Name (string) (required) - unique value
  • Amount (number) - (type float). (required)
  • Balance (number) - (type float).
  • Type (select). Not selectable. Preselect value by default or based on initial value. Options:
  • Manual (default)
  • Via Shop
  • Enabled (bool) - checked by default

Recipient tab:

  • Name (string) (required)
  • Email (string) (required)
  • Message (string) (required)

Buttons:

  • Email me - sends gift voucher system email to the current logged in admin user.
  • Email Recipient - sends gift voucher system email to the recipient in the form above.

Beta

Ecommerce Settings: Gift vouchers

Ecommerce -> Gift Vouchers System Email

Add new system email

  • Name
  • Gift Voucher
  • Content
  • see acceptance criteria

Liquid scope (this):

  • RecipientName - use the data from gift voucher -> recipient record
  • RecipientAddress - use the data from gift voucher -> recipient record (Email)
  • PurchaserName - this will be the full name from the CRM record that is assigned to the order that contains gift voucher product that creates this gift voucher and triggers the system email. Leave empty if gift voucher was created manually.
  • GiftVoucherCode - use the data from gift voucher -> Details record
  • GiftVoucherAmount - use the data from gift voucher -> Details record
  • GiftVoucherCurrency - object - use currency that is related with the gift voucher country
  • code
  • symbol
  • digitalCode
  • name
  • Message - use the data from gift voucher -> recipient record
  • SiteUrl - protocol and site domain. Use the same logic as in "Secure Zone Login Details"

Beta

Ecommerce Settings: Shipping options

Ecommerce -> Shipping options Page

Ability to view list of Shipping options and perform create/edit and delete Shipping options operations.

Columns of the list view:

  • Name
  • Price (show values with 3 letter currency code)
  • Currency/Country
  • Actions

Create/edit form:

Details tab:

  • Name (string) (required)
  • Price (number) - (type float). (required)
  • Currency/Country (select) - options:
  • use pairs of country and currency that are retrieved from
  • list of currencies applied to all domains of the site
  • list of countries applied to all domains of the site
  • Type (select). Options: (required)
  • User Defined (default)
  • Tax Code (select). Options:
  • None (default)
  • list of discount codes for the selected country

Settings tab:

  • Handling Charge (number) - (type float).
  • Additional Per Item Handling Charge (number) - (type float).
  • Weight Limitations
  • Min (number) - (type float).
  • Max (number) - (type float).
  • Width Limitations
  • Min (number) - (type float).
  • Max (number) - (type float).
  • Height Limitations
  • Min (number) - (type float).
  • Max (number) - (type float).
  • Depth Limitations
  • Min (number) - (type float).
  • Max (number) - (type float).
  • Order Price Limitations
  • Min (number) - (type float).
  • Max (number) - (type float).
  • Show Shipping option to (select) - options:
  • All (default)
  • Consumer
  • Wholesaler
  • Limit Delivery to Following Countries (multi-select)
  • use the same list of all countries
  • Exclude Shipping if Purchasing from these Catalogs (multi-select)
  • future list of catalogs. Leave empty for now.

Misc

Image processor Fix

Fix imageprocessor

When:

  • upload image under the same name as one of the images in the folder via FTP or File Manager
  • DO: remove all cached versions of the image.
  • delete image from the folder via FTP or File Manager
  • DO: remove all cached versions of the image.
  • Load File Manager tab
  • DO: load cached images instead of forced image resizing via URL random param (task for JS)

Misc

Export functionality redo

Modify export flow not to open in a new tab

Bug

Bug in file manager

Bug in the new file manager when opening longer code by the tree-view in a bigger browser window.

Bug

Workflow doesn't work on Business Plan

  1. Go to client site, e.g. CLIENTSITE.com/admin/custom-workflow
  2. Workflow doesn't work

Bug

BUG: Liquid ‘capitalize’ filter

Treepl’s implementation of the Liquid capitalize filter actually does Title Case instead of the documented Capitalize function:

https://shopify.github.io/liquid/filters/capitalize/ 1

Both case changes are handy though, so since Title Case is obviously possible I’d ask that a new custom Liquid filter be created called “titlecase” which does what the currently implemented capitalize filter does, then fix the current capitalize filter to work as per the Liquid docs.

Show more less
New Feature

eCommerce part 1

Payment Settings: Currency and format settings
Taxes
Discount codes
Gift vouchers
Shipping options
  • eCommerce
New Feature

Single Account Identity Provider (SSO)

Single Account Identity Provider (SSO) via systemaccess.co for:
- FTP + Treepl admin + Treepl portal
- FTP + General Admin user
- Ability to send an invite to an already created admin user
- Ability for an admin user to have access to multiple treepl sites (on multiple DC's) with single credentials
  • Treepl Portal
  • General
  • Infrastructure
Improvement

Changes in Treepl's pricing plans/restrictions

Integration of changes in our pricing plans that were announced several weeks ago
Changes will be applied to all existing and new sites.
Pro+ plan renamed to eCommerce
eCommerce features available in eCommerce plan only
Advanced module settings for system modules available in eCommerce plan only
Payable events, items, forms available starting Pro plan (used to be an extension), together...
  • General
Improvement

Invoices for paid sites

Ability to download a properly formatted invoice receipt
  • Treepl Portal
Improvement

Remove "Title" From Blank Site Content Template

When starting from a Blank site, the default code inserted for the Content Template includes a restrictive <title> element: <!DOCTYPE html> <html> <head> <title>Treepl CMS Features for Treepl Partners & CMS Resellers</title> <title>{ this['name'] }</title> </head> <body> { pageContent } </body> </html> I'd suggest removing the <title> element altogether since the system now handles document titles automatically and in accordance with the Name or Meta Title value.
  • Pages and Templates
  • General
v 4.7 Release date: 21 Aug, 2019

Full Release Notes

Bug

Site Information incorrect “Value” column

The Value column in the Site Information Module, shows the Field Type, instead of the Field Value.

Bug

Boolean value is ON instead of TRUE

A boolean form field now returns string “true” or “false” instead of “on” (changes made in liquid formSubmissionData object and on CRM -> form submission -> submission detail page). http://prntscr.com/ovp5e4 

Bug

{{counter}} tag issue with  ‘New Liquid Engine’

Counter tag in list layouts when ‘New Liquid Engine’ beta feature is enabled now renders as intended.

Beta

Custom Columns In List View

Customizable columns for module items view.

Allows customized columns on custom and system modules list and tree views.

Create new module settings page for editing columns settings. Showing preview of columns and ability to change their order position via drag and drop.

If there are too many columns on the view - show horizontal scroll. When drag column to the right or left edge of the view - trigger auto scroll functionality in order to provide the ability to move that column out of visible columns area.

Ability to go to add, edit and delete columns. Add/Edit view consists of the following settings:

  • Title - input field - name that will be viewed as column title.
  • Property - selector of system and custom properties of the module.
  • Column Width -  input field - number of pixels that determines the column width.
  • Mobile Column Width -  input field - number of pixels the determines the column width in mobile view.
  • Hide on mobile - checkbox 

The ‘Actions’ column will always be present and will be the last column in the view.


Design:

http://prntscr.com/ovpcpq 

New List/Tree view layout for custom columns:

  • All custom columns that reflects module properties should support sorting (ASC, DESC) by clicking column header.
  • When layout contains more columns than allowed by screen width - add horizontal scroll.
  • Move preview link and action icons (duplicate, edit, delete...) to one separate ‘Actions’ column fixed to the right of the table. 
  • Allow columns resizing via dragging the edges of the column title.

Design:

http://prntscr.com/ovpd5m 

Tree View Layout:

Merge columns of two modules by their names. Merging should take equal named columns and all unique child module columns (basically columns of tree view are ALWAYS child module table columns). 
Unique Parent module columns should be skipped. 
For each parent module item on tree view show empty cell is column attached to child module only.

Example:
Module 1 has Property 1Property 2 and Name
Module 2 has Property 1Property 3 and Name

Module 1 is parent module to Module 2

Columns selected for 
Module 1 is Property 1Property 2 and Name
Columns selected for 
Module 2 is Property 1Property 3 and Name

Result view on tree view of both modules: 
Module 1 or Module 2

| Name                 | Property 1      | Property 3    |
|----------------------|-------------------|------------------|
| Module 1 item  | some value 1 |                         |
| Module 2 item  | some value 2 | some value 3 |

Pagination Changes:

1) Display current page number as input with number value between prev and next buttons http://prntscr.com/o70umf.

On change - show page that is entered in the input.

2) Duplicate pagination to the top of the table.

Lowest plan allowed is ”Pro+”

Add feature to the Admin User Roles: “Can Edit Module Items Columns Settings”

Backlog

Module settings UI change

Redesign ‘steps’ into ‘tabs’ on module settings sections.
From this:
http://prntscr.com/osng3p

To this: http://prntscr.com/ovpetu 

Backlog

File System' API Endpoint (Component Tag)

Add new component tag of type:"api", source:"File System"

Pattern:

{% component type:"api", resource:"File System", folder:"[[folderUrl]]", collectionVariable:"[[variableName]]" %}

  • type:"api" system param
  • resource: ”File System”
  • collectionVariable: name of Liquid variable for object data.
  • folder (not required param): folder URL to retrieve files from (default value is "/" for root directory). 

Examples

{% component type:"api", resource:"File System", folder:"/images/galleries/gallery 001", collectionVariable:"myVar" %}

item context contains:

  • url (file URL)

This component does not render any layout. If no collectionVariable specified - just skip the component processing.

Added to Component Toolbox:

1) Add new toolbox group:

"Liquid Data"

  • "File System"

provides ability to build component type:"api", resource:"File System" 

2) For folder selection use folder picker:

  • clicking on folder in picker modifies component code
  • clicking on icon next to folder modifies code and copies it to clipboard

Lowest plan allowed is “Pro”

Add feature to the Admin User Roles:

Liquid Data

  • File System

Backlog

Analytics dashboard settings

Remove condition that requires ’TrackingID’ for displaying analytics dashboard page. 

Only ‘ViewId’ is required
(This change allows you to add Google js snippet yourself using desired custom options but still having an ability to see analytics in the dashboard)

Backlog

Component type module_tag_list

Add new component tag of type:"module_tag_list"

Pattern:

{% component type:"module_tag_list", object:"[[object]]", module:"[[moduleIdentifier]]", parentItemId:"[[parentItemId]]", limit:"[[limit]]", collectionVariable:"", layout:"", sortBy:"", sortOrder:"" %}

  • module (required param) - moduleName or moduleId.
  • parentItemId (not required param) - id of the module parent group to retrieve tagged items from
  • object (not required param) - item|collection (default is collection)
  • limit (not required param) - max number of tags to be rendered (default value is ALL)
  • collectionVariable (not required param) - liquid data variable
  • layout (not required param) - path to FTP file that will contain layout content to be parsed. 
    If empty string - does not render anything.
    If not specified at all - render default virtual layout (see below).
  • sortBy (not required param):
    - Name (default)
    - ItemsCount 
  • sortOrder (not required param):
    - ASC (default)
    - DESC

item context contains:

  • Name
  • Url
    Pattern:
    [[parentItemUrl]]?prop_ModuleId=[[moduleId]]&prop_ParentId=[[parentItemId]]&prop_ItemTags=[[tagName (UrlEncoded) ]]

    Example, using the following component tag with ‘parentItemId’:
    {% component type:"module_tag_list", module:"Blog Post", parentItemId:"1234" %}
    Where 1234 - is ID of the Blog "My Blog"
    URL output is:
    /my-blog?prop_ModuleId=1534&prop_ParentId=1234&prop_ItemTags=My%20Tag

    Example, using the following component tag with no ‘parentItemId’:
    {% component type:"module_tag_list", module:"Blog Post" %}
    URL output is:
    ?prop_ModuleId=1534&prop_ItemTags=My%20Tag
  • ItemsCount - number of module items tagged by this tag

Default virtual layout:

<ul>

    {% for item in this.items %}

        <li> 

            <a href="{{item.url}}" title="{{item.name}}">{{item.name}} <span>({{item.itemsCount}})</span></a>

        </li>

    {% endfor %}

</ul>

VIRTUAL LAYOUT RETURNS ITEMS THAT HAVE itemsCount > 0  ONLY

Backlog

Component type module_category_list

Add new component tag component type:"module_category_list"

Pattern:

{% component type:"module_category_list", object:"[[object]]", module:"[[moduleIdentifier]]", parentItemId:"[[parentItemId]]", limit:"[[limit]]", collectionVariable:"", layout:"", sortBy:"", sortOrder:""  %}

  • module (required param) - moduleName or moduleId.
  • parentItemId (not required param) - id of the module parent group to retrieve categorized items from
  • object (not required param) - item|collection (default is collection)
  • limit (not required param) - max number of tags to be rendered (default value is ALL)
  • collectionVariable (not required param) - liquid data variable
  • layout (not required param) - path to FTP file that will contain layout content to be parsed. 
    If empty string - does not render anything.
    If not specified at all - render default virtual layout (see below).
  • sortBy (not required param):
    - Name (default)
    - ItemsCount 
  • sortOrder (not required param):
    - ASC (default)
    - DESC

item context contains:

  • Name
  • Url
    Pattern:
    [[parentItemUrl]]?prop_ModuleId=[[moduleId]]&prop_ParentId=[[parentItemId]]&prop_ItemCategories=[[categoryName (UrlEncoded) ]]

    Example, using the following component tag with ‘parentItemId’:
    {% component type:"module_category_list", module:"Blog Post", parentItemId:"1234" %}
    Where 1234 - is ID of the Blog "My Blog"
    URL output is:
    /my-blog?prop_ModuleId=1534&prop_ParentId=1234&prop_ItemCategories=My%20Tag

    Example, using the following component tag with no ‘parentItemId’:
    {% component type:"module_category_list", module:"Blog Post" %}
    URL output is:
    ?prop_ModuleId=1534&prop_ItemCategories=My%20Tag
  • ItemsCount - number of module items categorized by this category

Default virtual layout:

<ul>

    {% for item in this.items %}

        <li> 

            <a href="{{item.url}}" title="{{item.name}}">{{item.name}} <span>({{item.itemsCount}})</span></a>

        </li>

    {% endfor %}

</ul>

VIRTUAL LAYOUT RETURNS ITEMS THAT HAVE itemsCount > 0  ONLY

Backlog

Component type module_archive

Add new component tag component type:"module_archive"

Pattern:

{% component type:"module_archive", object:"[[object]]", module:"[[moduleIdentifier]]", parentItemId:"[[parentItemId]]", numberOfMonth:"[[numberOfMonth]]", collectionVariable:"", layout:"", sortBy:"", sortOrder:""  %}

  • module (required param) - moduleName or moduleId.
  • parentItemId (not required param) - id of the module parent group to retrieve categorized items from
  • object (not required param) - item|collection (default is collection)
  • numberOfMonth (not required param) - max number of months into the past to be rendered (default value is Eternity)
  • collectionVariable (not required param) - liquid data variable
  • layout (not required param) - path to FTP file that will contain layout content to be parsed. 
    If empty string - does not render anything.
    If not specified at all - render default virtual layout (see below).
  • sortBy (not required param):
    - Date (default)
  • sortOrder (not required param):
    - ASC (default)
    - DESC

Item context contains:

years (array)

  • Name - year (Example: 2018)
  • Url
    Pattern:
    [[parentItemUrl]]?prop_ModuleId=[[moduleId]]&prop_ParentId=[[parentItemId]]&prop_ReleaseDate_Min=[[periodStartDate]]&prop_ReleaseDate_Max=[[periodEndDate]]

    Example, with parentItemID:
    {% component type:"module_archive", module:"Blog Post", parentItemId:"1234" %}
    Where 1234 - is ID of the Blog "My Blog"
    URL (for period of 2018):
    /my-blog?prop_ModuleId=1534&prop_ParentId=1234&prop_ReleaseDate_Min=2018-01-01&prop_ReleaseDate_Max=2018-12-31

    Example, without parentItemID:
    {% component type:"module_archive", module:"Blog Post" %}
    URL (for period of 2018):
    ?prop_ModuleId=1534&prop_ReleaseDate_Min=2018-01-01&prop_ReleaseDate_Max=2018-12-31
  • ItemsCount - number of module items in the year
  • Months (array)
    - Name - month (Example: August)
    - Url
    Pattern:
    [[parentItemUrl]]?prop_ModuleId=[[moduleId]]&prop_ParentId=[[parentItemId]]&prop_ReleaseDate_Min=[[periodStartDate]]&prop_ReleaseDate_Max=[[periodEndDate]]

    Example, with parentItemId:
    {% component type:"module_archive", module:"Blog Post", parentItemId:"1234" %}
    Where 1234 - is ID of the Blog "My Blog"
    URL (for period of August ):
    /my-blog?prop_ModuleId=1534&prop_ParentId=1234&prop_ReleaseDate_Min=2018-08-01&prop_ReleaseDate_Max=2018-08-31

    Example, without parentItemId:
    {% component type:"module_archive", module:"Blog Post" %}
    URL (for period of August ):
    ?prop_ModuleId=1534&prop_ReleaseDate_Min=2018-08-01&prop_ReleaseDate_Max=2018-08-31

    - ItemsCount - number of module items in the month

Default virtual layout:

<ul>
    {% for yearData in this.years %}

            {% for month in yearData.months %}

                <li> 

                    <a href="{{month.url}}" title="{{yearData.name}}-{{month.name}}">{{month.name}} {{yearData.name}} ({{month.itemsCount}})</a>

                </li>

            {% endfor %}

    {% endfor %}

</ul>

MODULE RETURNS ITEMS THAT HAVE itemsCount > 0  ONLY

Backlog

Component type module searchScope extending

Component type module extended by param that allows using FULL search capabilities WITHOUT actual search via GET params (search form). Realization is described below:

1) Extend component type module with new param:

  • searchScope: ""

2) Parse content of search scope as JSON. If any exception occured while parsing - ignore this param.

3) Use retrieved object just like GET parameters from a search.

Priorities when several params and/or search via GET params occured:

filterBy, FilterValue pair < searchScope < GET params if searching THIS module

Example:

Both options described below should show the same result

  • Option 1:
    URL
    /blog_1?prop_ModuleId=1534&prop_ReleaseDate_Min=2018-07-01&prop_ReleaseDate_Max=2018-07-31&prop_ParentId=1842&prop_ItemTags=tag1&prop_ItemTags=tag2&page=2

    Component  on the /blog_1 page
    {% component type:"module", source: "Blog Post", layout:"List", isSearchResult: "true", filterBy:"id", filterValue:"123" %}

  • Option 2
    URL
    /blog_1

    Component on the /blog_1 page
    {% component type:"module", source: "Blog Post", layout:"List", searchScope: '{"prop_ReleaseDate_Min":"2018-07-01","prop_ReleaseDate_Max":"2018-07-31","prop_ParentId":"1842","prop_ItemTags":["tag1","tag2"],"page":"2"}', filterBy:"id", filterValue:"123" %}

    OR

    {% capture searchScopeVar %}{"prop_ReleaseDate_Min":"2018-07-01","prop_ReleaseDate_Max":"2018-07-31","prop_ParentId":"1842","prop_ItemTags":["tag1","tag2"],"page":"2"}{% endcapture %}

    {% component type:"module", source: "Blog Post", layout:"List", searchScope: "{{searchScopeVar}}", filterBy:"id", filterValue:"123" %}
Show more less
Improvement

Custom Columns In List View

Give the user the ability to setup how list view is shown in the different modules/pages etc. to match the need of the user.

See an example in this video

  • UI/UX
  • General
Improvement

File System' API Endpoint (Component Tag) That Can List Files And Folders From The File Manager

This, for example, could allow us to build gallery apps from a directory of images, list downloadable files from organised in directories, and other file system related functions. Similar to BCs File System API here: https://docs.worldsecuresystems.com/reference/rest-apis/file-system/get-folder-content.html

  • File Manager
  • API
v 4.6 Release date: 31 Jul, 2019

Full Release Notes

Backlog

File Manager Improvements

Design - http://prntscr.com/onhp35

Added and improved functionality:

  1. Upgrade to angular 8
  2. Tooltips with full file names in the left list section http://prntscr.com/onhv20
  3. Separate scroll for main and tree-view section http://prntscr.com/onhyz7
  4. Mouse right click for context menu: http://prntscr.com/oe4vex
  5. Improved and reworked tree view http://prntscr.com/onhwwm
  6. Manage files in the tree view http://prntscr.com/onhu7e
  7. Download for files and folders http://prntscr.com/onhw3p
  8. Duplicate for files and folders http://prntscr.com/onhwhm
  9. Renaming for files and folders http://prntscr.com/onhwot
  10. Quick edit from tree view http://prntscr.com/njyf77
  11. New Mobile layout http://prntscr.com/onhy3y

Bug

Random param not working when filtering by tag/category

Random attribute not working for Custom Modules when filtering by tags/categories. eg:

{% component source: "My Module", layout: "List", filterBy: "ItemTags", filterValue: "Header", limit: "1", random: "true", type: "module" %}

Bug

Incorrect params rendering

Under the new Liquid rendering engine (beta feature), was not able to render custom params passed to a Snippet.

The 'this' object only seems to reference the parent page/item and not the Snippet itself.

Example;

{% component type: "snippet", alias: "testsnippet", foo: "bar" %}

Using {{this.Params.foo}} to render the param did not work.

Show more less
Improvement

Multiple Improvements In File Manager

Design: http://prntscr.com/onhp35
Added and improved functionality:
1. Tooltips with full file names in the sidebar: http://prntscr.com/onhv20
2. Separate scroll for main and tree-view section: http://prntscr.com/onhyz7 3. Edit file (edit and quick edit): http://prntscr.com/njyf77
4. Download of files and folders: http://prntscr.com/onhw3p
5. Right click menu: http://prntscr.com/oe4vex
6. Files in tree view and ability to manage them: http://prntscr.com/onhu7e
7....
  • File Manager
Improvement

Treepl Portal: Data Center Assigned To Website

Ability to see Data Center assigned to website
  • Treepl Portal
v 4.5 Release date: 10 Jul, 2019

Full Release Notes

Beta

Features moved out of Beta

These features work consistently now and have been implemented into the CMS:

  • Advanced Search
  • Date Time Management

NOTE: Any feature flag will go through this flow:

  • Round #1 (sprint release) – released in beta features (disabled by default so it won’t crash anything on the live sites.
    Partners are able to see if it operates properly on those sites and report any issues for us to fix.
    Partner is able to turn off the feature himself instantly.
  • Round #2 (1 or 2 sprints after round #1) – feature flag goes to internal section and set to true (checked).
    Partners are not able to uncheck it but can send a support ticket in case of some issues and we will disable it from our end and fix it
  • Round #3 (1 or 2 sprints after round #2) – feature flag will be deleted.
    Old logic will be removed from the code.
    The result is that feature adopts the new behavior on a permanent basis.

Beta

New Liquid engine &nICE v2.0

New Liquid engine & nICE 2.0


+ nICE v2.0:

The ability to use style options like bold, italic, colors, etc in nICE editor interface.

New styles interface is available for all content except for module item properties that don’t have a field type of ‘multiline’ or ‘WYSIWYG’ (ie: date/time fields, single line string fields, etc).

NOTE: This feature requires valid HTML for proper nICE 2.0 operation in edit mode.


+ New Liquid engine:

IMPORTANT: After enabling this feature, please check all site's custom liquid and JS implementations.
In cases where you might output the collection variables as JSON (like ajax search result) the new Liquid engine renders the JSON object with camelCased property names.
Example:

The output will be different for old and new liquid engine:
http://prntscr.com/oh7ytj

Also, if you are using the {{params}} variable make sure you are using it via {{this.params}}. The names of the custom params will also be in camelCase http://prntscr.com/oh82n5

Forum discussion on the topic of params: https://forum.treepl.co/t/new-liquid-engine-changes-to-referencing-parameters-in-custom-layouts/517

This feature flag will be available in beta for 2 sprints and then also will be auto-enabled for all sites.

Beta

Multi-level Categories

Advanced multi-level categories

The feature allows creating multi-level categories.


+ New ‘ItemCategoryIdList’ property added to Liquid scope:

New property stores comma separated list of category IDs (existing category property stores list of category Names)

Existing: {{this['ItemCategories']}}

New: {{this['ItemCategoryIdList']}}


+ Convert Categories to nested categories

On appstart if categories wasn't previously converted, for each category:

  • Get category name
  • Split it by "/"
  • Create new nested categories from split values


+ New interface when creating categories/subcategories

Design - http://prntscr.com/oh6ht2

Categories now sorted in the tree structure.

By this button: http://prntscr.com/nod8lh the user is able to create a new category.

The user is also able to create/remove/rename the category/subcategory clicking on this button: http://prntscr.com/nodeyz .

User is able to change the name of the category/subcategory: http://prntscr.com/noddvd .

If the user created/changed the name of the category/subcategory and clicks anywhere but not on this button: http://prntscr.com/nodg1b changes should not be saved.


+ Ability to create/edit categories using the new interface when within a module item

Design - http://prntscr.com/oh6i7v

If user wants to create/edit category tree by clicking here: http://prntscr.com/npvq9l the flow is the same as on the settings page.

If user wants to assign the category to the module there should be the dropdown: http://prntscr.com/npvqod where the level number will be indicated with (----).


+ Default Parent category setting

For modules where you have access to its properties ("Edit Module">"Item Properties">"Default Properties") There will be the ability to specify the parent category to be used when creating/editing module items.

The default selection is the Root category level (value -1). if set to any category, than only the subcategories of the set category will be available to the module items (in both the Category field and the pop-out side panel as a tree of categories when clicking ‘Add new category button’.


+ Change import/export format for categories.

Old format example:

  • Cat 1,Cat 2,SubCat 1

New format example:

  • /Cat 1;/Cat 2;/Cat 2/SubCat 1;

Change method type from "Get" to "Post"


+ Change logic for category filtration:

  • if filterBy is ‘itemCategories’
  • Read filterValue as fullName
  • find category by fullName
  • find items by ItemCategoryIdList property of the module using retrieved category id.
  • if searching by ItemCategory - apply same logic as for filterBy


+ Addition of new component tag of type "categories"

Component pattern:

{% component type:"categories", parentCategory:"[[parentCategoryId]]", levelsDeep:"[[numberOfLevelsToRender]]", collectionVariable:"[[variableName]]" %}

  • parentCategory (not required param) - id of the category to start selecting subcategories from.
  • Default value for parentCategory = -1. Means start selecting categories from root.
  • levelsDeep (not required param) - number of levels in-depth starting from parentCategory that need to be retrieved.
  • Default value for levelsDeep = -1. Means render all levels in-depth.

Example:

{% component type:"categories", parentCategory:"111", levelsDeep:"2", collectionVariable:"myVar" %}

Renders virtual layout by pattern below:

<option value="[[itemContext.fullName]]">[["----" x (itemContext.level-1)]][[itemContext.name]]</option>

Liquid output example (of “myvar”):

{

"items": [

{

"NestingLevel": 2,

"FullName": "Cat 2/SubCat 1",

"Id": 112,

"Name": "----SubCat 1"

},{

"NestingLevel": 2,

"FullName": "Cat 2/SubCat 2",

"Id": 113,

"Name": "----SubCat 2"

}

]

}

NOTES: On generation of ‘search module form’ modification shown in ACCEPTANCE CRITERIA - see further below.

Replicate the same to ‘create module form’

Replicate the same to ‘edit module form’


+ Component Toolbox shows category tree

In the toolbox (for custom module, blogs, events, etc) when selecting filterBy ‘itemCategories’ - display options as flat tree in filterValue field in the format described below:

  • <option> label: "Category" or "---- Sub Category" or "-------- Sub Sub Category" depending on the level of the category (the deepest level has the most "----" prefix in front of the category name).
  • <option> value: "/category/sub category"

Backlog

New Email Accounts

Add Email accounts tab on live site edit page (in portal.treepl.co)

Design - http://prntscr.com/oh730f

Flow:

  • Check if live site domain exists in Treepl’s Open SRS account.
  • If exist – show email CRUD layout
  • If not – try create domain in the Open SRC account
  • On success - show email CRUD layout
  • On fail – show error popup message and try again button.

Email CRUD layout provides ability to:

  • Create email
  • Create domain alias
  • Create email alias
  • View list of email accounts and domain aliases
  • Shows storage of the particular email account
  • Delete email accounts
  • Delete domain alias
  • Delete email alias
  • Reset email password

Backlog

Contacts Import/Export flow

Import/Export flow.

Fields:
all contact fields:

  • Id (ignore on import)
  • First Name
  • Last Name
  • Email
  • Address
  • City
  • State
  • ZipCode
  • Country
  • Site
  • Phone
  • Status
  • Notes
  • Date Created
  • Date Updated (ignore on import)
  • Secure Zone
  • Secure Zone Expiration Date
    Example:
    http://prntscr.com/o1wy67
    if there is no date in Secure Zone Expiration Date but there is secure zone name in Secure Zone field:
    - on create CRM contact; set 9999-Dec-31
    - on edit CRM contact; do not edit existing expiration date

Notes:

Only ‘Secure Zone’ and ’Secure Zone Expiration Date’ cells will be imported for those additional secure zone rows added under a contact’s record (with no email address present). All other cells will be ignored in these rows.

Backlog

Admin Roles - Import Contacts

Extend restrictions list for admin roles.
New option under ‘Contacts’:

  • Can Import Contacts

If ’Can Import Contacts’ = false - disallow importing Contacts action for Admins with such roles.

Existing configured roles have this disabled by default.

Backlog

Multiple Workflows enabled on Business plan

Unlock Workflow notification Create / Read / Update / Delete operations for Business plan to enable multiple workflow capability. Now restricted only to having different Workflow Emails for those notification.

(Multiple Workflow Emails remain only on Pro/Pro+ plans)

Backlog

Ecommerce menu items

Set all sub items in Ecommerce menu as inactive:

eCommerce

  • Products
  • Catalogs
  • Discount codes
  • Gift vouchers
  • Taxes
  • Shipping options

Backlog

Data Source Property - Default Empty Option

Original issue:
https://forum.treepl.co/t/data-source-property-default-empty-option/473

For Custom Module Data Source fields, it was not possible to be set back to null/empty after a selection was assigned.

Now an empty ‘Please select’ option is available.

Backlog

Re-index module button

Added ability to re-index only one particular module http://prntscr.com/oh898g

Useful for selectively re-indexing specific modules only or to resolve possible issues with specific module search.

Bug

Force disabling from search engines for all trial sites

Force addition of <meta name="robots" content="noindex, nofollow"> meta tag (regardless of page property "Disable from search engines") for any page request under subdomain of *.treepl.co or *.trialsite.co

Bug

BUG: SEO Priority Default Setting

Original bug summary:

https://treepl.co/public-backlog-state/request/bug-seo-priority-default-setting

Custom Modules default SEO Priority is only visually applied in admin view and does not actually apply until SEO tab is saved.

Solution:

Apply the Default Priority field value to any newly created item (http://prntscr.com/nvztgl ):

- Front-end form

  • always

- Admin add item form

  • always

- Import process

  • if priority column wasn't specified or cell is empty

Bug

BUG: {{this.member}} data does not output to system Invoice email

Original bug summary:

https://treepl.co/public-backlog-state/request/bug-raw-this-member-endraw-data-does-not-output-to-system-invoice-email

{{this.member}} data does not output to the system Invoice email layout.

Bug

Custom module - Content Template changed upon front-end update

Steps to reproduce:

  1. Create form for updating item from front-end
  2. Go to custom module settings and change default content template http://prntscr.com/o4qaoz
  3. Go to item and set any template (not default and not the one that is selected as default in module settings in step 2).
  4. Go to front-end and click button Update

Expected:

  • Template should not be changed

Actual:

Bug

Advanced search - doesn't search in blog

Fixed the issue that reindex process wasn’t indexing the items that where located in “folder/group” items (like posts in blogs or pages under some page folders).

Bug

BUG: Spaces generated in form code

Original bug summary:

https://forum.treepl.co/t/bug-spaces-generated-in-form-code/474

Generated form code for Event and Payment fields had incorrect spaces in the HTML syntax.

Bug

Update item from front-end would clear info when update

Steps to reproduce:

  1. Create module and item
  2. Generate update item form
  3. Remove from the html code any fields except of itemId
  4. Place form to the page
  5. Submit form from front end

Expected

  • All fields sending via the form updates the item properties. All properties that AREN’T added to the form should NOT be updated

Actual

  • All properties that AREN’T added to the form ERASES the content of those item’s properties.
Show more less
New Feature

New Email Accounts

Ability to create new email accounts for every hosted/activated site from Treepl Portal. Currently, you can request email accounts to be created by emailing to support@treepl.co
  • Treepl Portal
New Feature

nICE v2.0: Style Options

The ability to use style options like bold, italic, colors, etc. And have a full WYSIWYG style popup/editor interface.

  • nICE v2.0
Improvement

BONUS: Advanced Multi-level Categories

Ability to create and easilty manage global multi-level categories.
Currently available as one of the "Beta Features" and needs to be enabled manually on every Treepl site.
  • Admin Panel
  • General
Improvement

Contacts Import

The ability to import/export CRM contacts. For example for users of secure zones that should be imported from BC

  • CRM
  • Treepl Portal
Bugfix

BUG: {{this.member}} data does not output to system Invoice email

{{this.member}}data does not output to the system Invoice email layout.
It works on the system Workflow email but not the Invoice....
  • New
  • Bugs
Bugfix

BUG: SEO Priority Default Setting

In Custom Modules, when the SEO Priority default is set (under step 2. Item Properties), it is visually applied in admin view for all existing and new items but doesn’t actually apply to the item (not reflected in sitemap or in Liquid...

  • New
  • Bugs
Bugfix

BUG: Spaces Generated In Form Code

When adding Event and Payment fields to a Form, the generated HTML code has incorrect spaces forming.

space-generated-code.png
  • New
  • Bugs
v 4.4 Release date: 19 Jun, 2019

Full Release Notes

Beta

Implementation of previous beta items

  • Advanced Module Import/Export
  • Improved module search

Features above work constantly now and have been implemented.

Beta

Date and time fields

Date Time Management:

Allows choosing time in date fields on custom and system modules.

Backlog

Set time on add/edit module items

1) Provide ability to set time on date properties in the admin.

Fields are:

  • system fields
  • Release Date
  • Expiration Date
  • Event Start Date
  • Event End Date
  • custom fields
  • any field with type = "Date Time"

2) Set default time for the date fields above if time not set - use 00:00:00 as default time when saving any of datetime properties above.

Backlog

Save time on import/export items

Use time from the date fields in the excel columns to set date time in the timezone of the site.

Fields are:

  • system fields
  • Release Date
  • Expiration Date
  • Event Start Date
  • Event End Date
  • custom fields
  • any field with type = "Date Time"

If not set - use 00:00:00 as default time.

Backlog

Save time on create/update item (user submitted)

1) Save selected time when creating/updating module item via user submitted items.


2) Change generated input form (via toolbox) from date to datetime-local input

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime-local

If not set to the datetime field - use 00:00:00 as default time.

Backlog

Event calendar redo for date time

Modify calendar JS to use time part of the event start and event end date instead of relying on forcing 00:00:00 to the start date and 23:59:59 to the end date.

Backlog

Liquid output for displaying timezone

Add new property to request object:

"timezone" :

{

    "label" : "string",

    "offset" : int

}

Where label is a string value of the timezone name and offset is the difference in hours between UTC and current timezone

Example Output:
"timezone" :
{

    "label" : "(UTC-06:00) Central Time (US & Canada)",

    "offset" : -6

}

Example Liquid Usage:

{{request.timezone.offset}}

Would give value: -6

Backlog

Duplicating of existing module

Duplicate module with:

  • settings
  • default properties
  • custom properties
  • layouts

Allow selecting new name and url when clicking duplicate button.

Duplicate button located on Module Settings tab.

http://prntscr.com/o3wjp2

Plan restriction for duplicate Custom Module: Pro+

Backlog

WYSIWYG and ACE editor for form autoresponder with switcher

Add WYSIWYG and ACE editor options to the Form -> Settings -> Autoresponder body.

System Flow:

When user saves Settings - last selected editor should be saved as well.

When user comes to the form setting page - last chosen editor should be applied to the Body field.

If no editor was saved for the Form setting section - ACE editor should be chosen by default.

Chosen editor should be saved to the particular form, not for all forms in general.


When user clicks save the whole Settings section:

  • If WYSIWYG editor chosen AND previously was chosen ACE - show confirm message: Switching to WYSIWYG may corrupt some of your data. Confirm?
    - if clicked OK - continue saving process.
    - if clicked cancel - reject saving process.

Bug

(HOTFIX) Calendar toolbox builder - default options depended in Advanced Search flag

If Advanced search feature flag is enabled:

  • All - value = "0"
  • Ungrouped - value = "-1"

Old logic (if flag is off) :

  • All - value = "-1"
  • Ungrouped - value = "[[hiddenRootItemID]]"

http://prntscr.com/nux3hw

Bug

(HOTFIX) Calendar for Advanced search feature flag beta param

Modify calendar js and include file to use beta feature flag param.

Set param to 1 if Advanced search feature flag is on.

Bug

(HOTFIX) Add Image Bug (not adding actual uploaded image path)

When adding an image to an image field using the image manager it would add an incorrect image reference.

Bug

URL Redirect - when using .html

Fix URL redirect to recognize such url’s ("/myurl.html" and "/myurl") as different urls.

The fix allows creating redirect like

"/myurl.html" => "/myurl"

Bug

BUGS: User-Submitted Custom Module Items

BUG 1:
Not sure that user-submitted CM items are honouring site timezone for release date and expiry date IN THE WEB FORM RESPONSE - actual dates in the admin and when later rendering on site are correct.
(I’m testing with a Sydney timezone set)
Release date is always different.
Expiry is different when the date is set in the Create Item form, but not when ‘number of days till expiry’ is used or when left as default/no date set.

BUG 2:
User-submitted items do not honour the expiry date ‘number of days’ value set in the modules default properties.

BUG 3:
Expiry date fields are generated in the Create/Update Item forms even if expiry date is disabled from the CM default properties. (although they are removed if turned off from the Settings > Site User Permissions - but I’d think it should work the same in both cases?)

BUG 4:
Expiration Date input in the Create/Update Item forms is added as a type=“text” input - suggest changing to a type=“date” (as per custom properties dateTime fields)"

Show more less
New Feature

Duplicate Existing Custom Module

The ability to duplicate existing custom module.
Extended feature could be the ability to export settings/layouts etc. for Custom Module and import it in to another site.
Available in Pro+ plan
  • Custom Modules
New Feature

Release Time

Release *time* for blog posts, custom module items, pages etc. So instead of just a release date, also have the ability to choose a specific time the content is released.

  • Pages and Templates
  • Custom Modules
  • General
New Feature

Webform Autoresponders WYSIWYG

WYSIWYG editor so that customers can update the content in autoresponders.

  • General
  • WYSIWYG Editor
Bugfix

BUGS: User-Submitted Custom Module Items

BUG 1:
Not sure that user-submitted CM items are honouring site timezone for release date and expiry date IN THE WEB FORM RESPONSE - actual dates in the admin and when later rendering on site are correct.
(I’m testing with a Sydney timezone set)
Release date is always different.
Expiry is different when the date is set in the Create...
  • Bugs
v 4.3 Release date: 29 May, 2019

Full Release Notes

Backlog

Site speed increase

Performed CMS code optimization that slightly increase working speed of site pages (up to 15%).

Backlog

Liquid Context Rendering

New liquid object of {{LiquidContext}} to output all the available liquid for the current layout.

eg:

{% assign myCustomVar = "some value" %}

{{liquidContext}}

OUTPUT:

{

"this" :

{

"Name": "value",

"Description": "value"

...

},

"request" :

{

"request_url": {...},

"currentmember": {...}

...

},

"myCustomVar" : "some value"

}

Backlog

URL Redirects Import/Export

Ability to Import/Export URL redirects using an .xlsx file.

Backlog

Global Variables (Site Information) Builder

The ability to have a "Site Setting" App, where it is possible to add settings for the client that one could then feed and use throughout the entire site. It could be things like logo, phone, email, address etc.

With the ability to have the option of setting the liquid names/aliases so the tags are customisable. So instead of having for example something like {{siteInformation.companyContacts.webAddress}} one could specify an alias like {{si.cc.web}}

http://prntscr.com/nuymj4

Backlog

Toolbox -> Global variables (Site Information)

Add ability to get Site Information tags via the toolbox.

Toolbox options:

  • Group dropdown
  • Property dropdown (shows only when group is selected)
    Two liquid tags then shown for selected property for full alias and short alias.

Backlog

Secure Zone Subscriptions + Expiry dates

Added 2 system fields to the form builder relating to Secure Zones:

  • Secure Zone Expiry date
  • Secure Zone Expiry duration

Creating the input fields:

<input type="date" name="SZ_ExpiryDate">

<input type="number" name="SZ_ExpireAfterDays">:

User is not able to save the form with two chosen options.

If both options are present in the form the Expiry Date field will have priority.

Backlog

Secure Zone Expiration Settings

Create a new option on the Secure Zone Page:

  • Expiration option
    • Not specified (could be set from the form);
      this option is selected by default.
      If selected - allow applying date chosen on the form.
      If no value sent with the form - apply 31-Dec-9999.
  • Custom date;
    • if selected shows additional field type date.
      Apply to the form submission regardless of the Secure Zone Expiration field selected on the form.
  • Number of Days.
    • if selected shows additional number field.
      Apply to the form submission regardless of the Secure Zone Expiration field selected on the form.

Backlog

Add .kml, .kmz extension to allowed extension list

Add allowed file extensions:

  • .kml (application/vnd.google-earth.kml+xml)
  • .kmz (application/vnd.google-earth.kmz)

Backlog

Categorized rendering of events in the calendar.

Now using the component toolbox you can generate the calendar include widget that will render calendar of events by category.

Backlog

Import/Export of the detail layout

Now you can specify detail layout id in import and export file for module items.

Backlog

Data Center displaying in the portal.

Fixed the displaying of the data center in the partner portal. Partner should be able to see the actual information of which data center the website is located.

Backlog

Module lists in Admin to list by release date

Item lists in admin where release date is relevant now can be sorted by the release date column header.

Beta

Advanced search feature

Advanced search added to beta.

This feature uses new module index that allows retrieving searched module items in module search faster.

Current feature impacts:

  • Module Search load speed will be highly increased.
  • Filter by Event fields (such as start date end date price etc) will be highly increased.
  • Filter by url will be highly increased.
  • Added/edited module items via admin, frontent form or import functionality will be added to the index instantly (note – item may not be added to the index if reindex function is in process).
  • Events on the calendar will be loaded faster.

ATTENTION: all features under beta will be released one or two sprints after their released sprint. Some of them may change the logic already implemented (by way of improvement). So check if these features impact your site before the full feature release.

Beta

(HOTFIX) Calendar toolbox builder - default options logic change (when BETA Advanced Search enabled)

If Advanced Search BETA feature is enabled:

Toolbox -> Event -> Calendar generation will be changed:

  • Option “All“ will generate value = "0"
  • Option “Ungrouped“ will generate value = "-1"

Old logic (if flag is off) :

  • Option “All“ will generate value = "-1"
  • Option “Ungrouped“ will generate value = "[[systemRootItemID]]"

System will support both legacy version of the calendar and new version of the calendar.

Beta

Remove “Disable from site search” influence on MODULE specific search

Beta setting: Improved module search

Removes the effect of "Disable from site search" property for module specific searches.

Site search will not be affected by enabling this feature.

"Disable from site search" property should only be used for Site Search.

Bug

Time with calendar - on IOS

On iPhone if site has timezone set to “–GMT” - events were displayed one day back on certain time set on users device.

http://prntscr.com/nuvu5w

http://prntscr.com/nuvuhx

Bug

Form - Options in reverse order

Form fields that have options (ie: checkboxes, radios, dropdowns...) would have those options listed in reverse order in the generated layout

http://prntscr.com/nu9kbr

Bug

Admin - List View Pagination

When updating a custom module item on page 20 for example it jumps back to page 1. Which is frustrating if wanting to update multiple items on page 20.

Bug

Suspend Site text truncated

Descriptive text for Site Suspension options is truncated.

http://prntscr.com/nmv3vr

Bug

Bug with liquid

Module component tags configured with pagination would show total items count as the value in the ‘limit’ parameter.

Should shown total items count.

As a result generated pagination shows incorrect page numbers.

Bug

Event item showing on calendar before release date

Event item with release date in the future incorrectly shown on the calendar when it should not show at all until release date reached.

http://prntscr.com/nuw0ca

Show more less
Improvement

URL Redirects Import

Ability to import URL redirects using a .csv file.
Including PDF’s, media items, images, urls ending with a forward slash “/” and unusual urls that include special characters like &, =, $ or .aspx, .php etc. Ability to create wildcard redirects
  • SEO
  • General
New Feature

Global Variables Builder

The ability to have a "Site Setting" App, where it is possible to add settings for the client that one could then feed and use throughout the entire site. It could be things like logo, phone, email, address etc.

With the ability to have the option of setting the liquid names/aliases so the tags are customisable. So instead of...
  • Admin Panel
Improvement

BONUS: Form Fields Sorting

Sorting of form fields when making a form is reversed in the final layout.

form-sorting-reversed.jpg
  • Forms
Improvement

Liquid Context Rendering

The ability to output all available liquid on the current page.
The BC equivalent would be {{this|json}}

...
  • Liquid
v 4.2 Release date: 08 May, 2019

Full Release Notes

Backlog

Ability for partners to block the admin access and pause the websites for clients which are not paying.

If a partner chooses the soft option:

  • There’ll be a banner placed on the home page where the explanation of the issue can be described. The visitor of the website can confirm it and the banner will disappear. Then the visitor can continue browsing the website;
  • Clients can't access the admin dashboard using their credentials and will get the message with the issue

If a partner chooses the hard option:

  • The website is blocked and will not display. Every page will display the block-page with the description of the issue.
  • Clients can't access the admin dashboard using their credentials and get the message with the issue

Backlog

Ability to add multiple domain names to a website and point to different landing pages.

If the home page isn't set at all, there should be a customisable system page displayed.

‘Settings’ > ‘System Pages’ > “missing-home-page”


Ability for the user to set up the default pages in the Domains list section via the admin dashboard.

  • If the page option is not set for any domain the default page should be used.
  • If the default page option is not set on the default page, there should be "Not Set" status.

If the visitor enters on the custom domain of the current website;

  • If the page for the domain is set the system displays the page as the landing page;
  • If the page for the domain is not set the system shows the page of the default domain;
  • If the page is not set on the default domain the system shows the system page.

Backlog

Update Liquid To Include Date & Time Filters

Added date filters:

site_date

{{ “now” | date }} outputs "09-Jan-2015"

site_datetime

{{ “now” | datetime }} outputs "09-Jan-2015 02:46 PM"

date_utc

{{ “now” | date_utc }} converts a date to UTC (assuming that the date is always given in the site’s timezone)

date_add

myDate - filter input should be a date time object or a string convertible to a date time object

amount - an integer number or a string convertible to an integer number representing the amount of date or time units to add (if positive) or to subtract (if negative) from the input date time object

datePart - a string representing the date or time parts to be added or subtracted. The allowed values are:

  • "year"
  • "month"
  • "day"
  • "hour"
  • "minute"
  • "second"
  • "millisecond"

E.g. using either one of the variables below:




and

3016-06-15 12:30:30Z will output 3016-06-15T12:30:30

2016-09-15 12:30:30Z will output 2016-09-15T12:30:30

2016-06-30 12:30:30Z will output 2016-06-30T12:30:30

2016-06-16 08:30:30Z will output 2016-06-16T08:30:30

2016-06-15 11:50:30Z will output 2016-06-15T11:50:30

2016-06-15 13:00:30Z will output 2016-06-15T13:00:30

2015-06-16T08:30:29.900 will output 2015-06-16T08:30:29.900

If one of the parameters is of an incompatible type or value, the filter will not alter the input.

Backlog

Contact assignment to the Secure Zone.

Admin able to set/edit the expiry date of the secure zone for a contact

The configuration can be managed in the contact setting - http://prntscr.com/nip1uq.

Backlog

Default Expiry date for the Secure Zone.

If any of the forms have a secure zone, but the expiry date for it isn't specified, the default expiry date should be 31-Dec-9999.

Backlog

System Page if the access to the Secure Zone is expired.

If the expiry date of the contacts secure zone subscription is bigger than the set expiry date, the system should show the system page (403). The user should not be able to enter the secure zone by any means until the expiry date is less smaller than the current one.

Backlog

Change SEO Title To Meta Title In Liquid Properties

{{this[‘MetaTitle’]}} Added and renders the same value as {{this[‘SEOTitle’]}}

Backlog

Timezone for form submissions

The form submission times in the CRM now showing time in site timezone.

Backlog

Customise the “Create New” item name in modules

Admin is able to add the name for the "Create New" button on the "treeView" for modules:

The field where the admin can add the Alternative Item name - http://prntscr.com/nl0ow4.

The name for the "treeView" module should be displayed here - http://prntscr.com/nl0oob.

Backlog

Add support of .webp images

Add support of files with extension: ".webp" type: "image/webp"

Backlog

UI Improvements

File Manager:

  • filemanager download file option
  • filemanager duplicate file
  • filemanager download folder option
  • filemanager duplicate folder

Modules:

Component Manager:

Backlog

URL Redirect 302 status code changed to 301

Change current

  • 302 (Temporary redirect) status code to
  • 301 (Permanent redirect)

Bug

URL redirects with .html extension as source

Any url redirect that is added to the system with .html as the source url won’t redirect.

Another usability issue is that when you make a change to a url and go ‘back’ it takes you back to the first page of results every time and not just back to the page you were up to. It also defaults back to 20 results instead of 50.

Bug

Import/Export - doesn't react to Disable for site search

  1. Go to Galleries/Slider
  2. Create slider
  3. Export this item
  4. In file add one item and change Disable for site search to True and save
  5. Import this file
  6. New item doesn’t have checked checkbox for Disable from site search

Bug

Change Timezone - event in calendar displays one day back

  1. Create event and show item on Calendar http://prntscr.com/ne19h1
  2. Change time on your computer
  3. In calendar event start date change to one day back http://prntscr.com/ne1ad4

Bug

Custom Module and Event pagination no display results

When using Custom Module or Events search module with pagination, the paged views don’t show any items.

Bug

New Image manager not recognizing .jpg images

Image manager in WYSIWYG editor not displaying .jpg images in the file system and so cannot be selected.

Bug

New Image manager - breadcrumbs don't work correctly

Image manager in WYSIWYG editor not displaying breadcrumb/folder location correctly if reopening the image manager for a second time.

Bug

Create item from front end - change type

Expiration Date input in the Create/Update Item forms is added as a type=“text” input - suggest changing to a type=“date” (as per custom properties dateTime fields)

Bug

Business plan - disable advanced settings

Sites on Business plan had Advanced Settings enabled for Custom Modules when they should be disabled.

Bug

Set at Home and nICE

Page with ‘Set as Home Page’ enabled will revert to disabled if saved via nICE editor.

Bug

Default priority - doesn't save during import

  1. Go to custom module with Default priority http://prntscr.com/ndjzba
  2. Create item – priority doesn’t get saved until clicking save on seo tab

Bug

New Image manager - show full breadcrumbs

  1. Go to Image manager WYSIWYG
  2. Open folder with several folder inside - doesn’t show full path https://prnt.sc/nf57sh

Bug

Set up Time zone on create item in Custom module

User-submitted Custom Module items are not honouring site timezone for release date and expiry date IN THE WEB FORM RESPONSE - actual dates in the admin and when later rendering on site are correct. Initial response Release date is always different.
Expiry is different when the date is set in the Create Item form, but not when ‘number of days till expiry’ is used or when left as default/no date set.

Bug

Create item from front end - expiry days issue

With ‘Expiry Days’ set for user submitted custom module (http://prntscr.com/nfs5pk)

On item submission item is created with system default expiry date + expiry days - but should be calculated from today’s date http://prntscr.com/nfqq1b

Show more less
New Feature

Multiple Domain Names

Ability to add multiple domain names to a website and point to different landing pages.
  • SEO
New Feature

Pause Clients Which Are Not Paying

The ability to pause clients access to the admin and their email if they are not paying their bills.

  • Treepl Portal
Improvement

BONUS: “Author” and “Added By” fields to include links to those CMS items

Add a link to the CRM record next to any “Added By” field.
Add a link to the Author item next to any “Author” field.
  • CRM
Improvement

BONUS: Alternate Name Of Custom Module Item

cm-custom-name.png
Ability to set a custom name for custom module item.
Very useful when using nested custom modules.
  • Custom Modules
Improvement

BONUS: Change SEO Title To Meta Title In Liquid Properties

Version 3.2 brought a change to the SEO section changing the ‘SEO Title’ field name to ‘Meta Title’.

It would be great to have this passed through to the Liquid property naming also for consistency.

ie: {{this.metatitle}}

We may need both {{this.seotitle}} (old) and {{this.metatitle}} (new) available for backwards compatability

...
  • SEO
  • Liquid
Improvement

BONUS: Duplicate, Download Files & Folders

- Ability to download file from File Manager
- Ability to download folder from File Manager (as a seperate zip file)
- Ability to duplicate file and/or folder in File Manager
- Files and folders to render in alphabetical order
  • File Manager
Improvement

BONUS: Expiry Dates For Subscriptions

Functionality for admins to set expiry date for a customer to access a secure zone. (eg: access expires 31.12.2019)

  • Secure Zones
Improvement

Update Liquid To Include Date & Time Filters

Date Filters can be very important to web sites that use dates and calendering.

See the following link for BC's Date Filters:

Link to BC docs
  • Liquid
v 4.1 Release date: 17 Apr, 2019

Full Release Notes

Backlog

Code View In Custom Module WYSIWYG

For Custom Modules, the ability to switch to “Code View” in custom WYSIWYG fields.

Backlog

Menu Layouts and layoutGroups management

Add Menu layouts and layoutGroups management to the admin similar to other module layouts.

1) User should be able to create new layoutGroups

Creating layoutGroup should create folder in "/Content/MenuLayouts/[menuAlias]/[layoutGroupName]" and create there 3 files with default content.

2) User should not be able to delete Default layoutGroup.

3) User should be able to edit any layout inside layout group.

4) Creating new menu should create "/Content/MenuLayouts/[menuAlias]/Default" folder and insert default layout there instead of the previous location "/_MenuLayouts/[menuAlias]".

Backlog

Menu LayoutGroups FTP changes

FTP changes (for app start if _MenuLayouts" folder exist):

1) Copy "_MenuLayouts" folder from ftp root to "Content" folder.

Rename it to "MenuLayouts":

http://prntscr.com/n4ocag

2) Inside each menu alias named folder in "/Content/MenuLayouts/" folder - create Default folder. Move layout files from the "/Content/MenuLayouts/[menuAlias]" to "/Content/MenuLayouts/[[menuAlias]]/Default" folder.

3) Go through every layout "*.layout" file inside each "/Content/MenuLayouts/[[menuAlias]]/[[layoutGroup]]" folders and change the include string part like this:

/_MenuLayouts/{{this.alias}}

to

/Content/MenuLayouts/{{this.alias}}/{{this.layoutGroup}}

Backlog

Add Menu LayoutGroups to liquid component

Extend module component to use layoutGroup param:

{% component type: "menu", alias: "test", layoutGroup:"myCustomLayout" %}


If layoutGroup is empty string or null (parameter is not set) - use default.

layoutGroup should work the way described below:

  • Find /Content/MenuLayouts/{{this.alias}}/{{this.layoutGroup}}/menu.layout file and parse it instead of old /_MenuLayouts/{{this.alias}}/menu.layout
  • if file was not found - render empty string

Liquid changes:

add layoutGroup to this scope

Backlog

Upgrade menu in component toolbox

Selecting menu should be similar to Event subscription form:

http://prntscr.com/n4ops8

Default value for layoutGroup should be "Default".


New component parameters look like:

{% component type: "menu", alias: "[[someAlias]]", layoutGroup: "[[selectedLayoutGroupName]]"

%}

Backlog

‘Delete all items’ button (improved UI)

Add button "Delete all items" to bulk action list on list-view of a module.

Confirm window should be the same as for existed bulk delete action.

If user leaves the page while deleting process still running - show alert message:
Deleting items is still in process.

It will continue after you leave this page.

Design: http://prntscr.com/nd9k2w

Backlog

Custom Module - Properties - Advanced custom property editing

Ability to change custom module custom property data types.

Add alert message when type change will cause irreversible data changes:

WARNING: changing field type will cause data loss. Do you wish to proceed anyway?

Transformations are based on rules described in the documentation for Custom Modules.

Backlog

Edit & Re-shuffle Tags In Modules

Add ability to edit "Tags" in modules.

Add ability to reorder tags.

Backlog

Image manager in wysiwyg

Ability to access the file manager for image placement within WYSIWYG tools.

Beta

Import/Export feature improvement

Extended version of import/export file.

Add “disable from site search” property to the import/export file

Beta feature: Activate by checking the ‘Advanced Module Import/Export’ flag in the Beta area.

Bug

Release date issue on module items

When creating custom module item - its release date saved with incorrect hours.

When click save again - date is changed again until release date is changed to +1 day.

Expected:

Release and expiry date should be saved with time 00:00:00 in the site's timezone. Time part of the submitted datetime should be fully ignored - just force 00:00:00 in the site's timezone

Resaving should not change the time.

Bug

“site.webmanifest” Files Not Supported

"site.webmanifest" files are not accessible via their URLs and are therefore not usable by browsers and other applications.

Expected:

When adding site.webmanifest file with content to ftp root.

Go to /site.webmanifest url.

Access file's content.

Actual:

HTTP ERROR 404

Bug

Login to admin - can't access first few times

Issue with admin login not allowing access and returning to the login screen several times before finally allowing access.

Bug

Site Search With Multiple Keywords

Site search using more than one word as the search term is not returning any results, even with site reindexed.

Bug

Link Manager Changes the Link text

When using the Link Manager in the WYSIWYG editor for linking to a page, the Link Manager will overwrite the text selected as link with the name of the page.

Example:

"This is my LINK"

Then select "LINK" and go to the Link Manager and choose "Page" and then choose a page called "Test".

Your link will now show: "This is my Test" instead of still showing: This is my LINK"

Show more less
New Feature

BONUS: Lawyer Template

New custom grid template "Lawyer" is available from Partner Portal for all types of users.
  • Templates
New Feature

BONUS: Photography Template (Foundation)

New Foundation template "Photography" is available from Partner Portal for all types of users.
  • Templates
Improvement

BONUS: Custom Module Import/Export

1) Extended version of import/export file
2) Add disable from site search property to the import/export file
  • Custom Modules
Improvement

BONUS: Edit & Re-shuffle Tags In Modules

Ability to edit and shuffle “Tags” in modules. Right now, you can only add. So, if you make a mistake, misspell, etc, you need to delete the tag and re-add it again.
Also, would be nice to have the ability to re-shuffle tags (i.e. order of tags)
  • Custom Modules
Improvement

Code View In Custom Module WYSIWYG

The ability to go to “Code View” in custom WYSIWYG field in Custom module. (Not in the native item description field where is works already)

code-view-wysiwyg.png

  • UI/UX
  • Custom Modules
  • WYSIWYG Editor
Improvement

Menu Layouts Inline With Other Modules

For consistency, I’d like to see Menu layouts brought into the admin more in line with how all other module layouts are managed.

Some mockups below: menu-layout1.png

menu-layout2.png

menu-layout2.png

  • Admin Panel
  • Menus
  • New
Improvement

Update Import Templates To Allow "Disable From Site Search" For Items During Import

Items imported into Treepl using Templates do not always need to be found by Site Search.

By default, all imported Items are found by Site Search.

In Use Cases where Items should not be searchable it is necessary to edit every Item after it is imported and check the Disable From Site Search check box.

A number of partners have encountered this issue,...

  • Treepl Portal
Bugfix

BUG: “site.webmanifest” Files Not Supported

“site.webmanifest” files are not accessible via their URLs and are therefore not usable by browsers and other applications.

  • General
  • New
  • Bugs
Bugfix

BUG: Site Search With Multiple Keywords

Site search using more than one word as the search term is not returning any results, even with site reindexed.
Tested on both a live site and a trial site.

  • General
  • New
  • Bugs
Bugfix

Link Manager Changes Link Name

When using the Link Manager in the WYSIWYG editor for linking to a page, the Link Manager will overwrite the text selected as link with the name of the page. 

Example:

"This is my LINK"

Then mark "LINK" and go to the Link Manager and press "Page" and then choose a page called "Test".

When...

  • General
  • New
  • WYSIWYG Editor
  • Bugs
v 4.0.2 Release date: 27 Mar, 2019
Improvement

Auto-Collapse Item Settings / Custom Properties Toggle

The ability to have a “cookie” set to remember when you click the toggle to collapse container?
This way when you go back it is still set as collapsed? Or somewhere in a General Settings area where you can have it set to Auto Collapse (like a Global Setting).

Also the ability to apply this to the ‘Items Per Page’ pop-up...

  • Admin Panel
  • New
Bugfix

Events Not Sorting By ‘EventDateStart’ And ‘EventDateEnd’

When using sortBy parameters in the component module for events, ‘EventDateStart’ and ‘EventDateEnd’ do not work to sort by those dates.

  • Events
  • New
  • Bugs
Bugfix

Saving Template Will “Postpends” A "-1"

When saving Templates after within Content Template, it “postpends” a -1 after it.
Even after -1 is removed it brings it back again.

If saving it again, adds a 2, saving it a third time adds a 3 etc.

Screen shot is after removing, saving, back to list view, saving, and it comes back again.

template.png

  • Pages and Templates
  • New
  • Bugs
v 4.0 Release date: 20 Mar, 2019

Full Release Notes

Backlog

UPDATE
Liquid date filter - convert number to date

Now Liquid can convert numbers to date (interpreted as number of seconds from 1st Jan 1970).

For example:
{% assign newStartDateSeconds = 'now' | date: '%s'| minus: 1209600 %}
{% assign newStartDate = newStartDateSeconds | date: '%e-%b-%Y' %}

Backlog

WYSIWYG - Image padding UI

Provide ability to add/edit spacing around images

http://prntscr.com/n0jspm

Backlog

Managing Content templates through FTP

Add ability to manage Content Template via FTP.

Folder to check files in:

/Content/ContentTemplates

File to check schema:

.html

If Content template created in admin contains unaccessible symbols for file name - replace them with empty string ("") for file name (name of the template remains the same).

Extend Content template with the same FTP Path variable as Pages has.

Managing functions are the same as for pages:

  • create file -> create template
  • delete file -> delete template
  • update file -> update template's content
  • rename file -> rename content template
  • All above vice versa

Backlog

Managing Snippets through FTP

Add ability to manage Snippets via FTP.

Folder to check files in:

/Content/Snippets

File to check schema:

.html

If Snippet created in admin contains unaccessible symbols for file name - replace them with empty string ("") for file name (name of the Snippet remains the same).

Extend Snippets with the same FTP Path variable as Pages has.

Managing functions are the same as for pages:

  • create file -> create Snippet
  • delete file -> delete Snippet
  • update file -> update Snippet's content
  • rename file -> rename Snippet (alias remain the same)
  • All above vice versa

Backlog

Managing Email templates through FTP

Add ability to manage Email Template via FTP.

Folder to check files in:

/Content/EmailTemplates

File to check schema:

.html

If Email template created in admin contains unaccessible symbols for file name - replace them with empty string ("") for file name (name of the template remains the same).

Extend Email template with the same FTP Path variable as Pages has.

Managing functions are the same as for pages:

  • create file -> create template
  • delete file -> delete template
  • update file -> update template's content
  • rename file -> rename Email template
  • All above vice versa

Backlog

Managing Module Layouts through FTP

Add ability to manage Module Layouts via FTP.

Folder to check files in:

/Content/ModuleLayouts/

File to check schema:

.html

If Module Layout created in admin contains unaccessible symbols for file name - replace them with empty string ("") for file name (name of the Module Layout remains the same).

Extend Module Layouts with the same FTP Path variable as Pages has.

Managing functions are the same as for pages:

  • create file -> create Module Layout (as list layout)
  • delete file -> delete Module Layout
  • update file -> update Module Layout's content
  • rename file -> rename Module Layout
  • All above vice versa

Backlog

Managing Forms through FTP

Add ability to manage Forms via FTP.

Folder to check files in:

/Content/Forms

File to check schema:

.html

If Form created in admin contains unaccessible symbols for file name - replace them with empty string ("") for file name (name of the Form remains the same).

Extend Forms with the same FTP Path variable as Pages has.

Managing functions are the same as for pages:

  • create file -> create Form
  • delete file -> delete Form
  • update file -> update Form's content
  • rename file -> rename Form (alias remain the same)
  • All above vice versa

Backlog

Managing System Pages through FTP

Add ability to manage System Pages via FTP.

Folder to check files in:

/Content/SystemPages

File to check schema:

.html

If System Pages created in admin contains unaccessible symbols for file name - replace them with empty string ("") for file name (name of the System Page remains the same).

Extend System Pages with the same FTP Path variable as Pages has.

Managing functions are the same as for pages:

  • create file -> No Action (disallowed action for this type of item)
  • delete file -> No Action (disallowed action for this type of item)
  • update file -> update System Page's content (create file if it was deleted by ftp)
  • rename file -> No Action (disallowed action for this type of item)
  • All above vice versa

Backlog

Managing System Emails through FTP

Add ability to manage System Emails via FTP.

Folder to check files in:

/Content/SystemEmails

File to check schema:

.html

If System Email created in admin contains unaccessible symbols for file name - replace them with empty string ("") for file name (name of the System Email remains the same).

Extend System Emails with the same FTP Path variable as Pages has.

Managing functions are the same as for pages:

  • create file -> No Action (disallowed action for this type of item)
  • delete file -> No Action (disallowed action for this type of item)
  • update file -> update System Email's content (create file if it was deleted by ftp)
  • rename file -> No Action (disallowed action for this type of item)
  • All above vice versa

Backlog

Managing Workflow Emails through FTP

Add ability to manage Workflow Emails via FTP.

Folder to check files in:

/Content/WorkflowEmails

File to check schema:

.html

If Workflow Email created in admin contains unaccessible symbols for file name - replace them with empty string ("") for file name (name of the Workflow Email remains the same).

Extend Workflow Emails with the same FTP Path variable as Pages has.

Managing functions are the same as for pages:

  • create file -> create Workflow Email
  • delete file -> delete Workflow Email
  • update file -> update Workflow Email 's content
  • rename file -> rename Workflow Email (alias remain the same)
  • All above vice versa

Backlog

Beta Feature flags

Ability to enable/disable some beta features before they become default.

http://prntscr.com/n0jx5m

Backlog

Default auth cookie life time to 24h

Extend cookie life time after log in to secure zone from 30 min to 24hrs

Backlog

Admin URL management improvement

  • Remove # from url routes in admin
  • On login - redirect user to previous page (if user was redirected to login by the app).
  • If user goes via old urls with # - redirect him to the correct new styled URL

Backlog

Liquid engine refactoring (ALPHA)

Refined and optimized Liquid Parsing process.
Feature is in ALPHA state for now and under internal feature flag.
Feature is disabled by default but we can manually enable it upon request for any of your trial sites if you wish to play with it.

Benefits of the feature:

  • Parsing process now goes starting from template instead of page content.
  • Liquid parsing speed is slightly increased.

Feature is incompatible with nICE for now (compatibility is under development).

Bug

Allow ‘Amount’ payment when Event Price is 0

When

  • Event Has Price field set to 0
  • Form Has AcceptPayment field ON
  • Form Has AcceptEventSubscription field ON
  • Form submission data has Amount > 0

Than - proceed payment the same way as it does for event by event.price BUT use FormSubmissionData.Amount as Price

Show more less
New Feature

WYSIWYG Editor - Image Manager

Need to have the ability to add Spacing and Image Compression options as well, similar to how Shopify handles this

Right now one need to manually go in and update Margins. Would also be good to assign a custom CSS class to images.

wysiwyg-image-manager.png
  • Admin Panel
  • WYSIWYG Editor
Improvement

FTP Access to Templates Etc.

FTP access to Pages, Menus, Content Templates, Snippets, Web forms (!), Blogs + Blog Posts, Events and Event Groups, Banners (Ad rotators), Galleries/Sliders (Photo Galleries), Authors, FAQ's, Custom Modules, Workflow Emails, System Emails, Email Templates and System Pages
  • FTP
v 3.3 Release date: 27 Feb, 2019

Full Release Notes

Backlog

Documentation link in the admin

Documentation link in the admin should be viewed only for partners:

http://prntscr.com/mmlqzg

Backlog

'Do not use template' and 'use default' template behavior

Modify content template and email template wrapping behavior:

  1. Assigned template field is number field
  2. If number is int value > 0
    • Try find template by this ID. Apply found template to the content.
    • If template not found - go to step 4
  3. If number is int value == 0
    • Check for default template for this type of content. If found - Apply found template to the content.
    • If default template not found (or not provided) - go to step 4
  4. If number is int value == -1 or null (force apply -1 in this case if it happens while saving process)
    • Force apply Pseudo-template with the content:
      {{pageContent}} - for the Content Templates
      {{this.emailContent}} - for the Email Templates

In Admin added 2 options when assigning Content Template and Email Templates:

  • Don't use template (value -1)
  • Use default template (value 0)

Backlog

Event - Calendar Support

Design: http://prntscr.com/mu68eb

Responsive calendar support for Events:

  • Create JS plugin that builds month based calendar for events
  • Add ajax query for events for current month and display them on the calendar
  • Calendar should be responsive

Created new include file "/cms-assets/includes/event-calendar.inc".

Add component toolbox option

  • Events->Calendar
  • Select event group:
    • all (all items)
    • ungrouped (items in the root level, outside of any group)
    • (name of any created event group)
    • ...
  • show code:

Backlog

Add "Parentname" To module Component

  1. Add "templatename" to the module component to target the name of the template.
  2. Add "parentname" to the module component to target the name of the parent item (that can be defined by parentid).
  3. Add parenturl

{% component source: "Page", layout: ""...
{
"id": 1832,
"url": "",
" parentid": 1833,
" parentname": "Name of Parent",
" parenturl": "/relative/url",
"templatename": "Name of Template",
"lastupdateddate": "2018-10-21T23:34:21","

Backlog

Home Page Status Available In {{this}} Object

Include the ‘Set as Home Page’ data within the {{this}} object so we have it available in Liquid.

It can be helpful to know for setting certain conditions in the template; just some examples:

· Show a hero slider above content when on home page
· Do not show a global subscription pop-up/modal window when on home page


{{this}}:


{
"id": 1832,
"url": "",
"parentid": 1833,

"isHome" : true,

...
}

Backlog

Direct Link To CRM Form Submission Entry

  • Ability to grab direct link to CRM form submission entry from either the 'formsubmission' or workflow collections to place in workflow email.
    This is so that one can direct a workflow recipient straight to the Form submission in the admin console. Something like
  • {{this.formSubmissionData.crmContactLink}}
  • {{this.formSubmissionData.crmFormSubmissionLink}}
  • {{this.formSubmissionData.crmEventBookingLink}}
  • Add link to CRM contact from within the Form Submissions in the Admin: http://prntscr.com/mmlfnn (email address goes to CRM record, not a mailto: their email address)

Backlog

Internal Custom Module Search

The ability to search all items in Module List even with “Disable from Site Search” checked.

“Disable from Site Search" should only be for the front end site only, and not internally.

Looks like you lose search functionality within the custom module list when it is checked.

https://treepl.co/images/public-roadmap/Internal-Custom-Module-Search.png

Backlog

File Exports: Prepend Site URL And Postpend Date

When exporting files add the site url to the beginning of the file name and the date to the end of the filename i.e.

'website.com-team-module-export-2018-12-30.xls'

Backlog

Remove Event specific fields from Event Group module

These fields should not be present and are used for Event items, not their groups:

http://prntscr.com/mhi8h7

Backlog

Global setting for enable/disable text wrapping on a new line

Add a global setting that will enable/disable text wrapping on a new line in the ace editor.

'Settings' > 'Misc'

Backlog

Keyboard shortcut to save content in ACE and WYSIWYG editors

Apply CTRL+S/Command+S Shortcut Keys to save content when in ACE and WYSIWYG editors

Backlog

Reindex site - checkstatus and disallow reindex when indexing in progress

Apply loader and disabling of reindex site button in order to prevent multiple reindex process trigering. Button should be disabled even after page reloading.

Once reindex is finished - remove the loader and activate reindex button.

Design - http://prntscr.com/mu66s9

Backlog

Show treepl cms version in the admin


Show treepl cms version in the admin

Design - http://prntscr.com/mu679j

Backlog

Rename Documents to File Manager in WYSIWYG link manager

Rename "Documents" title to "File Manager" in WYSIWYG link manager http://prntscr.com/mnbls0

Backlog

Show Template and release date on module item list view

Add columns to module item list view in Admin:

  • Template
  • Release Date

Provide ability to sort by Release Date

Bug

Empty google analytics view ID showing and missing

http://prntscr.com/mgwu2g

Fix bugs with head auto added items:

  • tag is missing
  • google analytics code should not be output if no tracking id is set in the analytics settings.

Bug

OpenGraph Properties in Liquid not accessible

`{{this.opengraphproperties}}` renders the sub-properties as JSON ok, but couldn't access those sub-properties directly, ie: `{{this.opengraphproperties.title}}`.

Show more less
New Feature

Add TreeplCMS Version Number In Admin

Add version number in the admin

{% unless request.request_url.href contains "?tag" -%} version-number.png

{% endunless -%} ...
  • Admin Panel
  • New
New Feature

Calendar Support

Responsive calendar support for Events.
  • Events
New Feature

Use Blank Template

Sometimes when you want to create a new page on a site you don't want to use a template - perhaps for a differently style landing page or some other random page. Currently the system pulls in the default template. Can we have a page option that allows 'Don't use a template'.

  • Templates
Improvement

Add "Parentname" To Component Source: “Page”

Add "parentname" to component source: page to target the name of the template.

{ % component source: "Page", layout: "".........
{
"id": 1832,
"url": "",
"parentid": 1833,
"parentname":
"lastupdateddate": "2018-10-21T23:34:21","


  • Pages and Templates
Improvement

Direct Link To CRM Form Submission Entry

Ability to grab direct link to CRM form submission entry from the either the formsubmission or workflow collections to place in workflow email.
This is so that one can direct a workflow recipient straight to the Form submission in the admin console. something like {{ this.formSubmissionData.crm_link }} ...
  • CRM
  • Liquid
Improvement

File Exports: Prepend Site URL And Postpend Date

When exporting files add the site url to the beginning of the file name and the date to the end of the filename i.e. website.com-team-module-export-2018-12-30.xls
  • Admin Panel
  • General
Improvement

Home Page Status Available In {{this}} Object

Include the ‘Set as Home Page’ data within the {{this}} object so we have it available in Liquid.
It can be helpful to know for setting certain conditions in the template; just some examples:

· Show a hero slider above content when on home page
· Do not show a global subscription pop-up/modal window when on home page...
  • Liquid
  • New
Improvement

Internal Custom Module Search

The ability to search all items in Module List even with “Disable from Site Search” checked. “Disable from Site Search" should only be for the front end site only, and not internally. Looks like you lose search functionality within the custom module list when it is checked.

Internal-Custom-Module-Search.png
  • Custom Modules
v 3.2 Release date: 12 Feb, 2019

Full Release Notes

Backlog

Custom module items: Inheriting default settings on import/create from frontend

Use custom module settings on events below.

-> Settings -> 'Secure Zones'

  • Select Secure Zones

-> Item Properties -> 'Default Properties'

  • Default Template
  • Disable All Items From Site Search

Therefore, new imported items will inherit Custom Module setting. So if you have "Disable from Site Search" checked - all new imported items will have "Disable from Site Search" checked (already existing items will not be affected).


System flow:

  • Import Process:
    • IF items are new (create process):
      • If item template column is not specified: Set item template to "Default Template" setting of the module
      • Set Items' "Disable All Items From Site Search" property using value of the "Disable All Items From Site Search" setting of the module
      • Assign Items to Secure Zones that are Selected in the "Secure Zones" setting of the module http://prntscr.com/mgctf9
    • If Update Process
      • process remains the same as it is right now
  • Create module item from frontend (public create item API):
    • Set item template to "Default Template" setting of the module
    • Set Item's "Disable All Items From Site Search" property using value of the "Disable All Items From Site Search" setting of the module
    • Assign Items to Secure Zones that are Selected in the "Secure Zones" setting of the module http://prntscr.com/mgctf9

Backlog

Datetime oriented by site Timezone

On site creation process, save selected timezone to the site.

On the site use saved timezone for all date based variables.

Backlog

SiteSearch index rebuild function

Added Rebuild Index button to the header of the admin http://prntscr.com/mlioin

Clicking on it will trigger background process that will rebuild search index that is used by site search and custom module search

Backlog

Global 'Show this page for search engines' button

SEO:

Added two buttons under 'Pages search engines settings:'

  • Enable all
  • Disable all

Both do one time action - either enables or disables "Show this page for search engines" option in every system and custom module item.

http://prntscr.com/mlipzc


On click show confirmation message:

  • Are you sure you want to enable all pages for search engines?
  • Are you sure you want to disable all pages for search engines?

Backlog

Added SUBSCRIPTIONS tab to event item

http://prntscr.com/mlir0a

Backlog

Events in secure zones

Add ability to select event items from secure zone items combobox

Backlog

Add Event links to Menu link widget

Add ability to select event groups/items for menu items http://prntscr.com/mgihun

Backlog

restore_password/activate_account token lifetime change

Increase restore_password/activate_account token lifetime from 30 min to 24h (allowed secure zone users not respond longer on restore password emails. Especially make sense if restore password was triggered manually by the admin)

Backlog

File creation during copy page bugfix

Fixed issue caused during copying of a page: page file was not created.

Backlog

Add search form to Component Manager + search by trpEvents fields

Add Events -> Search Form item to the Component Manager http://prntscr.com/mgimch

Provide same iterface as for the Custom Module search form (except for selecting module since Event is the only module available for the section)

Generated search form should contain Event specific fields and be able to search by them:

  • prop_Price_Min (text input)
  • prop_Price_Max (text input)
  • prop_EventStartDate_Min (text input)
  • prop_EventStartDate_Max (text input)
  • prop_EventEndDate_Min (text input)
  • prop_EventEndDate_Max (text input)
  • prop_AllowMultipleSubscriptionPerEmail (checkbox)
  • prop_HideWhenFull (checkbox)
  • prop_Capacity_Min (text input)
  • prop_Capacity_Max (text input)
  • prop_Allocation_Min (text input)
  • prop_Allocation_Max (text input)

Backlog

Implement Emmet In The ACE Editor

Emmet is a system that allows coders to write shorthand and have it expanded when you push the tab key. It can save a lot of typing when writing web pages. Eg. you type 'p' and then press 'tab' and you get:

, or you type 'div.wrapper' and 'tab' you get:

You can even do more advanced things like creating multiple instances with nested objects.

Here is an code playground of Emmet implemented in Ace (Go ahead and type p +tab on an empty line or ul>(li.item>a)*5 plus tab. ) https://ace.c9.io/demo/emmet.html

Here is the documentation for Emmet https://docs.emmet.io/abbreviations/syntax/

Backlog

Collapse, And/Or Pre-collapse Content Boxes

Ability to collapse/expand content boxes in pages / templates / modules, etc. https://prnt.sc/mgi9l7

Backlog

Rename "seoTitle" To "metaTitle"

Module Item -> SEO tab:

Rename "seoTitle" to "metaTitle" for consistency and accuracy.

Backlog

WYSIWYG - Image and links titles

Add ability to set/edit titles for links and alt text for Images inside the WYSIWYG

Backlog

Extend meta description symbols limitation

Extend meta description symbols limitation to 1000

Backlog

Inactive state for module items (by dates)

Display inactive state on items list and tree view:

Item is inactive when currentDate < Release date or currentDate > Expiry date

Backlog

WYSIWYG - URL browser for links

Add ability to choose URL for links from:

  • Built-in modules (Pages, Blogs, etc.) and Custom Module items
  • Documents (File Manager))
  • external url

Similar to BC widget:

http://prntscr.com/mgiv0i

Backlog

Improve load speed of the pages

Pages that uses many liquid components now loads faster.

Backlog

Rollback overriden params in modules

When rendering module inside layout of the another module - params variable should not be overriden by the nested module.

Example

On any page:

Inside "List" layout of the "Example" module:





Inside "List" layout of the "Example 2" module:

any string


Expected:

  • myValue
    Any StringAny String
    myValue
    Any StringAny String
    myValue
    Any StringAny String

Actual

  • myValue
    Any StringAny String

    Any StringAny String

    Any StringAny String

Bug

ACE editor cut of JS content

Steps:

  • Enter code below to the page
  • Before



    After

  • click save

Expected:

  • Before



    After

Actual:

  • Before


Bug

Allow create sites under trialsite.co

Sites under trialsite.co now creating properly(previously was created under treepl.co domain)

Bug

Empty Google Analytics view ID showing

Google Analytics code will not be viewed if no tracking id is set in the analytics tab.

Bug

Liquid: Roll back number filter

" | number" filter is restored(previously was accidently removed from filters).

Bug

Allow event start date to be set to past

When saving Event:

Expected:

  • Start Date can be set to the past.

Actual

  • Validation error: The event has already ended.
Show more less
New Feature

BONUS: Advanced Link Manager inside WYSIWYG Editor

In the WYSIWIG editor on pages or any other location where a url / link is may be added (blog, page edits, custom modules ) -

- "browse to url"

- link option to open in a popup

- add "title" tag to url links


insert-link">

  • General
  • WYSIWYG Editor
New Feature

Match Date Format To Site's Time Zone

Display dates in the correct format depending on time zone selected in site settings in partner portal.
  • Admin Panel
Improvement

BONUS: Enable/Disable All Pages/Module Items for Search Engines

Ability to show or hide all pages/modules of the site for search engines (sitemap.xml needs be regenerated after disabling/enabling this feature).
enable-disable.png
  • SEO
Improvement

Collapse, And/Or Pre-collapse Content Boxes

Ability to collapse, and/or pre-collapse content boxes in pages / templates / modules, etc.


collapse-content-boxes.png

  • UI/UX
Improvement

Implement Emmet In The ACE Editor

Emmet is a system that allows coder to write shorthand and have it expanded when you push the tab key. It can save a lot of typing when writing web pages. Eg. you type p the tab and you get <p></p>, or you type div.wrapper and tab you get <div class="wrapper"></div> You can even do more advanced things like creating...
  • Admin Panel
Improvement

Rename "seoTitle" To "metaTitle"

Rename "seoTitle" to "metaTitle" for consistency and accuracy.
  • UI/UX
  • Pages and Templates
  • Blogs
  • Custom Modules
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
  • Secure Zones
v 3.0 Release date: 08 Jan, 2019

Full Release Notes

Backlog

Admin User Roles CRUD

Add ability to create, delete, update and view list of roles.

Each role detail layout provides a list of permissions based on the current site plan.

Backlog

Admin Users - permissions setup

Ability to set admin user role for every Admin User created.
Admin user can't setup role to themselves.

No admin user can edit/delete partner admin account.

Backlog

Admin menu configurator

Add ability to customize order, visibility and names of admin panel menu items.

Backlog

Change of custom menus and role restrictions with site plan upgrade/downgrade

  1. Plan Upgrade:
    1. Change site plan permission
  2. Plan Downgrade
    1. Change site plan permission
    2. Go through all admin user's roles and remove all permissions that is not exist in the current site plan permission
  3. New Module added
    1. Add new permission node to site plan permission
  4. Existing module deleted
    1. Remove permission node from site plan permission
  1. User Roles
    1. Go through all admin user's roles and remove permission for that module if such exists.

Backlog

Advanced admin search

Add ability to filter admin menu items by keyword

Backlog

{{this.formSubmissionData}} on thank you page

Added support for {{this.formSubmissionData}} to get access to formSubmissionData object the same way as now does {{formSubmissionData}}

{{formSubmissionData}} should also work as it does now for backward compatibility.

Custom thank you pages (by use of 'redirectURL' parameter) will also support both data tags.

Backlog

User friendly mailchimp error messages

Change "The resource submitted could not be validated. For field-specific details, see the 'errors' array." error message

http://prntscr.com/m2iqt3

To like:

"Validation error:

    [Error key]: [error message]

    ..."

Backlog

System Pages and Emails default UI

Created folder in File Manager/FTP:

/cms-assets
Added here .css, .js, etc. that are needed for system pages and system emails.

Default system pages and emails on blank site include:

  • System pages
    • 404
    • Email Confirmation
    • Forbidden
    • Form Submission Results
    • Request Reset Password
    • Request Reset Password Result
    • Reset Password
    • Unauthorized
  • Galleries
    • Layout markup and js (with fancybox)
  • System Emails
    • Password Retrieve Email
    • Secure Zone Login Details
    • Workflow Notification
    • Confirm Email Notification
  • Forms
    • Email Notification (autoresponder)

Bug

Author column duplication in export bug

Repro Steps

  1. Go to any custom module.
  2. Enable authors in Properties section
  3. Go to items list
  4. Create item
  5. Call export
  6. Call export
  7. Call export

Expected

  • All 3 export files should contain only one Author column

Actual

  • Each next file has one more Author header column

Bug

Custom module search bug

Search by custom module form requires &paginatedModule=[[module_id]] param in order to paginate

Repro Steps

  • Go to page
  • Insert module search form via toolbox (check Display Pagination checkbox)
  • Save the page
  • Go to page
  • Click search
  • Go to second page
  • Remove &paginatedModule=[[module_id]] from the URL

Expected:

  • &prop_ModuleId=[[module_id]] is enough to determine module

Actual:

  • &prop_ModuleId=[[module_id]] is ignored, still waiting for &paginatedModule=[[module_id]]

Show more less
New Feature

Admin Menu Configurator

Ability to customize order and names of admin panel menu items.
  • Admin Panel
New Feature

Admin User Custom Restrictions

Ability to set custom restrictions for every Admin User created via roles.
  • Admin Panel
New Feature

Advanced Admin Search

Quick search of admin menu items.
  • UI/UX
  • Admin Panel
Improvement

_is_mobile_ Liquid Detection

Suggestion for {{request.request_data.is_mobile}} to become {{request.request_data.device_class}} with the output being 'mobile|tablet|desktop|...' as this will provide greater flexibility and future scalability as more device types could be added in over time. eg: 'tv|watch|glasses|car|spaceship|...'. Much like in BC we have {{globals.visitor.deviceClass}} giving us 'desktop|tablet|phone'.


The {{request.request_data.is_mobile}} just gives us a 'true|false' to whether it's mobile or not. I feel that the BC...
  • Liquid
v 2.4 Release date: 25 Dec, 2018

Full Release Notes

Backlog

Mailchimp API integration: Email Campaigns

Added 4 tabs for email campaign:

  1. Settings
    1. Name (100characters)
    2. Mailing List
    3. Schedule Delivery
      1. One time Campaign
      2. Schedule delivery
  2. Email info
    1. From Name(100 characters)
    2. FromEmail(100 characters)
    3. Subject(150 characters)
    4. Preview Text(150 characters)
  3. Content
  4. Preview(with ability to send test email)

Campaign can be changed between statuses:
Draft -> Sent (One time Campaign sent)
Draft -> Scheduled (Campaign scheduled)
Scheduled -> Draft (Campaign unscheduled)
Scheduled -> Sent (Schedule delivery Campaign sent)

Saving ability works only in Draft state.
Sent state doesn't allow any saving or unscheduling options.

Scheduled state allows unscheduling of the campaign (on preview tab).

Backlog

Mailchimp API integration: Send Email Campaign

Provided ability to send campaign

  • Instantly (if Settings - Schedule Delivery - One time Campaign setting selected and send button is triggered)
  • On specific time scheduled in campaign settings (if Settings - Schedule Delivery -Schedule deliver settings are set and send button is triggered)

Backlog

Mailchimp API integration: Send Test Email Campaign

Provided ability to send test campaign to the specific email addresses

Backlog

Email Marketing -> Campaign -> Toolbox for email content

Provided a toolbox with tags for email campaign content

Backlog

Partner Portal: Disable Save button after start creating site process

Save button now disables when site creating process is triggered

Backlog

Liquid consistancy in emails

  1. Body,Subject, FromEmail, FromName should be parsed by liquid:
    1. Forms -> Autoresponder
    2. Forms -> Workflow Emails
    3. Custom module item created from frontend -> Autoresponder
    4. Custom module item created from frontend-> Workflow Emails
  2. Context that passed for rendering Body should be also passed to email template:
    1. Forms -> Autoresponder
    2. Forms -> Workflow Emails
    3. Custom module item created from frontend -> Autoresponder
    4. Custom module item created from frontend-> Workflow Emails

Backlog

Partner Portal: Support Ticket Form

Created menu items "Support" that leads to the page with the form. On submit – if you are logged into codeproduction.co – your ticked will be created. If you are not logged in – you will be redirected to the login form. After successful submit of the login form – ticked will be created.

Bug

Sitemap is outputting disabled items

Sitemap will not add “disabled” module items.
Module items classified as “Disabled” are:

  • Enable checkbox is false
  • Release date is greater than current date
  • Expiry date is less than current date

Bug

Clicking on the same particular custom module in menu bug

When in a Custom Module showing list items, and you click on the same Custom module menu again, it doen't go to a blank screen any more -http://prntscr.com/lunwel

Bug

Over 4000 characters in form data crashes form submit

Fixed form submit error when submitting over 4000 characters (in sum between all form fields).

Bug

Filtering by tags and categories doesn't work

Fixed filtering by tags and categories via module search form. Previously result were:
Liquid Error: Invalid cast from 'System.String' to 'System.Collections.Generic.IEnumerable`1

Bug

nICE duplicates $ symbol in the content

If content contains "$1" or single "$" - after save dollar symbol doesn't duplicate multiple times.

Show more less
New Feature

Mailchimp API Integration Stage 2

Ability to create, update, delete and send Email marketing campaigns from Treepl CMS admin.
  • Marketing
v 2.3 Release date: 11 Dec, 2018

Full Release Notes

Bug

Double forward slash in URL when adding an item

Fixed double forward slash appending to the preview URL when creating new page/module item: http://prntscr.com/lue4cl

Bug

{{FormSubmissionData}} in autoresponders when creating a new item is not consistent

Submission data in autoresponders when creating new item now works correctly:

  • <pre>{{formSubmissionData}}</pre> - works case insensitive.
  • {{this.formSubmissionData}} - woking with or without the 'this' object.
  • {{this.formSubmissionData}} and {{this.member}} are now accessible in Email template for autoresponder when creating new module item.
  • Fixed empty object being returned if module had no custom properties, so system properties still accessible for general formSubmissionData object.

Bug

Custom Modules Search by categories, tags and checklists doesn't work properly.

Search by multiple categories, tags or checklist property values now works correctly and no longer results in a Liquid Error: Invalid cast from 'System.String' to 'System.String[]'

Bug

Opening custom module items in new tab goes to admin dashboard.

Opening custom module items in new tab now works as expected rather than redirecting to the admin dashboard.

Bug

Canonical link empty causing liquid error.

Fixed page crash if canonicalLink is empty (http://prntscr.com/lqz9vv) causing Liquid Error: This operation is not supported for a relative URI.

Now no <link rel="canonical"> tag displayed on the page if value of the canonicalLink property is empty or not a valid URL.

Bug

Can't add www. to domain in 'SEO' -> 'Primary Domain'

This field for setting the primary site domain now allows any subdomain to be entered, including www.

Bug

Disabled page renders blank document.

When attempting to load a disabled page a completely blank document was rendered. Now system renders a 404 page.

Bug

Date comparison via module components not working.

Date fields can now be filtered in {% component type: "module" ... %} via 'filterBy' and 'filterValue' attributes, including:

  • Release data
  • Expiry date
  • Any date custom field

If 'filterBy' is set to a date type field:

  • System will try parsing 'filterValue' as date.
  • If value is a date then compare it to the item’s date value (EXCLUDING the time component of the date value). Comparison rule is only “equals” to, so it's looking for an exact match.
  • If system can't parse 'filterValue' then filtering is ignored.

Bug

Nice editor - $[number] text bug

Texts that contain $ sign and a number next to it (eg: $2) no longer brakes text after saving.

Bug

Item without a detail layout shows completely blank document.

404 page is now displayed when an item’s detail layout has type “List” (or no layouts with type "Detail" are present or the default "Detail" layout has been saved as a "List" type).

Bug

Bug with rendering SEO Title.

SEO/meta title now renders by the system under the following conditions:

  • If <head> section already has <title> tag, than the system will not do anything, allowing custom title tag to display based on your own logic.
  • If <head> section of the page has no <title> tag than the system will add it populate the value firstly with the SEO title value or secondly using the item's name (if SEO title value is empty).

Bug

Item URL preview not updating correctly.

Item’s preview URL (shown under item’s URL field) is now displaying correctly when creating a new item and when editing existing and updating it's parent folder (resulting in URL change).

Backlog

Alternative Domain For Trial Sites

Added ability to choose an alternative domain for new trial sites (trialsite.co) rather than the current "treepl.co" domain.

Backlog

Mailchimp API integration.

Added new section: 'Email marketing' > 'API provider'.

This allows you to setup Mailchimp API credentials (API key) that are required for integrated email marketing functions.

API key can be retrieved on this page from the mailchimp account https://us19.admin.mailchimp.com/account/api/ (us19 in the url is datacenter that can be different for your account, so may need to replace this with your account’s datacenter)

Backlog

Mailchimp API integration: Mailing Lists

Added new section 'Email Marketing' > 'Mailing Lists'.

Section provides the ability to perform Create, Read, Update and Delete actions (CRUD operations).

When a Mailing List is added, updated or deleted – it will be automatically added, updated or deleted in the linked mailchimp account (using API credentials in 'Email Marketing' > 'API Provider').

Currently one way push from Treepl CMS to Mailchimp (two way sync will come later).

Backlog

Mailing Lists subscriptions in Forms.

In 'Content' > 'Forms':

  1. Added system form field "Mailing Lists" (checkbox list).
    When clicking on it opens window with the full list of all mailing lists and ability to select which mailing list(s) will be added to the form
  2. The selected mailing lists are then output automatically in the form's layout when first generated:
    <label for="MailingLists">Subscribe To</label>
    <input type="checkbox" id="MailingLists1" name="MailingLists" value="[[list1 id]]">[[List1 Name]]
    <input type="checkbox" id="MailingLists2" name="MailingLists" value="[[list2 id]]">[[List2 Name]]
    <input type="checkbox" id="MailingLists3" name="MailingLists" value="[[list3 id]]">[[List3 Name]]
  3. Once form is submitted - CRM contact record will be added to all selected lists.
  4. 'MailingLists' property added to the {{formSubmissionData}} object for liquid as well as the 'CRM' > 'Form Submissions' entity.

Backlog

Mailchimp API integration: Subscribe/Unsubscribe user event.

If a user subscribes or unsubscribes from a mailing list via Mailchimp, the event is pushed to Treep CMS to unsubscribe the CRM contact from the appropriate mailing list.

  • If mailing list does not exist in Treepl CMS - skip action (Example - mailing list was deleted via admin but the user unsubscribes after the mailing list was deleted).
  • If the CRM contact does not exist - skip action (Example - user was deleted via admin but actual the user unsubscribes after their CRM record was deleted)

Backlog

Mailchimp API integration: CRM Contact mailing lists management.

Added ability to view subscriptions via the CRM contact record, as well as subscribe and unsubscribe them to/from mailing lists.

Also added same ability in the 'Mailing List' > 'Subscribers' section.

Backlog

More settings on Google Analytics dashboard.

Added more data from Google Analytics available through the API:

Backlog

Refine reCaptcha For Mobiles

Default form layout generator now generates reCaptcha’s code in compact mode for mobile using liquid conditional statement (utilising the 'data-size="compact"' attribute).
A form label is also now added to the markup.

Backlog

Default Datepicker.

Date fields will be generated by the system using default datepicker (on content forms when form layout is generating by the system and when generating create/update module item forms).

Backlog

Settings area available for System Modules.

System Modules now have settings and properties available to access (found under the gear icon), which include:

  • Blogs
  • Blog posts
  • Banners
  • FAQ's
  • Galleries
  • Authors

Available on Pro+ plans only.

Backlog

Show correct IP Address for Data Center.

When activating a site in the Partner Portal, the relevant data center's IP address is displayed for use in your DNS.

Backlog

Change "Email Notification" To "Auto-response".

"Email Notification" title, in the forms settings page, is now more correctly changed to "Auto-response".

Backlog

Global site preview button.

Added "Home" button to admin header bar (next to the partner logo) that opens the home page in a new tab.

Backlog

{{request.device_type}} property.

Added 'device_type' property to request object {{request.device_type}}. Returns device type:

  • Desktop
  • Tablet
  • Mobile

Backlog

SEO OG image tag improvement.

System will automatically prepend "https://[current Domain]" to the path of the selected image when setting the OG tag properties under the SEO tab for various items.

Backlog

nICE - "Webpage Spell Check" compatibility.

Provided compatibility with Webpage Spell-Check (https://chrome.google.com/webstore/detail/webpage-spell-check/mgdhaoimpabdhmacaclbbjddhngchjik).
Now focus-in and focus-out on any editable area in nICE mode does not crash the page like it did before (https://prnt.sc/lresw0).

Backlog

Add 'Author' field in Import/Export.

Author system property field now added to Import/Export process for Custom Module items.

Backlog

Home page indicator in list view.

Added a home icon, in the item list view, that helps to more easily see which page/module item is set as the home page.

Backlog

Extend meta description max value.

Meta description, under the SEO tab, maximum character value extended to 400 characters.

Backlog

{% component type:"module" ... %} - pagination improvement.

Pagination for Custom Module items was slightly reworked:

  • Component tag now defines what module should be paginated via a URL parameter 'ModuleId' that adds to the system generated page links when the module is rendered. If it matches the module defined in 'source:"moduleName"' than pagination will be applied. Otherwise - ignore pagination.
  • Extended the default generated pagination HTML markup to define moduleId in pagination links.
  • Pagination will be applied always. Not only if 'displayPagination: "true"' for the modules defined in URL parameter 'ModuleId'.
  • 'displayPagination: "true"' parameter should ONLY define if component tag should output self-generated pagination HTML or not.

Backlog

Redirect to 'Unauthorized' system page if login failed.

On login process if the user failed to login, the system will redirect them to the 'Unauthorized' system page instead of redirecting to the home page with "/?login=failure" appended to the URL.

Show more less
New Feature

Global Preview Button

Add "Preview" button to admin header that will lead to the home page in a new tab.

It'll be somewhere here: 

  • Admin Panel
  • New
New Feature

Mailchimp API Integration Stage 1

Connect your Mailchimp account to Treepl CMS (same way you setup Google Analytics feed integration). Create mailing lists in Mailchimp through API from Treepl CMS submitted forms:
- Ability to create, update and delete mailing lists via mailchimp API
- Ability to setup mailchimp api integration
- Ability to add subscription functionality to the form
  • Marketing
Improvement

Change "Email Notification" To "Auto-response"

Change "Email Notification" to "Auto-response" on the "Settings" tab under "Forms"

  • New
  • Emails
Improvement

Default Datepicker

Use browser's default datepicker for datetime fields on content forms and create/update module item forms.
  • UI/UX
  • New
Improvement

Module Settings On System Modules

Allow using module settings on system modules:
- Blogs
- Blog posts
- Banners
- FAQ's
- Galleries
- Authors
(all except of Pages).
Available on Pro+ plans only.
*This feature would cover the following request: "Enable multiple detail layouts for blogs and blog posts."
  • Blogs
  • New
Improvement

More Settings On Google Analytics Page

Add more data from Google Analytics available through API.
  • Analytics
  • New
v 2.2 Release date: 27 Nov, 2018
New Feature

BONUS: Bulk Delete Of Items

Bulk delete feature for:
  • Custom module items
  • Snippets
  • Menus
  • Forms
  • URL redirects
  • Contacts
  • Form submissions
  • Email templates 
  • Content templates
  • Workflows (exclusions system workflows)
  • UI/UX
  • General
New Feature

Digital Agency Template

Framework: Foundation 6.5
Full nICE compatibility
MORE DETAILS
  • Templates
Improvement

Alternative Domain For Trial Sites

Ability to create trial sites under an alterntative "trialsite.co" domain.
Currently, you are only able to create trial sites under "treepl.co" domain.
THIS IS A TEMPORARY SOLUTION BEFORE "BRANDED DOMAIN" FEATURE IS AVAILABLE
  • Treepl Portal
Improvement

BONUS: <head> Section Extra

"Meta Tags" is now "<head> section extra" and is powered by ACE editor.
Minor label text changes.
  • UI/UX
  • SEO
Improvement

BONUS: Advanced URL Redirects

Ability to create redirects to external sites or other domains of the current site.
Ability to create redirects from URL's that contain file extension (.asp, .php, etc.) but not .htm and .html
If you want to setup a redirect from "/some/url.htm" to any other, just create a new URL redirect using "/some/url" (excluding ".htm" extension) in FROM field. Such setup...
  • SEO
Improvement

BONUS: Create/Update Media Files In A Custom Module Item By Logged In Users

Convert Media type field to <input type="file" name="prop_[[media_property_alias]]"> on forms that are retrieved by Components toolbox.
All files will be uploaded and stored in "/media_images/[[module_id]]/[[item_id]]/[[filename]]"
  • Custom Modules
Improvement

BONUS: Extra Slash At The End Of URL

Remove general rule of adding "/" in the end of every URL.
All file URL's that list in the ‘Pages’ layout display as a folder structure ie. /contact/ instead of /contact so they are harder to copy/paste.
With the url having a "/" at the end, the problem here is that with and without the slash are actually two different...
  • SEO
Improvement

BONUS: Image manager in WYSIWYG

Ability to add images from the WYSIWYG editor, instead of copying the code to the code editor.
All files uploaded through WYSIWYG editor will be stored in a separate "uploaded_images" folder on FTP.
  • UI/UX
Improvement

BONUS: Primary Domain Management

"Primary Domain" field validation prevents from saving strings that don't match domain pattern.
If "Primary Domain" field is empty and "Enable automation of sitemap.xml" is enabled, the validation error would appear.
  • UI/UX
  • SEO
Improvement

Extra CRM Contact Fields

New contact fields:
- Status (text)
- Notes (textarea)
Fields can be used in a form builder.
  • CRM
Improvement

Properties Categories To Become Global

Modules > Properties > 'Categories' become global (like in BC) while 'Tags' remain unique per module.
  • Blogs
  • Custom Modules
v 2.1 Release date: 13 Nov, 2018
New Feature

BONUS: Duplicate Button

Ability to duplicate any existing 'Page', 'Content Template', 'Custom Module item', 'menu' etc.
  • General
New Feature

BONUS: Duplicate Form

Ability to duplicate any existing form.
  • Forms
Improvement

Pre-setup Default Workflow Notifications

All sites (with any plan) get a default workflow:
- Name: "Inquiry Workflow"
- "Inquiry Workflow" can not be deleted
- "Inquiry Workflow" can not be renamed

Workflow restrictions for "Essential" and "Business" plans:
- Disabled add/edit/delete options for all workflows other than "Inquiry Workflow"
- Disabled "Email Marketing" > "Emails" section
- Disabled workflow triggering on form submissions...
  • Workflow
Improvement

Add, Edit And Delete Custom Modules Items (Frontend)

Ability to Add, Edit And Delete Custom Module Items for logged in users.
Ability to setup Add, Edit Or Delete module item permissions for particular Custom Module
Ability to setup autoresponder when new module item created by logged in user.
  • Custom Modules
  • Secure Zones
Improvement

Automation Of Sitemap.xml

Add an automatic sitemap.xml listed for each site and refreshed every 24 hours. If we can make selections about importance of each page ie. priority and change frequency that would be ideal with the last modified date automatically updated. The sitemap needs to be setup with all urls being the ‘default’ domain ie. either the www or non-www.

This should include...
  • SEO
Improvement

BONUS: FTPS

- Switching from FTP to FTPS
NOTE: Login process is the same as it has been. However, you may need to change Protocol or Encryption setting in your FTP client of choice when using saved/favorited connections.
  • FTP
Improvement

BONUS: Show “Enabled/Disabled” In “Pages”

Show if a page is enabled or disabled to better handle individual page visibility.

For example in the same way as in menus.

pages-enabled-disabled.png

  • UI/UX
  • General
v 2.0 Release date: 30 Oct, 2018
New Feature

Add Basic Open Graph Fields

Option to set Basic Open Graph http://ogp.me/ for every site page, detailed custom module pages, overall blog pages, blog posts (article og), products, media downloads (structured properties) if possible.
  • SEO
  • New
New Feature

Avoid Redirects

Remove the current forward setup on each homepage so that the domain name can be the homepage which is not recommended.
- https://developers.google.com/speed/docs/insights/AvoidRedirects
  • SEO
  • New
New Feature

BONUS: Robots.txt On Templates

Include a robots.txt file on all website templates that allows for spidering of whole site.
  • SEO
New Feature

Link Manager

All link/file selection field types throughout the admin. Like a 'link manager' type widget, similar to in BC.
For example in 'menus', this will give the ability to select a link in the "link manager", instead of manually typing it in.

  • UI/UX
  • General
New Feature

Primary Language On Site

Include option to set the primary language on a site.
  • SEO
  • New
New Feature

Site Activation Billing

Integrate billing as a first step of activating the site from trial to live.
  • Treepl Portal
Improvement

"text type" to "media type"

In blogs and slides, make "text type" image source properties to become "media type" for easier image management.
  • UI/UX
  • Blogs
  • Galleries/Sliders
Improvement

BONUS: Import/Export Of Items On Tree View

Ability to import/export items (parent or child) in a tree view.
All items are imported/exported to/from the level where you perform the action.
Import/export on tree view
  • Banners
  • Pages and Templates
  • Blogs
  • Galleries/Sliders
  • Custom Modules
Improvement

Default Home Page Setup

Abbility to setup any page as a home page.
As a result the "/" URL will render that selected page.
  • SEO
  • General
Improvement

Disable Content From Site Search

Ability to disable certain content from site search functionality as it is currently bringing up results like list items, galleries etc. that don’t have a whole page dedicated to them.
  • SEO
  • General
  • New
Improvement

Email Template For Autoresponders

Ability to assign email templates to autoreponders
  • Forms
Improvement

File Manager In Templates And Snippets

The ability to access file manager in templates and snippets like in a normal page.
  • UI/UX
  • File Manager
  • New
Improvement

Title On Admin Pages

Remove the title of the admin pages, so it doesn't say "Treepl".

Title-On-Admin-Pages.png
  • Admin Panel
  • New
Improvement

Title Tag In Menu Items

‘Title’ tag for the menu items - For improved SEO.

Allow menu items to have a tooltip added and only show target, id and class fields if they aren’t empty like how BC renders menu bar items.

  • Menus
  • SEO
  • New
v 1.4 Release date: 16 Oct, 2018
New Feature

Secure Zones

Ability to:
  • Create secure zones
  • Assign content to secure zones
  • Assign secure zones to registered users
  • Secure Zones
New Feature

AU + EU Data Centers

Ability to create sites on AU (Sydney) and EU (Frankfurt) data centers. Planned for October 10th release.
  • Infrastructure
New Feature

Visual In-Context Editor (nICE) v1.0

Will be rolled out only to paid Treepl Partners.
WARNING: some Treepl Partners may get it earlier.
  • UI/UX
  • General
New Feature

Sitemap in XML

- sitemap.xml is generated by request (separate button).
- Sitemap management (code editor).

  • SEO
New Feature

"| number" Filter For Liquid

New filter for formatting:
- Format:
 {{variable | number: "[thousands separator]","[decimal point]","[decimals count]"}}

- Defaults:
{{variable | number: ",",".","2"}}

Example:
{{"3000" | number: ",",".","2"}}
Returns
3,000.00
...
  • Liquid
New Feature

BONUS: Custom Workflows

Ability to setup custom workflow notifications to Admin Users and/or manually added emails.
  • Forms
  • CRM
New Feature

BONUS: System Pages

- "Settings" > "System Pages" - adding a separate section for customizing system pages.
-"404" and "Form Submission Results" pages will be moved to this section.
New system pages: "Forbidden" (secure zone access denied page), "Email Confirmation", "Request Reset Password", "Request Reset Password Result", "Reset Password", "Unauthorized".
  • Admin Panel
  • General
New Feature

Social Meta Tags Into Head Section

Social meta tags appear in the <head></head> of a webpage.

  • SEO
Improvement

BONUS: "Last Updated" Date Of Module Item

"Last Updated" date tracking and accessibility through liquid tag: {{ this.LastUpdatedDate }}...
  • Pages and Templates
  • Blogs
  • Custom Modules
Improvement

BONUS: "Save and New" and Delete buttons

- "Save and New" button next to "Save" on Snippets and Custom Module items
- Move delete button to the right bottom of the editing page
  • UI/UX
Improvement

BONUS: Edit Template From The Page

Screenshot at Aug 27 18-03-44.png Allow navigation ("Edit" link) from the page to the template page directly.
  • UI/UX
  • Pages and Templates
Improvement

BONUS: Menus Improvement

- Splitting Menu properties (Name, Alias) and Menu builder into 2 separate tabs to remove extra white space
- Remove "Save" and "Delete" from "Menu builder" tab
  • Menus
Improvement

Branded Background Image Caching

Make the branded background image for the login page to cache.
  • UI/UX
  • Treepl Portal
Improvement

Split Up Elements Into Sections

module-panels-mockup.jpg Split up elements of the system and Custom Module items into sections
  • UI/UX
v 1.3 Release date: 25 Sep, 2018
New Feature

Manage Through FTP: Pages

- All pages of the site available via FTP
- Ability to create, delete or update pages via FTP
  • FTP
New Feature

Custom Module Items Import + Export

Ability to import and export Custom Module items through the admin.

  • Custom Modules
New Feature

Custom Module Items Search

- Ability to develop search by Custom Module items using search forms
  • Custom Modules
Improvement

BONUS: Multiple Files Deletion In File Manager

- Allow multiple files to be selected for deletion in tile view
- Double-click on on item opens it for editing
  • UI/UX
  • File Manager
v 1.2 Release date: 11 Sep, 2018
New Feature

BONUS: Dine&Wine Template

Dine&Wine template is available now in the Partner Portal (trial partner portal as well).
  • Templates
New Feature

CRM CRUD operations

Ability to manually create, update, and delete CRM records (contacts, form submissions).
  • CRM
New Feature

Force Download Handler

- Ability to specify "force download" behavior assigned to a certain media content link.
- If link matches the pattern than the content will be dowloadable to the site users regardless of the media content mime type.
Pattern: <link_to_media_content>?downloadable=1
Example:
File: /images/fruits/apple.png
Force Download Link: /images/fruits/apple.png?downloadable=1
As the result the apple.png media file will be downloaded and not rendered...
  • General
New Feature

WYSIWYG/Code Editor Switcher

- New Code Editor (ACE code editor) integrated on every page, snippet, item
- The "WYSIWYG/Code Editor" switcher saves preferred editing method for each page, snippet, item
- Removing "Code View" from the WYSIWYG
Adding this feature will resolve auto code cleanup issue in the WYSIWYG editor (you will have to use the Code Editor for all the...

  • UI/UX
  • Admin Panel
  • Pages and Templates
  • Snippets
  • General
  • WYSIWYG Editor
Improvement

Advanced Custom Property Editing

- Options builder for dropdown, checklist, radiolist property types
- Ability to change property types without loosing already saved data in the items

  • UI/UX
  • Custom Modules
Improvement

File Upload Type Field

- Ability to add custom form field for uploading files in forms
- Uploaded files are available through FTP (/_form_submissions/<formID>/<submissionID>)
  • Forms
Improvement

New Property Type: Media

- New property in Custom Modules - Media field type
- Calling out the File Manager with ability to insert image path right into the text field that is associated with the media type field
- "Make downdloadable" button that enables forced download action of the file instead of rendering in the browser (image, PDF etc.)
  • Custom Modules
Bugfix

Enable Release Expiry

Exclude items from rendering in lists through custom module compontent tag if:
- Item is not "Enabled"
- Current date is not in between "Release Date" and "Expiry Date"
  • Custom Modules
Bugfix

String Comparison in Liquid

- Ability to compare strings using ">" and "<" operators (just like in BC)
  • Liquid
v 1.1 Release date: 27 Aug, 2018
New Feature

URL redirects

Ability to setup custom URL redirects.
  • SEO
Improvement

Activate site

Automatic activation of a trial site into live site under end-client domain.

  • Treepl Portal
Improvement

Dashes In Slugs

All generated pages, blog posts and custom modules URLs to use dashes instead of underscores.
  • UI/UX
  • Pages and Templates
  • Blogs
  • Custom Modules
Improvement

More Liquid in autoresponders

Ability to render Liquid in "From Name", "From Email" and "Subject" fields.
Currently liquid is only rendered in "Body"
  • Forms
Improvement

Unsaved Data Alert

When you leave editing any content item without saving changes, the alert message appears with an option of saving the changes prior to leaving the page.
  • UI/UX
  • Admin Panel
Bugfix

Filter By DataSource

Liquid module component doesn't filter by DataSource field
  • Custom Modules
Bugfix

Liquid Components In Autoresponders

Component modules do not work properly in autoresponders.
  • Forms
v 1.0.1 Release date: 14 Aug, 2018

Full Release Notes

Released.

Show more less
New Feature

Forms

- Full stack form builder
- reCAPTCHA v2
- Custom layouts 
- Custom autoresponder layouts supporting Liquid

  • Forms
New Feature

Simple CRM

- CRM Contacts from form submissions
- Form submission records

  • CRM
Improvement

Instant site creation

- Ability to create a trial site instantly
- Ability to duplicate trial and live sites
Note: all live site duplicates will be created as new trial sites
  • Treepl Portal
Bugfix

Filtering by category

Filtering a custom module by category doesn't work.
  • Custom Modules