Esempio n. 1
0
def ajax_tag():
	client = init()
	tags = request.forms.tags
	name = request.forms.name
	if name:
		try:
			type = request.forms.type
			client.add_tag(tag_clean(name), type)
			tags = name
		except Exception:
			msg = u'Failed to create'
	m = request.forms.m.split()
	full = set()
	weak = set()
	remove = set()
	failed = []
	for t in tags.split():
		tag = client.find_tag(tag_clean(t))
		if tag:
			p = tag_prefix(t)
			if p == "~":
				weak.add(tag)
			elif p == "-":
				remove.add(tag)
			else:
				full.add(tag)
		else:
			failed.append(t)
	res = {}
	msg = u''
	if full or weak or remove:
		client.begin_transaction()
		for p in map(client.get_post, m):
			if not p:
				msg = u'Posts missing?'
			elif tag_post(p, full, weak, remove):
				p = client.get_post(p.md5)
				res[p.md5] = tags_as_html(p)
		client.end_transaction()
	if not res and not msg and not failed and not (name and name[0] == '-'):
		msg = u'Nothing to do?'
	
	res = dict(failed=u' '.join(failed), m=res, msg=msg)
	if failed:
		res["types"] = tagtypes()
	return res
Esempio n. 2
0
def r_search():
	data = globaldata()
	client = init()
	def parse_tag(name):
		res = client.parse_tag(name, comparison=True)
		if res:
			guid, cmp, val = res
			tag = client.get_tag(guid, with_prefix=True)
			return (tag, cmp, val)
	try:
		page = max(0, int(request.query.page))
	except Exception:
		page = 0
	q = request.query.q.strip()
	data.tagnames = qa = q.split()
	data.tags = map(parse_tag, qa)
	data.q = q = u' '.join(qa)
	data.cloud = []
	data.result_count = 0
	ta = []
	for i, (tag, cmp, val) in enumerate(filter(None, data.tags)):
		if cmp:
			qa[i] = tag_prefix(qa[i]) + tag.name
		ta.append((tag, cmp, val))
	if ta or not q:
		if data.user and request.query.ALL:
			range = [0, 1 << 31 - 1]
			page = -1
		else:
			range = [per_page * page, per_page * page + per_page - 1]
		order = "aaaaaa-aaaac8-faketg-bddate"
		if ta and ta[0][0].ordered:
			order = "group"
		props = DotDict()
		ga = [(t.pguid, cmp, val) for t, cmp, val in ta]
		posts = client.search_post(guids=ga, order=order, range=range, wanted=wanted, props=props)
		print "mm"
		if posts:
			data.posts = posts
			data.result_count = props.result_count
			data.page = page
			data.pagelink = makelink(u'search', (u'q', q))
			data.pages, data.rels = pagelinks(data.pagelink, page, data.result_count)
			data.cloud = tagcloud(ga)
	return data
Esempio n. 3
0
def r_post_tag():
	client = init()
	m = request.forms.post
	post = client.get_post(m)
	tags = request.forms.tags
	create = [a.decode("utf-8") for a in request.forms.getall("create")]
	ctype  = [a.decode("utf-8") for a in request.forms.getall("ctype")]
	full = set()
	weak = set()
	remove = set()
	failed = []
	
	for n, t in zip(create, ctype):
		if t:
			client.add_tag(tag_clean(n), t)
			tags += u' ' + n
	for t in tags.split():
		tag = client.find_tag(tag_clean(t))
		if tag:
			p = tag_prefix(t)
			if p == "~":
				weak.add(tag)
			elif p == "-":
				remove.add(tag)
			else:
				full.add(tag)
		else:
			failed.append(t)
	
	tag_post(post, full, weak, remove)
	
	if not failed:
		redirect("post/" + m)
	
	data = globaldata()
	data.tagtypes = tagtypes()
	data.failed = failed
	data.m = m
	return data