示例#1
0
    def show(self, org):
        if not org or org.activated_at is None:
            flask.flash('Organization not found. Please try again', 'danger')
            return flask.redirect(flask.url_for('index'))
        cloudinary = dict(entity_id=org.id,
                          entity_type='organization',
                          **CloudinaryHandler.cloudinary_elements())

        ef = forms.MassEmailForm()
        email_form = self.custom_email_form(org.id, ef)
        wtforms = {
            'mass_email': email_form,
            'confirm': forms.ConfirmForm(flask.request.form)
        }
        context = {
            'cloudinary': cloudinary,
            'env': CONF.get('environment'),
            'google_api_key': CONF.get('google.api.key'),
            'invited_users': self.get_invited_users(org.id),
            'join_request_url': flask.url_for('orgs.join_request',
                                              org_id=org.id),
            'members': self.get_users(org.id),
            'org': org,
            'video_extensions': tuple(VIDEO_EXTENSIONS),
            'wtforms': wtforms
        }
        return flask.render_template('organization/view.html', **context)
示例#2
0
def edit(_ctxt, org_id):
    tf = forms.TextMessageForm()
    text_message_form = helper.text_message_form(org_id, tf)
    ef = forms.MassEmailForm()
    mass_email_form = helper.custom_email_form(org_id, ef)

    org = models.Organization.get(org_id)
    creator = org.creator
    members = helper.get_users(org_id)
    invited_users = helper.get_invited_users(org_id)

    wtforms = {
        'org': forms.OrgForm(),
        'mass_email': mass_email_form,
        'link': forms.LinkForm(),
        'chart_filter': forms.ChartFilterForm(),
        'confirm': forms.ConfirmForm(),
        'text_message': text_message_form,
        'add_member': forms.AddMemberForm(),
        'role_forms_dict': {}
    }

    helper.populate_primary_form(wtforms['org'], org)

    for member, role in members:
        role_form = forms.RoleForm()
        role_form.role.choices = helper.get_role_choices(org_id)
        role_form.role.data = role.id
        wtforms['role_forms_dict'][member.id] = role_form

    charts = Charts(org).get()
    cloudinary = dict(entity_id=org.id,
                      entity_type='org',
                      **CloudinaryHandler.cloudinary_elements())

    context = {
        'add_member_return_url': flask.url_for('.edit', org_id=org_id),
        'charts': charts,
        'cloudinary': cloudinary,
        'creator': creator,
        'current_user': current_user,
        'invited_users': invited_users,
        'members': members,
        'org': org,
        'wtforms': wtforms
    }
    return flask.render_template('organization/edit.html', **context)
示例#3
0
def show(_ctxt, group_id):
    tf = forms.TextMessageForm()
    text_message_form = helper.text_message_form(group_id, tf)
    ef = forms.MassEmailForm()
    mass_email_form = helper.custom_email_form(group_id, ef)
    group = models.Group.get(group_id)
    if not group or group.archived_at:
        flask.flash('Group not found. Please try again.', 'danger')
        return flask.redirect(flask.url_for('index'))
    elif not group.parent_org.activated_at:
        flask.flash(
            'This group does not exist, please try again or contact'
            ' an organization administrator for that group', 'danger')
        return flask.redirect(flask.url_for('index'))
    wtforms = {
        'group_leaders_email': forms.GroupLeadersEmailForm(),
        'mass_email': mass_email_form,
        'add_member': forms.AddMemberForm(),
        'text_message': text_message_form,
        'group_add_document': forms.GroupAddDocumentForm(),
        'group_add_google_doc': forms.GroupAddGoogleDocForm(),
        'group_meeting': forms.GroupMeetingForm(),
        'confirm': forms.ConfirmForm()
    }

    cloudinary = dict(entity_type='group',
                      entity_id=group.id,
                      **CloudinaryHandler.cloudinary_elements())
    google_api = {'key': GOOGLE_API_KEY, 'client_id': GOOGLE_API_CLIENT_ID}

    context = {
        'add_member_return_url': flask.url_for(".show", group_id=group_id),
        'cloudinary': cloudinary,
        'current_user': current_user,
        'entity_type': 'group',
        'google_api': google_api,
        'group': group,
        'invited_users': helper.get_invited_users(group_id),
        'meetings': helper.get_meetings(group_id),
        'members': helper.get_users(group_id),
        'video_extensions': tuple(VIDEO_EXTENSIONS),
        'wtforms': wtforms
    }

    if current_user.is_authenticated:
        context['disqus_config'] = disqus.conf(current_user, group_id)
    return flask.render_template('group/view.html', **context)
示例#4
0
def email_org(_ctxt, org_id):
    form = forms.MassEmailForm(flask.request.form)
    subject = form.subject.data
    message = form.message.data
    if form.recipient.data != "all":
        LOG.info("Sending email to %s", form.recipient.data)
        user = models.User.get(form.recipient.data)
        org_member_emails = user.email
    else:
        org_member_emails = ''
        org_users = helper.get_users(org_id, emails=True)
        for user, _ in org_users:
            org_member_emails += user.email + ', '

    # TODO: need to wrap this data in a cleaner (NEVER TRUST USER INPUT)
    if not org_member_emails:
        flask.flash('There was an error sending this email.')
    else:
        try:
            org = models.Organization.get(org_id)
            mail_content = {
                'to': org_member_emails,
                'subject': subject,
                'message': message,
                'user': current_user,
                'org': org
            }
            org_mass_email = email.OrgMassEmail()
            org_mass_email.send(current_user.email, org_member_emails,
                                **mail_content)
            LOG.info("Sending email to %s", org_member_emails)
            flask.flash('You successfully sent your email message.', 'success')
        except Exception:
            LOG.exception("Error sending email to group")
            flask.flash(
                'There was a problem sending your message.'
                ' Sorry for the inconvenience.'
                '  We will fix this as soon as we can.'
                ' Please try again shortly.', 'danger')
    return flask.redirect(flask.url_for('.show', org_id=org_id))
示例#5
0
def email_group(_ctxt, group_id):
    form = forms.MassEmailForm(flask.request.form)
    subject = form.subject.data
    message = form.message.data
    if form.recipient.data != "all":
        LOG.info("Sending email to %s", form.recipient.data)
        user = models.User.get(form.recipient.data)
        group_member_emails = user.email
    else:
        group_member_emails = ''
        group_users = helper.get_users(group_id, emails=True)
        for user, _, _ in group_users:
            group_member_emails += user.email + ', '
    if not group_member_emails:
        flask.flash('There was an error sending this email.')
    else:
        try:
            group = models.Group.get(group_id)
            mail_content = {
                'to': group_member_emails,
                'subject': subject,
                'message': message,
                'user': current_user,
                'group': group
            }
            group_mass_email = email.GroupMassEmail()
            group_mass_email.send(current_user.email, group_member_emails,
                                  **mail_content)
            flask.flash('You successfully sent your email message.', 'success')
        except Exception:
            LOG.exception("Error sending email to group")
            flask.flash(
                'There was a problem sending your message.'
                ' Sorry for the inconvenience.'
                '  We will fix this as soon as we can.'
                ' Please try again shortly.', 'danger')
    return flask.redirect(flask.url_for('.show', group_id=group_id))
示例#6
0
def edit(_ctxt, group_id):
    tf = forms.TextMessageForm()
    text_message_form = helper.text_message_form(group_id, tf)
    ef = forms.MassEmailForm()
    mass_email_form = helper.custom_email_form(group_id, ef)

    group = models.Group.get(group_id)
    if not group.parent_org.activated_at:
        flask.flash(
            'This group does not exist, please try again or contact'
            ' an organization administrator for that group', 'danger')
        return flask.redirect(flask.url_for('index'))
    other_orgs = helper.get_unaffiliated_orgs_for_group(group_id)
    members = helper.get_users(group_id)
    invited_users = helper.get_invited_users(group_id)
    wtforms = {
        'add_member': forms.AddMemberForm(),
        'group_add_org': forms.GroupAddOrgForm(),
        'confirm': forms.ConfirmForm(),
        'group_edit': forms.GroupEditForm(),
        'link': forms.LinkForm(),
        'mass_email': mass_email_form,
        'role_forms': {},
        'text_message': text_message_form,
        'tinymce_api_key': CONF.get('tinymce.api.key')
    }

    # TODO This is ripe for optimization. It's nice to get the models
    #      but we should eager load the meet_time_types at least to
    #      save N unexpected trips to the database
    wtforms['group_edit'].meet_times.data = [
        t.meet_time_type for t in group.meet_times
    ]
    wtforms[
        'group_edit'].privacy_settings.choices = forms.privacy_setting_choices(
        )
    helper.populate_primary_form(wtforms['group_edit'], group)
    add_member_return_url = flask.url_for(".edit", group_id=group_id)
    wtforms['group_add_org'].orgs.choices = [('', 'Select Organization')] + [
        (str(o.id), o.name) for o in other_orgs
    ]
    role_forms = {}
    org = group.parent_org

    if current_user.is_group_admin(org_id=org.id):
        group_role_choices = helper.get_role_choices()
    elif current_user.role_for_group(group_id):
        priority = current_user.role_for_group(group_id).priority
        group_role_choices = helper.get_role_choices(priority)
    else:
        group_role_choices = helper.get_role_choices(0)
    for user, group_member, role in members:
        group_user_role_form = forms.GroupUserRoleForm()
        group_user_role_form.role.choices = group_role_choices
        group_user_role_form.role.data = str(role.id)
        group_user_role_form.cohost_meeting.data = (
            group_member.can_cohost_meeting)
        role_forms[user.id] = group_user_role_form

    cloudinary = dict(entity_type='group',
                      entity_id=group.id,
                      **CloudinaryHandler.cloudinary_elements())

    context = {
        'add_member_return_url': add_member_return_url,
        'cloudinary': cloudinary,
        'group': group,
        'invited_users': invited_users,
        'members': members,
        'role_forms': role_forms,
        'wtforms': wtforms
    }
    return flask.render_template('group/edit.html', **context)