Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
8d81f51
Added the changes for the sending notification at time of registerati…
Ankit-lab809 Jul 1, 2025
3531c83
added changes to add snippet to manage message and title
Ankit-lab809 Jul 3, 2025
8627650
Notifications WIP
Jul 4, 2025
338f10f
added changes for enable/diable notifications
Ankit-lab809 Jul 4, 2025
916a7f3
added changes for enable/diable notifications
Ankit-lab809 Jul 4, 2025
7d30506
Added the js of notificationpreference
Ankit-lab809 Jul 7, 2025
aa6ffd6
WIP notifications frontend
Jul 9, 2025
ebeacb1
Notifications frontend WIP
Jul 9, 2025
06cae38
Notifications Frontend
Jul 9, 2025
de03ba7
changes to send notifiation to opt in users
Ankit-lab809 Jul 11, 2025
bdaf6d7
changes of celery image and configuration
Ankit-lab809 Jul 11, 2025
23edd28
URL clickable and sendign data to push notifications
Jul 15, 2025
2837c7e
Notifications url changes
Jul 16, 2025
8f73f97
Show description as well in Notifications
Jul 16, 2025
e954dc5
Added changes to create page of the notification preference and also …
Ankit-lab809 Jul 16, 2025
a455865
Merge branch 'main' of github.com:unicef/iogt into feature/registrati…
Ankit-lab809 Jul 16, 2025
2a85409
Reverted commented code
Jul 16, 2025
f4969b8
wagtail upgrade 1
kushvah-ajaysingh-nagarro Jul 16, 2025
6f9ab6e
Upgraded required packages, made fix in code
Jul 17, 2025
2d6b42a
Added redirect url for artilce and survey
Ankit-lab809 Jul 18, 2025
a42c8fa
Merged changesMerge branch 'feature/registration_notification_to_user…
Ankit-lab809 Jul 18, 2025
ba839ce
Generated hashes
Jul 21, 2025
0e28a2a
Fixed issue on new Article page
Jul 22, 2025
ce55828
included modeladmin in installed apps
Jul 22, 2025
ae3d267
Added notify and publish button on article and survey
Ankit-lab809 Jul 24, 2025
77d39b0
added checkbox
Ankit-lab809 Jul 28, 2025
d817983
3.0.8-rc.3
shubhamgoel02 Jul 28, 2025
b21741b
Notifications post demo changes
Jul 28, 2025
77239a2
Shown call out at notification symbol and also sent artcile/survey name
Ankit-lab809 Jul 30, 2025
0a9b112
notifications demo feedback completed
Jul 30, 2025
7091962
Changed icon on profile page
Jul 30, 2025
b38e9a1
Include name in notification and corrected designs
Ankit-lab809 Jul 31, 2025
37b136f
Commiting updated requirements file
Aug 1, 2025
8ff7a63
Merge branch 'feature/registration_notification_to_users' into wagtai…
Aug 1, 2025
710cd3b
Replaced field_as_li to field.html and removed cache for notifications
Aug 4, 2025
89c1cec
Merge branch 'main' into feature/registration_notification_to_users
Aug 7, 2025
74ee706
3.0.9-rc.1
shubhamgoel02 Aug 7, 2025
a50bf74
added dependencies of celery
Ankit-lab809 Aug 7, 2025
a2f6b69
recreated admin_notificaitons migrations
Aug 8, 2025
daa2f41
3.0.9-rc.2
shubhamgoel02 Aug 8, 2025
9ae9e79
Added svg icon
Ankit-lab809 Aug 11, 2025
004ff10
bell icon was not showing up because of library security issue
Aug 11, 2025
7db29e5
added po files for nigeria countries
Ankit-lab809 Aug 11, 2025
8cc9959
added changes in the csv files
Ankit-lab809 Aug 11, 2025
9c3771d
3.0.9-rc.3
shubhamgoel02 Aug 12, 2025
2f9d009
added celery configs
Ankit-lab809 Aug 12, 2025
60cdbd0
Merged changes Merge branch 'feature/registration_notification_to_use…
Ankit-lab809 Aug 12, 2025
c835896
3.0.9-rc.4
shubhamgoel02 Aug 12, 2025
2ddc186
chnaged redis image name
Ankit-lab809 Aug 12, 2025
7425da1
Merged changes Merge branch 'feature/registration_notification_to_use…
Ankit-lab809 Aug 12, 2025
6ef03a8
3.0.9-rc.5
shubhamgoel02 Aug 12, 2025
30ed0d0
added translations
Ankit-lab809 Aug 17, 2025
6438995
fixed issues of media, images pages
Ankit-lab809 Aug 18, 2025
827a00d
done changes in po files
Ankit-lab809 Aug 18, 2025
57c1b4f
removed unnecessary code
Ankit-lab809 Aug 18, 2025
cddc5c3
Merged with nigeria languages Merge branch 'nigerian_languages_integr…
Ankit-lab809 Aug 18, 2025
0c16535
changed in po files
Ankit-lab809 Aug 18, 2025
39ad40d
Merge code Merge branch 'feature/registration_notification_to_users' …
Ankit-lab809 Aug 18, 2025
4ba9f60
3.0.9-rc.6
shubhamgoel02 Aug 18, 2025
8479aaa
Added css for collection dropdown
Ankit-lab809 Aug 20, 2025
6102a20
Added css for translation and media page
Ankit-lab809 Aug 21, 2025
cb0f81b
changed in the remember me text
Ankit-lab809 Aug 21, 2025
8c70877
Update base.py
shubhamgoel02 Aug 21, 2025
b52995c
3.0.9-rc.7
shubhamgoel02 Aug 21, 2025
4d87206
Update celery.py
shubhamgoel02 Aug 21, 2025
1ca566e
3.0.9-rc.8
shubhamgoel02 Aug 21, 2025
e49a1d4
Merged code
Ankit-lab809 Aug 21, 2025
cf3a70c
MergedMerge branch 'feature/merge_notification_and_nigeria_translatio…
Ankit-lab809 Aug 21, 2025
fc79146
Update celery.py
shubhamgoel02 Aug 21, 2025
5393608
3.0.9-rc.9
shubhamgoel02 Aug 21, 2025
27701ab
Create start.sh
shubhamgoel02 Aug 21, 2025
9d3fc29
Update Dockerfile
shubhamgoel02 Aug 21, 2025
8015044
3.0.9-rc.10
shubhamgoel02 Aug 21, 2025
583f771
Update Dockerfile
shubhamgoel02 Aug 25, 2025
4e03e3e
Delete scripts/start.sh
shubhamgoel02 Aug 25, 2025
e92a9f1
3.0.9-rc.11
shubhamgoel02 Aug 25, 2025
55b5311
Changed in the image section
Ankit-lab809 Aug 25, 2025
f27e697
Merged Merge branch 'nigerian_languages_integration' of https://githu…
Ankit-lab809 Aug 25, 2025
39dd13d
Merged Merge branch 'feature/merge_notification_and_nigeria_translati…
Ankit-lab809 Aug 25, 2025
0043d13
removed unused code and also added translation for remove me text
Ankit-lab809 Aug 25, 2025
2ddee6b
3.0.9-rc.12
shubhamgoel02 Aug 26, 2025
38dd2c9
Changed class_name to classname, fixing css for headers WIP
Aug 26, 2025
708b171
3.0.9-rc.13
shubhamgoel02 Aug 26, 2025
4aad964
3.0.9-rc.14
shubhamgoel02 Aug 27, 2025
5bd2a5f
Fixed push notifications
Aug 29, 2025
853c5fc
Moved variables to env file
Ankit-lab809 Aug 29, 2025
e7be763
3.0.9-rc.15
shubhamgoel02 Sep 1, 2025
2e1f376
Fixed the layout
Ankit-lab809 Sep 1, 2025
80a2548
CSS of dropdown and header
Sep 2, 2025
87a72f6
fixed css of form data and import export users page
Sep 2, 2025
2830273
removed top padding from header
Sep 2, 2025
9355bc7
fixed user page and layout
Ankit-lab809 Sep 2, 2025
d99b16b
Merge branch 'feature/fix_upgrade_issues' of https://github.com/unice…
Ankit-lab809 Sep 2, 2025
6fdd65b
Merge branch 'feature/merge_notification_and_nigeria_translations' of…
Ankit-lab809 Sep 2, 2025
460898a
Merge branches
Ankit-lab809 Sep 2, 2025
928f9d0
Merge
Ankit-lab809 Sep 2, 2025
b157e7a
fixed packages versions
Sep 2, 2025
847df71
added margin-top on right sided buttons on header
Sep 2, 2025
6a1ff0f
Changed in the user feature
Ankit-lab809 Sep 2, 2025
84c2092
Removed spaces
Ankit-lab809 Sep 2, 2025
cfa2614
3.0.9-rc.16
shubhamgoel02 Sep 3, 2025
11dad54
Update base.py
shubhamgoel02 Sep 3, 2025
147c4b6
3.0.9-rc.17
shubhamgoel02 Sep 3, 2025
0f8a558
3.0.9-rc.18
shubhamgoel02 Sep 4, 2025
363367c
Updated CACHE_LOCATION
shubhamgoel02 Sep 4, 2025
e993467
Updated CACHE
shubhamgoel02 Sep 4, 2025
bc7021b
Updated cache
shubhamgoel02 Sep 4, 2025
19e6ad4
3.0.9-rc.22
shubhamgoel02 Sep 4, 2025
526fc9a
Cache details updated
shubhamgoel02 Sep 4, 2025
13b4924
UAT feedback: Add Notification Preference on Users page
Sep 4, 2025
80c330c
UAT feedback: Removed add, edit, delete permission from notificaitons…
Sep 4, 2025
7676e28
Removed create_view_class because that should be handled with Permiss…
Sep 4, 2025
aae76f5
UAT feedback: Redirect users to notification preferences page after r…
Sep 4, 2025
f0561fb
Update base.py
shubhamgoel02 Sep 5, 2025
22011a7
3.0.9-rc.24
shubhamgoel02 Sep 5, 2025
3af5dfb
Update base.py
shubhamgoel02 Sep 5, 2025
7b33490
3.0.9-rc.25
shubhamgoel02 Sep 5, 2025
8440434
Merged and also done added on notify and publish button
Ankit-lab809 Sep 5, 2025
4432279
Merged changes Merge branch 'feature/merge_notification_languages_upg…
Ankit-lab809 Sep 5, 2025
3ba363e
Removed extra spaces
Ankit-lab809 Sep 5, 2025
5433be3
3.0.9-rc.26
shubhamgoel02 Sep 5, 2025
21af449
removed same name migration
Ankit-lab809 Sep 5, 2025
7cbd74c
Merged Merge branch 'feature/uat_notification_recommendations' of htt…
Ankit-lab809 Sep 5, 2025
31d5b5c
3.0.9-rc.27
shubhamgoel02 Sep 5, 2025
27d6143
Added new script to copy data of page revision to revison
Ankit-lab809 Sep 8, 2025
2682c97
3.0.9-rc.28
shubhamgoel02 Sep 8, 2025
389bc91
Added new column in user listing page
Ankit-lab809 Sep 15, 2025
f88e1a8
Update production.py
shubhamgoel02 Sep 15, 2025
4e5ba19
Corrected typo
Ankit-lab809 Sep 15, 2025
c14707b
Merged Merge branch 'feature/uat_notification_recommendations' of htt…
Ankit-lab809 Sep 15, 2025
d0f9fc3
3.0.9-rc.30
shubhamgoel02 Sep 15, 2025
175f32b
Added autocomplete search on users and content tags in notification p…
sachin-mehta Sep 15, 2025
1b7b778
changed color of autocomplete options
sachin-mehta Sep 15, 2025
06da97a
3.0.9-rc.31
shubhamgoel02 Sep 16, 2025
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
3 changes: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ RUN apt-get update --yes --quiet \
libpq5 \
&& pip install --upgrade pip \
&& pip install pip-tools \
&& rm -rf /var/lib/apt/lists/*
&& rm -rf /var/lib/apt/lists/* \
&& apt-get install -y git
WORKDIR /opt
RUN python -m venv venv
ENV PATH="/opt/venv/bin:$PATH"
Expand Down
File renamed without changes.
File renamed without changes.
5 changes: 5 additions & 0 deletions admin_notifications/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class AdminNotificationsConfig(AppConfig):
name = 'admin_notifications'
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Generated by Django 3.1.14 on 2022-07-29 13:17
# Generated by Django 5.2.4 on 2025-09-04 11:37

from django.db import migrations, models

Expand All @@ -13,13 +13,13 @@ class Migration(migrations.Migration):

operations = [
migrations.CreateModel(
name='Notification',
name='AdminNotification',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('head', models.CharField(max_length=255)),
('body', models.TextField()),
('url', models.URLField(blank=True, null=True)),
('groups', models.ManyToManyField(related_name='notifications', to='auth.Group')),
('groups', models.ManyToManyField(related_name='admin_notifications', to='auth.group')),
],
),
]
6 changes: 3 additions & 3 deletions notifications/models.py → admin_notifications/models.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
from django.db import models


class Notification(models.Model):
class AdminNotification(models.Model):
head = models.CharField(max_length=255)
body = models.TextField()
url = models.URLField(null=True, blank=True)

groups = models.ManyToManyField(to='auth.Group', related_name='notifications')
groups = models.ManyToManyField(to='auth.Group', related_name='admin_notifications')

def __str__(self):
return self.head

File renamed without changes.
61 changes: 61 additions & 0 deletions admin_notifications/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import json
from user_notifications.models import NotificationMeta, NotificationLog
from wagtail_modeladmin.views import CreateView
from webpush import send_user_notification
from notifications.signals import notify
from notifications.models import Notification
from iogt_users.models import User


class CreateNotificationView(CreateView):
def form_valid(self, form):
payload = form.cleaned_data.copy()
groups = payload.pop('groups')
users = User.objects.filter(groups__in=groups).distinct()
for user in users:
try:
# 1. Create Notification
notify.send(
sender=self.request.user,
recipient=user,
verb=payload.get('head', 'New Notification'),
description=payload.get('body', ''),
url=payload.get("url", "/")
)

# 2. Get latest Notification for user (created just now)
notif_instance = Notification.objects.filter(recipient=user).order_by('-timestamp').first()
if not notif_instance:
continue # Shouldn't happen, but guard just in case

# 3. Avoid duplicate meta creation
NotificationMeta.objects.get_or_create(notification=notif_instance)

# 4. Send Web Push
send_user_notification(
user=user,
payload={
"title": payload.get("head", "IoGT Notification"),
"body": payload.get("body", ""),
"url": payload.get("url", "/"),
"notification_id": notif_instance.id
},
ttl=1000)
NotificationLog.objects.create(
user=user,
notification_key=payload.get("head", "IoGT Notification"),
tags='',
state="sent",
notification=notif_instance
)
except Exception as e:
# Optional: log failure for user if user or template not found
NotificationLog.objects.create(
user=user,
notification_key=payload.get("head", "IoGT Notification"),
tags='',
state="failed",
error_message=f"Task failure: {str(e)}",
notification=None
)
return super().form_valid(form)
16 changes: 16 additions & 0 deletions admin_notifications/wagtail_hooks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from django.conf import settings
from wagtail_modeladmin.options import ModelAdmin
from admin_notifications.models import AdminNotification
from admin_notifications.views import CreateNotificationView


class NotificationModelAdmin(ModelAdmin):
model = AdminNotification
menu_label = 'Admin Notifications'
menu_icon = 'mail'
list_display = ('head', 'body', 'url',)
list_filter = ('groups',)
search_fields = ('head', 'body', 'url',)
menu_order = 601
create_view_class = CreateNotificationView

2 changes: 1 addition & 1 deletion comments/button_helpers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.urls import reverse
from wagtail.contrib.modeladmin.helpers import ButtonHelper
from wagtail_modeladmin.helpers import ButtonHelper


class XtdCommentAdminButtonHelper(ButtonHelper):
Expand Down
2 changes: 1 addition & 1 deletion comments/templates/comment_reply.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<div class="row nice-padding">
<div class="left">
<div class="col header-title">
<h1>{% icon name='openquote' class_name="header-title-icon" %}
<h1>{% icon name='openquote' classname="header-title-icon" %}
Add reply for Page <span>{{ comment.content_object }}</span></h1>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion comments/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from django.db.models import Q
from django.shortcuts import get_object_or_404, redirect
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _
from django.utils.translation import gettext as _
from django.views import View
from django.views.decorators.csrf import csrf_protect
from django.views.decorators.http import require_POST
Expand Down
4 changes: 2 additions & 2 deletions comments/wagtail_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
from django.utils import timezone
from django.utils.html import format_html
from django_comments_xtd.models import XtdComment
from wagtail.contrib.modeladmin.options import ModelAdminGroup, ModelAdmin, modeladmin_register
from wagtail.contrib.modeladmin.helpers.permission import PermissionHelper
from wagtail_modeladmin.options import ModelAdminGroup, ModelAdmin, modeladmin_register
from wagtail_modeladmin.helpers.permission import PermissionHelper

from .button_helpers import XtdCommentAdminButtonHelper
from .filters import FlaggedFilter, ModerationFilter, PublishedFilter
Expand Down
4 changes: 4 additions & 0 deletions common/translation_utils/translation_status.csv
Original file line number Diff line number Diff line change
Expand Up @@ -716,3 +716,7 @@ Custom permissions,,,,needs translation,,,
Submit,,translate,,has partial translation,,,
Farsi,,not needed,,not needed,,,
Burmese,,not needed,,not needed,,,
Hausa,,not needed,,not needed,,,
Yoruba,,not needed,,not needed,,,
Igbo,,not needed,,not needed,,,
Pidgin,,not needed,,not needed,,,
8 changes: 4 additions & 4 deletions common/translation_utils/translations.csv
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Row type,is in use,comment,English,Spanish,French,Portuguese,Arabic,Swahili,Chichewa,Kinyarwanda,Ndebele,Shona,Kirundi,Malagasy,Nepali,Urdu,Kichwa/Quichua,Russian,Zulu,Tigrinya,Tajik,Kurdish,Khmer,Uzbek,Karakalpak,Indonesian,Sinhala,Tamil,Bengali,Dari,Pashto,Hindi,Ukraine,Turkish,Farsi,Burmese
Language,,,English,Spanish,French,Portuguese,Arabic,Swahili,Chichewa,Kinyarwanda,Ndebele,Shona,Kirundi,Malagasy,Nepali,Urdu,Kichwa/Quichua,Russian,Zulu,Tigrinya,Tajik,Kurdish,Khmer,Uzbek,Karakalpak,Indonesian,Sinhala,Tamil,Bengali,Dari,Pashto,Hindi,Ukraine,Turkish,Farsi,Burmese
ll-LL,,,en,es,fr-CG,pt-MZ,ar-MA,sw-KE,ny-MW,rw-RW,nr-ZW,sn-ZW,rn-BI,mg-MG,ne-NP,ur-PK,qu-EC,ru-RU,zu-ZA,ti-ET,tg-TJ,ku,km-KH,uz-UZ,kaa,id,si,ta,bn-BN,prs,ps,hi,uk,tr,fa,my
ll,,,en,es,fr,pt,ar,sw,ny,rw,nr,sn,rn,mg,ne,ur,qu,ru,zu,ti,tg,ku,km,uz,kaa,id,si,ta,bn,prs,ps,hi,uk,tr,fa,my
Row type,is in use,comment,English,Spanish,French,Portuguese,Arabic,Swahili,Chichewa,Kinyarwanda,Ndebele,Shona,Kirundi,Malagasy,Nepali,Urdu,Kichwa/Quichua,Russian,Zulu,Tigrinya,Tajik,Kurdish,Khmer,Uzbek,Karakalpak,Indonesian,Sinhala,Tamil,Bengali,Dari,Pashto,Hindi,Ukraine,Turkish,Farsi,Burmese,Hausa,Yoruba,Igbo,Pidgin
Language,,,English,Spanish,French,Portuguese,Arabic,Swahili,Chichewa,Kinyarwanda,Ndebele,Shona,Kirundi,Malagasy,Nepali,Urdu,Kichwa/Quichua,Russian,Zulu,Tigrinya,Tajik,Kurdish,Khmer,Uzbek,Karakalpak,Indonesian,Sinhala,Tamil,Bengali,Dari,Pashto,Hindi,Ukraine,Turkish,Farsi,Burmese,Hausa,Yoruba,Igbo,Pidgin
ll-LL,,,en,es,fr-CG,pt-MZ,ar-MA,sw-KE,ny-MW,rw-RW,nr-ZW,sn-ZW,rn-BI,mg-MG,ne-NP,ur-PK,qu-EC,ru-RU,zu-ZA,ti-ET,tg-TJ,ku,km-KH,uz-UZ,kaa,id,si,ta,bn-BN,prs,ps,hi,uk,tr,fa,my,ha,yo,ig,pcm
ll,,,en,es,fr,pt,ar,sw,ny,rw,nr,sn,rn,mg,ne,ur,qu,ru,zu,ti,tg,ku,km,uz,kaa,id,si,ta,bn,prs,ps,hi,uk,tr,fa,my,ha,yo,ig,pcm
Region,,,English,Latin America,"West African, DRC","Angola, Mozambique",Morocco,Kenya,"Malawi, Zambia",Rwanda,Zimbabwe,Zimbabwe,Burundi,Madagascar,Nepal,Pakistan,Ecuador,Russia,South Africa,Ethiopia,Tajikistan,Sorani,Cambodia,Uzbekistan,Karakalpakstan,Indonesia,Sri Lanka,Sri Lanka,Bangladesh,Afghanistan,Afghanistan,India,Ukraine,Turkey,Iran,Myanmar
Section,,,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Homepage,Головна,,,
,,,Polls,Encuestas,Sondages,Votações,استطلاعات الرأي,Utafiti,Kafukufuku ofunsa maganizo a anthu,Amatora,Ikhetho,Sarudzo,Amatora,Fitsapan-kevitra,चुनावहरू,پولز,Tapuykuna,Голосования,Ukuvota,መረጻታት,Назарсанҷиҳо,دەنگدانەکان,ការបោះឆ្នោតស្ទង់មតិ,Tanlovlar,Sorawnama,Jajak pendapat,,,,,,,Опитування,,,
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ services:
environment:
POSTGRES_USER: iogt
POSTGRES_PASSWORD: iogt
POSTGRES_DB: iogt
POSTGRES_DB: iogt
37 changes: 35 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,43 @@ services:
target: dev
args:
requirements: requirements.dev.txt
environment:
DJANGO_SETTINGS_MODULE: iogt.settings.dev
env_file:
- .env
image: iogt:latest

ports:
- "8000:8000"
depends_on:
- db
volumes:
- ./:/app/
# db:
# image: postgres:14-alpine
# environment:
# POSTGRES_USER: postgres
# POSTGRES_PASSWORD: postgresiogt
# POSTGRES_DB: iogt
celery:
build:
context: ./
target: dev
args:
requirements: requirements.dev.txt
command: celery -A iogt worker -l info
depends_on:
- django
- redis
env_file:
- .env
volumes:
- ./:/app/

redis:
image: redis:7

db:
image: postgres:14-alpine
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgresiogt
POSTGRES_DB: iogt
2 changes: 1 addition & 1 deletion home/admin.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.contrib import admin
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
from wagtail_modeladmin.options import ModelAdmin, modeladmin_register
from django.db.models import Avg, Count
from django.utils.html import format_html
from django.urls import reverse
Expand Down
2 changes: 1 addition & 1 deletion home/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ def clean(self):
f'This section is not eligible for showing the progress bar. '
f'Disable "Show Progress Bar" on "{progress_bar_enabled_ancestor_title}" section first.')

return cleaned_data
return cleaned_data
60 changes: 60 additions & 0 deletions home/management/commands/copy_page_revisions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import logging
from django.core.management.base import BaseCommand
from django.contrib.contenttypes.models import ContentType
from django.db import connection
from wagtail.models import Page, Revision

logger = logging.getLogger(__name__)

class Command(BaseCommand):
help = "Copy missing revisions from wagtailcore_pagerevision to wagtail_revision"

def handle(self, *args, **options):
page_ct = ContentType.objects.get_for_model(Page)
copied, skipped, errors = 0, 0, 0

logger.info("Starting migration from wagtailcore_pagerevision → wagtail_revision")

with connection.cursor() as cursor:
cursor.execute("""
SELECT id, created_at, content, approved_go_live_at, page_id, user_id
FROM wagtailcore_pagerevision
""")
rows = cursor.fetchall()

for row in rows:
pr_id, created_at, content, approved_go_live_at, page_id, user_id = row

page = Page.objects.filter(id=page_id).first()
if not page:
logger.warning(f"Skipping orphaned revision {pr_id}, page_id={page_id} not found")
continue

# Deduplication check
if Revision.objects.filter(
content_type=page_ct,
object_id=str(page.id),
created_at=created_at,
).exists():
skipped += 1
logger.debug(f"Skipped duplicate revision {pr_id} for page {page_id}")
continue

try:
Revision.objects.create(
base_content_type=page_ct,
content=content,
approved_go_live_at=approved_go_live_at,
created_at=created_at,
user_id=user_id,
content_type=page_ct,
object_id=str(page.id),
object_str=str(page),
)
copied += 1
logger.info(f"Copied revision {pr_id} → page {page_id}")
except Exception as e:
errors += 1
logger.error(f"Error copying revision {pr_id}: {e}")

logger.info(f"Migration completed. Copied={copied}, Skipped={skipped}, Errors={errors}")
Loading