Ejemplo n.º 1
0
 /**
  * Sends an auto post request to social networks such as Facebook, Twitter etc.
  *
  * @since	3.0
  * @access	public
  * @param	null
  * @return	boolean	True if success, false otherwise.
  */
 public function autopost()
 {
     // Only allow post that are really published.
     if (!$this->published) {
         return false;
     }
     $category = DiscussHelper::getTable('Category');
     $category->load($this->category_id);
     // Only allow post that are posted in a public category.
     if (!$category->canPublicAccess()) {
         return false;
     }
     $config = DiscussHelper::getConfig();
     // Set generic callback URL.
     $callback = DiscussRouter::getRoutedUrl('index.php?option=com_easydiscuss&view=post&id=' . $this->id, false, true);
     // These are the default social sites which we need to ping.
     $sites = array('facebook', 'twitter');
     foreach ($sites as $site) {
         if ($config->get('main_autopost_' . $site)) {
             $oauth = DiscussHelper::getTable('OAuth');
             $state = $oauth->loadByType($site);
             // Determine if this discussion is already shared on the social site.
             $oauthPost = DiscussHelper::getTable('OauthPosts');
             $shared = $oauthPost->exists($this->id, $oauth->id);
             if (!$shared && $state && !empty($oauth->access_token)) {
                 $consumer = DiscussHelper::getHelper('OAuth')->getConsumer($site, $config->get('main_autopost_' . $site . '_id'), $config->get('main_autopost_' . $site . '_secret'), $callback);
                 // Set access token for the social site.
                 $consumer->setAccess($oauth->access_token);
                 // Try to share the post to the site.
                 $status = $consumer->share($this);
                 // @TODO: Add error logging when something fail here.
                 // When the psot is shared we need to keep a record of this to prevent from sending duplicate updates.
                 $oauthPost->post_id = $this->id;
                 $oauthPost->oauth_id = $oauth->id;
                 $oauthPost->store();
             }
         }
     }
 }
Ejemplo n.º 2
0
 function publish()
 {
     $config = DiscussHelper::getConfig();
     $post = JRequest::getVar('cid', array(0), 'POST');
     $pid = JRequest::getString('pid', '', 'POST');
     $message = '';
     $type = 'message';
     if (count($post) <= 0) {
         $message = JText::_('COM_EASYDISCUSS_INVALID_POST_ID');
         $type = 'error';
     } else {
         //send notification:
         //so we are publising posts.
         foreach ($post as $postId) {
             $item = JTable::getInstance('posts', 'Discuss');
             $item->load($postId);
             if ($item->published == DISCUSS_ID_PENDING) {
                 $callback = DiscussRouter::getRoutedUrl('index.php?option=com_easydiscuss&view=post&id=' . $item->id, false, true);
                 $sites = array('facebook', 'twitter');
                 foreach ($sites as $site) {
                     if ($config->get('main_autopost_' . $site)) {
                         $oauth = DiscussHelper::getTable('Oauth');
                         $exists = $oauth->loadByType($site);
                         $oauthPost = DiscussHelper::getTable('OauthPosts');
                         if ($exists && !empty($oauth->access_token) && !$oauthPost->exists($item->id, $oauth->id)) {
                             $consumer = DiscussHelper::getHelper('OAuth')->getConsumer($site, $config->get('main_autopost_' . $site . '_id'), $config->get('main_autopost_' . $site . '_secret'), $callback);
                             $consumer->setAccess($oauth->access_token);
                             $consumer->share($item);
                             // @rule: Store this as sent
                             $oauthPost->set('post_id', $item->id);
                             $oauthPost->set('oauth_id', $oauth->id);
                             $oauthPost->store();
                         }
                     }
                 }
                 // @rule: Send out notifications when the pending moderation items are being published.
                 DiscussHelper::sendNotification($item, $item->parent_id, true, $item->user_id, $item->published);
                 // only if the post is a discussion
                 if ($config->get('integration_pingomatic') && empty($item->parent_id)) {
                     $pingo = DiscussHelper::getHelper('Pingomatic');
                     $pingo->ping($item->title, DiscussRouter::getRoutedURL('index.php?option=com_easydiscuss&view=post&id=' . $item->id, true, true));
                 }
                 $user = JFactory::getUser($item->user_id);
                 if ($item->parent_id) {
                     DiscussHelper::getHelper('jomsocial')->addActivityReply($item);
                     DiscussHelper::getHelper('easysocial')->replyDiscussionStream($item);
                 } else {
                     DiscussHelper::getHelper('jomsocial')->addActivityQuestion($item);
                     DiscussHelper::getHelper('easysocial')->createDiscussionStream($item);
                 }
                 if ($user->id) {
                     // Add logging for user.
                     DiscussHelper::getHelper('History')->log('easydiscuss.new.discussion', $user->id, JText::sprintf('COM_EASYDISCUSS_BADGES_HISTORY_NEW_POST', $item->title), $item->id);
                     DiscussHelper::getHelper('Badges')->assign('easydiscuss.new.discussion', $user->id);
                     DiscussHelper::getHelper('Points')->assign('easydiscuss.new.discussion', $user->id);
                     // Assign badge for EasySocial
                     DiscussHelper::getHelper('EasySocial')->assignBadge('create.question', $user->id, JText::sprintf('COM_EASYDISCUSS_BADGES_HISTORY_NEW_POST', $item->title));
                     // assign new ranks.
                     DiscussHelper::getHelper('ranks')->assignRank($user->id, $config->get('main_ranking_calc_type'));
                     // aup
                     DiscussHelper::getHelper('Aup')->assign(DISCUSS_POINTS_NEW_DISCUSSION, $user->id, $item->title);
                 }
             }
         }
         //$model		= $this->getModel( 'Posts' );
         $model = DiscussHelper::getModel('Posts', true);
         if ($model->publish($post, 1)) {
             $message = JText::_('COM_EASYDISCUSS_POSTS_PUBLISHED');
         } else {
             $message = JText::_('COM_EASYDISCUSS_ERROR_PUBLISHING');
             $type = 'error';
         }
     }
     $pidLink = '';
     if (!empty($pid)) {
         $pidLink = '&pid=' . $pid;
     }
     DiscussHelper::setMessageQueue($message, $type);
     $this->setRedirect('index.php?option=com_easydiscuss&view=posts' . $pidLink);
 }