view data/plugin/parser/bbb_create.py @ 597:0b31dafef3cf

bbb: script name added to url
author Reimar Bauer <rb.proj AT googlemail DOT com>
date Wed, 13 Jun 2012 10:18:12 +0200
parents 84ef153f8363
children 31ef7dc6168a
line wrap: on
line source

# -*- coding: utf-8 -*-
"""
    MoinMoin - Parser for creating a bigbluebutton meeting (http://www.bigbluebutton.org/)

    @copyright: 2012 MoinMoin:ReimarBauer
    @license: GNU GPL, see COPYING for details.
"""

import time
from MoinMoin import wikiutil
# pip install bigbluebutton
from bigbluebutton import Meeting_Setup, Meeting
import bbb_settings

Dependencies = []

class Parser:
    """
    Lets a user create a meeting.
    It requires a bbb_admin_group defined in wikiconfig.py.
    Only a user of this group is allowed to use this parser. 
    On same directory as wikiconfig.py you need
    a "bbb_settings.py" module with the SALT and the BBB_API_URL.
    
    Example:
    
    #acl YOURNAME:read,write,delete,revert All:
    #format bbb_create
    responsible:: YOURNAME
    meeting_name:: The name of the meeting
    meeting_id:: The ID of the meeting
    attendee_password:: The password for attendee (viewer)
    moderator_password:: The password for moderator
    """

    extensions = ''
    Dependencies = []

    def __init__(self, raw, request, **kw):
        self.raw = raw
        self.request = request
        self.form = request.form
        self._ = request.getText
        self.start_line = kw.get('start_line', 0)

    def format(self, formatter):
        """ Send the text. """
        pagename = formatter.page.page_name
        content = self.request.dicts.get(pagename, {})
        request = self.request
        username = request.user.name
        groups = request.groups
        try:
            bbb_admin_group = groups.get(request.cfg.bbb_admin_group, [])
        except AttributeError:
            wiki_parser = wikiutil.importPlugin(self.request.cfg, "parser", "text_moin_wiki", None)
            wiki_parser = wiki_parser.Parser(self.raw, self.request)
            wiki_parser.format(formatter)
            return

        msg = ""
        attendee_password = content["attendee_password"]
        moderator_password = content["moderator_password"]
        meeting_id = content["meeting_id"]
        if not attendee_password.strip() or not moderator_password.strip():
            wiki_parser = wikiutil.importPlugin(self.request.cfg, "parser", "text_moin_wiki", None)
            wiki_parser = wiki_parser.Parser(self.raw, self.request)
            wiki_parser.format(formatter)
            return

        if request.user.valid and username in bbb_admin_group:
            recreate = True
            scriptname = request.script_root
            if scriptname:
                scriptname = scriptname.lstrip('/') + '/'
            url = "%s%s%s" % (request.host_url, scriptname, pagename.lstrip('/'))
            msg = "(!) Meeting started :) "
            try:
                session = Meeting_Setup(bbb_api_url=bbb_settings.BBB_API_URL, salt=bbb_settings.SALT,
                                    meeting_name=content["meeting_name"], meeting_id=meeting_id,
                                    attendee_password=attendee_password,
                                    moderator_password=moderator_password,
                                    logout_url=url,
                                    )
                try:
                    session.create_meeting()
                except TypeError:
                    recreate = False
                    msg = "/!\ Usually the meeting is running and you tried to change some important parameters. Stop the Meeting beforehand. X-("

            except KeyError:
                msg = "/!\ Usually not the right parameters or syntax used! X-(  "
                recreate = False

        actions = []
        if request.user.valid and request.user.may.read(pagename):
            meeting = Meeting(bbb_settings.BBB_API_URL, bbb_settings.SALT)

            if meeting.is_running(meeting_id):
                actions.append(u' . [[%(attendee_url)s|Join as visitor (%(username)s)]]' % {"attendee_url": meeting.join_url(meeting_id, request.user.name, attendee_password),
                                                                                            "username": username})
            else:
                if msg:
                     msg += "\n\n/!\ A Moderator has to join this meeting before someone else can join in!"
                else:
                    msg = " /!\ A Moderator has to join this meeting before someone else can join in!"
            if request.user.may.write(pagename):
                if meeting.is_running(meeting_id):
                    msg += "\n\n(!) Someone else is already attending this meeting"
                actions.append(u' . [[%(moderator_url)s|Join as moderator (%(username)s)]]' % {"moderator_url": meeting.join_url(meeting_id, request.user.name, moderator_password),
                                                                                             "username": username})
                actions.append(u' . <<Action(submit_bbb_close_meeting, text="Close this meeting", meeting_id=%(meeting_id)s, password=%(password)s)>>' % {"meeting_id": meeting_id,
                                                                                                                                                  "password": moderator_password
                                                                                                                                                  })
            if request.user.may.delete(pagename):
                actions.append(u' . <<Action(DeletePage, text="remove meeting permanently")>>')
        else:
            if request.user.valid and request.user.may.write(pagename):
                actions.append(u' . <<Action(edit, text="edit meeting")>>')

        raw = u"""
%(msg)s

{{{#!wiki dotted
%(actions)s
}}}

""" % {"msg": msg,
       "actions": '\n'.join(actions)
      }


        wiki_parser = wikiutil.importPlugin(self.request.cfg, "parser", "text_moin_wiki", None)
        wiki_parser = wiki_parser.Parser(raw, self.request)
        wiki_parser.format(formatter)