GitHub'; } return $links; } /** * Add plugin action links * * @param array $input Registered links * * @return array Merged links * * @since 1.0.0 */ public static function plugin_actions_links( $links, $file ) { $base = self::$multisite ? network_admin_url( 'settings.php' ) : admin_url( 'options-general.php' ); if ( $file == STATIFYBLACKLIST_BASE && current_user_can( 'manage_options' ) ) { array_unshift( $links, sprintf( '%s', esc_attr( add_query_arg( 'page', 'statify-blacklist', $base ) ), __( 'Settings' ) ) ); } return $links; } /** * Filter database for cleanup. * * @since 1.1.0 * @changed 1.2.1 */ public static function cleanup_database() { /* Check user permissions */ if ( ! current_user_can( 'manage_options' ) ) { die( _e( 'Are you sure you want to do this?' ) ); } global $wpdb; /* Sanitize URLs */ $referer = self::sanitizeURLs( self::$_options['referer'] ); /* Build filter regexp */ $refererRegexp = str_replace( '.', '\.', implode( '|', array_flip( $referer ) ) ); if ( ! empty( $refererRegexp ) ) { /* Execute filter on database */ $wpdb->query( $wpdb->prepare( "DELETE FROM `$wpdb->statify` WHERE referrer REGEXP %s", $refererRegexp ) ); /* Optimize DB */ $wpdb->query( "OPTIMIZE TABLE `$wpdb->statify`" ); } } /** * Sanitize URLs and remove empty results * * @param $urls array given array of URLs * * @return array sanitized array * * @since 1.1.1 * @changed 1.2.0 */ private static function sanitizeURLs( $urls ) { return array_flip( array_filter( array_map( function ( $r ) { return preg_replace( '/[^\da-z\.-]/i', '', filter_var( $r, FILTER_SANITIZE_URL ) ); }, array_flip( $urls ) ) ) ); } }