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
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())
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)