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); }
$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 {
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')); }
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); }
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); }
/** * 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; }
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; }