예제 #1
0
def subscribe(request, doc):
	if 'mail_sent' in doc:
		return
	doc['mail_sent'] = 1
	request.db.doc.save(doc)
	t = check_type_subscribe(doc)
	cond = {'doc_type':'des:users', 'subscription.'+t:'true'}
	try:
		if t == 'sub_answ_comm': cond['_id'] = doc['doc']['parent_comm']
	except: cond['_id'] = '_'
	author = get_doc(doc['doc']['user'])
	title = ''
	if 'title' in doc['doc']: title = ct(request, doc['doc']['title'])
	for res in request.db.doc.find(cond):
		if not 'mail' in res['doc']: continue
		to = res['doc']['mail']
		dom = get_settings('domain')
		if t == 'sub_answ_comm':
			link = 'http://'+dom+'/news/'+doc['doc']['owner']+'#comm_'+str(doc['doc']['comm_id'])
			text = u"""<html><head></head><body>
			<p>Пользователь {0} оставил ответ на ваш комментарий. Можете просмотреть по адресу {1}
			</p></body></html>""".format( ct(request, author['doc']['name']), link)
		else:
			link = 'http://'+dom+'/news/'+doc['doc']['rev']
			text = u"""<html><head></head><body>
			<p>Пользователь {0} разместил новый материал. <a href="{0}"><b>{2}</b></a></p>
			<p>Можете просмотреть по адресу {1} </p></body></html>""".format( ct(request, author['doc']['name']), link, title)
		from core.core import route_mail
		route_mail(request, to, u'Новые материалы на сайте '+dom, text)
예제 #2
0
def notify_admin(request, doc):
	if 'mail_admin_sent' in doc: return
	doc['mail_admin_sent'] = 1
	request.db.doc.save(doc)
	author = get_doc(request, doc['doc']['user'])
	author_name = ct(request, author['doc']['name']) if author else u'Аноним'
	from core.core import get_admin
	try:
		to = get_admin(request, True)['doc']['mail']
		text = ''
		domain = get_settings('domain')
		if get_const_value(request, 'only_closed_news', 'false') == 'true':
			if doc['doc_type'] == 'des:obj' and (not 'accept' in author['doc'] or author['doc']['accept'] == 'false'):
				link = 'http://'+domain+'/news/'+doc['doc']['rev']
				text = 'Не удостовереный Пользователь {0} разместил новый материал. Можете просмотреть по адресу {1}'.format( ct(request, author['doc']['name']), link)
		else:
			if doc['doc_type'] == 'des:comments':
				link = 'http://'+domain+'/news/'+doc['doc']['owner']+'#comm_'+str(doc['doc']['comm_id'])
				text = u'Пользователь {0} оставил комментарий. Можете просмотреть по адресу {1}'.format(request, author_name, link)
			else:
				link = 'http://'+domain+'/news/'+doc['doc']['rev']
				text = u'Пользователь {0} разместил новый материал. Можете просмотреть по адресу {1}'.format( ct(request, author['doc']['name']), link)
		from core.core import route_mail
		if text:
			route_mail(request, to, u'Новые материалы на сайте '+domain, text)
	except:
		pass
예제 #3
0
def update_row_(request, proc_id, doc_id, data, parent, noscript=True, no_synh=False, accept_def=False, no_notify=False):
	"""
	:param nouscript:  удаляет теги и стили из текста вроде
	:param no_synh:    не синхронизирует с фейсбуком
	:param accept_def: не публикует документ автоматически, нужно для всяких парсеров
	:param no_notify:
	:return: json format doc[id] proc_id   doc_ = {'body':wiki(body), 'date':date, 'title':title }
	"""

	print('parent', parent)

	doc_meta = get_mt(request, proc_id)
	meta_table = doc_meta['doc']
	doc = get_doc(request, doc_id)
	doc_parent = get_doc(request, parent) if parent != '_' else None
	user = request.db.doc.find_one({'_id':doc['doc']['user']})
	old_row = dict(doc['doc']) # doc из документа который создан create_empty_row_
	#=============================================================================================================================
	for field in meta_table:  # инициализируем поля и устраняем всякие глюки если чегото нет
		if 'is_translate' in field and (field['is_translate'] == True or field['is_translate'] == "true"):
			if not field['id'] in doc["doc"] or type(doc['doc'][field['id']]) != dict: # если в старой записи нет поля или оно не словарь
				doc["doc"][field['id']] = {}
			if not field['id'] in data:  # этот иф можно закоментировать     проверить     если поля нет в новой записи
				data[field['id']] = old_row[field['id']][cur_lang(request)] if field['id'] in old_row and old_row[field['id']] and cur_lang(request) in old_row[field['id']] else ''
			doc["doc"][field['id']][cur_lang(request)] = data[field['id']]
		else:
			if field['oncreate'] == 'edit':
				if not field['id'] in data:
					data[field['id']] = ''
				else:
					doc["doc"][field['id']] = data[field['id']]

	#===================================================================================================================
	if 'body' in doc['doc']:    # очищаем  боди от всякой ерунды
		text = doc['doc']['body'][cur_lang(request)] if  type(doc['doc']['body']) == dict else doc['doc']['body']
		text = re.sub(r'<!--(.|\n)*?-->', '', text)
#		if noscript or True: #==========================================================================================
		if noscript and not is_admin(request):
			text = no_script(text, True)
		if type(doc['doc']['body'] ) == dict:
			doc['doc']['body'][cur_lang(request)] = text
		else: doc['doc']['body'] = text

	#===================================================================================================================
	# if res == 'ok':  # если поле
	doc['doc_type'] = proc_id
#		if not is_admin:


	#сохранение единственого материала для отображения единственого автора в колонке
	if 'last_art' in doc['doc'] and  doc['doc']['last_art'] == 'true':
		for res in request.db.doc.find({'doc_type':proc_id, 'doc.user':doc['doc']['user'], 'doc.last_art':'true'}):
#			for res in db.doc.find({'doc_type':{'$ne':':'}, 'doc.user':doc['doc']['user'], 'doc.last_art':'true'}):
			res['doc']['last_art'] = 'false'
			request.db.doc.save(res)
	#сохранение для разрешенного пользователя
	if is_admin(request) or accept_def or proc_id == 'des:obj' and 'accept' in user['doc'] and user['doc']['accept'] == 'true':
		doc['doc']['accept'] = 'true'
	else: doc['doc']['accept'] = 'false'

	save_auto_tags(request, doc,'tags_'+proc_id[4:]) # автоопределение тегов  получаем текст и сравниваем его с с теми тегами которые уже есть и вычленяем их из него
	save_tags(request, doc, 'tags_'+proc_id[4:])

	#сохранение для разрешенного пользователя
	if accept_def or proc_id == 'des:obj' and 'primary' in user['doc'] and user['doc']['primary'] == 'true':
		doc['doc']['primary'] = 'true'
	else: doc['doc']['primary'] = 'false'

	if 'parent_id' in data and data['parent_id']:
		parent_id = data['parent_id']
		# Удаляем из старого родителя
		request.db.doc.update({'child':{'$in':[doc_id]}}, {'$pull':{'child':doc_id}})
		# Добавляем в нового родителя
		# if parent_id !='_': db.doc.update({'_id':parent_id}, {'$push':{'child':doc_id}})
		request.db.doc.update({'_id':parent_id}, {'$push':{'child':doc_id}})
		# Добавляем себе нового родителя
		doc['parent'] = parent_id
	else:
		doc['parent'] = parent
		if doc_parent: # тут мы получили родительский документ и смотрим если в нем нет себя ребенка то мы себя заносим
			if not 'child' in doc_parent: doc_parent['child'] = []
			doc_parent['child'].append(doc_id)
			request.db.doc.save(doc_parent)

	request.db.doc.update({'_id':doc_id}, doc)

	# =======================================================================
	res, err = event('on_update_row', proc_id, doc_id)
	if res != 'ok': return {"result":"fail", "error":json.dumps(err)}
	# =======================================================================

	doc['final'] = 1

	from core.core import get_settings

	if get_settings('notify_user', False) and check_pub_doc(doc) and proc_id in ['des:obj', 'des:radio', 'des:comments']: subscribe(doc)
	if not no_notify and get_settings('notify_admin', False) and proc_id in ['des:obj', 'des:radio', 'des:comments']: notify_admin(doc)


	if res == 'ok' and 'owner' in doc and doc['owner'] != '_':
		on_update_subtable(request, doc)

	from core.union import clean_cache
	from libs.sites.sites import wiki
	clean_cache(doc)

	doc_ = {'body':wiki(request, ct(request, doc['doc']['body'])), 'date':doc['doc']['date'], 'title':ct(request, doc['doc']['title']) }
	return {"result":"ok", "doc_id":doc['_id'], "proc_id":proc_id, "updated":"", "doc":doc_}