Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions backend/news/+core-a6.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Update to kitconcept.core 2.0.0a6 (rename Path criteria, fix validation of Person username). @davisagli
1 change: 1 addition & 0 deletions backend/news/207.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add option to sort listing blocks by user relevance (when solr is enabled). @davisagli
11 changes: 7 additions & 4 deletions backend/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,10 @@ classifiers = [
"Programming Language :: Python :: 3.12",
]
dependencies = [
"kitconcept.core==2.0.0a5",
"kitconcept.core==2.0.0a6",
"plone.api",
"plone.app.discussion",
"plone.app.querystring>=3.0.0a2",
"plone.distribution",
"plone.restapi",
"plone.volto>=5.1.0",
Expand All @@ -36,6 +37,7 @@ dependencies = [
"pas.plugins.authomatic==2.0.0",
"pas.plugins.keycloakgroups==1.0.0b1",
"pas.plugins.oidc==2.0.0",
"collective-solr==10.0.0",
"kitconcept.solr==2.0.0a8",
]

Expand Down Expand Up @@ -235,9 +237,10 @@ constraint-dependencies = [
"click-default-group==1.2.4",
"click==8.2.1",
"cmarkgfm==2024.11.20",
"collective-solr==10.0.0",
"collective.MockMailHost==3.0.0",
"collective.monkeypatcher==2.0.1",
"collective.person==1.0.0b3",
"collective.person==1.0.0b4",
"collective.recipe.omelette==2.0.0",
"collective.recipe.template==2.2",
"collective.recipe.vscode==0.1.9",
Expand Down Expand Up @@ -293,7 +296,7 @@ constraint-dependencies = [
"jsonschema-specifications==2025.9.1",
"jsonschema==4.24.0",
"keyring==25.6.0",
"kitconcept.core==2.0.0a5",
"kitconcept.core==2.0.0a6",
"kitconcept.solr==2.0.0a8",
"kitconcept.voltolighttheme>=8.0.0a9",
"legacy-cgi==2.6.2",
Expand Down Expand Up @@ -361,7 +364,7 @@ constraint-dependencies = [
"plone.app.mosaic==3.3.1",
"plone.app.multilingual==8.3.1",
"plone.app.portlets==6.0.3",
"plone.app.querystring==2.1.4",
"plone.app.querystring>=3.0.0a2",
"plone.app.redirector==3.0.5",
"plone.app.registry==2.0.7",
"plone.app.relationfield==4.0.3",
Expand Down
2 changes: 2 additions & 0 deletions backend/src/kitconcept/intranet/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@
<include package=".services" />
<include package=".vocabularies" />

<includeOverrides file="overrides.zcml" />

</configure>
16 changes: 16 additions & 0 deletions backend/src/kitconcept/intranet/overrides.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:i18n="http://namespaces.zope.org/i18n"
i18n_domain="kitconcept.internet"
>

<browser:page
name="querybuilderresults"
for="*"
class=".search.QueryBuilder"
permission="zope2.View"
layer=".interfaces.IBrowserLayer"
/>

</configure>
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<version>20251104001</version>
<version>20251118001</version>
<dependencies>
<!-- <dependency>kitconcept.solr:default</dependency> -->
<dependency>plone.app.discussion:default</dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<registry xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="kitconcept.solr"
>

<records interface="kitconcept.solr.interfaces.IKitconceptSolrSettings"
prefix="kitconcept.solr"
>
<value key="config"
purge="false"
>{
"fieldList": [
"UID",
"Title",
"Description",
"Type",
"effective",
"start",
"created",
"end",
"path_string",
"mime_type",
"location",
"contact_email",
"contact_phone",
"image_scales",
"image_field",
"organisational_unit_reference",
"location_reference"
],
"searchTabs": [
{
"label": "All",
"filter": "Type(*)"
},
{
"label": "Pages",
"filter": "Type:(Page)"
},
{
"label": "Events",
"filter": "Type:(Event)"
},
{
"label": "Images",
"filter": "Type:(Image)"
},
{
"label": "Files",
"filter": "Type:(File)"
},
{
"label": "Persons",
"filter": "Type:(Person)",
"layouts": ["grid"],
"facetFields": [
{
"name": "organisational_unit_reference",
"label": "OU"
},
{
"name": "location_reference",
"label": "Location"
}
]
}
]
}</value>
</records>
</registry>
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<element value="kitconcept.intranet.person" />
<element value="collective.contact_behaviors.contact_info" />
<element value="kitconcept.core.additional_contact_info" />
<element value="collective.person.user" />
<element value="plone.namefromtitle" />
<element value="plone.shortname" />
<element value="volto.navtitle" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,11 @@
prefix="collective.solr"
>
<value key="use_tika">True</value>
<value key="required">
<element>SearchableText</element>
<!-- Add bq to params that cause the query to be routed to solr.
We use this for custom boosting. -->
<element>bq</element>
</value>
</records>
</registry>
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<registry xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="plone"
>

<records interface="plone.app.querystring.interfaces.IQueryField"
prefix="plone.app.querystring.field.userRelevance"
>
<value key="title"
i18n:translate=""
>User relevance</value>
<value key="description"
i18n:translate=""
>Relevance of the item to the current user</value>
<value key="enabled">False</value>
<value key="sortable">True</value>
<!-- This is not a real index, but a way to control the order of results. -->
<value key="operations" />
<value key="group"
i18n:translate=""
>Metadata</value>
</records>

</registry>
67 changes: 67 additions & 0 deletions backend/src/kitconcept/intranet/search.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
from plone import api
from plone.app.querystring.querybuilder import QueryBuilder as BaseQueryBuilder


class QueryBuilder(BaseQueryBuilder):
"""Custom QueryBuilder to add user-specific boosting when sort_on=userRelevance"""

def filter_query(self, query):
# We do this in filter_query instead of with an IQueryModifier adapter
# because an IQueryModifier would not have access to the sort_on param
query = super().filter_query(query)
self.make_user_relevance_query(query)
return query

def make_user_relevance_query(self, query):
"""If sort_on=userRelevance, add boosts based on the current user"""
# Remove fake userRelevance sort_on
sort_on = query.get("sort_on")
if sort_on != "userRelevance":
return
query.pop("sort_on")

# Find Person object for the current user
user = api.user.get_current()
if user is None:
return
brains = api.content.find(
type="Person", username=user.getId(), unrestricted=True
)
if len(brains) != 1:
return
person = brains[0]

# Add bq param, which is handled by solr
boosts = []
if person.organisational_unit_reference:
boosts.append(
f"organisational_unit_reference:({person.organisational_unit_reference})^10"
)
if person.location_reference:
boosts.append(f"location_reference:({person.location_reference})^8")
if boosts:
# Specify OR operator, since AND is default
query["bq"] = " OR " + " OR ".join(boosts)


# At the moment collective.solr discards the bq param,
# so we need to patch it back in here.
from collective.solr.search import Search


orig_buildQueryAndParameters = Search.buildQueryAndParameters


def buildQueryAndParameters(self, default=None, **args):
bq = args.pop("bq", None)
query, params = orig_buildQueryAndParameters(self, default=default, **args)
if bq:
query["bq"] = bq
return query, params


Search.buildQueryAndParameters = buildQueryAndParameters


# To do:
# - also boost recent content
1 change: 1 addition & 0 deletions backend/src/kitconcept/intranet/upgrades/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -83,5 +83,6 @@
<include package=".v20251021001" />
<include package=".v20251031001" />
<include package=".v20251104001" />
<include package=".v20251118001" />

</configure>
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
>
<genericsetup:upgradeSteps
profile="kitconcept.intranet:default"
source="20251104001"
destination="20251118001"
>
<genericsetup:upgradeDepends
title="Configure solr for intranet objects, add user relevance sorting."
import_steps="typeinfo plone.app.registry"
/>
</genericsetup:upgradeSteps>
</configure>
2 changes: 1 addition & 1 deletion backend/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def current_versions() -> CurrentVersions:
from kitconcept.core import __version__

return CurrentVersions(
base="20250917001",
base="20251209001",
dependencies="1000",
package=__version__,
)
Expand Down
1 change: 1 addition & 0 deletions backend/tests/content_types/test_fti.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ def _setup(self, portal, get_fti):
"kitconcept.intranet.person",
"collective.contact_behaviors.contact_info",
"kitconcept.core.additional_contact_info",
"collective.person.user",
"plone.namefromtitle",
"plone.shortname",
"volto.navtitle",
Expand Down
Loading