# # Top-level Domain Snapon # # This snapon adds a field which is the top-level domain, calculated from the URL # top_level_domain = { label = "$lang_admin.snapons.top_level_domain.label" comment = "$lang_admin.snapons.top_level_domain.comment" config_snapon_category = "" parameters = { url_field = { parameter_value = "url" validation_type = "string" form_element_label = "$lang_admin.snapons.top_level_domain.parameters.url_field.form_element_label" form_element_type = "select" select_options_source = "log_fields" description = "" } # url_field top_level_domain_field_name = { parameter_value = "{=capitalize(expand(lang_stats.field_labels.top_level_domain))=}" validation_type = "field_label" validate_field_label_for = { database_fields = true report_fields = true } form_element_label = "$lang_admin.snapons.top_level_domain.parameters.field_name.form_element_label" form_element_type = "text" form_element_width = "380" description = "$lang_admin.snapons.top_level_domain.parameters.field_name.description" } # top_level_domain_field_name } # parameters parameters_form = { group_1 = { description = "$lang_admin.snapons.top_level_domain.parameters_form.group_1.description" parameters = { url_field = true top_level_domain_field_name = true } # parameters } # group 1 } # parameters_form attach_operations = { # Add log field add_log_fields = { type = "add_log_fields" fields = { top_level_domain = { # label = "$lang_stats.field_labels.top_level_domain" # derivation_method = "log_filter" # category = "" # source_database_field = "top_level_domain" # type = "string" # aggregation_method = "none" # index = "true" # suppress_top = "0" # suppress_bottom = "2" # integer_bits = "0" } # top_level_domain_start_time } # fields } # add_log_fields # Add log filter add_log_filters = { type = "add_log_filters" filters = { compute_top_level_domain = { label = "Compute top-level domain" # LM comment = "This computes the top level domain" # LM value = " # Start with the {= @parameters{'url_field'}{'parameter_value'} =} field as the {= @parameters{'top_level_domain_field_name'}{'final_node_name'} =} {= @parameters{'top_level_domain_field_name'}{'final_node_name'} =} = {= @parameters{'url_field'}{'parameter_value'} =}; # If it's http://xyz/etc, use xyz if (matches_regular_expression({= @parameters{'top_level_domain_field_name'}{'final_node_name'} =}, '^[a-z]+://([^:/]+)[:/]')) then {= @parameters{'top_level_domain_field_name'}{'final_node_name'} =} = $1; # If it's xyz/abc/etc, use xyz else if (matches_regular_expression({= @parameters{'top_level_domain_field_name'}{'final_node_name'} =}, '^([^:/]+)[:/]')) then {= @parameters{'top_level_domain_field_name'}{'final_node_name'} =} = $1; # If it's x.y.co.uk, use y.co.uk as the TLD if (matches_regular_expression({= @parameters{'top_level_domain_field_name'}{'final_node_name'} =}, '[.]([^.]+)[.]([^.]+)[.]([^.]+)$') and ('rewrite_rules.domains.second_level_domains'?{($2 . '_' . $3)})) then {= @parameters{'top_level_domain_field_name'}{'final_node_name'} =} = $1 . '.' . $2 . '.' . $3; # If it's x.y.com, use y.com as the TLD else if (matches_regular_expression({= @parameters{'top_level_domain_field_name'}{'final_node_name'} =}, '[.]([^.]+)[.]([^.]+)$') and ('rewrite_rules.domains.{= @parameters{'top_level_domain_field_name'}{'final_node_name'} =}s'?{$2})) then {= @parameters{'top_level_domain_field_name'}{'final_node_name'} =} = $1 . '.' . $2; " } # compute_top_level_domain } # filters } # add_log_filters # Add database field add_database_fields = { type = "add_database_fields" fields = { top_level_domain = "" } # fields } # add_database_fields # Add report fields add_report_fields = { type = "add_report_fields" fields = { top_level_domain = "" } # fields } # add_report_fields # When attaching: Add the reports. # Disabled because this is done automatically by Create Profile Wizard. # add_reports = { # # type = "add_reports" # # reports = { # # top_level_domain_snapon_report = { # label = "$lang_admin.snapons.top_level_domain.report_label" # report_elements = { # top_level_domain_snapon_report = { # label = "$lang_admin.snapons.top_level_domain.report_label" # type = "table" # sort_by = "MAIN_SORT_FIELD" # Sort this report by the main sort field, whatever that may be # columns = { # top_level_domain.report_field = "top_level_domain" ## top_level_domain.report_field = "{= @parameters{'top_level_domain_field_name'}{'final_node_name'} =}" # } # columns # } # entry_pages # } # report_elements # } # top_level_domain_snapon_report # } # reports # } # add_reports } # attach_operations } # top_level_domain