def edit_item(item_name, category_name=None): """Edit the details of the specified item. Args: item_name (str): Name of item to be edited. category_name (str): Optionally, can also specify the category to which the item belongs to. """ if 'username' not in login_session: flash("You need to login to edit any papers.") return redirect('/login') session = connect_to_database() try: item = session.query(Item).filter_by(name=item_name).one() except NoResultFound: flash("Error: The item '%s' does not exist." % item_name) return redirect(url_for('show_homepage')) if login_session['user_id'] != item.user_id: flash("You didn't add this paper, so you can't edit it. Sorry :-(") category = session.query(Category).filter_by(id=item.category_id).one() category_name = category.name item_name = item.name session.close() return redirect(url_for('show_item', category_name=category_name, item_name=item_name)) if request.method == 'POST': if request.form['name'] != item.name: # Enforce rule that item names are unique qry = session.query(Item).filter(Item.name == request.form['name']) already_exists = (session.query(literal(True)).filter(qry.exists()) .scalar()) if already_exists is True: original_category = (session.query(Category) .filter_by(id=item.category_id).one()) flash("Error: There is already a paper with the name '%s'" % request.form['name']) session.close() return redirect(url_for('show_items', category_name=original_category.name)) item.name = request.form['name'] form_category = (session.query(Category) .filter_by(name=request.form['category']).one()) if form_category != item.category: item.category = form_category item.description = request.form['description'] item.quantity = request.form['quantity'] # Process optional item image image_file = request.files['file'] if image_file and allowed_file(image_file.filename): if item.image_filename: delete_image(item.image_filename) filename = secure_filename(image_file.filename) if os.path.isdir(app.config['UPLOAD_FOLDER']) is False: os.mkdir(app.config['UPLOAD_FOLDER']) image_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) item.image_filename = filename item.image_url = None elif ('delete_image' in request.form and request.form['delete_image'] == 'delete'): if item.image_filename: delete_image(item.image_filename) item.image_filename = None if not image_file and request.form['image_url']: item.image_url = request.form['image_url'] if item.image_filename: delete_image(item.image_filename) item.image_filename = None session.add(item) session.commit() flash("Paper successfully edited!") category_name = form_category.name item_name = item.name session.close() return redirect(url_for('show_item', category_name=category_name, item_name=item_name)) else: categories = session.query(Category).all() session.close() return render_template('edit_item.html', categories=categories, item=item)
def edit_item(item_name, category_name=None): """Edit the details of the specified item. Args: item_name (str): Name of item to be edited. category_name (str): Optionally, can also specify the category to which the item belongs to. """ if 'username' not in login_session: flash("You need to login to edit any Courses.") return redirect('/login') session = connect_to_database() try: item = session.query(Item).filter_by(name=item_name).one() except NoResultFound: flash("Error: The item '%s' does not exist." % item_name) return redirect(url_for('show_homepage')) if login_session['user_id'] != item.user_id: flash("You didn't add this Course, so you can't edit it. Sorry :-(") category = session.query(Category).filter_by(id=item.category_id).one() category_name = category.name item_name = item.name session.close() return redirect( url_for('show_item', category_name=category_name, item_name=item_name)) if request.method == 'POST': if request.form['name'] != item.name: # Enforce rule that item names are unique qry = session.query(Item).filter(Item.name == request.form['name']) already_exists = (session.query(literal(True)).filter( qry.exists()).scalar()) if already_exists is True: original_category = (session.query(Category).filter_by( id=item.category_id).one()) flash("Error: There is already an Course with the name '%s'" % request.form['name']) session.close() return redirect( url_for('show_items', category_name=original_category.name)) item.name = request.form['name'] form_category = (session.query(Category).filter_by( name=request.form['category']).one()) if form_category != item.category: item.category = form_category item.description = request.form['description'] item.duration = request.form['duration'] # Process optional item image image_file = request.files['file'] if image_file and allowed_file(image_file.filename): if item.image_filename: delete_image(item.image_filename) filename = secure_filename(image_file.filename) if os.path.isdir(app.config['UPLOAD_FOLDER']) is False: os.mkdir(app.config['UPLOAD_FOLDER']) image_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) item.image_filename = filename item.image_url = None elif ('delete_image' in request.form and request.form['delete_image'] == 'delete'): if item.image_filename: delete_image(item.image_filename) item.image_filename = None if not image_file and request.form['image_url']: item.image_url = request.form['image_url'] if item.image_filename: delete_image(item.image_filename) item.image_filename = None session.add(item) session.commit() flash("Course successfully edited!") category_name = form_category.name item_name = item.name session.close() return redirect( url_for('show_item', category_name=category_name, item_name=item_name)) else: categories = session.query(Category).all() session.close() return render_template('edit_item.html', categories=categories, item=item)
def create_item(): """Allow users to create a new item in the catalog.""" if 'username' not in login_session: return redirect('/login') session = connect_to_database() if request.method == 'POST': if not request.form['name']: flash("New paper not created: No name provided.") return redirect(url_for('show_homepage')) if request.form['name'] == "items": # Can't have an item called "items" as this is a route. flash("Error: Can't have a paper called 'items'.") return redirect(url_for('show_homepage')) # Enforce rule that item names are unique qry = session.query(Item).filter(Item.name == request.form['name']) already_exists = (session.query(literal(True)). filter(qry.exists()).scalar()) if already_exists is True: flash("Error: There is already a paper with the name '%s'" % request.form['name']) session.close() return redirect(url_for('show_homepage')) category = (session.query(Category) .filter_by(name=request.form['category']).one()) new_item = Item(category=category, name=request.form['name'], description=request.form['description'], quantity=request.form['quantity'], user_id=login_session['user_id']) # Process optional item image image_file = request.files['file'] if image_file and allowed_file(image_file.filename): filename = secure_filename(image_file.filename) if os.path.isdir(app.config['UPLOAD_FOLDER']) is False: os.mkdir(app.config['UPLOAD_FOLDER']) image_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) new_item.image_filename = filename elif request.form['image_url']: new_item.image_url = request.form['image_url'] session.add(new_item) session.commit() flash("New paper successfully added!") category_name = category.name item_name = new_item.name session.close() return redirect(url_for('show_item', category_name=category_name, item_name=item_name)) else: categories = session.query(Category).all() # See, if any, which category page new item was click on. ref_category = None if request.referrer and 'catalog' in request.referrer: ref_url_elements = request.referrer.split('/') if len(ref_url_elements) > 5: ref_category = ref_url_elements[4] session.close() return render_template('new_item.html', categories=categories, ref_category=ref_category)
def create_item(): """Allow users to create a new item in the catalog.""" if 'username' not in login_session: return redirect('/login') session = connect_to_database() if request.method == 'POST': if not request.form['name']: flash("New Course not created: No name provided.") return redirect(url_for('show_homepage')) if request.form['name'] == "items": # Can't have an item called "items" as this is a route. flash("Error: Can't have an Course called 'items'.") return redirect(url_for('show_homepage')) # Enforce rule that item names are unique qry = session.query(Item).filter(Item.name == request.form['name']) already_exists = (session.query(literal(True)).filter( qry.exists()).scalar()) if already_exists is True: flash("Error: There is already an Course with the name '%s'" % request.form['name']) session.close() return redirect(url_for('show_homepage')) category = (session.query(Category).filter_by( name=request.form['category']).one()) new_item = Item(category=category, name=request.form['name'], description=request.form['description'], duration=request.form['duration'], link=request.form['link'], level=request.form['level'], user_id=login_session['user_id']) # Process optional item image image_file = request.files['file'] if image_file and allowed_file(image_file.filename): filename = secure_filename(image_file.filename) if os.path.isdir(app.config['UPLOAD_FOLDER']) is False: os.mkdir(app.config['UPLOAD_FOLDER']) image_file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) new_item.image_filename = filename elif request.form['image_url']: new_item.image_url = request.form['image_url'] session.add(new_item) session.commit() flash("New Course successfully created!") category_name = category.name item_name = new_item.name session.close() return redirect( url_for('show_item', category_name=category_name, item_name=item_name)) else: categories = session.query(Category).all() # See, if any, which category page new item was click on. ref_category = None if request.referrer and 'catalog' in request.referrer: ref_url_elements = request.referrer.split('/') if len(ref_url_elements) > 5: ref_category = ref_url_elements[4] session.close() return render_template('new_item.html', categories=categories, ref_category=ref_category)