Example #1
0
def edit(id, name=None):  # noqa: C901
    item = MediaItem.query.filter_by(id=id).first_or_404()

    form = MediaItemEditForm()
    form.category.choices = gen_media_category_choices()

    if not item.is_editable_by_user():
        return deny_access(no_perm_url)

    if not item.is_hideable_by_user():
        del form.is_visible

    form.file.label.text = "Replace with file"

    if form.validate_on_submit():
        item.name = form.name.data
        item.category_id = form.category.data

        if item.is_hideable_by_user():
            item.is_visible = form.is_visible.data

        if form.file.data:
            # see github issue #47
            if item.get_file_ext() != form.file.data.filename.split(".",
                                                                    1)[-1]:
                flash(
                    "Due to current technical limitations, the old and new file need to have the same file type. \
                    As a workaround, you can upload a new file instead.",
                    "danger")
                return render_template(
                    "media/edit.html",
                    form=form,
                    title=page_title(f"Edit File '{item.name}'"))

            success, filename, size = upload_media_file(
                form.file.data, item.filename)

            item.filesize = size

            if item.is_image():
                success = success and generate_media_thumbnail(filename)

        if success is False:
            flash("Error while uploading the new file.", "error")
        else:
            db.session.commit()
            flash("File was edited.", "success")

        return redirect(item.view_url())
    elif request.method == "GET":
        form.name.data = item.name
        form.category.data = item.category_id

        if item.is_hideable_by_user():
            form.is_visible.data = item.is_visible

    return render_template("media/edit.html",
                           form=form,
                           title=page_title(f"Edit File '{item.name}'"))
Example #2
0
def index():
    sessions_past = Session.query.filter(
        Session.date < datetime.utcnow()).order_by(Session.date.desc()).all()
    sessions_future = Session.query.filter(
        Session.date > datetime.utcnow()).order_by(Session.date.desc()).all()

    for session in sessions_future:
        session.participants.sort(key=lambda x: x.name)

    for session in sessions_past:
        session.participants.sort(key=lambda x: x.name)

    num_campaigns = count_rows(Campaign)
    url = None
    form = None

    if current_user.is_admin() and num_campaigns > 1:
        form = CampaignSelectForm()
        form.campaigns.choices = gen_campaign_choices_admin()
    elif current_user.is_dm_of_anything() and len(current_user.campaigns) > 1:
        form = CampaignSelectForm()
        form.campaigns.choices = gen_campaign_choices_dm()
    elif current_user.is_admin() and num_campaigns == 1:
        campaign = Campaign.query.first()
        url = url_for('session.create_with_campaign', id=campaign.id)
    elif current_user.is_dm_of_anything() and len(current_user.campaigns) == 1:
        url = url_for('session.create_with_campaign',
                      id=current_user.campaigns[0].id)

    return render_template("session/list.html",
                           sessions_past=sessions_past,
                           sessions_future=sessions_future,
                           form=form,
                           url=url,
                           title=page_title("Sessions"))
Example #3
0
def settings():
    form = SettingsForm()

    if form.validate_on_submit():
        current_user.dateformat = form.dateformat.data
        current_user.editor_height = form.editor_height.data
        current_user.use_direct_links = form.use_direct_links.data
        current_user.use_embedded_images = form.use_embedded_images.data
        current_user.markdown_phb_style = form.markdown_phb_style.data
        current_user.quicklinks = form.quicklinks.data

        flash("Settings changed.", "success")

        db.session.commit()
    elif request.method == "GET":
        form.dateformat.data = current_user.dateformat
        form.editor_height.data = current_user.editor_height
        form.use_direct_links.data = current_user.use_direct_links
        form.use_embedded_images.data = current_user.use_embedded_images
        form.markdown_phb_style.data = current_user.markdown_phb_style
        form.quicklinks.data = current_user.quicklinks

    return render_template("user/settings.html",
                           form=form,
                           title=page_title("User Settings"))
Example #4
0
def moon_edit(id):
    heading = "Edit Moon"
    form = MoonForm()
    form.submit.label.text = "Save Moon"

    moon = Moon.query.filter_by(id=id).first_or_404()

    if form.validate_on_submit():
        moon.name = form.name.data
        moon.description = form.description.data
        moon.phase_length = form.phase_length.data
        moon.phase_offset = form.phase_offset.data
        moon.waxing_color = stretch_color(form.waxing_color.data.hex)
        moon.waning_color = stretch_color(form.waning_color.data.hex)
        db.session.commit()

        flash("Moon edited.", "success")
        return redirect(url_for("calendar.settings"))
    elif request.method == "GET":
        form.name.data = moon.name
        form.description.data = moon.description
        form.phase_length.data = moon.phase_length
        form.phase_offset.data = moon.phase_offset
        form.waxing_color.data = moon.waxing_color
        form.waning_color.data = moon.waning_color

    return render_template("calendar/form.html",
                           item=moon,
                           form=form,
                           heading=heading,
                           title=page_title("Edit Moon '%s'" % moon.name))
Example #5
0
def day_edit(id):
    heading = "Edit Day"
    form = DayForm()
    form.submit.label.text = "Save Day"

    day = Day.query.filter_by(id=id).first_or_404()

    if form.validate_on_submit():
        day.name = form.name.data
        day.abbreviation = form.abbreviation.data
        day.description = form.description.data

        db.session.commit()

        flash("Day edited.", "success")
        return redirect(url_for("calendar.settings"))
    elif request.method == "GET":
        form.name.data = day.name
        form.abbreviation.data = day.abbreviation
        form.description.data = day.description

    return render_template("calendar/form.html",
                           item=day,
                           form=form,
                           heading=heading,
                           title=page_title("Edit Day '%s'" % day.name))
Example #6
0
def create():
    if not current_user.is_admin() and not current_user.is_dm_of_anything():
        flash("You are now allowed to perform this action.", "danger")
        return redirect(request.referrer)

    if not current_user.is_admin() and len(current_user.campaigns) == 1:
        return redirect(
            url_for("session.create_with_campaign",
                    id=current_user.campaigns[0].id))

    if current_user.is_admin() and count_rows(Campaign) == 1:
        campaign = Campaign.query.first()
        return redirect(url_for("session.create_with_campaign",
                                id=campaign.id))

    form = CampaignSelectForm()

    if current_user.is_admin():
        form.campaigns.choices = gen_campaign_choices_admin()
    else:
        form.campaigns.choices = gen_campaign_choices_dm()

    if form.validate_on_submit():
        return redirect(
            url_for("session.create_with_campaign", id=form.campaigns.data))

    return render_template("session/choose_campaign.html",
                           form=form,
                           title=page_title("Choose a Campaign"))
Example #7
0
def login():
    if current_user.is_authenticated:
        return redirect(url_for("index"))

    gset = GeneralSetting.query.get(1)
    if not gset:
        flash("You were redirected to the setup.", "info")
        return redirect(url_for("install"))

    form = LoginForm()

    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()

        if user is None or not user.check_password(form.password.data):
            flash("Invalid username or password", "danger")
            return redirect(request.full_path)
        else:
            login_user(user, remember=form.remember_me.data)
            next_page = request.args.get('next')

            if not next_page or url_parse(next_page).netloc != '':
                next_page = url_for("index")

            return redirect(next_page)

    return render_template("login.html", title=page_title("Login"), form=form)
Example #8
0
def create():
    form = MapForm()
    form.submit.label.text = "Create Map"

    if form.validate_on_submit():
        maps = Map.query.all()

        new_map = Map(name=form.name.data,
                      no_wrap=form.no_wrap.data,
                      external_provider=form.external_provider.data,
                      tiles_path=form.tiles_path.data,
                      min_zoom=form.min_zoom.data,
                      max_zoom=form.max_zoom.data,
                      default_zoom=form.default_zoom.data)

        db.session.add(new_map)

        if not maps:
            mset = MapSetting.query.get(1)
            mset.default_map = new_map.id
            flash(
                "This map was automatically selected as the default map. To change this, please visit the map settings.",
                "info")

        db.session.commit()

        flash("Map created.", "success")
        return redirect(url_for("map.view", id=new_map.id))

    return render_template("map/create.html",
                           form=form,
                           title=page_title("Add Map"))
Example #9
0
def preview():
    cset = CalendarSetting.query.get(1)
    if cset.finalized is True:
        flash("Calendar has already been finalized, preview not possible.",
              "danger")
        return redirect(url_for('calendar.index'))

    status = calendar_sanity_check()

    if status is False:
        flash(
            "There were errors previewing the calendar. See the other messages for more details.",
            "danger")
        return redirect(url_for("calendar.settings"))
    else:
        flash("All checks passed.", "success")

    stats = gen_calendar_preview_data()

    preview_form = EventForm()

    del preview_form.submit
    del preview_form.name
    del preview_form.category
    del preview_form.is_visible
    del preview_form.description

    preview_form.epoch.choices = gen_epoch_choices()
    preview_form.month.choices = gen_month_choices()
    preview_form.day.choices = gen_day_choices(1)

    return render_template("calendar/preview.html",
                           calendar=stats,
                           form=preview_form,
                           title=page_title("Preview Calendar"))
Example #10
0
def node_type_create():
    form = MapNodeTypeCreateForm()

    if form.validate_on_submit():
        filename = map_node_filename(form.icon.data.filename)
        filepath = path.join(app.config["MAPNODES_DIR"], filename)
        form.icon.data.save(filepath)

        icon = Image.open(filepath)
        width, height = icon.size

        new_map_node_type = MapNodeType(name=form.name.data,
                                        description=form.description.data,
                                        icon_file=filename,
                                        icon_width=width,
                                        icon_height=height)

        db.session.add(new_map_node_type)
        db.session.commit()

        flash('"' + form.name.data + '" was successfully created.', "success")
        return redirect(url_for('map.settings'))

    return render_template("map/node_type_create.html",
                           form=form,
                           title=page_title("Create location type"))
Example #11
0
def index():
    mapsettings = MapSetting.query.get(1)
    indexmap = Map.query.get(mapsettings.default_map)

    if not indexmap:
        if current_user.has_admin_role():
            maps = Map.query.all()

            if maps:
                flash(
                    "You need to select a default map to make this link work.",
                    "warning")
                return redirect(url_for("map.settings"))
            else:
                flash(
                    "No map was created yet. You were redirected to the map creation.",
                    "info")
                return redirect(url_for("map.create"))
        flash("The admin has not created a map yet.", "danger")
        return redirect(url_for("index"))

    if indexmap.is_visible == False and not current_user.has_admin_role():
        flash("This map is not visible.", "danger")
        return redirect(url_for("index"))

    return render_template("map/index.html",
                           settings=mapsettings,
                           map_=indexmap,
                           title=page_title(indexmap.name))
Example #12
0
def map_settings(id):
    map_ = Map.query.filter_by(id=id).first_or_404()
    form = MapForm()
    form.submit.label.text = "Save Map"

    if form.validate_on_submit():
        map_.name = form.name.data
        map_.min_zoom = form.min_zoom.data
        map_.max_zoom = form.max_zoom.data
        map_.default_zoom = form.default_zoom.data
        map_.external_provider = form.external_provider.data
        map_.tiles_path = form.tiles_path.data
        map_.no_wrap = form.no_wrap.data
        map_.is_visible = form.is_visible.data

        db.session.commit()
        flash("Map settings have been changed.", "success")
        return redirect(url_for("map.view", id=map_.id))
    else:
        form.name.data = map_.name
        form.no_wrap.data = map_.no_wrap
        form.external_provider.data = map_.external_provider
        form.tiles_path.data = map_.tiles_path
        form.min_zoom.data = map_.min_zoom
        form.max_zoom.data = map_.max_zoom
        form.default_zoom.data = map_.default_zoom
        form.is_visible.data = map_.is_visible

        return render_template("map/edit.html",
                               map=map_,
                               form=form,
                               title=page_title("Edit Map '%s'" % map_.name))
Example #13
0
def epoch_create():
    cset = CalendarSetting.query.get(1)
    if cset.finalized is True:
        flash("The calendar is finalized. You can't add new epochs.", "danger")
        return redirect(url_for('calendar.settings'))

    heading = "Create New Epoch"
    form = EpochForm()
    form.submit.label.text = "Create Epoch"

    if form.validate_on_submit():
        order_num = get_next_epoch_order()

        new_epoch = Epoch(name=form.name.data,
                          abbreviation=form.abbreviation.data,
                          description=form.description.data,
                          years=form.years.data,
                          circa=form.circa.data,
                          order=order_num)

        db.session.add(new_epoch)
        db.session.commit()

        flash("Epoch added.", "success")
        return redirect(url_for("calendar.settings"))

    return render_template("calendar/form.html",
                           form=form,
                           heading=heading,
                           title=page_title("Add Epoch"))
Example #14
0
def moon_create():
    cset = CalendarSetting.query.get(1)
    if cset.finalized is True:
        flash("The calendar is finalized. You can't add new moons.", "danger")
        return redirect(url_for('calendar.settings'))

    heading = "Create New Moon"
    form = MoonForm()
    form.submit.label.text = "Create Moon"

    if form.validate_on_submit():
        new_moon = Moon(name=form.name.data,
                        description=form.description.data,
                        phase_length=form.phase_length.data,
                        phase_offset=form.phase_offset.data,
                        waxing_color=stretch_color(form.waxing_color.data.hex),
                        waning_color=stretch_color(form.waning_color.data.hex))

        db.session.add(new_moon)
        db.session.commit()

        flash("Moon added.", "success")
        return redirect(url_for("calendar.settings"))

    return render_template("calendar/form.html",
                           form=form,
                           heading=heading,
                           title=page_title("Add Moon"))
Example #15
0
def index():
    cset = CalendarSetting.query.get(1)
    calendar = None

    if cset.finalized is True:
        calendar = gen_calendar_stats()
    elif current_user.is_admin():
        flash(
            "The calendar has not been finalized, you have been redirected to the calendar setup.",
            "warning")
        return redirect(url_for('calendar.settings'))

    epochs = get_epochs()
    years = {}

    for e in epochs:
        years[e.id] = get_years_in_epoch(e.id)

    categories = get_event_categories()

    return render_template("calendar/index.html",
                           settings=cset,
                           calendar=calendar,
                           epochs=epochs,
                           years=years,
                           categories=categories,
                           title=page_title("Calendar"))
Example #16
0
def list_category(c_id, c_name=None):
    c = EventCategory.query.filter_by(id=c_id).first_or_404()
    events = get_events_by_category(c_id)
    title = f"All Events in Category {c.name}"

    return render_template("event/list.html", events=events, category_flag=True, heading=title,
                           title=page_title(f"View Events in Category '{c.name}'"))
Example #17
0
def create():
    form = CampaignCreateForm()
    form.dm.choices = gen_dm_choices()
    form.associated_parties.choices = gen_party_choices()
    form.default_participants.choices = gen_participant_choices()

    if form.validate_on_submit():
        associated_parties = Party.query.filter(Party.id.in_(form.associated_parties.data)).all()
        default_members = Character.query.filter(Character.id.in_(form.default_participants.data)).all()

        new_campaign = Campaign(name=form.name.data,
                                dm_id=form.dm.data,
                                description=form.description.data,
                                associated_parties=associated_parties,
                                default_participants=default_members,
                                color=stretch_color(form.color.data.hex))

        success = True
        if form.profile_picture.data:
            success, filename = upload_profile_picture(form.profile_picture.data)

            new_campaign.profile_picture = filename

        if success is False:
            flash("Error while creating campaign.", "error")
        else:
            db.session.add(new_campaign)
            db.session.commit()
            flash("Campaign was created.", "success")
            return redirect(url_for("campaign.index"))

    return render_template("campaign/create.html", form=form, title=page_title("Add Campaign"))
Example #18
0
def list_epoch_year(e_id, year, e_name=None):
    e = Epoch.query.filter_by(id=e_id).first_or_404()
    events = get_events(e_id, year)
    title = f"All events for year {year}, {e.name}"

    return render_template("event/list.html", events=events, epoch_year_flag=True, heading=title,
                           title=page_title(f"View Events in Year {year}, epoch '{e.name}'"))
Example #19
0
def settings():
    settings = EventSetting.query.get(1)
    form = SettingsForm()
    form.default_category.choices = gen_event_category_choices()
    form.default_epoch.choices = gen_epoch_choices()

    if form.validate_on_submit():
        settings.default_visible = form.default_visible.data
        settings.default_category = form.default_category.data
        settings.default_epoch = form.default_epoch.data
        settings.default_year = form.default_year.data

        db.session.commit()

        flash("Event settings have been changed.", "success")
    elif request.method == "GET":
        form.default_visible.data = settings.default_visible
        form.default_category.data = settings.default_category
        form.default_epoch.data = settings.default_epoch
        form.default_year.data = settings.default_year

    categories = EventCategory.query.all()

    return render_template("event/settings.html",
                           settings=settings,
                           categories=categories,
                           form=form,
                           title=page_title("Event Settings"))
Example #20
0
def create():
    form = CreateCharacterForm()

    if form.validate_on_submit():
        char = Character(name=form.name.data,
                         race=form.race.data,
                         class_=form.class_.data,
                         description=form.description.data,
                         private_notes=form.private_notes.data,
                         user_id=current_user.id,
                         is_visible=form.is_visible.data)

        success = True
        if form.profile_picture.data:
            success, filename = upload_profile_picture(
                form.profile_picture.data)
            char.profile_picture = filename

        if success is False:
            flash("Error while creating character.", "error")
        else:
            db.session.add(char)
            db.session.commit()
            flash("Character was created.", "success")
            return redirect(char.view_url())

    return render_template("character/create.html",
                           form=form,
                           title=page_title("Add Character"))
Example #21
0
def edit(username):
    if current_user.has_admin_role() or current_user.username == username:

        if current_user.has_admin_role():
            form = EditProfileFormAdmin()
        else:
            form = EditProfileForm()

        user = User.query.filter_by(username=username).first_or_404()

        if form.validate_on_submit():
            user.about = form.about.data

            if(form.password.data):
                user.set_password(form.password.data)

                if current_user.username == user.username:
                    user.must_change_password = False
                elif current_user.has_admin_role():
                    # user must reset password after it has been changed by an admin
                    user.must_change_password = True

            db.session.commit()
            flash("Your changes have been saved.")

            return redirect(url_for("user.profile", username=username))
        elif request.method == "GET":
            form.about.data = user.about

        return render_template("user/edit.html", form=form, user=user, title=page_title("Edit profile"))
    else:
        flash("You dont have the neccessary role to perform this action.")
        return redirect(url_for("index"))
Example #22
0
def settings():
    form = MapSettingsForm()

    settings = MapSetting.query.get(1)

    form.default_map.choices = gen_submap_choices("disabled",
                                                  ensure=settings.default_map)

    if form.validate_on_submit():
        settings.icon_anchor = form.icon_anchor.data
        settings.default_visible = form.default_visible.data
        settings.check_interval = form.check_interval.data
        settings.default_map = form.default_map.data

        db.session.commit()

        flash("Map settings have been changed.", "success")
    elif request.method == "GET":
        form.icon_anchor.data = settings.icon_anchor
        form.default_visible.data = settings.default_visible
        form.check_interval.data = settings.check_interval
        form.default_map.data = settings.default_map

    node_types = MapNodeType.query.all()

    return render_template("map/settings.html",
                           form=form,
                           settings=settings,
                           node_types=node_types,
                           title=page_title("Map Settings"))
Example #23
0
def day_edit(id, name=None):
    cset = CalendarSetting.query.get(1)
    if cset.finalized is False:
        if current_user.is_moderator():
            return deny_access(
                no_perm_url,
                "A Moderator can only edit the Calendar after it has been finalized."
            )

    heading = "Edit Day"
    form = DayForm()
    form.submit.label.text = "Save Day"

    day = Day.query.filter_by(id=id).first_or_404()

    if form.validate_on_submit():
        day.name = form.name.data
        day.abbreviation = form.abbreviation.data
        day.description = form.description.data

        db.session.commit()

        flash("Day edited.", "success")
        return redirect(url_for("calendar.settings"))
    elif request.method == "GET":
        form.name.data = day.name
        form.abbreviation.data = day.abbreviation
        form.description.data = day.description

    return render_template("calendar/form.html",
                           item=day,
                           form=form,
                           heading=heading,
                           title=page_title("Edit Day '{day.name}'"))
Example #24
0
def day_create():
    cset = CalendarSetting.query.get(1)
    if cset.finalized is True:
        flash("The calendar is finalized. You can't add new days.", "danger")
        return redirect(url_for('calendar.settings'))

    heading = "Create New Day"
    form = DayForm()
    form.submit.label.text = "Create Day"

    if form.validate_on_submit():
        order_num = get_next_day_order()

        new_day = Day(name=form.name.data,
                      abbreviation=form.abbreviation.data,
                      description=form.description.data,
                      order=order_num)

        db.session.add(new_day)
        db.session.commit()

        flash("Day added.", "success")
        return redirect(url_for("calendar.settings"))

    return render_template("calendar/form.html",
                           form=form,
                           heading=heading,
                           title=page_title("Add Day"))
Example #25
0
def list():
    chars = Character.query.all()
    parties = Party.query.all()

    return render_template("character/list.html",
                           chars=chars,
                           parties=parties,
                           title=page_title("Characters and Parties"))
Example #26
0
def list():
    title = "All Events"
    events = get_events()

    return render_template("event/list.html",
                           events=events,
                           heading=title,
                           title=page_title("View All Events"))
Example #27
0
def list():
    chars = Character.get_visible_items(include_hidden_for_user=True)
    parties = Party.query.all()

    return render_template("character/list.html",
                           chars=chars,
                           parties=parties,
                           title=page_title("Characters and Parties"))
Example #28
0
def settings():
    settings = MediaSetting.query.get(1)
    categories = MediaCategory.query.all()

    return render_template("media/settings.html",
                           settings=settings,
                           categories=categories,
                           title=page_title("Media Settings"))
Example #29
0
def edit(username):  # noqa: C901
    user = User.query.filter_by(username=username).first_or_404()

    if not user.is_editable_by_user():
        return deny_access(no_perm_url)

    form = EditProfileForm()

    if current_user.is_admin():
        form.role.choices = gen_role_choices()
    else:
        del form.role

    if form.validate_on_submit():
        user.about = form.about.data

        if (form.password.data):
            user.set_password(form.password.data)

            if current_user.username == user.username:
                user.must_change_password = False
            elif current_user.is_admin():
                # user must reset password after it has been changed by an admin
                user.must_change_password = True

        role_okay = True

        if current_user.is_admin():
            old_role = user.role
            new_role = form.role.data

            if username == current_user.username and current_user.is_admin(
            ) and new_role != Role.Admin.value:
                flash("You can't revoke your own admin role.", "danger")
                role_okay = False
            elif user.id == 1 and new_role != Role.Admin.value:
                flash("The original admin can't be removed.", "danger")
                role_okay = False
            else:
                user.role = new_role

        if role_okay:
            db.session.commit()
            flash("Your changes have been saved.", "success")

            return redirect(user.view_url())
        else:
            form.role.data = old_role
    elif request.method == "GET":
        form.about.data = user.about

        if current_user.is_admin():
            form.role.data = user.role

    return render_template("user/edit.html",
                           form=form,
                           user=user,
                           title=page_title(f"Edit User '{user.username}'"))
Example #30
0
def index():
    if not current_user.is_authenticated:
        return redirect(url_for('login'))

    settings = GeneralSetting.query.get(1)
    return render_template("index.html",
                           settings=settings,
                           version=version(),
                           title=page_title("Home"))