feat: Add stub to translate ANs to sharepics
This commit is contained in:
		@@ -6,7 +6,7 @@ from django.utils import timezone
 | 
			
		||||
from django.contrib.auth.models import Group
 | 
			
		||||
from django.contrib.auth.models import AbstractUser
 | 
			
		||||
from django.core.exceptions import ValidationError
 | 
			
		||||
from docutils.nodes import description
 | 
			
		||||
import base64
 | 
			
		||||
 | 
			
		||||
from .tools import misc, geo
 | 
			
		||||
from notfellchen.settings import MEDIA_URL, base_url
 | 
			
		||||
@@ -362,6 +362,11 @@ class Image(models.Model):
 | 
			
		||||
    def as_html(self):
 | 
			
		||||
        return f'<img src="{MEDIA_URL}/{self.image}" alt="{self.alt_text}">'
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def as_base64(self):
 | 
			
		||||
        encoded_string = base64.b64encode(self.image.file.read())
 | 
			
		||||
        return encoded_string.decode("utf-8")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AdoptionNotice(models.Model):
 | 
			
		||||
    class Meta:
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,171 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
 | 
			
		||||
 | 
			
		||||
<svg
 | 
			
		||||
        width="264.58334mm"
 | 
			
		||||
        height="264.58334mm"
 | 
			
		||||
        viewBox="0 0 264.58334 264.58334"
 | 
			
		||||
        version="1.1"
 | 
			
		||||
        id="svg1"
 | 
			
		||||
        xml:space="preserve"
 | 
			
		||||
        inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
 | 
			
		||||
        sodipodi:docname="drawing.svg"
 | 
			
		||||
        xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
			
		||||
        xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
			
		||||
        xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
			
		||||
        xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
        xmlns:svg="http://www.w3.org/2000/svg">
 | 
			
		||||
    <sodipodi:namedview
 | 
			
		||||
            id="namedview1"
 | 
			
		||||
            pagecolor="#ffffff"
 | 
			
		||||
            bordercolor="#000000"
 | 
			
		||||
            borderopacity="0.25"
 | 
			
		||||
            inkscape:showpageshadow="2"
 | 
			
		||||
            inkscape:pageopacity="0.0"
 | 
			
		||||
            inkscape:pagecheckerboard="0"
 | 
			
		||||
            inkscape:deskcolor="#d1d1d1"
 | 
			
		||||
            inkscape:document-units="mm"
 | 
			
		||||
            inkscape:zoom="0.51136354"
 | 
			
		||||
            inkscape:cx="1504.8003"
 | 
			
		||||
            inkscape:cy="472.26675"
 | 
			
		||||
            inkscape:window-width="2048"
 | 
			
		||||
            inkscape:window-height="1208"
 | 
			
		||||
            inkscape:window-x="0"
 | 
			
		||||
            inkscape:window-y="0"
 | 
			
		||||
            inkscape:window-maximized="1"
 | 
			
		||||
            inkscape:current-layer="layer1">
 | 
			
		||||
    <inkscape:page
 | 
			
		||||
            x="0"
 | 
			
		||||
            y="0"
 | 
			
		||||
            width="264.58334"
 | 
			
		||||
            height="264.58334"
 | 
			
		||||
            id="page1"
 | 
			
		||||
            margin="0"
 | 
			
		||||
            bleed="0"/>
 | 
			
		||||
        <inkscape:page
 | 
			
		||||
                x="274.58334"
 | 
			
		||||
                y="0"
 | 
			
		||||
                width="264.58334"
 | 
			
		||||
                height="264.58334"
 | 
			
		||||
                id="page2"
 | 
			
		||||
                margin="0"
 | 
			
		||||
                bleed="0"/>
 | 
			
		||||
        <inkscape:page
 | 
			
		||||
                x="549.16669"
 | 
			
		||||
                y="0"
 | 
			
		||||
                width="264.58334"
 | 
			
		||||
                height="264.58334"
 | 
			
		||||
                id="page4"
 | 
			
		||||
                margin="0"
 | 
			
		||||
                bleed="0"/>
 | 
			
		||||
</sodipodi:namedview>
 | 
			
		||||
    <defs id="defs1"/>
 | 
			
		||||
    <g
 | 
			
		||||
            inkscape:label="Layer 1"
 | 
			
		||||
            inkscape:groupmode="layer"
 | 
			
		||||
            id="layer1">
 | 
			
		||||
        <rect
 | 
			
		||||
                style="fill:#6cd4ff;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill-opacity:0.73333335"
 | 
			
		||||
                id="rect1"
 | 
			
		||||
                width="264.58337"
 | 
			
		||||
                height="264.58337"
 | 
			
		||||
                x="0"
 | 
			
		||||
                y="0"/>
 | 
			
		||||
        <rect
 | 
			
		||||
                style="fill:#6cd4ff;fill-opacity:0.733333;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"
 | 
			
		||||
                id="rect1-2"
 | 
			
		||||
                width="264.58337"
 | 
			
		||||
                height="264.58337"
 | 
			
		||||
                x="274.58334"
 | 
			
		||||
                y="0"/>
 | 
			
		||||
        <rect
 | 
			
		||||
                style="fill:#6cd4ff;fill-opacity:0.733333;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"
 | 
			
		||||
                id="rect1-0"
 | 
			
		||||
                width="264.58337"
 | 
			
		||||
                height="264.58337"
 | 
			
		||||
                x="549.16669"
 | 
			
		||||
                y="0"/>
 | 
			
		||||
        <text
 | 
			
		||||
                xml:space="preserve"
 | 
			
		||||
                style="font-size:19.7556px;line-height:1.3;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';text-align:start;letter-spacing:0px;word-spacing:-0.574146px;writing-mode:lr-tb;direction:ltr;text-anchor:start;white-space:pre;inline-size:230.276;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"
 | 
			
		||||
                x="16.116602"
 | 
			
		||||
                y="81.350471"
 | 
			
		||||
                id="text4"
 | 
			
		||||
                transform="translate(-7.9696277,63.01184)"><tspan
 | 
			
		||||
         x="16.116602"
 | 
			
		||||
         y="81.350471"
 | 
			
		||||
         id="tspan2">{{ adoption_notice.short_description }}</tspan></text>
 | 
			
		||||
        <rect
 | 
			
		||||
                style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.17108;stroke-linecap:round;stroke-linejoin:round"
 | 
			
		||||
                id="rect4"
 | 
			
		||||
                width="192.30475"
 | 
			
		||||
                height="93.450798"
 | 
			
		||||
                x="42.798157"
 | 
			
		||||
                y="14.846257"/>
 | 
			
		||||
        <text
 | 
			
		||||
                xml:space="preserve"
 | 
			
		||||
                style="font-size:19.7556px;line-height:1.1;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';text-align:start;letter-spacing:0px;word-spacing:-0.79286px;writing-mode:lr-tb;direction:ltr;text-anchor:start;white-space:pre;inline-size:192.796;fill:#000000;fill-opacity:0.733333;stroke:none;stroke-width:2.76188;stroke-linecap:round;stroke-linejoin:round"
 | 
			
		||||
                x="98.301682"
 | 
			
		||||
                y="49.274101"
 | 
			
		||||
                id="text1"
 | 
			
		||||
                transform="translate(-58.467048,-14.731528)"><tspan
 | 
			
		||||
         x="98.301682"
 | 
			
		||||
         y="49.274101"
 | 
			
		||||
         id="tspan4"><tspan
 | 
			
		||||
           dx="0 0.79285997 -0.79286003 0 0 0 0 0 0.79285902 -0.79285526 0 0.79285902"
 | 
			
		||||
           style="text-align:center;text-anchor:middle"
 | 
			
		||||
           id="tspan3">{{ adoption_notice.name }}</tspan>
 | 
			
		||||
        </tspan>
 | 
			
		||||
           </text>
 | 
			
		||||
        <rect
 | 
			
		||||
                style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"
 | 
			
		||||
                id="rect4-8"
 | 
			
		||||
                width="175.74771"
 | 
			
		||||
                height="40.675236"
 | 
			
		||||
                x="309.5625"
 | 
			
		||||
                y="17.4625"/>
 | 
			
		||||
        <text
 | 
			
		||||
                xml:space="preserve"
 | 
			
		||||
                style="font-size:36.6612px;line-height:1.3;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';text-align:start;letter-spacing:0px;word-spacing:-1.06546px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;fill-opacity:0.733333;stroke:none;stroke-width:3.71147;stroke-linecap:round;stroke-linejoin:round"
 | 
			
		||||
                x="328.02808"
 | 
			
		||||
                y="47.813782"
 | 
			
		||||
                id="text1-7">
 | 
			
		||||
            <tspan
 | 
			
		||||
                    sodipodi:role="line"
 | 
			
		||||
                    id="tspan1-9"
 | 
			
		||||
                    style="fill:#000000;fill-opacity:0.733333;stroke-width:3.71147"
 | 
			
		||||
                    x="328.02808"
 | 
			
		||||
                    y="47.813782">
 | 
			
		||||
            Ratte 1
 | 
			
		||||
        </tspan>
 | 
			
		||||
        </text>
 | 
			
		||||
        <rect
 | 
			
		||||
                style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"
 | 
			
		||||
                id="rect4-7"
 | 
			
		||||
                width="175.74771"
 | 
			
		||||
                height="40.675236"
 | 
			
		||||
                x="597.69373"
 | 
			
		||||
                y="18.520834"/>
 | 
			
		||||
        <text
 | 
			
		||||
                xml:space="preserve"
 | 
			
		||||
                style="font-size:36.6612px;line-height:1.3;font-family:'Latin Modern Mono';-inkscape-font-specification:'Latin Modern Mono, Normal';text-align:start;letter-spacing:0px;word-spacing:-1.06546px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;fill-opacity:0.733333;stroke:none;stroke-width:3.71147;stroke-linecap:round;stroke-linejoin:round"
 | 
			
		||||
                x="616.1593"
 | 
			
		||||
                y="48.872116"
 | 
			
		||||
                id="text1-5">
 | 
			
		||||
            <tspan
 | 
			
		||||
                    sodipodi:role="line"
 | 
			
		||||
                    id="tspan1-92"
 | 
			
		||||
                    style="fill:#000000;fill-opacity:0.733333;stroke-width:3.71147"
 | 
			
		||||
                    x="616.1593"
 | 
			
		||||
                    y="48.872116">Ratte 2</tspan>
 | 
			
		||||
        </text>
 | 
			
		||||
        <image
 | 
			
		||||
                width="116.45744"
 | 
			
		||||
                height="145.62663"
 | 
			
		||||
                preserveAspectRatio="none"
 | 
			
		||||
                xlink:href="data:image/jpeg;base64,{{ adoption_notice.get_photo.as_base64 }};"
 | 
			
		||||
                id="image1"
 | 
			
		||||
                x="339.55661"
 | 
			
		||||
                y="87.612373"/>
 | 
			
		||||
    </g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 7.3 KiB  | 
							
								
								
									
										9
									
								
								src/fellchensammlung/tools/img.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/fellchensammlung/tools/img.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
from django.template.loader import render_to_string
 | 
			
		||||
 | 
			
		||||
from fellchensammlung.models import AdoptionNotice
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def export_svg(adoption_notice):
 | 
			
		||||
    result = render_to_string(template_name="fellchensammlung/images/adoption-notice.svg",
 | 
			
		||||
                              context={"adoption_notice": adoption_notice, })
 | 
			
		||||
    return result
 | 
			
		||||
@@ -29,6 +29,8 @@ urlpatterns = [
 | 
			
		||||
    path("tier/<int:animal_id>/add-photo", views.add_photo_to_animal, name="animal-add-photo"),
 | 
			
		||||
    # ex: /adoption_notice/7/
 | 
			
		||||
    path("vermittlung/<int:adoption_notice_id>/", views.adoption_notice_detail, name="adoption-notice-detail"),
 | 
			
		||||
    # ex: /adoption_notice/7/sharepic
 | 
			
		||||
    path("vermittlung/<int:adoption_notice_id>/sharepic", views.adoption_notice_sharepic, name="adoption-notice-sharepic"),
 | 
			
		||||
    # ex: /adoption_notice/7/edit
 | 
			
		||||
    path("vermittlung/<int:adoption_notice_id>/edit", views.adoption_notice_edit, name="adoption-notice-edit"),
 | 
			
		||||
    # ex: /vermittlung/5/add-photo
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ from .models import AdoptionNotice, Text, Animal, Rule, Image, Report, Moderatio
 | 
			
		||||
from .forms import AdoptionNoticeForm, ImageForm, ReportAdoptionNoticeForm, \
 | 
			
		||||
    CommentForm, ReportCommentForm, AnimalForm, AdoptionNoticeFormAutoAnimal, SpeciesURLForm, RescueOrgInternalComment
 | 
			
		||||
from .models import Language, Announcement
 | 
			
		||||
from .tools import i18n
 | 
			
		||||
from .tools import i18n, img
 | 
			
		||||
from .tools.fedi import post_an_to_fedi
 | 
			
		||||
from .tools.geo import GeoAPI, zoom_level_for_radius
 | 
			
		||||
from .tools.metrics import gather_metrics_data
 | 
			
		||||
@@ -943,3 +943,9 @@ def deactivate_an(request, adoption_notice_id):
 | 
			
		||||
        return redirect(reverse("adoption-notice-detail", args=[adoption_notice.pk], ))
 | 
			
		||||
    context = {"adoption_notice": adoption_notice, }
 | 
			
		||||
    return render(request, 'fellchensammlung/misc/deactivate-an.html', context=context)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def adoption_notice_sharepic(request, adoption_notice_id):
 | 
			
		||||
    adoption_notice = get_object_or_404(AdoptionNotice, pk=adoption_notice_id)
 | 
			
		||||
    svg_data = img.export_svg(adoption_notice)
 | 
			
		||||
    return HttpResponse(svg_data, content_type="image/svg+xml")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user