PloneKeywordManager maintenance

Yes, that's a real screenshot after 10 years of unsupervised plone usage of the "Subject" field.

I'm slightly re-imagining the interface for Products.PloneKeywordManager so we can get a handle on this.

It's a work in progress at the moment.

I have an opinion that if we add pagination to the keyword list we can get rid of the "View Range" filter on the keyword manager form. But if anyone is using it and has a different opinion, let me know.

2 Likes

We use it (read: my customers) and they are happy about the feature but are also not that happy with the UI. It would be great if this gets improved.

Btw. This add-on is one of the real old ones, dating back to Plone 1.0 times, created at Education Sprint in Paderborn 2003 (I attended but was not involved). The point is, the UI hadn't changed that much since then. Rethinking it would be awesome.

Funnily enough I was trying it today, we have +80k subjects on our index, but planning to tame it radically. A nicer UI would be great :+1:

1 Like

Sneak peak at the new interface that @agitator and I brainstormed up yesterday.


4 Likes

Some changes to the UI based on some critiques.

Also, notice that keyword 'counts' are now available.

Notice the 'whitespace' keywords. the first one is an empty string. This was being filtered out previously.

I think I'm pretty close to asking to merge the branch in to master.


Take it for a drive by using branch 'flipmcf/issue-17'

Buildout config:

[sources]
Products.PloneKeywordManager = git https://github.com/collective/Products.PloneKeywordManager.git branch=flipmcf/issue-17

[instance]
eggs = 
Products.PloneKeywordManager
2 Likes

Great news.

In that image above, we had 121976 objects with an empty string ( '' ) keyword in the index.

I just used the interface to delete that keyword.

It took some time (somewhere under 9 minutes on a slow dev environment, but it completed without conflict error)

Not sure about using it in a production environment while users are editing content, but the code seems to implement a single transaction for each object. Slower, but safer I think.

        for item in querySet:
            obj = item.getObject()
            value = self.getFieldValue(obj, indexName)
            ...
            updateField = self.getSetter(obj, indexName)
            if updateField is not None:
                updateField(value)
                idxs = self._getFullIndexList(indexName)
                obj.reindexObject(idxs=idxs)

(Products.PloneKeywordManager/tool.py at 638221a451db7c810fb5b7c86f923142ff28d41c · collective/Products.PloneKeywordManager · GitHub)

Feeling really good about this. It was just merged into master.

@jensens and I want to make this a 4.0.0 release for 5.2-py3 and drop the 2.7 support.

My first real big contribution. Thanks for the love.

6 Likes