Exemple #1
0
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"Недостаточно прав для данной операции!")
Exemple #2
0
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)
Exemple #3
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)
Exemple #4
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)
Exemple #5
0
def getSubjectByLogin(context, login):

    subject = subjectsCursor(context)
    logins = loginsCursor(context)
    logins.get(login)
    subject.get(logins.subjectId)
    logins.close()
    return subject
Exemple #6
0
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)))
Exemple #7
0
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)))
Exemple #8
0
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()
Exemple #9
0
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
Exemple #10
0
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()
Exemple #11
0
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()
Exemple #12
0
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()
Exemple #13
0
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()
Exemple #15
0
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)))
Exemple #16
0
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)
Exemple #17
0
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)
Exemple #18
0
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"Недостаточно прав для данной операции!")
Exemple #19
0
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)))
Exemple #20
0
def blockUser(context, sid, block=True):
    subject = subjectsCursor(context)
    subject.get(sid)
    subject.isBlocked = block
    subject.update()
    subject.close()
Exemple #21
0
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)