def save(request): s = request.session p = request.session['safe_params'] u = None op = 'add' vote_dict = {} if 'story_id' in p and 'logged_in' in s: dbsession = DBSession() u = queries.get_user_by_id(s['users.id']) to_save = queries.get_story_by_id(p['story_id']) if 'op' in p: op = p['op'] if op == 'add': if to_save not in u.saved: u.saved.append(to_save) dbsession.add(u) s['message'] = 'Successfully saved {0}'.format(to_save.title) elif op == 'del': if to_save in u.saved: u.saved.remove(to_save) dbsession.add(u) s['message'] = 'Successfully unsaved {0}'.format(to_save.title) elif 'logged_in' in s: u = queries.get_user_by_id(s['users.id']) if u: vds = [] for i in u.saved: vds.append(queries.get_user_votes_on_submission(s['users.id'], i.id)) for vd in vds: if type(vd) == dict: vote_dict.update(vd) return {'saved': u.saved, 'vote_dict': vote_dict, }
def search(request): r = request ses = r.session try: sc = request.registry.solr_conn except AttributeError: r.session['message'] = 'I could not find the search engine.' return {'code': 'ENOSOLR', 'success': False} search_term = r.params['term'] q = sc.query() for term in search_term.split(): q = q.query(term) res = q.execute() stories = [] vds = [] vote_dict = {} for r in res: stories.append(queries.get_story_by_id(r['id'])) if 'users.id' in ses: vds.append(queries.get_user_votes_on_submission(ses['users.id'], r['id'])) for vd in vds: if type(vd) == dict: vote_dict.update(vd) #queries.update_story_vote_tally(stories) return {'res': res, 'stories': stories, 'vote_dict': vote_dict}
def follow(request): s = request.session p = request.session['safe_params'] message = '' if 'logged_in' not in s: s['message'] = 'Sorry, you must be logged in to use the follow feature.' return {'success': False, 'code': 'ENOLOGIN'} if 'follow_id' in p and 'logged_in' in s: dbsession = DBSession() #@TODO: replace with model-wide method to get logged-in user object u = queries.get_user_by_id(s['users.id']) to_follow = queries.get_user_by_id(p['follow_id']) op = 'add' if 'op' in p: op = p['op'] if to_follow not in u.follows and op == 'add': u.follows.append(to_follow) del(s['followed_users']) dbsession.add(u) message = 'Successfully following {0}'.format(to_follow.display_name()) elif to_follow in u.follows and op == 'del': u.follows.remove(to_follow) del(s['followed_users']) dbsession.add(u) message = 'Successfully unfollowed {0}'.format(to_follow.display_name()) elif 'logged_in' in s: u = queries.get_user_by_id(s['users.id']) vds = [] vote_dict = {} if u: for i in u.follows: for story in i.submissions: #@FIXME: this is probably quite slow vds.append(queries.get_user_votes_on_submission(u.id, story.id)) for vd in vds: if type(vd) == dict: vote_dict.update(vd) s['message'] = message return {'follows': u.follows, 'vote_dict': vote_dict}
def full(request): message = "" # @TODO: Change this to use slugs instead of literal guids sub_id = request.matchdict["sub_id"] sub_id = queries.get_story_id_from_slug(sub_id) dbsession = DBSession() p = request.session["safe_post"] prm = request.session["safe_params"] s = request.session logged_in = False if "logged_in" in s: # return {'message': 'Sorry, please log in first.', 'story': {}, 'comments': {}, 'success': False, 'code': 'ENOLOGIN'} logged_in = True # record the comment if "op" in prm and prm["op"] == "del" and logged_in: if "comment_id" in prm: c = queries.get_comment_by_id(prm["comment_id"]) if queries.is_user_allowed_admin_action(s["users.id"], str(c.id)): c.body = "[deleted]" c.deleted = True dbsession.add(c) s["message"] = "Comment deleted." if "op" in prm and prm["op"] == "edit" and logged_in: if "comment_id" in prm: c = queries.get_comment_by_id(prm["comment_id"]) if queries.is_user_allowed_admin_action(s["users.id"], str(c.id)): c.body = prm["body"] dbsession.add(c) s["message"] = "Comment updated." else: if "description-textarea" in request.session["safe_post"] and logged_in: sub = queries.get_story_by_id(sub_id) if queries.is_user_allowed_admin_action(s["users.id"], str(sub.id)): sub.description = prm["description-textarea"] dbsession.add(sub) s["message"] = "Description updated." if "body" in request.session["safe_post"] and logged_in: if p["parent_type"] == "story": in_reply_to = queries.get_story_by_id(p["comment_parent"]).submitter.id elif p["parent_type"] == "comment": c = queries.get_comment_by_id(p["comment_parent"]) in_reply_to = c.user_id c = Comment(sub_id, s["users.id"], p["comment_parent"], prm["body"], in_reply_to=in_reply_to) dbsession.add(c) dbsession.flush() v = Vote(sub_id, s["users.id"], 1, "comment", c.id) v.direction = 1 dbsession.add(v) s["message"] = "Comment added." # @TODO: Stop using SA queries in views, move them to individual models story = queries.get_story_by_id(sub_id) story.tally_votes() story_vote_dict = {} comment_vote_dict = {} if logged_in: # see queries.py; these two should not be separate. #@FIXME story_vote_dict = queries.get_user_votes_on_submission(s["users.id"], sub_id) comment_vote_dict = queries.get_user_votes_on_submissions_comments(s["users.id"], sub_id) page_num = 1 per_page = 30 if "sort.comment_default_order" in request.registry.settings: sort = request.registry.settings["sort.comment_default_order"] else: # do NOT change the hardcoded default, change in the ini as above sort = "top" next_page = None prev_page = None if "comment_sort" in prm: sort = prm["comment_sort"] if "page_num" in prm: try: page_num = int(prm["page_num"]) except: page_num = 1 # comments returns a dict; see queries.py if "comment_perma" not in prm: comments = queries.get_comments( sub_id, organize_parentage=True, page_num=page_num, per_page=per_page, sort=sort ) else: comments = queries.get_comments( sub_id, organize_parentage=True, page_num=page_num, per_page=per_page, sort=sort, target="comment", target_id=prm["comment_perma"], ) for c in comments["comments"]: # @TODO: Don't do this on every load on a real deployment c.tally_votes() if page_num > 1: prev_page = page_num - 1 if comments["max_comments"] > (page_num * per_page): next_page = page_num + 1 return { "story": story, "comments": comments, "success": True, "code": 0, "story_vote_dict": story_vote_dict, "comment_vote_dict": comment_vote_dict, "next_page": next_page, "prev_page": prev_page, }