New: When a user subscribes (unpaid or free sign up) to a group it just adds minimal details and does not require them to set passwords, etc. When they later are required to register for some reason any details they previously entered will now populate the form.
New: PayConfirmedOrdersDue
will look for orders with payments due that have a stored payment method associated with it and will make the payment, complete the order if necessary and send emails. Suggest to set this up in automated tasks to run each night.
New: TradingItem.PaymentTerms
is a list of available payment terms for that item. You are able to set an alternative price for the item based on those payment terms. For example, say regular price for a course is 300, you may set up a payment terms for 4 monthly payments at 125 so item price would then be 400.
New: BusinessCollection.Import.MatchItemBy
will now show group values such as GroupMember
when importing Memberships
. In this case it will match the Group
and Member
values.
New: Additional image types (apng, avif and webp) have been added to acceptable list when uploading via file manager.
New: JavaScript function and styles for accordians.
Fix: ConfirmedOrder.PayByCreditCard
will set that method to the order for future payments when terms such as installments are set.
Fix: ConfirmedOrder.PayByStoredPaymentMethod
will not set that method to the order for future payments if it fails.
Fix: Percentage values PaymentTerm.DepositPaymentPercentage
and PaymentTerm.ProgressPaymentPercentage
decimal places have increased for precise rounding.
Fix: ConfirmedOrder.TotalPaymentUnconfirmed
was showing incorrectly.
New: Can now set a subscription to unlimited time.
New: HTMLDefinitionAttribute.StylesheetsExpression
allows you to set an array of stylesheets to be used with the HTML editor.
New: email-styles.css
is the default stylesheet for HTML properties of emails. For example, Email.Content
and Application.SendEmail.Content
.
New: When an email is generated the content from any linked files are embeded in style tags.
New: Function Common.GenerateHTMLAudio
which will generate an audio player.
Fix: Now bypasses HTML compression errors.
Fix: Item.CreatedOn
format without seconds.
Fix: BusinessObject.RelativeURLFilePath
now uses BusinessObject.BasePath
.
Fix: Base path for course modules and course activities.
Fix: Application.VisibleUsers
now includes the logged in user.
Fix: When logged in as an administrator and selecting a user to complete a task like enrol them to a course.
Fix: Various base script and stylesheet changes.
Fix: Changes to base styles for HTML editor.
New: When adding new custom collection via the definition inspector you can choose the repository as:
New: When adding a collection and selecting the inheritance you can now also choose None or Items.
New: Set CollectionClassDefinition.PullExpression
to return an array of dictionary objects which are imported to a collection when first loaded. For example, create a collection for storing in the application podcasts pulled from an RSS feed.
New: XMLToObject
now includes attributes.
New: TransformObject(Object, Maps)
will transform an object to another using maps which is a array of path, name and submaps. For example, ['rss.channel.item[]', [['name', 'Title'], ['desc', 'Description'], ['review', 'Reviews', [['score', 'Rating'], ['comment', 'Comment']]], ['img[].url', 'Images']]]. This will get every item in the rss feed's name, desc, all review score and comments and image urls to create a dictionary array of Title, Description, Reviews: a dictionary array of Rating, Comment, and Images: a string array of urls. Path must exist however name (top level only) and submaps do not. If the path contains [] then this indicates the property is an array and should return an array.
New: Now detects if CKEditor5 is installed as the clients chosen HTML editor.
New: Email HTML is compressed before sending.
New: BusinessObject.HTMLCommentBegin
and BusinessObject.HTMLCommentEnd
used by BusinessObject.WrapHTMLComment
.
New: You can now add a script of type importmap. Attach as a JS file and the system will extract the content to include in the script tags.
New: Added administrator menu item to run scheduled tasks.
Update: Updated setup.aspx.
Fix: System does not try to resize an SVG image.
Fix: Error when entering TradingItemDiscountPrice.StartOn
or TradingItemDiscountPrice.FinishOn
.
Fix: Every request was regenerating the page due to Site.InternalURLCheckFrequency
being nothing.
Fix: When a collection or item was updated not all cached content generated with the collection or item was clearing last checked.
Fix: Application.ScheduleNewAutomatedTask
failed.
Fix: WebHTTPApplication.ScheduleNextAutomatedTasks
started next task to early due to passed time being excepted as local time rather than UTC time.
Fix: Application.Log
output to CSV and made various error messages clearer.
New: New property added AutomatedTask.EmailResults
which determines what notifications are to be emailed.
New: Site.ScheduleCheckScanAndRepeat
.
New: Site.InternalURLCheckFrequency
can now be set to never.
New: SitePublicURL.Check
detects if internal static file exists and also checks external URLs.
Fix: Error when menu item deleted.
New: When a page is generated, begin and end HTML comments are added to identify any collections or items that are used to generate the page. They are used to generate context menus and to identify cached pages that need regenerating as explained in the following new updates. The format is:
<!-- [Begin BlogPosts Blog] -->
code here <!-- [End BlogPosts] -->
.<!-- [Begin BlogPosts:4567 Blog Post: My Article] -->
code here <!-- [End BlogPosts:4567] -->
.New: When logged in as administrator, holding down the control key while right mouse clicking will generate a context menu based on the clicked element and parent elements. This will allow you to quickly navigate to an item to edit. For example, you may have clicked on a blog post on the blog page. The context menu will show the blog post, a list of templates that are used and the blog posts collection.
New: Application.Update
has been created to replace Application.Workspace.Update
. It has been created to add extra functionality being:
Application.LogChanges
is switched on it will log all changes written to the database in collections Logs
and LogEntries
.SitePublicURLs
, and mark it to be regenerated. When an item is added the system will look for references to the collection. A special case was set up for MenuItems
where the system will look for any references to an items with new, updated or deleted descendents (sub-menus).New: When Application.DebugMode
is off and the administator is not logged in, the HTML output is condensed including the removal of comments.
New: GenerateHTMLVideo
passing a URL to a video that requires an iframe and also passing a Poster will include an attribute data-video-poster
to the iframe. A new javascript function initialiseIFrameVideos
and associated styles has been written to wrap the iframe to create a video control display the poster and play button.
New: Base script and styles for DBMS context menu and responsive toggler for any attributes, not just the class attribute.
Update: Output of robots.txt
.
Fix: Fix to SCSS slide widths when multiple visible slides.
Fix: When FileName
exists in the database table.
Fix: Various links in emails to administrator.
Fix: When a boolean field is readonly it displays the value not a checkbox.
New: SitePublicURL.FindReferences
now asks if you want to find those links with or without the attribute rel="nofollow"
.
Fix: Error when trying to login with cookies disabled.
Fix: When HTTPS Everywhere not turned on cookies could not be stored.
Fix: Base scripts and stylesheets updated.
Fix: Error in Group.SubscribeNewUser
.
Fix: Path not found error displaying Membership.StatusMessage
after Group.ProcessSubscription
.
Fix: Site.Clean
was removing references URLs.
Fix: Site.Clean
was sped up by checking cache for URL without converting to XML first.
Fix: Removed the disabled window overlay when navigating back to a previously submitted form.
Fix: No disabled window overlay loaded when downloading a file on submit.
New: Publics.GenerateHTMLSchema(Array)
will return a schema object based on the parameter array. This can be included in the Template.Metadata
using the merge code option in the HTML editor.
New: MenuItem.Follow
added which determines if search engine bots should follow this link for indexing.
New: When administrator is logged in and they are go to SelectUser
then the system will direct them to CheckForRegistration
if that is what the InitalUserAccessPoint
is set to.
New: Default display name changed for VisibleServiceTimes
to "Calendar" and VisibleServiceTime
to "Service Time".
New: Application.RequestTimeout
added which determines how long a request runs before timing out.
New: Both Site.Check
and Site.Scan
now require a parameter MaximumDuration
which indicates how long the function should run before stopping. Application.RequestTimeout
is increased if MaximumDuration
is set longer.
New: Site.CheckScanAndRepeat
now takes two parameters BatchDuration
which indicates how long the function should run before stopping and BatchInterval
which indicates how long before the function restarts. Application.RequestTimeout
is increased if BatchDuration
is set longer. If the function stops before completing and automated task is scheduled to run the funtion again after the interval specified.
New: A URL version of image properties has been added to the items which essentially returns the absolute path to the image. Examples, Article.ImageURL
, Brand.LogoURL
and User.PhotographURL
.
New: When submitting a form the disabled window overlay indicating "Please wait while processing..." appears to stop users from refreshing or closing.
New: All database ntext columns converted to nvarchar(max).
New: SetURLParameter(URL, Name, Value)
is now available to the script engine.
New: Optional parameters in BusinessCollection.ToObjectArray(ItemExpression, [TopCount], [Randomise], [Page])
BusinessCollection.ToStringArray(ItemExpression, [TopCount], [Randomise], [Page])
.
New: ReadOnly Property Attachment.AbsoluteURL
returns the URL with the absolute path if missing.
New: ReadOnly Property BusinessCollectionItem.FormattedID
returns the ID formatted such as ID 1965 would return "id0000001965" 123456789 would return "id0123456789".
Fix: When added a new item with an image or other type of file, it would place that file in the wrong path.
Fix: PageImage
did not always include the absolute path.
Fix: When administrator is logged in and booking for another user it would ask for the user again after specifying attendees.
Fix: Access denied when a user tried to view own bookings.
Fix: Error on Application.UserTimeZone
when the Application.UserCountry
is not detected. In this case the base time zone is returned.
Fix: Error when adding a new ServiceBookingEmail
.
Fix: Could not find path of custom properties or methods.
Fix: user-default.aspx
updated to use BusinessObject.RelativeURL([Member])
.
New: Inology.Core.NameValueCollection
now implements iDictionary
.
New: Application.UserTimeZone
now gets the time zone from the IP info of the client IP address when possible, otherwise uses UserCountry.DefaultTimeZone
.
New: PageURL
, PageLanguage
and ApplicationTitle
are now included as merge properties.
Fix: Application.GetDefaultTemplate
did not find correct template for custom business objects or methods.
Fix: Application.GenerateMembershipRenewalOrders
regenerated an invoice in certain circumstances due to time zone conversions.
Fix: Application.ConvertPageTypeURL
did not return correct path in certain circumstances.
Fix: Error on output when a property or method returned HTML that already had a DTD.
New: One Time Passcode (OTP) has been added as a new method of Human Verification. If selected as the method, a [Request Code] button will be show and when clicked will request a passcode from the server to be sent to the user's email address.
New: One Time Passcode (OTP) has been added as a new method of Human Verification. If selected as the method, a [Request Code] button will be show and when clicked will request a passcode from the server to be sent to the user's email address.
Fix: Conversion failed from old URL format to new in some instances.
Fix: To base 3.2 stylesheet for forms layout.
New: One Time Passcode (OTP) has been added as a new method of Human Verification. If selected as the method, a [Request Code] button will be show and when clicked will request a passcode from the server to be sent to the user's email address.
Fix: Very long URLs in a collection view would push the table beyond 100% width. A style has been added to break the URL anywhere so it will wrap.
Fix: Automated tasks not logging in as the user before running causing an access denied error.
Fix: Access denied for blog, forum, etc. when management system not installed. This was changed to make them visible to the public even if not installed. This way a developer can add blog posts but no one else can.
Fix: Service.VenueTimeZone
now defaulted to the base time zone.
Fix: Service.VisibleTimes
were showing all times, not just those visible for current user.
Fix: When adding a trading item, it would not proceed to check out.
Fix: Rename default templates for articles, etc.
Fix: Various base stylesheet changes.
Fix: When resetting password for new user that already has a user record on the database.
Fix: When the same user logs in on similar devices at the same time.
Fix: To include article file name in body classes.
Fix: To star rating now uses star icons.
Fix: To subscribe new user logs them in.
Fix: Processing order failed on date due to time zones.
Fix: To formatting of default page title for methods.
Fix: Default max height for images from 1200px to 1280px.
Fix: Various fixes to base scripts and stylesheets.
Fix: All forms sent from admin email address with reply to the EmailAddress property.
Fix: Sites.Check
and Sites.Scan
not completing all in one pass.
Fix: To home page displaying as Website.About
when cached in Sites.
Fix: To BusinessCollection.CreateFilterExpression
when multiple values passed.
New: Date/time properties are now stored in UTC time and are displayed in the User's time zone. However, there are exceptions. For example, Date of Birth is stored and displayed as is, Order and Payment dates are generated and stored and viewed in the Base Time Zone. Service times are displayed in the Venue Time Zone if it has been set for the service.
New: Each country now has a default time zone. This is used as the default for a user.
New: A user can change the time zone if it is not what has been defaulted for them. https://yourwebsite.com/setusertimezone
.
New: You can now set the time zone for a venue on a service. This means any times will be displayed in the venue time zone no matter what the time zone is the user is in.
Fix: To home page caching in Sites.
Fix: When a user who initially signed up on another device or via a authentication provider returns to login they are redirected to verify and reset password.
Fix: Access denied when displaying status message after Group.ProcessSubscription
.
Fix: When accessing website root (home) with parameters would display Website.About
.
Fix: When validating email addresses and phone numbers when blank.
Fix: CollectionItem.RelativeURLFilePath
included filter path for base collection. This caused an invalid Canonical URL
Fix: Collection.GetHTMLBreadCrumbs
included filter path for base collection.
Fix: Various script and stylesheet updates, maily re the slider.
New: A user can now create an account and login using an authentication service. In order to do that, you must sign up with one or more of the following providers and register the site.
Update: The default password strength has been increased to Strong.
Update: Base scripts and stylesheets.
Fix: Block cross-site form spam.
New: A user can now create an account without using a password, if the browser and device they are using supports Web Authentication. This uses bio-metrics like face or thumbprint recognition if available.
New: The system detects the browser, device type and whether the a mobile device and creates a record of that device when a user signs up or logs in. This helps determine if a user automatically logs in on that device. The user can delete devices they are no longer using for login.
Fix: Block cross-site form spam.
Fix: Block cross-site form spam.
Fix: Block cross-site form spam.
Update: Developer and Powered By images.
Fix: Fix to base styles fore color.
Fix: When importing with an existing file name, it was not using the imported file name.
Fix: When adding a new industry or tag set, checking for exisitng file name could be invalid.
Fix: To definition inspector styling.
New: Client side styles now allow for dark and light modes.
New: The system will look for the default page image in /images/defaults/
with a name matching the definition file name of the object or method being merged. If not found it will find a match to inherited objects then finally to the application default image. For example, if the object being merged is the collection blog posts and definition file name is blog then the system will look for the following:
/images/defaults/blog.png
/images/defaults/blog.jpg
/images/defaults/articles.png
/images/defaults/articles.jpg
/images/defaults/website.png
/images/defaults/website.jpg
New: A user can now be added with just an email address.
Fix: To the BusinessCollection.RelativeURLPath
generation with filter expressions.
Fix: When a Template.PageImage
included an expression it wasn't merged.
Fix: Fix to client side scripts and stylesheets.
New: Base styles and scripts developed using latest language standards. In order to use these you will need to change your template stylesheets and scripts. Besides external stylesheets and scripts you should only need to add a single .scss such as styles.scss. This should include @use statements to include the other stylesheets required. Same goes for scripts. You should only need one javascript module such as main.js and that will have import statements for other modules to include.
New: New property added Application.PageImage
. This is the path of the default image for the page being requested. This can be also be set in the @ Page
directive of an aspx file as you can with Application.PageTitle
and Application.PageDescription
.
New: New property Template.Image
. This is the path of the default image when using this template for the page being requested. You can include an expression just like you can for Template.Title
and Template.Description
.
New: New attributes added ClassDefinition.PageTitle
, ClassDefinition.PageDescription
and ClassDefinition.PageImage
. If no expression is supplied then by default the attributes will return the BusinessObject.Title
, BusinessObject.Description
and BusinessObject.Image
property value if they exist on the business object.
New: When generating the title meta tag the system will use Template.Title
if one exists, ClassDefinition.PageTitle
(i.e. BusinessObject.Definition.PageTitle(BusinessObject)
) if value returned, otherwise uses Application.PageTitle
. Same goes for description meta tag. You can also access these values from the merge object as PageTitle
, PageDescription
and PageImage
.
New: You can use PageTitle
, PageDescription
and PageImage
in expressions in your HTML templates as these values will exist on the merge object when merged.
New: Keywords meta tag is no longer output.
New: You can now use JavaScript modules. For modules only, when minify is specified the path will be to a min/
subfolder rather than the extension .min.js
. The minified files of the modules will be generated when requested the first time. If the main javascript module changes the subfolder is deleted in order for them all to be regenerated upon request.
New: SASS compiler to allow for latest standards.
New: CSS and Javascript minify compiler to allow for latest standards.
New: Application.VisibleServiceTimes
default file name has been changed to calendar
.
New: BusinessObject.GetFileURLPropertyPathAndFileName(PropertyName)
which will return the full relative path to the file.
New: Default templates are chosen by the definition name of business objects and methods rather than the definition file name. For example, the template for BlogPosts now has to be blogposts
not the definition file name blog
.
New: When importing data with files, those files can be in the root of the zip or now match the base path. For example, say you export blog posts from one site and import them into another (both on this platform). You can now zip the blog folder and include that in the import.
New: When a URL is created for a collection that has filters, it will now include a file path for each filter (in most cases) rather than URL parameters.
New: Definition.CreateFilterMenu
now generates with relative filter paths (in most cases) rather than URL parameters.
New: CollectionClassDefinition.GenerateHTMLFilterMenus
now has an optional parameter IncludeSearchControl
.
New: DefaultHomePageName
now defaults to home
rather than default
.
Update: Modified generic output of BusinessObject.ToHTML
and BusinessObject.MethodToHTML
to allow for the new base styles and scripts.
New: SitePublicURLs.Scan
will scan the cached content of the selected internal public URLs for new references and add them to public URLs.
New: SitePublicURL.Check
will check and update cached content when different.
New: SitePublicURL.ViewCache
to view the latest cached version of this URL.
Fix: Site.Clean
now removes all URLs without a site reference with follow.
Fix: SetSitePublicURL
now only adds the URL when there is a site reference with follow.
Fix: To who can execute ConfirmOrder.PayByOffsitePaymentMethod
.
Fix: To the canonical URL.
New: You can now add Definition.StyleClasses
to any class, property, method or parameter. Those classes will be added to the HTML output class attribute.
New: Any return value from a method will be converted and output in the current response format. ie. JSON, XML, CSV or HTML.
New: BusinessObject.GetPropertySelectOptions(Path, GroupFilterValue, SearchText, MatchStart)
returns object array of value, text, items (sub options if any).
Fix: When calling the method BusinessCollection.AddNew
and inheritance is required.
Fix: HTML output when returned from a method.