vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 3 Articles (https://vborg.vbsupport.ru/forumdisplay.php?f=187)
-   -   Creating a New Thread using vBulletins API (https://vborg.vbsupport.ru/showthread.php?t=229654)

megamoose 12-05-2009 10:00 PM

Creating a New Thread using vBulletins API
 
I really hope this will help some of you, as I spent ages searching the Internet tring to find something to do this, and ended up having to write my own.

This basically does exactly what the title says. It creates a new thread in a forum on your vbulletin forum.

It works for me in the latest version of vBulletin, but I'm not sure how far back it will work. But you should have your vBulletin up to date anyway.

If you notice any bugs/problems or anything I have done wrong, please correct me.

PHP Code:

<?php
/*======================================================================*\
|| #################################################################### ||
|| # Create a new thread                                              # ||
|| # ---------------------------------------------------------------- # ||
|| # Hopefully this will help some of you people who are needing to   # ||
|| # create a new thread externally using vBulletins API. Good luck!  # ||
|| #################################################################### ||
\*======================================================================*/

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE & ~8192);

// Include vBulletin runtime files
require_once('./global.php');
require_once(
'./includes/functions_databuild.php');

// Create a new datamanager for posting
$threaddm =& datamanager_init('Thread_FirstPost'$vbulletinERRTYPE_ARRAY'threadpost');

// Set some variable and information
$forumid 43;                                                                  // The id of the forum we are posting to
$userid 125500;                                                                 // The user id of the person posting
$title addslashes($_POST["title"]);                                           // The title of the thread
$pagetext addslashes($_POST["content"]);                                      // The content of the thread
$allowsmilie '1';                                                             // Are we allowing smilies in our post
$visible '1';                                                                 // If the post visible (ie, moderated or not)

// Parse, retrieve and process the information we need to post
$foruminfo fetch_foruminfo($forumid);
$threadinfo = array();
$user htmlspecialchars_unifetch_userinfo($userid) );

$threaddm->set_info('forum'$foruminfo);
$threaddm->set_info('thread'$threadinfo);
$threaddm->setr('forumid'$forumid);
$threaddm->setr('userid'$userid);
$threaddm->setr('pagetext'$pagetext);
$threaddm->setr('title'$title);
$threaddm->set('allowsmilie'$allowsmilie);
$threaddm->set('visible'$visible);

// Lets see what happens if we save the page
$threaddm->pre_save();
if(
count($threaddm->errors) < 1) {
    
// Basically if the page will save without errors then let do it for real this time
    
$threadid $threaddm->save();
    unset(
$threaddm);
} else {
    
// There was errors in the practice run, so lets display them
    
var_dump ($threaddm->errors);
}

?>

Thanks to ragtek for the revised code!

Lynne 12-06-2009 07:46 PM

When would you use this? Like in a cron job (scheduled task) to create a new thread?

megamoose 12-06-2009 08:05 PM

Quote:

Originally Posted by Lynne (Post 1926463)
When would you use this? Like in a cron job (scheduled task) to create a new thread?

You can use this for a number of things like I have a database of jokes so I am going to run a cron every X hours to create new threads with the jokes in it. There are loads of uses for it like you can use it to let an external script (like a blog) create a new thread.

This is just a handy piece of code that should let anyone create a script around it (if they know a bit of PHP) to create threads for whatever reason they may have!

ragtek 12-07-2009 07:33 AM

1. you don't need to inlcude this files:
PHP Code:

require_once('./includes/class_dm.php');
require_once(
'./includes/class_dm_threadpost.php'); 

it's happening automatic
2.
why you eval this part?:
PHP Code:

eval('$title = "' addslashes("THE THREAD TITLE") . '";');                     // The title of the thread
eval('$pagetext = "' addslashes("THE CONTENT OF THE POST") . '";');           // The content of the thread 


megamoose 12-07-2009 04:13 PM

Thanks ragtek, have edited my code and post. I evaled it because I thought to make it secure from SQL exploits you had to. Maybe it was something in a previous vB version, I'm not sure. I've removed it and it's still working fine, and the addslashes still works.

Thanks!

tms1791 12-29-2009 12:22 AM

Thanks for making it painless. :)

You might want to replace the addslashes() calls with mysql_real_escape_string() though.

Thanks again!

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

I spoke too soon (about it being painless)...

I have a site where the forums are secondary to the rest of the site, which is also database driven. What I first tried to do was incorporate the above code into my admin interface so that when I added or edited a record in the database, the details of that record would be posted as a new thread. It almost worked, but I was getting an error that I couldn't get around, and googling it led me to believe that it had to me having an existing database connection when I tried to load the vB includes.

No big deal, right? I'll just put the code into a separate script, and POST a request to that script, so it'll be completely independent of my own stuff. Kind of clunky, but whatever - as long as it works. :) It didn't. :( Sort of.

I'm able to create a new thread, and the title & content are there, but the body of the post is showing the \n (carriage returns) instead of converting them to.. carriage returns. So instead of this:
Quote:

The quick brown
fox jumped over
the slow
lazy dog.
I get this:
Quote:

The quick brown\nfox jumped over\nthe slow\nlazy dog.
in the post.

I added some debugging code to make sure that I'm POSTing the data correctly and that it's coming through on the other side properly, and everything seems hunky dory. I also tried running nl2br() on the content data, but then I just get:
Quote:

The quick brown<br />fox jumped over<br />the slow<br />lazy dog.
in the body of the post. :mad:

It seems like it should be totally trivial - and maybe it is (I've been coding all day with very little sleep last night) - but I can't figure it out.

What am I missing? (And before anyone asks, yes, I'm enclosing the \n's in double quotes. ;) )

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

Ok, after some sleep, I realized what was happening.

Don't use my suggestion of replacing addslashes() with mysql_real_escape_string() - it was escaping the carriage returns and literally inserting a \n into the text.

All is right in the universe now. :)

NolanChart 04-21-2010 11:41 AM

Very nice script!

One question: once created, how can I retrieve the newly created thread id?

ragtek 04-21-2010 11:50 AM

PHP Code:

$threadid $threaddm->save(); 


Digma 04-21-2010 11:59 AM

Why I have never spotted this thread is a riddle to me. I ploughed through dozens of them and ended up doing roughly the same thing as you. Even posted a question if my working code was complete like that in the vb3 programming discussion forum. *sigh*..

NolanChart 04-21-2010 12:20 PM

Quote:

Originally Posted by ragtek (Post 2024871)
PHP Code:

$threadid $threaddm->save(); 


Boy, do I feel dumb!

Digma 04-21-2010 05:05 PM

Is there a way to add:
1. The signature of the 'set' poster?
2. a Prefix to a title?

pein87 05-20-2010 02:54 PM

works perfectly
thanks a bunch

/gibigbig

Brandon Sheley 05-20-2010 02:56 PM

thanks for this, now to think of how I can use it :)

kesandal 10-24-2010 01:45 PM

Is there a way to have the code outside of the vB-directory?

e.g.

[root]
_[non-public]
___create_thread_external.php
_[folder1]
_[folder2]
_[vB]

I've tried to change thoose two lines:

PHP Code:

require_once('../vB/global.php'); 
require_once(
'../vB/includes/functions_databuild.php'); 

The result:
PHP Code:

Warning: require(./includes/class_bootstrap.php) [function.require]: failed to open streamNo such file or directory in /home/x/public_html/d/vB/global.php on line 15

Warning
: require(./includes/class_bootstrap.php) [function.require]: failed to open streamNo such file or directory in /home/x/public_html/d/vB/global.php on line 15

Fatal error
: require() [function.require]: Failed opening required './includes/class_bootstrap.php' (include_path='.:/usr/lib/php:/usr/local/lib/php'in /home/x/public_html/d/vB/global.php on line 15 

Any ideas?
Thansk in advance

Kesandal


Edit
I could fix the problem.

For thoose who are getting the same problem;
Just add thoose few lines above your page:

PHP Code:

$curdir getcwd (); 
chdir('../path_to_your_board/'); 
require_once(
'../path_to_your_board/global.php'); 
chdir ($curdir); 


FortressGamers 10-27-2010 03:02 PM

Sorry to bump an old thread....

is addslashes() for title & content necessary? I'm just curious if it's redundant. When I use the above, in my posts I get slashes along with my quotes :(

Thanks!

leitel 11-12-2010 10:26 AM

Can a similar approach be used to create CMS articles in 4+?

squishi 12-15-2010 09:40 PM

Thank you very much for this thread. Worked perfectly.

kesandal 04-18-2011 08:41 AM

Quote:

Originally Posted by leitel (Post 2120882)
Can a similar approach be used to create CMS articles in 4+?

same question here..

4x4 Mecca 01-16-2012 05:33 AM

Thanks! You helped me a ton!

qos 04-17-2012 08:39 AM

i try it on version 4.1.12 and it create new thread, so it works on 4+.
thx for the script:)

dotatalk 08-29-2012 09:54 AM

I've got error

Quote:

Fatal error: Registry object is not an object in [path]\includes\class_dm.php on line 205
EDIT: I needed to define

Quote:

$global vbulletin;

vB_CharlesM 10-08-2012 12:28 PM

Could this be used to create a new thread from a Microsoft Excel VBA module?

Medi0cr3 02-25-2015 04:39 PM

This works great, 5 years later hah..

Thanks

[email protected] vbmenu_register("postmenu_2571728", true); 06-07-2016 01:01 PM

Where would you place this script?

esskmk 11-11-2020 11:53 AM

Thanks.


All times are GMT. The time now is 02:29 PM.

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

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.05584 seconds
  • Memory Usage 1,827KB
  • 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
  • (8)bbcode_php_printable
  • (8)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (25)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
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete