def vote(request): s = request.session p = request.session['safe_post'] dbsession = DBSession() if 'logged_in' in s: way = request.matchdict['way'] if way == 'up': points = 1 elif way == 'down': points = -1 comment_id = None if 'target_type' in p and p['target_type'] == 'comment': # the post comes in with comment id in sub_id spot # here, we make sub_id the real sub_id sub_id = submission.get_comment_parent_story(p['sub_id'])[0] comment_id = p['sub_id'] vote_list = dbsession.query(Vote).filter( Vote.comment_id == comment_id).filter( Vote.user_id == s['users.id']).all() else: sub_id = p['sub_id'] vote_list = dbsession.query(Vote).filter( Vote.submission_id == p['sub_id']).filter( Vote.comment_id == None).filter( Vote.user_id == s['users.id']).all() # find out if the user has already voted on this submission if len(vote_list) > 0: if vote_list[0].direction == points: return { 'message': 'You have already voted on this submission.', 'code': 'EOLDVOTE', 'success': False } else: dbsession.delete(vote_list[0]) v = Vote(sub_id, s['users.id'], points, p['target_type'], comment_id) v.direction = points dbsession = DBSession() dbsession.add(v) return HTTPFound(p['jump_to']) else: return { 'message': 'Sorry, you are not logged in.', 'code': 'ENOLOGIN', 'success': False }
def vote(request): s = request.session p = request.session["safe_post"] dbsession = DBSession() if "logged_in" in s: way = request.matchdict["way"] if way == "up": points = 1 elif way == "down": points = -1 comment_id = None if "target_type" in p and p["target_type"] == "comment": # the post comes in with comment id in sub_id spot # here, we make sub_id the real sub_id sub_id = queries.get_comment_parent_story(p["sub_id"])[0] comment_id = p["sub_id"] vote_list = ( dbsession.query(Vote).filter(Vote.comment_id == comment_id).filter(Vote.user_id == s["users.id"]).all() ) else: sub_id = p["sub_id"] vote_list = ( dbsession.query(Vote) .filter(Vote.submission_id == p["sub_id"]) .filter(Vote.comment_id == None) .filter(Vote.user_id == s["users.id"]) .all() ) # find out if the user has already voted on this submission if len(vote_list) > 0: if vote_list[0].direction == points: return {"message": "You have already voted on this submission.", "code": "EOLDVOTE", "success": False} else: dbsession.delete(vote_list[0]) v = Vote(sub_id, s["users.id"], points, p["target_type"], comment_id) v.direction = points dbsession = DBSession() dbsession.add(v) return HTTPFound(p["jump_to"]) else: return {"message": "Sorry, you are not logged in.", "code": "ENOLOGIN", "success": False}
def vote(request): s = request.session p = request.session['safe_post'] dbsession = DBSession() if 'logged_in' in s: way = request.matchdict['way'] if way == 'up': points = 1 elif way == 'down': points = -1 comment_id = None if 'target_type' in p and p['target_type'] == 'comment': # the post comes in with comment id in sub_id spot # here, we make sub_id the real sub_id sub_id = submission.get_comment_parent_story(p['sub_id'])[0] comment_id = p['sub_id'] vote_list = dbsession.query(Vote).filter(Vote.comment_id == comment_id).filter(Vote.user_id == s['users.id']).all() else: sub_id = p['sub_id'] vote_list = dbsession.query(Vote).filter(Vote.submission_id == p['sub_id']).filter(Vote.comment_id == None).filter(Vote.user_id == s['users.id']).all() # find out if the user has already voted on this submission if len(vote_list) > 0: if vote_list[0].direction == points: return {'message': 'You have already voted on this submission.', 'code': 'EOLDVOTE', 'success': False} else: dbsession.delete(vote_list[0]) v = Vote(sub_id, s['users.id'], points, p['target_type'], comment_id) v.direction = points dbsession = DBSession() dbsession.add(v) return HTTPFound(p['jump_to']) else: return {'message': 'Sorry, you are not logged in.', 'code': 'ENOLOGIN', 'success': False}
def submit(request): s = request.session p = request.session['safe_post'] r = request qs = s['safe_get'] s['message'] = "Post a story." dbsession = DBSession() stories = None sections = section_queries.get_sections() new_url_text = '' new_title_text = '' route_name = r.matched_route.name if route_name == 'new_page': # require admin to load a new page form if 'logged_in_admin' not in s or s['logged_in_admin'] == False: return HTTPNotFound() #if uses came in with a share button, redirect to existing discussion if there is one if 'from' in qs and qs['from'] == 'button': existing_post = submission.get_story_by_url_oldest(qs['url']) if existing_post: return HTTPFound(r.route_url('full', sub_id=existing_post.id)) new_url_text = qs['url'] if 'title' in qs: new_title_text = qs['title'] if 'logged_in' not in s: s['message'] = 'Sorry, you must <a href="{0}">log in</a> before you can share a link.'.format( r.route_url('login')) return {'stories': [], 'success': False, 'code': 'ENOLOGIN'} if p and 'title' in p: if 'logged_in' not in s: s['message'] = 'Sorry, please log in first' return {'stories': [], 'success': False, 'code': 'ENOLOGIN'} if 'section_id' not in p or p['section_id'] == '': return {'stories': [], 'success': False, 'code': 'ENOSECTION'} if 'url' in p and p['url'] != '' and p['url'] is not None: p['url'] = general.strip_all_html(p['url']) if not re.match(r'http[s]*:\/\/', p['url']): p['url'] = 'http://' + p['url'] else: # set to None so that NULL goes into the database p['url'] = None if route_name == 'new_page': render_type = p['render_type'] slug = p['slug'] # if we can find this slug already, kill submission here. try: s = dbsession.query(Submission).filter( Submission.slug == slug).one() s['message'] = 'This slug is already taken.' success = False except sqlalchemy.orm.exc.NoResultFound: pass else: slug = '' render_type = 'story_md' if 'section_id' in p: sub = Submission(p['title'][:100], p['description'], p['url'], s['users.id'], section=p['section_id']) else: sub = Submission(p['title'][:100], p['description'], p['url'], s['users.id']) sub.render_type = render_type # slug octet no longer derived from story's actual id if slug == '': slug = u"{title}-{uuid_first_octet}".format( title=slugify.slugify(unicode(p['title'][:100])), uuid_first_octet=str(general.gen_uuid())[:8]) sub.slug = slug dbsession.add(sub) dbsession.flush() # add notify if general.check_notify_default(s['users.id'], r): notify_queries.create_notify(s['users.id'], sub.id, s['users.id']) v = Vote(sub.id, s['users.id'], 1, "submission", None) v.direction = 1 dbsession.add(v) s['message'] = "Added." try: if request.registry.solr_conn: # we flush here to ensure we have a vaild id object when added to solr # we use this if statement so that the exception will be raised before # dbsession is flushed, hence avoiding an unnecessary flush if the site # is not using solr. dbsession.flush() request.registry.solr_conn.add({ 'id': sub.id, 'title': sub.title, 'description': sub.description }) request.registry.solr_conn.commit() except AttributeError: #solr is not configured for this connection pass return HTTPFound(r.route_url('home')) return { 'stories': stories, 'success': True, 'code': 0, 'new_url_text': new_url_text, 'new_title_text': new_title_text, 'sections': sections }
def submit(request): s = request.session p = request.session['safe_post'] r = request qs = s['safe_get'] s['message'] = "Post a story." dbsession = DBSession() stories = None sections = section_queries.get_sections() new_url_text = '' new_title_text = '' route_name = r.matched_route.name if route_name == 'new_page': # require admin to load a new page form if 'logged_in_admin' not in s or s['logged_in_admin'] == False: return HTTPNotFound() #if uses came in with a share button, redirect to existing discussion if there is one if 'from' in qs and qs['from'] == 'button': existing_post = submission.get_story_by_url_oldest(qs['url']) if existing_post: return HTTPFound(r.route_url('full', sub_id=existing_post.id)) new_url_text = qs['url'] if 'title' in qs: new_title_text = qs['title'] if 'logged_in' not in s: s['message'] = 'Sorry, you must <a href="{0}">log in</a> before you can share a link.'.format(r.route_url('login')) return {'stories': [], 'success': False, 'code': 'ENOLOGIN'} if p and 'title' in p: if 'logged_in' not in s: s['message'] = 'Sorry, please log in first' return {'stories': [], 'success': False, 'code': 'ENOLOGIN'} if 'section_id' not in p or p['section_id'] == '': return {'stories': [], 'success': False, 'code': 'ENOSECTION'} if 'url' in p and p['url'] != '' and p['url'] is not None: p['url'] = general.strip_all_html(p['url']) if not re.match(r'http[s]*:\/\/', p['url']): p['url'] = 'http://' + p['url'] else: # set to None so that NULL goes into the database p['url'] = None if route_name == 'new_page': render_type = p['render_type'] slug = p['slug'] # if we can find this slug already, kill submission here. try: s = dbsession.query(Submission).filter(Submission.slug == slug).one() s['message'] = 'This slug is already taken.' success = False except sqlalchemy.orm.exc.NoResultFound: pass else: slug = '' render_type = 'story_md' if 'section_id' in p: sub = Submission(p['title'][:100], p['description'], p['url'], s['users.id'], section = p['section_id']) else: sub = Submission(p['title'][:100], p['description'], p['url'], s['users.id']) sub.render_type = render_type # slug octet no longer derived from story's actual id if slug == '': slug = u"{title}-{uuid_first_octet}".format( title = slugify.slugify(unicode(p['title'][:100])), uuid_first_octet = str(general.gen_uuid())[:8]) sub.slug = slug dbsession.add(sub) dbsession.flush() # add notify if general.check_notify_default(s['users.id'], r): notify_queries.create_notify(s['users.id'], sub.id, s['users.id']) v = Vote(sub.id, s['users.id'], 1, "submission", None) v.direction = 1 dbsession.add(v) s['message'] = "Added." try: if request.registry.solr_conn: # we flush here to ensure we have a vaild id object when added to solr # we use this if statement so that the exception will be raised before # dbsession is flushed, hence avoiding an unnecessary flush if the site # is not using solr. dbsession.flush() request.registry.solr_conn.add({'id': sub.id, 'title': sub.title, 'description': sub.description}) request.registry.solr_conn.commit() except AttributeError: #solr is not configured for this connection pass return HTTPFound(r.route_url('home')) return {'stories': stories, 'success': True, 'code': 0, 'new_url_text': new_url_text, 'new_title_text': new_title_text, 'sections': sections}