view data/plugin/parser/bbb_create.py @ 610:362ea5fd96dc

bbb: output of parser improved
author Reimar Bauer <rb.proj AT googlemail DOT com>
date Thu, 28 Jun 2012 17:15:32 +0200
parents 8cc90eda0688
children d18e37876a77
line wrap: on
line source

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

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

import time
from MoinMoin import wikiutil
# pip install bigbluebutton
try:
    from bigbluebutton import Meeting
except ImportError:
    Meeting = None
try:    
    import bbb_settings
except ImportError:
    bbb_settings = None

Dependencies = []
extensions = ['.bbb']

class Parser:
    """
    Lets a user create a meeting page
    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


        attendee_password = content["attendee_password"]
        moderator_password = content["moderator_password"]
        meeting_id = content["meeting_id"]
        responsible = content["responsible"]
        if Meeting is not None and bbb_settings is not None:
            meeting = Meeting(bbb_settings.BBB_API_URL, bbb_settings.SALT)
            #XXX meeting.is_running is only True if someone had joined in, so we use meeting_info instead
            meeting_info = meeting.meeting_info(meeting_id, moderator_password)
           
            meeting_data = """|| '''Meeting ID''' || '''Participation Count''' || '''Moderator Count'''||
    || %(meeting_id)s || 0 || 0 ||""" % {"meeting_id": meeting_id
                                         }
            if  meeting_info:
                print meeting_info
                users = meeting_info["users"]
                users_in_meeting = ["%s %s" % (user["name"], user["role"][0]) for user in users]
                meeting_data = """|| '''Meeting ID''' || '''Participation Count''' || '''Moderator Count'''|| '''users''' ||
|| %(meeting_id)s || %(participant_count)s || %(moderator_count)s || %(users)s ||""" % {"meeting_id": meeting_id,
                                                                               "participant_count": meeting_info["participant_count"],
                                                                               "moderator_count": meeting_info["moderator_count"],
                                                                               "users": '<<BR>>'.join(users_in_meeting),
                                                                               }
    
            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
    
            actions = []
            actions_text = ""
            guest_info_text = ""
            msg = "\n\n/!\ A Moderator has to start the meeting before someone else can join in!"
            if request.user.valid and request.user.may.read(pagename):
                if meeting_info:
                    msg = "\n\n (!) Meeting is running. Please join in!"
                    if username == responsible:
                        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})
    
                    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:
                        msg = "\n\n/!\ Wait until the moderator has joined this meeting!"
                else:
                    if username == responsible:
                        msg = "\n\n/!\ A Moderator has to start the meeting before someone else can join in!"
                        actions.append(u' . <<Action(submit_bbb_start_meeting, text="Click to start this meeting")>>')
    
                if request.user.may.write(pagename) and meeting_info:
                    if username == responsible:
                        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 "GUEST_URL" in bbb_settings.__dict__:
                            guest_info_text = "(!) External users can get access by using this URL: %s" % bbb_settings.GUEST_URL
    
    
                if not meeting_info and request.user.may.delete(pagename) and username == responsible:
                    # users with before rights should know to use commands of the menu
                    actions.append(u' . <<Action(edit, text="edit meeting parameter")>>')
                    actions.append(u' . <<Action(DeletePage, text="remove meeting permanently")>>')
    
                if actions:
                    actions_text = """{{{#!wiki dotted
    %(actions)s
    }}}
    """ % {"actions": '\n'.join(actions)}
               
    
            raw = u"""
 %(msg)s
    
Current participants and state of users in this meeting. 
%(meeting_data)s
<<BR>>    
%(actions_text)s
<<BR>>    
%(guest_info_text)s
    """ % {"msg": msg,
           "meeting_data": meeting_data,
           "actions_text": actions_text,
           "guest_info_text": guest_info_text,
          }
    
    
            wiki_parser = wikiutil.importPlugin(self.request.cfg, "parser", "text_moin_wiki", None)
            wiki_parser = wiki_parser.Parser(raw, self.request)
            wiki_parser.format(formatter)