Skip to content

Commit

Permalink
Update order for all pages
Browse files Browse the repository at this point in the history
  • Loading branch information
mpolidori committed Jul 24, 2024
1 parent 81912bc commit 203c8b5
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions ckanext/pages/actions.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import datetime
import json
import sqlalchemy as sa

from ckan import model
import ckan.plugins as p
Expand Down Expand Up @@ -121,6 +122,39 @@ def _pages_update(context, data_dict):
for item in items:
setattr(out, item, data.get(item, 'page' if item == 'page_type' else None))

new_order = data.get("order")

if new_order is not None:
new_order = int(new_order)
session = context["session"]
existing_pages = (
session.query(db.Page).order_by(sa.cast(db.Page.order, sa.Integer)).all()
)

current_order = int(out.order) if out.order and out.order.isdigit() else None

for p in existing_pages:
p_order = int(p.order)

if p.name == page:
continue

if current_order is None or current_order == 0:
if p_order >= new_order:
p.order = str(p_order + 1)
elif new_order < current_order:
if new_order <= p_order < current_order:
p.order = str(p_order + 1)
elif new_order > current_order:
if current_order < p_order <= new_order:
p.order = str(p_order - 1)

session.add(p)

out.order = str(new_order)
session.add(out)
session.commit()

extras = {}

extra_keys = set(schema.keys()) - set(items + ['id', 'created'])
Expand Down

0 comments on commit 203c8b5

Please sign in to comment.