Skip to content

Commit e1aa6f1

Browse files
authored
Merge pull request #1861 from airqo-platform/staging
move to production
2 parents 71aeb25 + ac7fad2 commit e1aa6f1

File tree

135 files changed

+4380
-1335
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

135 files changed

+4380
-1335
lines changed

.github/workflows/deploy-frontend-pr-previews.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,8 +547,8 @@ jobs:
547547
docker build . \
548548
--build-arg REACT_WEB_STATIC_HOST=${{ secrets.WEBSITE_DEV_REACT_WEB_STATIC_HOST }} \
549549
--build-arg REACT_NETMANAGER_BASE_URL=${{ secrets.WEBSITE_STAGE_REACT_NETMANAGER_BASE_URL }} \
550-
--build-arg REACT_APP_NETMANAGER_URL=${{ secrets.STAGE_REACT_APP_NETMANAGER_URL }} \
551-
--build-arg REACT_APP_BASE_AIRQLOUDS_URL=${{ secrets.WEBSITE_REACT_APP_BASE_AIRQLOUDS_URL }} \
550+
--build-arg REACT_APP_NETMANAGER_URL=${{ secrets.WEBSITE_STAGE_REACT_NETMANAGER }} \
551+
--build-arg REACT_APP_BASE_AIRQLOUDS_URL=${{ secrets.WEBSITE_STAGE_REACT_APP_BASE_AIRQLOUDS_URL }} \
552552
--build-arg REACT_APP_BASE_NEWSLETTER_URL=${{ secrets.WEBSITE_REACT_APP_BASE_NEWSLETTER_URL }} \
553553
--build-arg REACT_APP_WEBSITE_BASE_URL=${{ secrets.WEBSITE_DEV_REACT_APP_WEBSITE_BASE_URL }} \
554554
--build-arg REACT_APP_AUTHORIZATION_TOKEN=${{ secrets.WEBSITE_STAGE_REACT_APP_AUTHORIZATION_TOKEN }} \

k8s/platform/values-prod.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ replicaCount: 1
22
image:
33
repository: eu.gcr.io/airqo-250220/airqo-next-platform
44
pullPolicy: Always
5-
tag: prod-f834e7b6-1707411719
5+
tag: prod-71aeb25c-1708070344
66
imagePullSecrets: []
77
nameOverride: ''
88
fullnameOverride: ''

mobile/lib/screens/on_boarding/splash_screen.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ class SplashScreenState extends State<SplashScreen>
4545

4646
@override
4747
Widget build(BuildContext context) {
48-
final locale = Localizations.localeOf(context);
49-
AirQoApp.setLocale(context, locale);
5048

5149
return FutureBuilder<void>(
5250
future: _initializationFuture,

website/backend/FAQ/admin.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
from django.contrib import admin
22
from .models import FAQ
3+
from modeltranslation.admin import TranslationAdmin
4+
from .translation import *
35

46

57
# Register your models here.
68
@admin.register(FAQ)
7-
class FAQAdmin(admin.ModelAdmin):
9+
class FAQAdmin(TranslationAdmin):
810
list_display = ('question', 'answer', 'created_at')
911
readonly_fields = ('created_at', 'updated_at')
1012
list_per_page = 10
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Generated by Django 4.2.5 on 2024-02-07 17:12
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('FAQ', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='faq',
15+
name='answer_en',
16+
field=models.TextField(null=True),
17+
),
18+
migrations.AddField(
19+
model_name='faq',
20+
name='answer_fr',
21+
field=models.TextField(null=True),
22+
),
23+
migrations.AddField(
24+
model_name='faq',
25+
name='question_en',
26+
field=models.CharField(max_length=150, null=True),
27+
),
28+
migrations.AddField(
29+
model_name='faq',
30+
name='question_fr',
31+
field=models.CharField(max_length=150, null=True),
32+
),
33+
]

website/backend/FAQ/translation.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from modeltranslation.translator import register, TranslationOptions
2+
from .models import *
3+
4+
5+
@register(FAQ)
6+
class FAQTranslationOptions(TranslationOptions):
7+
fields = ('question', 'answer',)

website/backend/FAQ/views.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from django.utils import translation
12
from rest_framework import viewsets
23
from .models import FAQ
34
from .serializers import FAQSerializer
@@ -6,3 +7,12 @@
67
class FAQViewSet(viewsets.ReadOnlyModelViewSet):
78
queryset = FAQ.objects.all()
89
serializer_class = FAQSerializer
10+
permission_classes = []
11+
12+
def list(self, request, *args, **kwargs):
13+
language = request.session.get('django_language')
14+
if language is None:
15+
language = request.COOKIES.get('django_language')
16+
if language is not None:
17+
translation.activate(language)
18+
return super().list(request, *args, **kwargs)
Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,48 @@
11
from django.contrib import admin
22
import nested_admin
33
from .models import AfricanCountry, City, Content, Image, Description
4+
from modeltranslation.admin import TranslationAdmin
5+
from .translation import *
46

57
# Register your models here.
8+
9+
610
class ImageInline(nested_admin.NestedTabularInline):
711
fields = ('image', 'order')
812
readonly_fields = ('author', 'updated_by')
913
model = Image
1014
extra = 0
1115

16+
1217
class DescriptionInline(nested_admin.NestedTabularInline):
13-
fields = ('paragraph','order')
18+
fields = ('paragraph_en', 'paragraph_fr', 'order')
1419
readonly_fields = ('author', 'updated_by')
1520
model = Description
1621
extra = 0
1722

23+
1824
class ContentInline(nested_admin.NestedStackedInline):
19-
fields = ('title','order')
25+
fields = ('title_en', 'title_fr', 'order')
2026
readonly_fields = ('author', 'updated_by')
2127
model = Content
2228
extra = 0
23-
inlines = (DescriptionInline,ImageInline,)
29+
inlines = (DescriptionInline, ImageInline,)
30+
2431

2532
class CityInline(nested_admin.NestedTabularInline):
26-
fields = ('city_name','order')
33+
fields = ('city_name_en', 'city_name_fr', 'order')
2734
readonly_fields = ('author', 'updated_by')
2835
model = City
2936
extra = 0
3037
inlines = (ContentInline,)
3138

3239

3340
@admin.register(AfricanCountry)
34-
class AfricanCitiesAdmin(nested_admin.NestedModelAdmin):
35-
fields = ('country_name', 'country_flag','order','author', 'updated_by')
41+
class AfricanCitiesAdmin(TranslationAdmin, nested_admin.NestedModelAdmin):
42+
fields = ('country_name', 'country_flag', 'order', 'author', 'updated_by')
3643
readonly_fields = ('id', 'author', 'created', 'updated_by', 'modified')
37-
list_display=('country_name','flag_preview','order','author')
38-
search_fields =('country_name','author')
44+
list_display = ('country_name', 'flag_preview', 'order', 'author')
45+
search_fields = ('country_name', 'author')
3946
list_filter = ('created',)
4047
inlines = (CityInline,)
4148
list_per_page = 10
@@ -46,4 +53,4 @@ def flag_preview(self, obj):
4653

4754
return format_html(f'<img src="{escape(obj.country_flag.url)}" width="{width}" height="{height}" />')
4855

49-
flag_preview.allow_tags = True
56+
flag_preview.allow_tags = True
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Generated by Django 4.2.5 on 2024-02-07 17:32
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('africancities', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='africancountry',
15+
name='country_name_en',
16+
field=models.CharField(max_length=100, null=True),
17+
),
18+
migrations.AddField(
19+
model_name='africancountry',
20+
name='country_name_fr',
21+
field=models.CharField(max_length=100, null=True),
22+
),
23+
migrations.AddField(
24+
model_name='city',
25+
name='city_name_en',
26+
field=models.CharField(max_length=100, null=True),
27+
),
28+
migrations.AddField(
29+
model_name='city',
30+
name='city_name_fr',
31+
field=models.CharField(max_length=100, null=True),
32+
),
33+
migrations.AddField(
34+
model_name='content',
35+
name='title_en',
36+
field=models.CharField(max_length=150, null=True),
37+
),
38+
migrations.AddField(
39+
model_name='content',
40+
name='title_fr',
41+
field=models.CharField(max_length=150, null=True),
42+
),
43+
migrations.AddField(
44+
model_name='description',
45+
name='paragraph_en',
46+
field=models.TextField(null=True),
47+
),
48+
migrations.AddField(
49+
model_name='description',
50+
name='paragraph_fr',
51+
field=models.TextField(null=True),
52+
),
53+
]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from modeltranslation.translator import register, TranslationOptions
2+
from .models import *
3+
4+
5+
@register(AfricanCountry)
6+
class AfricanCountryTranslationOptions(TranslationOptions):
7+
fields = ('country_name',)
8+
9+
10+
@register(City)
11+
class CityTranslationOptions(TranslationOptions):
12+
fields = ('city_name',)
13+
14+
15+
@register(Content)
16+
class ContentTranslationOptions(TranslationOptions):
17+
fields = ('title',)
18+
19+
20+
@register(Description)
21+
class DescriptionTranslationOptions(TranslationOptions):
22+
fields = ('paragraph',)
Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
1+
from django.utils import translation
12
from rest_framework import viewsets
23
from rest_framework.permissions import AllowAny
34
from .models import AfricanCountry
45
from .serializers import AfricanCitySerializer
56

67
# Create your views here.
78

9+
810
class AfricanCityViewSet(viewsets.ReadOnlyModelViewSet):
9-
permission_classes = (AllowAny,)
1011
queryset = AfricanCountry.objects.all()
11-
serializer_class = AfricanCitySerializer
12+
serializer_class = AfricanCitySerializer
13+
permission_classes = [AllowAny]
14+
15+
def list(self, request, *args, **kwargs):
16+
language = request.session.get('django_language')
17+
if language is None:
18+
language = request.COOKIES.get('django_language')
19+
if language is not None:
20+
translation.activate(language)
21+
return super().list(request, *args, **kwargs)
Loading
Loading
Loading

website/backend/board/admin.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
from django.contrib import admin
22
from .models import BoardMember, BoardMemberBiography
33
import nested_admin
4+
from modeltranslation.admin import TranslationAdmin
5+
from .translation import *
46

57
# Register your models here.
8+
9+
610
class BoardMemberBiographyInline(nested_admin.NestedTabularInline):
7-
fields = ('description', 'author', 'order')
11+
fields = ('description_en', 'description_fr', 'author', 'order')
812
readonly_fields = ('author', )
913
model = BoardMemberBiography
1014
extra = 0
1115

16+
1217
@admin.register(BoardMember)
13-
class BoardMemberAdmin(nested_admin.NestedModelAdmin):
18+
class BoardMemberAdmin(TranslationAdmin, nested_admin.NestedModelAdmin):
1419
list_display = ("name", "title", "image_tag")
1520
readonly_fields = (
1621
"id",
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Generated by Django 4.2.5 on 2024-02-07 14:28
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('board', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='boardmember',
15+
name='name_en',
16+
field=models.CharField(max_length=100, null=True),
17+
),
18+
migrations.AddField(
19+
model_name='boardmember',
20+
name='name_fr',
21+
field=models.CharField(max_length=100, null=True),
22+
),
23+
migrations.AddField(
24+
model_name='boardmember',
25+
name='title_en',
26+
field=models.CharField(max_length=100, null=True),
27+
),
28+
migrations.AddField(
29+
model_name='boardmember',
30+
name='title_fr',
31+
field=models.CharField(max_length=100, null=True),
32+
),
33+
migrations.AddField(
34+
model_name='boardmemberbiography',
35+
name='description_en',
36+
field=models.TextField(blank=True, null=True),
37+
),
38+
migrations.AddField(
39+
model_name='boardmemberbiography',
40+
name='description_fr',
41+
field=models.TextField(blank=True, null=True),
42+
),
43+
]

website/backend/board/translation.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from modeltranslation.translator import register, TranslationOptions
2+
from .models import *
3+
4+
5+
@register(BoardMember)
6+
class BoardMemberTranslationOptions(TranslationOptions):
7+
fields = ('name', 'title')
8+
9+
10+
@register(BoardMemberBiography)
11+
class BoardMemberBiographyTranslationOptions(TranslationOptions):
12+
fields = ('description',)

website/backend/board/views.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
1+
from django.utils import translation
12
from rest_framework import viewsets
23
from rest_framework.permissions import AllowAny
34
from .models import BoardMember
45
from .serializers import BoardMemberSerializer
56

67

78
class BoardViewSet(viewsets.ReadOnlyModelViewSet):
8-
permission_classes = (AllowAny,)
9-
ordering_fields = ('order', 'name')
109
queryset = BoardMember.objects.all()
1110
serializer_class = BoardMemberSerializer
11+
permission_classes = [AllowAny]
12+
13+
def list(self, request, *args, **kwargs):
14+
language = request.session.get('django_language')
15+
if language is None:
16+
language = request.COOKIES.get('django_language')
17+
if language is not None:
18+
translation.activate(language)
19+
return super().list(request, *args, **kwargs)

0 commit comments

Comments
 (0)