async def del_comm_post(request): """ doc_id - id самого коментария """ data = await request.post() print(data) comm_id = data.get('comm_id') doc = get_doc(request, comm_id) if is_admin(request) or user_has_permission(request, 'des:obj', 'del_comm'): # добавление подсчета коментариев в отдельном документе request.db.doc.update({"_id": doc['doc']['owner']}, {"$inc": { "count_branch": -1 }}) if 'child' in doc: if len(doc['child']): request.db.doc.update({"_id": comm_id}, {"$set": { 'doc.is_del': 'true' }}) return response_json(request, { "result": "ok", "action": "del_dom", "id": comm_id }) else: del_row(request, 'des:comments', {comm_id: comm_id}) return response_json(request, {"result": "ok", "id": comm_id}) else: return response_json(request, { "result": "fail", "error": "error sequrity" })
def ban_comm_post(request): if not is_admin(request): return response_json(request, {"result": "fail", "error": "no ban"}) if not user_is_logged_in(request): return response_json(request, { "result": "fail", "error": "no comment" }) data = request.post() proc_id = data.get('proc_id') id_comm = data.get('branch_id') doc = request.db.doc.find_one({'_id': id_comm}) doc = doc['doc'] ip = doc['ip'] if 'ip' in doc else '' # try: lst = [ x.strip() for x in get_const_value(request, 'ban_comm', '').split(',') ] # die([lst, ip, branch]) if not ip in lst: lst.append(ip) set_const_value(request, 'ban_comm', ','.join(lst)) user_name = ct(request, doc['user']) user = get_doc(request, 'user:'******'doc']['ban'] = 'true' request.db.doc.save(user) return response_json(request, {"result": "ok", "user": user_name})
def add_field(request, proc_id, data, field_id=None): #field_id=None индекс поля которое нужно поменять при редактировании if not user_has_permission(request, proc_id, 'create'): return response_json(request, {"result": "fail", "error": "You have no permission."}) print('data===================================================================================================') print('data', data) if 'relation' in data: relation = data['relation'] else: relation = '' if 'relation_field' in data: relation_field = data['relation_field'] else: relation_field = '' for i in data: tp = data['type'] if 'type' in data else 'string' field = { "hint": {"ru":data['hint_ru'], "en":data['hint_en']}, "title": {"ru":data['title_ru'],"en":data['title_en']}, "visible": data['visible'], "oncreate": data['oncreate'], "type": tp, "relation":relation, "relation_field":relation_field, "is_editable": data['is_editable'], "id": data['id'], "is_translate":data['is_translate']} doc = get_mt(request, proc_id) if not field_id: doc['doc'].append(field) else: for res in doc['doc']: if field_id == res['id']: cur = doc['doc'].index(res) doc['doc'].remove(res) doc['doc'].insert(cur, field) request.db.map.save(doc) return response_json(request, {"result":"ok"} )
async def get_doc_post(request): if is_admin(request): data = get_post(request) doc_id = data['doc_id'] doc = request.db.doc.find_one({"_id":doc_id})['doc'] return response_json(request, {"result":"ok", "id":doc_id, "doc":doc}) return response_json(request, {"result":"fail", "doc":'bolt'})
async def edit_comm_post(request): if not user_has_permission(request, 'des:obj', 'add_com'): return {"result": "fail", "error": "no comment"} if not user_is_logged_in(request): return response_json(request, { "result": "fail", "error": "no comment" }) data = await request.post() comm_id = data.get('comm_id') body = data.get('body') user = data.get('user') if user == get_current_user(request) or is_admin(request): if 'child' in get_doc(request, comm_id) and not is_admin(request): return response_json(request, { "result": "fail", "error": "comment already answered" }) doc = request.db.doc.update( {'_id': comm_id}, {"$set": { "doc.body." + cur_lang(request): body }}) from core.union import invalidate_cache invalidate_cache('single_page') return response_json(request, {"result": "ok", "id": comm_id}) else: return response_json(request, { "result": "fail", "error": "access denied" })
def table_del_field_post(request): data = get_post(request) proc_id = data['proc_id'] field_id = data['field_id'] doc = get_mt(request, proc_id) field = doc['doc'] for i in field: if field_id in i['id']: field.remove(i) request.db.map.save(doc) return response_json(request, {"result":"ok"}) return response_json(request, {"result":"fail"})
def accept_comm_post(request): if not is_admin(request) and not user_has_permission(request, 'des:comments', 'edit'): return response_json(request, {"result":"fail", "error":"no has permission"}) data = get_post(request) doc_id = data.get('doc_id') doc = request.db.doc.find_one({'_id':doc_id}) doc['doc']['pre'] = 'false' request.db.doc.save(doc) owner = doc['doc']['doc_id'] comm_id = str(doc['doc']['comm_id']) tree = request.db.tree.find_one({'_id': owner}) # die(tree['tree'].keys()) tree['tree'][comm_id]['pre'] = 'false' request.db.tree.save(tree) return response_json(request, {"result":"ok"})
async def table_get_field_post(request): data = get_post(request) field = data['field_id'] proc_id = data['proc_id'] doc = request.db.map.find_one({"_id":proc_id}, {"doc":1}) res = [] # res = list( filter( lambda x: x['id'] == field, doc['field_map'])) for i in doc['doc']: if field == i['id']: res.append(i) if len(res): # aaa = json.dumps(res[0]) return response_json(request, {"result":"ok", "val_field":res[0]}) else: return response_json(request, {"result":"fail", "error":field+" not this field."})
async def group_perm_post0(request): #@route('/permission', method='POST') """ Просто рисуем список всех справочников """ if not user_is_logged_in(request): return response_json(request, {"result": "fail", "error": "Сеанс закончился зайдите в систему", "need_action":"login"}) data = [] roles = get_roles(request) rb_perm = ['view', 'edit', 'create', 'delete', 'move'] condition = {'doc_type':{'$ne':'templ_comm'}} pages, req = await get_pagination2(request, condition, 'map') for res in req: #находим все справочники data.append( build_row_report(title='<b>{}</b>'.format(res['_id']), results=[res['_id']], level=0, id=res['_id'], parent='_', child=rb_perm ) ) return response_json(request, {"result":"ok", "head":report_cons_head([('title', 'Всего')]+[(i, i) for i in roles], 'checkbox', 'true'), "data": data, "pages":pages })
def tree_data(request, proc_id, owner): """ Берет из базы данные формирует из них json и возвращает в нужный шаблон""" # proc_id = первый раз сom:des:obj doc = get_doc_tree(request, owner, proc_id) proc_id = doc['_id'] def translate_(branch): new_children = [] branch['title'] = ct(request, branch['title']) branch['descr'] = ct(request, branch['descr']) if 'descr' in branch else '' for child in branch['children']: new_children.append(translate_(child)) branch['children'] = new_children return branch docs = [ res for res in request.db.doc.find({ 'doc_type': 'des:comments', 'doc.owner': owner }).sort('doc.date', -1) ] from libs.sites.sites import get_full_docs docs = get_full_docs(request, docs) value = form_tree_comm(request, docs) # value = translate_(form_tree(db.tree.find_one({'_id':proc_id}))) return response_json(request, { "result": "ok", "content": value, "proc_id": proc_id })
def group_perm_post1(request, parent): """ Draw права справочника and fields """ data = [] roles = get_roles(request) child0 = [] rb_perm = ['view', 'edit', 'create', 'delete', 'move'] if parent in ['des:obj', 'des:forum', 'des:wiki', 'des:news']: rb_perm += ['vote', 'vote_com', 'add_com','add_com_pre', 'del_comm', 'mod_accept', 'edit_tag'] if parent in ['des:obj']: rb_perm += ['fb_import', 'edit_radio'] # doc = request.db.map.find_one({'_id':parent}, {'field_map':1 }) doc = request.db.map.find_one({'_id':parent}, {'doc':1 }) for i in rb_perm: # назначаем права на справочники выводим права на справочники sub_id = parent+'/'+i; results = [] for role in roles: #{u'role:simple_users': {u'des:users/phone': {u'edit': u'true', u'view': u'true'}, u'des:PM/title': {u'edit': u'true', u'view': u'true'}, u'des:PM/date': {u'edit': u'true', u'view': u'true'}}} val = parent in roles[role] and i in roles[role][parent] and roles[role][parent][i] == 'true' # role = simple_users # parent = des:obj # roles = список [role:admin, role:blogger и тд] results.append((role, ins_img(val), val)) data.append( build_row_report_name(title=i, results=results, level=1, id=sub_id, parent=parent, child=[] ) ) child0.append(sub_id) for rs in doc['doc']: # находим выводим все поля справочников sub_id = parent+':'+rs['id'] data.append( build_row_report(title='<b>%s</b>' % rs['id'], results=[rs['id']], level=1, id=sub_id, parent=parent, child=['2'] ) ) child0.append(sub_id) # return response_json(request, {"result":"ok", "head":report_cons_head([('title', 'Название')], 'checkbox', 'true'), "data": json.dumps( data ), "page":1,"pagectr":1,"pages":""}) return response_json(request, {"result":"ok", "head":report_cons_head([('title', 'Название')], 'checkbox', 'true'), "data": data, "page":1,"pagectr":1,"pages":""})
async def add_func_post(request): data = get_post(request) data = json.loads(data['data']) doc = request.db.conf.find_one({"_id":"default"}) doc['func'].update({ data['name']: {'func': data['func'], 'descr': ''} }) request.db.conf.save(doc) return response_json(request, {"result":"ok"})
def table_sort_post(request): """ 1) получаем нужный документ 2) получаем его предыдущий документ 3) берем дату предыдущего документа увеличиваем её на 1 секунду и сохраняем // снизу - некст, сверху - прев. !!!!!!!!! """ data = get_post(request) doc_id = data['doc_id'] prev = data['prev'] if 'prev' in data else '' next = data['next'] if 'next' in data else '' if next: old_date_id = next delta = 1 else: old_date_id = prev delta = -1 doc = request.db.doc.find_one({'_id':doc_id}) old_date = request.db.doc.find_one({'_id':old_date_id}) ddd = datetime.datetime.strptime(old_date['doc']['date'], "%Y-%m-%d %H:%M:%S") dd = ddd + timedelta(seconds=delta) datef = datetime.datetime.strftime(dd, "%Y-%m-%d %H:%M:%S") datee = datef doc['doc']['date'] = str(datef) request.db.doc.save(doc) return response_json(request, {"result":"ok", 'datee':datee})
def get_event_post(request): data = get_post(request) proc_id = data['proc_id'] name_func = data['name_func'] doc = request.db.map.find_one({'_id':proc_id}, {'events':1}) e = doc['events'][name_func] if 'events' in doc else '' return response_json(request, {"result":"ok", "func_text":json.dumps(e)})
async def edit_comm_post(request): if not user_has_permission(request, 'des:obj', 'add_com'): return {"result":"fail", "error":"no comment"} if not user_is_logged_in(request): return response_json(request, {"result":"fail", "error":"no comment"}) data = await request.post() comm_id = data.get('comm_id') body = data.get('body') user = data.get('user') if user == get_current_user(request) or is_admin(request): if 'child' in get_doc(request, comm_id) and not is_admin(request): return response_json(request, {"result":"fail", "error":"comment already answered"}) doc = request.db.doc.update({'_id': comm_id}, {"$set": {"doc.body." + cur_lang(request): body}}) from core.union import invalidate_cache invalidate_cache('single_page') return response_json(request, {"result":"ok", "id":comm_id}) else: return response_json(request, {"result":"fail", "error":"access denied"})
def table_add_row_post(request): data = get_post(request) proc_id = data['proc_id'] owner = data.get('owner', None) # defaults = json.loads(data['defaults'] if 'defaults' in data else {}) auto_fill = data.get('auto_fill', False) if not user_has_permission(request, proc_id, 'create'): return response_json(request, {"result": "fail", "error": "You have no permission."}) try: doc_id, updated = create_empty_row_(request, proc_id, owner, auto_fill) # update_row_(proc_id, doc_id, {}) if doc_id: return response_json(request, {"result":"ok", "id":doc_id, "updated": updated}) else: return response_json(request, {"result":"fail", "descr":"not doc_id", "error":json.dumps(updated)}) except Exception as e: return response_json(request, {"result":"fail", "descr":"exception", "error": e})
def table_update_cell_post(request): proc_id = request.match_info.get('proc_id') if not user_has_permission(request, proc_id, 'edit'): return {"result": "fail", "error": "You have no permission."} data = get_post(request) idd = data['id'] field = data['field'] value = unquote( data['value'] ) return response_json(request, update_cell(request, idd, proc_id, field, value) )
async def sandbox_post(request): data = get_post(request) data = json.loads(data['data']) # proc_id = get_post(proc_id) meta = request.db.map.find_one({'_id':data['proc_id']}) if not 'events' in meta: meta['events'] = {} meta['events'].update( { data['event'] : data['code'] }) request.db.map.save(meta) return response_json(request, {"result":"ok"})
def get_field_post(request): data = get_post(request) proc_id = data['proc_id'] doc = get_mt(request, proc_id) field = doc['doc'] list_field = [] for l_field in field: list_field.append({"id":l_field['id'], "title":ct(request, l_field['title'])}) return response_json(request,{"result":"ok", "list_field":list_field })
async def del_comm_post(request): """ doc_id - id самого коментария """ data = await request.post() print(data) comm_id = data.get( 'comm_id') doc = get_doc(request, comm_id) if is_admin(request) or user_has_permission(request, 'des:obj', 'del_comm'): # добавление подсчета коментариев в отдельном документе request.db.doc.update({ "_id": doc['doc']['owner'] }, { "$inc": { "count_branch":-1 } } ) if 'child' in doc: if len(doc['child']): request.db.doc.update({"_id":comm_id}, {"$set":{'doc.is_del':'true'}}) return response_json(request, {"result":"ok", "action":"del_dom", "id":comm_id}) else: del_row(request, 'des:comments', { comm_id:comm_id }) return response_json(request, {"result":"ok", "id":comm_id}) else: return response_json(request, {"result":"fail", "error":"error sequrity"})
def table_get_row_post(request): data = get_post(request) row_id = data['row_id'] proc_id = data['proc_id'] doc = get_doc(request, row_id) if not proc_id: proc_id = doc['doc_type'] doc_id, updated = create_empty_row_(request, proc_id, False, False, defaults={}, clear_id=True) updated = make_updated(request, {}, doc['doc'], doc['doc_type']) return response_json(request, {"result":"ok", "updated":updated, "row_id": doc_id })
def accept_comm_post(request): if not is_admin(request) and not user_has_permission( request, 'des:comments', 'edit'): return response_json(request, { "result": "fail", "error": "no has permission" }) data = get_post(request) doc_id = data.get('doc_id') doc = request.db.doc.find_one({'_id': doc_id}) doc['doc']['pre'] = 'false' request.db.doc.save(doc) owner = doc['doc']['doc_id'] comm_id = str(doc['doc']['comm_id']) tree = request.db.tree.find_one({'_id': owner}) # die(tree['tree'].keys()) tree['tree'][comm_id]['pre'] = 'false' request.db.tree.save(tree) return response_json(request, {"result": "ok"})
def tree_post(request, proc_id): if proc_id.startswith('tree:'): if not user_has_permission(request, proc_id[5:], 'view'): return response_json(request, {"result": "fail", "error": ct(request, "You have no permission.")}) return tree_data(request, proc_id, False) else: data = request.post() owner = data.get('owner', False) proc_id2 = data.get('proc_id', False) return tree_data(request, proc_id, owner) if owner else tree_data(request, proc_id2, False)
def get_list_branch_post1(request): if not user_is_logged_in(request): return user_not_logged() proc_id = request.match_info.get('proc_id') branch = [] doc = request.db.tree.find_one({'_id':'tree:'+proc_id}) tree = doc['tree'] branch.append({"id":"", "title":"-"}) for res in tree: branch.append({"id":res, "title":ct(request, tree[res]['title'])}) return response_json(request, {"result":"ok", "list_branch":branch })
def group_perm_post2(request, parent): """ Рисуем права на поля""" data = []; roles = get_roles(request); field_perm = ['view', 'edit'] for perm in field_perm: # назначаем права на поля sub_sub_id = parent+'/' + perm; results = [] for role in roles: val = parent in roles[role] and perm in roles[role][parent] results.append((role, ins_img(val), val)) data.append( build_row_report_name(title=perm, results=results, level=2, id=sub_sub_id, parent=parent, child=[] ) ) return response_json(request, {"result":"ok", "head": report_cons_head([('title', 'Название')]+[(i, i) for i in roles], 'checkbox', 'true'), "data":data, "page":1,"pagectr":1,"pages":"", "debug":""})
async def get_list_rb_post(request): if not user_is_logged_in(request): return user_not_logged() all_view = [] # type = get_post('type') for res in request.db.map.find({'type':'templ'}): title = ct(request, res['conf']['title']) if 'owner' in res['conf'] and res['conf']['owner'] != '_': mt = get_mt(request, res['conf']['owner']) if not mt: continue title = '%s: %s' % (ct(request, mt['conf']['title']), title) all_view.append({'_id':res['_id'], 'title':title }) return response_json(request, {"result":"ok", "list_rb":all_view})
async def group_perm_uc_post(request): """ Установка прав для ролей """ data = await request.post() permission = data.get('id') role = data.get('field') entity = data.get('branch_id') value = data.get('value') doc = request.db.doc.find_one({"_id":role}) #get_doc(request, role) if not entity in doc['permissions']: doc['permissions'][entity] = {} doc['permissions'][entity][permission] = value request.db.doc.save(doc) # return response_json(request, {"result":"ok", "updated":{role:{"formatted":ins_img(value == 'true').replace('"', '\\"'), "value":value}}} ) return response_json(request, {"result":"ok", "updated":{"value":value, "formatted":ins_img(value == 'true'), 'field_name': role }} )
async def check_room(request): print('rooms => ', rooms) found = None for _id, room in rooms.items(): if len(room.players) < 3: print('players in room < 3:', _id) found = _id break else: while not found: _id = uuid4().hex[:3] if _id not in rooms: found = _id return response_json(request, {"result": "ok", "room": found})
async def check_room(request): print ( 'rooms => ', rooms ) found = None for _id, room in rooms.items(): if len(room.players) < 3: print('players in room < 3:', _id) found = _id break else: while not found: _id = uuid4().hex[:3] if _id not in rooms: found = _id return response_json(request, {"result": "ok", "room": found})
def transfer_doc(request, proc_id, ids, to): proc_id = get_post('proc_id') if not user_has_permission(request, proc_id, 'create'): return {"result": "fail", "error":"You have no permission."} ctr = 0 dat = get_post(request) data = json.loads(dat['ids']) for current_id in data: doc = get_doc(request, current_id) if doc is not None: doc['doc_type'] = dat['to'] request.db.doc.save(doc); ctr += 1 return response_json(request, {"result":"ok", "counter":ctr})
def duplicate_doc_post(request): data = get_post(request) doc_id = data['row_id'] doc = dict(get_doc(request, doc_id)) doc['_id'] = uuid4().hex request.db.doc.save(doc) for res in request.db.doc.find({'owner':doc_id}): sub_doc = dict(res) sub_doc['_id'] = uuid4().hex sub_doc['owner'] = doc['_id'] request.db.doc.save(sub_doc) updated = make_updated(request, {}, doc['doc'], doc['doc_type']) return response_json(request, {"result":"ok", "row_id":doc['_id'], "updated":updated })
def add_vote_comm_post(request): """Вычисляем данные в посте сколько проголосовало и тд.""" data = request.post() vote = data.get('vote') comm_id = data.get('comm_id') comm = get_doc(comm_id) # doc = db.tree.find_one({'owner':doc_id}) user = get_current_user(True) from libs.sites.sites import check_time # comm = doc['tree'][comm_id] if check_time( comm['doc']['date'], 'days', int( get_const_value(request, 'vote_timeout') ) ): return response_json(request, {"result":"fail", "error":"Голосование уже закончилось"}) if not 'vote' in comm : comm['vote'] = {"score":0,"votes_count":0, "votes_count_plus":0,"votes_count_minus":0, "voted":{}} if not user_has_permission(request, 'des:obj', 'vote_com'): return response_json(request, {"result":"fail","error":"Не имеете права голоса"}) if not is_admin(request) and user in comm['vote']['voted'] : return response_json(request, {"result":"fail","error":"Повторное голосование запрещено"}) if not is_admin(request) and user == 'user:'******'title']): return response_json(request, {"result":"fail","error":"Голосовать за себя запрещено"}) dt = datetime.today().strftime('%Y-%m-%d') user_f = get_doc(request, user) if not 'vote' in user_f : user_f['vote'] = {} if not dt in user_f['vote'] : user_f['vote'][dt] = {'up': 0, 'down': 0} if not is_admin(request) and int(user_f['vote'][dt]['up']) + int(user_f['vote'][dt]['down']) >= int(float(user_f['doc']['rate'])+1.25): return response_json(request, {"result":"fail","error":"Лимит голосов за сегодня исчерпан"}) user_f['vote'][dt][vote] += 1 request.db.doc.save(user_f) comm['vote']['voted'][user] = vote if vote == 'up': comm['vote']['score'] += 1 comm['vote']['votes_count_plus'] += 1 else: comm['vote']['score'] -= 1 comm['vote']['votes_count_minus'] += 1 comm['vote']['votes_count'] += 1 request.db.doc.save(comm) comm_vote = comm['vote'] # начисление балов пользователю # u_id = 'user:'******'title']) u_id = ct(request, comm['doc']['user'] ) u = get_doc(request, u_id) if u: if not 'rate' in u['doc']: u['doc']['rate'] = '0' request.db.doc.save(u) if float(u['doc']['rate']) >= 17: rate = float(u['doc']['rate']) + (0.02 if vote == 'up' else -0.1) else: rate = float(u['doc']['rate']) + (0.2 if vote == 'up' else -0.1) # rate =+ 1 if vote == 'up' else -1 update_cell(request, str(u_id), 'des:users', 'rate', str(rate) ) return response_json(request, {"result":"ok", "score":comm_vote["score"],"votes_count":comm_vote["score"],"charge_string":"","sign":"positive", "votes_count_plus":comm_vote["votes_count_plus"],"votes_count_minus":comm_vote["votes_count_minus"],"is_positive":True})
def table_sort_columns_post(request): data = get_post(request) proc_id = data['proc_id'] order = json.loads(data['order']) doc = request.db.map.find_one({'_id':proc_id}) fields = {} for res in doc['doc']: fields[res['id']] = res doc['doc'] = [] for res in order: doc['doc'].append(fields[res]) request.db.map.save(doc) return response_json(request, {"result":"ok"})
def ban_comm_post(request): if not is_admin(request): return response_json(request, {"result":"fail", "error":"no ban"}) if not user_is_logged_in(request): return response_json(request, {"result":"fail", "error":"no comment"}) data = request.post() proc_id = data.get('proc_id') id_comm = data.get('branch_id') doc = request.db.doc.find_one({'_id':id_comm}) doc = doc['doc'] ip = doc['ip'] if 'ip' in doc else '' # try: lst = [x.strip() for x in get_const_value(request, 'ban_comm', '').split(',')] # die([lst, ip, branch]) if not ip in lst: lst.append(ip) set_const_value(request, 'ban_comm', ','.join(lst)) user_name = ct(request, doc['user']) user = get_doc(request, 'user:'******'doc']['ban'] = 'true' request.db.doc.save(user) return response_json(request, {"result":"ok", "user":user_name})
def check_room(request): # Если мы не шардим и у нас всё в один процесс - нам файлы даром не упали, у нас все комнаты уже в памяти found = 0 for _id, room in rooms.items(): found = max(_id, found) if len(room.players) < 3: print('players in room < 3:', _id) found = _id break else: found += 1 print('rroomm', found) return response_json(request, {"result": "ok", "room": found})
async def users_group_uc_post(request): """ Установка членства пользователей """ data = await request.post() user = data.get('id') role = data.get('field') value = data.get('value') doc = request.db.doc.find_one({"_id": role}) if value == 'true': if not user in doc['users']: doc['users'][user] = 'true' else: if user in doc['users']: del doc['users'][user] request.db.doc.save(doc) exm = {'value': "true", 'formatted': "<span style='color:green; font-size:16px'><i class='fa fa-check'></i></span>", 'field_name': "last_art"} return response_json(request, {"result":"ok", "updated":{"value":value, "formatted":ins_img(value == 'true'), 'field_name': role }} )
def tree_post(request, proc_id): if proc_id.startswith('tree:'): if not user_has_permission(request, proc_id[5:], 'view'): return response_json( request, { "result": "fail", "error": ct(request, "You have no permission.") }) return tree_data(request, proc_id, False) else: data = request.post() owner = data.get('owner', False) proc_id2 = data.get('proc_id', False) return tree_data(request, proc_id, owner) if owner else tree_data( request, proc_id2, False)
async def users_group_post(request): """ Отображает список прав ролей для таблицы установки прав""" if not user_is_logged_in(request): return {"result": "fail", "error": "The session ended Login", "need_action":"login"} data = await request.post() filter = json.loads(data['filter']) data=[] roles = get_perm(request) condition = {'doc_type':'des:users'} if 'title' in filter['column'] and filter['column']['title']: regex = re.compile( str(filter['column']['title']['val']), re.I | re.UNICODE) condition['doc.name.'+cur_lang(request)] = regex # pages, req = get_pagination2(condition) count = 0 for list_users in request.db.doc.find(condition): results = [] skip = False for role in roles: val = list_users['_id'] in roles[role] if role in filter['column'] and filter['column'][role]: if filter['column'][role]['val'] == 't' and not val or filter['column'][role]['val'] == 'f' and val: skip = True continue results.append((role, ins_img(val), val)) if skip: continue count += 1 user_name = ct(request, list_users['doc']['name']) if 'name' in list_users['doc'] else 'no name' data.append( build_row_report_name(title=user_name, results=results, level=0, id=list_users['_id'], parent='_', child=[] ) ) # cur_page = int(request.GET['page']) if 'page' in request.GET else 1 cur_page = int(filter['page']['current']) if 'page' in filter else 1 limit = int(get_const_value(request, 'doc_page_limit')) count = int(ceil(count/limit)) data = data[(cur_page - 1) * limit : cur_page * limit] pages = {'count': count, 'current':cur_page, 'next': 0, 'prev':0} head = report_cons_head([('title', 'Пользователи')]+[(i, i) for i in roles], 'checkbox', 'true') # print( {"result":"ok", "head":head, "data":json.dumps( data ), "pages":json.dumps( pages)} ) # print('data->', data) # return response_json(request, {"result":"ok", "head":head, "data":json.dumps( data ), "pages":json.dumps( pages)}) print('heqd->', head) return response_json(request, {"result":"ok", "head":head, "data":data, "pages":pages })
async def table_data_post(request): """ #page=текущая страница page ctr=кол-во pages=отрисованые ссылки на страницу навигация """ data = get_post(request) proc_id = data['proc_id'] if not user_has_permission(request, proc_id, 'view'): return {"result": "fail", "error": "You have no permission." } filtered = json.loads(data['filter']) doc_id = data['doc_id'] if 'doc_id' in data else '_' parent = data['parent'] if 'parent' in data else '_' id_next = None; id_prev = None if 'page' in filtered: page = filtered['page'] else: page = {'current':1} limit = int(get_const_value(request, 'doc_page_limit')) bdata, docs_table_count = table_data_post_(request, proc_id, filtered, doc_id, parent) otvet = {"result":"ok", "data":bdata, "pages":{"count":int(ceil(float(docs_table_count)/limit)), "current":page['current'], "next": id_next, "prev":id_prev} } return response_json(request, otvet)
async def table_update_row_post(request): proc_id = request.match_info.get('proc_id') force = request.match_info.get('force', False) if not force and not user_has_permission(request, proc_id, 'create'): return {"result": "fail", "error": "You have no permission."} data = get_post(request) row_id = data['row_id'] # print('parent', data['parent']) parent = data['parent'] if 'parent' in data else '_' data = json.loads(data['data']) print( 'data', data ) if 'rev' in data: del data['rev'] return response_json(request, update_row_(request, proc_id, row_id, data, parent = parent) )
def del_row(request, proc_id, ids): """ Удаление документа 1) Идем по всем полученым для удаления ids 2) Делаем какието операции с бугалтерией 3) Удаляем картинки приатаченый к этому документу 4) Удаляем сам документ 5) Выполняем тригер в песочнице связаный с удалением этого документа ============================================================================ 6) Удаляем себя у всех потомков 7) Удаляем себя у всех родителей 8) Очищаем если у документа есть родитель родителя 9) удаляем теги которые есть в документе из облака тегов """ ctr = 0; errors = '' for current_id in ids: doc = get_doc(request, current_id) if not doc: return {"result": "fail", "error": 'doc not found'} proc_id = doc['doc_type'] parent = doc['parent'] if 'parent' in doc else '_' children = doc['child'] if 'child' in doc else '_' old_row = doc['doc'] from libs.files.files import del_all_files del_all_files(request, doc['_id'], proc_id) request.db.doc.remove({'_id': doc['_id']}) try: res, err = event('on_del_row', proc_id, {'old_row':old_row, "doc": doc}) # TODO обработать err if res != 'ok': errors+=err except:pass ctr += 1 request.db.doc.remove({"owner":doc['_id']}) # request.db.tree.remove({"owner":doc['_id']}) if children != '_': request.db.doc.update_many({'parent':doc['_id']}, {'$set':{'parent':'_'} }) if parent != '_': request.db.doc.update({'child':{'$in':[doc['_id']]}}, {'$pull':{'child':doc['_id']}}) if not ': ' in proc_id: del_doc_tags(request, proc_id, doc) if errors: return {"result": "fail", "error":errors} return response_json(request, {"result":"ok", "counter":ctr})
def add_vote_comm_post(request): """Вычисляем данные в посте сколько проголосовало и тд.""" data = request.post() vote = data.get('vote') comm_id = data.get('comm_id') comm = get_doc(comm_id) # doc = db.tree.find_one({'owner':doc_id}) user = get_current_user(True) from libs.sites.sites import check_time # comm = doc['tree'][comm_id] if check_time(comm['doc']['date'], 'days', int(get_const_value(request, 'vote_timeout'))): return response_json(request, { "result": "fail", "error": "Голосование уже закончилось" }) if not 'vote' in comm: comm['vote'] = { "score": 0, "votes_count": 0, "votes_count_plus": 0, "votes_count_minus": 0, "voted": {} } if not user_has_permission(request, 'des:obj', 'vote_com'): return response_json(request, { "result": "fail", "error": "Не имеете права голоса" }) if not is_admin(request) and user in comm['vote']['voted']: return response_json(request, { "result": "fail", "error": "Повторное голосование запрещено" }) if not is_admin(request) and user == 'user:'******'title']): return response_json(request, { "result": "fail", "error": "Голосовать за себя запрещено" }) dt = datetime.today().strftime('%Y-%m-%d') user_f = get_doc(request, user) if not 'vote' in user_f: user_f['vote'] = {} if not dt in user_f['vote']: user_f['vote'][dt] = {'up': 0, 'down': 0} if not is_admin(request) and int(user_f['vote'][dt]['up']) + int( user_f['vote'][dt]['down']) >= int( float(user_f['doc']['rate']) + 1.25): return response_json(request, { "result": "fail", "error": "Лимит голосов за сегодня исчерпан" }) user_f['vote'][dt][vote] += 1 request.db.doc.save(user_f) comm['vote']['voted'][user] = vote if vote == 'up': comm['vote']['score'] += 1 comm['vote']['votes_count_plus'] += 1 else: comm['vote']['score'] -= 1 comm['vote']['votes_count_minus'] += 1 comm['vote']['votes_count'] += 1 request.db.doc.save(comm) comm_vote = comm['vote'] # начисление балов пользователю # u_id = 'user:'******'title']) u_id = ct(request, comm['doc']['user']) u = get_doc(request, u_id) if u: if not 'rate' in u['doc']: u['doc']['rate'] = '0' request.db.doc.save(u) if float(u['doc']['rate']) >= 17: rate = float(u['doc']['rate']) + (0.02 if vote == 'up' else -0.1) else: rate = float(u['doc']['rate']) + (0.2 if vote == 'up' else -0.1) # rate =+ 1 if vote == 'up' else -1 update_cell(request, str(u_id), 'des:users', 'rate', str(rate)) return response_json( request, { "result": "ok", "score": comm_vote["score"], "votes_count": comm_vote["score"], "charge_string": "", "sign": "positive", "votes_count_plus": comm_vote["votes_count_plus"], "votes_count_minus": comm_vote["votes_count_minus"], "is_positive": True })
async def add_comm_post(request): # return json.dumps(current_id, title, link, proc_id) """current_id это id ветки""" # ip = request.environ.get('REMOTE_ADDR') data = await request.post() ip = None print('data->', data) #get ip address client peername = request.transport.get_extra_info('peername') host = None if peername is not None: host, port = peername ip = host # print ('host, port->', host, port) user = get_current_user(request, True) if check_ban(request, host, user): return response_json( request, { "result": "fail", "error": "Ваш ip или аккаунт забанен на этом сайте, свяжитесь с администрацией" }) else: title = data.get('title') if not user_has_permission(request, 'des:obj', 'add_com') and not user_has_permission( request, 'des:obj', 'add_com_pre'): return response_json(request, { "result": "fail", "error": "no comment" }) if not check_user_rate(request, user): return response_json( request, { "result": "fail", "error": "Вы не можете оставлять сообщения слишком часто, из-за отрицательной кармы" }) doc_id = data.get('comm_id') id = data.get('id') if user_is_logged_in(request): title = get_current_user(request) # tle = get_doc(request, doc_id ) # print( doc_id ) # print( tle ) # tle = get_doc(request, doc_id )['doc']['title'] title_ = ct(request, title) title = no_script(title) if title else 'Аноним' parent = data.get('parent', "_") descr = data.get('descr') descr = no_script(descr) descr = descr.replace('\n', '<br/>') # ретурн если нет и того и другого а если нет только одного то как раз проверим pre = 'true' if not user_has_permission(request, 'des:obj', 'add_com') else 'false' date = str(time.strftime("%Y-%m-%d %H:%M:%S")) user_ = get_current_user_name(request, title) or title our = "true" if user_is_logged_in(request) else "false" body = re.sub( r'(http?://([a-z0-9-]+([.][a-z0-9-]+)+)+(/([0-9a-z._%?#]+)+)*/?)', r'<a href="\1">\1</a>', descr) # добавление родителю ребенка request.db.doc.update({"_id": parent}, {"$addToSet": {"child": doc_id}}) # занесение коментов в справочник коментов doc_id_comm, updated = create_empty_row_(request, 'des:comments', parent, '', {"user": '******' + title}) data = { "id": doc_id_comm, "title": title_, "date": date, "body": body, "parent": parent, "owner": id, 'ip': ip, 'name': user_, "our": our, 'pre': pre } update_row_(request, 'des:comments', doc_id_comm, data, parent) if 'notify_user' in dir(settings) and settings.notify_user: # if 'notify_user' in settings and settings.notify_user: # link = make_link('show_object', {'doc_id':doc_id }, True)+'#comm_'+ str( id ) link = settings.domain + '/news/' + doc_id + '#comm_' + str(id) subject = 'User {} add comment'.format(title) sub('user:'******'id1', id) id = get_doc(request, id)['_id'] print('id2', id) invalidate_cache('single_page', id=id) # rev = get_doc(request, doc_id)['doc']['rev'] # reset_cache(type="doc", doc_id=rev) # добавление подсчета коментариев в отдельном документе request.db.doc.update({"_id": doc_id}, {"$inc": {"count_branch": 1}}) # return json.dumps({"result":"ok", "content":data.update({"title":title}), "hash":""}) return response_json(request, { "result": "ok", "content": data, "hash": "" })
def table_preedit_row_post(request): data = get_post(request) doc = get_doc(request, data['doc_id']) return response_json(request, {"result":"ok", "doc":{ 'title': ct(request, doc['doc']['title']), 'body': ct(request, doc['doc']['body']), 'date': doc['doc']['date']}} )