PDA

View Full Version : Create new threads from running SQL query


powerful_rogue
05-30-2009, 09:10 PM
Hi,
I couldn't really think of a title that made sense without making it super long! Im just getting my head around php, however now I need to use a bit of SQL and was hoping for a bit of advice!

I created a mod that creates a thread when someone makes a paid subscription. Someone has asked if there is a way to have it make threads for people that made a paid subscription prior to the mod being installed.

Ive had a look through the database and I believe it has something to do with the following as this seems to list the userids of those that have made a payment.

SELECT `userid`
FROM `paymentinfo`

Im thinking i'll need to add a button in the ACP, that when an admin clicks it, it will run a script creating threads for older paid subscriptions, however this is where im a bit stuck!

Im guessing the SQL code will have to go above this php that creates the thread -

$threaddm =& datamanager_init('Thread_FirstPost', $vbulletin, ERRTYPE_ARRAY, 'threadpost');
$foruminfo = fetch_foruminfo($foruminfo['forumid']);
$threadinfo = array();
$username = $vbulletin->userinfo['username'];
$forumid = $vbulletin->options['subthread_fid'];
eval('$title = "' . addslashes($vbulletin->options['subthread_title']) . '";');
$userid = $vbulletin->options['subthread_toid'];
eval('$pagetext = "' . addslashes($vbulletin->options['subthread_content']) . '";');
$posticon = $vbulletin->options['subthread_posticon'];
$allowsmilie = '1';
$visible = '1';

$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('iconid', $posticon);
$threaddm->set('allowsmilie', $allowsmilie);
$threaddm->set('visible', $visible);

$threaddm->pre_save();
if(count($threaddm->errors) < 1)
{
$threadid = $threaddm->save();
unset($threaddm);
build_thread_counters($threaddm);
}
build_forum_counters($forumid);

Im presuming it would have to be a seperate script, as you wouldnt be able to define a hook location, as it would be a manual action when the admin clicks the button.

I know ive posted a few threads recently, however I am trying to work things out before I ask. Any help/advice is greatly appreciated.

Thanks
Dave

Dismounted
05-31-2009, 03:56 AM
There is a function called build_new_post(), which you can use to "automate" the thread creation action.

powerful_rogue
05-31-2009, 05:26 AM
Thanks dismounted.

Would that be to use instead of the current datamanager or for use with the sql query to create the new thread? (Am i right in thinking it would be something like build_new_post <if> this sql query is met or vice versa?)

Found this on vbwiki (http://www.vbulletinprogramming.com/wiki/articles/build_new_post) about it. Although they dont really give real life examples, im sure ill be able to have a play and get it working somehow.

Any idea about the sort of SQL query im going to need? Im picking up the php, but not too sure about sql at the mo/

Once again, thanks for the help, its really appreciated. Apologies if I dont reply to any replies today, off to work shortly and not back until tomorrow afternoon.

Dismounted
05-31-2009, 06:16 AM
If you use build_new_post(), there is nothing else you need to do. See what information you need to pass to it (look at newreply.php).

powerful_rogue
06-01-2009, 12:07 PM
Hi dismounted and thanks for your reply., however I think we might be talking about different things (maybe!)

If someone installed the mod today, however had members that had made paid subscriptions prior to the mod being installed, surly I would need some kind of SQL query to make threads that are backdated?

Mod installed today. Any member that makes a paid subscription from today onwards gets a new thread created.

10 members made a paid registration 4 days ago - I want to be able to run some kind of query that will see who made a payment prior to today and get it to create a thread with their username in the title/content.

koon85
08-23-2009, 09:27 PM
I try to use build_new_post function but nothing has happen with this code below. The main code I get from Staff Application System. Can anyone help me to know why it doesn't work?
Thanks a lot!


<?php

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// ######################### REQUIRE BACK-END ############################
require_once('./global.php');

// Build Messages
$message2 = "This is a test only.";

// Make a new thread
require_once(DIR . '/includes/functions_newpost.php');

$forumid = 1;
$user_id = 56;
$username = 'TOEFL';
$target_foruminfo = fetch_foruminfo($forumid);
$newpost = array(
'userid' => $user_id,
'username' => $username,
'message' => $message2,
'title' => 'This is a test only',
'poststarttime' => time(),
'emailupdate' => 0
);

build_new_post('thread', $target_foruminfo, array(), array(), $newpost, $errors);

// Fix forums counters
require_once('./includes/functions_databuild.php');
build_forum_counters($forumid);
?>

--------------- Added 1251067771 at 1251067771 ---------------

When I run it again, VBB display a duplicate post and maybe the post has been create, but why it doesn't display?