Add meta tags for social media #181

This commit is contained in:
Daniel Grams 2021-05-27 14:14:38 +02:00
parent 5eddc65c6b
commit ed8363f163
57 changed files with 195 additions and 112 deletions

View File

@ -1,6 +1,8 @@
from datetime import datetime
from dateutil.relativedelta import relativedelta
from flask import url_for
from flask_babelex import format_date, format_time
from sqlalchemy import and_, func, or_
from sqlalchemy.orm import contains_eager, defaultload, joinedload, lazyload
from sqlalchemy.sql import extract
@ -10,6 +12,7 @@ from project.dateutils import date_add_time, dates_from_recurrence_rule, get_tod
from project.models import (
AdminUnit,
Event,
EventAttendanceMode,
EventCategory,
EventDate,
EventOrganizer,
@ -20,6 +23,7 @@ from project.models import (
Location,
)
from project.utils import get_pending_changes
from project.views.utils import truncate
def get_event_category(category_name):
@ -313,3 +317,36 @@ def get_significant_event_changes(event) -> dict:
"organizer_id",
]
return get_pending_changes(event, include_collections=False, include_keys=keys)
def get_meta_data(event: Event, event_date: EventDate = None) -> dict:
meta = dict()
meta["title"] = event.name
if (
event.attendance_mode
and event.attendance_mode != EventAttendanceMode.online
and event.event_place
):
meta["title"] = f"{meta['title']} @ {event.event_place.name}"
if event.event_place.location and event.event_place.location.city:
meta["title"] = f"{meta['title']}, {event.event_place.location.city}"
if event_date:
date_str = format_date(event_date.start, "full")
time_str = format_time(event_date.start, "short")
meta["description"] = f"{date_str} {time_str}"
if event.description:
desc_short = truncate(event.description, 300)
if "description" in meta:
meta["description"] = f"{meta['description']}: {desc_short}"
else:
meta["description"] = desc_short
if event.photo_id:
meta["image"] = url_for("image", id=event.photo_id, _external=True)
return meta

View File

@ -1,7 +1,7 @@
{% extends "layout.html" %}
{% block title %}
{%- block title -%}
{{ _('Admin') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<nav aria-label="breadcrumb">

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_pagination %}
{% block title %}
{%- block title -%}
{{ _('Organizations') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<nav aria-label="breadcrumb">

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_field, render_field_with_errors %}
{% block title %}
{%- block title -%}
{{ _('Settings') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Settings') }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_field_with_errors, render_field %}
{% block title %}
{%- block title -%}
{{ _('Update organization') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Update organization') }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_field_with_errors, render_field %}
{% block title %}
{%- block title -%}
{{ _('Update user') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Update user') }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_pagination %}
{% block title %}
{%- block title -%}
{{ _('Users') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<nav aria-label="breadcrumb">

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_event_props, render_image_with_link, render_place, render_link_prop %}
{% block title %}
{%- block title -%}
{{ _('Developer') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>Developer</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_event_props %}
{% block title %}
{%- block title -%}
{{ _('Actions for event') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<div class="w-normal">

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_google_place_autocomplete_field, render_google_place_autocomplete_header, render_cropper_header, render_cropper_code, render_crop_image_form_section, render_radio_buttons, render_datepicker_js, render_field_with_errors, render_field %}
{% block title %}
{%- block title -%}
{{ _('Create event') }}
{% endblock %}
{%- endblock -%}
{% block header %}
{{ render_cropper_header() }}
{{ render_google_place_autocomplete_header(False, 'new_event_place-') }}

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_event_props_seo %}
{% block title %}
{%- block title -%}
{{ event.name }}
{% endblock %}
{%- endblock -%}
{% block content_container_attribs %}{% endblock %}
{% block content %}

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_radio_buttons, render_phone_prop, render_email_prop, render_string_prop, render_field_with_errors, render_field, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% block title %}
{%- block title -%}
{{ event.name }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Reference event "%(name)s"', name=event.name) }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_radio_buttons, render_phone_prop, render_email_prop, render_string_prop, render_field_with_errors, render_field, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% block title %}
{%- block title -%}
{{ event.name }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Request reference for event "%(name)s"', name=event.name) }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_cropper_block, render_crop_image_form_section, render_radio_buttons, render_datepicker_js, render_field_with_errors, render_field %}
{% block title %}
{%- block title -%}
{{ _('Update event') }}
{% endblock %}
{%- endblock -%}
{% block header %}
{{ render_cropper_block() }}
<script>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_google_filter_autocomplete_header, render_event_dates_filter_form, render_pagination, render_place, render_events_sub_menu %}
{% block title %}
{%- block title -%}
{{ _('Event Dates') }}
{% endblock %}
{%- endblock -%}
{% block header %}
{{ render_google_filter_autocomplete_header() }}
<script>

View File

@ -1,9 +1,9 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_event_props_seo %}
{% set event = event_date.event %}
{% block title %}
{{ event_date.start | dateformat() }} {{ event.name }}
{% endblock %}
{%- block title -%}
{{ meta['title'] }}
{%- endblock -%}
{% block content_container_attribs %}{% endblock %}
{% block content %}

View File

@ -1,7 +1,7 @@
{% extends "layout.html" %}
{% block title %}
{%- block title -%}
{{ _('Event Dates') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<event-date-search basepath="{{ url_for('home', _external=True) }}"></event-date-search>

View File

@ -1,7 +1,7 @@
{% extends "layout.html" %}
{% block title %}
{%- block title -%}
{{ _('Places') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Places') }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_place, render_events, render_location_card, render_link_prop, render_image %}
{% block title %}
{%- block title -%}
{{ place.name }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ place.name }}</h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "reviews" %}
{% from "_macros.html" import render_event_suggestion, render_image, render_radio_buttons, render_phone_prop, render_email_prop, render_string_prop, render_field_with_errors, render_field, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% block title %}
{%- block title -%}
{{ event_suggestion.name }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Reject event suggestion') }}</h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "reviews" %}
{% from "_macros.html" import render_event_suggestion, render_image, render_radio_buttons, render_phone_prop, render_email_prop, render_string_prop, render_field_with_errors, render_field, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% block title %}
{%- block title -%}
{{ event_suggestion.name }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Review event suggestion') }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_event_review_status, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% block title %}
{%- block title -%}
{{ event_suggestion.name }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ event_suggestion.name }}</h1>

View File

@ -1,7 +1,7 @@
{% extends "layout.html" %}
{% block title %}
{%- block title -%}
oveda - Terminkalender für Goslar und Hahnenklee
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>Terminkalender für Goslar und Hahnenklee</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_place, render_events_sub_menu %}
{% block title %}
{%- block title -%}
oveda - Offene Veranstaltungsdatenbank
{% endblock %}
{%- endblock -%}
{% block styles %}
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='landing-page.css')}}" />
{% endblock %}

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_field %}
{% block title %}
{%- block title -%}
{{ _('Invitation') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Invitation') }}</h1>

View File

@ -4,14 +4,36 @@
{%- block html %}
<head>
{%- block head %}
<!-- Required meta tags -->
<title>{%- block title -%}{{ title|default('oveda') }}{% endblock title %}</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="{% if meta_description %}{{ meta_description }}{% else %}Mit der offenen Veranstaltungsdatenbank Events einfach bekannt machen!{% endif %}">
{% if canonical_url %}
<link rel="canonical" href="{{ canonical_url }}" />
{% endif %}
{%- block metas %}
<meta property="og:type" content="website">
<meta property="og:title" content="{{ self.title() }}">
{% if meta %}
<meta name="description" content="{{ meta['description'] }}">
<meta property="og:description" content="{{ meta['description'] }}">
{% if 'image' in meta %}
<meta property="og:image" content="{{ meta['image'] }}">
<meta name="twitter:card" content="summary_large_image">
{% else %}
<meta name="twitter:card" content="summary">
{% endif %}
{% else %}
<meta name="description" content="Mit der offenen Veranstaltungsdatenbank Events einfach bekannt machen!">
<meta property="og:description" content="Mit der offenen Veranstaltungsdatenbank Events einfach bekannt machen!">
{% endif %}
{% if canonical_url %}
<link rel="og:url" href="{{ canonical_url }}" />
{% endif %}
{%- endblock metas %}
<!-- Bootstrap CSS -->
@ -41,7 +63,7 @@
<script src="{{ url_for('static', filename='jquery.recurrenceinput.js')}}"></script>
{% block header_before_site_js %}
{% endblock %}
{%- endblock -%}
<script src="{{ url_for('static', filename='site.js')}}"></script>
<script src="{{ url_for('static', filename='svg-icon.js')}}"></script>
@ -107,8 +129,6 @@
</script>
<title>{% block title %}{{ title|default('oveda') }}{% endblock title %}</title>
{% if structured_data %}
<script type="application/ld+json">
{{ structured_data | safe }}

View File

@ -1,7 +1,7 @@
{% extends "layout.html" %}
{% block title %}
{%- block title -%}
{{ title }}
{% endblock %}
{%- endblock -%}
{% block content %}
{{ content }}
{% endblock %}

View File

@ -1,7 +1,7 @@
{% extends "layout.html" %}
{% block title %}
{%- block title -%}
{{ _('Organizations') }}
{% endblock %}
{%- endblock -%}
{% block content %}
{% if invitations %}

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "events" %}
{% from "_macros.html" import render_event_dates_filter_form, render_event_warning_pills, render_pagination, render_event_date, render_field_with_errors, render_event_organizer %}
{% block title %}
{%- block title -%}
{{ _('Events') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Events') }} <button type="button" class="btn btn-outline-secondary mx-2" data-toggle="collapse" data-target="#search_form" aria-expanded="{% if form.is_submitted() %}true{% else %}false{% endif %}"><i class="fa fa-search"></i></button></h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "members" %}
{% from "_macros.html" import render_roles, render_pagination, render_event_organizer %}
{% block title %}
{%- block title -%}
{{ _('Members') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Invitations') }}</h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "organizers" %}
{% from "_macros.html" import render_pagination, render_event_organizer %}
{% block title %}
{%- block title -%}
{{ _('Organizers') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Organizers') }}</h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "places" %}
{% from "_macros.html" import render_pagination, render_field_with_errors, render_event_organizer %}
{% block title %}
{%- block title -%}
{{ _('Places') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Places') }}</h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "reference_requests_incoming" %}
{% from "_macros.html" import render_reference_request_review_status_pill, render_event_date, render_pagination, render_event_organizer %}
{% block title %}
{%- block title -%}
{{ _('Reference requests') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1 class="mb-1">{{ _('Incoming reference requests') }}</h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "reference_requests_outgoing" %}
{% from "_macros.html" import render_reference_request_review_status_pill, render_event_date, render_pagination, render_event_organizer %}
{% block title %}
{%- block title -%}
{{ _('Reference requests') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1 class="mb-1">{{ _('Outgoing reference requests') }}</h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "references_incoming" %}
{% from "_macros.html" import render_event_warning_pills, render_event_date, render_pagination, render_event_organizer %}
{% block title %}
{%- block title -%}
{{ _('References') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1 class="mb-1">{{ _('Incoming references') }}</h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "references_outgoing" %}
{% from "_macros.html" import render_event_warning_pills, render_event_date, render_pagination, render_event_organizer %}
{% block title %}
{%- block title -%}
{{ _('References') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1 class="mb-1">{{ _('Outgoing references') }}</h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "reviews" %}
{% from "_macros.html" import render_event_review_status_pill, render_pagination, render_event_date, render_field_with_errors, render_event_organizer %}
{% block title %}
{%- block title -%}
{{ _('Reviews') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1 class="mb-1">{{ _('Reviews') }}</h1>

View File

@ -1,9 +1,9 @@
{% extends "layout_manage.html" %}
{% set active_id = "widgets" %}
{% from "_macros.html" import render_pagination, render_event_date, render_field, render_field_with_errors, render_event_organizer %}
{% block title %}
{%- block title -%}
{{ _('Widgets') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Widgets') }} <a class="btn btn-light" role="button" data-toggle="collapse" href="#settingsContainer" aria-expanded="false" aria-controls="settingsContainer"><i class="fa fa-cog"></i></a></h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_field_with_errors, render_field %}
{% block title %}
{%- block title -%}
{{ _('Create OAuth2 client') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Create OAuth2 client') }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_pagination %}
{% block title %}
{%- block title -%}
{{ _('OAuth2 clients') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<nav aria-label="breadcrumb">

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_kv_begin, render_kv_end, render_kv_prop %}
{% block title %}
{%- block title -%}
{{ oauth2_client.client_name }}
{% endblock %}
{%- endblock -%}
{% block content %}
<nav aria-label="breadcrumb">

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_field_with_errors, render_field %}
{% block title %}
{%- block title -%}
{{ _('Update OAuth2 client') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Update OAuth2 client') }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_pagination %}
{% block title %}
{%- block title -%}
{{ _('OAuth2 tokens') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<nav aria-label="breadcrumb">

View File

@ -1,7 +1,7 @@
{% extends "layout.html" %}
{% block title %}
{%- block title -%}
{{ organization.name }}
{% endblock %}
{%- endblock -%}
{% block content_container_attribs %}{% endblock %}
{% block content %}

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_field, render_field_with_errors, render_event_dates_date_field, render_event_dates_location_field, render_google_filter_autocomplete_header, render_event_dates_filter_form, render_pagination, render_place, render_events_sub_menu %}
{% block title %}
{%- block title -%}
{{ _('Event Planing') }}
{% endblock %}
{%- endblock -%}
{% block content_container_attribs %}{% endblock %}
{% block header %}
{{ render_google_filter_autocomplete_header() }}

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_roles %}
{% block title %}
{%- block title -%}
{{ _('Profile') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ current_user.email }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_audit, render_string_prop, render_audit_container, render_event_props %}
{% block title %}
{%- block title -%}
{{ _('Event reference') }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Event reference') }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_field_with_errors, render_field %}
{% block title %}
{%- block title -%}
{{ _('Update reference to event "%(name)s"', name=reference.event.name) }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Update reference to event "%(name)s"', name=reference.event.name) }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_radio_buttons, render_phone_prop, render_email_prop, render_string_prop, render_field_with_errors, render_field, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% block title %}
{%- block title -%}
{{ event.name }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ _('Review event reference request') }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_reference_request_review_status, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% block title %}
{%- block title -%}
{{ event.name }}
{% endblock %}
{%- endblock -%}
{% block content %}
<h1>{{ event.name }}</h1>

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_widget_styles, render_pagination, render_event_warning_pills, render_event_warning_pills, render_place, render_events_sub_menu %}
{% block title %}
{%- block title -%}
{{ _('Widget') }}
{% endblock %}
{%- endblock -%}
{% block styles %}
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widget.css')}}" />
{{ render_widget_styles(styles) }}

View File

@ -1,9 +1,9 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_audit_container, render_widget_styles, render_event_props, render_image_with_link, render_place, render_link_prop %}
{% set event = event_date.event %}
{% block title %}
{%- block title -%}
{{ event.name }}
{% endblock %}
{%- endblock -%}
{% block styles %}
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widget.css')}}" />
{{ render_widget_styles(styles) }}

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_widget_styles, render_logo, render_cropper_code, render_crop_image_form, render_jquery_steps_header, render_cropper_header, render_base_image_form, render_radio_buttons, render_datepicker_js, render_field_with_errors, render_field %}
{% block title %}
{%- block title -%}
{{ _('Create event suggestion') }}
{% endblock %}
{%- endblock -%}
{% block styles %}
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='jquery-steps.css')}}" />
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='widget.css')}}" />

View File

@ -1,8 +1,8 @@
{% extends "layout.html" %}
{% from "_macros.html" import render_widget_styles, render_location, render_location_prop, render_logo, render_pagination, render_event_warning_pills, render_place, render_events_sub_menu %}
{% block title %}
{%- block title -%}
{{ admin_unit.name }} Infoscreen
{% endblock %}
{%- endblock -%}
{% block styles %}
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='infoscreen.css')}}" />
{{ render_widget_styles(styles) }}

View File

@ -30,6 +30,7 @@ from project.models import (
)
from project.services.event import (
get_event_with_details_or_404,
get_meta_data,
get_significant_event_changes,
get_upcoming_event_dates,
insert_event,
@ -66,6 +67,7 @@ def event(event_id):
event=event,
dates=dates,
structured_datas=structured_datas,
meta=get_meta_data(event),
user_rights=user_rights,
canonical_url=url_for("event", event_id=event_id, _external=True),
)

View File

@ -7,11 +7,12 @@ from project.forms.event_date import FindEventDateForm
from project.jsonld import DateTimeEncoder, get_sd_for_event_date
from project.services.event import (
get_event_date_with_details_or_404,
get_meta_data,
get_upcoming_event_dates,
)
from project.services.event_search import EventSearchParams
from project.views.event import get_event_category_choices, get_menu_user_rights
from project.views.utils import flash_errors, track_analytics, truncate
from project.views.utils import flash_errors, track_analytics
def prepare_event_date_form(form):
@ -51,11 +52,12 @@ def event_date(id):
structured_data = json.dumps(
get_sd_for_event_date(event_date), indent=2, cls=DateTimeEncoder
)
return render_template(
"event_date/read.html",
event_date=event_date,
structured_data=structured_data,
meta_description=truncate(event_date.event.description, 300),
meta=get_meta_data(event_date.event, event_date),
canonical_url=url_for("event_date", id=id, _external=True),
user_rights=get_menu_user_rights(event_date.event),
dates=get_upcoming_event_dates(event_date.event_id),

View File

@ -103,3 +103,25 @@ def test_update_event_dates_with_recurrence_rule_past_forever(
event_date = event.dates[366]
assert event_date.start == create_berlin_date(2021, 1, 3, 14, 30)
assert event_date.end == create_berlin_date(2021, 1, 3, 16, 30)
def test_get_meta_data(seeder, app):
user_id, admin_unit_id = seeder.setup_base()
event_id = seeder.create_event(admin_unit_id)
with app.app_context():
from project.models import Event, EventAttendanceMode, Location
from project.services.event import get_meta_data
event = Event.query.get(event_id)
event.attendance_mode = EventAttendanceMode.offline
location = Location()
location.city = "Stadt"
event.event_place.location = location
event.photo_id = 1
with app.test_request_context():
meta = get_meta_data(event)
assert meta is not None