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' ) ); } /** * 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' => implode( '
', array( __( 'If you opt-in, some data about your installation of Ninja Forms will be sent to NinjaForms.com (this does NOT include your submissions).', 'ninja-forms' ), __( 'If you skip this, that\'s okay! Ninja Forms will still work just fine.', 'ninja-forms' ), )), 'link' => implode( ' ', array( sprintf( __( '%sAllow%s', 'ninja-forms' ), '', '' ), sprintf( __( '%sDo not allow%s', 'ninja-forms' ), '', '' ), )), 'int' => 0, // No delay 'blacklist' => array( 'ninja-forms-three' ) ); 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() { update_option( 'ninja_forms_allow_tracking', true ); } /** * 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() { update_option( 'ninja_forms_do_not_allow_tracking', true ); } /** * 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 ); } } // END CLASS NF_Tracking