{= # # # search_session_paths_lookup.cfv # # # Called from client to search pages in pages lookup # # include "templates.util.base_util"; include "templates.util.encoding"; debug_message("\n\n\n#### search_session_paths_lookup.cfv START \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.sys.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.sys") . "\n\n"); string pages_lookup_node_name = v.sys.pages_lookup_node_name; # Name of the pages lookup node in profiles_cache string sre_id = v.sys.sre_id; string search_term = lowercase(v.sys.search_term); debug_message("#### search_term: " . search_term . "\n"); # # # Create a node name for the specific search # # string search_result_node_name = "pages_lookup_search_" . md5_digest(pages_lookup_node_name . search_term); # # # Create the search result if it doesn't yet exist # # string search_result_path = "profiles_cache." . profile_name . ".queries." . search_result_node_name; if (!(?(search_result_path))) then ( # Search all pages in pages items node pages_items = "profiles_cache." . profile_name . ".queries." . pages_lookup_node_name . ".pages"; node page_item; string page_name; int page_count = 0; search_result_path . ".total_rows" = 0; search_result_path . ".pages" = ""; foreach page_item pages_items ( string page_name = @page_item; debug_message("#### check page_name: " . page_name . "\n"); if (contains(lowercase(page_name), search_term)) then ( search_result_path . ".pages." . page_count = page_name; page_count++; ); ); # Set actual total rows search_result_path . ".total_rows" = num_subnodes(search_result_path . ".pages"); # Note, we save the node even if there are zero pages found so that we don't need to loop through all source pages in case # of a repeated search save_node(search_result_path); ); # # # Get the search result, maximum up to 500 rows # # node search_result = search_result_path; int total_rows = @search_result{"total_rows"}; node search_result_pages = search_result{"pages"}; int ending_row = if (total_rows > 500) then (500) else (total_rows); string pages_dat = "["; if (total_rows > 0) then ( for (int i = 0; i < ending_row; i++) ( pages_dat .= '"' . encode_json(node_value(subnode_by_number(search_result_pages, i))) . '",'; ); pages_dat = replace_last(pages_dat, ",", "]"); ) else ( pages_dat .= "]"; ); # # # Send response # # string dat = "{"; dat .= add_json("sreId", sre_id, "string"); dat .= add_json("searchResultNodeName", search_result_node_name, "string"); dat .= add_json("startingRow", 1, "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.searchResponse(" . dat . ")\n"; ) else ( # No permission to view this resource (URL) display_no_permission_html(); ); =}