Пример #1
0
	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
Пример #2
0
 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
Пример #3
0
	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
Пример #4
0
	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
Пример #5
0
	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
Пример #6
0
    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
Пример #7
0
	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 []
Пример #8
0
	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
Пример #9
0
    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}'
Пример #10
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 []
Пример #11
0
	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"}
Пример #12
0
	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))
Пример #13
0
    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"}
Пример #14
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 []
Пример #15
0
	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
Пример #16
0
	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}'
Пример #17
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
Пример #18
0
    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 []