can_opt_in() ) { $opt_in_action = htmlspecialchars( $_GET[ self::FLAG ] ); if( self::OPT_IN == $opt_in_action ){ $this->opt_in(); } if( self::OPT_OUT == $opt_in_action ){ $this->opt_out(); } } header( 'Location: ' . admin_url( 'admin.php?page=ninja-forms' ) ); } /** * Report that a user has opted-in. * * @param array $data Dispatch event data. */ function report_optin($data = array() ) { // Only send initial opt-in. if( get_option( 'ninja_forms_optin_reported', 0 ) ) return; $data = wp_parse_args( $data, array( 'send_email' => 1 // "Send Email" by default, if not specified (legacy). ) ); Ninja_Forms()->dispatcher()->send( 'optin', $data ); Ninja_Forms()->dispatcher()->update_environment_vars(); // Debounce opt-in dispatch. update_option( 'ninja_forms_optin_reported', 1 ); } /** * Register the Admin Notice for asking users to opt in to tracking * * @access public * @hook nf_admin_notices * @param array $notices * @return array $notices */ public function admin_notice( $notices ) { // Check if the user is allowed to opt in. if( ! $this->can_opt_in() ) return $notices; // Check if the user is already opted in/out. if( $this->is_opted_in() || $this->is_opted_out() ) return $notices; $notices[ 'allow_tracking' ] = array( 'title' => __( 'Please help us improve Ninja Forms!', 'ninja-forms' ), 'msg' => ' If you agree, we will collect some server data and information about how you use Ninja Forms. No submission data will be collected. This data will help us troubleshoot errors and improve your Ninja Forms experience.

You can also occasionally send me an email about using Ninja Forms.

', 'link' => implode( ' ', array( sprintf( __( '%sYes, I want to make Ninja Forms better!%s', 'ninja-forms' ), '', '' ), sprintf( __( '%sNo, please don\'t collect errors or other data.%s', 'ninja-forms' ), '', '' ), )), 'int' => 0, // No delay 'blacklist' => array( 'ninja-forms-three' ) ); echo ""; return $notices; } /** * Check if the current user is allowed to opt in on behalf of a site * * @return bool */ private function can_opt_in() { return current_user_can( apply_filters( 'ninja_forms_admin_opt_in_capabilities', 'manage_options' ) ); } /** * Check if a site is opted in * * @access public * @return bool */ public function is_opted_in() { return (bool) get_option( 'ninja_forms_allow_tracking', $this->is_freemius_opted_in() ); } private function is_freemius_opted_in() { $freemius = get_option( 'fs_accounts' ); if( ! $freemius ) return false; if( ! isset( $freemius[ 'plugin_data' ] ) ) return false; if( ! isset( $freemius[ 'plugin_data' ][ 'ninja-forms' ] ) ) return false; if( ! isset( $freemius[ 'plugin_data' ][ 'ninja-forms' ][ 'activation_timestamp' ] ) ) return false; return true; } /** * Opt In a site for tracking * * @access private * @return null */ public function opt_in() { if( $this->is_opted_in() ) return; /** * Update our tracking options. */ update_option( 'ninja_forms_allow_tracking', true ); update_option( 'ninja_forms_do_not_allow_tracking', false ); /** * Send updated environment variables. */ Ninja_Forms()->dispatcher()->update_environment_vars(); /** * Send our optin event */ if ( isset ( $_REQUEST[ 'send_email' ] ) ) { $send_email = absint( $_REQUEST[ 'send_email' ] ); } else { $send_email = 1; } $this->report_optin( array( 'send_email' => $send_email ) ); } /** * Get the Opt In URL * * @access private * @param string $url * @return string $url */ private function get_opt_in_url( $url ) { return add_query_arg( 'ninja_forms_opt_in', self::OPT_IN, $url ); } /** * Check if a site is opted out * * @access public * @return bool */ public function is_opted_out() { return (bool) get_option( 'ninja_forms_do_not_allow_tracking', $this->is_freemius_opted_out() ); } private function is_freemius_opted_out() { $freemius = get_option( 'fs_accounts' ); if( ! $freemius ) return false; if( ! isset( $freemius[ 'plugin_data' ] ) ) return false; if( ! isset( $freemius[ 'plugin_data' ][ 'ninja-forms' ] ) ) return false; if( ! isset( $freemius[ 'plugin_data' ][ 'ninja-forms' ][ 'is_anonymous' ] ) ) return false; return true; } /** * Opt Out a site from tracking * * @access private * @return null */ private function opt_out() { if( $this->is_opted_out() ) return; // Disable tracking. update_option( 'ninja_forms_allow_tracking', false ); update_option( 'ninja_forms_do_not_allow_tracking', true ); // Clear dispatch debounce flag. update_option( 'ninja_forms_optin_reported', 0 ); } /** * Get the Opt Out URL * * @access private * @param string $url * @return string $url */ private function get_opt_out_url( $url ) { return add_query_arg( 'ninja_forms_opt_in', self::OPT_OUT, $url ); } public function check_setting( $setting ) { if( $this->is_opted_in() && ! $this->is_opted_out() ) { $setting[ 'value' ] = "1"; } else { $setting[ 'value' ] = "0"; } return $setting; } public function update_setting( $value ) { if( "1" == $value ){ // Allow Tracking $this->opt_in(); } else { $this->opt_out(); } return $value; } } // END CLASS NF_Tracking