Ver a proveniência

[fix] save images attached in text editor fields of children

version-14
Anand Doshi há 10 anos
ascendente
cometimento
1845c08676
3 ficheiros alterados com 17 adições e 10 eliminações
  1. +6
    -0
      frappe/model/base_document.py
  2. +6
    -8
      frappe/model/document.py
  3. +5
    -2
      frappe/utils/file_manager.py

+ 6
- 0
frappe/model/base_document.py Ver ficheiro

@@ -541,6 +541,12 @@ class BaseDocument(object):


return val return val


def _extract_images_from_text_editor(self):
from frappe.utils.file_manager import extract_images_from_html
if self.doctype != "DocType":
for df in self.meta.get("fields", {"fieldtype":"Text Editor"}):
extract_images_from_html(self, df.fieldname)

def _filter(data, filters, limit=None): def _filter(data, filters, limit=None):
"""pass filters as: """pass filters as:
{"key": "val", "key": ["!=", "val"], {"key": "val", "key": ["!=", "val"],


+ 6
- 8
frappe/model/document.py Ver ficheiro

@@ -299,11 +299,15 @@ class Document(BaseDocument):
self._validate_links() self._validate_links()
self._validate_selects() self._validate_selects()
self._validate_constants() self._validate_constants()
self._extract_images_from_text_editor()


for d in self.get_all_children():
children = self.get_all_children()
for d in children:
d._validate_selects() d._validate_selects()
d._validate_constants() d._validate_constants()

# extract images after validations to save processing if some validation error is raised
self._extract_images_from_text_editor()
for d in children:
d._extract_images_from_text_editor() d._extract_images_from_text_editor()


def validate_higher_perm_levels(self): def validate_higher_perm_levels(self):
@@ -488,12 +492,6 @@ class Document(BaseDocument):
ret.extend(value) ret.extend(value)
return ret return ret


def _extract_images_from_text_editor(self):
from frappe.utils.file_manager import extract_images_from_html
if self.doctype != "DocType":
for df in self.meta.get("fields", {"fieldtype":"Text Editor"}):
extract_images_from_html(self, df.fieldname)

def run_method(self, method, *args, **kwargs): def run_method(self, method, *args, **kwargs):
"""run standard triggers, plus those in hooks""" """run standard triggers, plus those in hooks"""
if "flags" in kwargs: if "flags" in kwargs:


+ 5
- 2
frappe/utils/file_manager.py Ver ficheiro

@@ -98,15 +98,18 @@ def extract_images_from_html(doc, fieldname):
mtype = headers.split(";")[0] mtype = headers.split(";")[0]
filename = get_random_filename(content_type=mtype) filename = get_random_filename(content_type=mtype)


doctype = doc.parenttype if doc.parent else doc.doctype
name = doc.parent or doc.name

# TODO fix this # TODO fix this
file_url = save_file(filename, content, doc.doctype, doc.name, decode=True).get("file_url")
file_url = save_file(filename, content, doctype, name, decode=True).get("file_url")
if not frappe.flags.has_dataurl: if not frappe.flags.has_dataurl:
frappe.flags.has_dataurl = True frappe.flags.has_dataurl = True


return '<img src="{file_url}"'.format(file_url=file_url) return '<img src="{file_url}"'.format(file_url=file_url)


if content: if content:
content = re.sub('<img\s*src=\s*["\'](?=data:)(.*?)["\']', _save_file, content)
content = re.sub('<img[^>]*src\s*=\s*["\'](?=data:)(.*?)["\']', _save_file, content)
if frappe.flags.has_dataurl: if frappe.flags.has_dataurl:
doc.set(fieldname, content) doc.set(fieldname, content)




Carregando…
Cancelar
Guardar