Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -96,27 +96,27 @@ def sortByLength(inputStr):
|
|||||||
return len(inputStr)
|
return len(inputStr)
|
||||||
|
|
||||||
|
|
||||||
def add_domain(request, url, add_lang=False):
|
# def add_domain(request, url, add_lang=False):
|
||||||
domain = get_domain_by_request(request)
|
# domain = get_domain_by_request(request)
|
||||||
if add_lang:
|
# if add_lang:
|
||||||
cur_lang = get_cur_lang_by_request(request)
|
# cur_lang = get_cur_lang_by_request(request)
|
||||||
return '{0}/{1}/{2}'.format(domain, cur_lang, url)
|
# return '{0}/{1}/{2}'.format(domain, cur_lang, url)
|
||||||
else:
|
# else:
|
||||||
return '{0}{1}'.format(domain, url)
|
# return '{0}{1}'.format(domain, url)
|
||||||
|
#
|
||||||
|
#
|
||||||
def get_domain_by_request(request):
|
# def get_domain_by_request(request):
|
||||||
from project_sets import domain
|
# from pAerBim.project_sets import domain
|
||||||
if request.query_params and 'domain' in request.query_params:
|
# if request.query_params and 'domain' in request.query_params:
|
||||||
return request.query_params['domain']
|
# return request.query_params['domain']
|
||||||
return domain
|
# return domain
|
||||||
|
#
|
||||||
|
#
|
||||||
def get_cur_lang_by_request(request):
|
# def get_cur_lang_by_request(request):
|
||||||
from project_sets import lang
|
# from project_sets import lang
|
||||||
if request.query_params and 'cur_lang' in request.query_params:
|
# if request.query_params and 'cur_lang' in request.query_params:
|
||||||
return request.query_params['cur_lang']
|
# return request.query_params['cur_lang']
|
||||||
return lang
|
# return lang
|
||||||
|
|
||||||
|
|
||||||
def get_img_type_by_request(request):
|
def get_img_type_by_request(request):
|
||||||
|
|||||||
BIN
BaseModels/wkhtmltox/bin/libwkhtmltox.a
Normal file
BIN
BaseModels/wkhtmltox/bin/libwkhtmltox.a
Normal file
Binary file not shown.
BIN
BaseModels/wkhtmltox/bin/wkhtmltoimage.exe
Normal file
BIN
BaseModels/wkhtmltox/bin/wkhtmltoimage.exe
Normal file
Binary file not shown.
BIN
BaseModels/wkhtmltox/bin/wkhtmltopdf.exe
Normal file
BIN
BaseModels/wkhtmltox/bin/wkhtmltopdf.exe
Normal file
Binary file not shown.
BIN
BaseModels/wkhtmltox/bin/wkhtmltox.dll
Normal file
BIN
BaseModels/wkhtmltox/bin/wkhtmltox.dll
Normal file
Binary file not shown.
54
BaseModels/wkhtmltox/include/wkhtmltox/dllbegin.inc
Normal file
54
BaseModels/wkhtmltox/include/wkhtmltox/dllbegin.inc
Normal file
@@ -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 <http: *www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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__*/
|
||||||
30
BaseModels/wkhtmltox/include/wkhtmltox/dllend.inc
Normal file
30
BaseModels/wkhtmltox/include/wkhtmltox/dllend.inc
Normal file
@@ -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 <http: *www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __WKHTMLTOPDF_DLLBEGIN__
|
||||||
|
|
||||||
|
#undef __WKHTMLTOPDF_DLLBEGIN__
|
||||||
|
#undef DLL_PUBLIC
|
||||||
|
#undef DLL_LOCAL
|
||||||
|
#undef CAPI
|
||||||
|
#undef CALLTYPE
|
||||||
|
|
||||||
|
#endif /*__WKHTMLTOPDF_DLLBEGIN__*/
|
||||||
76
BaseModels/wkhtmltox/include/wkhtmltox/image.h
Normal file
76
BaseModels/wkhtmltox/include/wkhtmltox/image.h
Normal file
@@ -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 <http: *www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __IMAGE_H__
|
||||||
|
#define __IMAGE_H__
|
||||||
|
|
||||||
|
#ifdef BUILDING_WKHTMLTOX
|
||||||
|
#include "dllbegin.inc"
|
||||||
|
#else
|
||||||
|
#include <wkhtmltox/dllbegin.inc>
|
||||||
|
#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 <wkhtmltox/dllend.inc>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*__IMAGE_H__*/
|
||||||
88
BaseModels/wkhtmltox/include/wkhtmltox/pdf.h
Normal file
88
BaseModels/wkhtmltox/include/wkhtmltox/pdf.h
Normal file
@@ -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 <http: *www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __PDF_H__
|
||||||
|
#define __PDF_H__
|
||||||
|
|
||||||
|
#ifdef BUILDING_WKHTMLTOX
|
||||||
|
#include "dllbegin.inc"
|
||||||
|
#else
|
||||||
|
#include <wkhtmltox/dllbegin.inc>
|
||||||
|
#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 <wkhtmltox/dllend.inc>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*__PDF_H__*/
|
||||||
@@ -71,12 +71,17 @@ class DocArt(BaseModelViewPage):
|
|||||||
if not version:
|
if not version:
|
||||||
version = self.get_last_version()
|
version = self.get_last_version()
|
||||||
|
|
||||||
art = DocArt.objects.filter(
|
kwargs = {
|
||||||
enable=True,
|
'enable': True,
|
||||||
versions=version,
|
'versions': version,
|
||||||
order__lt=self.order,
|
'parent': self.parent
|
||||||
parent=self.parent
|
}
|
||||||
).order_by('-order').first()
|
if self.order:
|
||||||
|
kwargs['order__lt'] = self.order
|
||||||
|
|
||||||
|
art = DocArt.objects.exclude(
|
||||||
|
id=self.id
|
||||||
|
).filter(**kwargs).order_by('-order').first()
|
||||||
|
|
||||||
if art:
|
if art:
|
||||||
while art.get_last_child(version=version):
|
while art.get_last_child(version=version):
|
||||||
@@ -94,12 +99,18 @@ class DocArt(BaseModelViewPage):
|
|||||||
|
|
||||||
art = self.get_first_child(version=version)
|
art = self.get_first_child(version=version)
|
||||||
if not art:
|
if not art:
|
||||||
art = DocArt.objects.filter(
|
|
||||||
enable=True,
|
kwargs = {
|
||||||
versions=version,
|
'enable': True,
|
||||||
order__gt=self.order,
|
'versions': version,
|
||||||
parent=self.parent
|
'parent': self.parent
|
||||||
).order_by('order').first()
|
}
|
||||||
|
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:
|
if not art and self.parent:
|
||||||
art = DocArt.objects.filter(
|
art = DocArt.objects.filter(
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
from django.http import HttpResponse, Http404, FileResponse, HttpResponseRedirect
|
from django.http import HttpResponse, Http404, FileResponse, HttpResponseRedirect
|
||||||
from django.template import loader, RequestContext
|
from django.template import loader, RequestContext
|
||||||
@@ -10,7 +11,7 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
|
from urllib.parse import unquote
|
||||||
|
|
||||||
def get_tree_arts(art, arts, sel_arts_ids):
|
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
|
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):
|
def _response_pdf(path):
|
||||||
@@ -54,17 +47,40 @@ def _response_pdf(path):
|
|||||||
|
|
||||||
def pdf_render(request, template, context, file_name):
|
def pdf_render(request, template, context, file_name):
|
||||||
from BaseModels.functions import url_translit
|
from BaseModels.functions import url_translit
|
||||||
|
from GeneralApp.funcs_options import get_options_by_opt_types
|
||||||
|
|
||||||
filename = url_translit(file_name)
|
filename = url_translit(file_name)
|
||||||
|
|
||||||
html = render_to_string(template, context, request)
|
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 = open(f'{settings.PDF_FOLDER}/{filename}.html', 'w')
|
||||||
f.write(html)
|
f.write(html)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
os.system(
|
os.system(
|
||||||
u'{wkhtmltopdf} --load-error-handling ignore --default-header {pdf_folder}/{file_name}.html {pdf_folder}/{file_name}.pdf'.format(
|
'{wkhtmltopdf} '
|
||||||
wkhtmltopdf=settings.WKHTML_TO_PDF, pdf_folder=settings.PDF_FOLDER, file_name=filename))
|
# '--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'
|
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))
|
# 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)
|
return _response_pdf(path)
|
||||||
|
|||||||
@@ -40,11 +40,15 @@ def get_inter_Dict(user, context_Dict):
|
|||||||
feedback_form.initial = {'form_name': form_name}
|
feedback_form.initial = {'form_name': form_name}
|
||||||
Dict.update({'feedback_form': feedback_form})
|
Dict.update({'feedback_form': feedback_form})
|
||||||
|
|
||||||
|
from DocsApp.models import DocArt
|
||||||
|
arts_exists = DocArt.objects.filter(enable=True).exists()
|
||||||
|
|
||||||
Dict.update({
|
Dict.update({
|
||||||
'sections': sections,
|
'sections': sections,
|
||||||
'logo': get_logo_url(),
|
'logo': get_logo_url(),
|
||||||
'hide_form_field_description': hide_form_field_description,
|
'hide_form_field_description': hide_form_field_description,
|
||||||
'footer_contacts': get_footer_contacts(),
|
'footer_contacts': get_footer_contacts(),
|
||||||
|
'allow_documentation': arts_exists,
|
||||||
})
|
})
|
||||||
# from SubscribesApp.funcs import get_cur_user_subscribe
|
# from SubscribesApp.funcs import get_cur_user_subscribe
|
||||||
# user_subscribe = get_cur_user_subscribe(user)
|
# user_subscribe = get_cur_user_subscribe(user)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from .models import *
|
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:
|
if type(opt_types) == str:
|
||||||
kwargs = {'opt_type': opt_types}
|
kwargs = {'opt_type': opt_types}
|
||||||
elif type(opt_types) == dict:
|
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)
|
opts = Option.objects.filter(**kwargs)
|
||||||
if opts and only_vals:
|
if opts and only_vals:
|
||||||
opts = opts.values('opt_type', 'value')
|
opts = opts.values('opt_type', 'value', 'prefix')
|
||||||
opts = {item['opt_type']: item['value'] for item in opts}
|
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
|
return opts
|
||||||
|
|
||||||
def get_first_option_value_by_opt_type(opt_type):
|
def get_first_option_value_by_opt_type(opt_type):
|
||||||
|
|||||||
@@ -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='Время работы до'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -164,7 +164,9 @@ USE_TZ = False
|
|||||||
# https://docs.djangoproject.com/en/4.2/howto/static-files/
|
# https://docs.djangoproject.com/en/4.2/howto/static-files/
|
||||||
|
|
||||||
MEDIA_URL = '/media/'
|
MEDIA_URL = '/media/'
|
||||||
MEDIA_ROOT = 'media/'
|
# MEDIA_ROOT = 'media/'
|
||||||
|
import os
|
||||||
|
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
||||||
|
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
STATIC_ROOT = '/'
|
STATIC_ROOT = '/'
|
||||||
|
|||||||
@@ -6,5 +6,5 @@ django-modeltranslation==0.18.11
|
|||||||
Pillow==10.1.0
|
Pillow==10.1.0
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.9
|
||||||
django-super-inlines
|
django-super-inlines
|
||||||
django-filebrowser-4.0.3
|
# django-filebrowser-4.0.3
|
||||||
django-filebrowser-no-grappelli==4.0.2
|
django-filebrowser-no-grappelli==4.0.2
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<meta charset="windows-1251">
|
<meta charset="windows-1251">
|
||||||
|
{# <meta charset="UTF-8">#}
|
||||||
</HEAD>
|
</HEAD>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@@ -24,13 +25,13 @@
|
|||||||
<source srcset="{% static "images/arrow_control_part_tree_el.svg" %}">
|
<source srcset="{% static "images/arrow_control_part_tree_el.svg" %}">
|
||||||
<img class="arrow_control_content_part_tree_el_img" src="{% static "images/arrow_control_part_tree_el.svg" %}" alt="">
|
<img class="arrow_control_content_part_tree_el_img" src="{% static "images/arrow_control_part_tree_el.svg" %}" alt="">
|
||||||
</picture>
|
</picture>
|
||||||
|
|
||||||
<div class="txt_control_content_part_tree_el" data-url="{% url 'docs_art_page' cur_version.url prev_article.url %}" onclick="changeCurArticle(this)">
|
<div class="txt_control_content_part_tree_el" data-url="{% url 'docs_art_page' cur_version.url prev_article.url %}" onclick="changeCurArticle(this)">
|
||||||
{% trans "Предыдущий" %}
|
{% trans "Предыдущий" %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="control_content_part_tree_el right">
|
<div class="control_content_part_tree_el right">
|
||||||
{% if next_article %}
|
{% if next_article %}
|
||||||
<div class="txt_control_content_part_tree_el" data-url="{% url 'docs_art_page' cur_version.url next_article.url %}" onclick="changeCurArticle(this)">
|
<div class="txt_control_content_part_tree_el" data-url="{% url 'docs_art_page' cur_version.url next_article.url %}" onclick="changeCurArticle(this)">
|
||||||
@@ -43,7 +44,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a class="btn_download_in_pdf" target="_blank" href="?pdf=true">{% trans "Скачать в PDF" %}</a>
|
<a class="btn_download_in_pdf" target="_blank" href="?pdf=true">{% trans "Скачать в PDF" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
@@ -10,7 +10,9 @@
|
|||||||
</a>
|
</a>
|
||||||
<div class="right_part_header">
|
<div class="right_part_header">
|
||||||
{# <a class="standart_txt text_header pointer">Поддержка</a>#}
|
{# <a class="standart_txt text_header pointer">Поддержка</a>#}
|
||||||
<a href="{% url 'docs_main' %}" class="standart_txt text_header last_left pointer">{% translate "Поддержка" %}</a>
|
{% if allow_documentation %}
|
||||||
|
<a href="{% url 'docs_main' %}" class="standart_txt text_header last_left pointer">{% translate "Поддержка" %}</a>
|
||||||
|
{% endif %}
|
||||||
<a href="{% url 'contacts' %}" class="standart_txt text_header last_left pointer">{% translate "Контакты" %}</a>
|
<a href="{% url 'contacts' %}" class="standart_txt text_header last_left pointer">{% translate "Контакты" %}</a>
|
||||||
<div class="splitter_text_header"></div>
|
<div class="splitter_text_header"></div>
|
||||||
<div class="language_select close">
|
<div class="language_select close">
|
||||||
|
|||||||
Reference in New Issue
Block a user