AnsPress_Bad_words()
Description #
Bad words filter hooks.
Source #
File: addons/free/bad-words.php
class AnsPress_Bad_words {
/**
* Initialize the plugin by setting localization and loading public scripts
* and styles.
*
* @since 4.0.0
*/
public static function init() {
anspress()->add_action( 'ap_before_inserting_question', __CLASS__, 'before_inserting_question', 10, 2 );
anspress()->add_action( 'ap_before_updating_question', __CLASS__, 'before_inserting_question', 10, 2 );
anspress()->add_action( 'ap_before_inserting_answer', __CLASS__, 'before_inserting_question', 10, 2 );
anspress()->add_action( 'ap_before_updating_answer', __CLASS__, 'before_inserting_question', 10, 2 );
anspress()->add_action( 'ap_option_groups', __CLASS__, 'options' );
}
/**
* Hook to check bad words before inserting question into database.
*
* @param boolean $return Return ajax response or boolean.
* @param string $str Question form fields.
* @return array|boolean
* @since 2.4.5
*/
public static function before_inserting_question( $return, $str ) {
$bad_words = SELF::find_bad_words( $str );
if ( false === $bad_words || empty( $bad_words ) ) {
return $return;
}
return array(
'form' => ap_sanitize_unslash( 'ap_form_action' ),
'success' => false,
'snackbar' => [ 'message' => __( 'Don’t use foul or abusive language. Let everything you say be good and helpful.', 'anspress-question-answer' ) ],
'action' => 'bad_word_detected',
);
}
/**
* Register Categories options
*/
public static function options() {
ap_register_option_section( 'addons', basename( __FILE__ ) , __( 'Bad Words', 'anspress-question-answer' ), [
array(
'name' => 'bad_words',
'label' => __( 'Add comma separted bad words', 'anspress-question-answer' ),
'desc' => __( 'Enter words separted by comma. This option can be overriden by placing a <small>badwords.txt</small> in AnsPress override folder. While using bad word from file, add one word per line rather then comma separted.' ),
'type' => 'textarea',
),
]);
}
/**
* Check if checking for bad word is enabled.
*
* @return array
* @since 4.0.0
*/
public static function get_bad_words() {
$bad_word_file = ap_get_theme_location( 'badwords.txt' );
// Return if badwords.txt file does not exists.
if ( file_exists( $bad_word_file ) ) {
return file( $bad_word_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
}
$option = ap_opt( 'bad_words' );
if ( ! empty( $option ) ) {
return explode( ',', $option );
}
return [];
}
/**
* Find bad words in a string.
*
* @param string $str String need to be checked.
* @return array|boolean
* @since 4.0.0
*/
public static function find_bad_words( $str ) {
$found = array();
foreach ( (array) SELF::get_bad_words() as $w ) {
$w = trim( $w );
$count = preg_match_all( '/\b' . preg_quote( $w,'/' ) . '\b/i', $str );
if ( $count > 0 ) {
$found[ $w ] = $count;
}
}
if ( ! empty( $found ) ) {
return $found;
}
return false;
}
}
Expand full source code Collapse full source code View on GitHub: addons/free/bad-words.php:32
The code repository does not have this code, has it not been updated yet?