Added setup page, modified admin view
rodzic
b76782715e
commit
3ba0e7597f
|
@ -74,6 +74,7 @@ INSTALLED_APPS = [
|
|||
|
||||
MIDDLEWARE = [
|
||||
"setup.middleware.CheckSetupMiddleware",
|
||||
"setup.middleware.CheckShopMiddleware",
|
||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
"django.middleware.csrf.CsrfViewMiddleware",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
|
||||
<div class="d-flex flex-column flex-shrink-0 p-3 mr-5">
|
||||
<img src="{{ logo_url }}" class="img-fluid rounded mx-auto d-block mt-3" style="width: 10rem; height: 10 rem;" alt="Portal Logo"/>
|
||||
<img src="{{logo}}" class="img-fluid rounded mx-auto d-block mt-3" style="width: 10rem; height: 10 rem;" alt="Portal Logo"/>
|
||||
<hr>
|
||||
<ul class="nav navbar-nav">
|
||||
{% for item in menu_items %}
|
||||
|
@ -22,7 +22,7 @@
|
|||
</div>
|
||||
<div class="d-flex flex-column flex-shrink-0 p-3 mr-5">
|
||||
<hr>
|
||||
{% if store_enabled %}
|
||||
<a href={% url 'cart' %} alt="Koszyk" > Koszyk </a>
|
||||
{% if shop_enabled %}
|
||||
<a href={% url 'cart' %} alt="Koszyk" > Koszyk </a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
|
|
@ -22,14 +22,10 @@ urlpatterns = [
|
|||
path("admin/", include(wagtailadmin_urls)),
|
||||
path("documents/", include(wagtaildocs_urls)),
|
||||
path("search/", search_views.search, name="search"),
|
||||
path('setup/', setup_views.SetupPageView.as_view(), name='setup')
|
||||
path('setup/', setup_views.SetupPageView.as_view(), name='setup'),
|
||||
path('store-app/', include('store.urls')),
|
||||
]
|
||||
|
||||
store_app_enabled = getattr(settings, 'SHOP_ENABLED', False)
|
||||
if store_app_enabled:
|
||||
urlpatterns += [
|
||||
path('store-app/', include('store.urls')),
|
||||
]
|
||||
|
||||
if settings.DEBUG:
|
||||
from django.conf.urls.static import static
|
||||
|
|
|
@ -1,3 +1,22 @@
|
|||
from django.contrib import admin
|
||||
from wagtail.contrib.modeladmin.options import (
|
||||
ModelAdmin,
|
||||
ModelAdminGroup,
|
||||
modeladmin_register
|
||||
)
|
||||
|
||||
# Register your models here.
|
||||
from setup.models import ComfyConfig
|
||||
|
||||
class ConfigAdmin(ModelAdmin):
|
||||
model = ComfyConfig
|
||||
list_display = ("updated", )
|
||||
|
||||
|
||||
class SetupModelAdminGroup(ModelAdminGroup):
|
||||
menu_label = "Setup"
|
||||
menu_icon = 'folder-open-inverse'
|
||||
menu_order = 200
|
||||
items = (
|
||||
ConfigAdmin,
|
||||
)
|
||||
|
||||
modeladmin_register(SetupModelAdminGroup)
|
||||
|
|
|
@ -1,36 +1,26 @@
|
|||
from django import forms
|
||||
from django.conf import settings
|
||||
from colorfield.fields import ColorField
|
||||
import os
|
||||
|
||||
from setup.models import (
|
||||
ComfyConfig,
|
||||
NavbarPosition
|
||||
)
|
||||
|
||||
|
||||
class SiteConfigurationForm(forms.Form):
|
||||
logo = forms.ImageField(required=False)
|
||||
shop_enabled = forms.BooleanField(required=False)
|
||||
class SiteConfigurationForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = ComfyConfig
|
||||
fields = [
|
||||
"logo", "navbar_position", "shop_enabled"
|
||||
]
|
||||
widgets = {
|
||||
"logo": forms.FileInput(attrs={"class": "form-control"}),
|
||||
"navbar_position": forms.Select(attrs={"class": "form-control"}),
|
||||
"shop_enabled": forms.CheckboxInput(attrs={"class": "form-check-input"}),
|
||||
}
|
||||
|
||||
navbar_position = forms.ChoiceField(
|
||||
choices=[
|
||||
('left', 'Left'),
|
||||
('right', 'Right'),
|
||||
('top', 'Top'),
|
||||
],
|
||||
initial='left',
|
||||
widget=forms.RadioSelect
|
||||
choices=NavbarPosition.choices,
|
||||
widget=forms.Select(attrs={"class": "form-control"}),
|
||||
initial=NavbarPosition.LEFT.value
|
||||
)
|
||||
skin = forms.ChoiceField(
|
||||
choices=[
|
||||
('light', 'Light'),
|
||||
('dark', 'Dark'),
|
||||
('custom', 'Custom'),
|
||||
],
|
||||
widget=forms.Select
|
||||
)
|
||||
|
||||
def save_logo(self):
|
||||
if self.cleaned_data['logo']:
|
||||
logo = self.cleaned_data['logo']
|
||||
filename = os.path.join(settings.MEDIA_ROOT, 'images/icons', logo.name)
|
||||
with open(filename, 'wb') as f:
|
||||
for chunk in logo.chunks():
|
||||
f.write(chunk)
|
||||
return os.path.join('images/icons', logo.name)
|
||||
return None
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
import logging
|
||||
from django.shortcuts import redirect
|
||||
from django.conf import settings
|
||||
from django.http import HttpResponse
|
||||
|
||||
from store.models import ProductListPage
|
||||
from setup.models import ComfyConfig
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
@ -26,3 +29,29 @@ class CheckSetupMiddleware(object):
|
|||
|
||||
response = self.get_response(request)
|
||||
return response
|
||||
|
||||
|
||||
class CheckShopMiddleware(object):
|
||||
def __init__(self, get_response):
|
||||
self.get_response = get_response
|
||||
|
||||
def _check_if_store_request(self, request):
|
||||
if request.path_info.startswith('/store-app/'):
|
||||
return True
|
||||
if request.path_info == "/":
|
||||
return False
|
||||
return ProductListPage.objects.filter(url_path__endswith=request.path_info).exists()
|
||||
|
||||
def __call__(self, request):
|
||||
config = ComfyConfig.objects.first()
|
||||
print(self._check_if_store_request(request))
|
||||
if config and not config.shop_enabled and self._check_if_store_request(request):
|
||||
if settings.DEBUG:
|
||||
return HttpResponse(
|
||||
status=500, content="Store is not enabled please turn it on in admin panel"
|
||||
)
|
||||
else:
|
||||
return redirect('/')
|
||||
|
||||
response = self.get_response(request)
|
||||
return response
|
||||
|
|
|
@ -1,24 +1,65 @@
|
|||
{% extends "modeladmin/create.html" %}
|
||||
{% load i18n wagtailadmin_tags %}
|
||||
|
||||
{% block header %}
|
||||
{% include "modeladmin/includes/header_with_history.html" with title=view.get_page_title subtitle=view.get_page_subtitle icon=view.header_icon merged=1 latest_log_entry=latest_log_entry history_url=history_url %}
|
||||
{% endblock %}
|
||||
|
||||
{% block form_action %}{{ view.edit_url }}{% endblock %}
|
||||
|
||||
{% block form_actions %}
|
||||
<div class="dropdown dropup dropdown-button match-width">
|
||||
<button type="submit" class="button action-save button-longrunning" data-clicked-text="{% trans 'Saving…' %}">
|
||||
{% icon name="spinner" %}<em>{% trans 'Save' %}</em>
|
||||
</button>
|
||||
|
||||
{% if user_can_delete %}
|
||||
<div class="dropdown-toggle">{% icon name="arrow-up" %}</div>
|
||||
<ul>
|
||||
<li><a href="{{ view.delete_url }}" class="shortcut">{% trans "Delete" %}</a></li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% load static %}
|
||||
{% block content %}
|
||||
<div class="text-center">
|
||||
<div class="card text-center">
|
||||
<div class="card-header">
|
||||
<img src="{% static 'images/icons/temp_comfy.png' %}" width="15%">
|
||||
</div>
|
||||
<form enctype="multipart/form-data" action="" method="POST">
|
||||
{% csrf_token %}
|
||||
<div class="card-body">
|
||||
<h1>Configure Your Comfy</h1>
|
||||
<div class="row mb-3 mt-5">
|
||||
<div class="col-2">
|
||||
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<h3>
|
||||
<label for="id_logo" class="form-label">{{form.logo.label}}</label>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
{{form.logo}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-2">
|
||||
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<h3>
|
||||
<label for="id_logo" class="form-label">{{form.navbar_position.label}}</label>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
{{form.navbar_position}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-2">
|
||||
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<h3>
|
||||
<label for="id_logo" class="form-label">{{form.shop_enabled.label}}</label>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
{{form.shop_enabled}}
|
||||
</div>
|
||||
</div>
|
||||
{% if form.errors %}
|
||||
<div class="alert alert-danger">
|
||||
{{ form.errors }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="card-footer text-muted">
|
||||
<input type="submit" class="btn btn-primary" value="Save">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -1,14 +1,29 @@
|
|||
import os
|
||||
import json
|
||||
|
||||
from django.shortcuts import render, redirect
|
||||
from django.shortcuts import (
|
||||
render,
|
||||
redirect
|
||||
)
|
||||
from django.views import View
|
||||
from django.conf import settings
|
||||
|
||||
from setup.forms import SiteConfigurationForm
|
||||
|
||||
|
||||
class SetupPageView(View):
|
||||
template_name = 'setup/config.html'
|
||||
|
||||
def get(self, request):
|
||||
return render(request, self.template_name)
|
||||
def get_context_data(self, **kwargs):
|
||||
return {
|
||||
"form": SiteConfigurationForm()
|
||||
}
|
||||
|
||||
def get(self, request):
|
||||
return render(request, self.template_name, self.get_context_data())
|
||||
|
||||
def post(self, request):
|
||||
form = SiteConfigurationForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return redirect('wagtailadmin_home')
|
||||
|
||||
context = self.get_context_data()
|
||||
context['form'] = form
|
||||
return render(request, self.template_name, context)
|
||||
|
|
Ładowanie…
Reference in New Issue