Esempio n. 1
0
 function fbMovePosts($catid, $isMod, $return)
 {
     $app =& JFactory::getApplication();
     $backUrl = $app->getUserState("com_kunena.ActionBulk");
     $kunena_db =& JFactory::getDBO();
     $kunena_my =& JFactory::getUser();
     // $isMod if user is moderator in the current category
     if (!$isMod) {
         // Test also if user is a moderator in some other category
         $kunena_db->setQuery("SELECT userid FROM #__fb_moderation WHERE userid='{$kunena_my->id}'");
         $isMod = $kunena_db->loadResult();
         check_dberror("Unable to load moderation info.");
     }
     $isAdmin = CKunenaTools::isModOrAdmin();
     //isMod will stay until better group management comes in
     if (!$isAdmin && !$isMod) {
         $app->redirect($return, _POST_NOT_MODERATOR);
     }
     $catid = (int) $catid;
     if ($catid > 0) {
         $items = fbGetArrayInts("fbDelete");
         // start iterating here
         foreach ($items as $id => $value) {
             $id = (int) $id;
             $kunena_db->setQuery("SELECT subject, catid, time AS timestamp FROM #__fb_messages WHERE id='{$id}'");
             $oldRecord = $kunena_db->loadObjectList();
             check_dberror("Unable to load message detail.");
             $newCatObj = new jbCategory($kunena_db, $oldRecord[0]->catid);
             if (fb_has_moderator_permission($kunena_db, $newCatObj, $kunena_my->id, $isAdmin)) {
                 $newSubject = _MOVED_TOPIC . " " . $oldRecord[0]->subject;
                 $kunena_db->setQuery("SELECT MAX(time) AS timestamp FROM #__fb_messages WHERE thread='{$id}'");
                 $lastTimestamp = $kunena_db->loadResult();
                 check_dberror("Unable to load messages max(time).");
                 if ($lastTimestamp == "") {
                     $lastTimestamp = $oldRecord[0]->timestamp;
                 }
                 //perform the actual move
                 $kunena_db->setQuery("UPDATE #__fb_messages SET `catid`='{$catid}' WHERE `id`='{$id}' OR `thread`='{$id}'");
                 $kunena_db->query();
                 check_dberror("Unable to move thread.");
                 $err = _POST_SUCCESS_MOVE;
             } else {
                 $err = _POST_NOT_MODERATOR;
             }
         }
         //end foreach
     } else {
         $err = _POST_NO_DEST_CATEGORY;
     }
     CKunenaTools::reCountBoards();
     $app->redirect($return, $err);
 }
Esempio n. 2
0
         $kunena_db->query();
     }
     //end parenting foreach loop
     //inherit hits from old topic
     $kunena_db->setQuery("SELECT hits FROM #__fb_messages WHERE id='{$id}'");
     $hits = (int) $kunena_db->loadResult();
     $kunena_db->setQuery("UPDATE #__fb_messages set hits={$hits} WHERE id={$new_topic}");
     $kunena_db->query();
     //set the highest sorting for old topic
     $kunena_db->setQuery("UPDATE #__fb_messages set ordering='2' WHERE id={$id}");
     $kunena_db->query();
     //copy over sticky bit to new topic
     $kunena_db->setQuery("UPDATE #__fb_messages set ordering='{$sticky_bit}' WHERE id={$new_topic} AND parent=0");
     $kunena_db->query();
     //split succeeded
     CKunenaTools::reCountBoards();
     echo '<br /><br /><div align="center">' . _POST_SUCCESS_SPLIT . "</div><br />";
     echo CKunenaLink::GetLatestPostAutoRedirectHTML($fbConfig, $new_topic, $fbConfig->messages_per_page, $catid);
 } else {
     if ($do == "subscribe") {
         $catid = (int) $catid;
         $id = (int) $id;
         $success_msg = _POST_NO_SUBSCRIBED_TOPIC;
         $kunena_db->setQuery("SELECT thread, catid from #__fb_messages WHERE id='{$id}'");
         if ($id && $kunena_my->id && $kunena_db->query()) {
             $row = $kunena_db->loadObject();
             //check for permission
             if (!$is_Moderator) {
                 if ($fbSession->allowed != "na") {
                     $allow_forum = explode(',', $fbSession->allowed);
                 } else {
Esempio n. 3
0
function trashrestore($option, $cid)
{
    $kunena_app =& JFactory::getApplication();
    $kunena_db =& JFactory::getDBO();
    JArrayHelper::toInteger($cid);
    if ($cid) {
        foreach ($cid as $id) {
            $kunena_db->setQuery("SELECT * FROM #__kunena_messages WHERE id={$id} AND hold=2");
            $mes = $kunena_db->loadObject();
            if (KunenaError::checkDatabaseError()) {
                return;
            }
            $kunena_db->setQuery("UPDATE #__kunena_messages SET hold=0 WHERE hold IN (2,3) AND thread={$mes->thread} ");
            $kunena_db->query();
            if (KunenaError::checkDatabaseError()) {
                return;
            }
            CKunenaTools::reCountUserPosts();
            CKunenaTools::reCountBoards();
        }
    }
    while (@ob_end_clean()) {
    }
    $kunena_app->redirect(JURI::base() . "index.php?option={$option}&task=showtrashview", JText::_('COM_KUNENA_TRASH_RESTORE_DONE'));
}
Esempio n. 4
0
 public function undelete($mesid)
 {
     if (!$this->parent || $this->parent->id != $mesid) {
         $this->loadMessage($mesid);
     }
     if (!$this->canUndelete()) {
         return false;
     }
     // Execute undelete
     $query = "UPDATE #__kunena_messages SET `hold`=0 WHERE `id`={$this->_db->quote($this->parent->id)};";
     $this->_db->setQuery($query);
     $this->_db->query();
     $dberror = $this->checkDatabaseError();
     if ($dberror) {
         return $this->setError('-undelete-', JText::_('COM_KUNENA_POST_ERROR_UNDELETE'));
     }
     // Last but not least update forum stats
     CKunenaTools::reCountBoards();
     $this->set('id', $this->parent->id);
     // Activity integration
     $activity = KunenaFactory::getActivityIntegration();
     $activity->onAfterUndelete($this);
     return empty($this->errors);
 }
Esempio n. 5
0
 function KUndelete()
 {
     $kunena_app = JFactory::getApplication();
     $kunena_db = JFactory::getDBO();
     $backUrl = $kunena_app->getUserState("com_kunena.ActionBulk");
     if (!JRequest::checkToken()) {
         $kunena_app->enqueueMessage(JText::_('COM_KUNENA_ERROR_TOKEN'), 'error');
         while (@ob_end_clean()) {
         }
         $kunena_app->redirect($backUrl);
     }
     require_once KUNENA_PATH_LIB . '/kunena.moderation.class.php';
     $kunena_mod = CKunenaModeration::getInstance();
     $items = KGetArrayInts("cb");
     // start iterating here
     foreach ($items as $id => $value) {
         // Need to get hold value to check if the message is right deleted
         $query = "SELECT MAX(IF(`hold`=2 OR `hold`=3, 1, 0)) FROM #__kunena_messages WHERE `thread`={$kunena_db->quote($id)} GROUP BY `thread`;";
         $kunena_db->setQuery($query);
         $messageHold = $kunena_db->loadResult();
         KunenaError::checkDatabaseError();
         if ($messageHold) {
             $delete = $kunena_mod->UndeleteThread($id, true);
             if (!$delete) {
                 $kunena_app->enqueueMessage($kunena_mod->getErrorMessage(), 'notice');
             } else {
                 $kunena_app->enqueueMessage(JText::_('COM_KUNENA_POST_SUCCESS_UNDELETE'));
             }
             // Last but not least update forum stats
             CKunenaTools::reCountBoards();
             // Activity integration
             $activity = KunenaFactory::getActivityIntegration();
             $activity->onAfterUndelete($this);
         }
     }
     //end foreach
     while (@ob_end_clean()) {
     }
     $kunena_app->redirect($backUrl);
 }
Esempio n. 6
0
 /**
  * Method to delete the KunenaCategory object from the database
  *
  * @access	public
  * @return	boolean	True on success
  * @since 1.6
  */
 public function delete()
 {
     if (!$this->exists()) {
         return true;
     }
     // Create the user table object
     $table =& $this->getTable();
     $result = $table->delete($this->id);
     if (!$result) {
         $this->setError($table->getError());
     }
     $this->_exists = false;
     $db = JFactory::getDBO();
     // Clear sessions
     $queries[] = "UPDATE #__kunena_sessions SET allowed='na'";
     // Delete moderators
     $queries[] = "DELETE FROM #__kunena_moderation WHERE catid={$db->quote($this->id)}";
     // Delete favorites
     $queries[] = "DELETE f FROM #__kunena_favorites AS f LEFT JOIN #__kunena_messages AS m ON m.id=f.thread WHERE m.catid={$db->quote($this->id)}";
     // Delete subscriptions
     $queries[] = "DELETE s FROM #__kunena_subscriptions AS s LEFT JOIN #__kunena_messages AS m ON m.id=s.thread WHERE m.catid={$db->quote($this->id)}";
     // Delete category subscriptions
     $queries[] = "DELETE FROM #__kunena_subscriptions_categories WHERE catid={$db->quote($this->id)}";
     // Delete thank yous
     $queries[] = "DELETE t FROM #__kunena_thankyou AS t LEFT JOIN #__kunena_messages AS m ON m.id=t.postid WHERE m.catid={$db->quote($this->id)}";
     // Delete poll users
     $queries[] = "DELETE p FROM #__kunena_polls_users AS p LEFT JOIN #__kunena_messages AS m ON m.id=p.pollid WHERE m.catid={$db->quote($this->id)}";
     // Delete poll options
     $queries[] = "DELETE p FROM #__kunena_polls_options AS p LEFT JOIN #__kunena_messages AS m ON m.id=p.pollid WHERE m.catid={$db->quote($this->id)}";
     // Delete polls
     $queries[] = "DELETE p FROM #__kunena_polls AS p LEFT JOIN #__kunena_messages AS m ON m.id=p.threadid WHERE m.catid={$db->quote($this->id)}";
     // Delete messages
     $queries[] = "DELETE m, t FROM #__kunena_messages AS m INNER JOIN #__kunena_messages_text AS t ON m.id=t.mesid WHERE m.catid={$db->quote($this->id)}";
     // TODO: delete attachments
     foreach ($queries as $query) {
         $db->setQuery($query);
         $db->query();
         KunenaError::checkDatabaseError();
     }
     // TODO: remove dependency
     require_once KPATH_SITE . '/class.kunena.php';
     CKunenaTools::reCountUserPosts();
     CKunenaTools::reCountBoards();
     return $result;
 }
Esempio n. 7
0
 public function stepFinish()
 {
     $entryfiles = array(array(KPATH_ADMIN, 'api', 'php'), array(KPATH_ADMIN, 'admin.kunena', 'php'), array(KPATH_SITE, 'router', 'php'), array(KPATH_SITE, 'kunena', 'php'));
     $lang = JFactory::getLanguage();
     $lang->load('com_kunena', JPATH_SITE);
     // TODO: remove dependence
     require_once KPATH_ADMIN . '/api.php';
     kimport('factory');
     require_once KPATH_SITE . '/class.kunena.php';
     $this->createMenu(false);
     CKunenaTools::reCountBoards();
     foreach ($entryfiles as $fileparts) {
         list($path, $filename, $ext) = $fileparts;
         if (is_file("{$path}/{$filename}.new.{$ext}")) {
             $success = JFile::delete("{$path}/{$filename}.{$ext}");
             if (!$success) {
                 $this->addStatus(JText::_('COM_KUNENA_INSTALL_DELETE_STATUS_FAIL') . " {$filename}.{$ext}", false, '');
             }
             $success = JFile::move("{$path}/{$filename}.new.{$ext}", "{$path}/{$filename}.{$ext}");
             if (!$success) {
                 $this->addStatus(JText::_('COM_KUNENA_INSTALL_RENAMING_FAIL') . " {$filename}.new.{$ext}", false, '');
             }
         }
     }
     // Cleanup directory structure
     if (!Kunena::isSVN()) {
         if (JFolder::exists(KPATH_ADMIN . '/language')) {
             JFolder::delete(KPATH_ADMIN . '/language');
         }
         if (JFolder::exists(KPATH_SITE . '/language')) {
             JFolder::delete(KPATH_SITE . '/language');
         }
     }
     if (!$this->getError()) {
         $this->updateVersionState('');
         $this->addStatus(JText::_('COM_KUNENA_INSTALL_SUCCESS'), true, '');
         $this->setStep($this->getStep() + 1);
     }
 }
 protected function _Delete($MessageID, $DeleteAttachments = false, $mode = KN_DEL_MESSAGE)
 {
     // Private delete function
     // $mode
     // KN_DEL_MESSAGE ... delete current message only
     // KN_DEL_THREAD  ... delete entire thread
     // KN_DEL_ATTACH  ... delete Attachments of message
     // Reset error message
     $this->_ResetErrorMessage();
     // Sanitize parameters!
     $MessageID = intval($MessageID);
     $mode = intval($mode);
     // no need to check $DeleteAttachments as we only test for true
     // Always check security clearance before taking action!
     // Only moderators can delete messages by using this function
     if (!CKunenaTools::isModerator($this->_my->id)) {
         $this->_errormsg = JText::_('COM_KUNENA_MODERATION_ERROR_NOT_MODERATOR');
         return false;
     }
     $this->_db->setQuery("SELECT `id`, `userid`, `catid`, `hold`, `parent`, `thread`, `subject`, `time` AS timestamp FROM #__kunena_messages WHERE `id`={$this->_db->Quote($MessageID)}");
     $currentMessage = $this->_db->loadObject();
     if (KunenaError::checkDatabaseError()) {
         return false;
     }
     // Check that message to be moved actually exists
     if (!is_object($currentMessage)) {
         $this->_errormsg = JText::sprintf('COM_KUNENA_MODERATION_ERROR_MESSAGE_NOT_FOUND', $MessageID);
         return false;
     }
     // Check that user has moderator permissions in the category
     if (!CKunenaTools::isModerator($this->_my->id, $currentMessage->catid)) {
         $this->_errormsg = JText::_('COM_KUNENA_MODERATION_ERROR_NOT_MODERATOR_IN_CATEGORY', $currentMessage->id, $currentMessage->catid);
         return false;
     }
     // Assemble delete logic based on $mode
     switch ($mode) {
         case KN_DEL_MESSAGE:
             //Delete only the actual message
             $sql = "UPDATE #__kunena_messages SET `hold`=2 WHERE `id`={$this->_db->Quote($MessageID)};";
             if ($currentMessage->parent == 0) {
                 $this->_setSecondMessageParent($MessageID, $currentMessage);
             }
             break;
         case KN_DEL_MESSAGE_PERMINANTLY:
             // Delete the message from the database
             // FIXME: if only admins are allowed to do this, add restriction (and make it general/changeble)
             $sql = "DELETE FROM #__kunena_messages WHERE `id`={$this->_db->Quote($MessageID)};";
             $query = "DELETE FROM #__kunena_messages_text WHERE `mesid`={$this->_db->Quote($MessageID)}; ";
             $this->_db->setQuery($query);
             $this->_db->query();
             if (KunenaError::checkDatabaseError()) {
                 return false;
             }
             if ($currentMessage->parent == 0) {
                 $this->_setSecondMessageParent($MessageID, $currentMessage);
             }
             if ($currentMessage->userid > 0) {
                 $query = "UPDATE #__kunena_users SET posts=posts-1 WHERE `userid`={$this->_db->Quote($MessageID)}; ";
                 $this->_db->setQuery($query);
                 $this->_db->query();
                 if (KunenaError::checkDatabaseError()) {
                     return false;
                 }
             }
             $this->deleteAttachments($MessageID);
             break;
         case KN_DEL_THREAD_PERMINANTLY:
             //Delete a complete thread from the databases
             $query = "SELECT `id`,`userid` FROM #__kunena_messages WHERE `thread`={$this->_db->Quote($currentMessage->thread)};";
             $this->_db->setQuery($query);
             $ThreadDatas = $this->_db->loadObjectList();
             if (KunenaError::checkDatabaseError()) {
                 return false;
             }
             $userid = array();
             $messid = array();
             if (is_array($ThreadDatas)) {
                 foreach ($ThreadDatas as $mes) {
                     $userid[] = $mes->userid;
                     $messid[] = $mes->id;
                     // Delete all attachments in this thread
                     if ($DeleteAttachments) {
                         $this->deleteAttachments($mes->id);
                     }
                 }
                 $sql2 = "DELETE FROM #__kunena_messages_text WHERE `mesid` IN ({$this->_db->Quote(implode(',', $messid))});";
                 $this->_db->setQuery($sql2);
                 $this->_db->query();
                 if (KunenaError::checkDatabaseError()) {
                     return false;
                 }
                 // Need to update number of posts of each users in this thread
                 if ($mes->userid > 0) {
                     $query = "UPDATE #__kunena_users SET posts=posts-1 WHERE `userid` IN ({$this->_db->Quote(implode(',', $userid))}); ";
                     $this->_db->setQuery($query);
                     $this->_db->query();
                     if (KunenaError::checkDatabaseError()) {
                         return false;
                     }
                 }
             }
             $sql = "DELETE FROM #__kunena_messages WHERE `thread`={$this->_db->Quote($currentMessage->thread)};";
             break;
         case KN_UNDELETE_THREAD:
             $sql1 = "UPDATE #__kunena_messages SET `hold`=0 WHERE `id`={$this->_db->Quote($MessageID)};";
             $this->_db->setQuery($sql1);
             $this->_db->query();
             if (KunenaError::checkDatabaseError()) {
                 return false;
             }
             $sql = "UPDATE #__kunena_messages SET `hold`=0 WHERE hold=3 AND `thread`={$this->_db->Quote($currentMessage->thread)} AND `id`!={$this->_db->Quote($MessageID)} ;";
             break;
         case KN_DEL_THREAD:
             //Delete a complete thread
             $sql1 = "UPDATE #__kunena_messages SET `hold`=2 WHERE `id`={$this->_db->Quote($MessageID)};";
             $this->_db->setQuery($sql1);
             $this->_db->query();
             if (KunenaError::checkDatabaseError()) {
                 return false;
             }
             $sql = "UPDATE #__kunena_messages SET `hold`=3 WHERE hold IN (0,1) AND `thread`={$this->_db->Quote($currentMessage->thread)} AND `id`!={$this->_db->Quote($MessageID)} ;";
             break;
         case KN_DEL_ATTACH:
             //Delete only the attachments
             require_once KUNENA_PATH_LIB . '/kunena.attachments.class.php';
             $attachments = CKunenaAttachments::getInstance();
             $attachments->deleteMessage($MessageID);
             break;
         default:
             // Unsupported mode - Error!
             $this->_errormsg = JText::_('COM_KUNENA_MODERATION_ERROR_UNSUPPORTED_MODE');
             return false;
     }
     // Execute delete
     if (isset($sql)) {
         $this->_db->setQuery($sql);
         $this->_db->query();
         if (KunenaError::checkDatabaseError()) {
             return false;
         }
     }
     // Remember to delete ghost post
     // FIXME: replies may have ghosts, too. What to do with them?
     $this->_db->setQuery("SELECT m.id FROM #__kunena_messages AS m INNER JOIN #__kunena_messages_text AS t ON m.`id`=t.`mesid`\n\t\t\tWHERE `moved`=1;");
     $ghostMessageID = $this->_db->loadResult();
     if (KunenaError::checkDatabaseError()) {
         return false;
     }
     if (!empty($ghostMessageID)) {
         $this->_db->setQuery("UPDATE #__kunena_messages SET `hold`=2 WHERE `id`={$this->_db->Quote($ghostMessageID)} AND `moved`=1;");
         $this->_db->query();
         if (KunenaError::checkDatabaseError()) {
             return false;
         }
     }
     // Check result to see if we need to abord and set error message
     // When done log the action
     $this->_Log('Delete', $MessageID, 0, '', 0, $mode);
     // Last but not least update forum stats
     CKunenaTools::reCountBoards();
     return true;
 }