Commit de116e9d178764e5cd2c1ba461502b86e0324e07

Authored by David RENÉ
1 parent 491c5383

Add draw_web_request in WEB_Session to allows to store the web request which ret…

…urn full draw html. When we need to redraw the html content in case of language change we can redirect to that draw_web_request.
Since we have an heavy use of load content redirect to previous can cause a drawing of the content of the ajax return during the load content. This fix that behavior.
web/CXM_making_a_web_site.anubis
... ... @@ -3361,11 +3361,27 @@ define (Maybe(WEB_Session), HTTP_Answer)
3361 3361 success(new_controller) then apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, new_session, failure, initial_session, logger),
3362 3362 },
3363 3363 success(action_name) then
3364   - logger(logInfo, "ACTION_NAME ["+action_name+"]");
  3364 + logger(logInfo, "ACTION_NAME ["+action_name+"] from IP "+get_String(_session.fields, "IP", ""));
3365 3365 if apply_action(_session, action_name, *controller.controller_actions) is
3366 3366 {
3367   - http_answer(session, answer) then (success(session), answer),
3368   - http_answer(answer) then (success(_session), answer),
  3367 + http_answer(session, answer) then
  3368 + since session is web_session(id, lang, entries, current, previous, _),
  3369 + with new_web_session = web_session(id, lang, entries, current, previous, current),
  3370 +// println("***** http_answer(session, answer) record new draw point to *****");
  3371 +// println("web arguments:"+
  3372 +// dump_web_arg_values(*current.lwa));
  3373 +// println("************************************");
  3374 + (success(new_web_session), answer),
  3375 +
  3376 + http_answer(answer) then
  3377 + since _session is web_session(id, lang, entries, current, previous, _),
  3378 + with new_web_session = web_session(id, lang, entries, current, previous, current),
  3379 +// println("***** http_answer(answer) record new draw point to *****");
  3380 +// println("web arguments:"+
  3381 +// dump_web_arg_values(*current.lwa));
  3382 +// println("************************************");
  3383 + (success(new_web_session), answer),
  3384 +
3369 3385 redirect(new_session) then
3370 3386 if get_controller(get_String(*new_session.web_request.lwa, "aws_controller", "root"), controllers, logger) is
3371 3387 {
... ... @@ -3386,16 +3402,16 @@ define (Maybe(WEB_Session), HTTP_Answer)
3386 3402 {
3387 3403 failure then (failure, error_page(http_not_found, "Redirect to previous Controller not found", _session)),
3388 3404 success(new_controller) then
3389   - since _session is web_session(id, lang, entries, _, previous),
3390   - apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous), failure, initial_session, logger),
  3405 + since _session is web_session(id, lang, entries, _, previous, draw),
  3406 + apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous, draw), failure, initial_session, logger),
3391 3407 },
3392 3408 redirect_to_previous(entries) then
3393 3409 if get_controller(get_String(*_session.previous_web_request.lwa, "aws_controller", "root"), controllers, logger) is
3394 3410 {
3395 3411 failure then (failure, error_page(http_not_found, "Redirect to previous Controller not found", _session)),
3396 3412 success(new_controller) then
3397   - since _session is web_session(id, lang, _, _, previous),
3398   - apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous), failure, initial_session, logger),
  3413 + since _session is web_session(id, lang, _, _, previous, draw),
  3414 + apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous, draw), failure, initial_session, logger),
3399 3415 },
3400 3416 //ajax(answer) then (failure, answer),
3401 3417 //ajax with modified session that must be saved
... ... @@ -3408,8 +3424,14 @@ define (Maybe(WEB_Session), HTTP_Answer)
3408 3424 send_file(file_path, c_disposition) then (failure, send_file(file_path, c_disposition)),
3409 3425 renderer_content(session, content) then
3410 3426 with the_session = if session is {failure then _session, success(__session) then __session},
3411   - with page_renderer = get_page_renderer(the_session, _current_page_renderer, page_renderers, logger),
3412   - (session, page_renderer.page_layout(the_session, plugins, content))
  3427 + since the_session is web_session(id, lang, entries, current, previous, _),
  3428 + with new_web_session = web_session(id, lang, entries, current, previous, current),
  3429 +// println("***** renderer_content(session, content) record new draw point to *****");
  3430 +// println("web arguments:"+
  3431 +// dump_web_arg_values(*current.lwa));
  3432 +// println("************************************");
  3433 + with page_renderer = get_page_renderer(new_web_session, _current_page_renderer, page_renderers, logger),
  3434 + (success(new_web_session), page_renderer.page_layout(new_web_session, plugins, content))
3413 3435 }
3414 3436 }
3415 3437 .
... ... @@ -3493,12 +3515,14 @@ public define Web_Site
3493 3515 out_of_date(previous_session) then
3494 3516 logger(logInfo, "previous out_of_date");
3495 3517 //expired_session(previous_session, http_info, var(_lwa), is_https),
3496   - since previous_session is web_session(id, lang, entries, previous, _),
3497   - web_session(id, lang, entries, web_request(http_info, var(_lwa), is_https), previous)
  3518 + since previous_session is web_session(id, lang, entries, previous, _, draw),
  3519 + replace_String(entries, "IP", get_String(_lwa, "x-forwarded-for", ip_addr_to_string(http_info.ip_address)));
  3520 + web_session(id, lang, entries, web_request(http_info, var(_lwa), is_https), previous, draw)
3498 3521  
3499 3522 still_valid(previous_session) then
3500   - since previous_session is web_session(id, lang, entries, previous, _),
3501   - web_session(id, lang, entries, web_request(http_info, var(_lwa), is_https), previous)
  3523 + since previous_session is web_session(id, lang, entries, previous, _, draw),
  3524 + replace_String(entries, "IP", get_String(_lwa, "x-forwarded-for", ip_addr_to_string(http_info.ip_address)));
  3525 + web_session(id, lang, entries, web_request(http_info, var(_lwa), is_https), previous, draw)
3502 3526 },
3503 3527  
3504 3528  
... ...
web/CXM_web_session.anubis
... ... @@ -92,7 +92,8 @@ public type WEB_Session:
92 92 String language,
93 93 Var(List(WEB_Session_Field)) fields,
94 94 WEB_Request web_request,
95   - WEB_Request previous_web_request
  95 + WEB_Request previous_web_request,
  96 + WEB_Request draw_web_request
96 97 ).
97 98  
98 99 public type WEB_Session_No_Var:
... ... @@ -101,7 +102,8 @@ public type WEB_Session_No_Var:
101 102 String language,
102 103 List(WEB_Session_Field_No_Var) fields,
103 104 WEB_Request_No_Var web_request,
104   - WEB_Request_No_Var previous_web_request
  105 + WEB_Request_No_Var previous_web_request,
  106 + WEB_Request_No_Var draw_web_request,
105 107 ).
106 108  
107 109 public define Var(List(WEB_Session_Field))
... ... @@ -148,10 +150,11 @@ public define WEB_Session
148 150 (
149 151 WEB_Session_No_Var _session
150 152 )=
151   - since _session is web_session(id, language, fields, c_web_request, p_web_request),
  153 + since _session is web_session(id, language, fields, c_web_request, p_web_request, d_web_request),
152 154 web_session(id, language, to_WEB_Session_Field(fields),
153 155 web_request(c_web_request.http_info, var(c_web_request.lwa), c_web_request.is_https),
154   - web_request(p_web_request.http_info, var(p_web_request.lwa), p_web_request.is_https)
  156 + web_request(p_web_request.http_info, var(p_web_request.lwa), p_web_request.is_https),
  157 + web_request(d_web_request.http_info, var(d_web_request.lwa), d_web_request.is_https),
155 158 )
156 159 .
157 160  
... ... @@ -160,10 +163,11 @@ public define WEB_Session_No_Var
160 163 (
161 164 WEB_Session _session
162 165 )=
163   - since _session is web_session(id, language, fields, c_web_request, p_web_request),
  166 + since _session is web_session(id, language, fields, c_web_request, p_web_request, d_web_request),
164 167 web_session(id, language, to_WEB_Session_Field_No_Var(*fields),
165 168 web_request(c_web_request.http_info, *c_web_request.lwa, c_web_request.is_https),
166   - web_request(p_web_request.http_info, *p_web_request.lwa, p_web_request.is_https)
  169 + web_request(p_web_request.http_info, *p_web_request.lwa, p_web_request.is_https),
  170 + web_request(d_web_request.http_info, *d_web_request.lwa, d_web_request.is_https),
167 171 )
168 172 .
169 173  
... ... @@ -1175,7 +1179,7 @@ public define String
1175 1179 (
1176 1180 WEB_Session _session
1177 1181 )=
1178   - since _session is web_session(id, language, fields, web_request, previous_web_request),
  1182 + since _session is web_session(id, language, fields, web_request, previous_web_request, draw_web_request),
1179 1183 "WEB Session Dump: \n"+
1180 1184 "----------------- \n"+
1181 1185 "Session ID : ["+id+"]\n"+
... ... @@ -1195,6 +1199,13 @@ public define String
1195 1199 "http_info:\n"+
1196 1200 dump_http_info(previous_web_request.http_info)+"\n"+
1197 1201 "web arguments:"+
1198   - dump_web_arg_values(*previous_web_request.lwa)+"\n"
1199   -
  1202 + dump_web_arg_values(*previous_web_request.lwa)+"\n\n"+
  1203 + "-----------------------------------------------------------------------------\n"+
  1204 + "Draw WEB REQUEST:\n"+
  1205 + "-----------------------------------------------------------------------------\n"+
  1206 + "is https "+to_String(draw_web_request.is_https)+"\n"+
  1207 + "http_info:\n"+
  1208 + dump_http_info(draw_web_request.http_info)+"\n"+
  1209 + "web arguments:"+
  1210 + dump_web_arg_values(*draw_web_request.lwa)+"\n"
1200 1211 .
... ...