def set_post_group(self, post_id, group_id=None, group_name=None): # BSON ObjectId if type(post_id) == str and re.match(r'[a-z0-9]{24}', post_id): post_id = ObjectId(post_id) if type(post_id) == ObjectId: post_id = [post_id] if type(post_id) == list and (yield self.user_init()): # BSON ObjectId if type(group_id) == str and re.match(r'[a-z0-9]{24}', group_id): group_id = ObjectId(group_id) # create new group if not group_id and group_name: result = yield self.site.db.post_group.insert({ "site_id": self.site_id, "user_id": self.user_id, "name": group_name, "name_seo": function.seo_encode(group_name), "post": post_id, "format": "pg", #post group }) # inset to group else: result = yield self.site.db.post_group.update({ "_id": group_id, "site_id": self.site_id, "format": "pg", },{ "$addToSet": { "post": {"$each": post_id} } }) return result
def post_argv(self, post=None): if post: if 'thumbnail' in post['post']['content'] and post['post'][ 'content']['thumbnail']: content = template.Template( '<img src="{{ picture }}">').generate( picture=post['post']['content']['thumbnail']).decode( "utf-8") elif 'picture' in post['post']['content'] and post['post'][ 'content']['picture']: content = template.Template( '<img src="{{ picture }}">').generate( picture=post['post']['content']['picture']).decode( "utf-8") else: content = "" ### seo title generic ### if 'seo_title' in post['post']: seo_title = post['post']['seo_title'] else: seo_title = function.seo_encode(post['post']['title']) ### link generic ### if 'link' in post['post']: link = post['post']['link'] else: link = "/%s/%s/%s/%s.html" % (self.site.db_site['name'], self.site.db_page['name'], post['_id'], seo_title) ### is public post ### if 'type' in post: action = post['type'] else: action = 'private' ##### argv = { "id": str(post['_id']), "content": content, "link": link, "title": post['post']['title'], "by": post['user']['first_name'] + ' ' + post['user']['last_name'], "view": post['view']['count'] if 'view' in post else 0, "time": post['time'], "action": action, } else: argv = { "id": '{{ id }}', "content": '{{ content }}', "link": '{{ link }}', "title": '{{ title }}', "by": '{{ by }}', "view": '{{ view }}', "time": '{{ time }}', "action": '{{ action }}', } return argv
def post_argv(self, post= None): if post and 'link' in post['post']: if 'thumbnail' in post['post']['picture'] and post['post']['picture']['thumbnail']: picture = template.Template('<img src="{{ picture }}">').generate(picture=post['post']['picture']['thumbnail']).decode("utf-8") elif 'picture' in post['post']['picture'] and post['post']['picture']['full']: picture = template.Template('<img src="{{ picture }}">').generate(picture=post['post']['picture']['full']).decode("utf-8") else: picture = "" ### seo title generic ### if 'seo_title' in post['post']: seo_title = post['post']['seo_title'] else: seo_title = function.seo_encode(post['post']['title']) ### is public post ### if 'type' in post: action = post['type'] else: action = 'private' if action in ["private", "trash"]: time = post['time'] else: time = post['public']['time'] ##### argv = { "id" : str(post['_id']), "picture" : picture, "link" : post['post']['link'], "view" : "%s://%s/%s/%s/%s/%s.html" % (self.site.request.protocol, self.site.request.host, self.site.db_site['name'], self.module['setting']['server']['page_view'], post['_id'], seo_title), "site" : urlparse(post['post']['link']).netloc, "title" : post['post']['title'], "by" : post['user']['first_name'] + ' ' + post['user']['last_name'], "view" : post['view']['count'] if 'view' in post else 0, "time" : time, } else: argv = { "id" : '{{ id }}', "picture" : '{{ picture }}', "link" : '{{ link }}', "view" : '{{ view }}', "site" : '{{ site }}', "title" : '{{ title }}', "by" : '{{ by }}', "view" : '{{ view }}', "time" : '{{ time }}', } return argv
def post_argv(self, post= None): if post: banner = '' if 'safekid' in post['post'] and post['post']['safekid']: content = '<img src="/static/image/safekid.png">' elif 'picture' in post['post']['content']: if 'thumbnail' in post['post']['content'] and 'thumbnail' in self.module['setting']['server'] and self.module['setting']['server']['thumbnail']: picture = post['post']['content']['thumbnail'] elif 'medium' in post['post']['content']: picture = post['post']['content']['medium'] else: picture = post['post']['content']['picture'] content = template.Template('<img src="{{ picture }}">').generate(picture=picture).decode("utf-8") # banner class if 'banner' in post['post'] and post['post']['banner']: banner = "banner" elif 'video' in post['post']['content']: content = template.Template('<div class="video" link="{{ video }}"></div>').generate(video=post['post']['content']['video']).decode("utf-8") else: content = "" ### if 'seo_title' in post['post']: seo_title = post['post']['seo_title'] else: seo_title = function.seo_encode(post['post']['title']) ### argv = { "id" : str(post['_id']), "content" : content, "link" : "%s/%s/%s/%s.html" % (self.site.domain_root, self.module['setting']['server']['page_view'], post['_id'], seo_title), "title" : post['post']['title'], "by" : post['user']['first_name'] + ' ' + post['user']['last_name'], "view" : post['view']['count'] if 'view' in post else 0, "time" : post['public']['time'], "banner" : banner, } else: argv = { "id" : '{{ id }}', "content" : '{{ content }}', "link" : '{{ link }}', "title" : '{{ title }}', "by" : '{{ by }}', "view" : '{{ view }}', "time" : '{{ time }}', "banner" : '{{ banner }}', } return argv
def post_argv(self, post= None): if post: if 'thumbnail' in post['post']['content'] and post['post']['content']['thumbnail']: content = template.Template('<img src="{{ picture }}">').generate(picture=post['post']['content']['thumbnail']).decode("utf-8") elif 'picture' in post['post']['content'] and post['post']['content']['picture']: content = template.Template('<img src="{{ picture }}">').generate(picture=post['post']['content']['picture']).decode("utf-8") else: content = "" ### seo title generic ### if 'seo_title' in post['post']: seo_title = post['post']['seo_title'] else: seo_title = function.seo_encode(post['post']['title']) ### link generic ### if 'link' in post['post']: link = post['post']['link'] else: link = "/%s/%s/%s/%s.html" % (self.site.db_site['name'], self.site.db_page['name'], post['_id'], seo_title) ### is public post ### if 'type' in post: action = post['type'] else: action = 'private' ##### argv = { "id" : str(post['_id']), "content" : content, "link" : link, "title" : post['post']['title'], "by" : post['user']['first_name'] + ' ' + post['user']['last_name'], "view" : post['view']['count'] if 'view' in post else 0, "time" : post['time'], "action" : action, } else: argv = { "id" : '{{ id }}', "content" : '{{ content }}', "link" : '{{ link }}', "title" : '{{ title }}', "by" : '{{ by }}', "view" : '{{ view }}', "time" : '{{ time }}', "action" : '{{ action }}', } return argv
def set_post_group(self, post_id, group_id=None, group_name=None): # BSON ObjectId if type(post_id) == str and re.match(r'[a-z0-9]{24}', post_id): post_id = ObjectId(post_id) if type(post_id) == ObjectId: post_id = [post_id] if type(post_id) == list and (yield self.user_init()): # BSON ObjectId if type(group_id) == str and re.match(r'[a-z0-9]{24}', group_id): group_id = ObjectId(group_id) # create new group if not group_id and group_name: result = yield self.site.db.post_group.insert({ "site_id": self.site_id, "user_id": self.user_id, "name": group_name, "name_seo": function.seo_encode(group_name), "post": post_id, "format": "pg", #post group }) # inset to group else: result = yield self.site.db.post_group.update( { "_id": group_id, "site_id": self.site_id, "format": "pg", }, {"$addToSet": { "post": { "$each": post_id } }}) return result
def _searcher(self, string, find_at, query=None, database=None, count=50, cache=1800): if not self.site_id: self.site_id = self.site.site_db['_id'] if self.site_id: seo_string = function.seo_encode(string[:100]) # default database if not database: database = self.site.db.post # in cache if cache > 0: result = yield self.site.cache.get(source="%s%s" % (seo_string, find_at)) if result and 'data' in result: return result['data'] words = [] word = seo_string # generic keywork while True: if word: words.append(word) if '-' in word: # split right tmp = word.rsplit('-',1)[0] if not tmp in words: words.append(tmp) # split left tmp = word.split('-',1)[1] if not tmp in words: words.append(tmp) word = tmp.rsplit('-',1)[0] continue break # start search if not query: query = {} query['site_id'] = self.site_id search_dict = {} for i, word in enumerate(words, start=1): if len(search_dict) > count: break word = word.strip() if word: # change search query query[find_at] = {'$regex': re.compile(".*" + word + ".*", re.IGNORECASE)} result = yield database.find(query, {"_id": 1}).to_list(length=count) if result: for mv in result: if mv['_id'] not in search_dict: search_dict[mv['_id']] = int(99/i) else: search_dict[mv['_id']] += int(99/i) # sort result sort_dict = {} for k, v in search_dict.items(): if v not in sort_dict: sort_dict[v] = [k] else: sort_dict[v].append(k) result = [x for k in sorted(sort_dict) for x in sort_dict[k]][::-1][:count] # cache store if cache > 0: yield self.site.cache.set(seo_string, result, cache) return result return []
def post_argv(self, post= None): if post and 'post' in post: argv = { "id" : str(post['_id']), "title" : escape.xhtml_escape("%s (%s)" % (post['post']['title'], post['post']['year'])), "subtitle" : escape.xhtml_escape(post['post']['subtitle']), } if 'poster' in post['post']: argv['poster'] = post['post']['poster'] else: argv['poster'] = '' # seo title generic if 'title_seo' in post['post']: title_seo = post['post']['title_seo'] else: title_seo = function.seo_encode('%s-%s-%s' % (post['post']['title'], post['post']['subtitle'], post['post']['year'])) argv["link"] = "%s/%s/%s/%s.html" % (self.site.domain_root, self.module['setting']['server']['page_view'], post['_id'], escape.url_escape(title_seo)) # imdb if 'imdb' in post['post']: argv['imdb'] = post['post']['imdb'] else: argv['imdb'] = 0 # # rating # if 'rating' in post: # # rating = post['rating'] # argv['rating_count'] = int(post['rating']['count']) # argv['rating_average'] = int(post['rating']['average']) # else: # argv['rating_count'] = 0 # argv['rating_average'] = 0 # view count if 'view' in post and 'count' in post['view']: argv['view_count'] = post['view']['count'] else: argv['view_count'] = 0 # length try: argv['length'] = "%s/%s" % (post['post']['length']['current'], post['post']['length']['count']) argv['length_type'] = post['post']['length']['type'] except: argv['length'] = '' argv['length_type'] = 'short' else: argv = { "id" : '{{ id }}', "title" : '{{ title }}', "subtitle" : '{{ subtitle }}', "poster" : '{{ poster }}', "link" : '{{ link }}', # "rating_count" : '{{ rating_count }}', # "rating_average" : '{{ rating_average }}', "view_count" : '{{ view_count }}', "length" : '{{ length }}', "length_type" : '{{ length_type }}', "imdb" : '{{ imdb }}' } return argv
def json(self, argv): post_id = self.site.get_argument('post', None) # if not post_id and argv[0]: # post_id = argv[0] if type(post_id) == str and len(post_id) == 24: post_id = ObjectId(post_id) action = self.site.get_argument('action', None) ### public/private post ### if action == "manager": session = yield self.site.session.get(['user_id']) update_time = int(time() * 1000) if 'user_id' in session: post_is = self.site.get_argument('is', 'private') # public post if post_is == "public": public_time = update_time + int( self.site.get_argument('timestep', 0)) update = yield self.site.db.post.update( { "_id": post_id, 'site_id': self.site.db_site['_id'] }, { "$set": { "type": "public", "public.time": public_time }, "$push": { "public.user": { "user_id": session['user_id'], "time": public_time } } }, upsert=True) if update: return '{"error": 0, "success": "public sucessful!"}' # private post elif post_is == "private": update = yield self.site.db.post.update( { "_id": post_id, 'site_id': self.site.db_site['_id'] }, { "$set": { "type": "private", "private.time": update_time }, "$push": { "private.user": { "user_id": session['user_id'], "time": update_time } } }, upsert=True) if update: return '{"error": 0, "success": "private sucessful!"}' # trash post elif post_is == "trash": update = yield self.site.db.post.update( { "_id": post_id, 'site_id': self.site.db_site['_id'] }, { "$set": { "type": "trash", "trash.time": update_time }, "$push": { "trash.user": { "user_id": session['user_id'], "time": update_time } } }, upsert=True) if update: return '{"error": 0, "success": "trafunction.seo_encodesh sucessful!"}' # restore post elif post_is == "restore": update = yield self.site.db.post.update( { "_id": post_id, 'site_id': self.site.db_site['_id'] }, {"$set": { "type": "private" }}) if update: return '{"error": 0, "success": "restore sucessful!"}' # edit post elif post_is == "edit": post_title = self.site.get_argument('p_title', None) post_note = self.site.get_argument('p_note', "") post_source = self.site.get_argument('p_source', "") post_safekid = self.site.get_argument('p_safekid', False) if post_safekid == "true": post_safekid = True else: post_safekid = False if post_title: update = yield self.site.db.post.update( { "_id": post_id, 'site_id': self.site.db_site['_id'] }, { "$set": { "post.title": post_title, "post.seo_title": function.seo_encode(post_title), "post.note": post_note, "post.source": post_source, "post.safekid": post_safekid } }) if update: return '{"error": 0, "success": "edit sucessful!"}' # delete post elif post_is == "delete": post = yield self.site.db.post.find_one( { "_id": post_id, 'site_id': self.site.db_site['_id'], "type": "trash" }, {"post": 1}) if post: list_file = [] ### old version if 'content' in post['post']: if 'picture' in post['post']['content']: if post['post']['content']['picture'][ 0] == '/': list_file.append( 'site' + post['post']['content']['picture']) if 'thumbnail' in post['post']['content']: if post['post']['content']['thumbnail'][ 0] == '/': list_file.append( 'site' + post['post']['content']['thumbnail']) if 'medium' in post['post']['content']: if post['post']['content']['medium'][0] == '/': list_file.append( 'site' + post['post']['content']['medium']) for pic in list_file: if os.path.isfile(pic): try: os.remove(pic) except Exception as e: raise e post = yield self.site.db.post.remove({ "_id": post_id, 'site_id': self.site.db_site['_id'], "type": "trash" }) if post: return '{"error": 0, "success": "delete sucessful!"}' elif action == "edit": post = yield self.site.db.post.find_one({'_id': post_id}, {'post': 1}) if not 'safekid' in post['post']: post['post']['safekid'] = False return { "post": { 'title': post['post']['title'], 'note': post['post']['note'], 'source': post['post']['source'], 'safekid': post['post']['safekid'] } } else: ### get post content ### post_time = self.site.get_argument('time', None) post_view = self.site.get_argument('view', None) post_tab = self.site.get_argument('tab', "new") post_count = int(self.site.get_argument('count', 10)) posts = yield self.post_json(post_id=post_id, post_time=post_time, post_tab=post_tab, post_view=post_view, post_count=post_count) posts_argv = [] for post in posts: posts_argv.append(self.post_argv(post)) return {"post": posts_argv, "form": {"tab": post_tab}} return '{"error": 1, "success": 0}'
def _searcher(self, string, find_at, query ={}, database=None, count=50, cache=1800): if not self.site_id: self.site_id = self.site.site_db['_id'] if self.site_id: seo_string = function.seo_encode(string) # default database if not database: database = self.site.db.post # in cache if cache > 0: result = yield self.site.cache.get(source="%s%s" % (seo_string, find_at)) if result: return result words = [] word = seo_string # generic keywork while True: if not word in words: words.append(word) if '-' in word: word = word.rsplit('-',1)[0] else: break word = seo_string while True: if word and not word in words: words.append(word) if '-' in word: word = word.split('-',1)[1] else: break # start search if not 'site_id' in query: query['site_id'] = self.site_id search_dict = {} search_future = [] for word in words: word = word.strip() if len(word) > 0: # change search query query[find_at] = {'$regex': re.compile(".*" + word + ".*", re.IGNORECASE)} search_future.append(database.find(query, {"_id": 1}).to_list(length=count)) search_result = yield gen.multi_future(search_future) for result in search_result: if result: for mv in result: if mv['_id'] not in search_dict: search_dict[mv['_id']] = 1 else: search_dict[mv['_id']] += 1 # sort result sort_dict = {} for k, v in search_dict.items(): if v not in sort_dict: sort_dict[v] = [k] else: sort_dict[v].append(k) result = [x for s in sort_dict.values() for x in s][::-1][:count] # cache store if cache > 0: yield self.site.cache.set(seo_string, result, cache) return result return []
def json(self, argv): session = yield self.site.session.get(['user_id']) if 'user_id' in session: title = self.site.get_argument("title", None) if title: source = self.site.get_argument("source", "") note = self.site.get_argument("note", "") link = self.site.get_argument("link", None) image = self.site.get_argument("image", None) safekid = self.site.get_argument("safekid", False) content = {} if safekid == "on": safekid = True ### if 'file' in self.site.request.files or image: site_dir = "site/%s/static/upload/" % self.site.db_site['_id'] site_link = "/%s/static/upload/" % self.site.db_site['_id'] if not os.path.exists(site_dir): os.makedirs(site_dir) ### if image: try: exten = '.' + urlparse(image).path.rsplit('.', 1)[1] except Exception as e: exten = '.jpg' else: file = self.site.request.files['file'][0] exten = os.path.splitext(file['filename'])[1] ### generic name while True: post_pic = str(hashlib.md5((str(time.time())).encode('ascii', 'replace')).hexdigest()) if not os.path.exists(pic_path): break thumb_name = "%s_t.jpg" % (post_pic) thumb_path = site_dir + thumb_name ### get image if image: self.image_download(image, pic_path, thumb_path) else: self.image_upload(file, pic_path, thumb_path) content['thumbnail'] = site_link + thumb_name seo_title = function.seo_encode(title) if len(content) > 0: ###### insert database format = "sl" site_id = self.site.db_site['_id'] user_id = session['user_id'] insert = yield self.site.db.post.insert( { "site_id" : site_id, "user_id" : user_id, "tags" : [ ], "type": "private", "post" : { "link": link, "note": note, "source": source, "format": format, "title" : title, "seo_title": seo_title, "picture" : content, "safekid": safekid }, "like" : { "count" : 0, "data" : [ ] }, "view": {"count": 0, "user": []}, "time" : int(time.time()*1000), "ip" : self.site.request.remote_ip } ) # if insert: # return self.site.redirect('/%s/%s/%s/%s.html' % (self.site.db_site['name'],self.module['setting']['server']['view_page'], insert, seo_title)) return {"post": "OK"}
def json(self, argv): session = yield self.site.session.get(['user_id']) if 'user_id' in session: title = self.site.get_argument("title", None) if title: source = self.site.get_argument("source", "") note = self.site.get_argument("note", "") link = self.site.get_argument("link", None) safekid = self.site.get_argument("safekid", False) content = {} hide_banner = False if safekid == "on": safekid = True ### if link and len(link.split('youtube.com/watch?v=')) > 1: content['video'] = link format = "bv" elif 'file' in self.site.request.files or link: site_dir = "site/%s/static/upload/" % self.site.db_site['_id'] site_link = "/%s/static/upload/" % self.site.db_site['_id'] if not os.path.exists(site_dir): os.makedirs(site_dir) ### if link: format = "bl" try: exten = '.' + urlparse(link).path.rsplit('.', 1)[1] except Exception as e: exten = '.jpg' else: format = "bi" file = self.site.request.files['file'][0] exten = os.path.splitext(file['filename'])[1] ### generic name while True: post_pic = str(hashlib.md5((str(time.time())).encode('ascii', 'replace')).hexdigest()) pic_name = post_pic + exten pic_path = site_dir + pic_name if not os.path.exists(pic_path): break thumb_name = "%s_t.jpg" % (post_pic) thumb_path = site_dir + thumb_name medium_name = "%s_m.jpg" % (post_pic) medium_path = site_dir + medium_name picture_name = "%s_l.jpg" % (post_pic) picture_path = site_dir + picture_name ### get image image_path = { "thumb" : [thumb_path, (120, 120)], "medium" : [medium_path, 400], } if exten != '.gif': hide_banner = True image_path["large"] = [picture_path, 800] else: picture_name = pic_name if link: self.image_download(link, pic_path, image_path) else: self.image_upload(file, pic_path, image_path) content['picture'] = site_link + picture_name content['thumbnail'] = site_link + thumb_name content['medium'] = site_link + medium_name seo_title = function.seo_encode(title) if len(content) > 0 and format: ###### insert database site_id = self.site.db_site['_id'] user_id = session['user_id'] insert = yield self.site.db.post.insert( { "site_id" : site_id, "user_id" : user_id, "tags" : [ ], "type": "private", "post" : { "note": note, "source": source, "format": format, "title" : title, "seo_title": seo_title, "content" : content, "safekid": safekid, "banner": hide_banner }, "like" : { "count" : 0, "data" : [ ] }, "view": {"count": 0, "user": []}, "time" : int(time.time()*1000), "ip" : self.site.request.remote_ip } ) if insert: return self.site.redirect('/%s/%s/%s/%s.html' % (self.site.db_site['name'],self.module['setting']['server']['view_page'], insert, seo_title))
def json(self, argv): session = yield self.site.session.get(['user_id']) if 'user_id' in session: title = self.site.get_argument("title", None) if title: source = self.site.get_argument("source", "") note = self.site.get_argument("note", "") link = self.site.get_argument("link", None) image = self.site.get_argument("image", None) safekid = self.site.get_argument("safekid", False) content = {} if safekid == "on": safekid = True ### if 'file' in self.site.request.files or image: site_dir = "site/%s/static/upload/" % self.site.db_site[ '_id'] site_link = "/%s/static/upload/" % self.site.db_site['_id'] if not os.path.exists(site_dir): os.makedirs(site_dir) ### if image: try: exten = '.' + urlparse(image).path.rsplit('.', 1)[1] except Exception as e: exten = '.jpg' else: file = self.site.request.files['file'][0] exten = os.path.splitext(file['filename'])[1] ### generic name while True: post_pic = str( hashlib.md5((str(time.time())).encode( 'ascii', 'replace')).hexdigest()) if not os.path.exists(pic_path): break thumb_name = "%s_t.jpg" % (post_pic) thumb_path = site_dir + thumb_name ### get image if image: self.image_download(image, pic_path, thumb_path) else: self.image_upload(file, pic_path, thumb_path) content['thumbnail'] = site_link + thumb_name seo_title = function.seo_encode(title) if len(content) > 0: ###### insert database format = "sl" site_id = self.site.db_site['_id'] user_id = session['user_id'] insert = yield self.site.db.post.insert({ "site_id": site_id, "user_id": user_id, "tags": [], "type": "private", "post": { "link": link, "note": note, "source": source, "format": format, "title": title, "seo_title": seo_title, "picture": content, "safekid": safekid }, "like": { "count": 0, "data": [] }, "view": { "count": 0, "user": [] }, "time": int(time.time() * 1000), "ip": self.site.request.remote_ip }) # if insert: # return self.site.redirect('/%s/%s/%s/%s.html' % (self.site.db_site['name'],self.module['setting']['server']['view_page'], insert, seo_title)) return {"post": "OK"}
def _searcher(self, string, find_at, query={}, database=None, count=50, cache=1800): if not self.site_id: self.site_id = self.site.site_db['_id'] if self.site_id: seo_string = function.seo_encode(string) # default database if not database: database = self.site.db.post # in cache if cache > 0: result = yield self.site.cache.get(source="%s%s" % (seo_string, find_at)) if result: return result words = [] word = seo_string # generic keywork while True: if not word in words: words.append(word) if '-' in word: word = word.rsplit('-', 1)[0] else: break word = seo_string while True: if word and not word in words: words.append(word) if '-' in word: word = word.split('-', 1)[1] else: break # start search if not 'site_id' in query: query['site_id'] = self.site_id search_dict = {} search_future = [] for word in words: word = word.strip() if len(word) > 0: # change search query query[find_at] = { '$regex': re.compile(".*" + word + ".*", re.IGNORECASE) } search_future.append( database.find(query, { "_id": 1 }).to_list(length=count)) search_result = yield gen.multi_future(search_future) for result in search_result: if result: for mv in result: if mv['_id'] not in search_dict: search_dict[mv['_id']] = 1 else: search_dict[mv['_id']] += 1 # sort result sort_dict = {} for k, v in search_dict.items(): if v not in sort_dict: sort_dict[v] = [k] else: sort_dict[v].append(k) result = [x for s in sort_dict.values() for x in s][::-1][:count] # cache store if cache > 0: yield self.site.cache.set(seo_string, result, cache) return result return []
def post_argv(self, post= None): if post: ##### if 'picture' in post['post']['content']: content = template.Template('<img src="{{ picture }}">').generate(picture=post['post']['content']['picture']).decode("utf-8") elif 'video' in post['post']['content']: content = template.Template('<div class="video" link="{{ video }}"></div>').generate(video=post['post']['content']['video']).decode("utf-8") else: content = "" ##### if 'type' in post and post['type'] == 'private': warning = "Bài viết đang được chờ kiểm duyệt, bạn thông cảm nhé :)" else: warning = "" ##### if 'note' in post['post']['content']: # old version argv = { "id" : str(post['_id']), "content" : content, "note" : escape.xhtml_escape(post['post']['content']['note']), "link" : "%s://%s/%s/%s/%s/%s.html" % (self.site.request.protocol, self.site.request.host, self.site.db_site['name'], self.site.db_page['name'], post['_id'], function.seo_encode(post['post']['title'])), "title" : escape.xhtml_escape(post['post']['title']), "source" : escape.xhtml_escape(post['post']['content']['source']), "time" : post['time'], "user.name" : post['user']['first_name'] + ' ' + post['user']['last_name'], "user.picture" : post['user']['picture'], "warning" : warning, "banner" : '' } else: # newversion argv = { "id" : str(post['_id']), "content" : content, "note" : escape.xhtml_escape(post['post']['note']), "link" : "%s://%s/%s/%s/%s/%s.html" % (self.site.request.protocol, self.site.request.host, self.site.db_site['name'], self.site.db_page['name'], post['_id'], function.seo_encode(post['post']['title'])), "title" : escape.xhtml_escape(post['post']['title']), "source" : escape.xhtml_escape(post['post']['source']), "time" : post['time'], "user.name" : post['user']['first_name'] + ' ' + post['user']['last_name'], "user.picture" : post['user']['picture'], "warning" : warning, "banner" : "banner" if 'banner' in post['post'] and post['post']['banner'] else '', } else: argv = { "id" : '{{ id }}', "content" : '{{ content }}', "note" : '{{ note }}', "link" : '{{ link }}', "title" : '{{ title }}', "source" : '{{ source }}', "time" : '{{ time }}', "user.name" : '{{ user.name }}', "user.picture" : '{{ user.picture }}', "warning" : '{{ warning }}', "banner" : '{{ banner }}', } return argv
def json(self, argv): post_id = self.site.get_argument('post', None) # if not post_id and argv[0]: # post_id = argv[0] if type(post_id) == str and len(post_id) == 24: post_id = ObjectId(post_id) action = self.site.get_argument('action', None) ### public/private post ### if action == "manager": session = yield self.site.session.get(['user_id']) update_time = int(time()*1000); if 'user_id' in session: post_is = self.site.get_argument('is', 'private') # public post if post_is == "public": public_time = update_time + int(self.site.get_argument('timestep', 0)) update = yield self.site.db.post.update( {"_id": post_id, 'site_id': self.site.db_site['_id']}, { "$set": { "type": "public", "public.time": public_time}, "$push": { "public.user": { "user_id": session['user_id'], "time": public_time } } }, upsert=True ) if update: return '{"error": 0, "success": "public sucessful!"}' # private post elif post_is == "private": update = yield self.site.db.post.update( {"_id": post_id, 'site_id': self.site.db_site['_id']}, { "$set": { "type": "private", "private.time": update_time}, "$push": { "private.user": { "user_id": session['user_id'], "time": update_time } } }, upsert=True ) if update: return '{"error": 0, "success": "private sucessful!"}' # trash post elif post_is == "trash": update = yield self.site.db.post.update( {"_id": post_id, 'site_id': self.site.db_site['_id']}, { "$set": { "type": "trash", "trash.time": update_time}, "$push": { "trash.user": { "user_id": session['user_id'], "time": update_time } } }, upsert=True ) if update: return '{"error": 0, "success": "trafunction.seo_encodesh sucessful!"}' # restore post elif post_is == "restore": update = yield self.site.db.post.update( {"_id": post_id, 'site_id': self.site.db_site['_id']}, { "$set": {"type": "private"} } ) if update: return '{"error": 0, "success": "restore sucessful!"}' # edit post elif post_is == "edit": post_title = self.site.get_argument('p_title', None) post_note = self.site.get_argument('p_note', "") post_source = self.site.get_argument('p_source', "") post_safekid = self.site.get_argument('p_safekid', False) if post_safekid == "true": post_safekid = True else: post_safekid = False if post_title: update = yield self.site.db.post.update( {"_id": post_id, 'site_id': self.site.db_site['_id']}, {"$set": { "post.title" : post_title, "post.seo_title" : function.seo_encode(post_title), "post.note" : post_note, "post.source" : post_source, "post.safekid" : post_safekid } } ) if update: return '{"error": 0, "success": "edit sucessful!"}' # delete post elif post_is == "delete": post = yield self.site.db.post.find_one( {"_id": post_id, 'site_id': self.site.db_site['_id'], "type": "trash"}, {"post": 1} ) if post: list_file = [] ### old version if 'content' in post['post']: if 'picture' in post['post']['content']: if post['post']['content']['picture'][0] == '/': list_file.append('site' + post['post']['content']['picture']) if 'thumbnail' in post['post']['content']: if post['post']['content']['thumbnail'][0] == '/': list_file.append('site' + post['post']['content']['thumbnail']) if 'medium' in post['post']['content']: if post['post']['content']['medium'][0] == '/': list_file.append('site' + post['post']['content']['medium']) for pic in list_file: if os.path.isfile(pic): try: os.remove(pic) except Exception as e: raise e post = yield self.site.db.post.remove({"_id": post_id, 'site_id': self.site.db_site['_id'], "type": "trash"}) if post: return '{"error": 0, "success": "delete sucessful!"}' elif action == "edit": post = yield self.site.db.post.find_one({'_id': post_id}, {'post': 1}) if not 'safekid' in post['post']: post['post']['safekid'] = False return {"post": { 'title' : post['post']['title'], 'note' : post['post']['note'], 'source' : post['post']['source'], 'safekid' : post['post']['safekid'] } } else: ### get post content ### post_time = self.site.get_argument('time', None) post_view = self.site.get_argument('view', None) post_tab = self.site.get_argument('tab', "new") post_count = int(self.site.get_argument('count', 10)) posts = yield self.post_json(post_id= post_id, post_time= post_time, post_tab= post_tab, post_view= post_view, post_count= post_count) posts_argv = [] for post in posts: posts_argv.append(self.post_argv(post)) return {"post": posts_argv, "form": {"tab": post_tab}} return '{"error": 1, "success": 0}'
def set_movie_info(self, data, mv_id=None): try: if (yield self.user_init()): # update movie if mv_id: if type(mv_id) == str and re.match(r'[a-z0-9]{24}', mv_id): mv_id = ObjectId(mv_id) query = {} if 'title' in data: query['post.title'] = data['title'] if 'subtitle' in data: query['post.subtitle'] = data['subtitle'] if 'source' in data: if type(data['source']) == list: query['post.source'] = data['source'] else: query['post.source'] = [x.strip() for x in data['source'].strip().split('\n')] if 'poster' in data: query['post.poster'] = data['poster'] if 'director' in data: if type(data['director']) == list: query['post.director'] = data['director'] else: query['post.director'] = [x.strip() for x in data['director'].strip().split('\n')] if 'stars' in data: if type(data['stars']) == list: query['post.stars'] = data['stars'] else: query['post.stars'] = [x.strip() for x in data['stars'].strip().split('\n')] if 'country' in data: query['post.country'] = data['country'] if 'year' in data: query['post.year'] = data['year'] if 'category' in data: if type(data['category']) == list: query['post.category'] = data['category'] else: query['post.category'] = [x.strip() for x in data['category'].strip().split('\n')] query['post.trailer'] = [] if 'trailer' in data: if type(data['trailer']) == str: data['trailer'] = [x.strip() for x in data['trailer'].strip().split('\n')] if type(data['trailer']) == list: regex = re.compile("(\?v\=|\/v\/|\.be\/)(.*?)(\?|&|#|$)") for t in data['trailer']: if not '/embed/' in t: r = regex.search(t) if r: t = 'https://www.youtube.com/embed/%s' % r.groups()[1] query['post.trailer'].append(t) if 'image' in data: if type(data['image']) == list: query['post.image'] = data['image'] else: query['post.image'] = [x.strip() for x in data['image'].strip().split('\n')] if 'description' in data: query['post.description'] = data['description'] if 'length' in data: try: query['post.length'] = escape.json_decode(data['length']) except Exception as e: query['post.length'] = data['length'] if 'imdb' in data: try: query['post.imdb'] = float(data['imdb']) except: pass ### update seo title if 'title_seo' in data: query['post.title_seo'] = data['title_seo'] elif all(x in query for x in ['title', 'subtitle', 'year']): query['post.title_seo'] = function.seo_encode('%s-%s-%s' % (data['title'], data['subtitle'], data['year'])) # updater information # print(query) current_time = int(time()*1000) ### update database update = yield self.db.update( {"_id": mv_id, 'site_id': self.site_id, 'format': 'mv'}, { "$set": query, "$push":{ "update": { "id" : self.user_id, "time" : current_time, "ip" : self.site.request.remote_ip } } }, upsert=True ) if 'n' in update and update['n'] == 1: return mv_id # insert movie else: if 'title' in data: query = { 'safekid' : False, 'title' : data['title'], 'subtitle' : data['subtitle'] if 'subtitle' in data else '', 'source' : data['source'] if 'source' in data else [], 'poster' : data['poster'] if 'subtitle' in data else '', 'director' : data['director'] if 'director' in data else [], 'stars' : data['stars'] if 'stars' in data else [], 'country' : data['country'] if 'country' in data else '', 'year' : data['year'] if 'year' in data else '', 'trailer' : data['trailer'] if 'trailer' in data else [], 'image' : data['image'] if 'image' in data else [], 'category' : data['category'] if 'category' in data else [], 'description' : data['description'] if 'description' in data else '', 'length' : data['length'] if 'length' in data else {}, 'imdb' : data['imdb'] if 'imdb' in data else '', 'chap' : [] } query['title_seo'] = function.seo_encode('%s-%s-%s' % (data['title'], data['subtitle'], data['year'])) if type(query['source']) == str: query['source'] = [x.strip() for x in query['source'].strip().split('\n')] if type(query['director']) == str: query['director'] = [x.strip() for x in query['director'].strip().split('\n')] if type(query['stars']) == str: query['stars'] = [x.strip() for x in query['stars'].strip().split('\n')] if type(query['category']) == str: query['category'] = [x.strip() for x in query['category'].strip().split('\n')] if type(query['imdb']) == str: try: query['imdb'] = float(query['imdb']) except: pass ### insert database current_time = int(time()*1000) insert = yield self.db.insert( { "site_id" : self.site_id, 'format' : "mv", "post" : query, "like" : {"count": 0,"info": []}, "view" : {"count": 0,"info": []}, "access" : { "type" : "private", "time" : current_time, "info" : [] }, "owner" : { "id" : self.user_id, "time" : current_time, "ip" : self.site.request.remote_ip }, "tag" : [], "rating" : { "sum" : 0, "count" : 0, "average" : 0, "user" : [] } } ) return insert except Exception as e: traceback.print_exc(file=sys.stdout) return None
def _searcher(self, string, find_at, query=None, database=None, count=50, cache=1800): if not self.site_id: self.site_id = self.site.site_db['_id'] if self.site_id: seo_string = function.seo_encode(string[:100]) # default database if not database: database = self.site.db.post # in cache if cache > 0: result = yield self.site.cache.get(source="%s%s" % (seo_string, find_at)) if result and 'data' in result: return result['data'] words = [] word = seo_string # generic keywork while True: if word: words.append(word) if '-' in word: # split right tmp = word.rsplit('-', 1)[0] if not tmp in words: words.append(tmp) # split left tmp = word.split('-', 1)[1] if not tmp in words: words.append(tmp) word = tmp.rsplit('-', 1)[0] continue break # start search if not query: query = {} query['site_id'] = self.site_id search_dict = {} for i, word in enumerate(words, start=1): if len(search_dict) > count: break word = word.strip() if word: # change search query query[find_at] = { '$regex': re.compile(".*" + word + ".*", re.IGNORECASE) } result = yield database.find(query, { "_id": 1 }).to_list(length=count) if result: for mv in result: if mv['_id'] not in search_dict: search_dict[mv['_id']] = int(99 / i) else: search_dict[mv['_id']] += int(99 / i) # sort result sort_dict = {} for k, v in search_dict.items(): if v not in sort_dict: sort_dict[v] = [k] else: sort_dict[v].append(k) result = [x for k in sorted(sort_dict) for x in sort_dict[k]][::-1][:count] # cache store if cache > 0: yield self.site.cache.set(seo_string, result, cache) return result return []