10
10
from xblock .core import XBlock , XBlockAside
11
11
12
12
from ai_aside .config_api .api import is_summary_enabled
13
+ from ai_aside .constants import ATTR_KEY_USER_ID , ATTR_KEY_USER_ROLE
13
14
from ai_aside .platform_imports import get_block , get_text_transcript
14
15
from ai_aside .text_utils import html_to_text
15
16
from ai_aside .waffle import summaries_configuration_enabled as ff_is_summary_config_enabled
33
34
data-content-id="{{data_content_id}}"
34
35
data-handler-url="{{data_handler_url}}"
35
36
data-last-updated="{{data_last_updated}}"
37
+ data-user-role="{{data_user_role}}"
36
38
>
37
39
</div>
38
40
</div>
@@ -133,15 +135,19 @@ def _check_summarizable(block):
133
135
return False
134
136
135
137
136
- def _render_hook_fragment (handler_url , block , summary_items ):
138
+ def _render_hook_fragment (user_role_string , handler_url , block , summary_items ):
137
139
"""
138
140
Create hook Fragment from block and summarized children.
139
141
140
142
Gathers data for the summary hook HTML, passes it into _render_summary
141
143
to get the HTML and packages that into a Fragment.
142
144
"""
145
+ print (dir (block ))
143
146
last_published = getattr (block , 'published_on' , None )
144
147
last_edited = getattr (block , 'edited_on' , None )
148
+ usage_id = block .scope_ids .usage_id
149
+ course_key = usage_id .course_key
150
+
145
151
for item in summary_items :
146
152
published = item ['published_on' ]
147
153
edited = item ['edited_on' ]
@@ -155,24 +161,25 @@ def _render_hook_fragment(handler_url, block, summary_items):
155
161
if last_edited > last_published :
156
162
last_updated = last_edited
157
163
158
- usage_id = block .scope_ids .usage_id
159
-
160
164
fragment = Fragment ('' )
161
165
fragment .add_content (
162
166
_render_summary (
163
167
{
164
168
'data_url_api' : settings .SUMMARY_HOOK_HOST ,
165
- 'data_course_id' : usage_id . course_key ,
169
+ 'data_course_id' : course_key ,
166
170
'data_content_id' : usage_id ,
167
171
'data_handler_url' : handler_url ,
168
172
'data_last_updated' : _format_date (last_updated ),
173
+ 'data_user_role' : user_role_string ,
169
174
'js_url' : settings .SUMMARY_HOOK_HOST + settings .SUMMARY_HOOK_JS_PATH ,
170
175
}
171
176
)
172
177
)
173
178
return fragment
174
179
175
180
181
+ @XBlock .needs ('user' )
182
+ @XBlock .needs ('credit' )
176
183
class SummaryHookAside (XBlockAside ):
177
184
"""
178
185
XBlock aside that injects AI summary javascript.
@@ -254,7 +261,11 @@ def _student_view_can_throw(self, block):
254
261
usage_id = block .scope_ids .usage_id
255
262
log .info (f'Summary hook injecting into { usage_id } ' )
256
263
257
- return _render_hook_fragment (self ._summary_handler_url (), block , items )
264
+ return _render_hook_fragment (
265
+ self ._user_role_string (usage_id .course_key ),
266
+ self ._summary_handler_url (),
267
+ block ,
268
+ items )
258
269
259
270
def _summary_handler_url (self ):
260
271
"""
@@ -274,6 +285,28 @@ def _summary_handler_url(self):
274
285
handler_url = handler_url .replace ('localhost' , aispot_lms_name )
275
286
return handler_url
276
287
288
+ def _user_role_string (self , course_key ):
289
+ return self ._user_role_string_from_services (
290
+ self .runtime .service (self , 'user' ),
291
+ self .runtime .service (self , 'credit' ),
292
+ course_key )
293
+
294
+ @classmethod
295
+ def _user_role_string_from_services (cls , user_service , credit_service , course_key ):
296
+ """
297
+ Determine and construct the user_role string that gets injected into the block.
298
+ """
299
+ user_role = 'unknown'
300
+ user = user_service .get_current_user ()
301
+ if user is not None :
302
+ user_role = user .opt_attrs .get (ATTR_KEY_USER_ROLE )
303
+ user_enrollment = credit_service .get_credit_state (
304
+ user .opt_attrs .get (ATTR_KEY_USER_ID ), course_key )
305
+
306
+ if user_enrollment .get ('enrollment_mode' ) is not None :
307
+ user_role = user_role + " " + user_enrollment .get ('enrollment_mode' )
308
+ return user_role
309
+
277
310
@classmethod
278
311
def should_apply_to_block (cls , block ):
279
312
"""
0 commit comments