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)
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
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_}