vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 General Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=111)
-   -   How Do I: Create a New Thread from an external PHP Script (https://vborg.vbsupport.ru/showthread.php?t=179298)

chrisjacob 05-15-2008 03:28 AM

How Do I: Create a New Thread from an external PHP Script
 
I've been searching and searching but cannot find 1 clear, easy to follow solution.

Currently I have an external PHP file (i.e. sitting outside the vB /forum/ folder) that can create a NEW Posts against an EXISTING Thread. Referenced:
--------------------------------------
Create Posts
https://vborg.vbsupport.ru/showthrea...highlight=Data

And for Using vBulletin-powered scripts outside vBulletin Directory...
[How-To] vBulletin API Basics: Creating Custom Pages & Misc.
https://vborg.vbsupport.ru/showthread.php?t=98009
--------------------------------------

Now I want to create a NEW Thread against an EXISTING Forum.
Referenced: https://vborg.vbsupport.ru/showpost....3&postcount=39
Here's my code thus far...

PHP Code:

<?php
// TODO~ Create new thread on existing forum

// change directory to the system path for the forums
// NOTE: add the following code in the beginning of any relative links: $vbulletin->options['homeurl']
chdir('/var/www/vhosts/example.net.au/subdomains/smb/httpdocs/forum');
// current directory
// echo getcwd() . "\n";

require_once('./global.php');
require_once(
'./includes/functions.php'); // for datamanager_init function, defined in functions.php
require_once('./includes/class_dm.php');
require_once(
'./includes/class_dm_threadpost.php');

// creating the thread data manager object
$threaddm =& datamanager_init('Thread_FirstPost'$vbulletinERRTYPE_ARRAY'threadpost'); 
// display object ID
//echo $threaddm . "\n";

// can also be grabbed this way? ~ $forumid = $vbulletin->GPC['fid'];
// https://vborg.vbsupport.ru/showpost.php?p=1365393&postcount=39
$forumdid1

$foruminfo fetch_foruminfo($forumid);
$threaddm->set_info('forum'$foruminfo);

$threaddm->set('forumid'$foruminfo['forumid']);
$threaddm->set('userid'1);
$threaddm->set('title''Testtitle');
$threaddm->set('pagetext''a little test');
$threaddm->set('allowsmilie'1);
$threaddm->set('visible'1);
$threaddm->set('dateline'TIMENOW);
//$threaddm->save(); 

$threaddm->pre_save();

// check for errors
if (!empty($threaddm->errors))
{
    
$errorlist '';
    foreach (
$threaddm->errors AS $index => $error)
    {
        
$errorlist .= "<li>$error</li>";
    }
    
    echo 
$errorlist "\n";
    
// ... additional code; $errorlist is outputted to the user
}
else
{
    echo 
"No Errors";
    
// $threaddm->save(); 
    
$thread_id $threaddm->save(); 

    
// ... additional processing code
}  
?>

Thanks in advance for any suggestions :D

--------------- Added [DATE]1210826124[/DATE] at [TIME]1210826124[/TIME] ---------------

p.s. This is my first crack at using vBulletin - I need to write a custom API to communicate with vB (for now to create New Threads and New Threads with Posts). The vB manual has some handy information but it seems to lack 'clear' examples of USING DataManagers to achieve simple tasks such at creating a new post and/or thread and populating it with data (e.g. from a submitted form).

I know it's going to be possible to do... I just can't figure it out :|

Dismounted 05-15-2008 06:40 AM

What is your problem? It looks like you've got it down.

chrisjacob 05-15-2008 10:21 PM

PHP Code:

<?php
// Create a new thread

chdir('/var/www/vhosts/example.net.au/subdomains/smb/httpdocs/forum');

require_once(
'./global.php');
require_once(
'./includes/class_dm.php');
require_once(
'./includes/class_dm_threadpost.php');
require_once(
'./includes/functions_databuild.php'); // required for "build_forum_counters"

$threadsdm = new vB_DataManager_Thread_FirstPost($vbulletinERRTYPE_STANDARD);

$forumid '3';
$userid '2';
$title 'Test New Thread';
$pagetext 'This works... Whoo Hoo!!';
$allow_smilie '1';
$visible '1';

//$foruminfo = fetch_foruminfo($forumid);   // Not sure what this does so removed it
//$threadsdm->set_info('forum', $foruminfo);  // Not sure what this does so removed it

//$threadsdm->set('forumid', $foruminfo['forumid']);  // Not sure what this does so removed it
$threadsdm->set('forumid'$forumid);
$threadsdm->set('userid'$userid);
$threadsdm->set('title'$title);
$threadsdm->set('pagetext'$pagetext); 
$threadsdm->set('allowsmilie'$allow_smilie);
$threadsdm->set('visible'$visible); // not required?

// no 'post_userid'
// no 'posttext'
// no 'username'

$threadsdm->save();

build_forum_counters($forumid);

unset(
$threadsdm);  
?>

--------------- Added [DATE]1210893914[/DATE] at [TIME]1210893914[/TIME] ---------------

Quote:

Originally Posted by Dismounted (Post 1520180)
What is your problem? It looks like you've got it down.

My previous code seemed to just not work... I was banging my head against a wall. Eventually I ended up with the code posted above - which seems to work (a New thread is created and the forums counters are updated).

If anyone has suggestions on improving my script please comment.

chrisjacob 05-19-2008 10:58 PM

This seems to work for me :)

PHP Code:

        chdir('/var/www/vhosts/example.net.au/subdomains/abc/httpdocs/forum');
        require_once(
'./global.php');
                require_once(
'./includes/class_dm.php');
        require_once(
'./includes/class_dm_threadpost.php');
        require_once(
'./includes/functions_databuild.php');

        
$forumid '3';
        
$userid '1';
        
$title 'My New Thread Title';
        
$pagetext 'Thread posted from external php script';
        
$open '1';
        
$allow_smilie '1';
        
$visible '1';
        
        
// fetch userinfo
        
if (!$userinfo fetch_userinfo($userid))
        {
            die(
"Invalid User!");
        }
        
        
// initialize datamanager
        
$threaddm = new vB_DataManager_Thread_FirstPost($vbulletinERRTYPE_STANDARD);
        
        
// set data
        
$foruminfo fetch_foruminfo($forumid);
        
$threaddm->set_info('forum',$foruminfo);
        
$threaddm->set_info('user',$userinfo);
        
$threaddm->set('forumid'$forumid);
        
$threaddm->set('userid',$userinfo['userid']);
        
$threaddm->set('title'$title);
        
$threaddm->set('pagetext'$pagetext); 
        
$threaddm->set('open'$open);
        
$threaddm->set('allowsmilie'$allow_smilie);
        
$threaddm->set('visible'$visible);
        
        
// error checks
        
$threaddm->pre_save();
        if (!empty(
$threaddm->errors))
        {
            echo (
$threaddm->errors);
        }
        
        
// save
        
$threadid $threaddm->save();
        unset(
$threaddm);
        
        
// rebuild caches
        
build_thread_counters($threadid);
        
build_forum_counters($forumid); 

referenced:
https://vborg.vbsupport.ru/showpost....3&postcount=23

Wakey 01-05-2009 10:55 AM

How would I go about using the code in this thread to automatically create a discussion thread using the information from a News Thread (which doesn't allow replies). I can run the script and it creates the thread but I cant figure out how I would go about passing the information to it OR making it run on clicking the submit button to create a thread on a specific forum

Dismounted 01-06-2009 03:09 AM

You can use a plugin at newthread_complete to run the code as a new thread is created. Look above that hook, and you will see the variables for the current thread that is being submitted.

Wakey 01-06-2009 11:32 AM

Quote:

Originally Posted by Dismounted (Post 1702949)
You can use a plugin at newthread_complete to ruin the code as a new thread is created. Look above that hook, and you will see the variables for the current thread that is being submitted.

OK I have got it to work on newthread_post_complete but I cant for the life of me work out how to make the new post have the same title as the original. I also cant get it to pull the threadid of the original so i could use the [thread ] tags to link back to the original post.

Any advice would be appreciated.

Oh and what did youy mean by "look above that hook"

Lynne 01-06-2009 02:27 PM

Quote:

Originally Posted by playSocial (Post 1703185)
Oh and what did youy mean by "look above that hook"

He means go find the hook newthread_complete in the code and look at the code in the page above it.

Wakey 01-06-2009 02:40 PM

Quote:

Originally Posted by Lynne (Post 1703275)
He means go find the hook newthread_complete in the code and look at the code in the page above it.

Any hints to which file the relevent code will be in, or do I just need to go through every script?

Lynne 01-06-2009 03:08 PM

Does your text editor not allow you to search in a folder? If not, I would highly recommend finding an editor that does - I couldn't live without that feature.

I would guess that since the name of the hook is newthread_complete, that it is in the newthread.php script (however, I have no hook called newthread_complete in either my 3.6.8 board or my 3.8.0 board, so I'm guessing you guys are talking about a different hook).


All times are GMT. The time now is 10:38 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.02320 seconds
  • Memory Usage 1,799KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (3)bbcode_php_printable
  • (4)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete