Esempio n. 1
0
def cuisineJSON(cuisine_id):
    '''JSON endpoint for a single cuisine

    Includes all restaurants with that cuisine, all base menu items
    for that cuisine, and all restaurant menu items based on that cuisine
    '''
    cuisine = DataManager.getCuisine(cuisine_id=cuisine_id)
    baseMenuItems = DataManager.getBaseMenuItems(cuisine_id=cuisine_id)
    restaurants = DataManager.getRestaurants(cuisine_id=cuisine_id)
    restaurantMenuItems = DataManager.\
                          getRestaurantMenuItems(cuisine_id=cuisine_id)

    return jsonify(Cuisine=cuisine.serialize,
                   BaseMenuItems=[i.serialize for i in baseMenuItems],
                   Restaurants=[i.serialize for i in restaurants],
                   RestaurantMenuItems=\
                    [i.serialize for i in restaurantMenuItems])
Esempio n. 2
0
def cuisineJSON(cuisine_id):
    '''JSON endpoint for a single cuisine

    Includes all restaurants with that cuisine, all base menu items
    for that cuisine, and all restaurant menu items based on that cuisine
    '''
    cuisine = DataManager.getCuisine(cuisine_id=cuisine_id)
    baseMenuItems = DataManager.getBaseMenuItems(cuisine_id=cuisine_id)
    restaurants = DataManager.getRestaurants(cuisine_id=cuisine_id)
    restaurantMenuItems = DataManager.\
                          getRestaurantMenuItems(cuisine_id=cuisine_id)

    return jsonify(Cuisine=cuisine.serialize,
                   BaseMenuItems=[i.serialize for i in baseMenuItems],
                   Restaurants=[i.serialize for i in restaurants],
                   RestaurantMenuItems=\
                    [i.serialize for i in restaurantMenuItems])
Esempio n. 3
0
def addRestaurantMenuItem(restaurant_id):
    '''Serve form to add a restaurant menu item to a restaurant's menu
    '''
    restaurant = DataManager.getRestaurant(restaurant_id)

    if restaurant.user_id != login_session['user_id']:

        flash("You do not have permission to add an item to "+\
            " this restaurant's menu")
        return redirect(url_for('restaurantMenu', restaurant_id=restaurant.id))

    client_login_session = getClientLoginSession()

    baseMenuItems = DataManager.getBaseMenuItems()

    for item in baseMenuItems:
        pic = DataManager.getPicture(item.picture_id)
        item.picText = pic.text
        item.picServeType = pic.serve_type

    menuSections = DataManager.getMenuSections()

    # display nicely
    for item in baseMenuItems:
        item.price = Decimal(item.price).quantize(Decimal('0.01'))

    if request.method == 'POST':

        if isCSRFAttack(request.form['hiddenToken']):
            return redirect(url_for('restaurantManagerIndex'))

        validBaseMenuItemIDs = {}
        for item in baseMenuItems:
            validBaseMenuItemIDs[str(item.id)] = True

        baseMenuItem_id = validateUserInput(request.form['baseMenuItemID'],
                                            'baseMenuItem_id',
                                            'create',
                                            'restaurant menu item',
                                            columnNameForMsg='base menu item',
                                            validInputs=validBaseMenuItemIDs,
                                            required=True)

        if baseMenuItem_id is None:
            return redirect(
                url_for('restaurantMenu', restaurant_id=restaurant_id))

        baseMenuItem = DataManager.\
            getBaseMenuItem(baseMenuItem_id=baseMenuItem_id)

        # if a field is provided, use it, else use the base menu item's attr
        if request.form['name']:

            name = validateUserInput(request.form['name'],
                                     'name',
                                     'create',
                                     'restaurant menu item',
                                     maxlength=80,
                                     required=True)

            if name is None:
                return redirect(
                    url_for('restaurantMenu', restaurant_id=restaurant_id))
        else:

            name = baseMenuItem.name

        if request.form['description']:

            description = validateUserInput(request.form['description'],
                                            'description',
                                            'create',
                                            'restaurant menu item',
                                            maxlength=250,
                                            required=True)

            if description is None:
                return redirect(
                    url_for('restaurantMenu', restaurant_id=restaurant_id))
        else:

            description = baseMenuItem.description

        if request.form['price']:

            price = validateUserInput(request.form['price'],
                                      'price',
                                      'create',
                                      'restaurant menu item',
                                      maxlength=20,
                                      required=True,
                                      priceFormat=True)

            if price is None:
                return redirect(
                    url_for('restaurantMenu', restaurant_id=restaurant_id))
        else:

            price = baseMenuItem.price

        if request.files['pictureFile'] or request.form['pictureLink']:

            providedPic = validateUserPicture(
                'create',
                'restaurant menu item',
                file=request.files['pictureFile'],
                link=request.form['pictureLink'],
                maxlength=300,
                required=True)

            if providedPic is None:
                return redirect(
                    url_for('restaurantMenu', restaurant_id=restaurant_id))
            else:

                picture_id = DataManager.\
                    addPicture(text=providedPic['text'],
                        serve_type=providedPic['serve_type'])
        else:

            picture_id = baseMenuItem.picture_id

        validMenuSectionIDs = {}
        for menuSection in menuSections:
            validMenuSectionIDs[str(menuSection.id)] = True

        # if this is somehow None,
        # the add function defaults to base item's attr
        menuSection_id = validateUserInput(request.form['menuSectionID'],
                                           'menuSection_id',
                                           'create',
                                           'restaurant menu item',
                                           columnNameForMsg='menu section',
                                           validInputs=validMenuSectionIDs,
                                           required=True)

        restaurantMenuItem_id = DataManager.\
            addRestaurantMenuItem(name=name, restaurant_id=restaurant_id,
            description=description, price=price,
            baseMenuItem_id=baseMenuItem_id, picture_id=picture_id,
            menuSection_id=menuSection_id)

        # if pic was uploaded, now that we know item id,
        # save actual file for serving and set the name in the database
        if (request.files['pictureFile']
                and providedPic['serve_type'] == 'upload'):

            picfilename = 'restaurantMenuItem' + str(restaurantMenuItem_id)
            request.files['pictureFile'].save(os.path.\
                join(app.config['UPLOAD_FOLDER'], picfilename))
            DataManager.editPicture(picture_id=picture_id, newText=picfilename)

        flash("menu item '" + name + "' added to the menu!")

        return redirect(url_for('restaurantMenu', restaurant_id=restaurant_id))
    else:

        return render_template('AddRestaurantMenuItem.html',
                               restaurant=restaurant,
                               baseMenuItems=baseMenuItems,
                               menuSections=menuSections,
                               hiddenToken=login_session['state'],
                               client_login_session=client_login_session)
Esempio n. 4
0
def baseMenuItemsJSON():
    '''JSON endpoint for all base menu items
    '''
    baseMenuItems = DataManager.getBaseMenuItems()

    return jsonify(BaseMenuItems=[i.serialize for i in baseMenuItems])
Esempio n. 5
0
def addRestaurantMenuItem(restaurant_id):
    '''Serve form to add a restaurant menu item to a restaurant's menu
    '''
    restaurant = DataManager.getRestaurant(restaurant_id)

    if restaurant.user_id != login_session['user_id']:

        flash("You do not have permission to add an item to "+\
            " this restaurant's menu")
        return redirect(url_for('restaurantMenu',
            restaurant_id=restaurant.id))  
    
    client_login_session = getClientLoginSession()

    baseMenuItems = DataManager.getBaseMenuItems()

    for item in baseMenuItems:
        pic = DataManager.getPicture(item.picture_id)
        item.picText = pic.text
        item.picServeType = pic.serve_type

    menuSections = DataManager.getMenuSections()

    # display nicely
    for item in baseMenuItems:
        item.price = Decimal(item.price).quantize(Decimal('0.01'))

    if request.method == 'POST':

        if isCSRFAttack(request.form['hiddenToken']):
            return redirect(url_for('restaurantManagerIndex'))

        validBaseMenuItemIDs = {}
        for item in baseMenuItems:
            validBaseMenuItemIDs[str(item.id)] = True

        baseMenuItem_id = validateUserInput(request.form['baseMenuItemID'],
            'baseMenuItem_id', 'create', 'restaurant menu item',
            columnNameForMsg='base menu item',
            validInputs=validBaseMenuItemIDs, required=True)

        if baseMenuItem_id is None:
            return redirect(url_for('restaurantMenu', 
                restaurant_id=restaurant_id))

        baseMenuItem = DataManager.\
            getBaseMenuItem(baseMenuItem_id=baseMenuItem_id)

        # if a field is provided, use it, else use the base menu item's attr
        if request.form['name']:

            name = validateUserInput(request.form['name'], 'name', 'create',
                'restaurant menu item', maxlength=80, required=True)
            
            if name is None:
                return redirect(url_for('restaurantMenu', 
                    restaurant_id=restaurant_id))   
        else:

            name = baseMenuItem.name

        if request.form['description']:
        
            description = validateUserInput(request.form['description'],
                'description', 'create', 'restaurant menu item',
                maxlength=250, required=True)

            if description is None:
                return redirect(url_for('restaurantMenu', 
                    restaurant_id=restaurant_id))   
        else:

            description = baseMenuItem.description

        if request.form['price']:

            price = validateUserInput(request.form['price'], 'price', 
                'create', 'restaurant menu item', maxlength=20, 
                required=True, priceFormat=True)

            if price is None:
                return redirect(url_for('restaurantMenu', 
                    restaurant_id=restaurant_id))  
        else:

            price = baseMenuItem.price 

        if request.files['pictureFile'] or request.form['pictureLink']:
        
            providedPic = validateUserPicture('create', 'restaurant menu item',
                file=request.files['pictureFile'],
                link=request.form['pictureLink'],
                maxlength=300, required=True)

            if providedPic is None:
                return redirect(url_for('restaurantMenu', 
                    restaurant_id=restaurant_id))  
            else:           

                picture_id = DataManager.\
                    addPicture(text=providedPic['text'], 
                        serve_type=providedPic['serve_type'])
        else:

            picture_id = baseMenuItem.picture_id

        validMenuSectionIDs = {}
        for menuSection in menuSections:
            validMenuSectionIDs[str(menuSection.id)] = True

        # if this is somehow None, 
        # the add function defaults to base item's attr
        menuSection_id = validateUserInput(request.form['menuSectionID'],
            'menuSection_id', 'create', 'restaurant menu item',
            columnNameForMsg='menu section',
            validInputs=validMenuSectionIDs, required=True)

        restaurantMenuItem_id = DataManager.\
            addRestaurantMenuItem(name=name, restaurant_id=restaurant_id,
            description=description, price=price,
            baseMenuItem_id=baseMenuItem_id, picture_id=picture_id,
            menuSection_id=menuSection_id)

        # if pic was uploaded, now that we know item id, 
        # save actual file for serving and set the name in the database
        if (request.files['pictureFile'] and
            providedPic['serve_type'] == 'upload'):

            picfilename = 'restaurantMenuItem' + str(restaurantMenuItem_id)
            request.files['pictureFile'].save(os.path.\
                join(app.config['UPLOAD_FOLDER'], picfilename))
            DataManager.editPicture(picture_id=picture_id,
                                          newText=picfilename)

        flash("menu item '" + name + "' added to the menu!")

        return redirect(url_for('restaurantMenu',
                                restaurant_id=restaurant_id))
    else:

        return render_template('AddRestaurantMenuItem.html',
                               restaurant=restaurant,
                               baseMenuItems=baseMenuItems,
                               menuSections=menuSections,
                               hiddenToken=login_session['state'],
                               client_login_session=client_login_session)
Esempio n. 6
0
def baseMenuItemsJSON():
    '''JSON endpoint for all base menu items
    '''
    baseMenuItems = DataManager.getBaseMenuItems()

    return jsonify(BaseMenuItems=[i.serialize for i in baseMenuItems])