PDA

View Full Version : Help with Datamanager/Sending Private Messages


neilsimp1
10-07-2014, 09:19 PM
Hi

I'm following instructions from https://vborg.vbsupport.ru/showthread.php?t=82786&highlight=data+manager+pm to create a datamanager and send a PM.

Everything looks good in my code, I believe, except that I'm having trouble including/requiring the files:
core/includes/functions.php
core/includes/class_core.php
per http://www.vbulletin.com/docs/html/data_managers

the file I'm working from is located in /public/my/includes/myscript.php, so what I'm trying is:


include('privateMessage.php');//script in same folder, this one loads fine

//then later on...
api_send_privateMessage($fromuserid, $fromusername, $title, $message, $recipient);
//which is located in privateMessage.php



So in privateMessage.php:

require_once(realpath(__DIR__).'/../../core/includes/functions.php');
require_once(realpath(__DIR__).'/../../core/includes/class_core.php');

function api_send_privateMessage($fromuserid, $fromusername, $title, $message, $recipients){
$pmdm =& datamanager_init('PM', $vbulletin, ERRTYPE_ARRAY);
$pmdm->set('fromuserid', $fromuserid);
$pmdm->set('fromusername', $fromusername);
$pmdm->set('title', $title);
$pmdm->set('message', $message);
$pmdm->set_recipients($recipients, $botpermissions);
$pmdm->set('dateline', TIMENOW);
$pmdm->save();

return $pmdm->errors;
}


If I comment out the require_once's, I get an error saying that datamanager_init is not found, so I know it's calling the function correctly.


I've tried various combinations of pointing to functions.php and class_core.php, but I keep end up getting "Access denied." on a blank white page, without it ever completing and going to the next actual web page.


Can somebody point out my (hopefully) obvious mistake?
This has been driving me crazy, any help would be appreciated.

ozzy47
10-07-2014, 10:15 PM
That is a vB3 article, that will not work in vB5 it is completely different.

Dead Eddie
10-07-2014, 10:24 PM
Use the API

vB_Api_Content_Privatemessage::add()

neilsimp1
10-07-2014, 10:51 PM
Thanks.
I looked all over to find something specific to vb5, but that was really all Google could get for me. Would you be able to point me where I can find documentation on that? Sorry, I'm just looking at vBulletin for the first time, so it's all new.

Dead Eddie
10-08-2014, 01:37 AM
Thanks.
I looked all over to find something specific to vb5, but that was really all Google could get for me. Would you be able to point me where I can find documentation on that? Sorry, I'm just looking at vBulletin for the first time, so it's all new.

Mostly just look at the code. There really isn't any developer documentation and the stuff on this site is user built.

This (https://vborg.vbsupport.ru/showpost.php?p=2513307&postcount=5) is an example of calling the text API (for a new thread). Should give you an idea of where to start (since, basically, you're creating a text node, with additional PM data). Read the comments on the API method I referenced above and, if you're still stuck, someone will likely try to help.

TheAdminMarket
10-08-2014, 06:47 PM
Haven't worked with vB5 but seems that you're missing something. You've in your code:

$pmdm->set_recipients($recipients, $botpermissions);

but unless if I'm blind, can't see the value assigment for variable: $botpermissions. You must give admin permissions for PMs to be sure that it will bypass any restriction (eg total amount of PMs, PMs per xxx time)

For vB4 I was using:

// Bypass message amount restrictions
$botpermissions['adminpermissions'] = 2;
$pmSystem->set_recipients($item["username"], $botpermissions);

neilsimp1
11-11-2014, 07:30 PM
I've done a bit more digging, and I believe I'm close with something like this:


$data = array('sentto' => $recipients,
'msgRecipients' => $recipients,
'msgtype' = 'message',
'title' => $title,
'rawtext' => $message,
'sender' => $fromuserid,
'contenttypeid' => 27);

$pm_library = vB_Library::instance('Content_Privatemessage');

$options = array();

$pm_library->add($data, $options);


But I'm getting the error below, pretty much no matter what I do with the parameters at this point.
I'm not sure if it's the $data or the $options array that's having the "Illegal offset" problems, evan after looking at /vb/library/content/privatemessage.php


Warning: Illegal offset type in isset or empty in .../vb/library/content/privatemessage.php on line 1723 Warning: Illegal offset type in .../vb/library/content/privatemessage.php on line 1787 Warning: Illegal offset type in .../vb/library/content/privatemessage.php on line 564 API Error
Error: database_cant_escape_param
Args:
array (
0 => 'array',
)



Can anyone point me in the right direction?

Dead Eddie
11-12-2014, 01:25 AM
I'm just guessing here...but it looks like 'sentto' probably isn't formatted correctly.

If I were debugging it, I'd probably add a few var_dumps in vB_Library_Content_Privatemessage:add() around where it calls the checkFolders method and inspect the variables it's passing. You'll probably catch one that's dropping invalid data (I'd start with the one at line 555).

neilsimp1
11-13-2014, 09:10 PM
I can't thank you enough...

Just got it working with:

$recipients[0] = 1;//UserID of admin

which before was [0]['userid']

And these options:

$options['nl2br'] = true;
$options['skipDupCheck'] = true;
$options['skipNotification'] = true;
$options['skipFloodCheck'] = true;


Now on to the next task - having the script create a user account.


Thanks again for the help!