Search Results for '+.+default+.+'
-
AuthorSearch Results
-
January 23, 2019 at 6:52 pm #198011
In reply to: bbPress menus not showing up in Dashboard…
Robin W
ModeratorIt could be a theme or plugin issue
Themes
As a test switch to a default theme such as twentyfifteen, and see if this fixes.
Plugins
If that doesn’t work, also deactivate all but bbpress and see if this fixes. if it does, re-enable one at a time to see which is causing the error.
Then come back
January 23, 2019 at 4:17 pm #198009In reply to: more than 50 topics on the front page
Clivesmith
ParticipantHi Robin,
Thanks but that does not work,Also I have changed the line 11 in bbp style pack as above back to default it knocks the list under Countries back to 50 so not including Vietnam.
January 23, 2019 at 3:23 pm #198003Topic: more than 50 topics on the front page
in forum TroubleshootingClivesmith
ParticipantI want to show more than 50 topics on a forum on the front page, if I click on the forum it will list more than 50 but only 50 show up on the front page,
Hope this makes sense, if you look at my site (wateratairports.com) Vietnam is not on the front page but if you click on “Countries” it is at the end.I found the following but that does not work.
// filter to show more than 50 forums on the index page
function bbp_increase_forum_per_page( $args = array() ) {
$args[‘posts_per_page’] = get_option( ‘_bbp_forums_per_page’, 100 );
return $args;
}
add_filter( ‘bbp_before_has_forums_parse_args’, ‘bbp_increase_forum_per_page’ );I have bbp style pack and under forum display there is a line 11. No. Forums Per Page
Default : 50 I have changed that to 100 but that does not seem to work either.January 22, 2019 at 6:29 pm #197987In reply to: Forum freshness not displaying after 7 days
Robin W
ModeratorIt could be a theme or plugin issue
Themes
As a test switch to a default theme such as twentyfifteen, and see if this fixes.
Plugins
If that doesn’t work, also deactivate all but bbpress and see if this fixes. if it does, re-enable one at a time to see which is causing the error.
Then come back
January 21, 2019 at 6:16 pm #197950In reply to: Admin unable to view forum after wp 5.03 update
Robin W
Moderatorbbpress is compatible with 5.0.3 and works fine on my test site.
It may be a conflict with your theme or plugins
Themes
As a test switch to a default theme such as twentyfifteen, and see if this fixes.
Plugins
If that doesn’t work, also deactivate all but bbpress and see if this fixes. if it does, re-enable one at a time to see which is causing the error.
Then come back
January 21, 2019 at 10:09 am #197934In reply to: Import Hung?
budget101
ParticipantThe order should be (I think):
Users
Forums
Topics
Tags
RepliesAgreed, this is necessary for large imports, I initially had a database of 110K+ users and 2.2 million posts/topics, which after 13 days of importing I decided to prune before attempting again.
In theory, you could rearrange these yourself by altering the wp-content>plugins>bbpress>includes>admin>converter.php file and changing the order of the steps. I actually thing the tags are the least important step for my site & the one that caused the most headache/issues while importing, so I made that step the LAST step.
<?php /** * bbPress Converter * * Based on the hard work of Adam Ellis at http://bbconverter.com * * @package bbPress * @subpackage Administration */ // Exit if accessed directly if ( !defined( 'ABSPATH' ) ) exit; /** * Main BBP_Converter Class */ class BBP_Converter { /** * The main bbPress Converter loader * * @since bbPress (r3813) * @uses BBP_Converter::includes() Include the required files * @uses BBP_Converter::setup_actions() Setup the actions */ public function __construct() { // "I wonder where I'll float next." if ( empty( $_SERVER['REQUEST_METHOD'] ) ) return; // Bail if request is not correct switch ( strtoupper( $_SERVER['REQUEST_METHOD'] ) ) { // Converter is converting case 'POST' : if ( ( empty( $_POST['action'] ) || ( 'bbconverter_process' != $_POST['action'] ) ) ) return; break; // Some other admin page case 'GET' : if ( ( empty( $_GET['page'] ) || ( 'bbp-converter' != $_GET['page'] ) ) ) return; break; } // Proceed with the actions $this->setup_actions(); } /** * Setup the default actions * * @since bbPress (r3813) * @uses add_action() To add various actions */ private function setup_actions() { // Attach to the admin head with our ajax requests cycle and css add_action( 'bbp_admin_head', array( $this, 'admin_head' ) ); // Attach the bbConverter admin settings action to the WordPress admin init action. add_action( 'bbp_register_admin_settings', array( $this, 'register_admin_settings' ) ); // Attach to the admin ajax request to process cycles add_action( 'wp_ajax_bbconverter_process', array( $this, 'process_callback' ) ); } /** * Register the settings * * @since bbPress (r3813) * @uses add_settings_section() To add our own settings section * @uses add_settings_field() To add various settings fields * @uses register_setting() To register various settings */ public function register_admin_settings() { // Add the main section add_settings_section( 'bbpress_converter_main', __( 'Database Settings', 'bbpress' ), 'bbp_converter_setting_callback_main_section', 'bbpress_converter' ); // System Select add_settings_field( '_bbp_converter_platform', __( 'Select Platform', 'bbpress' ), 'bbp_converter_setting_callback_platform', 'bbpress_converter', 'bbpress_converter_main' ); register_setting ( 'bbpress_converter_main', '_bbp_converter_platform', 'sanitize_title' ); // Database Server add_settings_field( '_bbp_converter_db_server', __( 'Database Server', 'bbpress' ), 'bbp_converter_setting_callback_dbserver', 'bbpress_converter', 'bbpress_converter_main' ); register_setting ( 'bbpress_converter_main', '_bbp_converter_db_server', 'sanitize_title' ); // Database Server Port add_settings_field( '_bbp_converter_db_port', __( 'Database Port', 'bbpress' ), 'bbp_converter_setting_callback_dbport', 'bbpress_converter', 'bbpress_converter_main' ); register_setting ( 'bbpress_converter_main', '_bbp_converter_db_port', 'sanitize_title' ); // Database Name add_settings_field( '_bbp_converter_db_name', __( 'Database Name', 'bbpress' ), 'bbp_converter_setting_callback_dbname', 'bbpress_converter', 'bbpress_converter_main' ); register_setting ( 'bbpress_converter_main', '_bbp_converter_db_name', 'sanitize_title' ); // Database User add_settings_field( '_bbp_converter_db_user', __( 'Database User', 'bbpress' ), 'bbp_converter_setting_callback_dbuser', 'bbpress_converter', 'bbpress_converter_main' ); register_setting ( 'bbpress_converter_main', '_bbp_converter_db_user', 'sanitize_title' ); // Database Pass add_settings_field( '_bbp_converter_db_pass', __( 'Database Password', 'bbpress' ), 'bbp_converter_setting_callback_dbpass', 'bbpress_converter', 'bbpress_converter_main' ); register_setting ( 'bbpress_converter_main', '_bbp_converter_db_pass', 'sanitize_title' ); // Database Prefix add_settings_field( '_bbp_converter_db_prefix', __( 'Table Prefix', 'bbpress' ), 'bbp_converter_setting_callback_dbprefix', 'bbpress_converter', 'bbpress_converter_main' ); register_setting ( 'bbpress_converter_main', '_bbp_converter_db_prefix', 'sanitize_title' ); // Add the options section add_settings_section( 'bbpress_converter_opt', __( 'Options', 'bbpress' ), 'bbp_converter_setting_callback_options_section', 'bbpress_converter' ); // Rows Limit add_settings_field( '_bbp_converter_rows', __( 'Rows Limit', 'bbpress' ), 'bbp_converter_setting_callback_rows', 'bbpress_converter', 'bbpress_converter_opt' ); register_setting ( 'bbpress_converter_opt', '_bbp_converter_rows', 'intval' ); // Delay Time add_settings_field( '_bbp_converter_delay_time', __( 'Delay Time', 'bbpress' ), 'bbp_converter_setting_callback_delay_time', 'bbpress_converter', 'bbpress_converter_opt' ); register_setting ( 'bbpress_converter_opt', '_bbp_converter_delay_time', 'intval' ); // Convert Users ? add_settings_field( '_bbp_converter_convert_users', __( 'Convert Users', 'bbpress' ), 'bbp_converter_setting_callback_convert_users', 'bbpress_converter', 'bbpress_converter_opt' ); register_setting ( 'bbpress_converter_opt', '_bbp_converter_convert_users', 'intval' ); // Restart add_settings_field( '_bbp_converter_restart', __( 'Start Over', 'bbpress' ), 'bbp_converter_setting_callback_restart', 'bbpress_converter', 'bbpress_converter_opt' ); register_setting ( 'bbpress_converter_opt', '_bbp_converter_restart', 'intval' ); // Clean add_settings_field( '_bbp_converter_clean', __( 'Purge Previous Import', 'bbpress' ), 'bbp_converter_setting_callback_clean', 'bbpress_converter', 'bbpress_converter_opt' ); register_setting ( 'bbpress_converter_opt', '_bbp_converter_clean', 'intval' ); } /** * Admin scripts * * @since bbPress (r3813) */ public function admin_head() { ?> <style type="text/css" media="screen"> /*<![CDATA[*/ div.bbp-converter-updated, div.bbp-converter-warning { border-radius: 3px 3px 3px 3px; border-style: solid; border-width: 1px; padding: 5px 5px 5px 5px; } div.bbp-converter-updated { height: 300px; overflow: auto; display: none; background-color: #FFFFE0; border-color: #E6DB55; font-family: monospace; font-weight: bold; } div.bbp-converter-updated p { margin: 0.5em 0; padding: 2px; float: left; clear: left; } div.bbp-converter-updated p.loading { background-image: url('%3C?php echo admin_url('); background-repeat: no-repeat; background-position: right center;; padding-left:2px; padding-right:20px; padding-top:2px; padding-bottom:2px } #bbp-converter-stop { display:none; } #bbp-converter-progress { display:none; } /*]]>*/ </style> <script language="javascript"> var bbconverter_is_running = false; var bbconverter_run_timer; var bbconverter_delay_time = 0; function bbconverter_grab_data() { var values = {}; jQuery.each(jQuery('#bbp-converter-settings').serializeArray(), function(i, field) { values[field.name] = field.value; }); if( values['_bbp_converter_restart'] ) { jQuery('#_bbp_converter_restart').removeAttr("checked"); } if( values['_bbp_converter_delay_time'] ) { bbconverter_delay_time = values['_bbp_converter_delay_time'] * 1000; } values['action'] = 'bbconverter_process'; values['_ajax_nonce'] = '<?php echo wp_create_nonce( 'bbp_converter_process' ); ?>'; return values; } function bbconverter_start() { if( false == bbconverter_is_running ) { bbconverter_is_running = true; jQuery('#bbp-converter-start').hide(); jQuery('#bbp-converter-stop').show(); jQuery('#bbp-converter-progress').show(); bbconverter_log( '<p class="loading"><?php esc_html_e( 'Starting Conversion', 'bbpress' ); ?></p>' ); bbconverter_run(); } } function bbconverter_run() { jQuery.post(ajaxurl, bbconverter_grab_data(), function(response) { var response_length = response.length - 1; response = response.substring(0,response_length); bbconverter_success(response); }); } function bbconverter_stop() { jQuery('#bbp-converter-start').show(); jQuery('#bbp-converter-stop').hide(); jQuery('#bbp-converter-progress').hide(); jQuery('#bbp-converter-message p').removeClass( 'loading' ); bbconverter_is_running = false; clearTimeout( bbconverter_run_timer ); } function bbconverter_success(response) { bbconverter_log(response); if ( response == '<p class="loading"><?php esc_html_e( 'Conversion Complete', 'bbpress' ); ?></p>' || response.indexOf('error') > -1 ) { bbconverter_log('<p>Repair any missing information: <a href="<?php echo admin_url(); ?>tools.php?page=bbp-repair">Continue</a></p>'); bbconverter_stop(); } else if( bbconverter_is_running ) { // keep going jQuery('#bbp-converter-progress').show(); clearTimeout( bbconverter_run_timer ); bbconverter_run_timer = setTimeout( 'bbconverter_run()', bbconverter_delay_time ); } else { bbconverter_stop(); } } function bbconverter_log(text) { if ( jQuery('#bbp-converter-message').css('display') == 'none' ) { jQuery('#bbp-converter-message').show(); } if ( text ) { jQuery('#bbp-converter-message p').removeClass( 'loading' ); jQuery('#bbp-converter-message').prepend( text ); } } </script> <?php } /** * Wrap the converter output in paragraph tags, so styling can be applied * * @since bbPress (r4052) * * @param string $output */ private static function converter_output( $output = '' ) { // Get the last query $before = '<p class="loading">'; $after = '</p>'; $query = get_option( '_bbp_converter_query' ); if ( ! empty( $query ) ) $before = '<p class="loading" title="' . esc_attr( $query ) . '">'; echo $before . $output . $after; } /** * Callback processor * * @since bbPress (r3813) */ public function process_callback() { // Verify intent check_ajax_referer( 'bbp_converter_process' ); // Bail if user cannot view import page if ( ! current_user_can( 'bbp_tools_import_page' ) ) { wp_die( '0' ); } if ( ! ini_get( 'safe_mode' ) ) { set_time_limit( 0 ); ini_set( 'memory_limit', '256M' ); ini_set( 'implicit_flush', '1' ); ignore_user_abort( true ); } // Save step and count so that it can be restarted. if ( ! get_option( '_bbp_converter_step' ) || ( !empty( $_POST['_bbp_converter_restart'] ) ) ) { update_option( '_bbp_converter_step', 1 ); update_option( '_bbp_converter_start', 0 ); } $step = (int) get_option( '_bbp_converter_step', 1 ); $min = (int) get_option( '_bbp_converter_start', 0 ); $count = (int) ! empty( $_POST['_bbp_converter_rows'] ) ? $_POST['_bbp_converter_rows'] : 100; $max = ( $min + $count ) - 1; $start = $min; // Bail if platform did not get saved $platform = !empty( $_POST['_bbp_converter_platform' ] ) ? $_POST['_bbp_converter_platform' ] : get_option( '_bbp_converter_platform' ); if ( empty( $platform ) ) return; // Include the appropriate converter. $converter = bbp_new_converter( $platform ); switch ( $step ) { // STEP 1. Clean all tables. case 1 : if ( !empty( $_POST[_bbp_converter_clean] ) ) { if ( $converter->clean( $start ) ) { update_option( _bbp_converter_step'', $step + 1 ); update_option( '_bbp_converter_start', 0 ) } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Deleting previously converted data (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } } else { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); } break; // STEP 2. Convert users. case 2 : if ( !empty( $_POST['_bbp_converter_convert_users'] ) ) { if ( $converter->convert_users( $start ) ) { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); if ( empty( $start ) ) { $this->converter_output( __( 'No users to convert', 'bbpress' ) ); } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Converting users (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } } else { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); } break; // STEP 3. Clean passwords. case 3 : if ( !empty( $_POST['_bbp_converter_convert_users'] ) ) { if ( $converter->clean_passwords( $start ) ) { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); if ( empty( $start ) ) { $this->converter_output( __( 'No passwords to clear', 'bbpress' ) ); } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Delete users WordPress default passwords (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } } else { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); } break; // STEP 4. Convert forums. case 4 : if ( $converter->convert_forums( $start ) ) { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); if ( empty( $start ) ) { $this->converter_output( __( 'No forums to convert', 'bbpress' ) ); } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Converting forums (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } break; // STEP 5. Convert forum parents. case 5 : if ( $converter->convert_forum_parents( $start ) ) { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); if ( empty( $start ) ) { $this->converter_output( __( 'No forum parents to convert', 'bbpress' ) ); } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Calculating forum hierarchy (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } break; // STEP 6. Convert topics. case 6 : if ( $converter->convert_topics( $start ) ) { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); if ( empty( $start ) ) { $this->converter_output( __( 'No topics to convert', 'bbpress' ) ); } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Converting topics (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } break; // STEP 7. Stick topics. case 7 : if ( $converter->convert_topic_stickies( $start ) ) { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); if ( empty( $start ) ) { $this->converter_output( __( 'No stickies to stick', 'bbpress' ) ); } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Calculating topic stickies (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } break; // STEP 8. Stick to front topics (Super Sicky). case 8 : if ( $converter->convert_topic_super_stickies( $start ) ) { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); if ( empty( $start ) ) { $this->converter_output( __( 'No super stickies to stick', 'bbpress' ) ); } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Calculating topic super stickies (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } break; // STEP 9. Convert replies. case 9 : if ( $converter->convert_replies( $start ) ) { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); if ( empty( $start ) ) { $this->converter_output( __( 'No replies to convert', 'bbpress' ) ); } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Converting replies (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } break; // STEP 10. Convert reply_to parents. case 10 : if ( $converter->convert_reply_to_parents( $start ) ) { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); if ( empty( $start ) ) { $this->converter_output( __( 'No reply_to parents to convert', 'bbpress' ) ); } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Calculating reply_to parents (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } break; // STEP 11. Convert tags. case 11 : if ( $converter->convert_tags( $start ) ) { update_option( '_bbp_converter_step', $step + 1 ); update_option( '_bbp_converter_start', 0 ); if ( empty( $start ) ) { $this->converter_output( __( 'No tags to convert', 'bbpress' ) ); } } else { update_option( '_bbp_converter_start', $max + 1 ); $this->converter_output( sprintf( __( 'Converting topic tags (%1$s - %2$s)', 'bbpress' ), $min, $max ) ); } break; default : delete_option( '_bbp_converter_step' ); delete_option( '_bbp_converter_start' ); delete_option( '_bbp_converter_query' ); $this->converter_output( __( 'Conversion Complete', 'bbpress' ) ); break; } } /** * Create Tables for fast syncing * * @since bbPress (r3813) */ public function sync_table( $drop = false ) { global $wpdb; $table_name = $wpdb->prefix . 'bbp_converter_translator'; if ( ! empty( $drop ) && $wpdb->get_var( "SHOW TABLES LIKE '{$table_name}'" ) == $table_name ) $wpdb->query( "DROP TABLE {$table_name}" ); require_once( ABSPATH . '/wp-admin/includes/upgrade.php' ); if ( !empty( $wpdb->charset ) ) { $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; } if ( !empty( $wpdb->collate ) ) { $charset_collate .= "COLLATE $wpdb->collate"; } /** Translator ****************************************************/ $sql = "CREATE TABLE {$table_name} ( meta_id mediumint(8) unsigned not null auto_increment, value_type varchar(25) null, value_id bigint(20) unsigned not null default '0', meta_key varchar(25) null, meta_value varchar(25) null, PRIMARY KEY (meta_id), KEY value_id (value_id), KEY meta_join (meta_key, meta_value) ) {$charset_collate};"; dbDelta( $sql ); } } /** * Base class to be extended by specific individual importers * * @since bbPress (r3813) */ abstract class BBP_Converter_Base { /** * @var array() This is the field mapping array to process. */ protected $field_map = array(); /** * @var object This is the connection to the WordPress datbase. */ protected $wpdb; /** * @var object This is the connection to the other platforms database. */ protected $opdb; /** * @var int This is the max rows to process at a time. */ public $max_rows; /** * @var array() Map of topic to forum. It is for optimization. */ private $map_topicid_to_forumid = array(); /** * @var array() Map of from old forum ids to new forum ids. It is for optimization. */ private $map_forumid = array(); /** * @var array() Map of from old topic ids to new topic ids. It is for optimization. */ private $map_topicid = array(); /** * @var array() Map of from old reply_to ids to new reply_to ids. It is for optimization. */ private $map_reply_to = array(); /** * @var array() Map of from old user ids to new user ids. It is for optimization. */ private $map_userid = array(); /** * @var str This is the charset for your wp database. */ public $charset; /** * @var boolean Sync table available. */ public $sync_table = false; /** * @var str Sync table name. */ public $sync_table_name; /** Methods ***************************************************************/ /** * This is the constructor and it connects to the platform databases. */ public function __construct() { $this->setup_globals(); } private function setup_globals() { global $wpdb; /** Get database connections ******************************************/ $this->wpdb = $wpdb; $this->max_rows = (int) $_POST['_bbp_converter_rows']; $this->opdb = new wpdb( $_POST['_bbp_converter_db_user'], $_POST['_bbp_converter_db_pass'], $_POST['_bbp_converter_db_name'], $_POST['_bbp_converter_db_server'] ); $this->opdb->prefix = $_POST['_bbp_converter_db_prefix']; /** * Error Reporting */ $this->wpdb->show_errors(); $this->opdb->show_errors(); /** * Syncing */ $this->sync_table_name = $this->wpdb->prefix . 'bbp_converter_translator'; if ( $this->wpdb->get_var( "SHOW TABLES LIKE '" . $this->sync_table_name . "'" ) == $this->sync_table_name ) { $this->sync_table = true; } else { $this->sync_table = false; } /** * Charset */ if ( empty( $this->wpdb->charset ) ) { $this->charset = 'UTF8mb4'; } else { $this->charset = $this->wpdb->charset; } /** * Default mapping. */ /** Forum Section *****************************************************/ $this->field_map[] = array( 'to_type' => 'forum', 'to_fieldname' => 'post_status', 'default' => 'publish' ); $this->field_map[] = array( 'to_type' => 'forum', 'to_fieldname' => 'comment_status', 'default' => 'closed' ); $this->field_map[] = array( 'to_type' => 'forum', 'to_fieldname' => 'ping_status', 'default' => 'closed' ); $this->field_map[] = array( 'to_type' => 'forum', 'to_fieldname' => 'post_type', 'default' => 'forum' ); /** Topic Section *****************************************************/ $this->field_map[] = array( 'to_type' => 'topic', 'to_fieldname' => 'post_status', 'default' => 'publish' ); $this->field_map[] = array( 'to_type' => 'topic', 'to_fieldname' => 'comment_status', 'default' => 'closed' ); $this->field_map[] = array( 'to_type' => 'topic', 'to_fieldname' => 'ping_status', 'default' => 'closed' ); $this->field_map[] = array( 'to_type' => 'topic', 'to_fieldname' => 'post_type', 'default' => 'topic' ); /** Post Section ******************************************************/ $this->field_map[] = array( 'to_type' => 'reply', 'to_fieldname' => 'post_status', 'default' => 'publish' ); $this->field_map[] = array( 'to_type' => 'reply', 'to_fieldname' => 'comment_status', 'default' => 'closed' ); $this->field_map[] = array( 'to_type' => 'reply', 'to_fieldname' => 'ping_status', 'default' => 'closed' ); $this->field_map[] = array( 'to_type' => 'reply', 'to_fieldname' => 'post_type', 'default' => 'reply' ); /** User Section ******************************************************/ $this->field_map[] = array( 'to_type' => 'user', 'to_fieldname' => 'role', 'default' => get_option( 'default_role' ) ); } /** * Convert Forums */ public function convert_forums( $start = 1 ) { return $this->convert_table( 'forum', $start ); } /** * Convert Topics / Threads */ public function convert_topics( $start = 1 ) { return $this->convert_table( 'topic', $start ); } /** * Convert Posts */ public function convert_replies( $start = 1 ) { return $this->convert_table( 'reply', $start ); } /** * Convert Users */ public function convert_users( $start = 1 ) { return $this->convert_table( 'user', $start ); } /** * Convert Tags */ public function convert_tags( $start = 1 ) { return $this->convert_table( 'tags', $start ); } /** * Convert Table * * @param string to type * @param int Start row */ public function convert_table( $to_type, $start ) { // Are we usig a sync table, or postmeta? if ( $this->wpdb->get_var( "SHOW TABLES LIKE '" . $this->sync_table_name . "'" ) == $this->sync_table_name ) { $this->sync_table = true; } else { $this->sync_table = false; } // Set some defaults $has_insert = false; $from_tablename = ''; $field_list = $from_tables = $tablefield_array = array(); // Toggle Table Name based on $to_type (destination) switch ( $to_type ) { case 'user' : $tablename = $this->wpdb->users; break; case 'tags' : $tablename = ''; break; default : $tablename = $this->wpdb->posts; } // Get the fields from the destination table if ( !empty( $tablename ) ) { $tablefield_array = $this->get_fields( $tablename ); } /** Step 1 ************************************************************/ // Loop through the field maps, and look for to_type matches foreach ( $this->field_map as $item ) { // Yay a match, and we have a from table, too if ( ( $item['to_type'] == $to_type ) && !empty( $item['from_tablename'] ) ) { // $from_tablename was set from a previous loop iteration if ( ! empty( $from_tablename ) ) { // Doing some joining if ( !in_array( $item['from_tablename'], $from_tables ) && in_array( $item['join_tablename'], $from_tables ) ) { $from_tablename .= ' ' . $item['join_type'] . ' JOIN ' . $this->opdb->prefix . $item['from_tablename'] . ' AS ' . $item['from_tablename'] . ' ' . $item['join_expression']; } // $from_tablename needs to be set } else { $from_tablename = $item['from_tablename'] . ' AS ' . $item['from_tablename']; } // Specific FROM expression data used if ( !empty( $item['from_expression'] ) ) { // No 'WHERE' in expression if ( stripos( $from_tablename, "WHERE" ) === false ) { $from_tablename .= ' ' . $item['from_expression']; // 'WHERE' in expression, so replace with 'AND' } else { $from_tablename .= '. str_replace( WHERE, AND, $item[from_expression'] )''; } } // Add tablename and fieldname to arrays, formatted for querying $from_tables[] = $item['from_tablename']; $field_list[] = 'convert(' . $item['from_tablename'] . '.' . $item['from_fieldname'] . ' USING "' . $this->charset . '") AS ' . $item['from_fieldname']; } } /** Step 2 ************************************************************/ // We have a $from_tablename, so we want to get some data to convert if ( !empty( $from_tablename ) ) { // Get some data from the old forums $field_list = array_unique( $field_list ); $forum_query = 'SELECT ' . implode( ',', $field_list ) . ' FROM ' . $this->opdb->prefix . $from_tablename . ' LIMIT ' . $start . ', ' . $this->max_rows; $forum_array = $this->opdb->get_results( $forum_query, ARRAY_A ); // Set this query as the last one ran update_option( '_bbp_converter_query', $forum_query ); // Query returned some results if ( !empty( $forum_array ) ) { // Loop through results foreach ( (array) $forum_array as $forum ) { // Reset some defaults $insert_post = $insert_postmeta = $insert_data = array(); // Loop through field map, again... foreach ( $this->field_map as $row ) { // Types matchand to_fieldname is present. This means // we have some work to do here. if ( ( $row['to_type'] == $to_type ) && ! is_null( $row['to_fieldname'] ) ) { // This row has a destination that matches one of the // columns in this table. if ( in_array( $row['to_fieldname'], $tablefield_array ) ) { // Allows us to set default fields. if ( isset( $row['default'] ) ) { $insert_post[$row['to_fieldname']] = $row['default']; // Translates a field from the old forum. } elseif ( isset( $row['callback_method'] ) ) { if ( ( 'callback_userid' == $row['callback_method'] ) && empty( $_POST['_bbp_converter_convert_users'] ) ) { $insert_post[$row['to_fieldname']] = $forum[$row['from_fieldname']]; } else { $insert_post[$row['to_fieldname']] = call_user_func_array( array( $this, $row[callback_method] ), array( $forum[$row['from_fieldname']]'', $forum ) ); } // Maps the field from the old forum. } else { $insert_post[$row['to_fieldname']] = $forum[$row['from_fieldname']]; } // Destination field is not empty, so we might need // to do some extra work or set a default. } elseif ( !empty( $row['to_fieldname'] ) ) { // Allows us to set default fields. if ( isset( $row['default'] ) ) { $insert_postmeta[$row['to_fieldname']] = $row['default']; // Translates a field from the old forum. } elseif ( isset( $row['callback_method'] ) ) { if ( ( $row['callback_method'] == 'callback_userid' ) && ( 0 == $_POST['_bbp_converter_convert_users'] ) ) { $insert_postmeta[$row['to_fieldname']] = $forum[$row['from_fieldname']]; } else { $insert_postmeta[$row['to_fieldname']] = call_user_func_array( array( $this, $row[callback_method] ), array( $forum[$row['from_fieldname']]'', $forum ) ); } // Maps the field from the old forum. } else { $insert_postmeta[$row['to_fieldname']] = $forum[$row['from_fieldname']]; } } } } /** Step 3 ************************************************/ // Something to insert into the destination field if ( count( $insert_post ) > 0 || ( $to_type == 'tags' && count( $insert_postmeta ) > 0 ) ) { switch ( $to_type ) { /** New user **************************************/ case 'user': if ( username_exists( $insert_post['user_login'] ) ) { $insert_post['user_login'] = 'imported_' . $insert_post['user_login']; } if ( email_exists( $insert_post['user_email'] ) ) { $insert_post['user_email'] = 'imported_' . $insert_post['user_email']; } $post_id = wp_insert_user( $insert_post ); if ( is_numeric( $post_id ) ) { foreach ( $insert_postmeta as $key => $value ) { add_user_meta( $post_id, $key, $value, true ); if ( '_id' == substr( $key, -3 ) && ( true === $this->sync_table ) ) { $this->wpdb->insert( $this->sync_table_name, array( 'value_type' => 'user', 'value_id' => $post_id, 'meta_key' => $key, 'meta_value' => $value ) ); } } } break; /** New Topic-Tag *********************************/ case 'tags': $post_id = wp_set_object_terms( $insert_postmeta['objectid'], $insert_postmeta['name'], 'topic-tag', true ); $term = get_term_by( 'name', $insert_postmeta['name'], 'topic-tag'); if ( false !== $term ) { wp_update_term( $term->term_id, 'topic-tag', array( 'description' => $insert_postmeta[description']', slug => $insert_postmeta[slug'] ) )'; } break; /** Forum, Topic, Reply ***************************/ default: $post_id = wp_insert_post( $insert_post ); if ( is_numeric( $post_id ) ) { foreach ( $insert_postmeta as $key => $value ) { add_post_meta( $post_id, $key, $value, true ); // Forums need to save their old ID for group forum association if ( ( 'forum' == $to_type ) && ( '_bbp_forum_id' == $key ) ) add_post_meta( $post_id, '_bbp_old_forum_id', $value ); // Topics need an extra bit of metadata // to be keyed to the new post_id if ( ( 'topic' == $to_type ) && ( '_bbp_topic_id' == $key ) ) { // Update the live topic ID update_post_meta( $post_id, $key, $post_id ); // Save the old topic ID add_post_meta( $post_id, '_bbp_old_topic_id', $value ); if ( '_id' == substr( $key, -3 ) && ( true === $this->sync_table ) ) { $this->wpdb->insert( $this->sync_table_name, array( 'value_type' => 'post', 'value_id' => $post_id, 'meta_key' => '_bbp_topic_id', 'meta_value' => $post_id ) ); $this->wpdb->insert( $this->sync_table_name, array( 'value_type' => 'post', 'value_id' => $post_id, 'meta_key' => '_bbp_old_topic_id', 'meta_value' => $value ) ); } } elseif ( '_id' == substr( $key, -3 ) && ( true === $this->sync_table ) ) { $this->wpdb->insert( $this->sync_table_name, array( 'value_type' => 'post', 'value_id' => $post_id, 'meta_key' => $key, 'meta_value' => $value ) ); } // Replies need to save their old reply_to ID for hierarchical replies association if ( ( 'reply' == $to_type ) && ( '_bbp_reply_to' == $key ) ) { add_post_meta( $post_id, '_bbp_old_reply_to', $value ); } } } break; } $has_insert = true; } } } } return ! $has_insert; } /** * This method converts old forum heirarchy to new bbPress heirarchy. */ public function convert_forum_parents( $start ) { $has_update = false; if ( !empty( $this->sync_table ) ) { $query = 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_forum_parent_id" AND meta_value > 0 LIMIT ' . $start . ', ' . $this->max_rows; } else { $query = 'SELECT post_id AS value_id, meta_value FROM ' . $this->wpdb->postmeta . ' WHERE meta_key = "_bbp_forum_parent_id" AND meta_value > 0 LIMIT ' . $start . ', ' . $this->max_rows; } update_option( '_bbp_converter_query', $query ); $forum_array = $this->wpdb->get_results( $query ); foreach ( (array) $forum_array as $row ) { $parent_id = $this->callback_forumid( $row->meta_value ); $this->wpdb->query( 'UPDATE ' . $this->wpdb->posts . ' SET post_parent = "' . $parent_id . '" WHERE ID = "' . $row->value_id . '" LIMIT 1' ); $has_update = true; } return ! $has_update; } /** * This method converts old topic stickies to new bbPress stickies. * * @since bbPress (r) * * @uses WPDB $wpdb * @uses bbp_stick_topic() to set the imported topic as sticky * */ public function convert_topic_stickies( $start ) { $has_update = false; if ( !empty( $this->sync_table ) ) { $query = 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_old_sticky_status" AND meta_value = "sticky" LIMIT ' . $start . ', ' . $this->max_rows; } else { $query = 'SELECT post_id AS value_id, meta_value FROM ' . $this->wpdb->postmeta . ' WHERE meta_key = "_bbp_old_sticky_status" AND meta_value = "sticky" LIMIT ' . $start . ', ' . $this->max_rows; } update_option( '_bbp_converter_query', $query ); $sticky_array = $this->wpdb->get_results( $query ); foreach ( (array) $sticky_array as $row ) { bbp_stick_topic( $row->value_id ); $has_update = true; } return ! $has_update; } /** * This method converts old topic super stickies to new bbPress super stickies. * * @since bbPress (r) * * @uses WPDB $wpdb * @uses bbp_stick_topic() to set the imported topic as super sticky * */ public function convert_topic_super_stickies( $start ) { $has_update = false; if ( !empty( $this->sync_table ) ) { $query = 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_old_sticky_status" AND meta_value = "super-sticky" LIMIT ' . $start . ', ' . $this->max_rows; } else { $query = 'SELECT post_id AS value_id, meta_value FROM ' . $this->wpdb->postmeta . ' WHERE meta_key = "_bbp_old_sticky_status" AND meta_value = "super-sticky" LIMIT ' . $start . ', ' . $this->max_rows; } update_option( '_bbp_converter_query', $query ); $sticky_array = $this->wpdb->get_results( $query ); foreach ( (array) $sticky_array as $row ) { $super = true; bbp_stick_topic( $row->value_id, $super ); $has_update = true; } return ! $has_update; } /** * This method converts old reply_to post id to new bbPress reply_to post id. */ public function convert_reply_to_parents( $start ) { $has_update = false; if ( !empty( $this->sync_table ) ) { $query = 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_old_reply_to" AND meta_value > 0 LIMIT ' . $start . ', ' . $this->max_rows; } else { $query = 'SELECT post_id AS value_id, meta_value FROM ' . $this->wpdb->postmeta . ' WHERE meta_key = "_bbp_old_reply_to" AND meta_value > 0 LIMIT ' . $start . ', ' . $this->max_rows; } update_option( '_bbp_converter_query', $query ); $reply_to_array = $this->wpdb->get_results( $query ); foreach ( (array) $reply_to_array as $row ) { $reply_to = $this->callback_reply_to( $row->meta_value ); $this->wpdb->query( 'UPDATE ' . $this->wpdb->postmeta . ' SET meta_value = "' . $reply_to . '" WHERE meta_key = "_bbp_reply_to" AND post_id = "' . $row->value_id . '" LIMIT 1' ); $has_update = true; } return ! $has_update; } /** * This method deletes data from the wp database. */ public function clean( $start ) { $start = 0; $has_delete = false; /** Delete bbconverter topics/forums/posts ****************************/ if ( true === $this->sync_table ) { $query = 'SELECT value_id FROM ' . $this->sync_table_name . ' INNER JOIN ' . $this->wpdb->posts . ' ON(value_id = ID) WHERE meta_key LIKE "_bbp_%" AND value_type = "post" GROUP BY value_id ORDER BY value_id DESC LIMIT ' . $this->max_rows; } else { $query = 'SELECT post_id AS value_id FROM ' . $this->wpdb->postmeta . ' WHERE meta_key LIKE "_bbp_%" GROUP BY post_id ORDER BY post_id DESC LIMIT ' . $this->max_rows; } update_option( '_bbp_converter_query', $query ); $posts = $this->wpdb->get_results( $query, ARRAY_A ); if ( isset( $posts[0] ) && ! empty( $posts[0]['value_id'] ) ) { foreach ( (array) $posts as $value ) { wp_delete_post( $value['value_id'], true ); } $has_delete = true; } /** Delete bbconverter users ******************************************/ if ( true === $this->sync_table ) { $query = 'SELECT value_id FROM ' . $this->sync_table_name . ' INNER JOIN ' . $this->wpdb->users . ' ON(value_id = ID) WHERE meta_key = "_bbp_user_id" AND value_type = "user" LIMIT ' . $this->max_rows; } else { $query = 'SELECT user_id AS value_id FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_user_id" LIMIT ' . $this->max_rows; } update_option( '_bbp_converter_query', $query ); $users = $this->wpdb->get_results( $query, ARRAY_A ); if ( !empty( $users ) ) { foreach ( $users as $value ) { wp_delete_user( $value['value_id'] ); } $has_delete = true; } unset( $posts ); unset( $users ); return ! $has_delete; } /** * This method deletes passwords from the wp database. * * @param int Start row */ public function clean_passwords( $start ) { $has_delete = false; /** Delete bbconverter passwords **************************************/ $query = 'SELECT user_id, meta_value FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" LIMIT ' . $start . ', ' . $this->max_rows; update_option( '_bbp_converter_query', $query ); $bbconverter = $this->wpdb->get_results( $query, ARRAY_A ); if ( !empty( $bbconverter ) ) { foreach ( $bbconverter as $value ) { if ( is_serialized( $value['meta_value'] ) ) { $this->wpdb->query( 'UPDATE ' . $this->wpdb->users . ' ' . 'SET user_pass = "" ' . 'WHERE ID = "' . $value['user_id'] . '"' ); } else { $this->wpdb->query( 'UPDATE ' . $this->wpdb->users . ' ' . 'SET user_pass = "' . $value['meta_value'] . '" ' . 'WHERE ID = "' . $value['user_id'] . '"' ); $this->wpdb->query( 'DELETE FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" AND user_id = "' . $value['user_id'] . '"' ); } } $has_delete = true; } return ! $has_delete; } /** * This method implements the authentication for the different forums. * * @param string Unencoded password. */ abstract protected function authenticate_pass( $password, $hash ); /** * Info */ abstract protected function info(); /** * This method grabs appropriate fields from the table specified * * @param string The table name to grab fields from */ private function get_fields( $tablename ) { $rval = array(); $field_array = $this->wpdb->get_results( 'DESCRIBE ' . $tablename, ARRAY_A ); foreach ( $field_array as $field ) { $rval[] = $field['Field']; } if ( $tablename == $this->wpdb->users ) { $rval[] = 'role'; $rval[] = 'yim'; $rval[] = 'aim'; $rval[] = 'jabber'; } return $rval; } /** Callbacks *************************************************************/ /** * Run password through wp_hash_password() * * @param string $username * @param string $password */ public function callback_pass( $username, $password ) { $user = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT * FROM ' . $this->wpdb->users . ' WHERE user_login = "%s" AND user_pass = "" LIMIT 1', $username ) ); if ( !empty( $user ) ) { $usermeta = $this->wpdb->get_row( 'SELECT * FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" AND user_id = "' . $user->ID . '" LIMIT 1' ); if ( !empty( $usermeta ) ) { if ( $this->authenticate_pass( $password, $usermeta->meta_value ) ) { $this->wpdb->query( 'UPDATE ' . $this->wpdb->users . ' ' . 'SET user_pass = "' . wp_hash_password( $password ) . '" ' . 'WHERE ID = "' . $user->ID . '"' ); $this->wpdb->query( 'DELETE FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_password" AND user_id = "' . $user->ID . '"' ); } } } } /** * A mini cache system to reduce database calls to forum ID's * * @param string $field * @return string */ private function callback_forumid( $field ) { if ( !isset( $this->map_forumid[$field] ) ) { if ( !empty( $this->sync_table ) ) { $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_forum_id" AND meta_value = "%s" LIMIT 1', $field ) ); } else { $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT post_id AS value_id FROM ' . $this->wpdb->postmeta . ' WHERE meta_key = "_bbp_forum_id" AND meta_value = "%s" LIMIT 1', $field ) ); } if ( !is_null( $row ) ) { $this->map_forumid[$field] = $row->value_id; } else { $this->map_forumid[$field] = 0; } } return $this->map_forumid[$field]; } /** * A mini cache system to reduce database calls to topic ID's * * @param string $field * @return string */ private function callback_topicid( $field ) { if ( !isset( $this->map_topicid[$field] ) ) { if ( !empty( $this->sync_table ) ) { $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_old_topic_id" AND meta_value = "%s" LIMIT 1', $field ) ); } else { $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT post_id AS value_id FROM ' . $this->wpdb->postmeta . ' WHERE meta_key = "_bbp_old_topic_id" AND meta_value = "%s" LIMIT 1', $field ) ); } if ( !is_null( $row ) ) { $this->map_topicid[$field] = $row->value_id; } else { $this->map_topicid[$field] = 0; } } return $this->map_topicid[$field]; } /** * A mini cache system to reduce database calls to reply_to post id. * * @param string $field * @return string */ private function callback_reply_to( $field ) { if ( !isset( $this->map_reply_to[$field] ) ) { if ( !empty( $this->sync_table ) ) { $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_post_id" AND meta_value = "%s" LIMIT 1', $field ) ); } else { $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT post_id AS value_id FROM ' . $this->wpdb->postmeta . ' WHERE meta_key = "_bbp_post_id" AND meta_value = "%s" LIMIT 1', $field ) ); } if ( !is_null( $row ) ) { $this->map_reply_to[$field] = $row->value_id; } else { $this->map_reply_to[$field] = 0; } } return $this->map_reply_to[$field]; } /** * A mini cache system to reduce database calls to user ID's * * @param string $field * @return string */ private function callback_userid( $field ) { if ( !isset( $this->map_userid[$field] ) ) { if ( !empty( $this->sync_table ) ) { $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT value_id, meta_value FROM ' . $this->sync_table_name . ' WHERE meta_key = "_bbp_user_id" AND meta_value = "%s" LIMIT 1', $field ) ); } else { $row = $this->wpdb->get_row( $this->wpdb->prepare( 'SELECT user_id AS value_id FROM ' . $this->wpdb->usermeta . ' WHERE meta_key = "_bbp_user_id" AND meta_value = "%s" LIMIT 1', $field ) ); } if ( !is_null( $row ) ) { $this->map_userid[$field] = $row->value_id; } else { if ( !empty( $_POST['_bbp_converter_convert_users'] ) && ( $_POST['_bbp_converter_convert_users'] == 1 ) ) { $this->map_userid[$field] = 0; } else { $this->map_userid[$field] = $field; } } } return $this->map_userid[$field]; } /** * A mini cache system to reduce database calls map topics ID's to forum ID's * * @param string $field * @return string */ private function callback_topicid_to_forumid( $field ) { $topicid = $this->callback_topicid( $field ); if ( empty( $topicid ) ) { $this->map_topicid_to_forumid[$topicid] = 0; } elseif ( ! isset( $this->map_topicid_to_forumid[$topicid] ) ) { $row = $this->wpdb->get_row( 'SELECT post_parent FROM ' . $this->wpdb->posts . ' WHERE ID = "' . $topicid . '" LIMIT 1' ); if ( !is_null( $row ) ) { $this->map_topicid_to_forumid[$topicid] = $row->post_parent; } else { $this->map_topicid_to_forumid[$topicid] = 0; } } return $this->map_topicid_to_forumid[$topicid]; } protected function callback_slug( $field ) { return sanitize_title( $field ); } protected function callback_negative( $field ) { if ( $field < 0 ) { return 0; } else { return $field; } } protected function callback_html( $field ) { require_once( bbpress()->admin->admin_dir . 'parser.php' ); $bbcode = BBCode::getInstance(); return html_entity_decode( $bbcode->Parse( $field ) ); } protected function callback_null( $field ) { if ( is_null( $field ) ) { return ''; } else { return $field; } } protected function callback_datetime( $field ) { if ( is_numeric( $field ) ) { return date( 'Y-m-d H:i:s', $field ); } else { return date( 'Y-m-d H:i:s', strtotime( $field ) ); } } } /** * This is a function that is purposely written to look like a "new" statement. * It is basically a dynamic loader that will load in the platform conversion * of your choice. * * @param string $platform Name of valid platform class. */ function bbp_new_converter( $platform ) { $found = false; if ( $curdir = opendir( bbpress()->admin->admin_dir . 'converters/' ) ) { while ( $file = readdir( $curdir ) ) { if ( stristr( $file, '.php' ) && stristr( $file, 'index' ) === FALSE ) { $file = preg_replace( '/.php/', '', $file ); if ( $platform == $file ) { $found = true; continue; } } } closedir( $curdir ); } if ( true === $found ) { require_once( bbpress()->admin->admin_dir . 'converters/' . $platform . '.php' ); return new $platform; } else { return null; } }January 20, 2019 at 1:27 pm #197894Topic: Display order of forums
in forum TroubleshootingMike Witt
ParticipantHi all,
I’m looking for advice on how to control the order in which forums are displayed. Specifically, I want to be able to “pin” site forums at the top and have user created forums displayed lower down. I may have missed something obvious, but the only way I see to control this is with the “order” parameter (which can be set by hand) under “Forums” in the WP Dashboard.
It appears that the order parameter is set to 0 by default. Is there a way to override this, so that I can make user-created forums (or all new forums) default to some higher number?
Thanks!
January 16, 2019 at 1:54 pm #197803Topic: Update forum role through php/programming
in forum Troubleshootingsaudor
ParticipantHello, I am trying to cut down on spam and defaulting all new users to spectator/subscriber mode and use certain “tasks” such as using the site to automatically change their role to participant/member.
I found this link but all it does is just make the forum role blank:
Can someone point me in the right direction? Thanks!
BBpress Version 3.2. Updated to 4.1 but still same issue
January 16, 2019 at 9:15 am #197795Topic: Missing texts in dashboard statistics
in forum TroubleshootingOlivier
ParticipantHi !
Some texts are missing on the dashboard Widget : any idea ?
I tried with only bbpress plugin enabled and the default WP theme, same problem.It was working when I installed bbpress the first time.
I already tried the tools provided to repair bbpress.Thanks 🙂
January 15, 2019 at 6:00 pm #197781In reply to: Cannot create new topic on front
Robin W
ModeratorIt could be a theme or plugin issue
Themes
As a test switch to a default theme such as twentyfifteen, and see if this fixes.
Plugins
If that deosnlt work, also deactivate all but bbpress and see if this fixes. if it does, re-enable one at a time to see which is causing the error.
Then come back
January 14, 2019 at 10:30 pm #197754Topic: First name and last initial
in forum Troubleshootingshemakeswebsites
ParticipantHello everyone. I’m using the following snippet that will display the first name and last initial for users in buddypress. However, in bbpress it has no effect. Any ideas on how I could edit this to get it to work for bbpress? I’m so sad that something like this isn’t a default option.
$changeLastInitial = new changeLastInitial; add_filter('bp_displayed_user_fullname', array( $changeLastInitial, 'last_initial' ), 7, 1); add_filter('bp_get_member_name', array( $changeLastInitial, 'last_initial' ), 7, 1); add_filter('bp_get_the_profile_field_value', array( $changeLastInitial, 'last_initial_xprofle' ), 7, 3); add_filter('bp_core_get_user_displayname', array( $changeLastInitial, 'bp_core_get_user_displayname' ), 7, 2); class changeLastInitial { function bp_core_get_user_displayname($name, $id) { $name = $this->last_initial($name); return $name; } function last_initial_xprofle($value, $type, $id) { if ($id == 1) { $value = $this->last_initial($value); } return $value; } function last_initial($name) { $name_a = explode(' ', $name); // if there is at least two parts to the name if (count($name_a) == 2) { // replace the last part of the name with the first letter of the last part $name_a[count($name_a) - 1] = substr($name_a[count($name_a) - 1], 0, 1); // put it all back together $name = implode(' ', $name_a)."."; } return $name; } }January 13, 2019 at 2:03 pm #197723Robin W
Moderatorok, let’s try something more basic
this code just replaces the bbp_get_user_favorites_link, but puts the home url as the permalink
function rew_get_user_favorites_link( $args = '', $user_id = 0, $wrap = true ) { if ( ! bbp_is_favorites_active() ) { return false; } // Parse arguments against default values $r = bbp_parse_args( $args, array( 'favorite' => __( 'Favorite', 'bbpress' ), 'favorited' => __( 'Favorited', 'bbpress' ), 'user_id' => 0, 'topic_id' => 0, 'before' => '', 'after' => '' ), 'get_user_favorites_link' ); // Validate user and topic ID's $user_id = bbp_get_user_id( $r['user_id'], true, true ); $topic_id = bbp_get_topic_id( $r['topic_id'] ); if ( empty( $user_id ) || empty( $topic_id ) ) { return false; } // No link if you can't edit yourself if ( ! current_user_can( 'edit_user', (int) $user_id ) ) { return false; } // Decide which link to show $is_fav = bbp_is_user_favorite( $user_id, $topic_id ); if ( ! empty( $is_fav ) ) { $text = $r['favorited']; $query_args = array( 'action' => 'bbp_favorite_remove', 'topic_id' => $topic_id ); } else { $text = $r['favorite']; $query_args = array( 'action' => 'bbp_favorite_add', 'topic_id' => $topic_id ); } $permalink = home_url() ; $url = esc_url( wp_nonce_url( add_query_arg( $query_args, $permalink ), 'toggle-favorite_' . $topic_id ) ); $sub = $is_fav ? ' class="is-favorite"' : ''; $html = sprintf( '%s<span id="favorite-%d" %s><a href="%s" class="favorite-toggle" data-topic="%d">%s</a></span>%s', $r['before'], $topic_id, $sub, $url, $topic_id, $text, $r['after'] ); // Initial output is wrapped in a span, ajax output is hooked to this if ( ! empty( $wrap ) ) { $html = '<span id="favorite-toggle">' . $html . '</span>'; } // Return the link return apply_filters( 'rew_get_user_favorites_link', $html, $r, $user_id, $topic_id ); }so remove my previous suggestion, and add the above function
Then where you have
bbp_user_favorites_link($fav_args);in your codereplace with
echo rew_get_user_favorites_link($fav_args);January 11, 2019 at 1:19 pm #197673In reply to: Create new forum error
Robin W
ModeratorIt could be a theme or plugin issue
Themes
As a test switch to a default theme such as twentyfifteen, and see if this fixes.
Plugins
If that deosnlt work, also deactivate all but bbpress and see if this fixes. if it does, re-enable one at a time to see which is causing the error.
Then come back
January 6, 2019 at 9:07 am #197533Topic: Subforum or topic not showing
in forum Troubleshootinggamersk
ParticipantHello,
I have problem. I have on website bbPress with demo data but when i chose some forum or some subpage it’s blank. https://gamenice.sk/forum/
functions.php
<?php show_admin_bar(false); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); function theme_enqueue_scripts() { $template_directory_uri = get_template_directory_uri(); wp_enqueue_style( 'reset', $template_directory_uri . '/assets/css/reset.min.css', false, '1.0' ); wp_enqueue_style( 'app', $template_directory_uri . '/assets/css/app.min.css?v=' . time(), array( 'reset' ), '1.0' ); wp_enqueue_style( 'forum', $template_directory_uri . '/assets/css/forum.min.css?v=' . time(), array( 'app' ), '1.0' ); wp_enqueue_script( 'html5shiv', $template_directory_uri . '/assets/js/html5shiv.min.js' ); wp_script_add_data( 'html5shiv', 'conditional', 'lt IE 9' ); wp_enqueue_script( 'selectivizr', $template_directory_uri . '/assets/js/selectivizr.min.js' ); wp_script_add_data( 'selectivizr', 'conditional', 'lt IE 9' ); wp_enqueue_script( 'jquery', $template_directory_uri . '/assets/js/jquery.min.js', false, '3.3.1' ); wp_enqueue_script( 'app', $template_directory_uri . '/assets/js/app.js', array( 'jquery' ), '1.0' ); wp_localize_script( 'app', 'carouselSettings', array( 'timeout' => get_option('carousel_timeout').'000' ) ); } add_action( 'wp_enqueue_scripts', 'theme_enqueue_scripts' ); function get_excerpt($where = ''){ $excerpt = get_the_content(); $excerpt = strip_shortcodes($excerpt); $excerpt = strip_tags($excerpt); switch ($where) { case 'carousel': if ( wp_is_mobile() ) $excerpt = substr($excerpt, 0, 120); else $excerpt = substr($excerpt, 0, 250); break; case 'head': $excerpt = substr($excerpt, 0, 200); break; default: if ( wp_is_mobile() ) $excerpt = substr($excerpt, 0, 300); else $excerpt = substr($excerpt, 0, 725); break; } $excerpt = substr($excerpt, 0, strripos($excerpt, " ")); $excerpt = $excerpt.'...'; return $excerpt; } function get_thumbnail_url() { $thumbnail = get_the_post_thumbnail_url() != '' ? get_the_post_thumbnail_url() : get_template_directory_uri() . '/assets/img/og-image.png'; return $thumbnail; } function themename_custom_logo_setup() { $defaults = array( 'height' => 111, 'width' => 220, 'flex-height' => true, 'flex-width' => true, ); add_theme_support( 'custom-logo', $defaults ); } add_action( 'after_setup_theme', 'themename_custom_logo_setup' ); add_theme_support( 'post-thumbnails' ); function register_my_menus() { register_nav_menus( array( 'header-menu' => __( 'Header Menu' ), 'footer-menu' => __( 'Footer Menu' ) ) ); } add_action( 'init', 'register_my_menus' ); function show_menu($menu_name) { $defaults = array( 'theme_location' => '', 'menu' => $menu_name, 'container' => '', 'container_class' => '', 'container_id' => '', 'menu_class' => $menu_name, 'menu_id' => '', 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'items_wrap' => '<ul class="inline-list %2$s">%3$s</ul>', 'depth' => 0, 'walker' => '' ); wp_nav_menu($defaults); } include 'inc/theme-settings.php';forum.php
<?php include 'header.php'; ?> <section class="forum-wrapper"> <div class="container"> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php the_content(); ?> <?php endwhile; endif; ?> </div> </section> <?php include 'footer.php'; ?>January 4, 2019 at 4:18 pm #197495In reply to: Bbpress should support schema
odevbul
Participantbbpress/templates/default/bbpress/pagination-replies.php line:15
div class="bbp-pagination" temprop="interactionStatistic" itemscope itemtype="http://schema.org/InteractionCounter"> <link itemprop="interactionType" href="http://schema.org/CommentAction" /> <div class="bbp-pagination-count" itemprop="userInteractionCount">bbpress/templates/default/bbpress/loop-single-reply.php line:42
<span itemprop="author" itemscope itemtype="http://schema.org/Person"> <span itemprop="name"><?php do_action( 'bbp_theme_before_reply_author_details' ); ?>your template page.php edit
<article itemid="<?php the_permalink(); ?>" itemscope itemtype="http://schema.org/DiscussionForumPosting" id="post-<?php the_ID(); ?>" <?php post_class( 'clearfix' ); ?>> <h1 class="post-title" itemprop="headline"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>December 29, 2018 at 11:57 am #197397Robin W
Moderatorok, I think you will need to do some more testing
so it could be a theme or plugin issue
Plugins
Deactivate all but bbpress and see if this fixes. if it does, re-enable one at a time to see which is causing the error.
Themes
If plugins don’t pinpoint the problem, as a test switch to a default theme such as twentyfifteen, and see if this fixes.
Then come back
December 28, 2018 at 7:44 am #197379In reply to: Email notifications font
simjohna
ParticipantAs far as I know, the default fonts in OWA can be manually configured:
All options>settings>mail>message format>choose message font.
And we can choose various fonts as we like.
Thank YouDecember 20, 2018 at 9:49 am #197106In reply to: Trackbacks
cdwed
ParticipantI dont get it. I copied your code exactly as below. Is there an AND symbol getting in there in the copy function?
// Force ping_status on bbPress post types
add_filter( ‘pings_open’, ‘rew_force_ping_status’ );function rew_force_ping_status( $open, $post_id = 0 ) {
// Get the post type of the post ID
$post_type = get_post_type( $post_id );
// Default return value is what is passed in $open
$retval = $open;
// Only force for bbPress post types
switch ( $post_type ) {
case bbp_get_forum_post_type() :
case bbp_get_topic_post_type() :
case bbp_get_reply_post_type() :
$retval = false;
break;
// Allow override of the override
return apply_filters( ‘rew_force_ping_status’, $retval, $open, $post_id, $post_type );
}December 20, 2018 at 8:05 am #197103In reply to: Trackbacks
cdwed
ParticipantI put in the code and got a syntax error. I loaded it in just as you wrote it. So it will not run.
Can you check on this please?
Here is what you posted:// Force ping_status on bbPress post types add_filter( 'pings_open', 'rew_force_ping_status' ); function rew_force_ping_status( $open, $post_id = 0 ) { <strong>// Get the post type of the post ID $post_type = get_post_type( $post_id ); // Default return value is what is passed in $open $retval = $open; // Only force for bbPress post types switch ( $post_type ) { case bbp_get_forum_post_type() : case bbp_get_topic_post_type() : case bbp_get_reply_post_type() : $retval = false; break; // Allow override of the override return apply_filters( 'rew_force_ping_status', $retval, $open, $post_id, $post_type ); } </strong>December 19, 2018 at 1:00 pm #197060In reply to: Empty DIV on profile page
Robin W
ModeratorI cannot replicate that on my test site, and from its positioning I suspect it is theme related rather than bbpress as it seems to be within after an <article> div that bbpress doesn’t use, and I cannot find ‘comments-area’ anywhere in the bbpress plugin.
If you want to prove that, switch to a default theme and check that it disappears.
December 13, 2018 at 2:14 pm #196895Topic: Responsive design on mobile (quoted replies)
in forum Troubleshootingseanrowe
ParticipantSo I work as a web developer using wordpress, however I do not use bbPress on any of my sites currently. However I am a member of a forum that I really enjoy, however it severely lacks some elements of responsive design for mobile phones. I cannot say for sure it’s something directly related to bbPress, however being that bbPress is such a large platform I have to assume there is a solution.
The problem:
The problem is related to multiple quotes inside of a post. When a person quotes a reply that was also quoting a previous reply we get multple “quote” section before the new content. The result on a mobile phone is that the quotes get squished into single character per line so it looks
l
i
k
et
h
i
sIs there a solution to making the previous quotes either hidden in a spoiler tag by default or simply show only the 1 quote per post on mobile?
Here is a screenshot of what I’m talking about: https://drive.google.com/open?id=1DbJjmuCinBhP1yhprZXcNC_ZMz4gj-cT
P.S. I am not a developer on this website, but I thought I’d present a solution to the owner to help him out 🙂
P.P.S. I noticed he uses elementor as well, so not sure if that has any relation.
December 11, 2018 at 1:13 pm #196829In reply to: overwrite form-user-register.php message
Robin W
Moderatorcreate a directory on your theme called ‘bbpress’
ie wp-content/themes/%your-theme-name%/bbpresswhere %your-theme-name% is the name of your theme
find
wp-content/plugins/bbpress/templates/default/bbpress/form-user-register.php
Make a copy of this file, and put in in the directory called bbpress that you created above, so you end up with
wp-content/themes/%your-theme-name%/bbpress/form-user-register.php
bbPress will now use this template instead of the original
and you can amend this file.December 10, 2018 at 5:40 pm #196764In reply to: phpBB import (again)
Gregg
ParticipantResolved!
Grab a cup of coffee and a seat and I’ll tell you the story of how you might be able fix this. It may take several hours so be prepared…
Situation I was in:
Older version of phpBB 3.1v and wanting to port all topics, replies, and users to bbPress (latest version at the time). A handful of issues existed that were causing more trouble than they were worth. Host of the old site is GoDaddy. The new site is on WP Engine.Forum Stats (approx)
Users: 2200
Topics: 7800
Replies: 22500Outcome:
Successfully ported all topics, replies, and users to bbPress.Updated phpBB
REMOVE ALL MODS, STYLES, anything that’s not a part of the out-of-the-box install. Then follow the upgrade instructions. Make backups (I kept a copy of the existing site on my local machine and duplicate database on the host). I found these instructions most helpful: https://www.phpbb.com/support/docs/en/3.2/ug/upgradeguide/upgrade31/The Issues
There were two issues I ran into (in different flavors but it turns out they just stemmed from these two). 1st – utf8 formatting and 2nd missing fields. These issues are with the import and NOT the upgrade for phpBB. I was able to resolve those issues by making sure I followed the instructions on that link to the letter.The first error (I don’t remember the exact error string but it was either utf8mb4 or just utf8 but it simply means the database holds the data in an older format. The solution is to export the date from the database then create a new database and restore the data into it. By creating the new database the fields will use the proper format and when the restoration is complete this issue should be resolved.
The second error was a little more mysterious – as in I’m not sure why it happened but essentially the import routine is looking for fields that don’t exist in the phpBB install even after I successfully updated it. The solution was to create the fields needed. How?
How to create the fields to get rid of the missing field errors
Note I created a copy of the functioning database on my phpBB install so I could screw it up and not hurt the functioning website. So here’s an example.The error I got basically said the script couldn’t find “users.user_from” in the database I was trying to import from. That’s not an exact quote but the gist. So I edited the copy of my database and added the missing field (user_from) to the table it was looking for it in (users) using datatype VARCHAR and length of 255 (all else was left to default). I had to do this about a dozen times between the users, topics, and forums tables.
I should note I imported all of my users as well. I had to try this whole process several times. I’ve spent 40+ hours trying to figure this all out (I’m not that familiar with phpBB or bbPress) but the actual process once I figured out the issues – took about 6 hours – mostly waiting for the script to process the data. If your import bombs – read the error and look carefully at what it’s looking for or doesn’t like. Most likely it’s looking for something that’s not there.
I was worried that the connections between topics and replies and users would somehow be messed up. But in the end, it looks like it all came out fine. I’m pretty sure I’ll find something amiss – that’s my cynical side but maybe I’ll be pleasantly surprised.
Good luck!
December 8, 2018 at 1:53 pm #196722In reply to: Trackbacks
Robin W
ModeratorI just looked in trac, and fixing this is now a 2.8 goal.
However this looks like it might help
// Force ping_status on bbPress post types add_filter( 'pings_open', 'rew_force_ping_status' ); function rew_force_ping_status( $open, $post_id = 0 ) { // Get the post type of the post ID $post_type = get_post_type( $post_id ); // Default return value is what is passed in $open $retval = $open; // Only force for bbPress post types switch ( $post_type ) { case bbp_get_forum_post_type() : case bbp_get_topic_post_type() : case bbp_get_reply_post_type() : $retval = false; break; // Allow override of the override return apply_filters( 'rew_force_ping_status', $retval, $open, $post_id, $post_type ); }December 2, 2018 at 5:45 am #196598In reply to: How do I add space between two replies?
Robin W
Moderatorok, take the change above out.
Then find
wp-content/plugins/bbpress/templates/default/bbpress/loop-single-reply.php
Make a copy of this file to your pcThe edit this file to be this
<?php /** * Replies Loop - Single Reply * * @package bbPress * @subpackage Theme */ ?> <div class='rew-border'> <div id="post-<?php bbp_reply_id(); ?>" class="bbp-reply-header"> <div class="bbp-meta"> <span class="bbp-reply-post-date"><?php bbp_reply_post_date(); ?></span> <?php if ( bbp_is_single_user_replies() ) : ?> <span class="bbp-header"> <?php _e( 'in reply to: ', 'bbpress' ); ?> <a class="bbp-topic-permalink" href="<?php bbp_topic_permalink( bbp_get_reply_topic_id() ); ?>"><?php bbp_topic_title( bbp_get_reply_topic_id() ); ?></a> </span> <?php endif; ?> <a href="<?php bbp_reply_url(); ?>" class="bbp-reply-permalink">#<?php bbp_reply_id(); ?></a> <?php do_action( 'bbp_theme_before_reply_admin_links' ); ?> <?php bbp_reply_admin_links(); ?> <?php do_action( 'bbp_theme_after_reply_admin_links' ); ?> </div><!-- .bbp-meta --> </div><!-- #post-<?php bbp_reply_id(); ?> --> <div <?php bbp_reply_class(); ?>> <div class="bbp-reply-author"> <?php do_action( 'bbp_theme_before_reply_author_details' ); ?> <?php bbp_reply_author_link( array( 'sep' => '<br />', 'show_role' => true ) ); ?> <?php if ( bbp_is_user_keymaster() ) : ?> <?php do_action( 'bbp_theme_before_reply_author_admin_details' ); ?> <div class="bbp-reply-ip"><?php bbp_author_ip( bbp_get_reply_id() ); ?></div> <?php do_action( 'bbp_theme_after_reply_author_admin_details' ); ?> <?php endif; ?> <?php do_action( 'bbp_theme_after_reply_author_details' ); ?> </div><!-- .bbp-reply-author --> <div class="bbp-reply-content"> <?php do_action( 'bbp_theme_before_reply_content' ); ?> <?php bbp_reply_content(); ?> <?php do_action( 'bbp_theme_after_reply_content' ); ?> </div><!-- .bbp-reply-content --> </div><!-- .reply --> </div> <div class='rew-spacer'><p/> </div>Then put this in the directory called bbpress that you created above, so you end up with
wp-content/themes/%your-theme-name%/bbpress/loop-single-reply.phpFinally in your theme’s custom css area put
#bbpress-forums ul.bbp-replies { border : none ; } .rew-border { border: 1px solid #eee; } -
AuthorSearch Results