PDA

View Full Version : vBulletin 5 Request - Functionality to create a new thread from external script


qmm
02-24-2019, 09:28 PM
Hi,

I have a type of framework on-top of vbulletin, we recently did an upgrade from 3.8 all the way to 5.5.0 for responsive forum themes
In our framework, we are able to save a new thread in the forum using datamanager through, let us say, my-codebase/save-new-thread.php where you can pass parameters, it's broken to run as is in the new upgraded forum

Is there an out-of-the-box solution to this using existing codebase that I have not yet found that can be included in the script and replace the datamanager?
I'm keen on trying to stay away from core editing and kind of new in the vbulletin codebase

Apologies if this might already be there, I have not yet found it personally or found how threads are created in the forum itself through code
Thanks in advance

delicjous
02-25-2019, 01:36 PM
Hi,

there is no script yet.

Would be nice to see your script because there are a lot of open questions....

-Who is posting the new threads?
-Where is this script based (another cms or folder)?
-Would it be possible to use vB-cms for this?

qmm
02-26-2019, 07:20 AM
Hi,

there is no script yet.

Would be nice to see your script because there are a lot of open questions....

-Who is posting the new threads?
-Where is this script based (another cms or folder)?
-Would it be possible to use vB-cms for this?

Hi, thanks for the reply

Current script looks like this (used in vB3.8):
if (!($foruminfo = verify_id('forum', 100, false, true)))
return 0;
$dataman =& datamanager_init('Thread_FirstPost', $vbulletin, ERRTYPE_ARRAY, 'threadpost');
$dataman->set('userid', $vbulletin->userinfo['userid']);
$dataman->set('forumid', 100);
$dataman->set('prefixid', 'PREFIXED');
$dataman->set('title', 'thread title');
$dataman->set('pagetext', 'thread content');
$dataman->set('allowsmilie', 1);
$dataman->set('visible', 1);
$dataman->set_info('forum', $foruminfo);
$dataman->set_info('is_automated', true);

$dataman->pre_save();
if ($dataman->errors)
return 0;

$threadid = $dataman->save();

I did check this earlier, I want to achieve something like it but excluded putting user password and base it on the global $vbulletin->userinfo as user is already logged in and the data is available
https://vborg.vbsupport.ru/showthread.php?t=326890

In regards of the questions:
1. The current logged in user, which can be accessed by the global variable
2. The forum has its own folder and the script is accessed through another subfolder on the same level. Etc /www/forums and /www/scripts/script.php
3. Is vbCMS available in 5.5.0?


Edit;
I got it working using the following code:
define('CSRF_PROTECTION', false);

vB5_Autoloader::register('../');
vB5_Frontend_Application::init('config.php');
$api = Api_InterfaceAbstract::instance();

$user = $api->callApi('user', 'fetchUserinfo', array());

$data = array(
'hvinput' => '',
'title' => 'title',
'rawtext' => 'text',
'prefixid' => 'prefixid',
'parentid' => 100,
'channelid' => 100,
'userid' => $user['userid'],
'authorname' => $user['username'],
'nl2br' => false,
'htmlstate' => 'off',
'disable_bbcode' => false
);

$options = array(
'skipDupCheck' => true
);

$nodeId = $api->callApi('content_text', 'add', array($data, $options));

delicjous
02-27-2019, 03:20 AM
In regards of the questions:
1. The current logged in user, which can be accessed by the global variable
2. The forum has its own folder and the script is accessed through another subfolder on the same level. Etc /www/forums and /www/scripts/script.php

Congrats, you got it!


3. Is vbCMS available in 5.5.0?

vB5 have a build in cms. You could use articles and you could create as many pages you like and place all available widgets on that pages.

So if you just need a page without any other cms you should use a vB page and create a widget to post something. You could use the entire API in widgets and don't need to init the config...

romaine
03-11-2019, 02:58 PM
Hi, thanks for the reply

Current script looks like this (used in vB3.8):
if (!($foruminfo = verify_id('forum', 100, false, true)))
return 0;
$dataman =& datamanager_init('Thread_FirstPost', $vbulletin, ERRTYPE_ARRAY, 'threadpost');
$dataman->set('userid', $vbulletin->userinfo['userid']);
$dataman->set('forumid', 100);
$dataman->set('prefixid', 'PREFIXED');
$dataman->set('title', 'thread title');
$dataman->set('pagetext', 'thread content');
$dataman->set('allowsmilie', 1);
$dataman->set('visible', 1);
$dataman->set_info('forum', $foruminfo);
$dataman->set_info('is_automated', true);

$dataman->pre_save();
if ($dataman->errors)
return 0;

$threadid = $dataman->save();

I did check this earlier, I want to achieve something like it but excluded putting user password and base it on the global $vbulletin->userinfo as user is already logged in and the data is available
https://vborg.vbsupport.ru/showthread.php?t=326890

In regards of the questions:
1. The current logged in user, which can be accessed by the global variable
2. The forum has its own folder and the script is accessed through another subfolder on the same level. Etc /www/forums and /www/scripts/script.php
3. Is vbCMS available in 5.5.0?


Edit;
I got it working using the following code:
define('CSRF_PROTECTION', false);

vB5_Autoloader::register('../');
vB5_Frontend_Application::init('config.php');
$api = Api_InterfaceAbstract::instance();

$user = $api->callApi('user', 'fetchUserinfo', array());

$data = array(
'hvinput' => '',
'title' => 'title',
'rawtext' => 'text',
'prefixid' => 'prefixid',
'parentid' => 100,
'channelid' => 100,
'userid' => $user['userid'],
'authorname' => $user['username'],
'nl2br' => false,
'htmlstate' => 'off',
'disable_bbcode' => false
);

$options = array(
'skipDupCheck' => true
);

$nodeId = $api->callApi('content_text', 'add', array($data, $options));

Thanks for sharing useful code, the important thing in your post is how to connect to vB database, the rest I could use a custom code to insert what I want into my vB database.