evewiki 0.0.1.dev1__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.
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/PKG-INFO +14 -49
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/README.md +13 -48
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/__init__.py +1 -1
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/auth_hooks.py +1 -1
- evewiki-0.0.1.dev3/evewiki/forms.py +33 -0
- evewiki-0.0.1.dev3/evewiki/templates/evewiki/error.html +13 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/urls.py +1 -1
- evewiki-0.0.1.dev3/evewiki/views.py +169 -0
- evewiki-0.0.1.dev1/evewiki/forms.py +0 -29
- evewiki-0.0.1.dev1/evewiki/views.py +0 -149
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/LICENSE +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/admin.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/app_settings.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/apps.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/migrations/0001_initial.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/migrations/__init__.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/models/__init__.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/models/logs.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/models/page_versions.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/models/pages.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/models/settings.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/tasks.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/base.html +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/help.html +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/index.html +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/page.html +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/page_delete.html +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/page_tree.html +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/templates/evewiki/sidebar.html +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/tests/__init__.py +0 -0
- {evewiki-0.0.1.dev1 → evewiki-0.0.1.dev3}/evewiki/tests/test_tasks.py +0 -0
- {evewiki-0.0.1.dev1 → 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.
|
|
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
|
-
#
|
|
30
|
+
# evewiki
|
|
31
31
|
|
|
32
32
|
Wiki plugin for [AllianceAuth](https://gitlab.com/allianceauth/allianceauth) to curate content.
|
|
33
33
|
|
|
@@ -61,61 +61,26 @@ You can alter them by adding a record to the `Settings` section/table in the `ev
|
|
|
61
61
|
|
|
62
62
|
## Installation
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
Final folder structure would look like
|
|
66
|
-
```plaintext
|
|
67
|
-
aa-dev
|
|
68
|
-
├─ aa-docker
|
|
69
|
-
└─ aa-wiki
|
|
70
|
-
|
|
71
|
-
```
|
|
64
|
+
### Step 1 - Pre_Requisites
|
|
72
65
|
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
git clone https://gitlab.com/cunningdesigns/aa-wiki.git
|
|
76
|
-
```
|
|
66
|
+
Evewiki is an App for Alliance Auth, Please make sure you have this installed. Evewiki is not a standalone Django Application
|
|
77
67
|
|
|
78
|
-
|
|
68
|
+
### Step 2 - Install app
|
|
79
69
|
|
|
80
|
-
|
|
81
|
-
```yaml
|
|
82
|
-
x-allianceauth-base:
|
|
83
|
-
volumes:
|
|
84
|
-
- ../aa-wiki:/home/allianceauth/evewiki
|
|
85
|
-
```
|
|
70
|
+
pip install evewiki
|
|
86
71
|
|
|
87
|
-
|
|
88
|
-
*there has to be a better way*
|
|
89
|
-
> 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)
|
|
72
|
+
### Step 3 - Configure Auth settings
|
|
90
73
|
|
|
91
|
-
|
|
92
|
-
___
|
|
74
|
+
Configure your Auth settings (`local.py`) as follows:
|
|
93
75
|
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
docker compose --env-file=.env up -d
|
|
97
|
-
```
|
|
76
|
+
- Add the following `INSTALLED_APPS` in `local.py`
|
|
98
77
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
docker compose exec allianceauth_gunicorn bash
|
|
102
|
-
pip install -e ../evewiki
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
add `evewiki` to `aa-docker/conf/local.py`
|
|
106
|
-
|
|
107
|
-
Apply migrations and exit
|
|
108
|
-
```bash
|
|
109
|
-
python manage.py migrate
|
|
78
|
+
```plaintext
|
|
79
|
+
'evewiki',
|
|
110
80
|
```
|
|
111
81
|
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
docker compose restart allianceauth_gunicorn
|
|
115
|
-
```
|
|
82
|
+
### Step 4
|
|
116
83
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
> Remember to undo the modifications to `evewiki/evewiki/views.py` & `evewiki/evewiki/urls.py`
|
|
120
|
-
___
|
|
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.
|
|
121
86
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# evewiki
|
|
2
2
|
|
|
3
3
|
Wiki plugin for [AllianceAuth](https://gitlab.com/allianceauth/allianceauth) to curate content.
|
|
4
4
|
|
|
@@ -32,60 +32,25 @@ You can alter them by adding a record to the `Settings` section/table in the `ev
|
|
|
32
32
|
|
|
33
33
|
## Installation
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
Final folder structure would look like
|
|
37
|
-
```plaintext
|
|
38
|
-
aa-dev
|
|
39
|
-
├─ aa-docker
|
|
40
|
-
└─ aa-wiki
|
|
41
|
-
|
|
42
|
-
```
|
|
35
|
+
### Step 1 - Pre_Requisites
|
|
43
36
|
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
git clone https://gitlab.com/cunningdesigns/aa-wiki.git
|
|
47
|
-
```
|
|
37
|
+
Evewiki is an App for Alliance Auth, Please make sure you have this installed. Evewiki is not a standalone Django Application
|
|
48
38
|
|
|
49
|
-
|
|
39
|
+
### Step 2 - Install app
|
|
50
40
|
|
|
51
|
-
|
|
52
|
-
```yaml
|
|
53
|
-
x-allianceauth-base:
|
|
54
|
-
volumes:
|
|
55
|
-
- ../aa-wiki:/home/allianceauth/evewiki
|
|
56
|
-
```
|
|
41
|
+
pip install evewiki
|
|
57
42
|
|
|
58
|
-
|
|
59
|
-
*there has to be a better way*
|
|
60
|
-
> 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)
|
|
43
|
+
### Step 3 - Configure Auth settings
|
|
61
44
|
|
|
62
|
-
|
|
63
|
-
___
|
|
45
|
+
Configure your Auth settings (`local.py`) as follows:
|
|
64
46
|
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
docker compose --env-file=.env up -d
|
|
68
|
-
```
|
|
47
|
+
- Add the following `INSTALLED_APPS` in `local.py`
|
|
69
48
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
docker compose exec allianceauth_gunicorn bash
|
|
73
|
-
pip install -e ../evewiki
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
add `evewiki` to `aa-docker/conf/local.py`
|
|
77
|
-
|
|
78
|
-
Apply migrations and exit
|
|
79
|
-
```bash
|
|
80
|
-
python manage.py migrate
|
|
49
|
+
```plaintext
|
|
50
|
+
'evewiki',
|
|
81
51
|
```
|
|
82
52
|
|
|
83
|
-
|
|
84
|
-
```bash
|
|
85
|
-
docker compose restart allianceauth_gunicorn
|
|
86
|
-
```
|
|
53
|
+
### Step 4
|
|
87
54
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
> Remember to undo the modifications to `evewiki/evewiki/views.py` & `evewiki/evewiki/urls.py`
|
|
91
|
-
___
|
|
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.
|
|
@@ -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,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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|