public function deleteForum(Forum $forum)
 {
     $forum->delete();
     Cache::flush();
     return Redirect::to('dashboard/storyteller/manage/forums');
 }
 function run($request)
 {
     set_time_limit(0);
     // check to see if this has been run before. If it has then we will have already
     // have removed the parentID field
     $checkForMigration = DB::query("SHOW COLUMNS FROM \"Post\"")->column();
     if (!in_array('ParentID', $checkForMigration)) {
         echo "Script has already ran. You can only run the migration script once.\n";
         return false;
     }
     // go through all the posts with a parent ID = 0 and create the new thread objects
     $oldThreads = DB::query("SELECT * FROM \"Post\" WHERE \"ParentID\" = '0'");
     if ($oldThreads) {
         $toCreateTotal = $oldThreads->numRecords();
         echo "Creating " . $toCreateTotal . " new Forum Threads \n";
         $holder = DataObject::get_one("ForumHolder");
         if (!$holder) {
             return user_error('No Forum Holder Found', E_USER_ERROR);
         }
         $failbackForum = new Forum();
         $failbackForum->Title = "Unimported Threads";
         $failbackForum->ParentID = $holder->ID;
         $failbackForum->write();
         $needsFailback = false;
         $totalThreadsSuccessfulCount = 0;
         $totalThreadsErroredCount = 0;
         while ($oldThread = $oldThreads->nextRecord()) {
             $hasError = false;
             $thread = new ForumThread();
             if (isset($oldThread['Title'])) {
                 $thread->Title = $oldThread['Title'];
             } else {
                 $hasError = true;
                 $thread->Title = "Question";
             }
             $thread->NumViews = isset($oldThread['NumViews']) ? $oldThread['NumViews'] : 0;
             $thread->IsSticky = isset($oldThread['IsSticky']) ? $oldThread['IsSticky'] : false;
             $thread->IsReadOnly = isset($oldThread['IsReadOnly']) ? $oldThread['IsReadOnly'] : false;
             $thread->IsGlobalSticky = isset($oldThread['IsGlobalSticky']) ? $oldThread['IsGlobalSticky'] : false;
             if (isset($oldThread['ForumID'])) {
                 $thread->ForumID = $oldThread['ForumID'];
             } else {
                 $hasError = true;
                 $needsFailback = true;
                 $thread->ForumID = $failbackForum->ID;
             }
             $thread->write();
             echo "Converted Thread: {$thread->ID} - {$thread->Title}. \n";
             // update all the children
             DB::query("\n\t\t\t\t\tUPDATE \"Post\" \n\t\t\t\t\tSET \"ThreadID\" = '{$thread->ID}', \"ForumID\" = '{$thread->ForumID}'\n\t\t\t\t\tWHERE \"TopicID\" = '" . $oldThread['ID'] . "'\n\t\t\t\t");
             if (!$hasError) {
                 $totalThreadsSuccessfulCount++;
             } else {
                 $totalThreadsErroredCount++;
             }
         }
     }
     echo "Converted {$totalThreadsSuccessfulCount} threads. Could not import {$totalThreadsErroredCount} threads.<br />";
     if (!$needsFailback) {
         $failbackForum->delete();
     } else {
         echo "Incorrectly imported threads are available to self moderate at <a href='" . $failbackForum->Link() . "'>here</a><br />";
     }
     // transfer subscriptions
     // was a rename table but mysql had locking issues.
     $subscriptions = DB::query("SELECT * FROM \"Post_Subscription\"");
     $subCount = 0;
     if ($subscriptions) {
         while ($sub = $subscriptions->nextRecord()) {
             // don't import really odd data
             if (isset($sub['TopicID']) && isset($sub['MemberID'])) {
                 $subCount++;
                 $threadSub = new ForumThread_Subscription();
                 $threadSub->ThreadID = $sub['TopicID'];
                 $threadSub->MemberID = $sub['MemberID'];
                 $threadSub->write();
             }
         }
     }
     echo "Transferred {$subCount} Thread Subscriptions<br />";
     // Update the permissions on the forums. The Posters, Viewers have changed from a int field
     // to an actual modelled relationship
     $forums = DataObject::get('Forum');
     if ($forums) {
         foreach ($forums as $forum) {
             $forum->ForumPostersGroupID = DB::query("SELECT \"ForumPostersGroup\" FROM \"Forum\" WHERE \"ID\" = '{$forum->ID}'")->value();
             if ($viewingGroup = DB::query("SELECT \"ForumViewersGroup\" FROM \"Forum\" WHERE \"ID\" = '{$forum->ID}'")->value()) {
                 $forum->ViewerGroups()->add(DataObject::get_by_id('Group', $viewingGroup));
             }
             $forum->write();
         }
     }
     // cleanup task. Delete old columns which are hanging round
     DB::dontRequireField('Post', 'ParentID');
     DB::dontRequireField('Post', 'TopicID');
     DB::dontRequireField('Post', 'Title');
     DB::dontRequireField('Post', 'NumViews');
     DB::dontRequireField('Post', 'IsSticky');
     DB::dontRequireField('Post', 'IsReadOnly');
     DB::dontRequireField('Post', 'IsGlobalSticky');
     DB::dontRequireTable('Post_Subscription');
     DB::dontRequireField('Forum', 'ForumViewersGroup');
     DB::dontRequireField('Forum', 'ForumViewersGroupID');
     DB::dontRequireField("Forum", 'ForumPostersGroup');
     echo "Renamed old data columns in Post and removed Post_Subscription table <br />";
     $this->attachLastPostIDs();
     echo "Set ForumThread last post and update LastEdited to the most recent post <br />";
     echo "Finished<br />";
 }
Beispiel #3
0
 function delete($sure, $really_sure, $really_really_sure)
 {
     if (!$sure || !$really_sure || !$really_really_sure) {
         $this->setMissingParamsError();
         return false;
     }
     if ($this->getID() == $GLOBALS['sys_news_group'] || $this->getID() == 1 || $this->getID() == $GLOBALS['sys_stats_group'] || $this->getID() == $GLOBALS['sys_peer_rating_group']) {
         $this->setError(_('Cannot Delete System Group'));
         return false;
     }
     $perm =& $this->getPermission(session_get_user());
     if (!$perm || !is_object($perm)) {
         $this->setPermissionDeniedError();
         return false;
     } elseif ($perm->isError()) {
         $this->setPermissionDeniedError();
         return false;
     } elseif (!$perm->isSuperUser()) {
         $this->setPermissionDeniedError();
         return false;
     }
     db_begin();
     //
     //	Remove all the members
     //
     $members =& $this->getMembers();
     for ($i = 0; $i < count($members); $i++) {
         $this->removeUser($members[$i]->getID());
     }
     //
     //	Delete Trackers
     //
     $atf = new ArtifactTypeFactory($this);
     $at_arr =& $atf->getArtifactTypes();
     for ($i = 0; $i < count($at_arr); $i++) {
         if (!is_object($at_arr[$i])) {
             printf(_("Not Object: ArtifactType: %d"), $i);
             continue;
         }
         $at_arr[$i]->delete(1, 1);
     }
     //
     //	Delete Forums
     //
     $ff = new ForumFactory($this);
     $f_arr =& $ff->getForums();
     for ($i = 0; $i < count($f_arr); $i++) {
         if (!is_object($f_arr[$i])) {
             printf(_("Not Object: Forum: %d"), $i);
             continue;
         }
         $f_arr[$i]->delete(1, 1);
         //echo 'ForumFactory'.db_error();
     }
     //
     //	Delete Subprojects
     //
     $pgf = new ProjectGroupFactory($this);
     $pg_arr =& $pgf->getProjectGroups();
     for ($i = 0; $i < count($pg_arr); $i++) {
         if (!is_object($pg_arr[$i])) {
             printf(_("Not Object: ProjectGroup: %d"), $i);
             continue;
         }
         $pg_arr[$i]->delete(1, 1);
         //echo 'ProjectGroupFactory'.db_error();
     }
     //
     //	Delete FRS Packages
     //
     //$frspf = new FRSPackageFactory($this);
     $res = db_query("SELECT * FROM frs_package WHERE group_id='" . $this->getID() . "'");
     //echo 'frs_package'.db_error();
     //$frsp_arr =& $frspf->getPackages();
     while ($arr = db_fetch_array($res)) {
         //if (!is_object($pg_arr[$i])) {
         //	echo "Not Object: ProjectGroup: ".$i;
         //	continue;
         //}
         $frsp = new FRSPackage($this, $arr['package_id'], $arr);
         $frsp->delete(1, 1);
     }
     //
     //	Delete news
     //
     $news_group =& group_get_object($GLOBALS['sys_news_group']);
     $res = db_query("SELECT forum_id FROM news_bytes WHERE group_id='" . $this->getID() . "'");
     for ($i = 0; $i < db_numrows($res); $i++) {
         $Forum = new Forum($news_group, db_result($res, $i, 'forum_id'));
         if (!$Forum->delete(1, 1)) {
             printf(_("Could Not Delete News Forum: %d"), $Forum->getID());
         }
     }
     $res = db_query("DELETE FROM news_bytes WHERE group_id='" . $this->getID() . "'");
     //
     //	Delete docs
     //
     $res = db_query("DELETE FROM doc_data WHERE group_id='" . $this->getID() . "'");
     //echo 'doc_data'.db_error();
     $res = db_query("DELETE FROM doc_groups WHERE group_id='" . $this->getID() . "'");
     //echo 'doc_groups'.db_error();
     //
     //	Delete group history
     //
     $res = db_query("DELETE FROM group_history WHERE group_id='" . $this->getID() . "'");
     //echo 'group_history'.db_error();
     //
     //	Delete group plugins
     //
     $res = db_query("DELETE FROM group_plugin WHERE group_id='" . $this->getID() . "'");
     //echo 'group_plugin'.db_error();
     //
     //	Delete group cvs stats
     //
     $res = db_query("DELETE FROM stats_cvs_group WHERE group_id='" . $this->getID() . "'");
     //echo 'stats_cvs_group'.db_error();
     //
     //	Delete Surveys
     //
     $sf = new SurveyFactory($this);
     $s_arr =& $sf->getSurveys();
     for ($i = 0; $i < count($s_arr); $i++) {
         if (!is_object($s_arr[$i])) {
             printf(_("Not Object: Survey: %d"), $i);
             continue;
         }
         $s_arr[$i]->delete();
         //echo 'SurveyFactory'.db_error();
     }
     //
     //	Delete SurveyQuestions
     //
     $sqf = new SurveyQuestionFactory($this);
     $sq_arr =& $sqf->getSurveyQuestions();
     for ($i = 0; $i < count($sq_arr); $i++) {
         if (!is_object($sq_arr[$i])) {
             printf(_("Not Object: SurveyQuestion: %d"), $i);
             continue;
         }
         $sq_arr[$i]->delete();
         //echo 'SurveyQuestionFactory'.db_error();
     }
     //
     //	Delete Mailing List Factory
     //
     $mlf = new MailingListFactory($this);
     $ml_arr =& $mlf->getMailingLists();
     for ($i = 0; $i < count($ml_arr); $i++) {
         if (!is_object($ml_arr[$i])) {
             printf(_("Not Object: MailingList: %d"), $i);
             continue;
         }
         if (!$ml_arr[$i]->delete(1, 1)) {
             $this->setError(_('Could not properly delete the mailing list'));
         }
         //echo 'MailingListFactory'.db_error();
     }
     //
     //	Delete trove
     //
     $res = db_query("DELETE FROM trove_group_link WHERE group_id='" . $this->getID() . "'");
     $res = db_query("DELETE FROM trove_agg WHERE group_id='" . $this->getID() . "'");
     //
     //	Delete counters
     //
     $res = db_query("DELETE FROM project_sums_agg WHERE group_id='" . $this->getID() . "'");
     //echo 'project_sums_agg'.db_error();
     $res = db_query("INSERT INTO deleted_groups (\n\t\tunix_group_name,delete_date,isdeleted) VALUES \n\t\t('" . $this->getUnixName() . "','" . time() . "','0')");
     //echo 'InsertIntoDeleteQueue'.db_error();
     $res = db_query("DELETE FROM groups WHERE group_id='" . $this->getID() . "'");
     //echo 'DeleteGroup'.db_error();
     db_commit();
     if (!$res) {
         return false;
     }
     $hook_params = array();
     $hook_params['group'] = $this;
     $hook_params['group_id'] = $this->getID();
     plugin_hook("group_delete", $hook_params);
     if (isset($GLOBALS['sys_upload_dir']) && $this->getUnixName()) {
         exec('/bin/rm -rf ' . $GLOBALS['sys_upload_dir'] . '/' . $this->getUnixName() . '/');
     }
     if (isset($GLOBALS['sys_ftp_upload_dir']) && $this->getUnixName()) {
         exec('/bin/rm -rf ' . $GLOBALS['sys_ftp_upload_dir'] . '/' . $this->getUnixName() . '/');
     }
     //
     //	Delete reporting
     //
     $res = db_query("DELETE FROM rep_group_act_weekly WHERE group_id='" . $this->getID() . "'");
     //echo 'rep_group_act_weekly'.db_error();
     $res = db_query("DELETE FROM rep_group_act_monthly WHERE group_id='" . $this->getID() . "'");
     //echo 'rep_group_act_monthly'.db_error();
     $res = db_query("DELETE FROM rep_group_act_daily WHERE group_id='" . $this->getID() . "'");
     //echo 'rep_group_act_daily'.db_error();
     unset($this->data_array);
     return true;
 }
Beispiel #4
0
 public function admin_destroy_forum()
 {
     if (!isset($_POST['id'])) {
         error(__("Error"), __("No forum ID specified.", "discuss"));
     }
     if (!isset($_POST['hash']) or $_POST['hash'] != Config::current()->secure_hashkey) {
         show_403(__("Access Denied"), __("Invalid security key."));
     }
     $forum = new Forum($_POST['id']);
     if ($forum->no_results) {
         error(__("Error"), __("Invalid forum ID specified.", "discuss"));
     }
     if (!$forum->deletable()) {
         show_403(__("Access Denied"), __("You do not have sufficient privileges to delete this forum.", "discuss"));
     }
     foreach ($forum->topics as $topic) {
         $topic->update(null, null, $_POST['move_forum']);
     }
     Forum::delete($forum->id);
     Flash::notice(__("Forum deleted.", "discuss"), "/admin/?action=manage_forums");
 }