def cardDataSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None): u'''Функция сохранения карточки редактирования содержимого справочника ролей. ''' subjects = subjectsCursor(context) content = json.loads(xformsdata)["schema"]["subject"] subjects.name = content["@name"] subjects.sid = content["@sid"] if add == 'add' and subjects.canInsert() and subjects.canModify(): if not subjects.tryInsert(): subjectsOld = subjectsCursor(context) subjectsOld.get(content["@sid"]) subjects.recversion = subjectsOld.recversion subjects.update() elif add == 'add' and subjects.canInsert(): subjects.insert() elif add == 'edit' and subjects.canModify(): currId = json.loads(session)['sessioncontext']['related'][ 'gridContext']['currentRecordId'] subjectsOld = subjectsCursor(context) subjectsOld.get(currId) subjectsOld.name = content["@name"] subjectsOld.sid = content["@sid"] subjectsOld.update() else: raise CelestaException(u"Недостаточно прав для данной операции!")
def subjectsList(context, main=None, add=None, filterinfo=None, session=None, params=None, curvalue=None, startswith=None, firstrecord=None, recordcount=None): u'''Функция list для селектора выбора ролей. ''' subjects = subjectsCursor(context) subjects.setFilter( 'name', """@%s'%s'%%""" % ("%" * (not startswith), curvalue.replace("'", "''"))) subjects.orderBy('name') subjects.limit(firstrecord, recordcount) recordList = ArrayList() for subjects in subjects.iterate(): rec = DataRecord() rec.setId(unicode(subjects.sid)) rec.setName(subjects.name) recordList.add(rec) return ResultSelectorData(recordList, 0)
def usersList(context, main=None, add=None, filterinfo=None, session=None, params=None, curvalue=None, startswith=None, firstrecord=None, recordcount=None): u'''Функция list селектора типа элемента. ''' settings=Settings() recordList = ArrayList() #raise Exception(startswith, curvalue) if settings.isUseAuthServer() and settings.loginIsSubject(): sessionId=json.loads(session)["sessioncontext"]["sessionid"] server=SecurityParamsFactory.getAuthServerUrl() users_xml=getUsersFromAuthServer(server, sessionId) for user in users_xml.getElementsByTagName("user"): if startswith and string.find(user.getAttribute("name"), curvalue)==0 or \ not startswith and string.find(user.getAttribute("name"), curvalue)>0: rec = DataRecord() rec.setId(user.getAttribute("SID")) rec.setName(user.getAttribute("login")) recordList.add(rec) else: subject = subjectsCursor(context) subject.setFilter('name', "@%s'%s'%%" % ("%"*(not startswith), curvalue.replace("'","''"))) subject.orderBy('name') subject.limit(firstrecord, recordcount) for subject in subject.iterate(): rec = DataRecord() rec.setId(subject.sid) if subject.name is not None or subject.name!='': rec.setName(subject.name) else: rec.setName(u'[Имя не назначено!]') recordList.add(rec) return ResultSelectorData(recordList, 0)
def usersCount(context, main=None, add=None, filterinfo=None, session=None, params=None, curvalue=None, startswith=None): #raise Exception(params) settings = Settings() if settings.isUseAuthServer() and settings.loginIsSubject(): server = SecurityParamsFactory.getAuthServerUrl() sessionId = json.loads(session)["sessioncontext"]["sessionid"] users_xml = getUsersFromAuthServer(server, sessionId) count = 0 for user in users_xml.getElementsByTagName("user"): if startswith and string.find(user.getAttribute("name"), curvalue)==0 or \ not startswith and string.find(user.getAttribute("name"), curvalue)>0: count += 1 #count=len(users_xml.getElementsByTagName("user")) else: subject = subjectsCursor(context) #raise Exception(useAuthServer) subject.setFilter( 'name', "@%s'%s'%%" % ("%" * (not startswith), curvalue.replace("'", "''"))) count = subject.count() return ResultSelectorData(None, count)
def getSubjectByLogin(context, login): subject = subjectsCursor(context) logins = loginsCursor(context) logins.get(login) subject.get(logins.subjectId) logins.close() return subject
def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None): u'''Функция данных для карточки редактирования содержимого таблицы ролей. ''' settings=Settings() #ru.curs.showcase.security.SecurityParamsFactory.getAuthServerUrl() rolesUsers = UserRolesCursor(context) currId = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId'] rolesUsers.setRange("roleid", currId) content=[] if settings.isUseAuthServer() and settings.loginIsSubject(): sessionId=json.loads(session)["sessioncontext"]["sessionid"] server=SecurityParamsFactory.getAuthServerUrl() users_xml=getUsersFromAuthServer(server, sessionId) if rolesUsers.tryFindSet(): while True: for user in users_xml.getElementsByTagName("user"): if user.getAttribute("SID")==rolesUsers.userid: content.append({"@sid" : rolesUsers.userid, "@userName" : user.getAttribute("name") }) break if not rolesUsers.nextInSet(): break else: subjects = subjectsCursor(context) if rolesUsers.tryFindSet(): while True: if subjects.tryGet(rolesUsers.userid): content.append({"@sid" : subjects.sid, "@userName" : subjects.name }) if not rolesUsers.nextInSet(): break if content==[]: xformsdata = {"schema":{"users": "" } } else: xformsdata = {"schema":{"users": {"user": content} } } xformssettings = {"properties":{"event":{"@name":"single_click", "@linkId": "1", "action":{"#sorted":[{"main_context": "current"}, {"datapanel": {"@type": "current", "@tab": "current", "element": {"@id":"id_roles_grid", "add_context": ""} } }]} } } } return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)), XMLJSONConverter.jsonToXml(json.dumps(xformssettings)))
def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None): u'''Функция данных для карточки редактирования содержимого таблицы ролей. ''' subjects = subjectsCursor(context) if add == 'add': sid = getNextNoOfSeries(context, 'subjects') + id_generator() xformsdata = { "schema": { "@xmlns": "", "subject": { "@name": "", "@sid": sid } } } elif add == 'edit': currId = json.loads(session)['sessioncontext']['related'][ 'gridContext']['currentRecordId'] subjects.get(currId) xformsdata = { "schema": { "subject": { "@name": subjects.name, "@sid": subjects.sid } } } # print xformsdata xformssettings = { "properties": { "event": { "@name": "single_click", "@linkId": "1", "action": { "#sorted": [{ "main_context": "current" }, { "datapanel": { "@type": "current", "@tab": "current", "element": { "@id": "subjectsGrid", "add_context": "" } } }] } } } } return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)), XMLJSONConverter.jsonToXml(json.dumps(xformssettings)))
def employeesSubjectsPreDelete(rec): # Триггер добавляется только в случае loginEqualSubject = "false" settings = Settings() context = rec.callContext() employeesId = settings.getEmployeesParam("employeesId") subjects = subjectsCursor(context) subjects.setRange("employeeId", getattr(rec, employeesId)) if subjects.canDelete(): subjects.deleteAll()
def getSubjectIdByEmployeeId(context, employee_id): """возвращает сид пользователя по идентификатору сотрудника""" subjects = subjectsCursor(context) subjects.setRange("employeeId", employee_id) if subjects.count() > 1: subjects.close() raise Exception(u"Employee got more than one subjects") else: subjects.tryFirst() sid = subjects.sid subjects.close() return sid
def cardDelete(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None): currentRecordId = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId'] settings=Settings() user = loginsCursor(context) user.get(currentRecordId) if settings.loginIsSubject(): subject = subjectsCursor(context) subject.get(user.subjectId) user.delete() subject.delete() else: user.delete()
def employeesSubjectsPostUpdate(rec): # Триггер добавляется только в случае loginEqualSubject = "false" settings = Settings() context = rec.callContext() employeesId = settings.getEmployeesParam("employeesId") employeesName = settings.getEmployeesParam("employeesName") subjects = subjectsCursor(context) subjects.setRange("employeeId", getattr(rec, employeesId)) if subjects.tryFirst(): # and subjects.count()==1: subjects.name = getattr(rec, employeesName) if subjects.canModify(): subjects.update()
def employeesSubjectsPostInsert(rec): # Триггер добавляется только в случае loginEqualSubject = "false" settings = Settings() context = rec.callContext() employeesId = settings.getEmployeesParam("employeesId") employeesName = settings.getEmployeesParam("employeesName") sid = getNextNoOfSeries(context, 'subjects') + id_generator() subjects = subjectsCursor(context) subjects.sid = sid subjects.name = getattr(rec, employeesName) subjects.employeeId = getattr(rec, employeesId) if subjects.canInsert() and subjects.canModify(): if not subjects.tryInsert(): subjects.update() elif subjects.canInsert(): subjects.insert()
def subjectsCount(context, main=None, add=None, filterinfo=None, session=None, params=None, curvalue=None, startswith=None): u'''Функция count для селектора выбора ролей. ''' subjects = subjectsCursor(context) subjects.setFilter( 'name', """@%s'%s'%%""" % ("%" * (not startswith), curvalue.replace("'", "''"))) count = subjects.count() return ResultSelectorData(None, count)
def cardDelete(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None): currId = json.loads( session)['sessioncontext']['related']['gridContext']["currentRecordId"] subject = subjectsCursor(context) login = loginsCursor(context) subject.get(currId) login.setRange('subjectId', subject.sid) for login in login.iterate(): login.subjectId = None login.update() subject.delete()
def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None): u'''Функция данных для карточки редактирования содержимого таблицы ролей. ''' settings = Settings() # ru.curs.showcase.security.SecurityParamsFactory.getAuthServerUrl() rolesUsers = UserrolesCursor(context) roles = RolesCursor(context) logins = loginsCursor(context) currId = json.loads( session)['sessioncontext']['related']['gridContext']['currentRecordId'] if settings.isUseAuthServer() and settings.loginIsSubject(): # В данном режиме в currId передаются имя пользователя и сид. # Сделано так, чтобы не лопатить огромный xml, приходящий из меллофона currId = json.loads(currId) if not logins.tryGet(currId[0]): # in "tt" regime we copy record from mellophone(AuthServer) to logins if it doesn't appear in logins. subjects = subjectsCursor(context) subjects.name = currId[0] subjects.sid = currId[1] subjects.insert() logins.userName = currId[0] logins.subjectId = currId[1] logins.password = "" logins.insert() rolesUsers.setRange("userid", logins.subjectId) elif settings.loginIsSubject(): logins.get(currId) rolesUsers.setRange( "userid", logins.subjectId) # роли всегда привязываются к сидам else: rolesUsers.setRange("userid", currId) content = [] if rolesUsers.tryFindSet(): while True: if roles.tryGet(rolesUsers.roleid): content.append({ "@id": roles.id, "@description": '%s - %s' % (roles.id, roles.description if roles.description else '') }) if not rolesUsers.nextInSet(): break if content == []: xformsdata = {"schema": {"roles": ""}} else: xformsdata = {"schema": {"roles": {"role": content}}} # сортировка xformsdata["schema"]["roles"]["role"].sort( key=lambda x: (x["@id"].lower())) # raise Exception(xformsdata) # print xformsdata xformssettings = { "properties": { "event": { "@name": "single_click", "@linkId": "1", "action": { "#sorted": [{ "main_context": "current" }, { "datapanel": { "@type": "current", "@tab": "current", "element": { "@id": "usersGrid", "add_context": "" } } }] } } } } return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)), XMLJSONConverter.jsonToXml(json.dumps(xformssettings)))
def gridMeta(context, main=None, add=None, filterinfo=None, session=None, elementId=None): u'''Функция получения настроек грида. ''' subjects = subjectsCursor(context) # Вычисляем количества записей в таблице totalcount = subjects.count() # Заголовок таблицы header = "Субъекты" sec_settings = Settings() _header = { "rowid": ["~~id"], "sid": [u"SID"], "name": [u"Имя"], "properties": [u"properties"] } # Определяем список полей таблицы для отображения settings = {} currentDatapanelHeight = int( json.loads(session)["sessioncontext"]["currentDatapanelHeight"]) if sec_settings.loginIsSubject(): number = 1 else: # Вычисляем numberOfGrids, где 2.0 - numberOfGrids для первого грида users.py из датапанели # 59 - gridHeaderHeight для обоих гридов, 80 - суммарная дельта number = ((currentDatapanelHeight - 59) * 2.0) / (2.0 * currentDatapanelHeight - 2.0 * 80 - currentDatapanelHeight + 59) settings["gridsettings"] = { "columns": { "col": [] }, "properties": { "@pagesize": "25", "@gridWidth": "100%", "@gridHeight": getGridHeight(session, number, delta=40), "@totalCount": totalcount, "@profile": "default.properties" }, "labels": { "header": header } } # Добавляем поля для отображения в gridsettings settings["gridsettings"]["columns"]["col"].append({ "@id": _header["sid"][0], "@width": "240px" }) settings["gridsettings"]["columns"]["col"].append({ "@id": _header["name"][0], "@width": "240px" }) res = XMLJSONConverter.jsonToXml(json.dumps(settings)) return JythonDTO(None, res)
def gridData(context, main=None, add=None, filterinfo=None, session=None, elementId=None, sortColumnList=None, firstrecord=None, pagesize=None): u'''Функция получения данных для грида. ''' # Создание экземпляра курсора разрешения subjects = subjectsCursor(context) # Параметры сортировки if sortColumnList: sortName = toHexForXml(sortColumnList[0].id) sortType = unicode(sortColumnList[0].sorting).lower() else: sortName = None # Определяем переменную для JSON данных data = {"records": {"rec": []}} # Определяем заголовки _header = { "rowid": ["~~id"], "sid": [u"SID"], "name": [u"Имя"], "properties": [u"properties"] } for column in _header: _header[column].append(toHexForXml(_header[column][0])) if sortName == _header[column][1]: subjects.orderBy("%s %s" % (column, sortType)) subjects.limit(firstrecord - 1, pagesize) # Проходим по таблице и заполняем data for subjects in subjects.iterate(): subjectsDict = {} subjectsDict[_header["rowid"][1]] = subjects.sid for column in [ x for x in _header.keys() if x not in ("rowid", "properties") ]: subjectsDict[_header[column][1]] = getattr(subjects, column) or '' subjectsDict['properties'] = { "event": { "@name": "row_single_click", "action": { "#sorted": [{ "main_context": 'current' }, { "datapanel": { '@type': "current", '@tab': "current" } }] } } } data["records"]["rec"].append(subjectsDict) res = XMLJSONConverter.jsonToXml(json.dumps(data)) return JythonDTO(res, None)
def cardDataSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None): u'''Функция сохранения карточки редактирования содержимого справочника ролей. ''' settings = Settings() logins = loginsCursor(context) subject = subjectsCursor(context) content = json.loads(xformsdata)["schema"]["user"] if not settings.isUseAuthServer(): # пользователи берутся из logins if add == 'edit' and content["@password"] == '': # если пароль при редактировании не заполнен, сохраняем в курсоре старый пароль из базы loginsOld = loginsCursor(context) currId = json.loads(session)['sessioncontext']['related'][ 'gridContext']['currentRecordId'] loginsOld.get(currId) logins.password = loginsOld.password else: # иначе зашифровываем пароль из карточки pass_hash = hashlib.sha1() # Объект типа hash pass_hash.update(content["@password"] ) # Записываем в него текущий пароль из карточки logins.password = pass_hash.hexdigest( ) # Выполняем hash функцию, записываем результат в курсор. logins.userName = content["@userName"] if content[ "@subjectId"] == "": # если subjectId из карточки пуст, записываем в базу null logins.subjectId = None else: logins.subjectId = content["@subjectId"] if settings.loginIsSubject(): # если loginIsSubject, cохраняем сначала subject, потом login subject.sid = content["@subjectId"] subject.name = content["@userName"] if content[ "@employeeId"] == '': # если employeeId из карточки пуст (сотрудник не выбран), записываем в базу null subject.employeeId = None else: subject.employeeId = content["@employeeId"] # сохранение subject if add == 'add' and subject.canInsert() and subject.canModify(): if not subject.tryInsert(): subjectOld = subjectsCursor(context) subjectOld.get(content["@subjectId"]) subject.recversion = subjectOld.recversion subject.update() elif add == 'add' and logins.canInsert(): subject.insert() elif add == 'edit' and subject.canModify(): subjectOld = subjectsCursor(context) subjectOld.get(content["@subjectId"]) subject.recversion = subjectOld.recversion subject.update() else: raise CelestaException( u"Недостаточно прав для данной операции!") # сохранение login if add == 'add' and logins.canInsert() and logins.canModify(): if not logins.tryInsert(): logins.update() elif add == 'add' and logins.canInsert(): logins.insert() elif add == 'edit' and logins.canModify(): loginsOld = loginsCursor(context) loginsOld.get(content["@userName"]) logins.recversion = loginsOld.recversion logins.update() else: raise CelestaException(u"Недостаточно прав для данной операции!") else: # пользователи берутся из mellophone if logins.tryGet(content["@userName"]): # если запись с данным userName уже есть в таблице logins (Подробнее см. ниже) if settings.loginIsSubject(): # если логины и субъекты тождественны if not subject.tryGet(logins.subjectId): subject.sid = content["@sid"] if content["@employeeId"] == '': subject.employeeId = None else: subject.employeeId = content["@employeeId"] subject.name = content["@userName"] logins.subjectId = subject.sid # сохранение subject. Запись в logins уже есть if subject.canInsert() and subject.canModify(): if not subject.tryInsert(): subjectOld = subjectsCursor(context) subjectOld.get(content["@subjectId"]) subject.recversion = subjectOld.recversion subject.update() elif subject.canModify(): subjectOld = subjectsCursor(context) subjectOld.get(content["@subjectId"]) subject.recversion = subjectOld.recversion subject.update() else: raise CelestaException( u"Недостаточно прав для данной операции!") else: # Если субъекты тождественны сотрудникам, записываем subjectId в logins.subjectId # то есть, просто привязываем logins к subjects if content["@subjectId"] == "": logins.subjectId = None else: logins.subjectId = content["@subjectId"] # обновление logins if logins.canModify(): logins.update() else: raise CelestaException( u"Недостаточно прав для данной операции!") else: # пользователя нет в logins if settings.loginIsSubject(): # если loginIsSubject, cохраняем сначала subject, потом login if content["@employeeId"] == '': logins.subjectId = None else: subject.employeeId = content["@employeeId"] subject.sid = content["@sid"] subject.name = content["@userName"] logins.subjectId = subject.sid if subject.canInsert() and subject.canModify(): if not subject.tryInsert(): subjectOld = subjectsCursor(context) subjectOld.get(content["@subjectId"]) subject.recversion = subjectOld.recversion subject.update() elif subject.canInsert(): subject.insert() else: raise CelestaException( u"Недостаточно прав для данной операции!") else: if content["@subjectId"] == "": logins.subjectId = None else: logins.subjectId = content["@subjectId"] # В случае, когда пользователи берутся из mellophone, и к пользователю делается привязка, # (<employees> к logins-subjects или <employees>-subjects к logins) # делается запись в logins logins.userName = content["@userName"] logins.password = "" if logins.canInsert(): logins.insert() else: raise CelestaException( u"Недостаточно прав для данной операции!")
def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None): settings = Settings() session = json.loads(session)['sessioncontext'] logins = loginsCursor(context) subjects = subjectsCursor(context) isEmployees = settings.isEmployees( ) # описана ли таблица сотрудников в настройках? if isEmployees: # Если да, получаем наименование таблицы, импортируем курсор, создаём экземпляр курсора сотрудников employeesGrain = settings.getEmployeesParam("employeesGrain") employeesTable = settings.getEmployeesParam("employeesTable") employeesId = settings.getEmployeesParam( "employeesId") # название поля с первичным ключом employeesName = settings.getEmployeesParam( "employeesName") # название поля с именем employeesCursor = tableCursorImport(employeesGrain, employeesTable) employees = employeesCursor(context) subjectId = "" subjectName = "" empId = "" empName = "" if 'currentRecordId' in session['related']['gridContext']: currId = session['related']['gridContext']['currentRecordId'] currIdSid = "" if settings.loginIsSubject() and settings.isUseAuthServer(): # в данном режиме Id записи грида - sid+username. делано, чтобы достать сид в карточке, # не перелопачивая весь xml пользователй. currIdSid = json.loads(currId)[1] currId = json.loads(currId)[0] if logins.tryGet(currId) and add <> 'add': if subjects.tryGet(logins.subjectId): subjectId = subjects.sid subjectName = subjects.name if isEmployees: if employees.tryGet(subjects.employeeId): empId = getattr(employees, employeesId) empName = getattr(employees, employeesName) if add == 'add': xformsdata = { "schema": { "@xmlns": "", "user": { "@sid": "", "@password": id_generator(), "@userName": "", "@subjectId": "", "@subjectName": "", "@employeeId": "", "@employeeName": "", "@isAuthServer": unicode(settings.isUseAuthServer()).lower(), "@loginIsSubject": unicode(settings.loginIsSubject()).lower(), "@add": add, "@isEmployees": unicode(isEmployees).lower(), "@key": unichr( 9911 ) # символ ключа, например. Уже не нужен, в иконку вставляется картинка. } } } if settings.loginIsSubject(): # если логины тождественны субъектам, при открытии карточки генерится sid sid = getNextNoOfSeries(context, 'subjects') + id_generator( ) # последнее слагаемое сделано, чтобы sid # нельзя было просто подобрать. xformsdata["schema"]["user"]["@subjectId"] = sid xformsdata["schema"]["user"]["@sid"] = sid elif add == 'edit' and settings.isUseAuthServer(): # Редактирование в случае получения пользователей из mellophone xformsdata = { "schema": { "user": { "@sid": currIdSid, "@password": "", "@userName": currId, "@subjectId": subjectId, "@subjectName": subjectName, "@employeeId": empId, "@employeeName": empName, "@isAuthServer": unicode(settings.isUseAuthServer()).lower(), "@loginIsSubject": unicode(settings.loginIsSubject()).lower(), "@add": "", "@isEmployees": unicode(isEmployees).lower(), "@key": unichr(9911) } } } elif add == 'edit': # Редактирование в случае получения пользователей из таблицы logins logins.get(currId) xformsdata = { "schema": { "user": { "@sid": logins.subjectId, "@password": "", "@userName": logins.userName, "@subjectId": subjectId, "@subjectName": subjectName, "@employeeId": empId, "@employeeName": empName, "@isAuthServer": unicode(settings.isUseAuthServer()).lower(), "@loginIsSubject": unicode(settings.loginIsSubject()).lower(), "@add": add, "@isEmployees": unicode(isEmployees).lower() } } } xformssettings = { "properties": { "event": { "@name": "single_click", "@linkId": "1", "action": { "#sorted": [{ "main_context": "current" }, { "datapanel": { "@type": "current", "@tab": "current", "element": { "@id": "usersGrid", "add_context": "" } } }] } } } } return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)), XMLJSONConverter.jsonToXml(json.dumps(xformssettings)))
def blockUser(context, sid, block=True): subject = subjectsCursor(context) subject.get(sid) subject.isBlocked = block subject.update() subject.close()
def gridData(context, main=None, add=None, filterinfo=None, session=None, elementId=None, sortColumnList=None, firstrecord=None, pagesize=None): u'''Функция получения данных для грида списка пользователей. ''' session = json.loads(session)["sessioncontext"] settings = Settings() logins = loginsCursor(context) if sortColumnList: sortName = toHexForXml(sortColumnList[0].id) sortType = unicode(sortColumnList[0].sorting).lower() else: sortName = None # Определяем переменную для JSON данных data = {"records": {"rec": []}} _header = { "id": ["~~id"], "sid": [u"SID"], "userName": [u"Имя пользователя"], "subject": [u"Субъект"], "employee": [u"Сотрудник"], "properties": [u"properties"] } event = { "event": { "@name": "row_single_click", "action": { "#sorted": [{ "main_context": 'current' }, { "datapanel": { "@type": "current", "@tab": "current" } }] } } } for column in _header: _header[column].append(toHexForXml(_header[column][0])) isEmployees = settings.isEmployees() if isEmployees: employeesGrain = settings.getEmployeesParam("employeesGrain") employeesTable = settings.getEmployeesParam("employeesTable") employeesName = settings.getEmployeesParam( "employeesName") # название поля с именем employeesCursor = tableCursorImport(employeesGrain, employeesTable) employees = employeesCursor(context) if settings.isUseAuthServer(): sessionId = session[ "sessionid"] # получаем из контекста сессии Id сессии server = SecurityParamsFactory.getAuthServerUrl( ) # получаем url mellophone logins_xml = func.getUsersFromAuthServer( server, sessionId) # получаем xml с пользователями if settings.isUseAuthServer() and settings.loginIsSubject(): # грид состоит из колонок sid, имя пользователя и сотрудник subjects = subjectsCursor(context) for i, user in enumerate(logins_xml.getElementsByTagName("user")): if i < firstrecord - 1: continue # пропускаем элементы с 1 по firstrecord loginsDict = {} loginsDict[_header["id"][1]] = json.dumps( [user.getAttribute("login"), user.getAttribute("SID")]) loginsDict[_header["sid"][1]] = user.getAttribute("SID") loginsDict[_header["userName"][1]] = user.getAttribute("login") if isEmployees: # если таблица сотрудников существует (прописана в настройках) # добавляем в грид сотрудника колонку Сотрудник. if logins.tryGet(user.getAttribute("login")) and \ subjects.tryGet(logins.subjectId) and\ employees.tryGet(subjects.employeeId): loginsDict[_header["employee"][1]] = getattr( employees, employeesName) else: loginsDict[_header["employee"][1]] = '' loginsDict['properties'] = event data["records"]["rec"].append(loginsDict) if i >= firstrecord + pagesize: break # прерываем цикл после достижения записи № firstrecord + pagesize elif settings.isUseAuthServer(): # грид состоит из колонок sid, имя пользователя и субъект subjects = subjectsCursor(context) for i, user in enumerate(logins_xml.getElementsByTagName("user")): if i < firstrecord - 1: continue # пропускаем элементы с 1 по firstrecord loginsDict = {} loginsDict[_header["id"][1]] = user.getAttribute("login") loginsDict[_header["sid"][1]] = user.getAttribute("SID") loginsDict[_header["userName"][1]] = user.getAttribute("login") if logins.tryGet(user.getAttribute("login")) and subjects.tryGet( logins.subjectId): loginsDict[_header["subject"][1]] = subjects.name else: loginsDict[_header["subject"][1]] = '' loginsDict['properties'] = event data["records"]["rec"].append(loginsDict) if i >= firstrecord + pagesize: break # прерываем цикл после достижения записи № firstrecord + pagesize elif not settings.isUseAuthServer() and not settings.loginIsSubject(): # грид состоит из колонок имя пользователя и субъект subjects = subjectsCursor(context) logins.limit(firstrecord - 1, pagesize) for logins in logins.iterate(): loginsDict = {} loginsDict[_header["id"][1]] = logins.userName loginsDict[_header["userName"][1]] = logins.userName if subjects.tryGet(logins.subjectId): loginsDict[_header["subject"][1]] = subjects.name else: loginsDict[_header["subject"][1]] = "" loginsDict['properties'] = event data["records"]["rec"].append(loginsDict) else: # грид состоит из колонки имя пользователя subjects = subjectsCursor(context) logins.limit(firstrecord - 1, pagesize) for logins in logins.iterate(): loginsDict = {} loginsDict[_header["id"][1]] = logins.userName loginsDict[_header["userName"][1]] = logins.userName if isEmployees and subjects.tryGet( logins.subjectId) and employees.tryGet( subjects.employeeId): loginsDict[_header["employee"][1]] = getattr( employees, employeesName) else: loginsDict[_header["employee"][1]] = "" loginsDict['properties'] = event data["records"]["rec"].append(loginsDict) # сортировка if sortColumnList: data["records"]["rec"].sort(key=lambda x: (x[unicode(sortName)].lower()), reverse=(sortType == 'desc')) res = XMLJSONConverter.jsonToXml(json.dumps(data)) return JythonDTO(res, None)