# coding: utf-8 ''' Created on 06.05.2014 @author: Victor B. ''' import json from ru.curs.celesta.showcase.utils import XMLJSONConverter from common.sysfunctions import toHexForXml from common.sysfunctions import getGridHeight, getGridWidth from qt._qt_orm import QtiQuestionCursor, QtiThemeCursor try: from ru.curs.showcase.core.jython import JythonDTO from ru.curs.showcase.app.api import MessageType, UserMessage except: from ru.curs.celesta.showcase import JythonDTO def gridData(context, main=None, add=None, filterinfo=None, session=None, elementId=None, sortColumnList=None, firstrecord=None, pagesize=None): u'''Функция получения данных для грида. ''' u"""ID выделенной темы""" currentId = main # currentId = json.loads(session)["sessioncontext"]["related"]["gridContext"]["currentRecordId"] u"""Курсор таблицы serviceCatalog""" question = QtiQuestionCursor(context) u"""Выбор вопросов по выделенной теме""" question.setRange('ThemeID', currentId) u"""Определение переменной для JSON-данных""" data = {"records":{"rec":[]}} u"""Заголовки для столбцов грида""" _headers = {'id': ["~~id"], 'QuestionHtml': [u'Html вопроса'], 'QuestionImg': [u'Изображение вопроса'], 'QuestionNumber': [u'Номер вопроса'], 'QuestionType':[u'Тип вопроса'], 'ThemeID':[u'ID темы'], 'QuestionHtml2':[u'Html2 вопроса'], "properties": ["properties"]} u"""Приведение названий столбцов к формату поддерживаемому XML файлами""" for column in _headers: _headers[column].append(toHexForXml(_headers[column][0])) u"""Ограничение единовременно отображаемых данных в гриде""" question.limit(firstrecord - 1, pagesize) question.orderBy('QuestionOrder') q_types = {1: u'Одиночный выбор', 2: u'Множественный выбор', 3: u'Заполнение формы', 4: u'Соответствие', 5: u'Сортировка', 6: u'Классификация', 7: u'Карта-изображение', '': u'Не указан'} u"""Получения данных из таблицы serviceCatalog для отображения их в гриде""" for question in question.iterate(): questions_dict = {} questions_dict[_headers['id'][1]] = question.QuestionID questions_dict[_headers['QuestionHtml'][1]] = question.QuestionHtml.replace(' ', ' ') questions_dict[_headers['QuestionHtml2'][1]] = question.QuestionHtml2.replace(' ', ' ') if question.QuestionHtml2 else None questions_dict[_headers['QuestionNumber'][1]] = question.QuestionOrder questions_dict[_headers['QuestionType'][1]] = q_types[question.QuestionType] if question.QuestionType is not None else u'Не указан' questions_dict[_headers['properties'][1]] = {"event": { "@name":"row_single_click", "action": { "#sorted": [ {"main_context": "current"}, {"datapanel": { '@type':"current", '@tab':"current", 'element': { "@id": "btzAnswerGrid", "add_context": {"#text": question.QuestionType}}}}]}}} data["records"]["rec"].append(questions_dict) u"""Конвертация JSON-данных в XML""" data = XMLJSONConverter.jsonToXml(json.dumps(data)) return JythonDTO(data, None) def gridMeta(context, main, add=None, filterinfo=None, session=None, elementId=None): u"""Функция получения параметров для грида""" currentId = main # currentId = json.loads(session)["sessioncontext"]["related"]["gridContext"]["currentRecordId"] #Заголовки для столбцов грида _headers = {'id': ["~~id"], 'QuestionHtml': [u'Html вопроса'], 'QuestionNumber': [u'Номер вопроса'], 'QuestionType':[u'Тип вопроса'], 'ThemeID':[u'ID темы'], 'QuestionHtml2':[u'Html2 вопроса'], "properties": ["properties"]} #Количество записей в таблице question = QtiQuestionCursor(context) question.setRange('ThemeID', currentId) totalcount = question.count() question.close() #Наименование темы qti_theme = QtiThemeCursor(context) qti_theme.get(currentId) themeName = qti_theme.ThemeName qti_theme.close() #Настройки грида settings = {} settings["gridsettings"] = {"columns": { "col":[ {"@id":_headers["QuestionNumber"][0]}, {"@id":_headers["QuestionType"][0]}, {"@id":_headers["QuestionHtml"][0]}, {"@id":_headers["QuestionHtml2"][0]}]}, "labels": {"header": {"b": u'Вопросы по теме "%s"' % (themeName)}}, "properties": { "@gridHeight": getGridHeight(session, 2), "@gridWidth": '100%', "@totalCount": totalcount, "@pagesize": "50"}} return JythonDTO(None, XMLJSONConverter.jsonToXml(json.dumps(settings))) def gridToolBar(context, main=None, add=None, filterinfo=None, session=None, elementId=None): u"""Функция отображения панели инструментов""" session = json.loads(session)['sessioncontext'] try: questionId = session["related"]["gridContext"]["currentRecordId"] except: questionId = None #Переменная для задания стиля отображения кнопок style = "false" if questionId else 'true' #Настройка toolbar data = {"gridtoolbar": { "item": [ {"@img": 'gridToolBar/addDirectory.png', "@text":u"Добавить", "@hint":u"Добавить вопрос", "@disable": "false", "action": { "@show_in": "MODAL_WINDOW", "#sorted": [ {"main_context":"current"}, {"modalwindow": { "@caption": u"Добавление вопроса", "@height": "560", "@width": "640"}}, {"datapanel": { "@type": "current", "@tab": "current", "element": [ {"@id": "webQuestionAddEditCard", "add_context":"add"}]}}]}}, {"@img": 'gridToolBar/editDocument.png', "@text":u"Редактировать", "@hint":u"Редактировать вопрос", "@disable": style, "action": { "@show_in": "MODAL_WINDOW", "#sorted": [ {"main_context":"current"}, {"modalwindow": { "@caption": u"Редактирование вопроса", "@height": "560", "@width": "640"}}, {"datapanel": { "@type": "current", "@tab": "current", "element": { "@id": "webQuestionAddEditCard", "@keep_user_settings": "true", "add_context": "edit"}}}]}}, {"@img": 'gridToolBar/deleteDocument.png', "@text":u"Удалить", "@hint":u"Удалить вопрос", "@disable": style, "action": { "@show_in": "MODAL_WINDOW", "#sorted": [ {"main_context":"current"}, {"modalwindow": { "@caption": u"Удаление вопроса", "@height": "110", "@width": "360"}}, {"datapanel": { "@type": "current", "@tab": "current", "element": [ {"@id": "webQuestionDeleteCard", "add_context":"delete"}]}}]}}, {"@text":u"Отладка вопросов", "@hint":u"Отладка вопросов", "@disable":style, "action": { "@show_in":"MODAL_WINDOW", "#sorted": [ {"main_context":'current'}, {"modalwindow": { "@caption":u"Отладка вопросов", "@height":"320", "@width":"450"}}, {"datapanel": { "@type":"current", "@tab":"current", "element": { "@id":'debugQuestionCard', "add_context": "question"}}}]}}]}} return XMLJSONConverter.jsonToXml(json.dumps(data))