mirror of
https://github.com/lucaspalomodevelop/eventcally.git
synced 2026-03-13 00:07:22 +00:00
Add meta tags for social media #181
This commit is contained in:
parent
5eddc65c6b
commit
ed8363f163
@ -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
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block title %}
|
||||
{%- block title -%}
|
||||
{{ _('Admin') }}
|
||||
{% endblock %}
|
||||
{%- endblock -%}
|
||||
{% block content %}
|
||||
|
||||
<nav aria-label="breadcrumb">
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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-') }}
|
||||
|
||||
@ -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 %}
|
||||
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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 %}
|
||||
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block title %}
|
||||
{%- block title -%}
|
||||
{{ _('Places') }}
|
||||
{% endblock %}
|
||||
{%- endblock -%}
|
||||
{% block content %}
|
||||
|
||||
<h1>{{ _('Places') }}</h1>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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 %}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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 }}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block title %}
|
||||
{%- block title -%}
|
||||
{{ title }}
|
||||
{% endblock %}
|
||||
{%- endblock -%}
|
||||
{% block content %}
|
||||
{{ content }}
|
||||
{% endblock %}
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block title %}
|
||||
{%- block title -%}
|
||||
{{ _('Organizations') }}
|
||||
{% endblock %}
|
||||
{%- endblock -%}
|
||||
{% block content %}
|
||||
|
||||
{% if invitations %}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block title %}
|
||||
{%- block title -%}
|
||||
{{ organization.name }}
|
||||
{% endblock %}
|
||||
{%- endblock -%}
|
||||
{% block content_container_attribs %}{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
|
||||
@ -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() }}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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) }}
|
||||
|
||||
@ -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) }}
|
||||
|
||||
@ -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')}}" />
|
||||
|
||||
@ -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) }}
|
||||
|
||||
@ -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),
|
||||
)
|
||||
|
||||
@ -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),
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user