Help with wordpress plugin - publish_future_post() action

Discussion in 'PHP' started by liam1412, Dec 23, 2011.

  1. #1
    Hi All

    Just wondering if anyone has any experience of using this hook, I am using the wpvb-threads plugin that uses the vbulletin data manager to auto post to a vbulletin forum.

    It works fine unless the post is scheduled, in which case it is not added to the forum

    I have found an action publish_future_post() but can't find any documentation for it at all

    Tried adding

    add_action('publish_future_post', 'wpvbt_exec');
    PHP:
    to the action hooks of the plugin but it is not posting. I don't really know what data it is carrying or under what variable names to be able to get it to work.

    Anyone any ideas.

    Thanks

    <?php
    /*
    Plugin Name: Wordpress-vBulletin Threads
    Plugin URI: http://dev.whatniche.com/
    Description: Allows automatic posting of certain WP content into a vB forum
    Version: 1.0
    Author: WhatNiche
    Author URI: http://dev.whatniche.com/
    License: GPL2
    */
    /*  Copyright 2010  WhatNiche  (email : webmaster@whatniche.com)
    
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License, version 2, as 
        published by the Free Software Foundation.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    */
    
    // Action Hooks and Definitions
    add_action('admin_menu', 'wpvbt_admin_menu');
    add_action('admin_init', 'wpvbt_settings');
    add_action('publish_post', 'wpvbt_exec');
    add_action('publish_future_post', 'wpvbt_exec');
    
    // Needed for some random vB reason
    define('THIS_SCRIPT', 'wpvbthreads');
    
    // Admin Functions
    function wpvbt_admin_menu() {
        add_submenu_page('options-general.php', 'Wordpress-vBulletin Threads Settings', 'WPvB-Threads', 'activate_plugins', 'wpvb-threads-options', 'wpvbt_settings_page'); 
    }
    
    function wpvbt_settings() {
        register_setting('wpvbt-settings', 'wpvbt_categories');
        register_setting('wpvbt-settings', 'wpvbt_user', 'intval');
        register_setting('wpvbt-settings', 'wpvbt_post');
        register_setting('wpvbt-settings', 'wpvbt_forum_path');
    }
    
    function wpvbt_settings_page() {
    ?>
    <div class="wrap">
    <h2>Wordpress-vBulletin Threads</h2>
    
    <form method="post" action="options.php">
        <?php settings_fields('wpvbt-settings'); ?>
        <table class="form-table">
            <tr valign="top">
            <th scope="row">Forum User (Used to Post Threads)</th>
            <td><input type="text" name="wpvbt_user" value="<?php echo get_option('wpvbt_user'); ?>" /></td>
            </tr>
             
            <tr valign="top">
            <th scope="row">Categories (Separate by comma, in format WP_CAT:VB_CAT, WP_CAT may be *)</th>
            <td><input type="text" name="wpvbt_categories" value="<?php echo get_option('wpvbt_categories'); ?>" /></td>
            </tr>
            
            <tr valign="top">
            <th scope="row">Post Template<br />May contain vB BBCODE<br />Tags: {date}, {content}, {title}, {excerpt}, {slug}</th>
            <td><textarea name="wpvbt_post" rows="8" cols="60"><?php echo get_option('wpvbt_post'); ?></textarea></td>
            </tr>
            
            <tr valign="top">
            <th scope="row">Forum Path (e.g. forums/)</th>
            <td><input type="text" name="wpvbt_forum_path" value="<?php echo get_option('wpvbt_forum_path'); ?>" /></td>
            </tr>
        </table>
        
        <p class="submit">
        <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
        </p>
    
    </form>
    </div>
    <?php
    }
    
    // Main Functions
    
    // Copy of WP's excerpt code
    // Seems there isn't a function/method to
    // generate an excerpt from a string
    // Correct me if i'm wrong.
    // Which makes me wonder,
    // why on earth it has a $text parameter.
    function wpvbt_excerpt($txt) {
        $txt = strip_shortcodes($txt);
        $txt = str_replace(']]>', ']]&gt;', $txt);
        $txt = strip_tags($txt);
        $len = 55;
        $more = ' [...]';
        $words = preg_split("/[\n\r\t ]+/", $txt, $len+1, PREG_SPLIT_NO_EMPTY);
        if(count($words) > $len) {
            array_pop($words);
            $txt = implode(' ', $words);
            $txt = $txt.$more;
        } else {
            $txt = implode(' ', $words);
        }
        return $txt;
    }
    
    // Exec function, does everything important
    function wpvbt_exec($pid) {
        global $vbulletin;
        
        // Updating?
       if($_POST['original_post_status'] == 'publish')
        return;
        
        // vB Require
        if(!$wpvbt_fp = get_option('wpvbt_forum_path'))
            return;
        $cwd = getcwd();
        chdir($wpvbt_fp);
        require_once('./global.php');
        require_once('./includes/functions_newpost.php');
        require_once('./includes/class_dm.php');
        require_once('./includes/class_dm_threadpost.php');
        require_once('./includes/functions_databuild.php');
        chdir($cwd);
        
        // Get WP Post
        $post = get_post($pid);
        
        // Set Thread Options
        $uid = get_option('wpvbt_user');
        $fids = get_option('wpvbt_categories');
        
        // No forum IDs?
        if(empty($fids))
            return;
        
        // Parse them
        $fids = explode(",", $fids); // array('1:2','4:3')
        $forums = array();
        foreach($fids as $fid) {
            if(strpos($fid, ":") === false)
                continue;
            $fid_exp = explode(":",$fid);
            if($fid_exp[0] == $post->post_category || $fid_exp[0] == '*')
                $forums[] = $fid_exp[1];
        }
        
        // No Forums?
        if(empty($forums))
            return;
        
        // Parse Message
        $vbpost_message = get_option('wpvbt_post');
        $vbpost_message = str_replace(
            array('{date}', '{content}', '{title}', '{excerpt}', '{slug}'),
            array(
                  $post->post_date,
                  $post->post_content,
                  $post->post_title,
                  (empty($post->post_excerpt) ? wpvbt_excerpt($post->post_content) : strip_tags($post->excerpt)),
                  $post->post_name
                  ),
            $vbpost_message
        );
    	
    	
    	//Append originally posted
    	$vbpost_message .= '
    	
    	Originally posted at [url="'.get_permalink($post->ID).'"]'.$post->post_title.'[/url]';
    
        // User Info
        $uinfo = fetch_userinfo($uid);
        $vbulletin->userinfo = $uinfo;
        
        // Loop Through
        foreach($forums as $forum_id) {
            
    		// Forum Info
            $finfo = fetch_foruminfo($forum_id);
            
            // TDM Settings
            $tdm =& datamanager_init('Thread_FirstPost', $vbulletin, ERRTYPE_ARRAY,'threadpost');
            $tdm->setr('userid', $uinfo['userid']);
            $tdm->setr('title', $post->post_title);
            $tdm->setr('pagetext', $vbpost_message);
            $tdm->set('allowsmilie', 1);
            $tdm->set('visible', 1);
            $tdm->set_info('forum', $finfo);
            $tdm->setr('forumid', $forum_id);
            $tdm->set('dateline', time());
            $tdm->save();
        }
    	
    	build_thread_counters($tdm);
    	build_forum_counters('7');  
    	
    	$fields_array = $tdm->thread;
    	$thread_id = $fields_array['threadid'];
    
    	$postMeta = add_post_meta($post->ID,'related_thread',$thread_id, true);
    }
    ?>
    PHP:
     
    liam1412, Dec 23, 2011 IP