Beispiel #1
0
def term(request, *args, **kwargs):
    if request.method == 'POST':
        if models.Setting.getvalue('installed') == 'True':
            failure = '您已经配置过本服务器,无法重新配置!'
            return create_failure_dict(msg=failure)

        f = TermFormSet(request.POST)
        if f.is_valid():
            models.Term.objects.all().delete()  # 删除旧数据进行全新安装
            for i in f.forms:
                i.save()
            install_step = models.Setting.objects.get(name='install_step')
            install_step.value = request.POST['install_step']
            install_step.save()
            return create_success_dict(msg='安装成功!')

        return create_failure_dict(msg='安装失败!', errors=f.errors)

    elif request.method == "GET":
        if models.Setting.getvalue('installed') == 'True':
            return HttpResponseRedirect('/')

        q = models.Term.objects.all().values('term_type', 'start_date',
                                             'end_date', 'school_year')
        return create_success_dict(data=model_list_to_dict(q))
Beispiel #2
0
def check_md5(request):
    '''
        前端校验课件是否有处理过
        # existing : 0(无文件无纪录) , 1(有文件无纪录) , 2(有文件有纪录)
    '''
    md5 = request.GET.get('md5').strip().upper()
    mac = request.GET.get('mac').strip().upper()
    term_uuid = request.GET.get('term_uuid', make_term_uuid())

    if not courseware_exist(md5):
        # print '无重复的md5,可以上传'
        return create_success_dict(existing=0,
                                   md5=md5,
                                   mac=mac,
                                   msg='无重复的md5,可以上传')
    else:
        if not teacherloginlogcourseware_exist(md5, mac, term_uuid):
            # print '有md5,但无该老师上课纪录'
            return create_success_dict(existing=1,
                                       md5=md5,
                                       mac=mac,
                                       msg='有md5,但无该老师上课纪录')
        else:
            # print '有md5,同时也有该老师上课纪录'
            return create_success_dict(existing=2,
                                       md5=md5,
                                       mac=mac,
                                       msg='有md5,同时也有该老师上课纪录')
Beispiel #3
0
def grade_class(request, *args, **kwargs):
    if request.method == 'POST':
        if models.Setting.getvalue('installed') == 'True':
            failure = '您已经配置过本服务器,无法重新配置!'
            return create_failure_dict(msg=failure)

        f = ClassFormSet(request.POST)
        if f.is_valid():
            # 删除旧数据进行全新安装
            cursor = connection.cursor()
            cursor.execute('DELETE FROM `Class`')
            cursor.execute('DELETE FROM `Grade`')
            for i in f.forms:
                i.save()
            install_step = models.Setting.objects.get(name='install_step')
            install_step.value = request.POST['install_step']
            install_step.save()
            return create_success_dict(msg='安装成功!')

        return create_failure_dict(msg='安装失败!', errors=f.errors)

    elif request.method == 'GET':
        if models.Setting.getvalue('installed') == 'True':
            return HttpResponseRedirect('/')

        q = models.Class.objects.all().values('grade__name', 'name')
        return create_success_dict(data=model_list_to_dict(q))
Beispiel #4
0
def clean_token(request, *args, **kwargs):
    """客户端取消当前的登录操作,清除掉本次登录产生的token"""
    client_mac = request.GET.get('mac')
    term = models.Term.get_current_term_list()
    if not term:
        return create_failure_dict(msg=u'无可用学年学期.', debug='no term')
    cls = models.ClassMacV2.objects.filter(
        mac=client_mac,
        class_uuid__grade__term=term[0]
    )
    if not cls.exists():
        return create_failure_dict(msg=u'客户端尚未申报.', debug='not reported')

    uuid = str(cls[0].class_uuid.pk).lower().replace('-', '')
    models.Token.objects.filter(
        token_type='lesson_start',
        value=uuid
    ).all().delete()
    return create_success_dict(debug=uuid)

    # 前端要求这里只传递MAC地址,所以换成上面的清理方法.
    token_key = request.GET.get('token')
    if token_key:
        tokens = models.Token.objects.filter(token_type='lesson_start', value=token_key)
        tokens.all().delete()
        return create_success_dict(debug=token_key)
    return create_failure_dict(msg=u'参数获取失败.', debug='token')
Beispiel #5
0
def lesson_name(request, *args, **kwargs):
    if request.method == 'POST':
        if models.Setting.getvalue('installed') == 'True':
            failure = '您已经配置过本服务器,无法重新配置!'
            return create_failure_dict(failure)

        f = LessonNameFormSet(request.POST)
        if f.is_valid():
            models.LessonName.objects.all().delete()  # 删除旧数据进行全新安装
            school = models.Group.objects.get(group_type='school')
            for i in f.forms:
                obj = i.save(commit=False)
                obj.school = school
                obj.save()
            install_step = models.Setting.objects.get(name='install_step')
            install_step.value = request.POST['install_step']
            install_step.save()
            return create_success_dict(msg='安装成功!')

        return create_failure_dict(msg='安装失败!', errors=f.errors)
    elif request.method == 'GET':
        if models.Setting.getvalue('installed') == 'True':
            return HttpResponseRedirect('/')

        q = models.LessonName.objects.all().values('name')
        return create_success_dict(data=model_list_to_dict(q))
Beispiel #6
0
def get_unreported(request, *args, **kwargs):
    """客户端获取未申报的电脑教室列表"""
    if models.Setting.getvalue('server_type') != 'school':
        return create_failure_dict()
    term = models.Term.get_current_term_list()
    if not term:
        return create_failure_dict(msg='当前时间不在任何学期内')
    t = term[0]
    cc = models.ComputerClass.objects.filter(class_bind_to__grade__term=t)
    if cc.exists():
        uuids = models.ClassMacV2.objects.all().values_list('class_uuid',
                                                            flat=True)
        cc = cc.exclude(class_bind_to__in=uuids).order_by(
            'class_bind_to__name',
            'class_bind_to__number').values_list('class_bind_to',
                                                 'class_bind_to__name',
                                                 'class_bind_to__number',
                                                 'class_bind_to__grade__uuid',
                                                 flat=False)
        data = map(
            lambda c: {
                'uuid': c[0],
                'name': c[1],
                'number': c[2],
                'grade_uuid': c[3]
            }, cc)
        return create_success_dict(data=data, term=model_list_to_dict(term))
    return create_success_dict(data=[])
Beispiel #7
0
def get_choices(request):
    """添加班级的时候获取可选的班号"""
    grade_name = request.GET.get('grade_name', None)
    grade_number = str_util.grade_name_to_number(grade_name)
    custom_grade_name = settings.CONF.server.grade_map.get(
        grade_name) or settings.CONF.server.grade_map.get(
            str(grade_name)) or grade_name
    terms = models.Term.get_current_term_list()
    if not terms:
        return create_success_dict(data=[], debug='no term')
    if not grade_name:
        return create_success_dict(data=[], debug='grade_name needed')
    try:
        g = models.Grade.objects.get(term=terms[0],
                                     name=custom_grade_name,
                                     number=grade_number)
        lst = g.class_set.values_list('number', flat=True)
        lst = set(range(1, max(lst and lst or [1]) + 2)) - set(lst)
        numbers = list(lst)
        return create_success_dict(data=[{
            'text': i
        } for i in numbers],
                                   debug='some one')
    except models.Grade.DoesNotExist:
        return create_success_dict(data=[
            {
                'text': 1
            },
        ], debug='first one')
    except Exception as e:
        return create_success_dict(data=[], debug=str(e))
Beispiel #8
0
def check_data(request):
    if request.method == 'POST':
        if models.Setting.getvalue('server_type') == 'school':
            return
        key = request.POST.get('key')
        try:
            node = models.Node.objects.get(communicate_key=key)
            if node.last_upload_id > 0:
                return create_success_dict(data={'has_records': True})
            else:
                return create_success_dict(data={'has_records': False})
        except:
            logger.exception('')
            return create_failure_dict()
Beispiel #9
0
def list_current(request, *args, **kwargs):
    school_uuid = request.GET.get('school_uuid')
    donot_pagination = request.GET.get('donot_pagination', False)
    q = models.LessonName.objects.filter(deleted=False)
    if school_uuid:
        q = q.filter(school__uuid=school_uuid)
    if models.Setting.getvalue('server_type') == 'school':
        q = q.values('uuid', 'name', 'types')
    else:
        q = q.order_by().values('name').distinct()

    order_lst = [
        u'',
        u'小学',
        u'小学,初中',
        u'小学,高中',
        u'小学,初中,高中',
        u'初中',
        u'初中,高中',
        u'高中',
    ]
    if len(q):
        q = list(q)
        q.sort(key=lambda d: len(d['name']))
        q.sort(key=lambda d: d.has_key('types') and d['types'] in order_lst and
               order_lst.index(d['types']) or -1)

    if donot_pagination == 'true':
        return create_success_dict(
            data={
                'records': model_list_to_dict(q),
                'page': 1,
                'page_size': len(q),
                'record_count': len(q),
                'page_count': 1,
            })

    page_info = get_page_info(request)
    page_data = db_utils.pagination(q, **page_info)

    return create_success_dict(
        data={
            'records': model_list_to_dict(page_data['records']),
            'page': page_data['page_num'],
            'page_size': page_data['page_size'],
            'record_count': page_data['record_count'],
            'page_count': page_data['page_count'],
        })
Beispiel #10
0
def add(request, *args, **kwargs):
    if request.method == 'POST':
        try:
            f = LessonTeacherForm(request.POST)
            if f.is_valid():
                lesson_teacher = f.save()
                simplecache.LessonTeacher.update(
                    lesson_teacher.class_uuid.uuid)
                data = model_to_dict(lesson_teacher)
                school_year = lesson_teacher.class_uuid.grade.term.school_year
                data['class_uuid__grade__term__school_year'] = school_year
                term_type = lesson_teacher.class_uuid.grade.term.term_type
                data['class_uuid__grade__term__term_type'] = term_type
                grade_name = lesson_teacher.class_uuid.grade.name
                data['class_uuid__grade__name'] = grade_name
                data['class_uuid__name'] = lesson_teacher.class_uuid.name
                data['lesson_name__name'] = lesson_teacher.lesson_name.name
                data['teacher__name'] = lesson_teacher.teacher.name
                try:
                    stat_obj = models.Statistic.objects.get(
                        key=lesson_teacher.class_uuid.pk)
                    stat_obj.cala('teacher_num', True)
                except Exception as e:
                    logger.exception(e)
                return create_success_dict(msg='添加班级课程授课教师记录成功!', data=data)

            return create_failure_dict(msg='添加班级课程授课教师记录失败!', errors=f.errors)
        except IntegrityError:
            msg = '已有相同的年级班级-课程-教师姓名,无法重复添加!'
            return create_failure_dict(msg=msg)
        except Exception as e:
            logger.exception(e)
            return create_failure_dict(msg=u'添加班级课程授课教师记录失败!', debug=str(e))
def get(request, *args, **kwargs):
    if request.method == 'GET':
        try:
            host = models.Setting.objects.get(name='host')
            host = host.value
        except:
            host = ''
        try:
            port = models.Setting.objects.get(name='port')
            # port = port.value
            # FIXME
            # 初始化安装的时候,前端请求默认端口(websocket等)
            # 这里直接后台固定为 11111
            port = '11111'
        except:
            port = ''
        try:
            o = models.Setting.objects.get(name='show_download_btn')
            show_download_btn = str(o.value).lower()
        except:
            show_download_btn = 'true'
        try:
            o = models.Setting.objects.get(name='html_title')
            html_title = o.value
        except:
            html_title = u'噢易班班通管理分析系统'

        return create_success_dict(
            data={
                'host': host,
                'port': port,
                'show_download_btn': show_download_btn,
                'html_title': html_title
            })
Beispiel #12
0
def delete(request, *args, **kwargs):
    if request.method == 'POST':
        if not cache.get('sudo'):
            return create_failure_dict(msg='请输入正确的超级管理员admin密码!')
        uu = request.POST.get('uuid')
        if uu:
            try:
                l = models.LessonPeriod.objects.get(uuid=uu)
            except:
                return create_failure_dict(msg='错误的uuid!')
            term = l.term
            try:
                if not term.allow_import_lesson():
                    return create_failure_dict(msg='该作息时间对应的学年学期已过期,不能删除')
            except Exception, e:
                logger.exception(e)
                return create_failure_dict(msg='该作息时间对应学年学期有误,删除失败')

            max_sequence = models.LessonPeriod.objects.filter(term=term)
            max_sequence = max_sequence.aggregate(Max('sequence'))
            if l.sequence == max_sequence['sequence__max']:
                l.delete()
                return create_success_dict(msg='删除作息时间成功!')
            else:
                return create_failure_dict(msg='只能删除最大的一个节次!')
Beispiel #13
0
def group_get_children(request):
    if request.method == 'GET':
        if models.Setting.getvalue('installed') == 'True':
            failure = '您已经配置过本服务器,无法重新配置!'
            return create_failure_dict(msg=failure)
        province_name = request.GET.get('province_name')
        city_name = request.GET.get('city_name')
        country_name = request.GET.get('country_name')
        q = None
        if province_name and city_name and country_name:
            q = models.GroupTB.objects.filter(parent__name=country_name,
                                              parent__parent__name=city_name)
            q = q.filter(parent__parent__parent__name=province_name)
            q = q.values('name')
        elif province_name and city_name:
            q = models.GroupTB.objects.filter(parent__name=city_name)
            q = q.filter(parent__parent__name=province_name)
            q = q.values('name')
        elif province_name:
            q = models.GroupTB.objects.filter(parent__name=province_name)
            q = q.values('name')
        else:
            q = models.GroupTB.objects.filter(parent_id__isnull=True)
            q = q.values('name')
        return create_success_dict(data={'children': model_list_to_dict(q)})
Beispiel #14
0
def usb_check(request):
    if models.Setting.getvalue('server_type') != 'school':
        return create_failure_dict()
    if request.method == 'GET':
        key = request.GET.get('key')
        mac = request.GET.get('mac')
        try:
            u = models.UsbkeyTeacher.objects.get(usbkey_uuid=key)
        except:
            return create_failure_dict(msg='无效的USBKey!')
        try:
            t = models.Teacher.objects.get(uuid=u.teacher_uuid)
        except:
            return create_failure_dict(msg='找不到对应教师!')
        try:
            c = models.Class.objects.get(classmacv2__mac=mac)
        except:
            return create_failure_dict(msg='MAC地址未申报!')
        q = models.LessonTeacher.objects.filter(class_uuid=c, teacher=t)
        if not q.exists():
            return create_failure_dict(msg='教师在本班没有排课!')
        data = {
            'teacher': {
                'key': t.uuid,
                'sequence': t.sequence,
                'name': t.name,
                'password': t.password
            }
        }
        return create_success_dict(data=data)
Beispiel #15
0
def get_mac_status(request, *args, **kwargs):
    '''从MAC地址查询班级申报状态'''
    if models.Setting.getvalue('server_type') != 'school':
        return create_failure_dict()
    terms = models.Term.get_current_term_list()
    if not terms:
        return create_failure_dict(msg=u'当前时间不在任何学期内')

    mac = request.GET.get('mac', '').strip()
    ip = request.META['REMOTE_ADDR']
    data = {
        'reported': False,
        'computerclass': False,
        'class_uuid': None,
        'grade_uuid': None
    }

    if not mac:
        return create_failure_dict(msg=u'客户端MAC获取失败.')
    try:
        o = models.ClassMacV2.objects.get(mac=mac,
                                          class_uuid__grade__term__in=terms)
        if o.ip != ip:
            o.ip = ip
            o.save()
        data['reported'] = True
        data['class_uuid'] = o.class_uuid.uuid
        data['grade_uuid'] = o.class_uuid.grade.uuid
        data['computerclass'] = (o.class_uuid.grade.number == 13)
    except models.ClassMacV2.DoesNotExist:
        simplecache.set_class_noreport_heartbeat_ip(ip)
    except Exception as e:
        logger.exception('')
        return create_failure_dict(data=data, msg=u'客户端状态获取失败', debug=str(e))
    return create_success_dict(data=data)
Beispiel #16
0
def verify(request, *args, **kwargs):
    if request.method == 'POST':
        f = TermUploadForm(request.POST, request.FILES)
        if f.is_valid():
            ret = f.verify()
            return create_success_dict(data={'records': ret})
        return create_failure_dict(msg='校验学年学期失败!', errors=f.errors)
Beispiel #17
0
def add(request, *args, **kwargs):
    if request.method == 'POST':
        f = ClassForm(request.POST)
        if f.is_valid():
            f.save()
            return create_success_dict(msg='添加班级成功!')
        return create_failure_dict(msg='添加班级失败!', errors=f.errors)
Beispiel #18
0
def step(request, *args, **kwargs):
    if request.method == 'POST':
        if models.Setting.getvalue('installed') == 'True':
            failure = '您已经配置过本服务器,无法重新配置!'
            return create_failure_dict(msg=failure)

        f = StepForm(request.POST)
        if f.is_valid():
            f.save()
            return create_success_dict(msg='安装成功!')

        return create_failure_dict(msg='安装失败!', errors=f.errors)

    elif request.method == 'GET':
        install_step = models.Setting.getvalue('install_step')
        return create_success_dict(install_step=install_step)
Beispiel #19
0
def get_pics_count_by_date(request, *args, **kwargs):
    """班班通桌面使用日志,用于返回请求的日期时间轴的每日桌面预览信息"""
    # ValidateDateRangeMiddleware 中简单忽略掉了对时间跨学年学期的判断
    start_date = request.GET.get('start_date', None)
    end_date = request.GET.get('end_date', None)
    class_uuid = request.GET.get('class_uuid', None)
    lesson_period_sequence = request.GET.get('lesson_period_sequence', None)

    if start_date and end_date and class_uuid:
        start_date = parse_date(start_date)
        end_date = parse_date(end_date)
        ret = {}
        n = (end_date - start_date).days + 1
        for t in range(n):
            created_at = start_date + datetime.timedelta(t)
            s = datetime.datetime.combine(created_at, datetime.time.min)
            e = datetime.datetime.combine(created_at, datetime.time.max)
            pic = models.DesktopPicInfo.objects.filter(class_uuid=class_uuid,
                                                       created_at__range=(s,
                                                                          e))
            if lesson_period_sequence:
                pic = pic.filter(lesson_period_sequence=lesson_period_sequence)
            ret[str(created_at)] = pic.count()

        return create_success_dict(data=ret)

    return create_failure_dict(msg='获取参数失败!')
Beispiel #20
0
def restore(request, *args, **kwargs):
    if request.method == 'POST':
        if not is_admin(request.current_user):
            return create_failure_dict(msg='只有系统管理员admin才能执行此操作!')
        try:
            f = request.FILES.get('excel')
            data = ''
            for chunk in f.chunks():
                data += chunk
            data = bz2.decompress(data)
            lines = data.split('\n')
            # 清空数据库
            _truncate_tables()
            meta = {}
            for line in lines:
                if len(line) == 0:
                    continue
                if line.startswith('meta:'):
                    # print line
                    meta = json.loads(line[5:])
                else:
                    models.SyncLogPack.unpack_log('add', line)
            # 清空SyncLog
            models.SyncLog.objects.all().delete()
            # 设置SyncLog AUTO_INCREMENT
            cursor = connection.cursor()
            n = meta['last_upload_id'] + 1
            cursor.execute('ALTER TABLE SyncLog AUTO_INCREMENT=%d' % n)
            return create_success_dict(msg='数据恢复成功!')
        except:
            traceback.print_exc()
Beispiel #21
0
def list_current_class(request, *args, **kwargs):
    page_info = get_page_info(request)
    school_uuid = request.GET.get('school_uuid')

    q = models.LessonName.objects.filter(deleted=False)
    if school_uuid:
        q = q.filter(school__uuid=school_uuid)
    # MH:filter if class is selected
    # MH:return q.filter if lesson_name is exist
    try:
        class_uuid = request.GET.get('class_uuid')
        if class_uuid:
            c = models.LessonSchedule.objects.filter(deleted=False)
            lesson_name = c.filter(
                class_uuid=class_uuid).values('lesson_name_uuid')
            if lesson_name:
                q = q.filter(lesson_name__uuid__in=lesson_name)
    except:
        pass
    if models.Setting.getvalue('server_type') == 'school':
        #q = q.values('uuid', 'name')
        q = q.values('uuid', 'name', 'types')
    else:
        q = q.order_by().values('name').distinct()
    page_data = db_utils.pagination(q, **page_info)

    return create_success_dict(
        data={
            'records': model_list_to_dict(page_data['records']),
            'page': page_data['page_num'],
            'page_size': page_data['page_size'],
            'record_count': page_data['record_count'],
            'page_count': page_data['page_count'],
        })
Beispiel #22
0
def get_pics_info_by_date(request, *args, **kwargs):
    """班班通桌面使用日志,用于返回请求日期的图片信息"""
    date = request.GET.get('date', None)
    class_uuid = request.GET.get('class_uuid', None)
    lesson_period_sequence = request.GET.get('lesson_period_sequence', None)

    if date and class_uuid:
        date = parse_date(date)
        s = datetime.datetime.combine(date, datetime.time.min)
        e = datetime.datetime.combine(date, datetime.time.max)
        pic = models.DesktopPicInfo.objects.filter(class_uuid__uuid=class_uuid)
        pic = pic.filter(created_at__range=(s, e))
        if lesson_period_sequence:
            pic = pic.filter(lesson_period_sequence=lesson_period_sequence)
        pic = pic.values('grade__name', 'class_uuid__name', 'lesson_name',
                         'teacher_name', 'lesson_period_sequence',
                         'created_at', 'host', 'url').order_by('created_at')

        q = []
        for i in pic:
            d = {}
            d['grade_name'] = i['grade__name']
            d['class_name'] = i['class_uuid__name']
            d['lesson_name'] = i['lesson_name']
            d['teacher_name'] = i['teacher_name']
            d['lesson_period_sequence'] = i['lesson_period_sequence']
            d['created_at'] = i['created_at']
            d['host'] = i['host']
            d['url'] = i['url']
            q.append(d)
        return create_success_dict(data={'records': q})
    return create_failure_dict(msg='获取参数失败!')
def set(request, *args, **kwargs):
    if request.method == 'POST':
        host = request.POST.get('host')
        port = request.POST.get('port')
        show_download_btn = request.POST.get('show_download_btn', False)
        html_title = request.POST.get('html_title')
        if host:
            i, c = models.Setting.objects.get_or_create(name='host')
            if i.value != host:
                i.value = host
                i.save()
        if port:
            i, c = models.Setting.objects.get_or_create(name='port')
            if i.value != port:
                i.value = port
                i.save()
        obj, c = models.Setting.objects.get_or_create(name='show_download_btn')
        obj.value = show_download_btn == 'true' and True or False
        obj.save()

        if html_title:
            obj, c = models.Setting.objects.get_or_create(name='html_title')
            obj.value = html_title
            obj.save()

        install._package_client_file()
        return create_success_dict(msg='修改成功')
Beispiel #24
0
def _result(request, cache_key, fields):
    page_info = get_page_info(request)
    start_date = request.GET.get('start_date')
    end_date = request.GET.get('end_date')
    school_year = request.GET.get('school_year')
    term_type = request.GET.get('term_type')

    cache.set(cache_key, json.dumps(request.GET), None)
    q, total_teachers, active_teachers, title = teacher_active_query(
        request.GET)
    q = q.values(*fields)
    q = q.annotate(total_teachers=Count('teacher', distinct=True))
    paginator = Paginator(q, page_info['page_size'])
    records = list(paginator.page(page_info['page_num']).object_list)
    records = format_record.teacher_active(records, total_teachers, start_date,
                                           end_date, school_year, term_type)
    ret = create_success_dict(
        data={
            'page': page_info['page_num'],
            'page_count': paginator.num_pages,
            'page_size': page_info['page_size'],
            'record_count': paginator.count,
            'records': records,
            'total': {
                'total_teachers': total_teachers.count(),
                'active_teachers': active_teachers
            },
        })
    return ret
Beispiel #25
0
def add(request, *args, **kwargs):
    if request.method == 'POST':
        host = request.POST.get('host')
        port = request.POST.get('port')
        key = request.POST.get('key')
        # show_download_btn = request.POST.get('show_download_btn', False)
        # 根据 host port key 取得该校级服务器在上级服务器中的node_id
        node_id = models.Setting.get_node_id_from_top(host, port, key)
        if node_id:
            obj, c = models.Setting.objects.get_or_create(name='sync_node_id')
            obj.value = node_id
            obj.save()
        else:
            logger.exception('')
            return create_failure_dict(msg='获取本服务器在上级服务的NODE ID失败')

        obj, c = models.Setting.objects.get_or_create(name='sync_server_host')
        obj.value = host
        obj.save()
        obj, c = models.Setting.objects.get_or_create(name='sync_server_port')
        obj.value = port
        obj.save()
        obj, c = models.Setting.objects.get_or_create(name='sync_server_key')
        obj.value = key
        obj.save()

        # 删除token,使得服务器在同步时重新login,上级重新生成<id>.node文件
        models.Setting.objects.filter(name='sync_server_token').delete()
        return create_success_dict(msg='上级服务器设置成功!')
Beispiel #26
0
def edit(request):
    '''
        教学点管理>编辑
    '''
    if request.method == 'POST':
        if Setting.getvalue('server_type') != 'country':
            return create_failure_dict(msg='教学点仅支持县级服务器')

        id = request.POST.get('uuid')
        obj = EduPoint.objects.get(id=id)

        f = EduPointEditForm(request.POST, instance=obj)
        if f.is_valid():
            number = f.cleaned_data['number']
            remark = f.cleaned_data['remark']
            if number < obj.number:
                return create_failure_dict(msg='教学点修改终端数量不能小于原始数量')

            obj.number = number
            obj.remark = remark
            obj.save()

            return create_success_dict(msg='成功编辑教学点')

        return create_failure_dict(msg='教学点添加失败', errors=f.errors)
Beispiel #27
0
def get_remain_time(request):
    '''获取每个班级的剩余可分配课时'''
    if request.method == 'GET':
        data = request.GET
    else:
        data = request.POST
    grade_name = data.get('grade_name')
    class_name = data.get('class_name')

    try:
        term = models.Term.get_current_term_list()[0]
        class_obj = models.Class.objects.get(name=class_name,
                                             grade__name=grade_name,
                                             grade__term=term)
    except Exception as e:
        logger.exception(e)
        return create_failure_dict(msg='错误的班级名称')

    remain_time = class_obj.cala_remain_time()

    return create_success_dict(
        data={
            'grade_name': class_obj.grade.name,
            'class_name': class_obj.name,
            'remain_time': remain_time
        })
Beispiel #28
0
def delete(request, *args, **kwargs):
    """
        教学点管理>删除节点
    """
    if request.method == 'POST':
        if not cache.get('sudo'):
            return create_failure_dict(msg='请输入正确的超级管理员admin密码!')

        if Setting.getvalue('server_type') != 'country':
            return create_failure_dict(msg='教学点仅支持县级服务器')

        id = request.POST.get('uuid')
        try:
            obj = EduPoint.objects.get(id=id)
        except Exception, e:
            logger.exception(e)
            return create_failure_dict(msg='无该教学点ID, 不能删除')

        # 如果该教学点下的教室有已申报的情况,需要提示先取消申报才可删除教学点
        if not obj.has_delete():
            return create_failure_dict(msg='先解除终端绑定,才能删除教学点!')

        obj.delete()

        return create_success_dict(msg='成功删除教学点')
Beispiel #29
0
def edit_school_post(request):
    '''
        编辑校园公告
    '''
    if models.Setting.getvalue('server_type') != 'school':
        return create_failure_dict(msg='仅校服务器可用')

    if request.method == 'POST':
        id = request.POST.get('id', None)
        title = request.POST.get('title', '').strip()
        content = request.POST.get('content', '').strip()
        active = request.POST.get('active', False)

        try:
            obj = models.SchoolPost.objects.get(pk=id)
        except Exception:
            return create_failure_dict(msg=u'没有该校园公告')

        obj.title = title
        obj.content = content
        obj.active = active

        obj.save()

        return create_success_dict(msg=u'编辑校园公告成功')

    return create_failure_dict(msg=u'编辑校园公告失败')
Beispiel #30
0
def resource_catalog_add(request):
    '''
        教学点对应的卫星资源接收目录添加
    '''
    if request.method == 'POST':
        if Setting.getvalue('server_type') != 'country':
            return create_failure_dict(msg='教学点仅支持县级服务器')

        f = EduPointResourceCatalogForm(request.POST)
        if f.is_valid():
            catalog = f.cleaned_data['catalog']
            edupoint_id = request.POST.get('edupoint_id')
            try:
                edupoint = EduPoint.objects.get(id=edupoint_id)
            except Exception, e:
                logger.exception(e)
                return create_failure_dict(msg='无该教学点ID')

            if edupoint.edupointresourcecatalog_set.all().count() >= 10:
                return create_failure_dict(msg='教学点只能拥有10个资源接收目录')

            obj, c = EduPointResourceCatalog.objects.get_or_create(edupoint=edupoint, catalog=catalog)

            if not c:
                return create_failure_dict(msg='教学点不能保存相同的资源接收目录')

            return create_success_dict(msg='成功添加教学点卫星资源接收目录')