PDA

View Full Version : Creating a new poll post with php? Ideas?


Necrophyte
12-05-2016, 12:45 AM
I know how to create a normal post with php, but I'm searching through the code and haven't yet figured out how to do it.
Thought someone here might be able to point me in the right direction.

I use this as a function to deal with creating and editing posts.

function node_handler($userid, $title, $postmsg, $nodeid, $parentid, $channelid){
global $vbulletin;

$options = [];
$input = array(
'title' => $title,
'rawtext' => $postmsg,
'nodeid' => $nodeid,
'parentid' => $parentid,
'channelid' => $channelid,
'ret' => '',
'tags' => '',
'reason' => '',
'iconid' => '',
'prefixid' => '',
'hvinput' => '',
'subtype' => '',
'userid' => $userid,
'username' => 'User',
'nl2br' => false,
);

$api = Api_InterfaceAbstract::instance();
$user = $api->callApi('user', 'fetchUserinfo', array($userid));
$time = vB5_Request::get('timeNow');

$textData = array(
'title' => $input['title'],
'parentid' => $input['parentid'],
'prefixid' => $input['prefixid'],
'iconid' => $input['iconid']
);

$options = array();
if ($input['nodeid'] > 0){ //If we're here. We are to edit a post.
$result = array();
if ($user['userid'] < 1){
return 0;
}
$textData['rawtext'] = $input['rawtext'];
$textData['reason'] = $input['reason'];
// We need to convert WYSIWYG html here and run the img check
if (isset($textData['rawtext'])){
$tmpText = $api->callApi('bbcode', 'convertWysiwygTextToBbcode', array($textData['rawtext'], $options));
vB5_Frontend_Controller_Bbcode::verifyImgCheck($tm pText);
}
if ($input['nl2br']){ // not using ckeditor (on edit, 'nl2br' goes in the data array)
$textData['nl2br'] = true;
}
$nodeId = $api->callApi('content_text', 'update', [$input['nodeid'], $textData, $options]);
$tags = !empty($input['tags']) ? explode(',', $input['tags']) : array();
$tagRet = $api->callApi('tags', 'updateUserTags', array($input['nodeid'], $tags));
}
else{ //Here we start a new post/thread
$nodeId = $api->callApi('content_text', 'add', [$input, $options]);
}
return $nodeId;
}


Is this something that is just an option. As I'm looking I'm not seeing any options. I've looked through the API:
http://vb5support.com/resources/api/vB_Api_Content_Poll.html
Its unclear how to add a poll and what options would be in the poll. Or I'm blind. Could be either. I just need a Yes/No Poll.

I can't explain why I can't use jquery to do this, but I need this to if possible work with the above function.

Ideas? Suggestions?
Glenn!! I know you've got someway to tell me I've screwed up and its right there!

I've tried adding 'polloptions' =>array('Yes', 'No') to both options and input array, but come up with nothing but a normal post.
Gotta be missing something.

noypiscripter
12-05-2016, 04:23 AM
Take a look at actionPoll() function in createcontent.php frontend controller. Try creating a poll and inspect the ajax call to see the options passed.

You call the content_poll api not content_text. Based on content type, you call content_<type> api. The types are text, poll, gallery, video and link.

Necrophyte
12-05-2016, 06:30 PM
So here's what worked for me in the end.
I tried using actionpoll() function as a guide but it threw me off. Also tried looking at the ajax requested/sent info which again. Threw me off. The api looks for different data.
Traced content_text to poll.php in api folder. Led me to what it was looking for so I could give it the info. 'polloptions' needed to actually be called 'options' in a multi-dimensional array with 'titles'.
This is what worked for me in case someone comes to see this.

function startpoll($userid, $forum_id, $postmsg, $title){
global $vbulletin;

$api = Api_InterfaceAbstract::instance();
$user = $api->callApi('user', 'fetchUserinfo', array($userid));

$input = array(
'title' => $title,
'authorname' => $user['username'],
'rawtext' => $postmsg,
'nodeid' => 0,
'parentid' => $forum_id,
'channelid' => $forum_id,
'ret' => '',
'tags' => '',
'reason' => '',
'iconid' => 0,
'prefixid' => '',
'hvinput' => '',
'subtype' => '',
'userid' => $userid,
'username' => 'User',
'nl2br' => false,
'options' => array(array ('title' => 'Yes, I support.'), array ('title' => 'No, I do not support.')),
'timeout' => 0,
'multiple' => false,
'ret' => '',
'public' => false,
'parseurl' => false,
);

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

$nodeId = $api->callApi('content_poll', 'add', [$input, $options]);
return $nodeId;
}


Thanks to Glenn for pointing me in the right direction.