예제 #1
0
def badge_misc_pdf(meeting_id, badge_type):
    meeting = sugar.get_object_or_404(models.Meeting, id=meeting_id)
    temp = path(tempfile.mkdtemp())
    app = flask.current_app

    if badge_type == 'visitor':
        category = models.Category.select().where(
            data__contains={'name_E': 'Visitor'}).get()
    elif badge_type == 'security':
        category = models.Category.select().where(
            data__contains={'name_E': 'Security'}).get()
    elif badge_type == 'exhibitor':
        category = models.Category.select().where(
            data__contains={'name_E': 'Exhibitor'}).get()
    elif badge_type == 'host_government':
        category = models.Category.select().where(
            data__contains={'name_E': 'Host Government'}).get()
    elif badge_type == 'local_staff':
        category = models.Category.select().where(
            data__contains={'name_E': 'Local staff'}).get()
    else:
        flask.abort(400)

    context = {
        'meeting': meeting,
        'category': category,
        'badge_type': badge_type,
        'path': app.root_path,
        'background_path': app.config['UPLOADED_BACKGROUNDS_DEST'],
    }

    return sugar.render_pdf('participant/badge_misc_simple.html', temp=temp,
                             height="2.15in", width="3.4in", context=context,
                             filename=sugar.random_string(6),
                             use_wkhtmltopdf=True)
예제 #2
0
def edit(staff_id=None):
    app = flask.current_app
    page_info = {}

    if staff_id:
        staff = sugar.get_object_or_404(models.Staff, id=staff_id)
        page_info["title"] = "Edit staff member"

        page_info["picture"] = {
            "edit_url": flask.url_for("staff.edit_photo", staff_id=staff_id),

            "remove_url": flask.url_for("staff.remove_photo", staff_id=staff.id),

            "url": flask.url_for("staff.photo", staff_id=staff.id),
        }

    else:
        staff = models.Staff()
        staff.data = {}
        page_info["title"] = "Add staff member"

    if flask.request.method == "POST":
        form_data = dict(schema.StaffSchema.from_defaults().flatten())
        form_data.update(flask.request.form.to_dict())

        staff_schema = schema.StaffSchema.from_flat(form_data)
        if staff_schema.validate():
            is_admin = staff_schema['is_admin'].value
            staff.role = 'admin' if is_admin else 'viewer'
            if not staff_id:
                password = sugar.random_string(size=4)
                staff_schema['password'].set(sugar.make_hash(password))
                _send_mail_to_user(staff_schema, password)

            staff.data.update(staff_schema.flatten())
            staff.save()

            flask.flash("Staff saved", "success")
            location = flask.url_for("staff.home")

            return flask.redirect(location)
        else:
           flask.flash(u"Errors in staff information", "error")
    else:
        if staff_id:
            staff_schema = schema.StaffSchema.from_flat(staff.decoded_data)
        else:
            staff_schema = schema.StaffSchema()

    return {
        "mk": sugar.MarkupGenerator(
            app.jinja_env.get_template("widgets/widgets_edit.html")
        ),
        "staff_schema": staff_schema,
        "staff": staff,
        "staff_id": staff_id,
        "page_info": page_info,
    }
예제 #3
0
def form(meeting_id):
    app = flask.current_app
    meeting = schema.Meeting.get_or_404(meeting_id)

    # render form in local language
    lang = flask.request.args.get('lang', 'en')
    if lang not in ('en', 'fr', 'es'):
        flask.abort(400)
    sugar.set_lang(lang)

    meeting_model = sugar.get_object_or_404(models.Meeting, id=meeting_id)
    # you can define custom forms based on meeting types
    # in forms/custom_participant.py
    RegistrationForm = get_registration_form(meeting_model.data['info_type'])
    form = RegistrationForm(meeting=meeting_model)
    if meeting_model.is_photo_required is False:
        delattr(form, 'photo')
    event_form = EventRegistrationForm(meeting=meeting_model)
    question_form = QuestionRegistrationForm(meeting=meeting_model)

    if meeting['info']['online_registration'] == 'closed':
        return flask.render_template('participant/registration_closed.html',
                                     acronym=meeting['info'].get('acronym'))

    if flask.request.method == 'POST':

        if form.validate():

            person = models.Person()
            person.data = {}

            photo = form.data.get('photo')
            if photo:
                #use last name for the photo_name
                photo_name = '%s.' % secure_filename(form.data['personal_last_name'])
                filename = photos.save(photo, name=photo_name)
                file_path = app.config['UPLOADED_PHOTOS_DEST'] / filename
                file_size = app.config['UPLOADED_PHOTO_RESOLUTION']
                new_file_path = sugar.optimize_photo(file_path, file_size)
                filename = new_file_path.name
                original_filename = file_path.name
            else:
                filename = ''
                original_filename = ''

            form_data = dict(form.data, photo=filename,
                             uploaded_photo=original_filename)
            meeting_flags = getattr(form, 'meeting_flags_data', {})
            files_data = form.upload_files()
            if files_data:
                form_data.update(files_data)
            person.data.update(form_data.items())
            personal_category = int(person.data.pop('personal_category'))

            select_country = form.data['representing_country'] or form.data['personal_country'] or None
            if select_country:
                country = models.Country.select().where(
                    data__contains={'iso': select_country}).get()
                person.data['representing_region'] = country.data['region']

            person.data['printout_representing'] = person.rep(meeting,
                category_id=personal_category) or ''

            category = sugar.get_person_category_or_None(meeting_id, personal_category)
            person.data['room'] = category.data.get('room', '')
            person.save()
            person.data['_text_for_search'] = person.text_for_search
            person.save()
            sugar.activity(meeting_id, "add-participant", person.name, person.id)

            meeting_data = {}
            meeting_data.update(MEETING_FLAGS)
            meeting_data.update(meeting_flags)
            meeting_data['registered_date'] = str(datetime.now().replace(
                second=0, microsecond=0))

            person_meeting = models.PersonMeeting.create(
                person=person.id,
                meeting=meeting_id,
                category=personal_category,
                token=sugar.random_string(),
                data=meeting_data)

            event_form.save(person)
            question_form.save(person)

            events = _get_events(event_form.data['events'])

            if form.data['personal_email']:
                _send_mail_to_self_registering_participant(
                    meeting_model, events, form, lang)

            # language will change here to english
            sugar.set_lang("en")
            refresh()

            _send_mail_to_admin(meeting_model, events, form, person.id)

            phrase_lang = {"en": "E", "es": "S", "fr": "F"}.get(lang, "E")
            phrase = models.Phrase.select().where(
                        data__contains={'name': 'Registration confirmation'},
                        meeting=meeting_id).get()
            return flask.render_template(
                'participant/form/success.html',
                content=phrase.decoded_data['description_%s' % phrase_lang])
        else:
            log.warn("validation errors in participant form", extra={'errors': form.errors, 'form_data': form.data})

    return flask.render_template(
        form.TEMPLATE,
        meeting=meeting,
        meeting_model=meeting_model,
        form=form,
        lang={"en": "E", "es": "S", "fr": "F"}.get(lang, "E"),
        event_form=event_form,
        question_form=question_form)