1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

function new thread

Discussion in 'XenForo Development Discussions' started by TheLord, Nov 25, 2010.

  1. TheLord

    TheLord Member

    difficult, if not, tell me where this function in the files.
     
  2. Jake Bunce

    Jake Bunce XenForo Moderator Staff Member

    TheLord likes this.
  3. Brogan

    Brogan XenForo Moderator Staff Member

    Likewise Jake, I spent a bit of time checking various places without success.

    I've also moved the thread as suggested.
     
    TheLord likes this.
  4. Shadab

    Shadab Well-Known Member

    If I understand correctly, TheLord is looking for code responsible for creating threads?

    That's in /library/XenForo/ControllerPublic/Forum.php
    • actionCreateThread()
    • actionAddThread()
     
    TheLord, Jake Bunce and Brogan like this.
  5. ragtek

    ragtek Guest

    If you're searching for a way to create a thread with an add-on, you'll need the datawriter.
    I've created a helper for me, to create fast & easy threads from add-ons

    PHP:
        /**
         * Helper for XenForo Thread Datawriter to create easy a thread
         * @param XenForo_Visitor $user
         * @param <int> $forumId
         * @param <str> $subject
         * @param <str> $message
         * @return <array> Thread Information
         */
        
    static public function createThread(XenForo_Visitor $user$forumId$subject$message)
        {
            
    $writer XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
            
    $writer->set('user_id'$user['user_id']);
            
    $writer->set('username'$user['username']);
            
    $writer->set('title'$subject);
                
    $postWriter $writer->getFirstMessageDw();
                
    $postWriter->set('message'$message);
            
    $writer->set('node_id'$forumId);
            
    $writer->preSave();
            
    $writer->save();
            return 
    $writer->getMergedData();
        }
     
    Tomble, TheLord, Jeremy and 1 other person like this.
  6. Jaxel

    Jaxel Well-Known Member

    Take a look at thread.php in my XenMedio mod... it contains information on how to create threads automatically, post to specific threads automatically, as well as how to close the threads automatically.

    PHP:
    <?php

    class EWRmedio_Model_Threads extends XenForo_Model
    {
        public function 
    buildThread($media)
        {
            
    $options XenForo_Application::get('options');

            if (!
    $options->EWRmedio_autoforum) { return false; }
            if (!
    $forum $this->getModelFromCache('XenForo_Model_Forum')->getForumById($options->EWRmedio_autoforum))
            {
                return 
    false;
            }

            
    $category $this->getModelFromCache('EWRmedio_Model_Categories')->getCategoryByID($media['category_id']);
            
    $service $this->getModelFromCache('EWRmedio_Model_Services')->getServiceByID($media['service_id']);

            
    $keywords explode(","$media['media_keywords']);
            foreach (
    $keywords AS &$keyword)
            {
                
    $keyword trim($keyword);
                
    $keyword "[URL=".XenForo_Link::buildPublicLink('full:media_keyword', array('keyword_text' => $keyword))."]".$keyword."[/URL]";
            }
            
    $media['media_keywords'] = implode(", "$keywords);
            
    $media['duration'] = new XenForo_Phrase(array('x_minutes''count' => $media['media_minutes'])) . " " .
                        new 
    XenForo_Phrase(array('x_seconds''time' => $media['media_seconds']));

            
    $writer XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
            
    $writer->set('user_id'$media['user_id']);
            
    $writer->set('username'$media['username']);
            
    $writer->set('title', new XenForo_Phrase(array('auto_create_media_thread_title''title' => $media['media_title'])));
            
    $writer->set('node_id'$forum['node_id']);
            if (
    $options->EWRmedio_autolock)
            {
                
    $writer->set('discussion_open'0);
            }
                
    $postWriter $writer->getFirstMessageDw();
                
    $postWriter->set('message', new XenForo_Phrase(array(
                    
    'auto_create_media_thread_message',
                    
    'media' => $media['media_id'],
                    
    'date' => date('l, M d, Y'$media['media_date']),
                    
    'title' => $media['media_title'],
                    
    'description' => $media['media_description'],
                    
    'duration' => $media['duration'],
                    
    'keywords' => $media['media_keywords'],
                    
    'catname' => $category['category_name'],
                    
    'srvname' => $service['service_name'],
                    
    'username' => $media['username'],
                    
    'link' => XenForo_Link::buildPublicLink('full:media'$media),
                    
    'catlink' => XenForo_Link::buildPublicLink('full:media_category'$category),
                    
    'srvlink' => XenForo_Link::buildPublicLink('full:media_service'$service),
                    
    'userlink' => XenForo_Link::buildPublicLink('full:media_user'$media),
                )));
            
    $writer->save();

            
    $thread $writer->getMergedData();
            
    $this->getModelFromCache('XenForo_Model_Thread')->markThreadRead($thread$forumXenForo_Application::$time$media['user_id']);

            
    $dw XenForo_DataWriter::create('EWRmedio_DataWriter_Media');
            
    $dw->setExistingData($media);
            
    $dw->set('thread_id'$thread['thread_id']);
            
    $dw->save();

            return 
    true;
        }

        public function 
    postToThread($comment$media)
        {
            if (!
    $thread $this->getModelFromCache('XenForo_Model_Thread')->getThreadById($media['thread_id']))
            {
                
    $dw XenForo_DataWriter::create('EWRmedio_DataWriter_Media');
                
    $dw->setExistingData($media);
                
    $dw->set('thread_id''0');
                
    $dw->save();

                return 
    false;
            }

            
    $writer XenForo_DataWriter::create('XenForo_DataWriter_DiscussionMessage_Post');
            
    $writer->set('user_id'$comment['user_id']);
            
    $writer->set('username'$comment['username']);
            
    $writer->set('message', new XenForo_Phrase(array(
                    
    'autoposted_from_comments_x',
                    
    'link' => XenForo_Link::buildPublicLink('full:media'$media),
                    
    'title' => $media['media_title'],
                    
    'message' => $comment['comment_message'],
                )));
            
    $writer->set('ip_id'$comment['comment_ip']);
            
    $writer->set('thread_id'$thread['thread_id']);
            
    $writer->save();

            return 
    true;
        }

        public function 
    closeThread($threadID)
        {
            if (!
    $thread $this->getModelFromCache('XenForo_Model_Thread')->getThreadById($threadID))
            {
                return 
    false;
            }

            
    $visitor XenForo_Visitor::getInstance();

            
    $writer XenForo_DataWriter::create('XenForo_DataWriter_DiscussionMessage_Post');
            
    $writer->set('user_id'$visitor['user_id']);
            
    $writer->set('username'$visitor['username']);
            
    $writer->set('message', new XenForo_Phrase('auto_create_media_thread_deleted'));
            
    $writer->set('thread_id'$thread['thread_id']);
            
    $writer->save();

            
    $threadWriter XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
            
    $threadWriter->setExistingData($thread['thread_id']);
            
    $threadWriter->set('discussion_open'0);
            
    $threadWriter->save();
        }
    }
     
  7. TheLord

    TheLord Member

    found what I was searching. Thank you all!
     
  8. Tomble

    Tomble Active Member

    Hate to bump a new thread but I've been searching for this for ages so thank you very much Ragtek and Jaxel :).

    I do have one quick question though, would this work if I was doing this from an external program (not an add-on), or would it be more effective just to insert directly to the database without going through XenForo itself. If I did skip using XenForo to insert a new thread would that cause any issues?
     
  9. ragtek

    ragtek Guest

    yes, it "could" cause some issues, IF you don't think on all the necessary "sub tasks".
    Just check the thread datawriter to see what's he doing.
    ... check it now... then read the rest here:D ...

    As you see, it's "complex", its much easier to use it;)
    And yes, it's possible to do it outside of the xenforo.
     
    Tomble likes this.
  10. Tomble

    Tomble Active Member

    Okay, thought it would do just wasn't sure. Thanks for clearing that up, do you know if there are any guides on how to invoke an XenForo class outside of XenForo? I had a search and couldn't find any, if there aren't I'll have to start poking around until things stop breaking :p.
     

Share This Page