/** * Homepage of VanillaForums.org. * * @param Gdn_Controller $sender */ public function homeController_homepage_create($sender) { try { $AddonModel = new AddonModel(); $Addon = $AddonModel->getSlug('vanilla-core', true); $sender->setData('CountDownloads', val('CountDownloads', $Addon)); $sender->setData('Version', val('Version', $Addon)); $sender->setData('DateUploaded', val('DateInserted', $Addon)); } catch (Exception $ex) { } $sender->title('The most powerful custom community solution in the world'); $sender->setData('Description', "Vanilla is forum software that powers discussions on hundreds of thousands of sites. Built for flexibility and integration, Vanilla is the best, most powerful community solution in the world."); $sender->Head->addTag('meta', array('name' => 'description', 'content' => $sender->data('Description'))); $sender->clearJsFiles(); $sender->addJsFile('jquery.js', 'vforg'); $sender->addJsFile('easySlider1.7.js', 'vforg'); saveToConfig('Garden.Embed.Allow', false, false); // Prevent JS errors $sender->clearCssFiles(); $sender->addCssFile('vforg-home.css', 'vforg'); $sender->MasterView = 'empty'; $sender->render('index', 'home', 'vforg'); }
/** * Add a method to the ModerationController to handle merging discussions. * * @param Gdn_Controller $Sender */ public function moderationController_mergeDiscussions_create($Sender) { $Session = Gdn::session(); $Sender->Form = new Gdn_Form(); $Sender->title(t('Merge Discussions')); $DiscussionModel = new DiscussionModel(); $CheckedDiscussions = Gdn::userModel()->getAttribute($Session->User->UserID, 'CheckedDiscussions', array()); if (!is_array($CheckedDiscussions)) { $CheckedDiscussions = array(); } $DiscussionIDs = $CheckedDiscussions; $Sender->setData('DiscussionIDs', $DiscussionIDs); $CountCheckedDiscussions = count($DiscussionIDs); $Sender->setData('CountCheckedDiscussions', $CountCheckedDiscussions); $Discussions = $DiscussionModel->SQL->whereIn('DiscussionID', $DiscussionIDs)->get('Discussion')->resultArray(); $Sender->setData('Discussions', $Discussions); // Make sure none of the selected discussions are ghost redirects. $discussionTypes = array_column($Discussions, 'Type'); if (in_array('redirect', $discussionTypes)) { throw Gdn_UserException('You cannot merge redirects.', 400); } // Perform the merge if ($Sender->Form->authenticatedPostBack()) { // Create a new discussion record $MergeDiscussion = false; $MergeDiscussionID = $Sender->Form->getFormValue('MergeDiscussionID'); foreach ($Discussions as $Discussion) { if ($Discussion['DiscussionID'] == $MergeDiscussionID) { $MergeDiscussion = $Discussion; break; } } $RedirectLink = $Sender->Form->getFormValue('RedirectLink'); if ($MergeDiscussion) { $ErrorCount = 0; // Verify that the user has permission to perform the merge. $Category = CategoryModel::categories($MergeDiscussion['CategoryID']); if ($Category && !$Category['PermsDiscussionsEdit']) { throw permissionException('Vanilla.Discussions.Edit'); } $DiscussionModel->defineSchema(); $MaxNameLength = val('Length', $DiscussionModel->Schema->getField('Name')); // Assign the comments to the new discussion record $DiscussionModel->SQL->update('Comment')->set('DiscussionID', $MergeDiscussionID)->whereIn('DiscussionID', $DiscussionIDs)->put(); $CommentModel = new CommentModel(); foreach ($Discussions as $Discussion) { if ($Discussion['DiscussionID'] == $MergeDiscussionID) { continue; } // Create a comment out of the discussion. $Comment = arrayTranslate($Discussion, array('Body', 'Format', 'DateInserted', 'InsertUserID', 'InsertIPAddress', 'DateUpdated', 'UpdateUserID', 'UpdateIPAddress', 'Attributes', 'Spam', 'Likes', 'Abuse')); $Comment['DiscussionID'] = $MergeDiscussionID; $CommentModel->Validation->results(true); $CommentID = $CommentModel->save($Comment); if ($CommentID) { // Move any attachments (FileUpload plugin awareness) if (class_exists('MediaModel')) { $MediaModel = new MediaModel(); $MediaModel->reassign($Discussion['DiscussionID'], 'discussion', $CommentID, 'comment'); } if ($RedirectLink) { // The discussion needs to be changed to a moved link. $RedirectDiscussion = array('Name' => SliceString(sprintf(t('Merged: %s'), $Discussion['Name']), $MaxNameLength), 'Type' => 'redirect', 'Body' => formatString(t('This discussion has been <a href="{url,html}">merged</a>.'), array('url' => DiscussionUrl($MergeDiscussion))), 'Format' => 'Html'); $DiscussionModel->setField($Discussion['DiscussionID'], $RedirectDiscussion); $CommentModel->updateCommentCount($Discussion['DiscussionID']); $CommentModel->removePageCache($Discussion['DiscussionID']); } else { // Delete discussion that was merged. $DiscussionModel->delete($Discussion['DiscussionID']); } } else { $Sender->informMessage($CommentModel->Validation->resultsText()); $ErrorCount++; } } // Update counts on all affected discussions. $CommentModel->updateCommentCount($MergeDiscussionID); $CommentModel->removePageCache($MergeDiscussionID); // Clear selections Gdn::userModel()->saveAttribute($Session->UserID, 'CheckedDiscussions', false); ModerationController::informCheckedDiscussions($Sender); if ($ErrorCount == 0) { $Sender->jsonTarget('', '', 'Refresh'); } } } $Sender->render('MergeDiscussions', '', 'plugins/SplitMerge'); }
/** * Edit a Tag * * @param Gdn_Controller $Sender */ public function controller_edit($Sender) { $Sender->addSideMenu('settings/tagging'); $Sender->title(t('Edit Tag')); $TagID = val(1, $Sender->RequestArgs); // Set the model on the form. $TagModel = new TagModel(); $Sender->Form->setModel($TagModel); $Tag = $TagModel->getID($TagID); $Sender->Form->setData($Tag); // Make sure the form knows which item we are editing. $Sender->Form->addHidden('TagID', $TagID); if ($Sender->Form->authenticatedPostBack()) { // Make sure the tag is valid $TagData = $Sender->Form->getFormValue('Name'); if (!TagModel::validateTag($TagData)) { $Sender->Form->addError('@' . t('ValidateTag', 'Tags cannot contain commas.')); } // Make sure that the tag name is not already in use. if ($TagModel->getWhere(array('TagID <>' => $TagID, 'Name' => $TagData))->numRows() > 0) { $Sender->setData('MergeTagVisible', true); if (!$Sender->Form->getFormValue('MergeTag')) { $Sender->Form->addError('The specified tag name is already in use.'); } } if ($Sender->Form->Save()) { $Sender->informMessage(t('Your changes have been saved.')); } } $Sender->render('addedit', '', 'plugins/Tagging'); }