# # two_stage_goal snapon # # This snapon creates a database field which tracks the number of sessions which have a hits on X, followed later in the session by a hit on Y. # # 2010-09-03 - GMF - 1.0 - Initial snapon implementation # two_stage_goal = { label = "$lang_admin.snapons.two_stage_goal.label" comment = "$lang_admin.snapons.two_stage_goal.comment" config_snapon_category = "" parameters = { session_id_field = { parameter_value = "session_id" validation_type = "string" form_element_label = "$lang_admin.snapons.two_stage_goal.parameters.session_id_field.form_element_label" form_element_type = "select" select_options_source = "database_fields" description = "" } # session_id_field date_time_field = { parameter_value = "date_time" validation_type = "string" form_element_label = "$lang_admin.snapons.two_stage_goal.parameters.date_time_field.form_element_label" form_element_type = "select" select_options_source = "database_fields" description = "" } # date_time_field page_field = { parameter_value = "page" validation_type = "string" form_element_label = "$lang_admin.snapons.two_stage_goal.parameters.page_field.form_element_label" form_element_type = "select" select_options_source = "database_fields" description = "" } # page_field first_pathname = { parameter_value = "$lang_admin.snapons.two_stage_goal.parameters.first_pathname.parameter_value" validation_type = "string" form_element_label = "$lang_admin.snapons.two_stage_goal.parameters.first_pathname.form_element_label" form_element_type = "text" form_element_width = "380" description = "" } # first_pathname second_pathname = { parameter_value = "$lang_admin.snapons.two_stage_goal.parameters.second_pathname.parameter_value" validation_type = "string" form_element_label = "$lang_admin.snapons.two_stage_goal.parameters.second_pathname.form_element_label" form_element_type = "text" form_element_width = "380" description = "" } # second_pathname success_field = { parameter_value = "$lang_admin.snapons.two_stage_goal.parameters.success_field.parameter_value" validation_type = "field_label" validate_field_label_for = { database_fields = true report_fields = true } form_element_label = "$lang_admin.snapons.two_stage_goal.parameters.success_field.form_element_label" form_element_type = "text" form_element_width = "380" description = "This is the label for the database field and report field added by the snapon, to count the number of times the goal is achieved." } # success_field } # parameters parameters_form = { group_1 = { description = "$lang_admin.snapons.two_stage_goal.parameters_form.group_1.description" parameters = { session_id_field = true date_time_field = true page_field = true first_pathname = true second_pathname = true success_field = true } # parameters } # group 1 } # parameters_form attach_operations = { # When attaching: Add the two_stage_goal database field add_success_field_database_field = { type = "add_database_fields" fields = { "{= @parameters{'success_field'}{'final_node_name'} =}" = { label = "{= @parameters{'success_field'}{'parameter_value'} =}" type = "int" database_field = "{= @parameters{'success_field'}{'final_node_name'} =}" derivation_method = "log_field" category = "" aggregation_method = "sum" index = "true" suppress_top = "0" suppress_bottom = "2" integer_bits = "0" } # two_stage_goal } # fields } # add_success_field_database_field # When attaching: Add a database filter to set success_field to 1 whenever we see the second_pathname, after having already seen the first_pathname # in this same session add_database_filter = { type = "add_database_filters" filters = { "{= @parameters{'success_field'}{'final_node_name'} =}" = { conditions = { # Sort by session_id, then date_time sort = { type = "sort" fields = { session_id = { column_name = "{= @parameters{'session_id_field'}{'parameter_value'} =}" } date_time = { column_name = "{= @parameters{'date_time_field'}{'parameter_value'} =}" } } # fields } # sort # The last_session_id variable keeps track of the session_id of the previous event, so we know when we get to a new session. last_session_id = { type = "variable" variable_name = "last_session_id" variable_type = "int" initial_value = 0 } # last_session_id seen_first_pathname = { type = "variable" variable_name = "seen_first_pathname" variable_type = "bool" initial_value = false } # seen_first_pathname seen_first_then_second_pathname = { type = "variable" variable_name = "seen_first_then_second_pathname" variable_type = "bool" initial_value = false } # seen_first_then_second_pathname } # conditions expression = ` #echo("thisrownum: " . thisrownum . "; session_id=" . {= @parameters{'session_id_field'}{'parameter_value'} =} . "; {= @parameters{'page_field'}{'parameter_value'} =}=" . {= @parameters{'page_field'}{'parameter_value'} =}); # If this is a new session, reset the flags which track which pathnames we've seen if ({= @parameters{'session_id_field'}{'parameter_value'} =} != last_session_id) then ( seen_first_pathname = false; seen_first_then_second_pathname = false; last_session_id = {= @parameters{'session_id_field'}{'parameter_value'} =}; # echo("NEW SESSION: " . last_session_id); ); # If this is the first pathname, remember that if ({= @parameters{'page_field'}{'parameter_value'} =} eq "{= @parameters{'first_pathname'}{'parameter_value'} =}") then ( # echo("found first pathname"); seen_first_pathname = true; ); # If we've seen the first pathname, and this is the second pathname, and we haven't already seen both earlier, this is a success. if (seen_first_pathname and !seen_first_then_second_pathname and ({= @parameters{'page_field'}{'parameter_value'} =} eq "{= @parameters{'second_pathname'}{'parameter_value'} =}")) then ( # echo("found first then second pathname"); {= @parameters{'success_field'}{'final_node_name'} =} = 1; seen_first_then_second_pathname = true; ); ); ` } # two_stage_goal } # filters } # add_database_filter # When attaching: Add the two_stage_goal report field add_success_field_report_field = { type = "add_report_fields" fields = { "{= @parameters{'success_field'}{'final_node_name'} =}" = { label = "{= @parameters{'success_field'}{'parameter_value'} =}" column_label = "" column_info = "" database_field = "{= @parameters{'success_field'}{'final_node_name'} =}" display_format_type = "integer" show_remainder_value = true show_average_value = true show_min_value = true show_max_value = true show_total_value = true percent_calculation = "sum" } # two_stage_goal } # fields } # add_success_field_report_field # When attaching: Add the two_stage_goal field to all xref groups add_success_field_xref_fields = { type = "add_xref_fields" xref_group = "*" fields = { "{= @parameters{'success_field'}{'final_node_name'} =}" = "" } # fields } # add_success_field_xref_fields # When attaching: Add the two_stage_goal column to all report elements add_success_field_report_column = { type = "add_report_element_columns" report = "*" report_element = "*" columns = { "{= @parameters{'success_field'}{'final_node_name'} =}" = { report_field = "{= @parameters{'success_field'}{'final_node_name'} =}" show_column = true show_percent_column = false show_bar_column = false show_graph = true } # two_stage_goal } # columns } # add_success_field_report_column } # attach_operations } # two_stage_goal