Marketplace is missing new version

Hi, we published the new version of S3 Storage add-on 3.1.2.

I made sure that the latest version get the latest 3.1.2

However, a user notified me that he cannot update the add-on.

When I checked the marketplace again, Map Files to Compatible Versions selection of the latest Concrete CMS versions were gone blank

image

Maybe i don’t remember well… but did something happened so that the it lost version mapping info?

1 Like

I thought this was an issue recently as well. I could be incorrect also. EVERY time you upload a new version, you have to go back through that list and make sure you set all the appropriate versions again(set it to latest addon version). I thought this used to happen automatically for new versions?

I realized this when I was uploading new versions and clients were telling me there was no update available…

2 Likes

The version compatibility is automatically set to the latest upload of an addon until you set a version compatibility manually. After that, there is no way back. You subsequently have to set everything manually with every upgrade. This has been the way the version compatibility worked since c5.4 or earlier. It used to be an annoying quirk than most marketplace developers never encountered.

However, for the last couple of years (since v9 was released), any addon that started before v9 has to manually set compatibility with v9. That was a ‘quick-fix’ to prevent v8 only addons being erroneously installed on v9 sites.

Now to the consequences. All v8 to v9 compatible addons had v9 compatibility set manually and are stuck in the above. A long standing quirk of the marketplace that only affected a few addons with specific version compatibility requirements has now become a major nuisance for all active marketplace developers, a source of addons disappearing from the marketplace (because an update is mistakenly not marked compatible with anything) and a waster of countless hours of developer time repetitively setting dropdowns with every update of their addon and making mistakes in the process.

I highlighted this problem to @frz this timer last year. Unfortunately, like many marketplace bugs, any fix of the problem gets pushed aside pending the ‘new marketplace’.

@frz, @andrew, how about allocating a some hours to fix this and a few other marketplace issues to tide us over until the new marketplace is released and fully operational.

Here are my top two marketplace grudges.

  1. Fix the above. Provide a ‘latest package version’ option in the ‘Map Files to Compatible Versions’ list select dropdowns, or some other way to configure ‘use the latest version of the package with any core >= this’

  2. Clear out unmaintained, broken and unsupported addons (you have a list). Earlier this year you were talking of doing this by simply removing anything v8 only. If that is no longer feasible, at least modify the sort criteria so v8 only addons are pushed to the bottom of the list for any sort/filter. (Or give the PRB the green light and admins can remove them all manually)

1 Like

We’re actively working on marketplace 2.0 now, so we’re not going to derail that work to touch 15 year old code from the current marketplace.

However, we will keep this version matrix UX challenge in mind as we revisit this challenge in the new UX.

We will be leaving the v8 extensions behind as we migrate to the new marketplace, when my team will get to do a bunch of manual migrations of v9 and juggle the challenge of winding down sales from the old system as sales from the new system spin up.

@JohntheFish Thx. I didn’t know that once I set the version manually, I will lose the automatic versioning.

Anyway, I’ve been manually setting version after a while.

But my point was that I may have lost the setting after I set manually and saved…

Anyway, as Franz said, we are waiting for the new marketplace.

For developers fed up with setting the latest addon or theme version manually across too many core versions, here is a JavaScript bookmarklet to do it for you.

After adding the compressed bookmarklet to Chrome or Firefox, run the bookmarklet when you are on the Manage Files page for your addon or theme. It will seek out all the version selectors and set them to the last but one option, which is the latest version (The very last option is ‘none’).

(Remember to then click the Update Compatibility button)


 javascript:(()=>{const e=document.querySelectorAll('select[name^="mpfVersion"]');e.forEach(function(e){e=e.querySelectorAll("option");const o=e[e.length-2];o.selected=!0,console.log(o)})})();

image

The source is as below, then compressed onto a single line and prefixed with “javascript:”

(() => {
    const elements = document.querySelectorAll('select[name^="mpfVersion"]');
    elements.forEach(function(element){
        const options = element.querySelectorAll('option');
        const lastOption = options[options.length - 2];
        lastOption.selected = true;
        console.log(lastOption);
    })
})();

More about bookmarklets: What are Bookmarklets? How to Use JavaScript to Make a Bookmarklet in Chromium and Firefox
Compress: https://jscompress.com/

Now available in the documentation/tutorials at:

1 Like

And here’s a one-line alternative you can write directly in the console of the browser developer tools:

document.querySelectorAll('select[name^="mpfVersion"]').forEach((el) => el.selectedIndex = el.options.length - 2);
1 Like

Earlier this afternoon I wrote it up as a tutorial/howto. Last time I submitted such a howto it resulted in the marketplace getting fixed :smiley:

Here is another one, for saving time when assigning an addon to a project (your marketplace Projects page). This bookmarklet sorts the list of available addons on the project page.

Here is the compressed bookmarlet. I have called it ‘MP Sort’ in my browser bookmarks.

javascript:(()=>{const t=document.getElementById("mpLicenseID"),e=Array.from(t.options).sort((e,t)=>e.text.localeCompare(t.text));t.innerHTML="",e.forEach(e=>t.add(e))})();

And the uncompressed code for anyone who wants to tweak it:

(() => {
const mp_license_sel = document.getElementById('mpLicenseID');
const sorted_options = Array.from(mp_license_sel.options)
  .sort((a, b) => a.text.localeCompare(b.text));
mp_license_sel.innerHTML = '';
sorted_options.forEach((option) => mp_license_sel.add(option));
})();

I think @mnakalay may have posted similar functionality way back, but I can’t find the post to give him full credit.

Improvements would be:

  • Sorting the already assigned items.
  • Removing the already assigned items from the select.

good memory @JohntheFish but mine was designed to show the labels with each icon so we knew what they meant without having to hover each and every one…
And it doesn’t work anymore with the site redesign.

it’s here if anybody wants to have a look at the code
https://mnakalay.github.io/Concrete5-Profile-Easy-Read/

A ‘Latest Version’ option will be coming to the new marketplace. https://forums.concretecms.org/t/file-compatibility/7218/14

In the mean time, an update to the bookmarklet for the new marketplace. It changes some selectors, needed to trigger a change event on each select, then as its by itself the submit button is triggered.

(() => {
    const elements = document.querySelectorAll('table select.form-control');
    elements.forEach(function(element){
        const options = element.querySelectorAll('option');
        const lastOption = options[options.length - 2];
        lastOption.selected = true;
        const change_ev = new Event('change', { 'bubbles': true });
        element.dispatchEvent(change_ev);
        console.log(lastOption);
    });
    const submit = document.querySelector('.ccm-dashboard-form-actions button.btn-primary');
    submit.click();
})();

And the compressed version for a bookmarklet

javascript:(()=>{const e=document.querySelectorAll("table select.form-control");e.forEach(function(e){var o=e.querySelectorAll("option");const t=o[o.length-2];t.selected=!0;o=new Event("change",{bubbles:!0});e.dispatchEvent(o),console.log(t)});const o=document.querySelector(".ccm-dashboard-form-actions button.btn-primary");o.click()})();

@mlocati - your code above was nicer, but its too clever for me to add the same changes.

Since we’re sharing, I’ve been using this little snippet to bulk set version compatibility during the migration and clean up:

$('table tbody tr').each(
  (i, el) => {
    version = $(el).find('td:first-of-type').text(); 
    if (version.match(/^9/)) { // adjust as needed
      sel = $(el).find('select')[0]; 
      sel.value = sel[1].value; // adjust as needed
      sel.dispatchEvent(new Event('change')); 
    } 
});

@Myq - I have been trying to update my tutorial for the above at Setting addon/theme version compatibility in the marketplace :: Concrete CMS. I am logged in to the docs site, but don’t have any edit capability (I could post a new tutorial, but I can’t edit the existing)

@JohntheFish I logged in as your user, went to “Your Contributions”, clicked the edit button on the row for that tutorial, and I was able to edit it https://documentation.concretecms.org/contribute/edit/4943

Maybe try that flow? You won’t be able to edit it by going directly to the page.