/** * Merge the old user into the new user. * * @param int $OldUserID The ID of the old user. * @param int $NewUserID The ID of the new user. */ public function merge($OldUserID, $NewUserID) { $OldUser = $this->getID($OldUserID, DATASET_TYPE_ARRAY); $NewUser = $this->getID($NewUserID, DATASET_TYPE_ARRAY); if (!$OldUser || !$NewUser) { throw new Gdn_UserException("Could not find one or both users to merge."); } $Map = ['UserID', 'Name', 'Email', 'CountVisits', 'CountDiscussions', 'CountComments']; $Result = ['MergeID' => null, 'Before' => ['OldUser' => arrayTranslate($OldUser, $Map), 'NewUser' => arrayTranslate($NewUser, $Map)]]; // Start the merge. $MergeID = $this->mergeStart($OldUserID, $NewUserID); // Copy all discussions from the old user to the new user. $this->mergeCopy($MergeID, 'Discussion', 'InsertUserID', $OldUserID, $NewUserID); // Copy all the comments from the old user to the new user. $this->mergeCopy($MergeID, 'Comment', 'InsertUserID', $OldUserID, $NewUserID); // Update the last comment user ID. $this->SQL->put('Discussion', ['LastCommentUserID' => $NewUserID], ['LastCommentUserID' => $OldUserID]); // Clear the categories cache. CategoryModel::clearCache(); // Copy all of the activities. $this->mergeCopy($MergeID, 'Activity', 'NotifyUserID', $OldUserID, $NewUserID); $this->mergeCopy($MergeID, 'Activity', 'InsertUserID', $OldUserID, $NewUserID); $this->mergeCopy($MergeID, 'Activity', 'ActivityUserID', $OldUserID, $NewUserID); // Copy all of the activity comments. $this->mergeCopy($MergeID, 'ActivityComment', 'InsertUserID', $OldUserID, $NewUserID); // Copy all conversations. $this->mergeCopy($MergeID, 'Conversation', 'InsertUserID', $OldUserID, $NewUserID); $this->mergeCopy($MergeID, 'ConversationMessage', 'InsertUserID', $OldUserID, $NewUserID, 'MessageID'); $this->mergeCopy($MergeID, 'UserConversation', 'UserID', $OldUserID, $NewUserID, 'ConversationID'); $this->EventArguments['MergeID'] = $MergeID; $this->EventArguments['OldUser'] = $OldUser; $this->EventArguments['NewUser'] = $NewUser; $this->fireEvent('Merge'); $this->mergeFinish($MergeID); $OldUser = $this->getID($OldUserID, DATASET_TYPE_ARRAY); $NewUser = $this->getID($NewUserID, DATASET_TYPE_ARRAY); $Result['MergeID'] = $MergeID; $Result['After'] = ['OldUser' => arrayTranslate($OldUser, $Map), 'NewUser' => arrayTranslate($NewUser, $Map)]; return $Result; }
/** * Enabling and disabling categories from list. * * @since 2.0.0 * @access public */ public function manageCategories() { // Check permission $this->permission(['Garden.Community.Manage', 'Garden.Settings.Manage'], false); $this->setHighlightRoute('vanilla/settings/categories'); $this->addJsFile('manage-categories.js'); $this->addJsFile('jquery.alphanumeric.js'); // This now works on latest jQuery version 1.10.2 // // Jan29, 2014, upgraded jQuery UI to 1.10.3 from 1.8.11 $this->addJsFile('nestedSortable/jquery-ui.min.js'); // Newer nestedSortable, but does not work. //$this->addJsFile('js/library/nestedSortable/jquery.mjs.nestedSortable.js'); // old jquery-ui //$this->addJsFile('js/library/nestedSortable.1.3.4/jquery-ui-1.8.11.custom.min.js'); $this->addJsFile('nestedSortable.1.3.4/jquery.ui.nestedSortable.js'); $this->title(t('Categories')); // Get category data $CategoryData = $this->CategoryModel->getAll('TreeLeft'); // Set CanDelete per-category so we can override later if we want. $canDelete = checkPermission(['Garden.Community.Manage', 'Garden.Settings.Manage']); array_walk($CategoryData->result(), function (&$value) use($canDelete) { setvalr('CanDelete', $value, $canDelete); }); $this->setData('CategoryData', $CategoryData, true); // Setup & save forms $Validation = new Gdn_Validation(); $ConfigurationModel = new Gdn_ConfigurationModel($Validation); $ConfigurationModel->setField(array('Vanilla.Categories.MaxDisplayDepth', 'Vanilla.Categories.DoHeadings', 'Vanilla.Categories.HideModule')); // Set the model on the form. $this->Form->setModel($ConfigurationModel); // Define MaxDepthOptions $DepthData = array(); $DepthData['2'] = sprintf(t('more than %s deep'), plural(1, '%s level', '%s levels')); $DepthData['3'] = sprintf(t('more than %s deep'), plural(2, '%s level', '%s levels')); $DepthData['4'] = sprintf(t('more than %s deep'), plural(3, '%s level', '%s levels')); $DepthData['0'] = t('never'); $this->setData('MaxDepthData', $DepthData); // If seeing the form for the first time... if ($this->Form->authenticatedPostBack() === false) { // Apply the config settings to the form. $this->Form->setData($ConfigurationModel->Data); } else { if ($this->Form->save() !== false) { CategoryModel::clearCache(); $this->informMessage(t("Your settings have been saved.")); } } // Render default view $this->render(); }