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}'"))
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"))
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"))
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))
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))
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"))
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)
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"))
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"))
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"))
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))
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))
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"))
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"))
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"))
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}'"))
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"))
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}'"))
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"))
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"))
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"))
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"))
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}'"))
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"))
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"))
def list(): title = "All Events" events = get_events() return render_template("event/list.html", events=events, heading=title, title=page_title("View All Events"))
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"))
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"))
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}'"))
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"))