def main(): if request.method == 'POST': return "error" else: blogCreated = False link = "" currentUser = request.cookies.get('userId', "") if currentUser == "": link = "signup" else: db = database() queryBuilder = query("blog") queryString = queryBuilder.selectAllFilter( "username='******'".format(username=currentUser)) result = db.execute(False, queryString) db.disconnect() if result == []: link = "createBlog" else: for row in result: link = "blogView?blogName={blogName}".format( blogName=row[1]) blogCreated = True viewObject = Main() return viewObject.html.format( createEditText="EDIT" if blogCreated else "CREATE", createEditLink=link)
def uploadReaction(): global blogUrlName if request.method == 'POST': requestData = request.get_json() db = database() queryBuilder = query("reactions") #need to check if user has reacted to that element before; if so, update instead of insert queryString = queryBuilder.selectCountFilter( "blogName='{blogName}' and attachedToId='{id}' and username='******'" .format(blogName=blogUrlName, id=requestData.get("attachedToId"), currentUser=request.cookies.get('userId'))) result = db.execute(False, queryString) if result[0][0] == 0: queryString = queryBuilder.insertRow( "'{blogName}', '{attachedToId}', '{currentUser}', '{emote}'". format(blogName=blogUrlName, attachedToId=requestData.get("attachedToId"), currentUser=request.cookies.get('userId'), emote=requestData.get("emote"))) else: queryString = queryBuilder.update( "emote='{emote}'".format(emote=requestData.get("emote")), "blogName='{blogName}' and attachedToId='{id}' and username='******'" .format(blogName=blogUrlName, id=requestData.get("attachedToId"), currentUser=request.cookies.get('userId'))) db.execute(True, queryString) db.disconnect() return str(requestData) else: db.disconnect() return "error"
def login(): if request.method == 'POST': #if not successful, append error message to page db = database() queryString = db.buildQuery( "users", "selectAllFilter", "email='{email}' and pwd='{password}'".format( email=request.form.get("email"), password=request.form.get("pwd"))) result = db.execute(False, queryString) if result == []: errorMessage = """ <p style="color: red; font-size: 15px; margin: auto;">The email or password was incorrect</p></br>""" loginHTML = Login() db.disconnect() loginHTML.setHTML(errorMessage) return loginHTML.getHTML() else: redirectTo = redirect('/') resp = make_response(redirectTo) resp.set_cookie('userId', result[0][0]) db.disconnect() return resp else: loginHTML = Login() loginHTML.setHTML("") return loginHTML.getHTML()
def displayCurrentInfo(self): db = database() queryString = db.buildQuery("blog", "selectAllFilter", "blogName='{blogName}'".format(blogName=self.blogName)) result = db.execute(False, queryString) if result == []: db.disconnect() return "error" else: for row in result: queryString = db.buildQuery("comments", "selectCountFilter", "blogName='{blog}'".format(blog=self.blogName)) numComments = db.execute(False, queryString) queryString = db.buildQuery("comments", "selectCountDistinctFilter", "username", "blogName='{blog}'".format(blog=self.blogName)) distinctNumComments = db.execute(False, queryString) queryString = db.buildQuery("reactions", "selectCountFilter", "blogName='{blog}'".format(blog=self.blogName)) numReactions = db.execute(False, queryString) db.disconnect() return """ <div id="currentBlog" style="font-weight:bold; margin-left: 30px;"> </br> <label>Blog Name: {blogName}</label></br> <label>Owner: {owner}</label></br> <label>Number of Comments: {numComments}</label></br> <label>Number of Users Commented: {numCommenters}</label></br> <label>Number of Reactions: {numReactions}</label></br> </div> """.format(blogName=row[1], owner=row[0], numComments=numComments[0][0], numCommenters=distinctNumComments[0][0], numReactions=numReactions[0][0])
def buildBlogContent(): db = database() content = "" content += buildElement(db, "posts") content += buildElement(db, "images") content += buildElement(db, "videos") db.disconnect() return content
def displayBlogs(self): results = "" db = database() queryString = db.buildQuery("blog", "selectAll") result = db.execute(False, queryString) for row in result: results += self.createElement(row) return """ <ul class="list-group" style="width: 800px; margin: auto;"> <input type="text" id="search" placeholder="Search by blog name and hit enter"> {blogs} </ul> """.format(blogs=results)
def signup(): if request.method == 'POST': db = database() queryString = db.buildQuery( "users", "insertRow", "'{username}', '{email}', '{password}', null".format( username=str(request.form.get("username")), email=str(request.form.get("email")), password=str(request.form.get("pwd")))) db.execute(True, queryString) db.disconnect() return redirect('/login') else: signupHTML = SignUp() signupHTML.setHTML() return signupHTML.getHTML()
def createBlog(): if request.method == 'POST': requestData = request.get_json() db = database() queryString = db.buildQuery( "blog", "insertRow", "'{username}', '{blogName}', '{imageSource}', '{description}', 'rgb(255, 255, 255)', 'arial'" .format(username=request.cookies.get('userId'), blogName=requestData.get("blogName"), imageSource=requestData.get("imageSource"), description=requestData.get("description"))) db.execute(True, queryString) db.disconnect() return str(requestData) else: form = CreateBlog() return form.getHtml()
def buildBlogSpecs(): global blogUrlName global blogColor global blogFont db = database() queryBuilder = query("blog") queryString = queryBuilder.selectAllFilter( "blogName='{blogName}'".format(blogName=blogUrlName)) result = db.execute(False, queryString) db.disconnect() if result == []: blogColor = "rgb(255, 255, 255)" blogFont = "arial" else: for row in result: blogColor = row[4] blogFont = row[5].replace('"', '')
def uploadComment(): global blogUrlName if request.method == 'POST': requestData = request.get_json() db = database() queryBuilder = query("comments") queryString = queryBuilder.insertRow( "'{blogName}', '{attachedToId}', '{currentUser}', '{comment}'". format(blogName=blogUrlName, attachedToId=requestData.get("attachedToId"), currentUser=request.cookies.get('userId'), comment=requestData.get("comment"))) db.execute(True, queryString) db.disconnect() return str(requestData) else: db.disconnect() return "error"
def generateTable(self): tableRows = "" db = database() #need to iterate for each blog in the blog table queryString = db.buildQuery("blog", "selectAll") result = db.execute(False, queryString) for row in result: queryString = db.buildQuery("comments", "selectCountFilter", "blogName='{blog}'".format(blog=row[1])) numComments = db.execute(False, queryString) queryString = db.buildQuery("comments", "selectCountDistinctFilter", "username", "blogName='{blog}'".format(blog=row[1])) distinctNumComments = db.execute(False, queryString) queryString = db.buildQuery("reactions", "selectCountFilter", "blogName='{blog}'".format(blog=row[1])) numReactions = db.execute(False, queryString) tableRows += """ <tr> <td>{blogName}</td> <td>{owner}</td> <td>{numComments}</td> <td>{numCommenters}</td> <td>{numReactions}</td> </tr>""".format(blogName=row[1], owner=row[0], numComments=numComments[0][0], numCommenters=distinctNumComments[0][0], numReactions=numReactions[0][0]) db.disconnect() return """ <table id="statsTable" class="display" style="width:100%; text-align: center;"> <thead> <tr> <th>Blog Name</th> <th>Owner</th> <th>Number of Comments</th> <th>Number of Commenters</th> <th>Number of Reactions</th> </tr> </thead> <tbody> {rows} </tbody> </table>""".format(rows=tableRows)
def blogView(): global blogUrlName if request.method == 'POST': requestData = request.get_json() #this is a dictionary db = database() for key, value in requestData.items(): #check if action is present, if not, must be blog update if "not present" in value.get("action", "not present"): queryBuilder = query("blog") queryString = queryBuilder.update( "backgroundColor='{color}', font='{font}'".format( color=value.get("backgroundColor"), font=value.get("font")), "blogName='{blogName}'".format(blogName=blogUrlName)) db.execute(True, queryString) elif "insert" in value.get("action"): if "post" in key: queryBuilder = query("posts") queryString = queryBuilder.insertRow( "'{blogName}', '{id}', {top}, {left}, {width}, {height}, {depth}, '{title}', '{body}', '{backgroundColor}', '{fontColor}', {hasThread}" .format(blogName=blogUrlName, id=key, top=value.get("top"), left=value.get("left"), width=value.get("width"), height=value.get("height"), depth=value.get("depth"), title=value.get("title"), body=value.get("content"), backgroundColor=value.get("backgroundColor"), fontColor=value.get("fontColor"), hasThread=value.get("hasThread"))) db.execute(True, queryString) elif "image" in key: queryBuilder = query("images") queryString = queryBuilder.insertRow( "'{blogName}', '{id}', {top}, {left}, {width}, {height}, {depth}, '{source}', {hasThread}" .format(blogName=blogUrlName, id=key, top=value.get("top"), left=value.get("left"), width=value.get("width"), height=value.get("height"), depth=value.get("depth"), source=value.get("source"), hasThread=value.get("hasThread"))) db.execute(True, queryString) elif "video" in key: queryBuilder = query("videos") queryString = queryBuilder.insertRow( "'{blogName}', '{id}', {top}, {left}, {width}, {height}, {depth}, '{source}', {hasThread}" .format(blogName=blogUrlName, id=key, top=value.get("top"), left=value.get("left"), width=value.get("width"), height=value.get("height"), depth=value.get("depth"), source=value.get("source"), hasThread=value.get("hasThread"))) db.execute(True, queryString) else: return "error" elif "update" in value.get("action"): if value.get("hasThread") == 0: queryBuilder = query("comments") queryString = queryBuilder.delete( "blogName='{blogName}' AND attachedToId='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) if "post" in key: queryBuilder = query("posts") queryString = queryBuilder.update( "topVal={top}, leftVal={left}, width={width}, height={height}, depth={depth}, title='{title}', body='{body}', backgroundColor='{backgroundColor}', fontColor='{fontColor}', hasThread={hasThread}" .format(top=value.get("top"), left=value.get("left"), width=value.get("width"), height=value.get("height"), depth=value.get("depth"), title=value.get("title"), body=value.get("content"), backgroundColor=value.get("backgroundColor"), fontColor=value.get("fontColor"), hasThread=value.get("hasThread")), "blogName='{blogName}' AND id='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) elif "image" in key: queryBuilder = query("images") queryString = queryBuilder.update( "topVal={top}, leftVal={left}, width={width}, height={height}, depth={depth}, imageSource='{source}', hasThread={hasThread}" .format(top=value.get("top"), left=value.get("left"), width=value.get("width"), height=value.get("height"), depth=value.get("depth"), source=value.get("source"), hasThread=value.get("hasThread")), "blogName='{blogName}' AND id='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) elif "video" in key: queryBuilder = query("videos") queryString = queryBuilder.update( "topVal={top}, leftVal={left}, width={width}, height={height}, depth={depth}, videoSource='{source}', hasThread={hasThread}" .format(top=value.get("top"), left=value.get("left"), width=value.get("width"), height=value.get("height"), depth=value.get("depth"), source=value.get("source"), hasThread=value.get("hasThread")), "blogName='{blogName}' AND id='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) else: return "error" elif "delete" in value.get("action"): if value.get("hasThread") == 1: queryBuilder = query("comments") queryString = queryBuilder.delete( "blogName='{blogName}' AND attachedToId='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) if "post" in key: queryBuilder = query("posts") queryString = queryBuilder.delete( "blogName='{blogName}' AND id='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) #delete all comments for a deleted element queryBuilder = query("reactions") queryString = queryBuilder.delete( "blogName='{blogName}' AND attachedToId='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) elif "image" in key: queryBuilder = query("images") queryString = queryBuilder.delete( "blogName='{blogName}' AND id='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) #delete all comments for a deleted element queryBuilder = query("reactions") queryString = queryBuilder.delete( "blogName='{blogName}' AND attachedToId='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) elif "video" in key: queryBuilder = query("videos") queryString = queryBuilder.delete( "blogName='{blogName}' AND id='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) #delete all comments for a deleted element queryBuilder = query("reactions") queryString = queryBuilder.delete( "blogName='{blogName}' AND attachedToId='{id}'".format( blogName=blogUrlName, id=key)) db.execute(True, queryString) else: return "error" else: return "error" db.disconnect() return str(requestData) else: viewObject = BlogView() blogUrlName = request.args.get("blogName", "error") buildBlogSpecs() #if current user token is not owner of blog, don't display edit editBlogButton = "" currentUser = request.cookies.get('userId', "") if currentUser != "": db = database() queryBuilder = query("blog") queryString = queryBuilder.selectAllFilter( "blogName='{blogName}' AND username='******'".format( blogName=blogUrlName, username=currentUser)) result = db.execute(False, queryString) db.disconnect() if result != []: editBlogButton = """ <button type="button" id="enableEditing" style="position: absolute; left: 20px;" class="btn btn-default">Enable Edit Mode</button> """ return viewObject.html.format(blogName=blogUrlName, blog=blogUrlName, blogContent=buildBlogContent(), backgroundColor=blogColor, font=blogFont, editButton=editBlogButton)