5.4.2.2

Bookmarks

New Features & Enhancements

Remap Manager Improvements

#6859 - Idea by Ashish Karelia
#8631 - Idea by Nelson Silva 
#11143 - Idea by Andrew Sharpe

The Remap Manager has had several bug fixes, enhancements, and UI improvements added.

First of all, we've made filtering the remap list a lot easier by adding more filter tools for you to use. You can now filter the list based on remap type and the various attributes a remap might have.

When you export the remaps, the CSV file will now contain more information about each remap, including if it's an invalid remap or if the original remap URL is already in use.

We've also fixed some import/export compatibility issues so that it's much easier to export, edit in Excel, and import the list without having to fix the formatting of things like dates or having to worry about the column header row.

Finally, the Method column for a remap entry will now say "CSV" if the remap has been created using the CSV Upload tool.

We've also got more enhancements and improvements planned for the Remap Manager in future upcoming versions.


^as_asset Keyword Modifier Enhancements

#11208

The ^as_asset Keyword Modifier is a powerful and useful tool for extracting asset data from a supplied asset ID in a keyword. The limitation has always been that it can only be used on single asset ID values can and only return single values, for example:

%asset_metadata_related_asset^as_asset:asset_name%

This modifier has now been enhanced to support two new functions:

  1. Ability to apply it to an array of asset IDs.
  2. Ability to return multiple asset values.

So, let's say you have a Related Metadata Field that can store multiple asset IDs. The output of that metadata field might be something like this:

[1111,2222,3333] 

We can now apply the ^as_asset keyword modifier to return asset data against each of those IDs as a single keyword:

%asset_metadata_related_assets^json_decode^as_asset:asset_name%

Which will give us an array of asset names instead:

["About Us","Products","Services"]

If we wanted multiple values to get returned, we'd simply just add each value (separated by a comma) to the modifier:

%asset_metadata_related_assets^json_decode^as_asset:{asset_name^uppercase},asset_url_path%

Which will give us an array of JSON objects for each asset:

[
  {"asset_name^uppercase":"ABOUT US","asset_url_path":"\/about-us"},
  {"asset_name^uppercase":"PRODUCTS","asset_url_path":"\/products"},
  {"asset_name^uppercase":"SERVICES","asset_url_path":"\/services"}
] 

Using these keywords and modifiers together with SSJS, you can quite easily create formatted listings of assets without the need to use an Asset Listing at all.


Keyword to List Direct Asset Children

#11203 - Idea by Michal Bielecki

A brand new %asset_children% keyword has been added that returns and array of asset IDs of the directly linked asset children of any asset.

The order of the assets will be based on the order in the Asset Map and you can also specify specific link types to return.

For example, the following keyword:

%globals_site_children_link_type_1%

will return an array of all Type 1 linked asset children of the Site asset:

["5834","43845","30518","48227"]  

To specify more than one link type, simply add the number to the end of the keyword, like this:

%globals_site_children_link_type_1_2%

Together with the enhanced ^as_asset Keyword Modifier, we can easily feed asset information into an SSJS function to print the children of an asset in a formatted list:

<script runat="server">
var assets = %asset_children_link_type_1^as_asset:asset_short_name,asset_url^empty:[]%;
if(assets.length > 0){
    print('<ul>');
    assets.forEach(function(asset){
        print('<li><a href="'+ asset.asset_url +'">'+ asset.asset_short_name + '</a></li>');
    });
    print('</ul>');
}
</script> 

Simplified Asset Morphing

#7287
#7807 - Idea by Anthony Ponomarenko

Morphing of assets has been simplified with two main enhancements.

First, you no longer need to have the asset in an Under Construction status before you can Morph it. The outdated and un-user friendly CAPTCHA input has also been removed.

Secondly, when morphing User types, you no longer need to go via a specific morphing order to upgrade/downgrade an account. For example, a basic User can now be directly morphed into a Backend User without having to get changed to a Simple Edit User first.


Ace Code Editor in Raw HTML Content Containers in Edit+

#10641

The Ace Code Editor has been available for Raw HTML Content Containers for a long time in the Admin Mode interface.

We've now finally ported this to Edit+ so that users in that interface can have a much better experience when dealing with code editing.


Tracking of Original User in Logs When Logging In as Another User

#10841 - Idea by Elizabeth Wyatt

Previously, when you used the Log In As feature to imitate another user in Matrix, any actions you did, such as saving content or changing status, would get tracked in the logs as the user you logged in as.

Now, the original user will be recorded in the logs so that you can accurately identify if any actions were done as another user logging in as someone else.


Keyword Modifier to Execute Server Side JS

#11097

A new Keyword Modifier has been developed that lets you execute SSJS on the contents of a keyword before it's printed to the frontend.

Due to SSJS being evaluated after any global keywords by default, this can be useful for when you need to have SSJS code evaluated before it's returned in global keywords.

For example, let's say you have a Standard Page with some SSJS code in it. If you use %globals_asset_contents_raw:1234% in a Trigger Condition or Action to source that content, the SSJS within it will not have been executed at the time of the Trigger firing.

Simply appending ^run_ssjs to the keyword will make all the SSJS code within it execute in it's own thread before the keyword being fully evaluated.

%globals_asset_contents_raw:1234^run_ssjs%

New Asset Evaluation Keywords

#10996

New keywords have been added for evaluating the state of an asset when used in listing assets such as Asset Listings and Search Pages. These new keywords are:

  • Booleans:
    • %asset_is_first% - If the asset is the first one on the current page (or in the current group if grouping is used).
    • %asset_is_last% - If the asset is the last one on the current page (or in the current group if grouping is used).
    • %asset_is_list_first% - If the asset is the first one in the whole list.
    • %asset_is_list_last% - If the asset is the last one in the whole list.
  • Positions:
    • %asset_page_position% - The asset's position on the current page (or in the current group if grouping is used).
    • %asset_list_position% - The asset's position in the whole list.

In addition to that, a new standard asset evaluation keyword has been added called %asset_is_frontend_asset%, which returns a boolean value (0 or 1) if an asset is the same as the current frontend asset being viewed. This can be used outside of listing assets as well, for example in Triggers or in Paint Layouts.

These new keywords make it easier to create conditional formatting such as:

<li class="%asset_is_frontend_asset^eq:1:active%">
  %asset_name_linked%
</li>
%begin_asset_is_list_last%
<li>No more results</li>
%end_asset% 

JS API Improvements

#6876 - Idea by David Cook
#7466 - Idea by Andrew Sharpe
#7500 - Idea by Andrew Sharpe
#10061- Idea by Cameron Coley (Squiz Client)

Several improvements around error handling and callbacks have been added to the JS API.

These include:

  • #6876 - Better handling of fatal PHP errors so that you can properly catch and handle the error response.
  • #7466 - Support for JavaScript Promises (also see www.promisejs.org).
  • #7500 - A new errorCallback function that you can use to properly handle XHR response codes other than 200 .
  • #10061 - More information for errors returned when using the createFileAsset function.

Other Features & Enhancements

  • #5324 - Ability to exclude fields from the CSV export on Custom Form Submission Log
  • #5848 - Block common passwords by default
  • #7303 - Ability to purge multiple root nodes at once
  • #7586 - Form summary keyword for sections
  • #8686 - Workflow stream name included in Workflow Logs
  • #8829 - Make Recurring Event consistent in layout with single events when using %asset_contents%
  • #9138 - Remove "asset category" submenu in Asset Map when only one category exists
  • #9761 - Improve error handling on screens that try and load assets the user doesn't have read permission for
  • #9955 - Add Python (py) files to the support mime type list
  • #10039 - Name of the form apply on csv file when downloading the submission logs
  • #10922 - Improve the way that schemas and permissions are cascaded down to linked assets
  • #10961 - Hide sections that cannot be edited on certain asset types
  • #10964 - Show warning if Ignore Permissions is enabled on a Trigger Action
  • #10982 - Support right click to open in new tab for assets in asset finder in Edit+
  • #10994 - You should not be allowed to change file extensions on file specific asset types
  • #11031 - Design and Design Customisation assets should have a Dates section on their Settings screen
  • #11119 - Add the ability to move multiple assets to trash when selected within the asset map in admin
  • #11143 - Deal with fragments in the remap manager source URL
  • #11174 - Dynamic root nodes for listing assets should accept array values
  • #11201 - Code cleanup in antivirus code
  • #11224 - The display name for a content container in Edit+ should always use the asset name

Bug Fixes

  • #8651 - replace_url.php Matrix script breaks override designs and paint layouts
  • #9946 - Preview iframe is blank when www URL is higher in the root URL list than non-www
  • #10162 - Can't tell what type code specific cache settings are configured
  • #10717 - error viewing form submissions with country after 5.4.1.1 upgrade
  • #10818 - Content Container Templates not updating in Edit Plus
  • #10840 - URL keywords in customised workflow messages generate incorrect URLs
  • #10911 - HPRM error handling and file downloads
  • #10943 - Non closing HTML tags breaks admin interface
  • #10952 - Binoculars for shadow assets not directly linked under their bridge don't work properly
  • #10955 - Hitting CTRL on the keyboard while focused in the WYSIWYG editor activates the Save button
  • #10957 - When you save your changes on the certain screens, you lose the locks
  • #10958 - Binoculars on Triggers in Folders don't work properly on collapsed Trigger Manager when trigger ID exceeds asset map set limit
  • #10960 - Edit+ is pulling asset name from different context when cancelling safe edit.
  • #10970 - Instance keyword with PHP date format incorrect in presence of SQ_CALENDAR_DATE get parameter
  • #11014 - "Cancel Safe Edit" on an asset with many dependant children, causes high number of asset updated events on the parent asset.
  • #11045 - Clicking 'Show in Asset Map' from Trigger in history in fresh Matrix window breaks asset finder
  • #11048 - Files get lost when name changed to the same name plus invalid-as-web-path characters
  • #11049 - Bypass reserved webpath restrictions
  • #11080 - SOAP data source can cause issues with binary content due to use of json_encode
  • #11082 - getAssetHref() returns incorrect relative URLs in recache mode
  • #11092 - PayPal IPN Postback Validation
  • #11093 - Problem with nesting asset using "current asset" parameter map setting in an Edit Mode login design
  • #11109 - Fix localised backend file upload error messages in html_form
  • #11113 - Content containers can be editable but not save-able if you have the locks on the container, but not on the page contents screen
  • #11116 - Asset status cannot be changed when workflow with specific steps is applied.
  • #11118 - In the Global Search and Replace Tool, Tooltips do not work on Asset Search Result items, js error is thrown
  • #11120 - Certain characters in a metadata value component's name causes breakage
  • #11121 - Metadata value components don't display properly after save
  • #11148 - The Default "Password Change Design" has incorrect closing tag
  • #11150 - Remap manager strips trailing slashes in 'To' address
  • #11151 - Viper insert link tool cuts off trailing characters
  • #11158 - Paint Layout's content file for the un-customised context not getting cleaned up
  • #11162 - Once an image is in the trash, it can't be previewed
  • #11188 - Preview in new window issue fails when asset's web path changes and asset map is not refreshed
  • #11210 - Potential for error in Calendar Search Page if large number of results and asset ID low enough
  • #11211 - Creating a file asset using createAsset in JSAPI is returning a fatal error
  • #11220 - system_integrity_fix_duplicate_rollback_entries.php not fixing the duplicate entries with key fields having NULL value
  • #11223 - Search and replace tool doesn't check for asset type selection properly
  • #11228 - There are two asset icons per user in the Global Preferences Active Locks screen
  • #11235 - Asset Type "" is not installed on this system - update link trigger action.
  • #11243 - Compare to live button is not shown properly when first switching to Preview mode in Edit+ in Chrome
  • #11271 - %frontend_asset% with modifier in type formats of listing asset only works if the full keyword is also used
  • #11279Asset Type "" is not installed' on Cache Manager Type Code setting screen