Help Centre Forum

TOTECS Forums

TOTECS Platform Release 18.02
Author
Thread

Author moderator
16th July 2024

New Features


TOT-4297 - Product Add To Basket Spreadsheet Importer content managed web page area

On a content managed web page a new web page area type has been created called "Product Add To Basket Spreadsheet Importer" that provides the ability to add products to basket that are listed in a spreadsheet CSV file. Within the area it allows one or more CSV spreadsheet files in a computer to be selected, or have pasted the contents of a CSV spreadsheet file into the area's text area input. From the CSV spreadsheet data a list of product records is read and added to an "Add To Basket" queue. The queue can then be processed to automatically add products to basket in batches of 20 products at a time, until the queue is fully processed or aborted at any time.

In the spreadsheet CSV data provided it needs to contain columns for Product Code, and Quantity for each product row. After a user clicks a button to process the queue, it will attempt to add each product and its quantity to the user's active basket. If a product fails to be added to the basket then an error message can display, indicating the products that failed to be added to basket and why it had failed.

The area contain settings that allow the user to optionally control how the CSV data provided can be read, based on common CSV data formats that applications like Excel, Google Sheets, or Libre Office support.

Within the Administration Centre, under the Websites menu, within the Websites interface, within the Web Page Editor, when a "Product Add To Basket Spreadsheet Importer" area is added to a web page, it contains the following settings:

  • Initial Spreadsheet Data Format: Sets the spreadsheet data format that is initially selected with the area's drop down displays. Controls how CSV data should be read
    • Comma Delimited (CSV) - Reads a comma delimited CSV file, where data rows are separated by the new line character.
    • Comma Delimited (CSV MS DOS) - Reads a comma delimited CSV file, where data rows are separated by the carriage return and new line characters
    • Comma Delimited (CSV Macintosh) - Reads a comma delimited CSV file, where data rows are separated by the carriage return character
    • Tab Delimited (CSV) - Reads a tab delimited CSV file, where data rows are separated by the new line character
    • Space Delimited (CSV) - Reads a space delimited CSV file, where data rows are separated by the new line character
    • Colon Delimited (CSV) - Reads a colon delimited CSV file, where data rows are separated by the new line character
    • Semi Colon Delimited (CSV) - Reads a semi-colon delimited CSV file, where data rows are separated by the new line character
  • Add Queued Products Immediately To Basket: If set to Yes then when one or more spreadsheet files is selected, or CSV text area records added, then the products added to the queue will immediately called to add products to basket.

Functionality Affected: Project Traffic Statistics administration centre interface
Impact: Normal


TOT-4307 - Customer Account Contacts Connector Data Import

A new data import named "Customer Account Contacts" has been created that can import a list of contacts that are assigned to each customer account from the Connector software. The data import can create and update a list of contacts assigned to each customer account, as well as deactivate contact records that are no longer being imported. Additionally the data import can optionally create new users for each customer account contact record, and link the contact record the each new user.This allows multiple people associated to each customer account in connected business systems to have a user automatically created for them. If the contact is removed the connected system, then the data import can optionally deactivate the user who's linked to the contact record.

After logging into the Administration Centre, under the Data menu, within the Data Imports interface, under the Connector Imports tab, a new data import type labelled "Customer Account Contacts" displays. If selected and the Start Import(s) button is clicked on, the data import will call the Connector software to run its Customer Accounts Contacts data export to retrieve the contact data, then import it into the project.

Clicking the settings button on the data import type allows 2 settings to be configured:

  • Create users for new contacts: If selected then when a new customer account contact record is created then a new user will also be created if a unique Login ID of the user can be defined.
  • Deactivate users assigned to deactivated contacts: If selected, then when an existing customer account contact is no longer imported and deactivated, if their is a user linked to the contact, then the user will also become deactivated.
Within the Administration Centre's Users menu, within the Customer Accounts interface, after customer account records have loaded, an additional column displays for the Contacts. Clicking on the Contacts button will open the Account Contacts dialog that displays a table of all the contacts created against the customer account. This allows administrator users to the see the details of each contact associated to the customer account.

Functionality Affected: Customer Account Contacts Connector Data Import
Impact: Normal


Improvements


TOT-4201 - Remember user's preference for sorting products within product listing content managed web page areas

On a content managed web page that contains a Product Search Results Listing, Category Listing, Related Products Listing, Product Combination or Customer Account Contract Detail area, there is the ability sort the products listed in the area, based on a user's preference previously remembered in their browser using a cookie. This allows users to load lists of these products using their preferred product sorting field and direction if allowed to, providing improved usability by not having re-sort products on each web page load.

Within the Administration Centre, within the Websites interface, upon modifying a content managed web page within the Web Page Editor, for each area, in the area settings a new drop down setting has been added labelled "Allow User Sort Products Preference". If set to Yes, then the products listed in the area are allowed to be sorted based on the user's previously saved preference. If set to No, then area will sort the products based on the sorting setting of the area if available, else based on the default product sorting setting for the project or area.

Within the Product Search Results Listing, Category Listing areas, if the user has the ability to change the sorting field or direction and the areas have the "Allow User Sort Products Preference".area setting set to Yes, then the user's sorting preference will be saved to a browser cookie, that can then be used by the other product listing areas to sort the products if allowed to.

Note that the user's product sorting preference is stored in a user's browser cookie. If they are using a private/incognito web browser, or clear their browser cookies, then the saved sorting preference will be cleared.

Functionality Affected: Product Search Results Listing, Category Listing, Related Products Listing, Product Combination or Customer Account Contract Detail content managed web page areas
Impact: Normal


TOT-4241 - Ability to remove and exclude deals from product in the basket within a Basket Product Listing content managed web page area

On a content managed web page that contains a Basket Product Listing area, for each product record listed in the area, there is now the capability to allow users to remove a product deal from a product in their active basket. This may be needed if a user doesn't wish to receive the deal. It can also be relevant for sales representative users who don't want a deal to override pricing they have set for product.

Within the Basket Product Listing content managed webpage area, within the Basket Product Record format, the format now contains a new hook called "remove_product_deal_onclick" that can be embedded within a button's onclick attribute, to allow a deal to be removed from a product if the deal was previously applied.

Once the deal has been removed from the product in the basket the product will be repriced, reverting back to standard pricing of the product. Additionally all remaining products in the basket will have deals re-calculated, since deals on other products may be conditional on the deal previously applied to the product that's now removed. If the product had no pricing set, then if the deal is removed, it will cause the product to also be removed from the deal.

For the product in the basket that had the deal removed, it will remain not allowing deals to be applied against it automatically until the product has been removed from the basket, either by being directly deleted or removed on order submission. This ensures that if the user changes the quantity or price of the product in the basket, then no deal will cause the pricing changes to be overwritten.

Functionality Affected: Basket Product Listing content managed web page area
Impact: Normal


TOT-4283 - Facility Role Permission to ignore changing sales representative set basket product prices if Re-price Basket Products On Login, Basket Switching And Order Checkout feature is turned on

if the "Re-price Basket Products On Login, Basket Switching And Order Checkout" setting is turned on within the Administration Centre's Basket Store Settings interface that re-prices all products within the user's basket when they next login, switch baskets, or proceed to order checkout, if a sales representative user had changed the price of any products in their basket, then there is now a Facility Role Permission that allows the sales representative users to have their set prices to be ignored from being re-priced. This permission ensures that targeted sales representative users don't lose the customised pricing that they have set within their active basket if the re-pricing feature is turned on.

Within the Administration Centre, under the Users menu, within the User Permissions interface, after selecting a Facility Role and clicking on the Edit button, within the Role Permissions section a new permission has been added labelled "Re-Price Sales Rep Set Product Pricing". If set to Allow then any users assigned to the Facility Role will have all product pricing in their active basket re-priced if within the Stores menu, Basket Settings interface the "Re-price Basket Products On Login, Basket Switching And Order Checkout" setting is set to Yes. If the "Re-Price Sales Rep Set Product Pricing" permission is set to Deny then any prices for products in the user's active basket that were set by a sales representative user will not be re-priced if the repricing setting is set to Yes.

Functionality Affected: Basket Clean server action
Impact: Normal


TOT-4284 - Display customer account assigned price-level price within Product Detail and product listing types of content managed web page areas

On a content managed web page containing a Product Detail area, or areas that display a list of products (Product Search Results Listing, Category Listing, User Details/Favourites/Orders, Customer Account Contract Detail, Related Products, Model Products), there is now the ability to display the price-level price of the product, based on the price-level that the user's active customer account current is assigned to. This price-level pricing is only display if the customer account's assigned price-level price is less than the final price calculated for the user, and if the user's assigned Facility Permission Role has a new permission named "View Product Price-Level Price" set to Allow .Additionally within each area there is also the ability to display the discount percentage between the account's price-level price, and its final price. This allows users to be aware when a product's price has been discounted from the price-level price, and by how much. This price-level pricing data could be labelled as "Was/Now" pricing, or "Discounted From" or "Reduced From", amount other discounting terms.

Within the Administration Centre, under the Users menu, within the User Permissions interface, when editing a Facility Role, the permission named "View Product Price-Level Price" now exists. If set to Allow then any users assigned to the facility role are allowed to view a product's price-level price for the price-level their active customer account being used is assigned to, when the price-level price is higher than the final product price. If the permission is set to Deny then the assigned users are never allowed to see the current price-level price of a product.

Within the Websites Administration Centre, under the Websites menu, within the Websites interface, within the Web Area Formats Libraries, navigating to the Product Detail area, or Product Search Results Listing, Category Listing, User Details/Favourites/Orders, Customer Account Contract Detail, Related Products, Model Products areas, for the formats named "Product Detail", "Product Search Record", "Product Search Record2", "Product Search Record3", the following format hooks now exist that allow price-level pricing data to be embedded into the areas if the user has permission to view product price-level price data.

  • product_price_level_price_inc: Displays the price-level unit price (including tax) of the product initially shown in the area, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_ex: Displays the price-level unit price (excluding tax) of the product initially shown in the area, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price: Displays the price-level unit price (either excluding or including tax based on user setting) of the product initially shown in the area, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_inc_currency: Displays the price-level unit price (including tax) of the product initially shown in the area in the project''s default currency, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_ex_currency: Displays the price-level unit price (excluding tax) of the product initially shown in the area in the project''s default currency, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_currency: Displays the price-level unit price (either excluding or including tax based on user setting) of the product initially shown in the area in the project''s default currency, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_discount_rate: Displays the percentage difference between the price-level unit price of the product and the final account price found for the product, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_discount_ex: Displays the price difference (excluding tax) between the price-level unit price of the product and the final account price found for the product, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_discount_inc: Displays the price difference (including tax) between the price-level unit price of the product and the final account price found for the product, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_discount: Displays the price difference (either excluding or including tax based on user setting) between the price-level unit price of the product and the final account price found for the product, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_discount_ex_currency: Displays the price difference (excluding tax) between the price-level unit price of the product and the final account price found for the product in the project''s default currency, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_discount_inc_currency: Displays the price difference (including tax) between the price-level unit price of the product and the final account price found for the product in the project''s default currency, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_discount_currency: Displays the price difference (either excluding or including tax based on user setting) between the price-level unit price of the product and the final account price found for the product in the project''s default currency, based on the price-level that is associated the active customer account of the user.
  • product_price_level_price_inc_element_id: ID of the element that displays the price-level unit price (including tax) of the product, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_ex_element_id: ID of the element that displays the price-level unit price (excluding tax) of the product, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_element_id: ID of the element that displays the price-level unit price (either excluding or including tax based on user setting) of the product, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_inc_currency_element_id: ID of the element that displays the price-level unit price (including tax) of the product in the project''s default currency, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_ex_currency_element_id: ID of the element that displays the price-level unit price (excluding tax) of the product in the project''s default currency, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_currency_element_id: ID of the element that displays the price-level unit price (either excluding or including tax based on user setting) of the product in the project''s default currency, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_discount_rate_element_id: ID of the element that displays the percentage difference between the price-level unit price of the product and the final account price found for the product, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the percentage to update when required.
  • product_price_level_price_discount_amount_ex_element_id: ID of the element that displays the price difference (excluding tax) between the price-level unit price of the product and the final account price found for the product, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_discount_amount_inc_element_id: ID of the element that displays the price difference (including tax) between the price-level unit price of the product and the final account price found for the product, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_discount_amount_element_id: ID of the element that displays the price difference (either excluding or including tax based on user setting) between the price-level unit price of the product and the final account price found for the product, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_discount_amount_ex_currency_element_id: ID of the element that displays the price difference (excluding tax) between the price-level unit price of the product and the final account price found for the product in the project''s default currency, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_discount_amount_inc_currency_element_id: ID of the element that displays the price difference (including tax) between the price-level unit price of the product and the final account price found for the product in the project''s default currency, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_discount_amount_currency_element_id: ID of the element that displays the price difference (either excluding or including tax based on user setting) between the price-level unit price of the product and the final account price found for the product in the project''s default currency, based on the price-level that is associated the active customer account of the user. Set hook within the ID element, to allow the price to update when required.
  • product_price_level_price_display_id: ID of the element that displays if the user has permission to view the price-level price of a product, based on the price-level assigned to the active customer account the user. Set hook within the ID element, to allow the element to hide or show when required.
  • product_price_level_price_display_class: Name of the styling class that initially displays if the user has permission to view the price-level price of a product, based on the price-level assigned to the active customer account the user. Set hook within the class attribute of an element. Displays either product_price_level_price_show or product_price_level_price_hide

Functionality Affected: Product Search Results Listing, Category Listing, User Details/Favourites/Orders, Customer Account Contract Detail, Related Products, Model Products content managed web page areas
Impact: Normal


TOT-4292 - Customise styling of area overlay masks within content managed web page areas

On a content managed web page that contains any areas, when an area's content is being reloaded or updated and a mask overlays the area's content, there is now the ability to customise how an area's mask looks, and the font it uses globally across all areas.

Within the Administration Centre, under the Websites menu, within the Websites interface, after clicking on the domain of a website, within the Web Site Details interface the following settings have been added:

  • Web Page Area Loading Mask Custom Styling Class: Set the name of a CSS styling class, that will be embedded within the area mask. This CSS class can then have styling applied to it within a CSS file to control the look of the mask.
  • Web Page Area Loading Mask Text Font Style: Set a CSS styling rule that controls the font used for the text that displays in the mask.
  • Web Page Area Loading Mask Text Font Colour Style: Set a colour that controls the background colour of mask. The colour can be a hexidecimal, RGB, or color name value.

Functionality Affected: Website Detail administration centre interface
Impact: Normal


TOT-4293 - Format hook to show ID of a Basket Product Field Value within the Order Confirmation Email

Within the Administration Centre, under the Stores menu, within the Checkout settings interface, for the Order Confirmation Email Order Detail Product Field Format setting, it now contains a format hook named "order_product_field_id" that allows the ID to be set against each Basket Product Field Value.

Functionality Affected: Order Confirmation Notification Email
Impact: Major


TOT-4294 - Block scrapers that identify as GeedoProductSearch, Semrush, Nutch, Barkrowler, ClaudeBot, Orbbot, Anthropic-ai, ChatGPT-User, FriendlyCrawler, GPTBot, Image2dataset, ImagesiftBot, Omgilibot,CensysInspect, Expanse, internet-measurement, Telegra

Website traffic for content managed websites that utilise the TOTECS Ecommerce Platform's crawler block list will now block allowing requests from scrapers who identify with the following user-agents GeedoProductSearch, Semrush, Nutch, Barkrowler, ClaudeBot, Orbbot, Anthropic-ai, ChatGPT-User, FriendlyCrawler, GPTBot, Image2dataset, ImagesiftBot, Omgilibot,CensysInspect, Expanse, internet-measurement, Dataprovider, Dalvik, Go-http-client, IonCrawl, ISSCyberRiskCrawler,wp_is_mobile, babbar.tech

This reduces unwanted website traffic, leading to less traffic cost, and less public website data being harnessed by 3rd party companies for their own purposes.

Functionality Affected: Content managed websites
Impact: Normal


TOT-4296 - Remember selected invoices after pagination occurs within the Customer Account Invoice Listing content managed web page area

After a user has logged into a content managed website, on a content managed web page containing a Customer Account Invoice Listing content managed web page area. if the area displays more than one page of invoice records, and the user has the ability to select invoices to pay for using the checkbox form elements, then if the user pages to another page of invoice records and back again, then the invoice records that were previously selected will now show selected check boxes and selected invoice amount. This allow users to pay for selected invoices found across multiple pages of records.

Additionally If the invoices records are filtered on any search filters (including date ranges) then any invoice records previously selected will remain selected when the invoice listing is reloaded. This ensures users can find, and build up a list of selected invoices across multiple searches, avoiding having to make multiple payments.

There is also the ability to display a button in the area, allowing all selected invoice records to be deselected. This can be helpful for users if they wish to deselect all records, by doing so with one click instead of having to find every selected record.

Within the Customer Account Invoice Listing content managed web page area, its Customer Account Invoice Listing format has had one new format hook added:

  • invoices_unselect_all_onclick: Javascript function that unselects all invoices in the area, unselecting each selection checkbox for each invoice record.

Functionality Affected: Customer Account Invoice Listing content managed web page area
Impact: Normal


TOT-4300 - Embed ReCaptcha within the User Registration content managed web page area

On a content managed web page that contains a User Registration area, within the area's User Registration Form format, there is now the ability to embed a Recaptcha form element, that is used to help prevent non-humans from being able register a new user. This can help protect against malicious automated software being able to register new users, by forcing the guest user to correctly identify themselves as a human, based on selecting Recaptcha's checkbox, then answer the Recaptcha question if required (such as selecting images that contain certain objects).

The area uses the existing Recaptcha account and settings set up within Administration Centre's Website Settings interface to allow the Recaptcha to load. Within the Users menu, in the User Registration Profiles interface, under the Mandatory Registration Fields section, a new setting labelled "Enforce ReCaptcha" has been added. If selected, then it requires a Recaptcha element to be embedded within the User Registration area, and will be checked that the user correctly answers the Recaptcha. If not then in the Validation Error Message setting a customised message can be set that the user will see if they don't correctly answer the Recaptcha.

Within the Administration Centre's Websites interface, for a website, under the Web Area Format Libraries, within the User Registration area's User Registration Form format, a new format hook labelled "user_registration_recaptcha". This will display a reCAPTCHA form element that the user must fill out to prove that they are a human when registering a new user. The format hook will only display a Recaptcha form field in the User Registration Profile area if the user registration profile controlling the area has the "Enforce ReCaptcha" field set to Mandatory, and the setting within within the Website Settings intefrace named "ReCAPTCHA Site Key" has been previously set up.

Functionality Affected: User Registration content managed web page area
Impact: Normal


TOT-4302 - Filter Monthly Project Traffic statistics to a single day within the Project Traffic Statistics Administration Centre interface

After an administrator user logs into the Administration Centre, after clicking on the Statistics menu, within the Project Traffic Statistics interface, under the Monthly Project Traffic section, there is the ability to filter and show statistics for a single day. This additional level of daily dynamic server requests allows administrators to see more fine grain detail of traffic that occurring within the project. This may help see patterns of peak website traffic usage over each day day, or help investigate increased traffic from a user, or geographic location in a single day.

A new drop down now appears next to the Refresh button with the initial option "For Whole Month". If that drop down is changed to a selected day of the month, then the Monthly Requests graph will change to show the number of server requests made for the single selected day, broken down to an hourly basis. The pie charts for "Requests By Search Engines, Crawlers and Software ", "Requests By Device Type", and "Requests By Platform Type" will update to show totals only for the selected day. If the "Export", "View Most Requests By IP Address" or "View Most Requests By Users" buttons are pressed on, the corresponding statistics shown will also cover only the selected day.

Functionality Affected: Project Traffic Statistics administration centre interface
Impact: Normal


Bug Fixes


TOT-4295 - Removal of vulnerabilities within News/Blog Listing content managed web page areas

Within content managed webpage containing News/Blog Listing, News/Blog Items, and News/Blog Item Crumbs areas vulnerabilities have been removed so that nefarious 3rd parties cannot indirectly access that underlying database and try obtain data they do not have permission to access.

Functionality Affected: News/Blog Listing, News/Blog Items, and News/Blog Item Crumbs content managed web page areas
Impact: Normal


TOT-4298 - Removal of vulnerability within the Order Detail Administration Centre interface

Within Administration Centre cross-site scripting vulnerability was found and has been removed within the Order Detail Admnistration Centre interface that previously allowed well crafted javsacript code to execute if embedded within the Order Instructions field. This vulnerability has been removed to prevent nefarious 3rd parties exploit and gaining access to Administration Centre content without knowledge or consent.

Functionality Affected: Order Detail Administration Centre interface
Impact: Normal


TOT-4306 - Unable to create new news/blog item from within the News Item Form content managed web page area

On a content managed web page containing a News Item Form area, for a logged in user if they had typed in the heading and body of the new news item/blog, then clicked the Create button, then news/blog item would not able to be created as expected.
This issue was caused by a issue with the new version of the web server software that has now been fixed to allow new news/blog items to be created.

Functionality Affected: News Item Form content managed web page area
Impact: Normal