Release notes Q3 + Q4 2021

Wednesday, January 5, 2022 | Dr. Rich Lane

We've had our heads down crunching out new features to make lives easier. With BC EOF last year behind us we have compiled a list of new features, upgrades, and changes over Q3 and Q4 of 2021.

This is a raw development list of new features, changes and updates. Were not expecting everyone to understand everything but know that the product is constantly being worked on and improved.

New

Admin: Webapps: Webhooks for webapps on add / edit.
Admin: Dashboard: Ability to set custom view for Initial Dashboard.
Admin: Webapps: Webhooks for webapps. Frontend only, on edit, on add, both.
Admin: Webapps: Import / Export data
Admin: Redirector: Import (append, update, or append & update) URL redirections via CSV.
Admin: Redirector: Export URL redirections to CSV or JSON.
Admin: Users: Import can now append, update, or append & update.
Admin: User CRM: CRM "form" tabs. Forms that have been saved with the user email address can be linked as related data.
Admin: User CRM: Custom CRM tabs connected to webapps utilizing one to one and one to many, view only and add and edit are in new pages. In order to change this to onpage edit the uppy lib needs to be generalized to a binding lib and not hardcoded.
Admin: Orders: Resend invoice or workflow button - New {{data.resend}} option that will insert " - RESEND" somewhere (like a subject line or something)
Admin: Orders: Export orders as JSON.
Admin: Webapps: Cache control. For clients that can't wait for a cache to expire or don't understand caching - The ability to add a list of pages that the webapp in which a cachecontrol variable will be written to the page metadata which can be used to form the page cachekey. The key is updated every add, edit or delete, both frontend and backend.
Admin: Webapps: Email auto responder. Frontend only. Requires auth column to be selected (to identify the email column) - on edit, on add, both.
Admin: Webapps: Email workflow for webapps. Frontend only. on edit, on add, both.
Admin: Users: Delete orphaned CRM data that might have been not deleted (previous user delete or incorrectly deleted directly).
Admin: Users: Bulk delete of users. Single page only maximum, does not automatically reload next page (please refresh - also background task so it might take a few seconds so chill if the user reappears).
Admin: Forms: Exports CSV + JSON v1.1 - payments in forms are encoded in JSON as they are a raw return from the payment gateways. Maybe in future versions we will do something - but this is what we have for now and previously we had nothing.
Admin: Dashboard: On staging servers a watermark STAGING will appear under the dashboard.
Admin: User: Action email button that sends an email the to the user from the admin tool - welcome email, I love you, something that Jaguar wants...
Admin: Site: Remove CRM user duplicates button - you have been warned.
Admin: Email: Emails now have reply_to, cc, and bcc options.
Admin: Webapps: Content is disabled on new "add, edit, both, none" - default add is disabled. Frontend only.
Admin: Ecomm: Resend webhook button for orders based on current webhook config - not the config at the time of the order.
Admin: Ecomm: Webhook for ecommerce in shop settings.
Admin: Ecomm: Apply taxation for entire cart contents. Shopping settings.
Admin: Ecomm: Shipping engines (calculator plugins) - allow a custom calculation for shipping.
Admin: Ecomm: Shipping optional taxation rule can be applied.
Admin: Ecomm: Taxation for anything (tax section in menu).
Admin: Webapps: Import webapp config (structure) from external file.
Admin: Webapps: Export webapp config (structure) to external file.
Ecomm: Cart cost calculator inc shipping function (both frontend and backend).
Ecomm: Admin: Orders display Attributes and support v1 or v2.1 displaying.
Admin: Ecomm: Option to select payment gateways used for ecommerce checkout. The frontend code still needs to support this, will continue to use existing "all payments" for current websites.
Webapps: Admin / Frontend API: Delete and disable.
Webapps: Admin / Frontend API: Ability to set auth column which is used to make sure the user is editting, deleting, disabling item they have created or are permitted to update.
Admin: Mailer: Uses batch mode, currently it is open and will try to batch entire CRM in one shot, MailChimp might have a limit, extended testing required.
Admin: Mailer: CRM custom fields sync to mailchimp. MC supports 50 custom fields on free account and 80 on paid account.
Admin: Webapps: Frontend CRU API for webapps with public display option and dynamic auth polices.
Forms: Payments: JS frontend PCI compliant method used for stripe.
Admin: Forms: Forms now detail the payment information in the form and link to the payment.
Admin: Pagemanger: Ability to save page as GET or POST as saving pages that were POST was converting them to GET.
Admin: Redirector (Soft): Take over of the 404 page to allow for redirects. Please note all 404 page MUST be an partial / include in the /homepage/partials folder named "404.liquid". This also means you can not use a layout (although you could use includes if that is how you have built your layout).
Admin: Site Settings: Site settings ability, currently only timeformats.
Admin: Catalogs: Import now avaiable thanks to new new modularity.
Ecomm: Admin: Resend invoice / customer email working.
Ecomm: Admin: Order display of v2.1 cart details.
Ecomm: v2.1 cart format.
Ecomm: Attributes v2.1 format.
Ecomm: Attributes now have internal dynamic slugs.
Ecomm: Cart cost calculator function (both frontend and backend).
Admin: Ecomm: Products can now have dynamic slugs. Setting in shop settings.
Admin: Ecomm: Catalog path saving, saves JSON array of labels, slugs and ID for parent. Calculates on new save.
Admin: Ecomm: Catalog new paths generation button in shop settings.
Admin: Ecomm: Cart version 2.2 - supports taxation, shipping engines, shipping included or not.
Admin: Ecomm: Orders display 2.2 - displays new cart options.
Admin: Ecomm: Catalogs now use tree structure to display and only load what is saved speeding up large sites with alot of catalogs.
Admin: Ecomm: Autocomplete ajax available for product custom fields.
Admin: Ecomm: Catalogs reinvented, all catalogs have full paths (IDs, names, slugs) saved with it. Slugs are saved as full path. Slugs will auto generate new slugs for itself and children on save. Supports sites with single and multilevel slugs. This will break sites such as ANL as their catalog browsing frontend will need to be refactored (but will make the site much easier).
Admin: Ecomm: Regenerate category slug paths button. Will regenerate all slug paths for categories - needs to only really be used once initally.
Admin: Ecomm: Catalogs exports with all custom data.
Webapps: Frontend: Webapps API now supports autocomplete - this should have used the same shared and updated render as the admin tool in order for this not to have to be remade.
Admin: General: GetFormnameFromID graphql - ability to get resource, physical_file_path and name from form ID.
Admin: General: Function get_lastdayofmonth - will return the last day of the month (eg. Jan 31, Feb 28) - works with leap years.
Admin: General: Function offset_rev_minutes - will offset a time BACK to UTC from the current instance server time setting - This will be used for published dates shortly to correctly store dates.
Admin: General: update_user_profile_via_email graphql to update boolean profile records one by one.
General: Money format function /_functions/money - formats using pricify but allows trailing zeros as an option.
Admin: General: Function get_id_of_prop_rs to get the ID of a recordset where key = value - simular to a select filter but able to get the parent ID.
Admin: General: New function POS is_json_valid is designed for Javascript and not JSON-LD.
General: config.yml: The undocumented config.yml to turn off electic search since we are not using it currently.Admin: General: Adding x-system-timediff to global.
Admin: General: New function (generic_getmetadata) to get metadata from all tables that offer it via ID.
Admin: Email: Generic callback include for forms so we can updateeasier in the future - note all forms need to be resaved.
Admin: General: Ability to use catalogs in all graphql forms.
Admin: API: customization_create graphql - cleaning up API.
Admin: API: customization_update graphql - cleaning up API.
Frontend: New recurisive function to render liquid inside of webapps and link data.
Admin: General: get_payment_gateways_id_in grahpql - get a list of payment gateways for a specific array of IDs.
Admin: Webapps: Year selector for date ranges with different predefined ranges (saves as complete date for searching).
Webapps: Frontend: Year selector for date ranges with different predefined ranges
Webapps: Frontend: wa_init.js disdel JS function to fire off a simple delete or disable. Use a handler with a callback to monitor server response.
Webapps: Frontend API: Callback and before start JS functions.
Admin: Webapps: Autocomplete using AJAX for large data loads
Admin: webapps: graphql graphql relationships can now have a label2, currently only used in select and autocomplete.
Admin: webapps: webapp_populate_australian_locality_and_state graphql option - be careful - if you use it without an ajax autocomplete it will 504 the admintool edit and add pages.
Admin: Mailer: Last sync date saves to users to only sync users that have been updated only.
Admin: Mailer: Ability to reset sync date to nothing - still requires a save in case you press the button by mistake.
Admin: CRM / Forms / Categories / Products / Webapps: Selectboxes now have option to keep the order they are selected rather than the order they are listed.
Admin: CRM / Forms / Categories / Products / Webapps: Fields now have a Unique slug. It is automatically generated serverside. It is used to match merge fields in Mailchimp but might have other uses for external sync in the future.
Admin: General: Slugify array function. Slugifies all elements in an array.
Admin: Webapps: webapps_item_create.graphql - we need to redo a new API creates to utilize a graphql like this.
Admin: Webapps: Frontend update via slugs.
Forms: Payments: Stripe supported with updated descriptions.
Payments: General: New callback to handle payments after form is saved.
Payments: General: Raw requests viewable in admin tool for payment investigations.
Payments: eway: Raw request and response saved in DB.
jquery v3.6.0 as a lib from POS in app/assets/js/ - POS is faster than external CDN libs, please use this LIB for all jquery lib includes.
Ecomm: General: Getcart_byid.graphql - ability to check the cart for a specific product ID.
Ecomm: Eway: For failed requests (mainly stripe payment intents) will display in admin tool - not the true request sent to the gateway (to do later) but the saved information retained in the admin tool.
Ecomm: Eway: All (hopefully) eway error codes are handled server side and translated into human readable words. This works for both single and multiple errors.
Admin: General: New just in time form render.
Admin: General: app_common.js: getit (GET version of to postit).
Admin: General: getUserwebapps.graphql.
General: app_common.js new function getScript which is a clone of the jquery version.
Admin: General: app.js - strftime Javascript version.
Admin: General: app.js - convertTZ function to convert timezones client side.
Admin: General: GetFormMetaandData.graphql that gets the form meta and the actual data in one query with optional ID.
Admin: General: GetUserWebapps.graphql, get ID and config on the webapp based on the tablename.
Admin: General: DeleteAllAdminSettings.graphql. Pretty brutal be careful.
Admin: General: record_delete_all.graphql. Deletes from a table based on a string match.
Admin: General: record_delete_all_int.graphql. Deletes from a table based on an int match.
Admin: General: stringarray_to_intarray function to convert string arrays (mainly from forms) into Int arrays.
Admin: General: User settings can now save JSON in a setting - this entire thing should be changed to one JSON later.
Admin: General: setting_add_json.graphql.
Admin: General: Code plugins, an alternative to callbacks or evals to make code more modular.
Admin: General: Get record by slug graphql.
General: Get_record - get single record graphql (effort to clean up main code).
General: Get_records - get many records graphql (effort to clean up main code).
Admin: General: Update user via email and get user by email graphql queries.
Admin: General: Dataexport graphql for forms and webapps (dataExport.graphql).
Admin: General: Delete Area Custom Fields graphql for users and catalogs.
Global: 404 page now locked in admin tool private. You can overwrite it by placing a file with a dedicated slug of 404 but not recommended.
Admin: Global: New constant set and unset graphqls (constant_set.graphql / constant_unset.graphql).
Admin: Global: New get soft 404 redirect graphql (redirect only) (get_softredirect.graphql).
Admin: Global: New get soft 404 redirect graphql (all properties) (getredirect_soft.graphql).
Admin: Global: Santinize URL / URI function to remove unneeded stuff from the end of HTTP paths (and the leading slash).
Admin: Global: New set property value function that will build a property JSON. Call repeatively to build entire property for create or update graphql.
Admin: Users: Custom fields displayed in user list.
Ecomm: General: Get ID from SKU graphql.
Ecomm: Payment: Stripe now updates the description after payment to include the invoice number and transaction ID.
Ecomm: Get_cart graphql.
Ecomm: Get_productinfo graphql.
Ecomm: JS: New money format function.
Admin: Ecomm: Product catalog filter search on already rendered content.
Admin: Ecomm: Search products with sort graphql.
Admin: Ecomm: Catalog autocomplete selection.

Update

Admin: Webapps: Cache controller page key injector is saving now - POS bug.
Admin: Webapps: Fixed cache controller error messages on staging servers only - POS upgrade bug.
Admin: Webapps: Cache control page lister now will list pages that explicitly set exclude to false
Admin: Orders: Eway codes will now render their long messages correctly.
Admin: Forms: Previous version of exports will now correctly be deleted and only the latest generated file will be stored.
Admin: Forms: Back buttons on list and detailed view now link correct (who built this without testing?).
API: Payments: API will now output eways code or error message string if OOCCMS doesn't know what the code is raw.
Frontend: Ecomm: Javascript now correctly clones shipping state if billing address is not used and doesn't default to the default on save.
Admin: Page Manager: Pages list again as POS changed admin_pages filter.
Admin: Forms: Graphql used to populate webapps with AJAX was selecting all items and not the items saved.
Admin: General: JSON Export now working as API now outputs objects over strings.
Frontend: Webapps: Webapps API now outputs correctly hard coded select values.
Frontend: General: View compiler updated as the slice function now seems to be inclusive.
Ecomm: API: Order status is now recorded after last build.
Admin: Email: Added back the textbox that was mistakenly deleted from the last build.
Frontend: Ecomm API: Order is updated with status and invoice_order_id straight after succussful payment and before all emails.
Admin: Email: Error messages will now tell you what text field is missing rather than just saying "undefined" is missing.
Admin: Users: Users will be added with custom fields now saved.
Admin: Users: Users will be added without a display only error message (user was still added).
Admin: Users: Send email action button wont display on add user.
Admin: Users: JIT errors and tabs (webapps / forms) wont display when adding a user.
Admin: Users: Fixed where webapp content would not render in CRM tabs if there was no form tabs setup.
Admin: Ecomm: Invoice number was HTML disabled but because we fixed the delete all shop options this invoice count number was being nuked and not resaving.
Admin: Users: Staff create graphql was missing meaning auth levels were not saving.
Ecomm: Frontend API: The render does doesn't allow includes and the custom payload webhook wasn't eval-ing.
Admin: Email: Emails can be saved without a layout now.
Admin: Email: Changing layout to dropdown fixed undefined error message on new save.
Admin: Email: Metadata (including name) is actually being saved now.
Admin: Email: Filename no longer requires the filename to have .liquid in it (or a path).
Admin: General: Issue where webhooks tried to convert to HTML fixed - we print raw now.
Admin: Ecomm: Shop settings were not being deleted before saving creating mutliple settings.
Admin: Ecomm: Payment OOC "requests" for eway now show the correct amount (display issue only).
Admin: Webapps: Slug dupe wasn't recieving the ID correctly from the API and creating -2 versions.
Admin: Users: User import now correctly deletes custom fields for that user and recreates - still waiting on answer from POS about automatic profile deletes or are they orphaned (please sir can I have some more? [O.o] ...MOOOORE!?).
Forms: Frontend: Eway payments now display a better error messages and will reenabled disabled anti double submit buttons (like stripe).
Admin: Users: Slug dupe check now works for items saving as the same name but also has another items starting with the same string.
Admin: Users: Fixed error messages that were not displaying when there were multiple errors.
Forms: Frontend: Stripe SS error messages now display in alert.
Forms: Frontend: Added extra logging so understand what is running in callbacks.
Forms: Frontend: Race condition where payment information hadn't yet saved in database before the emailer wanted to use the data.
Forms: Frontend: Forms with stripe payment will have button disabled if there is a stripe JS error.
Admin: Page manager: De-excluding a page (that was already excluded) now works.
Webapps: Frontend: Updating via slugs will now work again (debug information left in place).
General: Slugify filename now lowercases the extention (used in uppy).
Admin: Auth policies: Auth policies now save without error message (newly required physical_file_path).
Admin: Auth policies: Now pass "advanced view" to the API correctly and thus save to the correct path.
Admin: Forms: Deleting a form item now works. By design only deletes the form item and not payments if there are any.
Admin: Users: Deleting a user will now close the popup and refresh the window rather than sitting there looking like it has broken.
Admin: Webapps: Creating a webapp (on add) wasn't saving the auth policy API.
Admin: Ecomm: Wrong paths were being generated for primary catalog (label only).
Admin: Ecomm: Product catalog would not select a root catalog if the child had already been selected.
Ecomm: Shipping Engine: SCK shipping engine wasn't honouring summary and would stop the model popup after adding a second item to your cart.
Admin: Ecomm: Primary catalog is no longer incorrectly multi selectable.
Admin: Ecomm: Slug generator now functions from the push button - further optimization completed that came with path format change.
Admin: Forms: Payments formatted correctly again.
Payments: ShippingEngine: Fixed an issue that didn't return cart information on select shipping ecommerce sites (Florist / Jag).
Ecomm: API: Shipping engine wasn't outputing summaries (last item added) for sites with standard select type of shipping (Jaguar / Janine).
Ecomm: API: Shipping engine API wouldn't output an image correctly if it was imported as a string.
Frontend: Soft redirect where the page has or had a querystring is handled and appended to the redirect URL.
Ecomm: General: Convert invoice number to string
Admin: General: Allow error message popup to display when they don't have a speific error message text.
Admin: Ecomm: Fix and optimization for webapp_populate_products - product pages load less than a second rather than 5 seconds or a 504 timeout error.
Admin: Ecomm: Category paths wont be deleted now when you save custom fields.
Admin: Ecomm: Reusing catalog column names are now possible without the form just not saving and removed columns are actually removed.
Admin: Ecomm: is_json_valid wont validate "0" as JSON.
Admin: Ecomm: Attribute slugs generate on an add.
Admin: Ecomm: Catalogs can save again.
Admin: Graphql: Changed catinfo graphql to use INT! so it works apparently.
Admin: API: Generate slugs for cats not kicks off in background task now.
Admin: Ecomm: Catalogs you can not longer select the parent as itself and send the regenerator into a infinte loop.
Admin: Ecomm: Canceling a resend invoice will no longer send the invoice anyway.
Admin: General: setpropertyvalue change to handle blank values and changes with array handling of POS.
Ecomm: API: Eway prices send to the gateway in ecommerce (not forms) for 1 year were not correct (ANL excluded).
Ecomm: API: POS doesn't like numbers for strings anymore, converting invoice number to string before trying to update. Still underlying issue of sync issue, NMS-5650 reported to POS.
Admin: General: Wasn't converting to_hash on some form saves and data was being escaped and not saving (and therefore loading) correctly.
Admin: General: webapp_populate_users needs to use null and not "" for default otherwise no records come back.
Admin: Users: Title for email to display a human readable error message when there is an invalid email address.
Admin: Ecomm: Multiple gateways from the same vendor will now send to the correct gateway selected instead of the first on out of the database.
Admin: Forms: Multiple gateways from the same vendor will now send to the correct gateway selected instead of the first on out of the database.
Admin: Forms: Saving wont give console error anymore and redirect correctly.
Admin: Users: Saving wont give console error anymore and redirect correctly.
Admin: Webapps: Single (not multi) fixed drop downs were not saving.
Admin: Webapps: Some select drop downs didn't have -- select -- some did, corrected so they all should.
Admin: General: All webapp_populate_users will now work with autocomplete, still need to update others to use in_ID for non webapp linking.
Admin: General: Switches as many as I can find of is_json_valid to our function version.
Admin: Ecomm: Products will save without addtional console error and non redirect.
Admin: Ecomm: Categories will save without addtional console error and non redirect.
Admin: Webapps: Autocomplete without multiple was getting all data on inital load.
Admin: General: Forms rendered with INTs as values were blank because POS handles is_valid_json incorrectly in my opinion, switched to custom function.
Admin: Export All: Strict JSON output from API was encoding CSV incorrectly, changed to packet the CSV out as JSON.
Admin: General: Fixed issue with saveas function to not console error after use.
Admin: API: POS getting strict with data types, now converting JSON to string before testing if JSON (in case already JSON - stupid!).
Admin: Webapps: Delete and Disable now don't require titles to delete, whoops.
Admin: General: A POS change made setpropertyvalue now allow string formatted arrays and must be converted to an array object to not be escaped on insert.
Webapps: Frontend: wa_init.js presubmit was calling wrong function.
Admin: Webapps: Numbers can now be listed publically.
Webapps: Frontend API: Now using real POS form in order to keep the same session on the backend and actually work.
Webapps: Frontend API: Correct error message variable used in some cases.
Webapps: Frontend API: Edit via slug now correctly uses the passed slug to function.
Admin: General: setpropertyvalue working around is_json_valid issue for data that isn't POS JSON but passes anyway - bug has been reported.
Admin: Forms: Forms without payments will now submit on the frontend.
Admin: Webapps: Webapps using direct webapp relations now correctly show.
Admin: Australian postcodes: Will now install, just don't install it.
Admin: Mailer: Blank last sync dates don't use "now" date anymore, they use a really old date for inital sync.
Admin: Mailer: Don't try to API sync no users if there are no users to sync or update.
Admin: Mailer: Added a label to hidden fields so they will sync.
Admin: Mailer: Removed non value items such as header, paragraph etc from syncing.
Admin: Mailer: Settings now loaded in one shot rather than adhoc as per the method of loading settings at this point.
Admin: General: Spelling of successful.
Admin: CRM / Forms / Categories / Products / Webapps: Required fields will now be formatted correctly.
Admin: Webapps: Webapps can save again, problem was default values can only be strings and we need boolean so scrapped that idea.
Admin: Webapps: Tags for webapps (the webapp and not items) saving again.
Admin: Webapps: Frontend uses model schema of public only to save.
Admin: Webapps: Enabled / Disabled filter now works (it might not be working in other places if it used this code - TODO check this).
Admin: Webapps: Search might now work if you use a " in it, need to objectify more old string converstions code.
Admin: Webapps: Uploaded filenames are now slugified and dates appended for uniqueness.
Admin: Webapps: JS binding occurs when DOM is ready.
Admin: Webapps: Webhooks: Webhooks will fire with edit or add or both correctly now.
Admin: Webapps: Webhooks: A mass of variable typo's and other logic errors that was making it not work.
Admin: Forms: Email template selection was limited to 10 now virtually unlimited.
Admin: Forms: Removed rogue characters deployed inside the formpayment callback file.
Admin: Forms: HTML Encoding issues in labels caused forms not to load (and then save).
Form: Payments: Stripe now works for fixed payment.
Webapps: Import: Importing webapps without a slug now generates the slug correctly based on the title.
Webapps: Import: Import will now kickoff without an error message in console and will show the popup of "background processing" correctly.
Ecomm: Resend Invoice: Resend invoice will now kickoff without an error message in console.
Ecomm: Attribs: Fixed cart adding attribs with no selection to cart.
Ecomm: Attribs: Fixed cart display page displaying nothing with the above bug occured.
Ecomm: Attribs: Fixed cart item diffentual when there is a product with no attribs.
Ecomm: Eway: Single and multiple error message responses came back on different variables now handling this.
Ecomm: Eway: Truncated invoice number and invoice reference to 12 and 50 characters respectively as that is all that eway will allow and will error if you send more.
Admin: General: Calendars now work due to is_json fix.
Admin: General: is_json JS function outputing correct values now fixing calendars and other things.
Admin: CRM: A POS change made it so that variables were not being passed to the form render correctly anymore.
Admin: Sitemaps: and now excluded in content holders.
Admin: Sitemaps: Wrong file_path being used for sitemaps - please regenerate all sitemaps on all sites - if wont hurt if you don't but there will be a rogue file listed in content holders until you do.
Admin: Content holders: Search now works.
Admin: CRM Webapps: Used the table name rather than the name to correctly displayed the save information.
Admin: Site Settings: Readded sitesettings save code that was mistakenly removed when soft404 settings were removed.
Admin: User CRM Webapps: Summernote variables are removed and inserted into a regular textarea with a note saying rich text is disabled.
Admin: User CRM Webapps: textareas are added to render cleanup and now disabled and required removed - thanks Brendan!
Admin: General: Duplication of lists (attribs & CRM) added more than 1 after removing. Fixed bindings.
Admin: CRM: Removed ooc-required from the JIT view only rendered forms.
Admin: CRM: Correctly saved the table name and not the name of the webapp.
Admin: CRM: If there were no records currently associated to this user the ability to add comes up with a nice error message.
Admin: Formbuilder: Handle old string config and convert to new format.
Admin: Ecomm: Products without attributes now have the ability to add the first attribute.
Admin: Export: All exports now export multi selects correctly.
Admin: Users: Related tables were not being deleted on edit save.
Admin: Users: Roles were not being deleted on edit save.
Admin: CRM / Webapps: Any form with multi select now saves correctly.
Urgent Admin: General: All multi select CRM / webapp fields were not saving correctly in latest build - have disabled multi select saves for non webapp items (tags etc until a fix can be put in)
Admin: Users: Pagination wasn't displaying due to the variable being overwritten before render.
Admin: General: Columns with a " in them will now import correctly.
Admin: Users: Columns with non HTML friendly will now display correctly.
Admin: General: Fixed wrong variable name is record_create.graphql.
Urgent Webapps: Admin: Item resaves were incorrectly regenerating slugs.
URGENT webapps: admin: Urgent out of band push to fix issue with slug generation. Resolved from fixing another bug.
Admin: General: Data for property builder is now also hard converted (or attempted too) to the attribute type.
Users: Admin: Filter now works again
Admin: General: Combination dropdowns will save again in entire admin tool.
Admin: General: Stripe gateway information saving now and removal of double ups of queries.
Ecomm: Payment: Stripe transaction data actually saving to database.
Ecomm: Payment: Stripe responses saving in request.
Admin: Users: Edit and delete buttons nowrap.
Fix user list customfields value so they are just a list, that, looks…
Exports: Latest API update.
Admin: Lost password on admin tool working.
Global: Wasn't exporting correctly, removed unneeded soft 404 stuff
Admin: General: Assets are now uploaded and registered correctly.
Admin: Filemanager: Download works on detailed view, Arie to fix row by row shortly.
General: DD: Links did not have correct status on redirect.
Admin: General: Several sections update so timezones correctly use global variable over a direct value. Timezones are getting closer!
Admin: General: Typo in upload.js.
Admin: User: Saving users deleted all custom fields
Admin: Users: Import: if there is no email address we wont even try to process it
Admin: Users: Import: if there is no user_id generated on update we wont try to recreate their custom fields (we don't know who they are)....
Admin: Users: Import: if the custom fields recreate fails we put an error to the log (not very visible because it is a background job but it's something we could check if it happened again)
Admin: Sitemaps: Generated time is now using the correct timezone for the instance.
Admin: Users: Last exported is now using the correct timezone for the instance.
Admin: Ecomm: Catalogs Last exported is now using the correct timezone for the instance.
Admin: User / Catalogs: Files with UTF-8 / UTF-16 characters will save correctly and open in excel with addition BOM added in javascript via blobs are byte arrays.
Admin: User: Export download the data rather than the login page (failed security).
Admin: User: Export Download generator now moved into API.
Admin: User: Export now correctly outputs custom fields.
Admin: All Forms: Forms with mutliple selects now don't have previous data in them (this is some sort of POS loop concat issue but worked around it).
Admin: All Forms: Multi select (non graphql) form data now correctly posted (app.js).
Admin: All Forms: Form render will now select a single (non multi) select field if the saved value is a string or array (i.e. "test" or ["test"]).
Admin: Many!: Corrected all default: false to use allow_false: true so that it will actually work.

Change

Admin: Ecomm: Webhooks have a timeout of 30 seconds (hard coded for now)
Admin: Forms: Detail view now correctly displays timezone created_at (Submitted).
Admin: Email: Template paths are now listed over physical paths in list view as this is the path / name you need to use.
Admin: Users: Importing users updates fields rather than delete & adding.
Admin: Users: Partial import columns will work now.
Admin: Users: Updating a user without enabled / ooc-tools access will no longer just remove existing permissions.
Admin: General: Updated generic_delete_id graphql to records_*
Admin: General: Get_UserByEmail graphql now returns all custom CRM fields as well.
Admin: General: record_update graphql updated syntax.
Admin: General: user_update_via_email graphql no longer updated profiles because we don't just want to nuke the data if it is missing.
General: is_json_valid function now correctly reports JSON Array's as valid, extended description below:
Admin: API: Cleanup debug logs.
Admin: Page Manager: Page titles are not clickable to edit much like other sections in admin tool.
Admin: Page Manager: If there is no page title it will display so that there is something to click on.
Admin: Ecomm: removed non search query in orders (uneeded code).
Admin: Ecomm: Removed add order (not sure why this was there).
Admin: General: Whitespace removal and cleanup.
Admin: General: Whitespace removal.
Admin: The word STAGING will appear in the middle top when on a staging server (if users can't figure out what server they are on it's written there now).
General: Changed global config to escape output instead of sanitize so that doesn't turn into . Doesn't affect html_safe outputs.
Admin: Users: Clicking email address edits that record, inline with the rest of the admintool.
Admin: Email: Clicking name edits that record, inline with the rest of the admintool.
Admin: Email: Metadata is appended too rather than overwriting.
Admin: Email: Email's without a name display "no-name" so that it is clickable.
Admin: Email: Email templates are a dropdown selector like pages rather than a textbox.
Admin: General: A form lists of email templates now include the name.
Admin: General: Updated email_send mutation to remove unneeded error info.
General: Ecomm: Exposed more of the payment process information to email and webhooks using stripe on ecomm checkout.
Frontend: Ecomm: Loaded JS lib after the payment intent as POS is faster than stripe and sometimes we got race conditions.
General: Delete all settings graphql now has input of table.
Admin: Forms: Payment times are now timezoned.
Admin: Forms: First column is now clickable in order to view all the data for that form.
Admin: Forms: Payments in forms not longer need to be named "payment" in order for them to display correctly (see next point).
Admin: Forms: Form type saved as part of the form save allowing for better displaying of information.
Admin: Forms: Payment summary shown in list view.
Forms: Frontend: Eway error codes are now handled serverside.
Admin: Users: Removed delete profile from graphql as I can't get answers from POS about how profiles are deleted or undeleted.
Admin: Import: Hopefully fixed single array element export for the 10th time.
Admin: Users: JIT form / webapps only request and render if there is valid info - no more JIT errors for sites with no forms or webapps.
Admin: General: is_json function uses new type_of POS filter that POS made for me (yeah again). Much higher accuracy and faster.
Admin: User: Some speed optimzations and improvements on graphql to try to avoid 504's.
General: SlugDupeCheck: Changed this common function to detect if the exact slug is already in use for add, and moved edit item to liquid to check if the slug has changed (if it hasn't then don't recommend a new name).
General: isnumber: Changed isnumber function to use new type_of POS filter that POS made for me (yeah) to detect ints or floats.
Admin: General: Whitespace cleanup.
Admin: Auth policies: Filename no longer needs .liquid in line with the rest of the admin tool.
Webapps: Frontend: Updated slugify to new function.
Admin: API: Started to move some major sections of the API includes as it's getting out of hand. Reduced main API file from 200K to 50K - This is a mid term solution, when we have more time further investigation into speed increases needs to be done.
Admin: Forms: Action is now slugify-ed so that it doesn't have characters google doesn't like.
Admin: General: Binding function in app.js to handle all slugification of fields without extra JS.
Admin: General: Slugify "super" - slugify JS plugin that now does everything POS can I believe.
Admin: Pages: Resaving metadata will no longer nuke custom metadata and only append to existing metadata.
Admin: General: Slugify function now converts & to - (as per POS).
Admin: General: Selectbox can now have a custom class added to it's container.
Admin: webapps: Webapps and items inside webapps now by default will sort by publishing date desc (newest first).
Admin: Ecomm: Product catalog selection now displays disabled catalogs in grey instead of not displaying them at all.
Admin: Ecomm: Selecting a catalog parent is now an autocomplete - want to change this to tree view later when we get more time.
Admin: Ecomm: In shop settings changed "general" to "invoicing" and added a product tab for dynamic slugs.
General: Frontend javascript slugify will convert . to - and remove - from the start and end of the slug. Change in line with how POS slugify works.
Ecomm: Shipping Engine: Calculation is skipped if cart summary = true (e.g. add to cart).
Admin: Ecomm: Product names are clickable to edit.
Admin: General: Misc jquery lib loading changed to local POS - DO NOT USE external CDN links ever please!
Admin: Ecomm: Product catalog path format changed to be scalableable and easier to query.
Admin: Ecomm: Slug path generator supports new path format.
Admin: Ecomm: Product catalog children reduced to one inital query and secondary children including root folders - down from 4 queries.
Admin: Ecomm: Product catalog children in alphabetical order.
Admin: Ecomm: Primary product catalog now required to save a product.
Admin: Ecomm: Primary product catalog now generates from the selection on inital load.
Admin: Ecomm: Product catalogs now load for the entire level if one item is selected in that level.
Admin: Forms: Used new money function to display money values.
Admin: Forms: Hidden fields now correctly display a label.
Admin: General: jsTree version upgrade and local JS hosted.
Payments: Minor code cleanup.
Admin: Ecomm: Add more warnings around using the shipping engine if you are only using shipping for flat rate shipping.
Frontend: URL's redirecting to no longer are case sensative.
General: Ecomm: Strip client_secret on stripe payments for ecomm.
General: setpropertyvalue puts single values that want to be an array into an array with one item.
General: media downloads to use record over model in query.
Ecomm: General: get_graph.graphql added primary_catalog information to query (mainly for URL generation).
Admin: Ecomm: URL for product is now "slug" until I can build the sitemap options into page to define the canonical URL (waiting Arie).
Admin: General: Autocomplete only requires 3 characters now to kick off a lookup (not 4 - @Brendan).
Admin: General: Left space to expand autocomplete to other areas including forms and categories (required SCK later).
Admin: General: webapp_populate_products.graphql increase to return 9999 products (SCK).
Admin: Shop settings: Generate slugs will break slugs, don't use.
Admin: Sitemaps: Background task set to high priority to timeout quicker and only 0 repeat on failure.
Admin: Ecomm: Cat slug generation speed and code optimization to big to ignore.
Admin: Ecomm: Rewrote the query to generate a list of catalogs to use objects and not string capture loops (more improvement needed in other areas).
Admin: Ecomm: Hacked products form build page to have a custom tab - no time to figure out the form field thingy built before which doesn't scale anyway.
Admin: Ecomm: Build a query to determine parents and related relatives on the same level plus everything at root level.
Admin: Ecomm: Changed query to use related records for catalogs rather than a massive query of everything to form a list.
Admin: General: Changed a few locations of changing to the is_json_valid that I must have missed.
Admin: General: All webapp_populate_* now have metadata identifing information about the table, columns etc. This is now a requirement and format change for all site.
Admin: API: Changed the format of the API to strictly output JSON only. I believe I have found all JS but there might be some things that stop working (super easy fix if so).
Admin: General: Creation of props for webapps somewhat modularize. Improvement could be done but I bricked the POS DB so will do later.
Admin: General: GetRecordbySlug graphql also outputs total records.
Admin: General: Moved saveas (blob) & timestamp functions to app_common.js.
Webapps: Frontend: API now outputs the action on success and failure so the frontend JS knows what just came back for what and can show the right messages.
Webapps: Frontend: Changed the init command in wa_init.js to oocwa_init just in case someone else uses that function name on the same page.
Webapps: Frontend: Add title to form elements to use for when required needs to tell the user what is missing.
Admin: Webapps: Removed blank form placeholders when not in use.
Admin: Webapps: Form classes are now outputted.
Admin: General: arrayoutput_xnumberofyears function now supports a starting from date.
Admin: Export: Fake form moved into the codeblock include for cleanlyness.
Webapps: Frontend API: Frontend permissions moved all into a JSON string.
Admin: Webapps: Removed graphqlexe as this isn't a loop.
Admin: webapps: Autocomplete JS options redone.
Admin: General: graphqlexe functions now accept, starts_with and per_page.
Admin: Form render: Now uses graphqlexe functions over includes for speed.
Admin: Webapps: Removed the fake path from items so people don't expect that to be the actual URL.
Admin: General: Removal of "unlock form" code, please don't code anything without letting me know.
Admin: Form render: f_graphqlexe supports starts_with for the label column.
Admin: Mailer: Users are synced in background task.
Admin: Mailer: Handle error messages on sync CRM fields rather than assuming everything works.
Admin: Mailer: Handle error messages on sync rather than assuming everything is successfull (note spelling).
Admin: General: Generic Error Message handler will now reformat newlines as per JSON spec (why did they have to be different!?).
Admin: API: hash_assign rather than add_hash_key - please don't hash_assign in all cases where possible.
Admin: Many: Removed alot of incorrect for= labels. DEVS please make sure you use this correctly.
Admin: General: Change required label to use the title rather than the HTML because other HTML has made it's way in there.
Admin: General: New GetCustomFields.graphql cleaning up some elements of the API.
Admin: Forms: Payment label also included when listing payment options.
Webapps: Frontend: Removed all serverside writing making the JS portable and LIB-able.
Webapps: Frontend: Make the JS a LIB so that we can update it in the future and not have to re-write entire websites that use webapps frontend.
Webapps: Frontend: Direct add / edit variable added to make it easier to know what the designer is trying to do.
Webapps: Frontend: Removed token access because we can just use the table. Auth is done via CSRF-TOKEN.
Admin: Webhooks: Objectified a few things so we don't have string passing issues in the future.
Admin: Webhooks: Final callback URL made in demo file to handle response from server.
Admin: Webhooks: Detection if the callback is missing to display an error that the callback is missing and the code doesn't know what to do with the response at this point.
Forms: Payment: No longer logging client secret as per stripe documentation recommendation.
Forms: Stripe payments: There is a button to "start" the stripe payment in order to not have payment indents for every page load.
Forms: Payments: Drop down select boxes for month and year select.
Forms: Payments: Improvements for "PCI compliant" methods used for eway.
Forms: Eway Payments: Change eway to save the form via standard form submit so the recapcha could work... the only problem is that the payment has already been taken... not sure the best option here.
Admin: General: Hash_assign optimizations.
Webapps: Import: Rows without a title will no longer be processed at all.
Payments: Admin: Removed placeholder on url page as it was confusing and we shouldn't put full URLs in here.
Ecomm: Eway: Changed ecommerce.js to reference the form by ID rather than click - while this is not the best it seems safer for developers that might mistakenly put other things in the form that break the "this" binding.
Ecomm: Eway: hash_assign cleanup for speed and optimization.
Admin: "all system partials": Updated metadata to indicate a systemfile - while files in private should never display there are OOC secret work arounds so better to identify the content now.
Admin: Global.liquid also excluded in content holder view.
Admin: Content holders: System files such as views, viewmanagers, export files, evals (in some cases), etc will no longer show in content holder list.
Admin: User CRM Webapps: Minor code optimzation.
Admin: General: General whitespace removal and hash_assign cleanup.
Admin: General: app.js: Removed OOCLockScreen code.
Admin: CRM: Removed tabs from main form.
Admin: General: app.js: Error Message hander can now know the element (tab) which trigger the error.
Admin: General: General whitespace removal, hash_assign changes.
Admin: Webapps: Added the ability if you know the webappitem ID to redirect directly to the record.
Admin: API Users: Converted custom fields save to new setproperties function.
Admin: General: Changed setproperties to try to detect an array before converting to array.
Admin: General: Any standard form element outside of CRM with multi select switched over to POS Array form element and API changed to work with this.
Admin: General: Formbuilder.js upgraded to v3.7.2.
Admin: Email: Path JS disabled to allow folders.
Admin: API: New "global variable" of id_int which is a int version of the ID. Eventually this will need to be all converted to Int.
Admin: General: Added properties export when using create_generic_one2many_relationship.graphql
Admin: General: Whitespace removal and minor syntax cleanup.
Admin: General: Change imports to support new JSON import using papa parse to support MS CSV formats.
Admin: Users: Import new format.
Admin: redirects (soft): Import new format.
Admin: redirects (hard): Import new format.
Admin: Webapps: Webapps will generate an infinity date with no date on import.
Admin: Webapps: If a webapp import does not have a slug generate from the title.
Admin: Import General: All import functions now use same logic thanks for code plugins, this has greatly reduced bugs and fix times over all areas of import.
Admin: General: Minor whitespace and ongoing cleanup.
Admin: General: generic_delete_string graphql value changed to int reducing warning logs and speedups.
Admin: General: Added alias to user_create.graphql for modularity.
Admin: General: Added alias to user_update_via_email.graphql for modularity.
Admin: General: Change various href="#" to javascript:;.
Admin: General: Added strip-ing to setpropertyvalue for values passing the function.
Admin: General: Removed unneeded logging in slugdupecheck.
webapps: admin: Webapp imports wont import without a title or slug (will auto generate in future version).
webapps: admin: Webapp imports, further debugging logging.
webapps: admin: Webapp imports without a publish date use "now" date.
webapps: admin: Webapp imports without a expiry date use "infinity" future date.
webapps: admin: Button href cleanup.
Admin: User: Property builder now uses property builder function.
Ecomm: General: Changes to stripe error messaging to go where other error messages are going.
Ecomm: General: Changes to ecommerce.js to use more AJAX and JSON rather than pasting strings.
Admin: Payment: Transactions without an ID will now show an error message saying there is no ID.
Admin: General: App.js new functions and merge of functions from ANL.
Ecomm: Payment: Stripe responses being loaded over API calls per transaction - fixes bugs if using sandbox and live on same site.
Ecomm: Payment: Change stripe API call to POST variables in the body rather than in the URL.
Ecomm: Admin: Emails to customer now a background modular task.
General: Various whitespace removal and hash_assign refactor where possible and practical.
Ecomm: Frontend: Cart supports Attributes with pricing.
Ecomm: You now can now order two of the same product with different attributes.
Ecomm: API: Code optimizations.
Ecomm: JS: Code optimizations.
Admin: Assets: Filemanager shows the asset path and magical URL (only use in embeds!).
Admin: API: Changed background task priority to low (4 hours) in an attempt to avoid timeouts on imports
Globals: New feature with slugdupecheck function to check for exact slug value where you don't care about a slug2 etc version.
Globals: Removed globals being a session because there is no need at least this point with no database query.
Admin: API: Converstation of more add_hash_value to hash_assign whereever seen (as working through).
Admin: General: General whitespace cleanup and identing.
Admin: General: Build a common "block code" for import & export, could be tighter but will save some cutting and pasting large bits of code if we are doing more exports and imports.
Admin: General: Removal of no longer needed earlier pages and sections (now all webapps).
Admin: General: Laid groundwork for timezones displays (page level global included in all sections).
Admin: Users: API will just delete existing custom records now and readd them because we don't care about the POS ID.
Admin: General: Misc code refactoring for speed and scalability.
Admin: Users / Catalogs: Export in background turned back on.
Admin: Users: Change wording from "user" to "users" (please keep consistant).
Admin: Users / Catalogs: We no longer edit related tables we delete and recreate since we don't care about the POS ID just the relationship ID.
Admin: General: Reformatting of some graphql files.
Admin: User: Custom field properties are now saved using the module schema itself.
Admin: User: Removed unused code variables.