diff --git a/BaseModels/functions.py b/BaseModels/functions.py
index 2dd38bf..b726889 100644
--- a/BaseModels/functions.py
+++ b/BaseModels/functions.py
@@ -96,27 +96,27 @@ def sortByLength(inputStr):
return len(inputStr)
-def add_domain(request, url, add_lang=False):
- domain = get_domain_by_request(request)
- if add_lang:
- cur_lang = get_cur_lang_by_request(request)
- return '{0}/{1}/{2}'.format(domain, cur_lang, url)
- else:
- return '{0}{1}'.format(domain, url)
-
-
-def get_domain_by_request(request):
- from project_sets import domain
- if request.query_params and 'domain' in request.query_params:
- return request.query_params['domain']
- return domain
-
-
-def get_cur_lang_by_request(request):
- from project_sets import lang
- if request.query_params and 'cur_lang' in request.query_params:
- return request.query_params['cur_lang']
- return lang
+# def add_domain(request, url, add_lang=False):
+# domain = get_domain_by_request(request)
+# if add_lang:
+# cur_lang = get_cur_lang_by_request(request)
+# return '{0}/{1}/{2}'.format(domain, cur_lang, url)
+# else:
+# return '{0}{1}'.format(domain, url)
+#
+#
+# def get_domain_by_request(request):
+# from pAerBim.project_sets import domain
+# if request.query_params and 'domain' in request.query_params:
+# return request.query_params['domain']
+# return domain
+#
+#
+# def get_cur_lang_by_request(request):
+# from project_sets import lang
+# if request.query_params and 'cur_lang' in request.query_params:
+# return request.query_params['cur_lang']
+# return lang
def get_img_type_by_request(request):
diff --git a/BaseModels/wkhtmltox/bin/libwkhtmltox.a b/BaseModels/wkhtmltox/bin/libwkhtmltox.a
new file mode 100644
index 0000000..69fa1d0
Binary files /dev/null and b/BaseModels/wkhtmltox/bin/libwkhtmltox.a differ
diff --git a/BaseModels/wkhtmltox/bin/wkhtmltoimage.exe b/BaseModels/wkhtmltox/bin/wkhtmltoimage.exe
new file mode 100644
index 0000000..ddf2d20
Binary files /dev/null and b/BaseModels/wkhtmltox/bin/wkhtmltoimage.exe differ
diff --git a/BaseModels/wkhtmltox/bin/wkhtmltopdf.exe b/BaseModels/wkhtmltox/bin/wkhtmltopdf.exe
new file mode 100644
index 0000000..f2906cd
Binary files /dev/null and b/BaseModels/wkhtmltox/bin/wkhtmltopdf.exe differ
diff --git a/BaseModels/wkhtmltox/bin/wkhtmltox.dll b/BaseModels/wkhtmltox/bin/wkhtmltox.dll
new file mode 100644
index 0000000..f453ff8
Binary files /dev/null and b/BaseModels/wkhtmltox/bin/wkhtmltox.dll differ
diff --git a/BaseModels/wkhtmltox/include/wkhtmltox/dllbegin.inc b/BaseModels/wkhtmltox/include/wkhtmltox/dllbegin.inc
new file mode 100644
index 0000000..4535efc
--- /dev/null
+++ b/BaseModels/wkhtmltox/include/wkhtmltox/dllbegin.inc
@@ -0,0 +1,54 @@
+/* -*- mode: c++; tab-width: 4; indent-tabs-mode: t; eval: (progn (c-set-style "stroustrup") (c-set-offset 'innamespace 0)); -*-
+ * vi:set ts=4 sts=4 sw=4 noet :
+ *
+ * Copyright 2010-2020 wkhtmltopdf authors
+ *
+ * This file is part of wkhtmltopdf.
+ *
+ * wkhtmltopdf is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * wkhtmltopdf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with wkhtmltopdf. If not, see .
+ */
+
+#ifndef __WKHTMLTOPDF_DLLBEGIN__
+#define __WKHTMLTOPDF_DLLBEGIN__
+
+#if defined _WIN32 || defined __CYGWIN__
+ #ifdef BUILDING_DLL
+ #define DLL_PUBLIC __declspec(dllexport)
+ #else
+ #define DLL_PUBLIC __declspec(dllimport)
+ #endif
+ #define DLL_LOCAL
+#else
+ #if __GNUC__ >= 4
+ #define DLL_PUBLIC __attribute__ ((visibility("default")))
+ #define DLL_LOCAL __attribute__ ((visibility("hidden")))
+ #else
+ #define DLL_PUBLIC
+ #define DLL_LOCAL
+ #endif
+#endif
+
+#if defined _WIN32
+#define CALLTYPE __stdcall
+#else
+#define CALLTYPE
+#endif
+
+#ifdef __cplusplus
+ #define CAPI(type) extern "C" DLL_PUBLIC type CALLTYPE
+#else
+ #define CAPI(type) DLL_PUBLIC type CALLTYPE
+#endif
+
+#endif /*__WKHTMLTOPDF_DLLBEGIN__*/
diff --git a/BaseModels/wkhtmltox/include/wkhtmltox/dllend.inc b/BaseModels/wkhtmltox/include/wkhtmltox/dllend.inc
new file mode 100644
index 0000000..ae23f3b
--- /dev/null
+++ b/BaseModels/wkhtmltox/include/wkhtmltox/dllend.inc
@@ -0,0 +1,30 @@
+/* -*- mode: c++; tab-width: 4; indent-tabs-mode: t; eval: (progn (c-set-style "stroustrup") (c-set-offset 'innamespace 0)); -*-
+ * vi:set ts=4 sts=4 sw=4 noet :
+ *
+ * Copyright 2010-2020 wkhtmltopdf authors
+ *
+ * This file is part of wkhtmltopdf.
+ *
+ * wkhtmltopdf is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * wkhtmltopdf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with wkhtmltopdf. If not, see .
+ */
+
+#ifdef __WKHTMLTOPDF_DLLBEGIN__
+
+#undef __WKHTMLTOPDF_DLLBEGIN__
+#undef DLL_PUBLIC
+#undef DLL_LOCAL
+#undef CAPI
+#undef CALLTYPE
+
+#endif /*__WKHTMLTOPDF_DLLBEGIN__*/
diff --git a/BaseModels/wkhtmltox/include/wkhtmltox/image.h b/BaseModels/wkhtmltox/include/wkhtmltox/image.h
new file mode 100644
index 0000000..6b1f910
--- /dev/null
+++ b/BaseModels/wkhtmltox/include/wkhtmltox/image.h
@@ -0,0 +1,76 @@
+/* -*- mode: c++; tab-width: 4; indent-tabs-mode: t; eval: (progn (c-set-style "stroustrup") (c-set-offset 'innamespace 0)); -*-
+ * vi:set ts=4 sts=4 sw=4 noet :
+ *
+ * Copyright 2010-2020 wkhtmltopdf authors
+ *
+ * This file is part of wkhtmltopdf.
+ *
+ * wkhtmltopdf is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * wkhtmltopdf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with wkhtmltopdf. If not, see .
+ */
+
+#ifndef __IMAGE_H__
+#define __IMAGE_H__
+
+#ifdef BUILDING_WKHTMLTOX
+#include "dllbegin.inc"
+#else
+#include
+#endif
+
+struct wkhtmltoimage_global_settings;
+typedef struct wkhtmltoimage_global_settings wkhtmltoimage_global_settings;
+
+struct wkhtmltoimage_converter;
+typedef struct wkhtmltoimage_converter wkhtmltoimage_converter;
+
+typedef void (*wkhtmltoimage_str_callback)(wkhtmltoimage_converter * converter, const char * str);
+typedef void (*wkhtmltoimage_int_callback)(wkhtmltoimage_converter * converter, const int val);
+typedef void (*wkhtmltoimage_void_callback)(wkhtmltoimage_converter * converter);
+
+CAPI(int) wkhtmltoimage_init(int use_graphics);
+CAPI(int) wkhtmltoimage_deinit();
+CAPI(int) wkhtmltoimage_extended_qt();
+CAPI(const char *)wkhtmltoimage_version();
+
+CAPI(wkhtmltoimage_global_settings *) wkhtmltoimage_create_global_settings();
+
+CAPI(int) wkhtmltoimage_set_global_setting(wkhtmltoimage_global_settings * settings, const char * name, const char * value);
+CAPI(int) wkhtmltoimage_get_global_setting(wkhtmltoimage_global_settings * settings, const char * name, char * value, int vs);
+
+CAPI(wkhtmltoimage_converter *) wkhtmltoimage_create_converter(wkhtmltoimage_global_settings * settings, const char * data);
+CAPI(void) wkhtmltoimage_destroy_converter(wkhtmltoimage_converter * converter);
+
+CAPI(void) wkhtmltoimage_set_warning_callback(wkhtmltoimage_converter * converter, wkhtmltoimage_str_callback cb);
+CAPI(void) wkhtmltoimage_set_error_callback(wkhtmltoimage_converter * converter, wkhtmltoimage_str_callback cb);
+CAPI(void) wkhtmltoimage_set_phase_changed_callback(wkhtmltoimage_converter * converter, wkhtmltoimage_void_callback cb);
+CAPI(void) wkhtmltoimage_set_progress_changed_callback(wkhtmltoimage_converter * converter, wkhtmltoimage_int_callback cb);
+CAPI(void) wkhtmltoimage_set_finished_callback(wkhtmltoimage_converter * converter, wkhtmltoimage_int_callback cb);
+CAPI(int) wkhtmltoimage_convert(wkhtmltoimage_converter * converter);
+/* CAPI(void) wkhtmltoimage_begin_conversion(wkhtmltoimage_converter * converter); */
+/* CAPI(void) wkhtmltoimage_cancel(wkhtmltoimage_converter * converter); */
+
+CAPI(int) wkhtmltoimage_current_phase(wkhtmltoimage_converter * converter);
+CAPI(int) wkhtmltoimage_phase_count(wkhtmltoimage_converter * converter);
+CAPI(const char *) wkhtmltoimage_phase_description(wkhtmltoimage_converter * converter, int phase);
+CAPI(const char *) wkhtmltoimage_progress_string(wkhtmltoimage_converter * converter);
+CAPI(int) wkhtmltoimage_http_error_code(wkhtmltoimage_converter * converter);
+CAPI(long) wkhtmltoimage_get_output(wkhtmltoimage_converter * converter, const unsigned char **);
+
+#ifdef BUILDING_WKHTMLTOX
+#include "dllend.inc"
+#else
+#include
+#endif
+
+#endif /*__IMAGE_H__*/
diff --git a/BaseModels/wkhtmltox/include/wkhtmltox/pdf.h b/BaseModels/wkhtmltox/include/wkhtmltox/pdf.h
new file mode 100644
index 0000000..0ed2ad4
--- /dev/null
+++ b/BaseModels/wkhtmltox/include/wkhtmltox/pdf.h
@@ -0,0 +1,88 @@
+/* -*- mode: c++; tab-width: 4; indent-tabs-mode: t; eval: (progn (c-set-style "stroustrup") (c-set-offset 'innamespace 0)); -*-
+ * vi:set ts=4 sts=4 sw=4 noet :
+ *
+ * Copyright 2010-2020 wkhtmltopdf authors
+ *
+ * This file is part of wkhtmltopdf.
+ *
+ * wkhtmltopdf is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * wkhtmltopdf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with wkhtmltopdf. If not, see .
+ */
+
+#ifndef __PDF_H__
+#define __PDF_H__
+
+#ifdef BUILDING_WKHTMLTOX
+#include "dllbegin.inc"
+#else
+#include
+#endif
+
+struct wkhtmltopdf_global_settings;
+typedef struct wkhtmltopdf_global_settings wkhtmltopdf_global_settings;
+
+struct wkhtmltopdf_object_settings;
+typedef struct wkhtmltopdf_object_settings wkhtmltopdf_object_settings;
+
+struct wkhtmltopdf_converter;
+typedef struct wkhtmltopdf_converter wkhtmltopdf_converter;
+
+typedef void (*wkhtmltopdf_str_callback)(wkhtmltopdf_converter * converter, const char * str);
+typedef void (*wkhtmltopdf_int_callback)(wkhtmltopdf_converter * converter, const int val);
+typedef void (*wkhtmltopdf_void_callback)(wkhtmltopdf_converter * converter);
+
+CAPI(int) wkhtmltopdf_init(int use_graphics);
+CAPI(int) wkhtmltopdf_deinit();
+CAPI(int) wkhtmltopdf_extended_qt();
+CAPI(const char *) wkhtmltopdf_version();
+
+CAPI(wkhtmltopdf_global_settings *) wkhtmltopdf_create_global_settings();
+CAPI(void) wkhtmltopdf_destroy_global_settings(wkhtmltopdf_global_settings *);
+
+CAPI(wkhtmltopdf_object_settings *) wkhtmltopdf_create_object_settings();
+CAPI(void) wkhtmltopdf_destroy_object_settings(wkhtmltopdf_object_settings *);
+
+CAPI(int) wkhtmltopdf_set_global_setting(wkhtmltopdf_global_settings * settings, const char * name, const char * value);
+CAPI(int) wkhtmltopdf_get_global_setting(wkhtmltopdf_global_settings * settings, const char * name, char * value, int vs);
+CAPI(int) wkhtmltopdf_set_object_setting(wkhtmltopdf_object_settings * settings, const char * name, const char * value);
+CAPI(int) wkhtmltopdf_get_object_setting(wkhtmltopdf_object_settings * settings, const char * name, char * value, int vs);
+
+
+CAPI(wkhtmltopdf_converter *) wkhtmltopdf_create_converter(wkhtmltopdf_global_settings * settings);
+CAPI(void) wkhtmltopdf_destroy_converter(wkhtmltopdf_converter * converter);
+
+CAPI(void) wkhtmltopdf_set_warning_callback(wkhtmltopdf_converter * converter, wkhtmltopdf_str_callback cb);
+CAPI(void) wkhtmltopdf_set_error_callback(wkhtmltopdf_converter * converter, wkhtmltopdf_str_callback cb);
+CAPI(void) wkhtmltopdf_set_phase_changed_callback(wkhtmltopdf_converter * converter, wkhtmltopdf_void_callback cb);
+CAPI(void) wkhtmltopdf_set_progress_changed_callback(wkhtmltopdf_converter * converter, wkhtmltopdf_int_callback cb);
+CAPI(void) wkhtmltopdf_set_finished_callback(wkhtmltopdf_converter * converter, wkhtmltopdf_int_callback cb);
+/* CAPI(void) wkhtmltopdf_begin_conversion(wkhtmltopdf_converter * converter); */
+/* CAPI(void) wkhtmltopdf_cancel(wkhtmltopdf_converter * converter); */
+CAPI(int) wkhtmltopdf_convert(wkhtmltopdf_converter * converter);
+CAPI(void) wkhtmltopdf_add_object(
+ wkhtmltopdf_converter * converter, wkhtmltopdf_object_settings * setting, const char * data);
+
+CAPI(int) wkhtmltopdf_current_phase(wkhtmltopdf_converter * converter);
+CAPI(int) wkhtmltopdf_phase_count(wkhtmltopdf_converter * converter);
+CAPI(const char *) wkhtmltopdf_phase_description(wkhtmltopdf_converter * converter, int phase);
+CAPI(const char *) wkhtmltopdf_progress_string(wkhtmltopdf_converter * converter);
+CAPI(int) wkhtmltopdf_http_error_code(wkhtmltopdf_converter * converter);
+CAPI(long) wkhtmltopdf_get_output(wkhtmltopdf_converter * converter, const unsigned char **);
+
+#ifdef BUILDING_WKHTMLTOX
+#include "dllend.inc"
+#else
+#include
+#endif
+
+#endif /*__PDF_H__*/
diff --git a/DocsApp/models.py b/DocsApp/models.py
index b1447ee..42bbb3b 100644
--- a/DocsApp/models.py
+++ b/DocsApp/models.py
@@ -71,12 +71,17 @@ class DocArt(BaseModelViewPage):
if not version:
version = self.get_last_version()
- art = DocArt.objects.filter(
- enable=True,
- versions=version,
- order__lt=self.order,
- parent=self.parent
- ).order_by('-order').first()
+ kwargs = {
+ 'enable': True,
+ 'versions': version,
+ 'parent': self.parent
+ }
+ if self.order:
+ kwargs['order__lt'] = self.order
+
+ art = DocArt.objects.exclude(
+ id=self.id
+ ).filter(**kwargs).order_by('-order').first()
if art:
while art.get_last_child(version=version):
@@ -94,12 +99,18 @@ class DocArt(BaseModelViewPage):
art = self.get_first_child(version=version)
if not art:
- art = DocArt.objects.filter(
- enable=True,
- versions=version,
- order__gt=self.order,
- parent=self.parent
- ).order_by('order').first()
+
+ kwargs = {
+ 'enable': True,
+ 'versions': version,
+ 'parent': self.parent
+ }
+ if self.order:
+ kwargs['order__gt'] = self.order
+
+ art = DocArt.objects.exclude(
+ id=self.id
+ ).filter(**kwargs).order_by('order').first()
if not art and self.parent:
art = DocArt.objects.filter(
diff --git a/DocsApp/views.py b/DocsApp/views.py
index 8d057ef..52ea1e5 100644
--- a/DocsApp/views.py
+++ b/DocsApp/views.py
@@ -1,4 +1,5 @@
import json
+import os
from django.http import HttpResponse, Http404, FileResponse, HttpResponseRedirect
from django.template import loader, RequestContext
@@ -10,7 +11,7 @@ from django.utils.translation import gettext_lazy as _
from django.urls import reverse
from collections import OrderedDict
from django.template.loader import render_to_string
-
+from urllib.parse import unquote
def get_tree_arts(art, arts, sel_arts_ids):
@@ -28,15 +29,7 @@ def get_tree_arts(art, arts, sel_arts_ids):
return docs_tree
-import os
-def link_callback(uri, rel):
- if settings.STATIC_URL and uri.startswith(settings.STATIC_URL):
- path = os.path.join(settings.STATIC_ROOT, uri.replace(settings.STATIC_URL, ""))
- elif settings.MEDIA_URL and uri.startswith(settings.MEDIA_URL):
- path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
- else:
- path = os.path.join(settings.STATIC_ROOT, uri)
- return path
+
def _response_pdf(path):
@@ -54,17 +47,40 @@ def _response_pdf(path):
def pdf_render(request, template, context, file_name):
from BaseModels.functions import url_translit
+ from GeneralApp.funcs_options import get_options_by_opt_types
filename = url_translit(file_name)
html = render_to_string(template, context, request)
+
+ sets = get_options_by_opt_types(['domain'], only_vals=True, w_prefix=True)
+ if settings.DEBUG:
+ sets['domain'] = 'http://127.0.0.1:8019'
+ while 'src="/' in html:
+ html = html.replace('src="/', f'src="{sets["domain"]}/')
+ # html = unquote(html)
+
+
f = open(f'{settings.PDF_FOLDER}/{filename}.html', 'w')
f.write(html)
f.close()
os.system(
- u'{wkhtmltopdf} --load-error-handling ignore --default-header {pdf_folder}/{file_name}.html {pdf_folder}/{file_name}.pdf'.format(
- wkhtmltopdf=settings.WKHTML_TO_PDF, pdf_folder=settings.PDF_FOLDER, file_name=filename))
+ '{wkhtmltopdf} '
+ # '--margin-top 20mm '
+ # '--encoding windows-1250 '
+ '--enable-local-file-access '
+ '--load-error-handling ignore '
+ '--enable-internal-links '
+ '--keep-relative-links '
+ '--print-media-type '
+ '--encoding UTF-8 '
+ # '--default-header '
+ # '--minimum-font-size 20mm '
+ '{pdf_folder}/{file_name}.html '
+ '{pdf_folder}/{file_name}.pdf'.format(
+ wkhtmltopdf=settings.WKHTML_TO_PDF, pdf_folder=settings.PDF_FOLDER, file_name=filename)
+ )
path = settings.PDF_FOLDER + '/' + filename + '.pdf'
# os.system(u'{wkhtmltopdf} {print_folder}/order{filename}.html {print_folder}/order{filename}.pdf'.format(wkhtmltopdf=settings.WKHTML_TO_PDF, print_folder=settings.PRINT_FOLDER))
return _response_pdf(path)
diff --git a/GeneralApp/funcs.py b/GeneralApp/funcs.py
index c26d7a4..0a3255f 100644
--- a/GeneralApp/funcs.py
+++ b/GeneralApp/funcs.py
@@ -40,11 +40,15 @@ def get_inter_Dict(user, context_Dict):
feedback_form.initial = {'form_name': form_name}
Dict.update({'feedback_form': feedback_form})
+ from DocsApp.models import DocArt
+ arts_exists = DocArt.objects.filter(enable=True).exists()
+
Dict.update({
'sections': sections,
'logo': get_logo_url(),
'hide_form_field_description': hide_form_field_description,
'footer_contacts': get_footer_contacts(),
+ 'allow_documentation': arts_exists,
})
# from SubscribesApp.funcs import get_cur_user_subscribe
# user_subscribe = get_cur_user_subscribe(user)
diff --git a/GeneralApp/funcs_options.py b/GeneralApp/funcs_options.py
index bf34d9d..4d05417 100644
--- a/GeneralApp/funcs_options.py
+++ b/GeneralApp/funcs_options.py
@@ -1,6 +1,6 @@
from .models import *
-def get_options_by_opt_types(opt_types, only_vals=False):
+def get_options_by_opt_types(opt_types, only_vals=False, w_prefix=False):
if type(opt_types) == str:
kwargs = {'opt_type': opt_types}
elif type(opt_types) == dict:
@@ -10,8 +10,11 @@ def get_options_by_opt_types(opt_types, only_vals=False):
opts = Option.objects.filter(**kwargs)
if opts and only_vals:
- opts = opts.values('opt_type', 'value')
- opts = {item['opt_type']: item['value'] for item in opts}
+ opts = opts.values('opt_type', 'value', 'prefix')
+ if w_prefix:
+ opts = {item['opt_type']: f"{item['prefix']}{item['value']}" for item in opts}
+ else:
+ opts = {item['opt_type']: item['value'] for item in opts}
return opts
def get_first_option_value_by_opt_type(opt_type):
diff --git a/GeneralApp/migrations/0027_pageaddingblockstemplate_alter_fileunit_options_and_more.py b/GeneralApp/migrations/0027_pageaddingblockstemplate_alter_fileunit_options_and_more.py
new file mode 100644
index 0000000..474ce9c
--- /dev/null
+++ b/GeneralApp/migrations/0027_pageaddingblockstemplate_alter_fileunit_options_and_more.py
@@ -0,0 +1,65 @@
+# Generated by Django 4.2.7 on 2024-07-15 17:00
+
+import datetime
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('GeneralApp', '0026_fileunit_alter_office_work_time_from_and_more'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='PageAddingBlocksTemplate',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
+ ('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')),
+ ('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')),
+ ('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')),
+ ('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')),
+ ('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')),
+ ('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')),
+ ],
+ options={
+ 'verbose_name': 'Шаблон настройки дополнительных блоков на странице',
+ 'verbose_name_plural': 'Шаблоны настройки дополнительных блоков на странице',
+ },
+ ),
+ migrations.AlterModelOptions(
+ name='fileunit',
+ options={'verbose_name': 'Файл', 'verbose_name_plural': 'Файлы'},
+ ),
+ migrations.AlterField(
+ model_name='office',
+ name='work_time_from',
+ field=models.TimeField(default=datetime.datetime(2024, 7, 15, 9, 0), verbose_name='Время работы с'),
+ ),
+ migrations.AlterField(
+ model_name='office',
+ name='work_time_from_en',
+ field=models.TimeField(default=datetime.datetime(2024, 7, 15, 9, 0), null=True, verbose_name='Время работы с'),
+ ),
+ migrations.AlterField(
+ model_name='office',
+ name='work_time_from_ru',
+ field=models.TimeField(default=datetime.datetime(2024, 7, 15, 9, 0), null=True, verbose_name='Время работы с'),
+ ),
+ migrations.AlterField(
+ model_name='office',
+ name='work_time_to',
+ field=models.TimeField(default=datetime.datetime(2024, 7, 15, 18, 0), verbose_name='Время работы до'),
+ ),
+ migrations.AlterField(
+ model_name='office',
+ name='work_time_to_en',
+ field=models.TimeField(default=datetime.datetime(2024, 7, 15, 18, 0), null=True, verbose_name='Время работы до'),
+ ),
+ migrations.AlterField(
+ model_name='office',
+ name='work_time_to_ru',
+ field=models.TimeField(default=datetime.datetime(2024, 7, 15, 18, 0), null=True, verbose_name='Время работы до'),
+ ),
+ ]
diff --git a/pAerBim/settings.py b/pAerBim/settings.py
index 1c303ef..2052118 100644
--- a/pAerBim/settings.py
+++ b/pAerBim/settings.py
@@ -164,7 +164,9 @@ USE_TZ = False
# https://docs.djangoproject.com/en/4.2/howto/static-files/
MEDIA_URL = '/media/'
-MEDIA_ROOT = 'media/'
+# MEDIA_ROOT = 'media/'
+import os
+MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATIC_URL = '/static/'
STATIC_ROOT = '/'
diff --git a/requirements.pip b/requirements.pip
index 297f1e1..25917d5 100644
--- a/requirements.pip
+++ b/requirements.pip
@@ -6,5 +6,5 @@ django-modeltranslation==0.18.11
Pillow==10.1.0
psycopg2-binary==2.9.9
django-super-inlines
-django-filebrowser-4.0.3
+# django-filebrowser-4.0.3
django-filebrowser-no-grappelli==4.0.2
\ No newline at end of file
diff --git a/templates/blocks/b_documentation_article.html b/templates/blocks/b_documentation_article.html
index 6849a91..3f34622 100644
--- a/templates/blocks/b_documentation_article.html
+++ b/templates/blocks/b_documentation_article.html
@@ -5,6 +5,7 @@
+{# #}
{% endif %}
@@ -24,13 +25,13 @@
-
+
{% trans "Предыдущий" %}
{% endif %}
-
+
{% if next_article %}
@@ -43,7 +44,7 @@
{% endif %}
-
+
{% trans "Скачать в PDF" %}
{% endif %}
\ No newline at end of file
diff --git a/templates/blocks/b_header.html b/templates/blocks/b_header.html
index 936ae6b..8fb8a1a 100644
--- a/templates/blocks/b_header.html
+++ b/templates/blocks/b_header.html
@@ -10,7 +10,9 @@