Skip to:
Content
Pages
Categories
Search
Top
Bottom

Search Results for 'updated'

Viewing 25 results - 301 through 325 (of 2,086 total)
  • Author
    Search Results
  • #202665
    dwcouch
    Participant

    Further, the Forum list no topics but has the following message at the top:

    This forum contains 3 topics, and was last updated by No Topics.

    ginaginagina
    Participant

    Unfortunately, my staging site doesn’t allow me to switch themes for some reason. I tried in the past on an earlier bbPress support post I put here. 🙁 I also tried deactivating all the plugins, but it’s still not doing anything.

    I read on bbPress that there is an “Approve” function that should be showing up, so it seems that there is a setting for moderation in the plugin? Just not sure what’s going on since the “Approve” used to show up but it doesn’t anymore. I updated bbPress a while back and hadn’t used it since the update, so I’m unsure when the issue actually started happening.

    #202217
    designserve
    Participant

    Hi All,

    I’ve spent the last 10 hours 36 minutes trying to import a few topics into my forum from CSV. I’ve tried many different techniques and plugins. I am updating this because maybe it will help someone, or you might be able to help me.

    I’m assuming that Stephen’s method worked when he posted it. It appears to me that post_parent does not behave as it used to. I have used Stephen’s files from Github and imported them into my forum. I’ve very carefully followed every nuance of his post, as far as I can tell. Ultimate CSV Importer and WP ALL IMPORT EXPORT (I have the extended pro version) do not expose post_parent in the mapping. However, Ultimate CSV Importer (now known as ‘Import Export Post as CSV File’) does say in the documentation that it will pick up post_parent when importing. Unfortunately I didn’t check in the database before running the repair tools and they always seem to remove the hierarchy when i use them.

    When I import using the fields bbp_forum_id and bbp_topic_id I am able to make some progress in that the Topics show that they are in the correct forum in the backend. But they don’t show up in the frontend.

    See this post for some useful information:

    Bulk-move bbPress topics

    Anyway, when I import Stephen’s files, the Topics and Replies won’t show up for me. post_parent is incremented in the database when importing as far as I can tell. I have read many posts on this and other forums virtually begging for a bbpress csv importer and many of the replies mention post_parent as being central to the issues.

    One example statement says “The standard WordPress Importer only sets a post’s post_parent if that post also exists in the import; it can’t map an imported post to a post that already exists in the database.”

    With that in mind, I went into the database after importing Stephen’s files and I manually updated post_parent for the Topics and Replies. When I do that, the Topics and Replies show up in the frontend as they should. At least I’m understanding what needs to happen for the Topics and Replies to show up on the front end.

    Having edited post_parent in the database (using phpMyadmin) I then ran the forum repair tools. Counts were updated and everything is where it should be.

    I’m now almost at the point of letting sleeping dogs lie. However, I’m going to try an old plugin on my dev site and I’ll post the results of that shortly.

    #201690
    asmedej
    Participant

    Yes, I remember now, that I’ve updated yday that calendar … I’ve contacted them to resolve it. But for now yes I will use your fix and when they fix the plugin i will disable it, but I think i will keep it for the future. And I have to be more careful of updating plugins like that directly.

    thanks anyway

    #201664
    HalbrookTech
    Participant

    Has it been updated recently? Last time I tried it, did an import of users fine, but at least on a large forum, it timed out. Seemed to do some of the work, but needs some form of way to handle large forums.

    Danishsard
    Participant

    Hello, the bbpress plugin is not updated anymore

    Error – when wordpress can be used for the wordpress discussion. Someone will send a new topic with these words – it is automatically redirected to a non-existent page – this is a forum bug.

    The entire wordpress discussion settings should also work bbpress – and not just selected elements – that would increase the functionality of the forum at zero cost.

    When someone writes a new post or subject with moderation after the settings in the wordpress discussion – it should be displayed to him the same as comments but invisible lda others because it is in the browser cache.

    ………

    If you do not do anything with bbpress then you can do a premium help department to make money on it, probably it is the reason that there are no pforits for years abandoning it yourself. You can also enter the ads on bbpres.org, something that would be there too, it is sad that this project is practically forgotten by the creators and not revised.

    earlsn
    Participant

    As the admin, I was able to create a forum, then some topics and one reply. However, once I login under a different user with the role of “participant” or “moderator”, none of the topics display for that forum. I get the following messages on the returned forum screen:

    “This forum contains 4 topics and 1 reply, and was last updated by Earl Sneeringer 2 weeks, 3 days ago.

    Oh bother! No topics were found here!”

    How is it that I see that I have 4 topics and 1 reply but it doesn’t display this or a participant or moderator?

    My WP version is: 5.2.2 and my bbpress version is 2.8.1, my site is howardcountypickleball.org. The forum is under the Members menu item which is restricted to joined members.

    Earl Sneeringer

    #201186
    chengdu-living
    Participant

    I recently updated bbpress on my forum and it somehow changed the time formatting for “Freshness”. Previously it said things like “One week ago”, “One month ago” etc but now it says things like “One week, four days ago” and “One month, one week ago” etc.

    How can I change this back to the simpler format?

    Having the freshness written out in such a long way looks a bit messy. Thanks in advance for any help.

    #201119
    Morphim
    Participant

    Hello.
    I’ve just changed host and one of the WP sites I have included a bbpress forum. Someone else managed the site; I only ever updated the core and plugins and didn’t really pay much attention to it other than to see the main site was still working OK. I think I probably missed something regarding this a few years back.

    However, having moved it, I realise the BBpress forum isn’t working. I’m not sure if it was working on the old site but my hunch is that BBpress has changed.

    The old forum was located at http://mysite/bbpress
    whereas now, I think BBpress is integrated into WP (which is great, by the way)

    I also have a bbpress config file with settings for the DB. I’m thinking this is also redundant too as it seems the bbpress settings are just stored in the regular WP db tables.

    I can see my old forum within the bb_forums, bb_meta, bb_post table of my db but in the admin of WP, under the ‘forums’ menu I see ‘no forums’

    So, my question is, how do I get the info from the bb_ tables to register as an integrated forum in the new bbpress?

    Thanks very much in advance if you can help.

    By the way, the old site is no more as I have already switched hosts.

    #201057
    mestrawberry
    Participant

    WordPress 5.2.1
    Divi theme version
    Running PHP version: 7.1.30
    BBPress version 2.5.14
    GD BBPress Toolbox Pro version 5.5.1 (says its updated, though the latest version is 5.7 I think)

    My theme styling disappears as soon as a user logs in.

    When I disable the Toolbox plugin, the forum styling returns, but the developer said its an issue with BBPress core. The error log reads:

    [03-Jun-2019 17:39:49 UTC] WordPress database error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘79266’)’ at line 2 for query INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES
    (‘465’, ‘wp__bbp_favorites, ‘79266’); made by require_once(‘wp-admin/admin.php’), do_action(‘load-tools_page_bbp-repair’), WP_Hook->do_action, WP_Hook->apply_filters, bbp_admin_repair_handler, bbp_admin_repair_user_favorites
    [04-Jun-2019 02:41:55 UTC] …/components/SupportCenter.php:2512 ET_Support_Center::add_support_center():
    Divi Support Center :: WordPress debug.log is not configured.

    [04-Jun-2019 03:04:34 UTC] …/components/SupportCenter.php:2512 ET_Support_Center::add_support_center():
    Divi Support Center :: WordPress debug.log is not configured.

    Error Found in file PHP_Errorlog – public_html/wp-content/themes/Divi

    [04-Jun-2019 02:51:52 CST6CDT] PHP Fatal error: Uncaught Error: Call to undefined function get_header() in /home/mythicre/public_html/wp-content/themes/Divi/index.php:1
    Stack trace:
    #0 {main}
    thrown in /home/mythicre/public_html/wp-content/themes/Divi/index.php on line 1

    The Toolbox developer submitted a ticket with bbPress: https://bbpress.trac.wordpress.org/ticket/3259

    I tried to make the change in my files that is shown on that changeset, but it didn’t fix the issue. Forum styling is still broken for logged in users.

    Any ideas???

    Michelle

    Platoscave
    Participant

    We noticed that in topic.js, the Subscribe text is supposed to be changed to Unsubscribe after subscribing to a topic, but currently it is not.

    The problem is that the ajax call is wrong, the callback function not being called:

    $.post( bbpTopicJS.bbp_ajaxurl, $data, function ( response ) {
      ...
    });

    In our case the callback function is not called at all, the text not being updated.

    Perhaps adding a success() call or something similar will fix the problem.

    #200724
    PDidee
    Participant

    I was wondering if it’s possible to assign a forum role to users being updated through Infusionsoft via HTTP Post. Not sure what the corresponding meta key would be or if that should just be a “add” to the role.

    #200368

    In reply to: bbPress like button

    Robin W
    Moderator

    people write plugins for free, and generally because they needed the functionality for their own site.

    They publish to help others, but they have no duty to support or maintain them. This is just free software.

    That they have not updated doesn’t mean it won’t work, for instance I have 6 plugins and every time wordpress publishes a new version I have to update the text in all 6 to make sure they say they are up to date, even though I have not altered any other code.

    When I last looked at this one it worked fine, but I cannot guarantee this.

    #200360

    In reply to: bbPress like button

    Mike Witt
    Participant

    “This plugin hasn’t been tested with the latest 3 major releases of WordPress. It may no longer be maintained or supported and may have compatibility issues when used with more recent versions of WordPress”

    (And it was last updated four years ago)

    This seems to be the story with a bunch of “like button” plugins. I wonder why?

    #200185
    artichoku
    Participant

    hey there. So I’ve been trying to get the import to work for a few weeks and have zero luck whatsoever. I’ve tried the updated script found here:

    Hi All,

    Had the same issue as described above. The default phpbb.php import script didn’t convert anonymous users of topics and replies and the Pixenated script looped infinately with the conversion of users.

    I’ve fixed the script and uploaded to PasteBin. Feel free to share widely.
    https://pastebin.com/FpWsxsUG

    How To:
    1) Upgrade phpBB to v.3.2.5
    2) Install BBpress 2.6 RC7
    3) Upload to /wp-content/plugins/bbpress/includes/admin/converters/phpbb.php

    Remember that real men don’t do backups. They cry a lot. 🙂

    but it has not aleviated the import problem. I no longer see errors, but it just sits at “Starting conversion”. Not sure what my next step is…

    licondam
    Participant

    Hi there!

    We’re trying to move our forums from a custom Q&A platform to bbPress… very glad there is now an importer!

    So I copied example.php to myimport.php, changed the class name, and updated the tables/columns that apply (the ones that exist in the old database).

    And ran the import…

    But I keep running into import errors for fields that don’t apply as they don’t exist in the other database, like forums_table.the_reply_count

    So for a field that just does not exist in the old database, what’s the proper syntax for “ignore this”? 🙂

    For example, this one…

    // Forum topic count (Stored in postmeta)
    $this->field_map[] = array(
    ‘from_tablename’ => ‘forums_table’,
    ‘from_fieldname’ => ‘the_topic_count’,
    ‘to_type’ => ‘forum’,
    ‘to_fieldname’ => ‘_bbp_topic_count’
    );
    I looked for this on the importer codex page, but just don’t see it.

    Thanks!
    LICON

    w3215
    Participant

    Thanks. This is all helpful to hear. Do you have any sense of what is going with the maintenance of bbpress? People have been talking about version 2.6 for 4 years+. bbpress seems terrific; I am hoping it is maintained with updated security, speed, etc.

    #198382

    In reply to: Export/Import

    kanchna
    Participant

    Hi, I would need to move our forums, topics, replies and the users from development server to live site. I have done with exporting and importing those in live site, but the relationship between the forums and topics are not getting updated, so we are getting a message as no topics inside the forum when viewed from frontend.

    Can anyone let me know if there are any other ways to perform this export/import functionality?

    #198222
    Foliferous
    Participant

    Awesome, hadn’t seen this. I’ve installed it and it seems to work fine, even though it hasn’t been updated for ages. This should really be included as a default feature in bbpress. Privacy is a big concern. Thank you robin!

    #198141
    Phillip Burger
    Participant

    It would be quite useful if while you were looking at a topic, there was a timed AJAX request (or similar feature) checking for updates to the Topic and letting you know when it is updated.

    Think about how if you are in Gmail and an update comes to an email thread – it lets you know, so you can read the update before you reply.

    I find in quite a few forums that you are reading and maybe forming a reply, just to update and see that someone else replied while you were on it.

    tedf
    Participant

    here is an updated image of the problem … the red arrows identify the problem areas.
    i am not sure if they are called headers, menus, or as one person suggested, “lists”.

    bbpress header problem 2019-01-22_15-18-39.jpg

    the problem is that they headings and data items don’t line up.

    if you google bbpress forums, and look at the images, all the pictures show the data properly lined up.

    #197934

    In reply to: Import Hung?

    budget101
    Participant

    The order should be (I think):

    Users
    Forums
    Topics
    Tags
    Replies

    Agreed, 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;
    	}
    }
    Editor Mike
    Participant

    So, this problem has just appeared again.
    Yesterday it was fine, now again when clicking the last updated by you get the topic number but not the page number…

    Crom's Anvil – 15mm Fantasy

    https://www.thewargameswebsite.com/forums/topic/abs-15mm-fantasy-thing/#post-107748&#8243;

    #197803
    saudor
    Participant

    Hello, 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:

    how to change forum roles programmatically

    Can someone point me in the right direction? Thanks!

    BBpress Version 3.2. Updated to 4.1 but still same issue

    tapiohuuhaa
    Participant

    Hi

    Why bbPress could use visual editor without chaning the function.php of themes.

    When thems needs to be updated, it would need every time alter that function.

    In my mind bbPress should support better visual editor. Otherwise bbPress seems to be a little bit too much self-made solution. Not like professional XenForo, which supports visual editor without tricks.

    I got it work in https://www.sanaristikkofoorumi.net/wordpress/forums/forum/sanaristikot/

    but I was not happy searching how to do it.

Viewing 25 results - 301 through 325 (of 2,086 total)
Skip to toolbar