def deleteelement(mfw_id, menu_id): """page to delete a menu item.""" if 'access_token' not in flask_session: return logInRedirect() mfw = session.query(MFW).filter_by(id = mfw_id).first() user_id = getUserId(flask_session['email'],flask_session['google_plus_id']) if not mfw.user_id == user_id: flash("Only MFW owners can delete items.") return redirect(url_for("publicMenu",mfw_id = mfw_id)) if request.method == "POST": print "\ndeleteelement POST triggered!, menu_id is: ", menu_id deletedelement = session.query(element).filter_by(id = menu_id).first() session.delete(deletedelement) session.commit() flash( "item '" + deletedelement.name + "' deleted. Auf Wiedersehen!") return redirect(url_for("showMenu", mfw_id=mfw_id)) else: print "MFWs/delete accessed..." element = session.query(element).filter_by(id = menu_id).first() return render_template( 'deleteelement.html', element = element, mfw = mfw )
def editelement(mfw_id, menu_id): """page to edit a menu item.""" if 'access_token' not in flask_session: return logInRedirect() mfw = session.query(MFW).filter_by(id = mfw_id).first() user_id = getUserId(flask_session['email'],flask_session['google_plus_id']) if not mfw.user_id == user_id: return redirect(url_for("publicMenu",mfw_id = mfw_id)) flash("Only MFW owners can edit items.") if request.method == "POST": edited_name = request.form['edited_name'] print "\neditelement POST triggered, name is: ", edited_name old_name = session.query(element).filter_by(id = menu_id).first().name result = session.execute(""" UPDATE menu_item SET name=:edited_name WHERE id=:edited_menu_item_id; """, { "edited_name": edited_name, "edited_menu_item_id": menu_id} ) session.commit() flash( "item '" + old_name + "' edited to '" + edited_name + "'. Jawohl!") return redirect(url_for("showMenu", mfw_id=mfw_id)) else: element = session.query(element).filter_by(id = menu_id).first() return render_template('editelement.html', mfw = mfw, element = element )
def category_edit(category_id): """page to edit a MFW. Authorized only for users (intentionally not limited only to creators).""" if 'access_token' not in flask_session: return logInRedirect() category = session.query(Category).filter_by(id = category_id).first() if request.method == "POST": edited_name = request.form['edited_name'] edited_description = request.form['edited_description'] print "\ncategory_edit POST triggered, name is: ", edited_name old_name = session.query(Category).filter_by(id = category_id).first().name result = session.execute(""" UPDATE category SET name=:edited_name, description=:edited_description WHERE id=:category_id; """, { "edited_name": edited_name, "edited_description": edited_description, "category_id": category_id } ) session.commit() flash( "Category '" + old_name + "' edited to '" + edited_name + "'. Jawohl!") return redirect( url_for("category_view", category_id=category_id) ) else: if not category.description: category.description = "" return render_template( 'category_edit.html', category = category )
def publicMenu(mfw_id): """ displays all menu items for a MFW id, read-only.""" mfw = session.query(mfw).filter_by(id = mfw_id).first() elements = session.query(element).filter_by(mfw_id = mfw_id) creator = getUserInfo(mfw.user_id) return render_template( 'publicMenu.html', elements = elements, mfw = mfw, creator= creator )
def parse_categories(mfw, category_names): """ * parse 'categories' form field by proper splitting and stripping. * checks if each category already exists. * if it doesn not exist, create new category in session. * append category to mfw. """ user_id = getUserId(flask_session['email'], flask_session['google_plus_id']) category_names = str(category_names).split(",") for category_name in category_names: category_name = category_name.strip() if not ((category_name == None) or (category_name == "")): existing_category = session.query(Category).\ filter_by(name = category_name).\ first() try: if existing_category: mfw.categories.append(existing_category) else: new_category = Category(name=category_name, creator_id=user_id) mfw.categories.append(new_category) except: mfw.categories.append(existing_category) return mfw
def category_view(category_id): """view the MFWs in a category""" category = session.query(Category).filter_by(id = category_id).first() if not category.description: category.description = "" return render_template( 'category_view.html', category=category, mfws=category.mfws )
def showMenu(mfw_id): """ displays all menu items for a MFW id, with all CRUD options.""" if 'access_token' not in flask_session: return logInRedirect() mfw = session.query(mfw).filter_by(id = mfw_id).first() user_id = getUserId(flask_session['email'],flask_session['google_plus_id']) if not mfw.user_id == user_id: return redirect( url_for("publicMenu",mfw_id = mfw_id) ) elements = session.query(element).filter_by(mfw_id = mfw_id) creator = getUserInfo(mfw.user_id) return render_template( 'showMenu.html', mfw = mfw, elements = elements, creator = creator )
def createUser(flask_session): newUser = User( name = flask_session['username'], picture = flask_session['picture'], link = flask_session['link'], email = flask_session['email'], google_plus_id = flask_session['google_plus_id'] ) session.add(newUser) session.commit() user = session.query(User).filter_by(google_plus_id = flask_session['google_plus_id']).one() return user.id
def createUser(flask_session): newUser = User(name=flask_session['username'], picture=flask_session['picture'], link=flask_session['link'], email=flask_session['email'], google_plus_id=flask_session['google_plus_id']) session.add(newUser) session.commit() user = session.query(User).filter_by( google_plus_id=flask_session['google_plus_id']).one() return user.id
def mfw_create(category_name=""): """page to create a new Mental Framework.""" #guard clauses: if 'access_token' not in flask_session: return logInRedirect() user_id = getUserId(flask_session['email'], flask_session['google_plus_id']) #form initialization mfwForm = MFWForm(request.form) if request.method == "POST": #and mfwForm.validate(): mfw = MFW() mfwForm.populate_obj(mfw) mfw.creator_id = user_id duplicate_mfw = session.query(MFW).\ filter_by(name = mfw.name).\ first() if duplicate_mfw: flash("The name " + mfw.name + " already exists.") return redirect(url_for("mfw_create", form=mfwForm)) try: uploaded_image = upload_image(request.files['image_file']) except: uploaded_image = False if uploaded_image: mfw.image_url = uploaded_image mfw = parse_categories(mfw, request.form['category']) session.add(mfw) session.commit() # add elements to mfw object from numbered element form fields i = 0 while i < 20: try: element = Element(letter=request.form['element' + str(i) + '-letter'], description=request.form['element' + str(i) + '-description'], order=i, mfw_id=mfw.id) session.add(element) i = i + 1 except: break session.commit() flash("new MFW '" + mfw.name + "' created!") print "\nmfw POST triggered, name is: ", mfw.name return redirect(url_for("mfw_browse")) else: return render_template('mfw_create.html', mfwForm=mfwForm, category_name=category_name)
def category_delete(category_id): """page to delete a category (authorized only for creators).""" if 'access_token' not in flask_session: return logInRedirect() category = session.query(Category).filter_by(id = category_id).first() user_id = getUserId(flask_session['email'],flask_session['google_plus_id']) if not category.creator_id == user_id: flash("Only Category creators can delete Categories.") return redirect(url_for("category_view", category_id = category_id)) if request.method == "POST": print "\ncategory_delete POST triggered!" deletedCategory = session.query(Category).filter_by(id = category_id).first() session.delete(deletedCategory) session.commit() flash( "item '" + deletedCategory.name + "' deleted. Auf Wiedersehen!") return redirect(url_for("category_browse")) else: print "categories/id/delete accessed..." return render_template( "category_delete.html", category = category )
def mfw_delete(mfw_id): """page to delete a MFW (authorized only for creators).""" # guard clauses: if 'access_token' not in flask_session: return logInRedirect() mfw = session.query(MFW).filter_by(id=mfw_id).first() user_id = getUserId(flask_session['email'], flask_session['google_plus_id']) if not mfw.creator_id == user_id: flash("Only MFW owners can delete MFWs.") return redirect(url_for("mfw_view", mfw_id=mfw_id)) if request.method == "POST": print "\nmfw_delete POST triggered!" session.delete(mfw) session.commit() flash("item '" + mfw.name + "' deleted. Auf Wiedersehen!") return redirect(url_for("mfw_browse")) else: print "/id/delete accessed..." return render_template("mfw_delete.html", mfw=mfw)
def newElement(mfw_id): """page to create a new menu item.""" if 'access_token' not in flask_session: return logInRedirect() mfw = session.query(MFW).filter_by(id = mfw_id).first() user_id = getUserId(flask_session['email'],flask_session['google_plus_id']) if not mfw.user_id == user_id: flash("Only MFW owners can add new items.") return redirect(url_for("publicMenu",mfw_id = mfw_id)) if request.method == "POST": mfw_name = request.form['mfw_name'] print "\nnewElement POST triggered, name is: ", mfw_name newElement = element( name=mfw_name, mfw_id=mfw.id ) session.add(newElement) session.commit() flash( "new item '" + mfw_name + "' created!") print "POST worked!" return redirect(url_for("showMenu", mfw_id=mfw.id)) else: return render_template('newElement.html', mfw = mfw )
def mfw_json(mfw_id): mfw = session.query(MFW).filter_by(id = mfw_id).one() elements = mfw.elements return jsonify(mfw = mfw.serialize, elements = [element.serialize for element in elements])
def getUserIdFromGooglePlusID(google_plus_id): user= session.query(User).filter_by(google_plus_id = google_plus_id).one() return user.id
def category_json(category_id): category = session.query(Category).filter_by(id = category_id).one() mfws = category.mfws return jsonify(category = category.serialize, mfws = [mfw.serialize for mfw in category.mfws])
def getUserInfo(user_id): user = session.query(User).filter_by(id = user_id).one() return user
def getUserIdFromEmail(email): user = session.query(User).filter_by(email = email).one() return user.id
def mfw_view(mfw_id): """view the full details of a MFW""" mfw = session.query(MFW).filter_by(id=mfw_id).first() return render_template('mfw_view.html', mfw=mfw, elements=mfw.elements)
def getUserIdFromEmail(email): user = session.query(User).filter_by(email=email).one() return user.id
def mfw_browse(): """tile styled page to display and browse MFWs""" mfws = session.query(MFW).all() return render_template('mfw_browse.html', mfws=mfws)
def getUserIdFromGooglePlusID(google_plus_id): user = session.query(User).filter_by(google_plus_id=google_plus_id).one() return user.id
def category_browse(): """tile styled page to display and browse categories""" categories = session.query(Category).all() return render_template( 'category_browse.html', categories = categories )
def category_json(category_id): category = session.query(Category).filter_by(id=category_id).one() mfws = category.mfws return jsonify(category=category.serialize, mfws=[mfw.serialize for mfw in category.mfws])
def mfw_json(mfw_id): mfw = session.query(MFW).filter_by(id=mfw_id).one() elements = mfw.elements return jsonify(mfw=mfw.serialize, elements=[element.serialize for element in elements])
def mfw_edit(mfw_id): """page to edit a MFW. (authorized only for creators)""" # guard clauses: if 'access_token' not in flask_session: return logInRedirect() mfw = session.query(MFW).filter_by(id=mfw_id).first() user_id = getUserId(flask_session['email'], flask_session['google_plus_id']) if not mfw.creator_id == user_id: return redirect(url_for("mfw_view", mfw_id=mfw_id)) flash("Only the creator of a MFW can edit items.") # form initialization mfwForm = MFWForm(request.form, mfw) elementForms = [] for element in mfw.elements: elementForm = ElementForm(None, element) elementForms.append(elementForm) if request.method == "POST": print "\nmfw_edit POST triggered, name is: ", mfwForm.name.data old_name = mfw.name mfwForm.populate_obj(mfw) # populate elements of the mfw object from numbered element form fields i = 0 while i < 20: try: elementForm = ElementForm( id=int(request.form['element' + str(i) + '-id']), letter=request.form['element' + str(i) + '-letter'], description=request.form['element' + str(i) + '-description'], order=i) elementForm.populate_obj(mfw.elements[i]) i = i + 1 except: break try: edited_image_file = upload_image( request.files['edited_image_file']) except: edited_image_file = False if edited_image_file: mfw.image_url = edited_image_file mfw = parse_categories(mfw, request.form['edited_categories']) session.add(mfw) session.commit() flash("item '" + old_name + "' edited to '" + mfw.name + "'. Jawohl!") return redirect(url_for("mfw_view", mfw_id=mfw_id)) else: # prep 'categories' field and serve page category_names = "" for category in mfw.categories: if category_names == "": category_names = category.name category_names = category_names + ", " + category.name return render_template('mfw_edit.html', mfwForm=mfwForm, elementForms=elementForms, category_names=category_names)
def getUserInfo(user_id): user = session.query(User).filter_by(id=user_id).one() return user