# coding: utf-8 ''' Created on 27.07.2015 ☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦ @author: tr0glo)|(I╠╣ ☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦☦ ''' from java.util import Date from java.sql import Timestamp import json from uuid import uuid4 from qt.functions import getAttributeValue, completeTest from ru.curs.celesta.showcase.utils import XMLJSONConverter try: from ru.curs.showcase.core.jython import JythonDTO from ru.curs.showcase.core.jython import JythonDownloadResult except: from ru.curs.celesta.showcase import JythonDTO from qt._qt_orm import TestingVariantAssignCursor, QtiVariantCursor, \ QtiVariantQuestionCursor, QtiVariantAnswerCursor, ContentCursor, \ Content_AttributeValueCursor, listAttributeContentCursor,\ QtiPackageAttributeCursor, QtiVariantParamsCursor def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None): u'''Карточка старта тестирования. ''' session = json.loads(session) variantId = main TVA = TestingVariantAssignCursor(context) TVA.get(variantId) packageId = TVA.PackageID TVA.close() QtiVariant = QtiVariantCursor(context) QtiVariant.get(variantId) variantName = QtiVariant.VariantName QtiVariant.close() QtiVariantAnswer = QtiVariantAnswerCursor(context) QtiVariantAnswer.setRange('VariantID',variantId) QtiVariantAnswer.first() #Определяем завершен ли тест if QtiVariantAnswer.TimeFinish is not None or Date() > QtiVariantAnswer.TimeEnd: QtiVariantAnswer.TimeFinish = QtiVariantAnswer.TimeEnd QtiVariantAnswer.update() testingStatus = '2' completeTest(context,variantId) else: testingStatus = '1' QtiVariantAnswer.close() # testingAlgorithm = getAttributeValue(Content,Content_Attribute,listAttributeContent,packageId,'TestName') # if testingAlgorithm is None: testingAlgorithm = u'Тестирование' attributeList = list() QtiPackageAttribute = QtiPackageAttributeCursor(context) QtiPackageAttribute.setRange('PackageID',packageId) #Атрибуты тестирования для отображения в карточке for attribute in QtiPackageAttribute.iterate(): if attribute.AttributeName is not None and attribute.AttributeValue is not None\ and attribute.AttributeName in [u'Учебная дисциплина', u'Модуль', u'Название теста', u'Способ прохождения тестирования', u'Количество заданий', u'Ограничение времени']: attributeList.append({"@id":attribute.AttributeID, "@name":attribute.AttributeName, "@value":attribute.AttributeValue }) QtiPackageAttribute.close() QtiVariantQuestion = QtiVariantQuestionCursor(context) QtiVariantQuestion.setRange('VariantID',variantId) questionCount = QtiVariantQuestion.count() xformsdata = {"schema": { "@xmlns":"", "description": { "TestingAlgorithm": testingAlgorithm, "testingStatus": testingStatus, "personPhoto": '', "VariantName": variantName, "QuestionCount": questionCount}, "attributes": {"attribute":attributeList}}} #Определяем идентификатор первого вопроса QtiVariantQuestion.setRange("QuestionNumber",1) QtiVariantQuestion.first() VariantQuestionId = QtiVariantQuestion.VariantQuestionID QtiVariantQuestion.close() if testingStatus == '1': #Если тестирование не завершено, то доступен переход к первому вопросу xformssettings = {"properties": { "event": [ {"@name":"single_click", "@linkId": "1", "action":{ "#sorted": [ {"navigator": {"@element":VariantQuestionId}}]}}]}} else: #Если тестирование завершено, то доступны переходы к списку вопросов и результатам тестирования xformssettings = {"properties": {"event": [ {"@name":"single_click", "@linkId": "1", "action":{ "#sorted": [ {"navigator": {"@element":'ID_CONTENTS'}}]}}, {"@name":"single_click", "@linkId": "2", "action": { "#sorted": [ {"navigator": {"@element":'ID_FINISH'}}]}}]}} #print XMLJSONConverter(input=xformsdata).parse(), XMLJSONConverter(input=xformssettings).parse() return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)), XMLJSONConverter.jsonToXml(json.dumps(xformssettings))) def cardDataSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None): u'''Карточка сохранения стартовой страницы.В ней генерируется вариант, если он её не был сгенерирован''' variantId = main TVA = TestingVariantAssignCursor(context) TVA.get(variantId) # packageId = TVA.PackageID AlgorithmTestingId = TVA.AlgorithmTestingID TVA.close() QtiVariantAnswer = QtiVariantAnswerCursor(context) QtiVariantAnswer.setRange('VariantID',variantId) if AlgorithmTestingId != 2 and QtiVariantAnswer.count() == 0: QtiVariantParams = QtiVariantParamsCursor(context) timeTest = getAttributeValue(QtiVariantParams, variantId, 'TimeTest') QtiVariantParams.close() if timeTest is None: timeTest = 20 else: timeTest = int(timeTest) QtiVariantAnswer.VariantAnswerID = unicode(uuid4()) QtiVariantAnswer.VariantID = variantId QtiVariantAnswer.TimeBegin = Timestamp(Date()) QtiVariantAnswer.TimeEnd = Timestamp(QtiVariantAnswer.TimeBegin.getTime() + timeTest*60*1000) QtiVariantAnswer.insert() QtiVariantAnswer.close()