evewiki 0.0.1.dev2__tar.gz → 0.0.1.dev3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/PKG-INFO +6 -65
  2. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/README.md +5 -64
  3. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/__init__.py +1 -1
  4. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/auth_hooks.py +1 -1
  5. evewiki-0.0.1.dev3/evewiki/forms.py +33 -0
  6. evewiki-0.0.1.dev3/evewiki/templates/evewiki/error.html +13 -0
  7. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/urls.py +1 -1
  8. evewiki-0.0.1.dev3/evewiki/views.py +169 -0
  9. evewiki-0.0.1.dev2/evewiki/forms.py +0 -29
  10. evewiki-0.0.1.dev2/evewiki/views.py +0 -149
  11. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/LICENSE +0 -0
  12. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/admin.py +0 -0
  13. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/app_settings.py +0 -0
  14. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/apps.py +0 -0
  15. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/migrations/0001_initial.py +0 -0
  16. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/migrations/__init__.py +0 -0
  17. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/models/__init__.py +0 -0
  18. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/models/logs.py +0 -0
  19. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/models/page_versions.py +0 -0
  20. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/models/pages.py +0 -0
  21. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/models/settings.py +0 -0
  22. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/tasks.py +0 -0
  23. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/base.html +0 -0
  24. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/help.html +0 -0
  25. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/index.html +0 -0
  26. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/page.html +0 -0
  27. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/page_delete.html +0 -0
  28. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/page_tree.html +0 -0
  29. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/sidebar.html +0 -0
  30. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/tests/__init__.py +0 -0
  31. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/evewiki/tests/test_tasks.py +0 -0
  32. {evewiki-0.0.1.dev2 → evewiki-0.0.1.dev3}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evewiki
3
- Version: 0.0.1.dev2
3
+ Version: 0.0.1.dev3
4
4
  Summary: Wiki plugin app for Alliance Auth.
5
5
  Author-email: Ryan Cunning <ryan.cunning@gmail.com>
6
6
  Requires-Python: >=3.8
@@ -27,7 +27,7 @@ Project-URL: Homepage, https://gitlab.com/cunningdesigns/aa-wiki
27
27
  Project-URL: Source, https://gitlab.com/cunningdesigns/aa-wiki
28
28
  Project-URL: Tracker, https://gitlab.com/cunningdesigns/aa-wiki/-/issues
29
29
 
30
- # aa-wiki
30
+ # evewiki
31
31
 
32
32
  Wiki plugin for [AllianceAuth](https://gitlab.com/allianceauth/allianceauth) to curate content.
33
33
 
@@ -59,9 +59,7 @@ You can alter them by adding a record to the `Settings` section/table in the `ev
59
59
  | `hierarchy_max_display_depth` | Limit the depth of the tree for the hierarchy on the main display | 10 |
60
60
  | `max_versions` | No one has infinite disk space, a sensible limit which can be modified to clear down the history | 1000 |
61
61
 
62
- ## Installation !!! NOT WORKING !!!
63
-
64
- > Currently produces an error!!!
62
+ ## Installation
65
63
 
66
64
  ### Step 1 - Pre_Requisites
67
65
 
@@ -81,65 +79,8 @@ Configure your Auth settings (`local.py`) as follows:
81
79
  'evewiki',
82
80
  ```
83
81
 
84
- ## Development
85
-
86
- > This has instructions on how to circumvent the installation issue on a dev environment
87
-
88
- *Assumes setup of AA as per the [documentation](https://allianceauth.readthedocs.io/en/latest/installation-containerized/docker.html)*
89
- Final folder structure would look like
90
- ```plaintext
91
- aa-dev
92
- ├─ aa-docker
93
- └─ aa-wiki
94
-
95
- ```
96
-
97
- Traverse into the `aa-dev` folder and clone the repo
98
- ```bash
99
- git clone https://gitlab.com/cunningdesigns/aa-wiki.git
100
- ```
101
-
102
- Traverse to `../aa-docker` folder
103
-
104
- Bind-mount the plugin-folder in `aa-docker/docker-compose.yml`
105
- ```yaml
106
- x-allianceauth-base:
107
- volumes:
108
- - ../aa-wiki:/home/allianceauth/evewiki
109
- ```
110
-
111
- ___
112
- *there has to be a better way*
113
- > Replace `aa-wiki/evewiki/views.py` with content from [example plugin](https://gitlab.com/ErikKalkoken/allianceauth-example-plugin/-/blob/master/example/views.py?ref_type=heads)
114
-
115
- > Comment out lines 11,12 & 14 on `aa-wiki/evewiki/urls.py`
116
- ___
117
-
118
- Start the containers (may require sudo)
119
- ```bash
120
- docker compose --env-file=.env up -d
121
- ```
122
-
123
- Open a terminal in the gunicorn container, initiate the plugin install
124
- ```bash
125
- docker compose exec allianceauth_gunicorn bash
126
- pip install -e ../evewiki
127
- ```
128
-
129
- add `evewiki` to `aa-docker/conf/local.py`
130
-
131
- Apply migrations and exit
132
- ```bash
133
- python manage.py migrate
134
- ```
135
-
136
- restart AA
137
- ```bash
138
- docker compose restart allianceauth_gunicorn
139
- ```
82
+ ### Step 4
140
83
 
141
- ___
142
- *there has to be a better way*
143
- > Remember to undo the modifications to `evewiki/evewiki/views.py` & `evewiki/evewiki/urls.py`
144
- ___
84
+ In AA admin site add Permissions `evewiki | general | Can access this app` and `evewiki | general | Can edit this app` to the desired `States` / `Groups`
85
+ i.e. you may wish to create a `wiki_editors` group to restrict the `Can edit this app` controls.
145
86
 
@@ -1,4 +1,4 @@
1
- # aa-wiki
1
+ # evewiki
2
2
 
3
3
  Wiki plugin for [AllianceAuth](https://gitlab.com/allianceauth/allianceauth) to curate content.
4
4
 
@@ -30,9 +30,7 @@ You can alter them by adding a record to the `Settings` section/table in the `ev
30
30
  | `hierarchy_max_display_depth` | Limit the depth of the tree for the hierarchy on the main display | 10 |
31
31
  | `max_versions` | No one has infinite disk space, a sensible limit which can be modified to clear down the history | 1000 |
32
32
 
33
- ## Installation !!! NOT WORKING !!!
34
-
35
- > Currently produces an error!!!
33
+ ## Installation
36
34
 
37
35
  ### Step 1 - Pre_Requisites
38
36
 
@@ -52,64 +50,7 @@ Configure your Auth settings (`local.py`) as follows:
52
50
  'evewiki',
53
51
  ```
54
52
 
55
- ## Development
56
-
57
- > This has instructions on how to circumvent the installation issue on a dev environment
58
-
59
- *Assumes setup of AA as per the [documentation](https://allianceauth.readthedocs.io/en/latest/installation-containerized/docker.html)*
60
- Final folder structure would look like
61
- ```plaintext
62
- aa-dev
63
- ├─ aa-docker
64
- └─ aa-wiki
65
-
66
- ```
67
-
68
- Traverse into the `aa-dev` folder and clone the repo
69
- ```bash
70
- git clone https://gitlab.com/cunningdesigns/aa-wiki.git
71
- ```
72
-
73
- Traverse to `../aa-docker` folder
74
-
75
- Bind-mount the plugin-folder in `aa-docker/docker-compose.yml`
76
- ```yaml
77
- x-allianceauth-base:
78
- volumes:
79
- - ../aa-wiki:/home/allianceauth/evewiki
80
- ```
81
-
82
- ___
83
- *there has to be a better way*
84
- > Replace `aa-wiki/evewiki/views.py` with content from [example plugin](https://gitlab.com/ErikKalkoken/allianceauth-example-plugin/-/blob/master/example/views.py?ref_type=heads)
85
-
86
- > Comment out lines 11,12 & 14 on `aa-wiki/evewiki/urls.py`
87
- ___
88
-
89
- Start the containers (may require sudo)
90
- ```bash
91
- docker compose --env-file=.env up -d
92
- ```
93
-
94
- Open a terminal in the gunicorn container, initiate the plugin install
95
- ```bash
96
- docker compose exec allianceauth_gunicorn bash
97
- pip install -e ../evewiki
98
- ```
99
-
100
- add `evewiki` to `aa-docker/conf/local.py`
101
-
102
- Apply migrations and exit
103
- ```bash
104
- python manage.py migrate
105
- ```
106
-
107
- restart AA
108
- ```bash
109
- docker compose restart allianceauth_gunicorn
110
- ```
53
+ ### Step 4
111
54
 
112
- ___
113
- *there has to be a better way*
114
- > Remember to undo the modifications to `evewiki/evewiki/views.py` & `evewiki/evewiki/urls.py`
115
- ___
55
+ In AA admin site add Permissions `evewiki | general | Can access this app` and `evewiki | general | Can edit this app` to the desired `States` / `Groups`
56
+ i.e. you may wish to create a `wiki_editors` group to restrict the `Can edit this app` controls.
@@ -3,4 +3,4 @@
3
3
  # pylint: disable = invalid-name
4
4
  default_app_config = "evewiki.apps.EveWikiConfig"
5
5
 
6
- __version__ = "0.0.1.dev2"
6
+ __version__ = "0.0.1.dev3"
@@ -3,7 +3,7 @@ from django.utils.translation import gettext_lazy as _
3
3
  from allianceauth import hooks
4
4
  from allianceauth.services.hooks import MenuItemHook, UrlHook
5
5
 
6
- from . import urls
6
+ from evewiki import urls
7
7
 
8
8
 
9
9
  class EveWikiMenuItem(MenuItemHook):
@@ -0,0 +1,33 @@
1
+ from django import forms
2
+
3
+ from .models.pages import Page
4
+
5
+
6
+ class PageForm(forms.ModelForm):
7
+
8
+ try:
9
+ # Customised ddl inferring additional context via text-indentation
10
+ parent = forms.ChoiceField(
11
+ choices=Page.list(),
12
+ required=False,
13
+ label="Path",
14
+ help_text=Page._meta.get_field("parent").help_text,
15
+ )
16
+
17
+ class Meta:
18
+ model = Page
19
+ fields = ["title", "parent", "slug", "priority", "states", "groups"]
20
+
21
+ def clean(self):
22
+ """
23
+ Django needs a little help to turn the custom `parent` field back into a model.
24
+ """
25
+ cleaned_data = super().clean()
26
+ parent_id = cleaned_data["parent"]
27
+ cleaned_data["parent"] = (
28
+ Page.objects.get(pk=int(parent_id)) if parent_id else None
29
+ )
30
+ return cleaned_data
31
+
32
+ except Exception as e:
33
+ print(f"setup required: {e}")
@@ -0,0 +1,13 @@
1
+ {% block details %}
2
+ <h1>Setup Required</h1>
3
+
4
+ {% endblock %}
5
+
6
+ {% block extra_javascript %}
7
+ {% endblock %}
8
+
9
+ {% block extra_css %}
10
+ {% endblock %}
11
+
12
+ {% block extra_script %}
13
+ {% endblock %}
@@ -2,7 +2,7 @@
2
2
 
3
3
  from django.urls import path, re_path
4
4
 
5
- from . import views
5
+ from evewiki import views
6
6
 
7
7
  app_name = "evewiki"
8
8
 
@@ -0,0 +1,169 @@
1
+ """Views."""
2
+
3
+ from django.contrib import messages
4
+ from django.contrib.auth.decorators import login_required, permission_required
5
+ from django.core.handlers.wsgi import WSGIRequest
6
+ from django.http import HttpResponse
7
+ from django.shortcuts import redirect, render
8
+
9
+ from allianceauth.authentication.models import UserProfile
10
+
11
+ from .forms import PageForm
12
+ from .models.logs import Log
13
+ from .models.page_versions import PageVersion
14
+ from .models.pages import Page
15
+ from .models.settings import Setting
16
+
17
+
18
+ @login_required
19
+ @permission_required("evewiki.basic_access")
20
+ def index(request: WSGIRequest, unknown_path: str = "/"):
21
+ """Render index view."""
22
+
23
+ try:
24
+
25
+ settings = Setting.get_settings()
26
+
27
+ is_editor = False
28
+ if request.user.has_perm("evewiki.editor_access"):
29
+ is_editor = True
30
+
31
+ # Control light/dark mode on md editor
32
+ dark_mode = False
33
+ themes_to_use_dark_mode = [
34
+ "allianceauth.theme.darkly.auth_hooks.DarklyThemeHook"
35
+ ]
36
+ user = UserProfile.objects.filter(user=request.user).first()
37
+ if user.theme in themes_to_use_dark_mode:
38
+ dark_mode = True
39
+
40
+ # Tree is too complex to call directly froma template
41
+ tree = Page.tree(user=request.user)
42
+
43
+ # "Unknown" i.e. has not bee picked up by urls.py
44
+ page = Page.get_by_path(path=unknown_path, user=request.user)
45
+
46
+ # Load the first page by default if nothing else can be found
47
+ # If there is no first-page, template will load a help page.
48
+ if page is None:
49
+ page = Page.objects.order_by("id").first()
50
+
51
+ # Content save
52
+ new_content = request.POST.get("content")
53
+ if new_content is not None:
54
+ try:
55
+ # Save the content
56
+ page.content = request.POST.get("content")
57
+ page.save()
58
+ # Record a version of the content
59
+ page_version = PageVersion(
60
+ page=page,
61
+ user=user,
62
+ content=page.content,
63
+ )
64
+ page_version.save()
65
+ # Log a thing happened
66
+ Log(user=user, action=f"Page content modified: {page.title}").save()
67
+ messages.success(request, f"Page '{page.title}' saved")
68
+ return redirect(f"/evewiki/{page.path}")
69
+ except Page.DoesNotExist:
70
+ pass
71
+
72
+ context = {
73
+ "context-title": "context-not-title",
74
+ "tree": tree,
75
+ "page": page,
76
+ "dark_mode": dark_mode,
77
+ "settings": settings,
78
+ "is_editor": is_editor,
79
+ }
80
+ return render(request, "evewiki/index.html", context)
81
+ except Exception as e:
82
+ print(f"setup required: {e}")
83
+ return render(request, "evewiki/error.html")
84
+
85
+
86
+ @login_required
87
+ @permission_required("evewiki.basic_access")
88
+ def page(request: WSGIRequest) -> HttpResponse:
89
+
90
+ try:
91
+ if (
92
+ not request.user.has_perm("evewiki.editor_access")
93
+ and not request.user.profile.state.name == "Admin"
94
+ ):
95
+ return redirect("/evewiki")
96
+
97
+ user = UserProfile.objects.filter(user=request.user).first()
98
+ page = None
99
+ page_id = request.GET.get("id") or request.POST.get("id")
100
+ if page_id is not None:
101
+ try:
102
+ page = Page.objects.get(id=page_id)
103
+ except Page.DoesNotExist:
104
+ page = None
105
+
106
+ if request.method == "POST":
107
+ form = PageForm(request.POST, instance=page)
108
+ if form.is_valid():
109
+ saved_page = form.save()
110
+ Log(user=user, action=f"Page Created: {saved_page.title}").save()
111
+ messages.success(request, f"Page '{saved_page.title}' saved")
112
+ return redirect(f"/evewiki/{saved_page.path}")
113
+ else:
114
+ form = PageForm(instance=page)
115
+
116
+ page_versions = PageVersion.objects.filter(page=page).order_by("-created").all()
117
+
118
+ context = {
119
+ "Page": "Page",
120
+ "page": page,
121
+ "form": form,
122
+ "versions": page_versions,
123
+ }
124
+ return render(request, "evewiki/page.html", context)
125
+ except Exception as e:
126
+ print(f"setup required: {e}")
127
+ return render(request, "evewiki/error.html")
128
+
129
+
130
+ @login_required
131
+ @permission_required("evewiki.basic_access")
132
+ def page_delete(request: WSGIRequest) -> HttpResponse:
133
+
134
+ try:
135
+ if (
136
+ not request.user.has_perm("evewiki.editor_access")
137
+ and not request.user.profile.state.name == "Admin"
138
+ ):
139
+ return redirect("/evewiki")
140
+
141
+ user = UserProfile.objects.filter(user=request.user).first()
142
+ page = None
143
+ page_id = request.GET.get("id")
144
+ confirm_delete = request.GET.get("confirm_delete")
145
+ if page_id is not None:
146
+ try:
147
+ page = Page.objects.get(id=page_id)
148
+ except Page.DoesNotExist:
149
+ page = None
150
+
151
+ # Check if page has children
152
+ children = Page.objects.filter(parent_id=page_id).all()
153
+ if len(children) > 0:
154
+ messages.error(request, "You cannot delete a page that has children.")
155
+
156
+ # Confirm the confirmation that this user definitely wants to delete
157
+ if confirm_delete == "true":
158
+ messages.success(request, f"Page '{page.title}' deleted")
159
+ page.delete()
160
+ # Pages can be deleted, links can be broken, versions orphaned.
161
+ # But the log is immutable
162
+ Log(user=user, action=f"Page Deleted: {page.title}").save()
163
+ return redirect("/evewiki/index")
164
+
165
+ context = {"Delete Page": "Delete Page", "page": page, "children": children}
166
+ return render(request, "evewiki/page_delete.html", context)
167
+ except Exception as e:
168
+ print(f"setup required: {e}")
169
+ return render(request, "evewiki/error.html")
@@ -1,29 +0,0 @@
1
- from django import forms
2
-
3
- from .models.pages import Page
4
-
5
-
6
- class PageForm(forms.ModelForm):
7
-
8
- # Customised ddl inferring additional context via text-indentation
9
- parent = forms.ChoiceField(
10
- choices=Page.list(),
11
- required=False,
12
- label="Path",
13
- help_text=Page._meta.get_field("parent").help_text,
14
- )
15
-
16
- class Meta:
17
- model = Page
18
- fields = ["title", "parent", "slug", "priority", "states", "groups"]
19
-
20
- def clean(self):
21
- """
22
- Django needs a little help to turn the custom `parent` field back into a model.
23
- """
24
- cleaned_data = super().clean()
25
- parent_id = cleaned_data["parent"]
26
- cleaned_data["parent"] = (
27
- Page.objects.get(pk=int(parent_id)) if parent_id else None
28
- )
29
- return cleaned_data
@@ -1,149 +0,0 @@
1
- """Views."""
2
-
3
- from django.contrib import messages
4
- from django.contrib.auth.decorators import login_required, permission_required
5
- from django.core.handlers.wsgi import WSGIRequest
6
- from django.http import HttpResponse
7
- from django.shortcuts import redirect, render
8
-
9
- from allianceauth.authentication.models import UserProfile
10
-
11
- from .forms import PageForm
12
- from .models.logs import Log
13
- from .models.page_versions import PageVersion
14
- from .models.pages import Page
15
- from .models.settings import Setting
16
-
17
-
18
- @login_required
19
- @permission_required("evewiki.basic_access")
20
- def index(request: WSGIRequest, unknown_path: str = "/"):
21
- """Render index view."""
22
-
23
- settings = Setting.get_settings()
24
-
25
- is_editor = False
26
- if request.user.has_perm("evewiki.editor_access"):
27
- is_editor = True
28
-
29
- # Control light/dark mode on md editor
30
- dark_mode = False
31
- themes_to_use_dark_mode = ["allianceauth.theme.darkly.auth_hooks.DarklyThemeHook"]
32
- user = UserProfile.objects.filter(user=request.user).first()
33
- if user.theme in themes_to_use_dark_mode:
34
- dark_mode = True
35
-
36
- # Tree is too complex to call directly froma template
37
- tree = Page.tree(user=request.user)
38
-
39
- # "Unknown" i.e. has not bee picked up by urls.py
40
- page = Page.get_by_path(path=unknown_path, user=request.user)
41
-
42
- # Load the first page by default if nothing else can be found
43
- # If there is no first-page, template will load a help page.
44
- if page is None:
45
- page = Page.objects.order_by("id").first()
46
-
47
- # Content save
48
- new_content = request.POST.get("content")
49
- if new_content is not None:
50
- try:
51
- # Save the content
52
- page.content = request.POST.get("content")
53
- page.save()
54
- # Record a version of the content
55
- page_version = PageVersion(
56
- page=page,
57
- user=user,
58
- content=page.content,
59
- )
60
- page_version.save()
61
- # Log a thing happened
62
- Log(user=user, action=f"Page content modified: {page.title}").save()
63
- messages.success(request, f"Page '{page.title}' saved")
64
- return redirect(f"/evewiki/{page.path}")
65
- except Page.DoesNotExist:
66
- pass
67
-
68
- context = {
69
- "context-title": "context-not-title",
70
- "tree": tree,
71
- "page": page,
72
- "dark_mode": dark_mode,
73
- "settings": settings,
74
- "is_editor": is_editor,
75
- }
76
- return render(request, "evewiki/index.html", context)
77
-
78
-
79
- @login_required
80
- @permission_required("evewiki.basic_access")
81
- def page(request: WSGIRequest) -> HttpResponse:
82
-
83
- if (
84
- not request.user.has_perm("evewiki.editor_access")
85
- and not request.user.profile.state.name == "Admin"
86
- ):
87
- return redirect("/evewiki")
88
-
89
- user = UserProfile.objects.filter(user=request.user).first()
90
- page = None
91
- page_id = request.GET.get("id") or request.POST.get("id")
92
- if page_id is not None:
93
- try:
94
- page = Page.objects.get(id=page_id)
95
- except Page.DoesNotExist:
96
- page = None
97
-
98
- if request.method == "POST":
99
- form = PageForm(request.POST, instance=page)
100
- if form.is_valid():
101
- saved_page = form.save()
102
- Log(user=user, action=f"Page Created: {saved_page.title}").save()
103
- messages.success(request, f"Page '{saved_page.title}' saved")
104
- return redirect(f"/evewiki/{saved_page.path}")
105
- else:
106
- form = PageForm(instance=page)
107
-
108
- page_versions = PageVersion.objects.filter(page=page).order_by("-created").all()
109
-
110
- context = {"Page": "Page", "page": page, "form": form, "versions": page_versions}
111
- return render(request, "evewiki/page.html", context)
112
-
113
-
114
- @login_required
115
- @permission_required("evewiki.basic_access")
116
- def page_delete(request: WSGIRequest) -> HttpResponse:
117
-
118
- if (
119
- not request.user.has_perm("evewiki.editor_access")
120
- and not request.user.profile.state.name == "Admin"
121
- ):
122
- return redirect("/evewiki")
123
-
124
- user = UserProfile.objects.filter(user=request.user).first()
125
- page = None
126
- page_id = request.GET.get("id")
127
- confirm_delete = request.GET.get("confirm_delete")
128
- if page_id is not None:
129
- try:
130
- page = Page.objects.get(id=page_id)
131
- except Page.DoesNotExist:
132
- page = None
133
-
134
- # Check if page has children
135
- children = Page.objects.filter(parent_id=page_id).all()
136
- if len(children) > 0:
137
- messages.error(request, "You cannot delete a page that has children.")
138
-
139
- # Confirm the confirmation that this user definitely wants to delete
140
- if confirm_delete == "true":
141
- messages.success(request, f"Page '{page.title}' deleted")
142
- page.delete()
143
- # Pages can be deleted, links can be broken, versions orphaned.
144
- # But the log is immutable
145
- Log(user=user, action=f"Page Deleted: {page.title}").save()
146
- return redirect("/evewiki/index")
147
-
148
- context = {"Delete Page": "Delete Page", "page": page, "children": children}
149
- return render(request, "evewiki/page_delete.html", context)
File without changes