def post(self): next_page = self.get_argument('next', '') next_page += "&finished=true" close_popup = self.get_argument('close_popup', '') email = self.get_argument('email', '') subscribe_to = self.get_argument('subscribe_to', '') error = '' status = '' slug = '' if close_popup != '': status = 'close_popup' # get the current user's email value user = userdb.get_user_by_screen_name(self.current_user) if user: # Clear the existing email address if email == '': if subscribe_to == '': user['email_address'] = '' self.set_secure_cookie('email_address', '') userdb.save_user(user) error = 'Your email address has been cleared.' else: # make sure someone else isn't already using this email existing = userdb.get_user_by_email(email) if existing and existing['user']['id_str'] != user['user']['id_str']: error = 'This email address is already in use.' else: # OK to save as user's email user['email_address'] = email userdb.save_user(user) self.set_secure_cookie('email_address', email) if subscribe_to != '': post = postsdb.get_post_by_slug(subscribe_to) if post: slug = post['slug'] # Attempt to create the post's thread thread_id = 0 try: # Attempt to create the thread. thread_details = disqus.create_thread(post, user['disqus_access_token']) thread_id = thread_details['response']['id'] except: try: # trouble creating the thread, try to just get the thread via the slug thread_details = disqus.get_thread_details(slug) thread_id = thread_details['response']['id'] except: thread_id = 0 if thread_id != 0: # Subscribe a user to the thread specified in response disqus.subscribe_to_thread(thread_id, user['disqus_access_token']) self.redirect("/user/%s/settings?msg=updated" % user['user']['screen_name'])
def post(self): sort_by = self.get_argument('sort_by', 'hot') page = abs(int(self.get_argument('page', '1'))) per_page = abs(int(self.get_argument('per_page', '9'))) is_blacklisted = False msg = 'success' if self.current_user: is_blacklisted = self.is_blacklisted(self.current_user) post = {} post['slug'] = self.get_argument('slug', None) post['title'] = self.get_argument('title', '') post['url'] = self.get_argument('url', '') post['body_raw'] = self.get_argument('body_raw', '') post['tags'] = self.get_argument('tags', '').split(',') post['featured'] = self.get_argument('featured', '') post['has_hackpad'] = self.get_argument('has_hackpad', '') post['slug'] = self.get_argument('slug', '') post['sort_score'] = 0 post['daily_sort_score'] = 0 if post['has_hackpad'] != '': post['has_hackpad'] = True else: post['has_hackpad'] = False deleted = self.get_argument('deleted', '') if deleted != '': post['deleted'] = True post['date_deleted'] = datetime.datetime.now() bypass_dup_check = self.get_argument('bypass_dup_check', '') is_edit = False if post['slug']: bypass_dup_check = "true" is_edit = True dups = [] # make sure user isn't blacklisted if not self.is_blacklisted(self.current_user): # check if there is an existing URL if post['url'] != '': url = urlparse(post['url']) netloc = url.netloc.split('.') if netloc[0] == 'www': del netloc[0] path = url.path if path and path[-1] == '/': path = path[:-1] url = '%s%s' % ('.'.join(netloc), path) post['normalized_url'] = url long_url = post['url'] if long_url.find('goo.gl') > -1: long_url = google.expand_url(post['url']) if long_url.find('bit.ly') > -1 or long_url.find( 'bitly.com') > -1: long_url = bitly.expand_url(post['url'].replace( 'http://bitly.com', '').replace('http://bit.ly', '')) post['domain'] = urlparse(long_url).netloc ok_to_post = True dups = postsdb.get_posts_by_normalized_url( post.get('normalized_url', ""), 1) if post['url'] != '' and len( dups) > 0 and bypass_dup_check != "true": ## ## If there are dupes, kick them back to the post add form ## return (self.render('post/new_post.html', post=post, dups=dups)) # Handle tags post['tags'] = [t.strip().lower() for t in post['tags']] post['tags'] = [t for t in post['tags'] if t] userdb.add_tags_to_user(self.current_user, post['tags']) for tag in post['tags']: tagsdb.save_tag(tag) # format the content as needed post['body_html'] = sanitize.html_sanitize( post['body_raw'], media=self.current_user_can('post_rich_media')) post['body_text'] = sanitize.html_to_text(post['body_html']) post['body_truncated'] = sanitize.truncate(post['body_text'], 500) # determine if this should be a featured post or not if self.current_user_can( 'feature_posts') and post['featured'] != '': post['featured'] = True post['date_featured'] = datetime.datetime.now() else: post['featured'] = False post['date_featured'] = None user = userdb.get_user_by_screen_name(self.current_user) if not post['slug']: # No slug -- this is a new post. # initiate fields that are new post['disqus_shortname'] = settings.get('disqus_short_code') post['muted'] = False post['comment_count'] = 0 post['disqus_thread_id_str'] = '' post['sort_score'] = 0.0 post['downvotes'] = 0 post['hackpad_url'] = '' post['date_created'] = datetime.datetime.now() post['user_id_str'] = user['user']['id_str'] post['username'] = self.current_user post['user'] = user['user'] post['votes'] = 1 post['voted_users'] = [user['user']] #save it post['slug'] = postsdb.insert_post(post) msg = 'success' else: # this is an existing post. # attempt to edit the post (make sure they are the author) saved_post = postsdb.get_post_by_slug(post['slug']) if saved_post and self.current_user == saved_post['user'][ 'screen_name']: # looks good - let's update the saved_post values to new values for key in post.keys(): saved_post[key] = post[key] # finally let's save the updates postsdb.save_post(saved_post) msg = 'success' # log any @ mentions in the post mentions = re.findall(r'@([^\s]+)', post['body_raw']) for mention in mentions: mentionsdb.add_mention(mention.lower(), post['slug']) # Send email to USVers if OP is staff if self.current_user in settings.get('staff'): subject = 'USV.com: %s posted "%s"' % (self.current_user, post['title']) if 'url' in post and post[ 'url']: # post.url is the link to external content (if any) post_link = 'External Link: %s \n\n' % post['url'] else: post_link = '' post_url = "http://%s/posts/%s" % (settings.get('base_url'), post['slug']) text = '"%s" ( %s ) posted by %s. \n\n %s %s' % ( post['title'].encode('ascii', errors='ignore'), post_url, self.current_user, post_link, post.get('body_text', "")) # now attempt to actually send the emails for u in settings.get('staff'): if u != self.current_user: acc = userdb.get_user_by_screen_name(u) if acc: self.send_email('*****@*****.**', acc['email_address'], subject, text) # Subscribe to Disqus # Attempt to create the post's thread acc = userdb.get_user_by_screen_name(self.current_user) thread_id = 0 try: # Attempt to create the thread. thread_details = disqus.create_thread( post, acc['disqus']['access_token']) thread_id = thread_details['response']['id'] except: try: # trouble creating the thread, try to just get the thread via the slug thread_details = disqus.get_thread_details(post) thread_id = thread_details['response']['id'] except: thread_id = 0 if thread_id != 0: # Subscribe a user to the thread specified in response disqus.subscribe_to_thread(thread_id, acc['disqus']['access_token']) # update the thread with the disqus_thread_id_str saved_post = postsdb.get_post_by_slug(post['slug']) saved_post['disqus_thread_id_str'] = thread_id postsdb.save_post(saved_post) if is_edit: self.redirect('/posts/%s?msg=updated' % post['slug']) else: self.redirect('/?msg=success&slug=%s' % post['slug'])
def post(self): sort_by = self.get_argument('sort_by', 'hot') page = abs(int(self.get_argument('page', '1'))) per_page = abs(int(self.get_argument('per_page', '9'))) is_blacklisted = False msg = 'success' if self.current_user: is_blacklisted = self.is_blacklisted(self.current_user) post = {} post['slug'] = self.get_argument('slug', None) post['title'] = self.get_argument('title', '') post['url'] = self.get_argument('url', '') post['body_raw'] = self.get_argument('body_raw', '') post['tags'] = self.get_argument('tags', '').split(',') post['featured'] = self.get_argument('featured', '') post['has_hackpad'] = self.get_argument('has_hackpad', '') post['slug'] = self.get_argument('slug', '') post['sort_score'] = 0 post['daily_sort_score'] = 0 if post['has_hackpad'] != '': post['has_hackpad'] = True else: post['has_hackpad'] = False deleted = self.get_argument('deleted', '') if deleted != '': post['deleted'] = True post['date_deleted'] = datetime.datetime.now() bypass_dup_check = self.get_argument('bypass_dup_check', '') is_edit = False if post['slug']: bypass_dup_check = "true" is_edit = True dups = [] # make sure user isn't blacklisted if not self.is_blacklisted(self.current_user): # check if there is an existing URL if post['url'] != '': url = urlparse(post['url']) netloc = url.netloc.split('.') if netloc[0] == 'www': del netloc[0] path = url.path if path and path[-1] == '/': path = path[:-1] url = '%s%s' % ('.'.join(netloc), path) post['normalized_url'] = url long_url = post['url'] if long_url.find('goo.gl') > -1: long_url = google.expand_url(post['url']) if long_url.find('bit.ly') > -1 or long_url.find('bitly.com') > -1: long_url = bitly.expand_url(post['url'].replace('http://bitly.com','').replace('http://bit.ly','')) post['domain'] = urlparse(long_url).netloc ok_to_post = True dups = postsdb.get_posts_by_normalized_url(post.get('normalized_url', ""), 1) if post['url'] != '' and len(dups) > 0 and bypass_dup_check != "true": ## ## If there are dupes, kick them back to the post add form ## return (self.render('post/new_post.html', post=post, dups=dups)) # Handle tags post['tags'] = [t.strip().lower() for t in post['tags']] post['tags'] = [t for t in post['tags'] if t] userdb.add_tags_to_user(self.current_user, post['tags']) for tag in post['tags']: tagsdb.save_tag(tag) # format the content as needed post['body_html'] = sanitize.html_sanitize(post['body_raw'], media=self.current_user_can('post_rich_media')) post['body_text'] = sanitize.html_to_text(post['body_html']) post['body_truncated'] = sanitize.truncate(post['body_text'], 500) # determine if this should be a featured post or not if self.current_user_can('feature_posts') and post['featured'] != '': post['featured'] = True post['date_featured'] = datetime.datetime.now() else: post['featured'] = False post['date_featured'] = None user = userdb.get_user_by_screen_name(self.current_user) if not post['slug']: # No slug -- this is a new post. # initiate fields that are new post['disqus_shortname'] = settings.get('disqus_short_code') post['muted'] = False post['comment_count'] = 0 post['disqus_thread_id_str'] = '' post['sort_score'] = 0.0 post['downvotes'] = 0 post['hackpad_url'] = '' post['date_created'] = datetime.datetime.now() post['user_id_str'] = user['user']['id_str'] post['username'] = self.current_user post['user'] = user['user'] post['votes'] = 1 post['voted_users'] = [user['user']] #save it post['slug'] = postsdb.insert_post(post) msg = 'success' else: # this is an existing post. # attempt to edit the post (make sure they are the author) saved_post = postsdb.get_post_by_slug(post['slug']) if saved_post and self.current_user == saved_post['user']['screen_name']: # looks good - let's update the saved_post values to new values for key in post.keys(): saved_post[key] = post[key] # finally let's save the updates postsdb.save_post(saved_post) msg = 'success' # log any @ mentions in the post mentions = re.findall(r'@([^\s]+)', post['body_raw']) for mention in mentions: mentionsdb.add_mention(mention.lower(), post['slug']) # Send email to USVers if OP is staff if self.current_user in settings.get('staff'): subject = 'USV.com: %s posted "%s"' % (self.current_user, post['title']) if 'url' in post and post['url']: # post.url is the link to external content (if any) post_link = 'External Link: %s \n\n' % post['url'] else: post_link = '' post_url = "http://%s/posts/%s" % (settings.get('base_url'), post['slug']) text = '"%s" ( %s ) posted by %s. \n\n %s %s' % (post['title'].encode('ascii', errors='ignore'), post_url, self.current_user, post_link, post.get('body_text', "")) # now attempt to actually send the emails for u in settings.get('staff'): if u != self.current_user: acc = userdb.get_user_by_screen_name(u) if acc: self.send_email('*****@*****.**', acc['email_address'], subject, text) # Subscribe to Disqus # Attempt to create the post's thread acc = userdb.get_user_by_screen_name(self.current_user) thread_id = 0 try: # Attempt to create the thread. thread_details = disqus.create_thread(post, acc['disqus']['access_token']) thread_id = thread_details['response']['id'] except: try: # trouble creating the thread, try to just get the thread via the slug thread_details = disqus.get_thread_details(post) thread_id = thread_details['response']['id'] except: thread_id = 0 if thread_id != 0: # Subscribe a user to the thread specified in response disqus.subscribe_to_thread(thread_id, acc['disqus']['access_token']) # update the thread with the disqus_thread_id_str saved_post = postsdb.get_post_by_slug(post['slug']) saved_post['disqus_thread_id_str'] = thread_id postsdb.save_post(saved_post) if is_edit: self.redirect('/posts/%s?msg=updated' % post['slug']) else: self.redirect('/?msg=success&slug=%s' % post['slug'])
def post(self): next_page = self.get_argument('next', '') next_page += "&finished=true" close_popup = self.get_argument('close_popup', '') email = self.get_argument('email', '') subscribe_to = self.get_argument('subscribe_to', '') error = '' status = '' slug = '' if close_popup != '': status = 'close_popup' # get the current user's email value user = userdb.get_user_by_screen_name(self.current_user) if user: # Clear the existing email address if email == '': if subscribe_to == '': user['email_address'] = '' self.set_secure_cookie('email_address', '') userdb.save_user(user) error = 'Your email address has been cleared.' else: # make sure someone else isn't already using this email existing = userdb.get_user_by_email(email) if existing and existing['user']['id_str'] != user['user'][ 'id_str']: error = 'This email address is already in use.' else: # OK to save as user's email user['email_address'] = email userdb.save_user(user) self.set_secure_cookie('email_address', email) if subscribe_to != '': post = postsdb.get_post_by_slug(subscribe_to) if post: slug = post['slug'] # Attempt to create the post's thread thread_id = 0 try: # Attempt to create the thread. thread_details = disqus.create_thread( post, user['disqus_access_token']) thread_id = thread_details['response']['id'] except: try: # trouble creating the thread, try to just get the thread via the slug thread_details = disqus.get_thread_details( post) thread_id = thread_details['response']['id'] except: thread_id = 0 if thread_id != 0: # Subscribe a user to the thread specified in response disqus.subscribe_to_thread( thread_id, user['disqus_access_token']) #save email prefs user['wants_daily_email'] = self.get_argument('wants_daily_email', False) if user['wants_daily_email'] == "on": user['wants_daily_email'] = True user['wants_email_alerts'] = self.get_argument('wants_email_alerts', False) if user['wants_email_alerts'] == "on": user['wants_email_alerts'] = True userdb.save_user(user) self.redirect("/user/%s/settings?msg=updated" % user['user']['screen_name'])
def post(self): sort_by = self.get_argument("sort_by", "hot") page = abs(int(self.get_argument("page", "1"))) per_page = abs(int(self.get_argument("per_page", "9"))) is_blacklisted = False msg = "success" if self.current_user: is_blacklisted = self.is_blacklisted(self.current_user) post = {} post["slug"] = self.get_argument("slug", None) post["title"] = self.get_argument("title", "") post["url"] = self.get_argument("url", "") post["body_raw"] = self.get_argument("body_raw", "") post["tags"] = self.get_argument("tags", "").split(",") post["featured"] = self.get_argument("featured", "") post["has_hackpad"] = self.get_argument("has_hackpad", "") post["slug"] = self.get_argument("slug", "") if post["has_hackpad"] != "": post["has_hackpad"] = True else: post["has_hackpad"] = False deleted = self.get_argument("deleted", "") if deleted != "": post["deleted"] = True post["date_deleted"] = datetime.now() bypass_dup_check = self.get_argument("bypass_dup_check", "") is_edit = False if post["slug"]: bypass_dup_check = "true" is_edit = True dups = [] # make sure user isn't blacklisted if not self.is_blacklisted(self.current_user): # check if there is an existing URL if post["url"] != "": url = urlparse(post["url"]) netloc = url.netloc.split(".") if netloc[0] == "www": del netloc[0] path = url.path if path and path[-1] == "/": path = path[:-1] url = "%s%s" % (".".join(netloc), path) post["normalized_url"] = url long_url = post["url"] if long_url.find("goo.gl") > -1: long_url = google.expand_url(post["url"]) if long_url.find("bit.ly") > -1 or long_url.find("bitly.com") > -1: long_url = bitly.expand_url( post["url"].replace("http://bitly.com", "").replace("http://bit.ly", "") ) post["domain"] = urlparse(long_url).netloc ok_to_post = True dups = postsdb.get_posts_by_normalized_url(post.get("normalized_url", ""), 1) if post["url"] != "" and len(dups) > 0 and bypass_dup_check != "true": ## ## If there are dupes, kick them back to the post add form ## return self.render("post/new_post.html", post=post, dups=dups) # Handle tags post["tags"] = [t.strip().lower() for t in post["tags"]] post["tags"] = [t for t in post["tags"] if t] userdb.add_tags_to_user(self.current_user, post["tags"]) for tag in post["tags"]: tagsdb.save_tag(tag) # format the content as needed post["body_html"] = sanitize.html_sanitize(post["body_raw"], media=self.current_user_can("post_rich_media")) post["body_text"] = sanitize.html_to_text(post["body_html"]) post["body_truncated"] = sanitize.truncate(post["body_text"], 500) # determine if this should be a featured post or not if self.current_user_can("feature_posts") and post["featured"] != "": post["featured"] = True post["date_featured"] = datetime.now() else: post["featured"] = False post["date_featured"] = None user = userdb.get_user_by_screen_name(self.current_user) if not post["slug"]: # No slug -- this is a new post. # initiate fields that are new post["disqus_shortname"] = settings.get("disqus_short_code") post["muted"] = False post["comment_count"] = 0 post["disqus_thread_id_str"] = "" post["sort_score"] = 0.0 post["downvotes"] = 0 post["hackpad_url"] = "" post["date_created"] = datetime.now() post["user_id_str"] = user["user"]["id_str"] post["username"] = self.current_user post["user"] = user["user"] post["votes"] = 1 post["voted_users"] = [user["user"]] # save it post["slug"] = postsdb.insert_post(post) msg = "success" else: # this is an existing post. # attempt to edit the post (make sure they are the author) saved_post = postsdb.get_post_by_slug(post["slug"]) if saved_post and self.current_user == saved_post["user"]["screen_name"]: # looks good - let's update the saved_post values to new values for key in post.keys(): saved_post[key] = post[key] # finally let's save the updates postsdb.save_post(saved_post) msg = "success" # log any @ mentions in the post mentions = re.findall(r"@([^\s]+)", post["body_raw"]) for mention in mentions: mentionsdb.add_mention(mention.lower(), post["slug"]) # Send email to USVers if OP is staff if self.current_user in settings.get("staff"): subject = 'USV.com: %s posted "%s"' % (self.current_user, post["title"]) if "url" in post and post["url"]: # post.url is the link to external content (if any) post_link = "External Link: %s \n\n" % post["url"] else: post_link = "" post_url = "http://%s/posts/%s" % (settings.get("base_url"), post["slug"]) text = '"%s" ( %s ) posted by %s. \n\n %s %s' % ( post["title"].encode("ascii", errors="ignore"), post_url, self.current_user, post_link, post.get("body_text", ""), ) # now attempt to actually send the emails for u in settings.get("staff"): if u != self.current_user: acc = userdb.get_user_by_screen_name(u) if acc: self.send_email("*****@*****.**", acc["email_address"], subject, text) # Subscribe to Disqus # Attempt to create the post's thread acc = userdb.get_user_by_screen_name(self.current_user) thread_id = 0 try: # Attempt to create the thread. thread_details = disqus.create_thread(post, acc["disqus_access_token"]) thread_id = thread_details["response"]["id"] except: try: # trouble creating the thread, try to just get the thread via the slug thread_details = disqus.get_thread_details(post.slug) thread_id = thread_details["response"]["id"] except: thread_id = 0 if thread_id != 0: # Subscribe a user to the thread specified in response disqus.subscribe_to_thread(thread_id, acc["disqus_access_token"]) # update the thread with the disqus_thread_id_str saved_post = postsdb.get_post_by_slug(post["slug"]) saved_post["disqus_thread_id_str"] = thread_id postsdb.save_post(saved_post) featured_posts = postsdb.get_featured_posts(6, 1) sort_by = "newest" posts = postsdb.get_new_posts(per_page, page) if is_edit: self.redirect("/posts/%s?msg=updated" % post["slug"]) else: self.render( "post/lists_posts.html", sort_by=sort_by, msg=msg, page=page, posts=posts, featured_posts=featured_posts, is_blacklisted=is_blacklisted, new_post=post, dups=dups, )