示例#1
0
def all_projects(request, pagenum=1, key=None):
    rc = request.rc
    rc.pagename = 'Projects'
    rc.bodymenus = build_body_nav_menu('all')

    pagenum = int(pagenum)
    if request.method == 'POST':
        q = request.POST.get('q', None)
        return redirect(SITE_ROOT + '/all/1/' + q)

    #
    # get project
    #
    if key is not None:
        q = Q(name__icontains=key) | Q(title__icontains=key)
    else:
        q = Q()

    q = q & Q(status=consts.PROJECT_ENABLE, is_public=1)
    key_text = key and key.encode('utf8') or ''

    build_page(rc, Project, q, pagenum, '/all', key_text, order=['-ctime'])

    update_my_project_status(request, rc.page.object_list)

    rc.all_projects = True
    rc.prjs = rc.page.object_list
    rc.key_text = key_text
    return send_response(request, 'project/list.html')
示例#2
0
def opensources_list(request, pagenum=1, key=None):
    rc = request.rc
    pagenum = int(pagenum)
    key = None

    if request.method == 'POST':
        pagenum = int(request.POST.get('jump', pagenum))
        key = request.POST.get('q', None)

    if key is not None:
        q = Q(subject__icontains=key)
    else:
        q = Q()

    key_text = key and key.encode('utf8') or ''

    build_page(rc,
               AliProject,
               q,
               pagenum,
               '/opensources',
               key_text,
               order=['-ctime'])
    for prj in rc.page.object_list:
        prj.users = [
            u.name for u in AliProjectUser.objects.filter(project=prj)
        ]

    rc.projectCount = len(AliProject.objects.all())
    rc.peopleCount = AliProjectUser.objects.values('name').distinct().count()
    rc.opensources = rc.page.object_list
    rc.key_text = key_text

    return send_response(request, 'main/opensources.html')
示例#3
0
文件: views.py 项目: hciplab/project
def all_projects(request, pagenum=1, key=None):
    rc = request.rc
    rc.pagename = 'Projects'
    rc.pageindex='allproject'
    rc.bodymenus = build_body_nav_menu('all')

    pagenum = int(pagenum)
    if request.method == 'POST':
        q = request.POST.get('q', None)
        return redirect(SITE_ROOT + '/all/1/'+q)

    #
    # get project 
    #
    if key is not None:
        q = Q(name__icontains=key) | Q(title__icontains=key)
    else:
        q = Q()

    q = q & Q(status = consts.PROJECT_ENABLE, is_public=True)
    key_text = key and key.encode('utf8') or ''

    build_page(rc, Project, q,
               pagenum, '/all', key_text, order=['-ctime'])

    update_my_project_status(request, 
                             rc.page.object_list)
    
    rc.all_projects = True
    rc.prjs = rc.page.object_list
    rc.key_text = key_text
    return send_response(request, 
                         'project/list.html')
示例#4
0
def project_info(request, name, pagenum=1, key=None):
    if request.method == 'POST':
        pagenum = request.POST.get('jump', None)

    pagenum = int(pagenum)

    project = q_get(Project, name=name)

    resp = can_access(project, request.user)
    if resp != None:
        return resp

    rc = request.rc
    rc.pagename = 'Info'
    rc.project = project
    rc.logs = get_prj_activitys(project)

    rc.members = q_gets(ProjectMember,
                        project=project,
                        member_type=consts.PM_ACCEPT_INV)

    update_my_project_status(request, [project])

    rc.navmenusSource = build_prj_nav_menu(request, project, 'info')

    rc.REPOS = svn.REPOS(project.part, name, '/trunk')

    q = Q(project=project)

    build_page(
        rc,
        Activity,
        q,
        pagenum,
        '/p/{0}/{1}'.format(name, 'info'),
        order=['-ctime'],
    )
    cc = []
    for i in rc.page.object_list:
        if i.act_type == 'new_commit':
            cc = i.content.split(' ')
            rev = cc[0]
            tmp = cc[1:len(cc)]
            msg = ' '.join(tmp)
            i.commit = {'rev': int(rev), 'msg': msg}

    return send_response(request, 'project/view.html')
示例#5
0
def lang_project_all(request, pagenum=1):
    rc = request.rc
    rc.current_page = "language"

    pn = int(pagenum)
    if pn <= 0:
        pn = 1

    q = Q()
    q = q & Q(status=consts.PROJECT_ENABLE, is_public=1)
    build_page(rc, Project, q, pn, '/project/lang/list', "", order=['-ctime'])

    update_my_project_status(request, rc.page.object_list)
    update_proj_info(rc.page.object_list)
    rc.projs = rc.page.object_list

    rc.langs = consts.LANGS
    return send_response(request, 'project/lang-proj.html')
示例#6
0
def show_box(request, name='inbox', pagenum=1):
    #
    #
    if name not in ('inbox', 'outbox', 'trashbox'):
        name = 'inbox'

    if request.method == 'POST' and request.POST.get('jump') is not None:
        pagenum = request.POST.get('jump')

    rc = request.rc
    rc.pagename = name
    rc.boxname = name

    rc.navmenusMsg = build_menu(navitems, name)

    if name == 'inbox':  #inbox
        q = Q(owner=request.user, reader_status=consts.MSG_READER_INBOX)
        order = ('is_read', '-send_time')
    elif name == 'outbox':  #outbox
        q = Q(sender=request.user, sender_status=consts.MSG_SENDER_OUTBOX)
        order = ('-send_time', )
    else:  #trashbox
        q = Q(owner=request.user, reader_status=consts.MSG_READER_TRASHBOX)
        q = q | Q(sender=request.user,
                  sender_status=consts.MSG_SENDER_TRASHBOX)
        order = ('-read_time', )

    build_page(rc,
               Message,
               q,
               int(pagenum),
               '/msg/' + name,
               page_count=5,
               order=order)

    if name == 'inbox':
        for m in rc.page.object_list:
            if m.is_read is False:
                m.is_read = True
                m.save()
                m.is_read = False

    return send_response(request, 'message/list.html')
示例#7
0
文件: views.py 项目: hciplab/project
def show_box(request, name='inbox', pagenum=1):
    #
    #
    if name not in ('inbox', 'outbox', 'trashbox'):
        name = 'inbox'

    rc = request.rc
    rc.pagename = name
    rc.boxname = name

    rc.navmenus = build_menu(navitems, name)

    if name == 'inbox':#inbox
        q = Q(owner = request.user, 
              reader_status = consts.MSG_READER_INBOX)
        order = ('is_read', '-send_time')
    elif name == 'outbox': #outbox
        q = Q(sender = request.user, 
              sender_status = consts.MSG_SENDER_OUTBOX)
        order = ('-send_time',)
    else: #trashbox
        q = Q(owner = request.user, 
              reader_status = consts.MSG_READER_TRASHBOX)
        q = q | Q(sender = request.user, 
                  sender_status = consts.MSG_SENDER_TRASHBOX)
        order = ('-read_time',)
     
    build_page(rc, Message, q, int(pagenum), 
               '/msg/'+name, 
               page_count=5,
               order=order)
    
    if name == 'inbox':
        for m in rc.page.object_list:
            if m.is_read is False:
                m.is_read = True
                m.save()
                m.is_read = False
    rc.navmenus = build_user_nav_menu('msg')
    rc.leftmenus=build_user_left_menu('msg')
    return send_response(request, 'message/list.html')
示例#8
0
def query_issues(request, name, pagenum, key, st=None):

    rc = request.rc

    project = q_get(Project, name=name)
    rc.navmenus = build_prj_nav_menu(request, project, 'issues')

    rc.bodymenus = [{
        'uri': 'issues/',
        'text': 'all'
    }, {
        'uri': 'issues/opened/',
        'text': 'opened'
    }, {
        'uri': 'issues/closed/',
        'text': 'closed'
    }]

    prefix = 'issues'

    if st == consts.ISSUE_OPEN:
        rc.pagename = "Opened issues"
        prefix += '/opened'
        rc.bodymenus[1]['choice'] = True
    elif st == consts.ISSUE_CLOSED:
        rc.pagename = "Closed issues"
        prefix += '/closed'
        rc.bodymenus[2]['choice'] = True
    else:
        rc.pagename = "All issues"
        rc.bodymenus[0]['choice'] = True
    if request.method == 'POST':
        q = request.POST.get('q', None)
        return redirect(SITE_ROOT + '/p/%s/%s/1/%s' % (name, prefix, q))

    resp = can_access(project, request.user)
    if resp != None:
        return resp

    rc.project_name = name
    rc.project = project

    update_my_project_status(request, [rc.project])

    if project is None:
        return send_response(request, 'project/notfound.html')
    pagenum = int(pagenum)

    if key is not None:
        q = Q(Q(project=project),
              Q(Q(title__contains=key) | Q(content__contains=key)))
    else:
        q = Q(project=project)

    if st is not None:
        q = q & Q(status=st)

    q = q & ~Q(status=consts.ISSUE_DELETED)
    key_text = key and key.encode('utf8') or ''

    build_page(rc,
               Issue,
               q,
               pagenum,
               '/p/{0}/{1}'.format(name, prefix),
               key_text,
               order=['-mtime'])

    for i in rc.page.object_list:
        if request.user in (project.owner, i.creator):
            i.can_op = True
        else:
            i.can_op = False

        vls = IssueComment.objects.filter(issue=i).values('id').annotate(
            ic=Count("id"))

        i.comments_count = (len(vls) > 0 and vls[0]['ic'] or 0)

    rc.key_text = key_text
    return send_response(request, 'issue/list.html')
示例#9
0
def search(request, pagenum=1, type='user', key=None):

    rc = request.rc
    rc.t = type
    ptype = 'Project'
    if request.method == 'POST' and request.POST.get('jump') is not None:
        pagenum = request.POST.get('jump')

    else:
        if request.method == 'POST':
            qq = request.POST.get('q', None)
            type = request.POST.get('type', None)

            return redirect(SITE_ROOT + '/search/' + type + '/1/' + qq)

    pagenum = int(pagenum)

    if type == 'user':
        ptype = 'User'
        if key is not None:
            q = Q(name__icontains=key)
        else:
            rc.ptype = 'error'

            return send_response(request, 'main/search.html')

    elif type == 'project':
        if key is not None:
            q = Q(name__icontains=key) | Q(title__icontains=key)
        else:
            q = Q()
        q = q & Q(status=consts.PROJECT_ENABLE, is_public=True)

    elif type == 'language':
        if key is not None:
            q = Q(language__icontains=key)
        else:
            q = Q()
        q = q & Q(status=consts.PROJECT_ENABLE, is_public=True)

    tmpkey = key
    key_text = tmpkey and tmpkey.encode('utf8') or ''

    key = key and key.encode('utf8') or ''
    if type == 'user':
        build_page(rc,
                   User,
                   q,
                   pagenum,
                   '/search/user',
                   key_text,
                   order=['-ctime'],
                   page_count=40)
        rc.users = rc.page.object_list

    else:
        build_page(rc,
                   Project,
                   q,
                   pagenum,
                   '/search/{0}'.format(type),
                   key_text,
                   order=['-ctime'])

        update_my_project_status(request, rc.page.object_list)

        rc.all_projects = True
        rc.prjs = rc.page.object_list

    if len(rc.page.object_list) <= 0:
        ptype = "nothing"

    rc.key = key

    rc.ptype = ptype

    return send_response(request, 'main/search.html')
示例#10
0
def list_projects(request, pt, pagenum=1):
    rc = request.rc
    rc.pagename = 'Projects'
    rc.bodymenus = build_body_nav_menu(pt)
    if request.method == 'POST':
        pagenum = int(request.POST.get('jump'))

    q = Q(
        status=consts.PROJECT_ENABLE,
        is_public=1,
    )
    od = []
    totals = 0
    if pt == 'hot':
        rc.current_page = "hot"
        pn = int(pagenum)
        if pn <= 0:
            pn = 1
        pos = consts.PAGE_SIZE * (pn - 1)

        ps = Project.objects.filter(
            status=consts.PROJECT_ENABLE, is_public=1).values("id").annotate(
                uc=Sum('click')).filter(uc__gt=0).order_by('-uc')[pos:pos + 50]
        totals = total_models(Project, ps, 'id', 'uc')

        prjs = sort_models(Project, ps, 'id', 'uc')
        prjsgraph = build_project_graph(Project, ps, 'id', 'uc', totals,
                                        _("total_visit_times"))

    elif pt == 'newest':
        rc.current_page = "newest"
        pn = int(pagenum)
        if pn <= 0:
            pn = 1
        pos = consts.PAGE_SIZE * (pn - 1)

        prjs = Project.objects.filter(status=consts.PROJECT_ENABLE,
                                      is_public=1).order_by('-ctime')[pos:pos +
                                                                      50]

        update_my_project_status(request, prjs)
        key = None
        q = q & Q(status=consts.PROJECT_ENABLE, is_public=1)
        key_text = key and key.encode('utf8') or ''

        build_page(rc,
                   Project,
                   q,
                   pagenum,
                   '/newest',
                   key_text,
                   page_count=consts.PAGE_SIZE,
                   order=['-ctime'])

        rc.prjs = prjs
        return send_response(request, 'project/list.html')
    elif pt == 'random':
        prj_count = Project.objects.filter(status=consts.PROJECT_ENABLE,
                                           is_public=1).count()

        pos = randint(0, prj_count)

        prjs = Project.objects.filter(status=consts.PROJECT_ENABLE,
                                      is_public=1)[pos:pos + 10]
    elif pt == 'watched':
        rc.current_page = "watched"
        pn = int(pagenum)
        if pn <= 0:
            pn = 1
        pos = consts.PAGE_SIZE * (pn - 1)

        ps = ProjectWatcher.objects.filter(
            project__is_public=1).values("project").annotate(
                uc=Count('user')).filter(uc__gt=0).order_by('-uc')[pos:pos +
                                                                   50]
        totals = total_models(Project, ps, 'project', 'uc')

        prjs = Project.objects.filter(pk__in=[h['project'] for h in ps])
        prjsgraph = build_project_graph(Project, ps, 'project', 'uc', totals,
                                        _("total_watched_times"))
    elif pt == 'issuetimes':
        rc.current_page = "issuetimes"
        pn = int(pagenum)
        if pn <= 0:
            pn = 1
        pos = consts.PAGE_SIZE * (pn - 1)

        ps = Issue.objects.filter(
            project__is_public=1).values("project").annotate(
                uc=Count("title")).filter(uc__gt=0).order_by('-uc')[pos:pos +
                                                                    50]
        totals = total_models(Project, ps, 'project', 'uc')

        prjs = Project.objects.filter(pk__in=[h['project'] for h in ps])
        prjsgraph = build_project_graph(Project, ps, 'project', 'uc', totals,
                                        _("total_issue_times"))
    elif pt == 'committimes':
        rc.current_page = "committimes"
        pn = int(pagenum)
        if pn <= 0:
            pn = 1
        pos = consts.PAGE_SIZE * (pn - 1)

        ps = Activity.objects.filter(
            project__is_public=1,
            act_type='new_commit').values("project").annotate(
                uc=Count('user')).filter(uc__gt=0).order_by("-uc")[pos:pos +
                                                                   50]
        totals = total_models(Project, ps, 'project', 'uc')

        prjs = Project.objects.filter(pk__in=[h['project'] for h in ps])
        prjsgraph = build_project_graph(Project, ps, 'project', 'uc', totals,
                                        _("total_submit_times"))
    elif pt == 'downloadtimes':
        rc.current_page = "downloadtimes"
        pn = int(pagenum)
        if pn <= 0:
            pn = 1
        pos = consts.PAGE_SIZE * (pn - 1)
        ps = ProjectReport.objects.filter(project__status = consts.PROJECT_ENABLE,
                                           project__is_public=1).values('project')\
                                           .annotate(uc=Sum('download_times'))[pos:pos + 50]
        totals = total_models(Project, ps, 'project', 'uc')

        prjs = Project.objects.filter(pk__in=[h['project'] for h in ps])
        prjsgraph = build_project_graph(Project, ps, 'project', 'uc', totals,
                                        _("total_download_times"))

    update_my_project_status(request, prjs)

    rc.prjs = prjs
    rc.prjsgraph = prjsgraph
    return send_response(request, 'project/projectGraph.html')
示例#11
0
文件: views.py 项目: hciplab/project
def query_issues(request, name, pagenum, key, st=None):

    rc = request.rc

    project = q_get(Project, name=name)
    rc.navmenus = build_prj_nav_menu(request, project, 'issues')

    rc.bodymenus = [{'uri':'issues/', 'text':'all'},
                    {'uri':'issues/opened/', 'text':'opened'},
                    {'uri':'issues/closed/', 'text':'closed'}]
    
    prefix = 'issues'

    if st == consts.ISSUE_OPEN:
        rc.pagename = "Opened issues"
        prefix += '/opened'
        rc.bodymenus[1]['choice'] = True
    elif st == consts.ISSUE_CLOSED:
        rc.pagename = "Closed issues"
        prefix += '/closed'
        rc.bodymenus[2]['choice'] = True
    else:
        rc.pagename = "All issues"
        rc.bodymenus[0]['choice'] = True        
    if request.method == 'POST':
        q = request.POST.get('q', None)
        return redirect(SITE_ROOT + '/p/%s/%s/1/%s'%(name, prefix, q))
    
    resp = can_access(project, request.user)
    if resp != None:
        return resp

    rc.project_name = name
    rc.project = project

    update_my_project_status(request,[rc.project])

    if project is None:
        return send_response(request, 
                             'project/notfound.html')
    pagenum = int(pagenum)

    if key is not None:
        q = Q(Q(project=project), Q(Q(title__contains=key) | Q(content__contains=key)))
    else:
        q = Q(project=project)

    if st is not None:
        q = q & Q(status = st)

    q = q & ~Q(status = consts.ISSUE_DELETED)
    key_text = key and key.encode('utf8') or ''

    build_page(rc, Issue, q,
               pagenum,
               '/p/{0}/{1}'.format(name, prefix),
               key_text,
               order=['-mtime'])

    for i in rc.page.object_list:
        if request.user in (project.owner, i.creator):
            i.can_op = True
        else:
            i.can_op = False

        vls = IssueComment.objects.filter(issue=i).values('id').annotate(ic = Count("id"))

        i.comments_count = (len(vls) > 0 and vls[0]['ic'] or 0)

    rc.key_text = key_text
    return send_response(request, 
                         'issue/list.html')