vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB5 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=263)
-   -   Creating a new poll post with php? Ideas? (https://vborg.vbsupport.ru/showthread.php?t=323977)

Necrophyte 12-05-2016 12:45 AM

Creating a new poll post with php? Ideas?
 
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.
Code:

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($tmpText);
                }
                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/...tent_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.
Code:

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.


All times are GMT. The time now is 03:45 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.00959 seconds
  • Memory Usage 1,737KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (2)bbcode_code_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (3)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete