# coding: utf-8 ''' Created on 24.07.2015 @author: tr0glo)|(I╠╣ ''' import json from qt._qt_orm import QtiPackageCursor, QtiThemeCursor from ru.curs.celesta.showcase.utils import XMLJSONConverter from security.functions import userHasPermission from author.functions.getUrlParams import getUrlParam def navigator_catalog(context, session): '''Навигатор тестирования''' session = json.loads(session) resultJSON = {"group":{"@id": "catalogNav", "@name": u"Каталог ЭОР", "level1":[]}} sid = session['sessioncontext']['sid'] if not userHasPermission(context, sid, "navigatorAuthor"): context.error(u"У пользователя нет доступа") if 'urlparam' not in session['sessioncontext']['urlparams']: # Катадог БТЗ itemsBTZ = [] itemsBTZ.append({"@id": "catalogBTZ", "@name": u"Каталог БТЗ", "@selectOnLoad": "false", "action":{ "#sorted": [ {"main_context": ""}, {"datapanel":{"@type": "author.datapanel.datapanel_author.catalogDatapanel.cl"}}]}}) itemsBTZ.append({"@id": "webServiceCatalog", "@name": u"Каталог веб сервисов", "@selectOnLoad": "false", "action": { "#sorted": [ {"main_context": "current"}, {"datapanel": { "@type": "author.datapanel.datapanel_webServiceCatalog.catalogDatapanel.celesta", "@tab": "firstOrCurrent"}}]}}) itemsBTZ.append({"@id": "subscribedServiceCatalog", "@name": u"Каталог подписанных сервисов", "@selectOnLoad": "false", "action":{ "#sorted": [ {"main_context": ""}, {"datapanel":{"@type": "author.datapanel.datapanel_subscribedServiceCatalog.catalogDatapanel.cl"}}]}}) levelBTZ = {'@id': 'levelBTZ', '@name': 'БТЗ', '#sorted': [{'level2': itemsBTZ}]} resultJSON["group"]["level1"].append(levelBTZ) # Катадог Лекций itemsVideoLecture = {"@id": "catalogVideoLecture", "@name": u"Лекции", "@selectOnLoad": "false", "action":{ "#sorted": [ {"main_context": ""}, {"datapanel":{"@type": "author.datapanel.datapanel_author.catalogLectureDatapanel.cl"}}]}} resultJSON["group"]["level1"].append(itemsVideoLecture) # Катадог Практических занятий itemsPractical = {"@id": "catalogPractical", "@name": u"Практические занятия", "@selectOnLoad": "false", "action":{ "#sorted": [ {"main_context": ""}, {"datapanel":{"@type": "author.datapanel.datapanel_author.catalogPracticalDatapanel.cl"}}]}} resultJSON["group"]["level1"].append(itemsPractical) else: isCorrect = checkUrlParams(session, context) if isCorrect: packageId = getUrlParam(session, 'package') packageCur = QtiPackageCursor(context) if packageCur.tryGet(packageId): packageName = packageCur.PackageName else: context.error(u'Ошибка при получении имени БТЗ по ИД="{}"'.format(packageId)) packageCur.close packageJSON = {"@id": "webServiceCatalog", "@name": u'БТЗ "{}"'.format(packageName), "@selectOnLoad": "true", "#sorted": [ {"action": { "#sorted": [ {"main_context": "current"}, {"datapanel": { "@type": "author.datapanel.datapanel_webThemeAndQuestion.catalogDatapanel.celesta", "@tab": "firstOrCurrent"}}]}}]} packageThemes = [] themesCur = QtiThemeCursor(context) themesCur.setRange('PackageID', packageId) themesCur.orderBy('ThemeOrder') for themeItem in themesCur.iterate(): themeId = themeItem.ThemeID themeJson = { '@id': 'theme-{}'.format(themeId), '@name': themeItem.ThemeName, 'action': { '#sorted': [ {'main_context': themeId}, {'datapanel': { '@type': 'author.datapanel.datapanel_webThemeAndQuestion.catalogThemeDatapanel.celesta', '@tab': 'firstOrCurrent'}}]}} packageThemes.append(themeJson) themesCur.close() if packageThemes: packageJSON['#sorted'].append({'level2': packageThemes}) resultJSON['group']['level1'].append(packageJSON) if not resultJSON['group']['level1']: resultJSON = {"group": None} return resultJSON def navSettings(context, session): u"""Функция выставляет настройки навигатора. Поменять параметры myNavigator при необходимости""" session = json.loads(session) if session['sessioncontext']['userdata'] == 'qtAuthor': if 'urlparam' not in session['sessioncontext']['urlparams']: myNavigator = {"@width": "250px", "@hideOnLoad": "false"} else: myNavigator = {"@width": "250px", "@hideOnLoad": "true"} else: u"""Если url параметры не присутствуют """ if 'urlparam' not in session['sessioncontext']['urlparams']: myNavigator = {"@width": "250px", "@hideOnLoad": "false"} else: u"""Если url параметры присутствуют """ myNavigator = {"@width": "250px", "@hideOnLoad": "false"} return myNavigator def checkUrlParams(session, context): u"""Функция проверяет правильность введенных url параметров""" u"""Возвращает True если параметры верны""" u"""Ожидаемые url параметры""" requiredParameters = ["mode", "package"] u"""Количество ожидаемых url параметров""" numberOfRequiredParameters = len(requiredParameters) u"""Количество полученных url параметров""" numberOfRecievedParameters = 0 u"""Полученные параметры""" recievedParameters = [] urlparams = session['sessioncontext']['urlparams']['urlparam'] if not isinstance(urlparams, list): urlparams = [urlparams] u"""Проверка параметров @name""" for urlparam in urlparams: if urlparam["@name"] not in requiredParameters: context.error(u"Недопустимый параметр '%s'! Список допустимых параметров: %s" % (urlparam["@name"], requiredParameters)) return False elif urlparam["@name"] == "mode": if len(urlparam["@value"]) > 1: context.error(u"Лишний параметр mode") u"""Проверка значения для параметра @name""" for var in urlparam["@value"]: # if ''.join(var.split()) != "btz": if var.strip() != "btz": context.error(u"Ошибка! Значение '%s' недопустимо для параметра 'mode'" % (var)) return False numberOfRecievedParameters += 1 recievedParameters.append("mode") elif urlparam["@name"] == "package": if len(urlparam["@value"]) > 1: context.error(u"Лишний параметр package") qt_qtilPackage = QtiPackageCursor(context) u"""Получение packageId из url запроса""" for packageId in urlparam["@value"]: # packageId = ''.join(packageId.split()) Был косяк в платформе u"""Проверка присутствия полученного packageId в таблице qt.qtilPackage""" if not qt_qtilPackage.tryGet(packageId): context.error(u"Ошибка! Несуществующий packageId для параметра 'package'") return False numberOfRecievedParameters += 1 recievedParameters.append("package") # if numberOfRecievedParameters < numberOfRequiredParameters: if len(recievedParameters) < numberOfRequiredParameters: context.error(u"Недостаточно url параметров. Список необходимых параметров: %s. Список полученных параметров: %s." % (requiredParameters, recievedParameters)) else: return True