3232LOGGER = _get_logger (name = __name__ )
3333
3434
35- def campaign_status (request , campaign_name ):
35+ def campaign_status (request , campaign_name , sort_key = None ):
3636 """
3737 Campaign status view with completion details.
3838 """
@@ -41,6 +41,19 @@ def campaign_status(request, campaign_name):
4141 request .user .username or "Anonymous" ,
4242 )
4343
44+ if "," in campaign_name :
45+ responses = [campaign_status (request , name , sort_key ) for name in campaign_name .split ("," )]
46+ if not all ([response .headers ["Content-Type" ] == responses [0 ].headers ["Content-Type" ] for response in responses ]):
47+ return HttpResponse (
48+ 'ERROR: You are mixing unrelated campaigns (views.py:campaign_status).' ,
49+ content_type = 'text/plain' ,
50+ )
51+ else :
52+ return HttpResponse (
53+ "\n \n " .join ([response .content .decode ('utf-8' ) for response in responses ]),
54+ content_type = responses [0 ].headers ["Content-Type" ],
55+ )
56+
4457 # Get Campaign instance for campaign name
4558 try :
4659 campaign = _get_campaign_instance (campaign_name )
@@ -66,7 +79,11 @@ def campaign_status(request, campaign_name):
6679 # special handling for ESA
6780 if "esa" in campaign_opts :
6881 return campaign_status_esa (campaign )
82+ else :
83+ return campaign_status_plain (request , campaign , result_type , campaign_opts , sort_key )
84+
6985
86+ def campaign_status_plain (request , campaign , result_type , campaign_opts , sort_key ):
7087 _out = []
7188 for team in campaign .teams .all ():
7289 for user in team .members .all ():
@@ -202,7 +219,7 @@ def campaign_status(request, campaign_name):
202219
203220 _out .append (_item )
204221
205- _out .sort (key = lambda x : x [2 ])
222+ _out .sort (key = lambda x : x [sort_key if sort_key else 2 ])
206223
207224 _header = (
208225 'username' ,
@@ -250,7 +267,7 @@ def campaign_status_esa(campaign) -> str:
250267 out_str += "<tr>" + "" .join (
251268 f"<th>{ x } </th>" for x in ["Username" , "Progress" , "First Modified" , "Last Modified" , "Time (Last-First)" , "Time (Real)" ]
252269 ) + "</tr>\n "
253-
270+
254271 for team in campaign .teams .all ():
255272 for user in team .members .all ():
256273 if user .is_staff :
0 commit comments