def profile(userID): user = USERS_COLLECTION.find_one({'_id': userID}) quesPosted = user['quesPosted'] for i in range(len(quesPosted)): quesPosted[i] = ObjectId(quesPosted[i]) bookmarks = [] bques = user['bookmarks'] for i in range(0, len(bques)): bques[i] = ObjectId(bques[i]) for q in QUESTIONS_COLLECTION.find({'_id': {'$in': bques}}): bookmarks.append(q) ques = [] for q in QUESTIONS_COLLECTION.find({'_id': {'$in': quesPosted}}): ques.append(q) data = { 'userID': user['_id'], 'fname': user['firstname'], 'lname': user['lastname'], 'email': user['email'], 'karma': user['karma'], 'quesPosted': ques } return render_template('profile.html', title='HoverSpace | Profile', data=data, bookmarks=bookmarks)
def updateVotes(self, vote): QUESTIONS_COLLECTION.find_one_and_update( {'_id': ObjectId(self.quesID)}, {'$inc': { 'votes': vote }}) votes = (QUESTIONS_COLLECTION.find_one({'_id': ObjectId(self.quesID) }))['votes'] return votes
def editQuestion(self, short_desc, long_desc): QUESTIONS_COLLECTION.find_one_and_update( {'_id': ObjectId(self.quesID)}, { '$set': { 'short_description': short_desc, 'long_description': long_desc } })
def setAcceptedAns(self, ansID, username): usr = (QUESTIONS_COLLECTION.find_one({'_id': ObjectId(self.quesID) }))['postedBy'] if username == usr: QUESTIONS_COLLECTION.find_one_and_update( {'_id': ObjectId(self.quesID)}, {'$set': { 'accepted_ans': ansID }})
def postQuestion(): form = QuestionForm() if request.method == 'POST': try: username = current_user.get_id() question = QUESTIONS_COLLECTION.find_one( {'short_description': form.short_description.data}) if question: flash("This question has already been asked", category='error') return render_template('post-a-question.html', title='HoverSpace | Post a Question', form=form) tags = request.form.getlist('tag') ques_obj = Question(username, form.short_description.data, form.long_description.data, tags) quesID = ques_obj.postQuestion() tag_obj = TagMethods(quesID, tags) tag_obj.addQuestion() srch.add_string(quesID, form.short_description.data) flash("Your question has been successfully posted.", category='success') return redirect(url_for('viewQuestion', quesID=quesID)) except KeyError: return redirect(url_for('login')) return render_template('post-a-question.html', title='HoverSpace | Post a Question', form=form, choices=tag_choices)
def get_answers(self, quesID): answers = [] try: ans_obj = (QUESTIONS_COLLECTION.find_one({'_id': ObjectId(quesID)}))['ansID'] for answer in ans_obj: answers.append(ANSWERS_COLLECTION.find_one({'_id': ObjectId(answer)})) except TypeError: answers = [] return answers
def addFlaggedBy(self, userID, postedBy): ques_obj = QUESTIONS_COLLECTION.find_one( {'_id': ObjectId(self.quesID)}) flags = ques_obj['flaggedBy'] votes = ques_obj['votes'] if userID in flags: return "alreadyFlagged" QUESTIONS_COLLECTION.find_one_and_update( {'_id': ObjectId(self.quesID)}, {'$addToSet': { 'flaggedBy': userID }}) if (len(flags) >= 10): flag = "True" self.setFlag(postedBy, votes, flag) usr = User(postedBy) usr.update_karma(-votes) return "quesRemoved" return "flagged"
def post_question(self): quesID = QUESTIONS_COLLECTION.insert_one({ 'short_description': self.short_description, 'long_description': self.long_description, 'posetdBy': self.posetdBy, 'timestamp': self.timestamp, 'ansID': [] }).inserted_id usr = User(self.posetdBy) usr.update_questions(str(quesID)) return quesID
def home(): question = QUESTIONS_COLLECTION.find() answer = list() for record in question: try: for ansID in record['ansID']: for ans in ANSWERS_COLLECTION.find({'_id': ObjectId(ansID)}): answer.append(record['short_description']) answer.append(record['long_description']) answer.append(ans['ansText']) break except KeyError: pass return render_template('home.html', title='HoverSpace | Home', short_description=answer)
def postQuestion(self): quesID = QUESTIONS_COLLECTION.insert_one({ 'postedBy': self.postedBy, 'short_description': self.short_description, 'long_description': self.long_description, 'timestamp': self.timestamp, 'ansID': [], 'commentID': [], 'votes': 0, 'accepted_ans': None, 'flag': False }).inserted_id usr = User(self.postedBy) usr.update_questions(str(quesID)) return quesID
def post_question(): form = QuestionForm() if request.method == 'POST': try: username = current_user.get_id() question = QUESTIONS_COLLECTION.find_one( {'short_description': form.short_description.data} ) if question: flash("This queston has already been asked", category='error') return render_template('post-a-question.html', title='HoverSpace | Post a Question', form=form) ques_obj = Question(username, form.short_description.data, form.long_description.data) quesID = ques_obj.post_question() flash("Your question has been successfully posted.", category='success') #print(quesID) return redirect(url_for('view_question', quesID=quesID)) except KeyError: return redirect(url_for('login')) return render_template('post-a-question.html', title='HoverSpace | Post a Question', form=form)
def home(): questions = QUESTIONS_COLLECTION.find().sort('timestamp', pymongo.DESCENDING) feed = list() for record in questions: try: story = { 'short_description': record['short_description'], 'long_description': record['long_description'], 'ques_url': url_for('viewQuestion', quesID=str(record['_id'])) } if record['accepted_ans']: story['answer'] = ANSWERS_COLLECTION.find_one( {'_id': ObjectId(accepted_ans)}) feed.append(story) except KeyError: pass return render_template('home.html', title='HoverSpace | Home', feed=feed)
def home(): form = SearchForm() if request.method == "POST": l = [] for selected in srch.search(form.srch_term.data): q = QuestionMethods(selected) l.append(q.getQuestion()) return render_template('search.html', title='HoverSpace | Search', result=l) questions = QUESTIONS_COLLECTION.find({ 'flag': 'False' }).sort('timestamp', pymongo.DESCENDING) feed = list() for record in questions: try: story = { 'short_description': record['short_description'], 'long_description': record['long_description'], 'ques_url': url_for('viewQuestion', quesID=str(record['_id'])), 'postedBy': record['postedBy'], 'ansCount': len(record['ansID']), 'votes': record['votes'], 'timestamp': record['timestamp'] } if record['accepted_ans']: story['answer'] = ANSWERS_COLLECTION.find_one( {'_id': ObjectId(record['accepted_ans'])}) feed.append(story) topcontributors = USERS_COLLECTION.find().sort( 'karma', pymongo.DESCENDING).limit(10) tags = [] for tag in TAGS_COLLECTION.find(): tags.append(tag['_id']) except KeyError: pass return render_template('home.html', title='HoverSpace | Home', feed=feed, form=form, tags=tags, topcontributors=topcontributors)
def removeAcceptedAns(self): QUESTIONS_COLLECTION.find_one_and_update( {'_id': ObjectId(self.quesID)}, {'$set': { 'accepted_ans': None }})
def setFlag(self, flag): QUESTIONS_COLLECTION.find_one_and_update( {'_id': ObjectId(self.quesID)}, {'$set': { 'flag': flag }})
def getAcceptedAns(self): return (QUESTIONS_COLLECTION.find_one({'_id': ObjectId(self.quesID) }))['accepted_ans']
def update_comments(self, commentID): QUESTIONS_COLLECTION.find_one_and_update( {'_id': ObjectId(self.quesID)}, {'$addToSet': { 'commentID': commentID }})
def add_all(self): for entry in QUESTIONS_COLLECTION.find(): self.add_string(str(entry['_id']), entry['short_description'])
def insert_answers(self, ansID): QUESTIONS_COLLECTION.find_one_and_update( {'_id': ObjectId(self.quesID)}, {'$addToSet': { 'ansID': ansID }})
def getQuestion(self): ques_dict = QUESTIONS_COLLECTION.find_one( {'_id': ObjectId(self.quesID)}) return ques_dict
def getFlag(self): return (QUESTIONS_COLLECTION.find_one({'_id': ObjectId(self.quesID)}))['flag']
def setAcceptedAns(self, ansID): QUESTIONS_COLLECTION.find_one_and_update( {'_id': ObjectId(self.quesID)}, {'$set': { 'accepted_ans': ObjectId(ansID) }})
def removeFlag(self, userID): QUESTIONS_COLLECTION.find_one_and_update( {'_id': ObjectId(self.quesID)}, {'$pull': { 'flaggedBy': userID }})