{= # # # get_sess_paths_lookup_pages.cfv # # # Called from client to load pages for session page paths page lookup # # include "templates.util.base_util"; include "templates.util.encoding"; debug_message("\n#### get_sess_paths_lookup_pages.cfv \n"); string profile_name = internal.profile_name; string session_id = volatile.session_id; bool is_root_admin = get_is_root_admin(); bool is_access_reports = is_root_admin or get_access_reports_permission(session_id, profile_name); string page_token = v.fp.page_token; if (is_access_reports and get_is_valid_page_token(session_id, "statistics", page_token)) then ( debug_message("\n" . node_as_string("v.fp") . "\n\n"); string pages_lookup_node_name = v.fp.pages_lookup_node_name; # Name of the pages lookup node in profiles_cache string sre_id = v.fp.sre_id; int starting_row = v.fp.starting_row; int ending_row = v.fp.ending_row; # # # # Get the pages_lookup node # # # node pages_lookup; node pages_items; int total_rows; int i; if (pages_lookup_node_name eq "") then ( # Pages lookup is loaded for the first time. # # # Get pages_lookup_node_name # # node profile = "profiles." . profile_name; string report_name = v.fp.report_name; string report_element_name = v.fp.report_element_name; string session_page_field_name = @(profile . ".statistics.reports." . report_name . ".report_elements." . report_element_name . ".session_page_field"); # get sessions_page_db_field_number int count = 0; int sessions_page_db_field_number = -1; node db_fields = profile . ".database.fields"; node db_field_item; foreach db_field_item db_fields ( if (node_name(db_field_item) eq session_page_field_name) then ( sessions_page_db_field_number = count; last; ); count++; ); debug_message("#### session_page_field_name: " . session_page_field_name . "\n"); debug_message("#### sessions_page_db_field_number: " . sessions_page_db_field_number . "\n"); node db_info = get_database_info(profile_name, false); string database_last_modification_time = @db_info{"last_modification_time"}; string s = session_page_field_name . "_" . sessions_page_db_field_number . "_" . database_last_modification_time; pages_lookup_node_name = "pages_lookup_" . md5_digest(s); debug_message("#### pages_lookup_node_name: " . pages_lookup_node_name . "\n"); # # # Create pages_lookup node if it doesn't yet exist # # if (!(?("profiles_cache." . profile_name . ".queries." . pages_lookup_node_name))) then ( # # # Query sql database # # # node extended_profile_dat = get_extended_profile_dat_node_reference(session_id, profile_name); # string session_page_field_name = @extended_profile_dat{"sessions_page_db_field_name"}; # int sessions_page_db_field_number = @extended_profile_dat{"sessions_page_db_field_number"}; string qs = "SELECT bottomlevelitem FROM " . session_page_field_name . "bottomlevelitem GROUP BY bottomlevelitem"; # DEBUG_BEGIN - TEST without GROUP BY # string qs = "SELECT bottomlevelitem FROM " . session_page_field_name . "bottomlevelitem"; # DEBUG_END table pages_tbl = database_sql_query(qs, false, true); total_rows = table_get_num_rows(pages_tbl); # # # Create the pages lookup node # # string pages_lookup_path = "profiles_cache." . profile_name . ".queries." . pages_lookup_node_name; pages_lookup_path . ".total_rows" = total_rows; pages_lookup_path . ".pages" = ""; pages_items = pages_lookup_path . ".pages"; int table_item_number; string resolved_page_name; for (i = 0; i < total_rows; i++) ( # debug_message("#### i: " . i ."\n"); table_item_number = table_get_cell_value(pages_tbl, i, 0); resolved_page_name = database_itemnum_to_item(sessions_page_db_field_number, table_item_number); # debug_message("#### resolved_page_name: " . resolved_page_name . "\n"); set_subnode_value(pages_items, i, resolved_page_name); ); sort(pages_items, "field:value,alphabetical,ascending", false); save_node(pages_lookup_path); unload_table(pages_tbl); ); ); pages_lookup = "profiles_cache." . profile_name . ".queries." . pages_lookup_node_name; # # # Assemble javascript array from pages_lookup node # # total_rows = @pages_lookup{"total_rows"}; debug_message("#### total_rows: " . total_rows . "\n"); # Update ending row in case that ending row is greater than total rows if (starting_row > total_rows) then ( starting_row = total_rows; ); if (ending_row > total_rows) then ( ending_row = total_rows; ); pages_items = pages_lookup{"pages"}; string pages_dat = "["; for (i = (starting_row - 1); i < ending_row; i++) ( pages_dat .= '"' . encode_json(node_value(subnode_by_number(pages_items, i))) . '",'; ); if (pages_dat ne "[") then ( pages_dat = replace_last(pages_dat, ",", "]"); ) else ( # No pages, send empty array pages_dat .= "]"; ); # # # Send response # # string dat = "{"; dat .= add_json("pagesLookupNodeName", pages_lookup_node_name, "string"); dat .= add_json("sreId", sre_id, "string"); dat .= add_json("startingRow", starting_row, "int"); dat .= add_json("endingRow", ending_row, "int"); dat .= add_json("totalRows", total_rows, "int"); dat .= add_json("pages", pages_dat, "obj"); dat = close_json(dat); debug_message("\n\n#### get_sess_paths_lookup_pages dat:\n". dat . "\n\n"); "sessionPagePathsLookup.loadPagesResponse(" . dat . ")\n"; ) else ( # No permission to view this resource (URL) display_no_permission_html(); ); =}