Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 General Discussions

Reply
 
Thread Tools Display Modes
  #1  
Old 05-15-2008, 03:28 AM
chrisjacob chrisjacob is offline
 
Join Date: May 2008
Location: Sydney
Posts: 7
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default 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

--------------- 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 :|
Reply With Quote
  #2  
Old 05-15-2008, 06:40 AM
Dismounted's Avatar
Dismounted Dismounted is offline
 
Join Date: Jun 2005
Location: Melbourne, Australia
Posts: 15,047
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

What is your problem? It looks like you've got it down.
Reply With Quote
  #3  
Old 05-15-2008, 10:21 PM
chrisjacob chrisjacob is offline
 
Join Date: May 2008
Location: Sydney
Posts: 7
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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 View Post
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.
Reply With Quote
  #4  
Old 05-19-2008, 10:58 PM
chrisjacob chrisjacob is offline
 
Join Date: May 2008
Location: Sydney
Posts: 7
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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
Reply With Quote
  #5  
Old 01-05-2009, 10:55 AM
Wakey Wakey is offline
 
Join Date: Dec 2008
Posts: 108
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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
Reply With Quote
  #6  
Old 01-06-2009, 03:09 AM
Dismounted's Avatar
Dismounted Dismounted is offline
 
Join Date: Jun 2005
Location: Melbourne, Australia
Posts: 15,047
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
  #7  
Old 01-06-2009, 11:32 AM
Wakey Wakey is offline
 
Join Date: Dec 2008
Posts: 108
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Dismounted View Post
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"
Reply With Quote
  #8  
Old 01-06-2009, 02:27 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by playSocial View Post
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.
Reply With Quote
  #9  
Old 01-06-2009, 02:40 PM
Wakey Wakey is offline
 
Join Date: Dec 2008
Posts: 108
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Lynne View Post
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?
Reply With Quote
  #10  
Old 01-06-2009, 03:08 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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).
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 03:47 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.04489 seconds
  • Memory Usage 2,311KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (3)bbcode_php
  • (4)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (10)post_thanks_box
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (10)post_thanks_postbit_info
  • (10)postbit
  • (10)postbit_onlinestatus
  • (10)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete