Mercurial > libervia-web
view libervia/pages/events/admin/page_meta.py @ 1216:b2d067339de3
python 3 port:
/!\ Python 3.6+ is now needed to use libervia
/!\ instability may occur and features may not be working anymore, this will improve with time
/!\ TxJSONRPC dependency has been removed
The same procedure as in backend has been applied (check backend commit ab2696e34d29 logs
for details). Removed now deprecated code (Pyjamas compiled browser part, legacy blog,
JSON RPC related code).
Adapted code to work without `html` and `themes` dirs.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 13 Aug 2019 19:12:31 +0200 |
parents | 0f37b65fe7c2 |
children | acec8e9185db |
line wrap: on
line source
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from libervia.server.constants import Const as C from twisted.internet import defer from twisted.words.protocols.jabber import jid from sat.tools.common.template import safe from sat.core.i18n import _ from sat.core.log import getLogger import time import cgi import math import re name = "event_admin" access = C.PAGES_ACCESS_PROFILE template = "event/admin.html" log = getLogger(__name__) REG_EMAIL_RE = re.compile(C.REG_EMAIL_RE, re.IGNORECASE) def parse_url(self, request): self.getPathArgs( request, ("event_service", "event_node", "event_id"), min_args=2, event_service="@jid", event_id="", ) @defer.inlineCallbacks def prepare_render(self, request): data = self.getRData(request) template_data = request.template_data ## Event ## event_service = template_data["event_service"] = data["event_service"] event_node = template_data["event_node"] = data["event_node"] event_id = template_data["event_id"] = data["event_id"] profile = self.getProfile(request) event_timestamp, event_data = yield self.host.bridgeCall( "eventGet", event_service.userhost() if event_service else "", event_node, event_id, profile, ) try: background_image = event_data.pop("background-image") except KeyError: pass else: template_data["dynamic_style"] = safe( """ html { background-image: url("%s"); background-size: 15em; } """ % cgi.escape(background_image, True) ) template_data["event"] = event_data invitees = yield self.host.bridgeCall( "eventInviteesList", event_data["invitees_service"], event_data["invitees_node"], profile, ) template_data["invitees"] = invitees invitees_guests = 0 for invitee_data in invitees.values(): if invitee_data.get("attend", "no") == "no": continue try: invitees_guests += int(invitee_data.get("guests", 0)) except ValueError: log.warning( _("guests value is not valid: {invitee}").format(invitee=invitee_data) ) template_data["invitees_guests"] = invitees_guests template_data["days_left"] = int( math.ceil((event_timestamp - time.time()) / (60 * 60 * 24)) ) ## Blog ## data["service"] = jid.JID(event_data["blog_service"]) data["node"] = event_data["blog_node"] data["allow_commenting"] = "simple" # we now need blog items, using blog common page # this will fill the "items" template data blog_page = self.getPageByName("blog_view") yield blog_page.prepare_render(self, request) @defer.inlineCallbacks def on_data_post(self, request): profile = self.getProfile(request) if not profile: log.error("got post data without profile") self.pageError(request, C.HTTP_INTERNAL_ERROR) type_ = self.getPostedData(request, "type") if type_ == "blog": service, node, title, body, lang = self.getPostedData( request, ("service", "node", "title", "body", "language") ) if not body.strip(): self.pageError(request, C.HTTP_BAD_REQUEST) data = {"content": body} if title: data["title"] = title if lang: data["language"] = lang try: comments = bool(self.getPostedData(request, "comments").strip()) except KeyError: pass else: if comments: data["allow_comments"] = C.BOOL_TRUE try: yield self.host.bridgeCall("mbSend", service, node, data, profile) except Exception as e: if "forbidden" in str(e): self.pageError(request, C.HTTP_FORBIDDEN) else: raise e elif type_ == "event": service, node, event_id, jids, emails = self.getPostedData( request, ("service", "node", "event_id", "jids", "emails") ) for invitee_jid_s in jids.split(): try: invitee_jid = jid.JID(invitee_jid_s) except RuntimeError as e: log.warning( _("this is not a valid jid: {jid}").format(jid=invitee_jid_s) ) continue yield self.host.bridgeCall( "eventInvite", invitee_jid.userhost(), service, node, event_id, profile ) for email_addr in emails.split(): if not REG_EMAIL_RE.match(email_addr): log.warning( _("this is not a valid email address: {email}").format( email=email_addr ) ) continue yield self.host.bridgeCall( "eventInviteByEmail", service, node, event_id, email_addr, {}, "", "", "", "", "", "", profile, ) else: log.warning(_("Unhandled data type: {}").format(type_))