예제 #1
0
 def determineVisitorRole(self, userVisitor, userHost):
     raidUtil = RaidUtility()
     #預設為 路人
     strRole = "role:anonymous"
     #判斷 是否登入
     if userVisitor is not None:
         strRole = "role:ciuser"
         #判斷 是否為追隨者
         qsetCIUserFollower = raidUtil.getQsetFollower(user=userHost)
         for ciuserFollower in qsetCIUserFollower:
             if userVisitor.ciuser.strCIUserUID == ciuserFollower.strCIUserUID:
                 strRole = "role:follower"
                 break
         #判斷 是否為頻道主人
         if userVisitor.ciuser.strCIUserUID == userHost.ciuser.strCIUserUID:
             strRole = "role:host"
         #判斷 是否為領導人
         if raidUtil.isLeaderOrLeaderOfLeader(
                 user=userHost,
                 strLeaderUID=userVisitor.ciuser.strCIUserUID):
             strRole = "role:leader"
     return strRole
예제 #2
0
def searchLeader(request):
    #頁面標題
    strPageTitle = "搜尋領導人"
    #form 的 action 目標 url
    strFormActionUrl = "/core/searchLeader/"
    #尋找結果字串
    strSearchResult = None
    #尋找結果
    qsetMatchedCIUser = None
    #團隊操作工具
    raidUtil = RaidUtility()
    if request.method == "POST":
        strKeyword = request.POST.get("strKeyword", None)
        #比對 strDisplayName
        queryObject = Q(strDisplayName__iregex="^.*{strDisplayName}.*$".format(
            strDisplayName=strKeyword))
        #查尋
        qsetMatchedCIUser = CIUser.objects.filter(queryObject)
        #移除自己(user)
        qsetMatchedCIUser = qsetMatchedCIUser.exclude(
            strCIUserUID=request.user.ciuser.strCIUserUID)
        #若已有領導人,移除原有的領導人
        ciuserLeader = request.user.ciuser.leader
        if ciuserLeader is not None:
            qsetMatchedCIUser = qsetMatchedCIUser.exclude(
                strCIUserUID=ciuserLeader.strCIUserUID)
        #移除 該選項的上層領導人有自己(user) 的選項 - 避免領導人無限迴圈
        for matchedCIUser in qsetMatchedCIUser:
            if raidUtil.isLeaderOrLeaderOfLeader(
                    user=matchedCIUser.user,
                    strLeaderUID=request.user.ciuser.strCIUserUID):
                qsetMatchedCIUser = qsetMatchedCIUser.exclude(
                    strCIUserUID=matchedCIUser.strCIUserUID)
        #todo 若更換的對像為 原有領導人的領導人 是否該移除 (再討論)
        strSearchResult = "查尋 {strKeyword} 共找到 {intResultCount} 個用戶".format(
            strKeyword=strKeyword, intResultCount=qsetMatchedCIUser.count())
    else:
        strSearchResult = "請輸入搜尋字串"
    return render(request, "core/searchLeader.html", locals())
예제 #3
0
def resetLeader(request):
    #重設領導人結果 字串
    strResetResult = None
    #團隊操作工具
    raidUtil = RaidUtility()
    if request.method == "POST":
        strCIUserUID = request.POST.get("strCIUserUID", None)
        userLeader = raidUtil.getUserByCIUSerUID(strCIUserUID=strCIUserUID)
        #驗證 leader 是否存在 及 leader 是否設定 此用戶 為 leader - 避免領導人無限迴圈
        if userLeader and not raidUtil.isLeaderOrLeaderOfLeader(
                user=userLeader,
                strLeaderUID=request.user.ciuser.strCIUserUID):
            #重設 領導人 並重置 PV 值
            raidUtil.resetLeaderAndPV(user=request.user,
                                      strLeaderUID=strCIUserUID)
            #完成字串
            strResetResult = "已完成重設領導人為 {strLeaderDisplayName}".format(
                strLeaderDisplayName=request.user.ciuser.leader.strDisplayName)
        else:
            #無效的領導人 UID
            strResetResult = "無效的領導人 UID"
    else:
        strResetResult = "只允許 POST 方式設定領導人"
    return JsonResponse({"reset_result": strResetResult}, safe=False)