ObjectName */ public $Uses = array('Form', 'ActionModel'); /** * Make this look like a dashboard page and add the resources * * @since 1.0 * @access public */ public function Initialize() { parent::Initialize(); Gdn_Theme::Section('Dashboard'); if($this->Menu) { $this->Menu->HighlightRoute('/action'); } $this->AddJsFile('jquery-ui-1.10.0.custom.min.js'); $this->AddJsFile('admin.actions.js'); $this->AddCssFile('reactions.css'); } /** * Manage the available actions for reactions * * @param int $Page */ public function Settings($Page = '') { $this->Permission('Yaga.Reactions.Manage'); $this->AddSideMenu('action/settings'); $this->Title('Manage Reactions'); // Get list of actions from the model and pass to the view $this->SetData('Actions', $this->ActionModel->GetActions()); $this->Render(); } /** * Edit an existing action or add a new one * * @param int $ActionID */ public function Edit($ActionID = NULL) { $this->Permission('Yaga.Reactions.Manage'); $this->AddSideMenu('action/settings'); $this->Form->SetModel($this->ActionModel); $Edit = FALSE; if($ActionID) { $this->Action = $this->ActionModel->GetAction($ActionID); $this->Form->AddHidden('ActionID', $ActionID); $Edit = TRUE; } if($this->Form->IsPostBack() == FALSE) { if(property_exists($this, 'Action')) { $this->Form->SetData($this->Action); } } else { if($this->Form->Save()) { if($Edit) { $Action = $this->ActionModel->GetAction($this->Form->GetFormValue('ActionID')); } else { $Action = $this->ActionModel->GetNewestAction(); } $NewActionRow = Wrap( Wrap( Anchor(T('Edit'), 'yaga/action/edit/' . $Action->ActionID, array('class' => 'Popup SmallButton')) . Anchor(T('Delete'), 'yaga/action/delete/' . $Action->ActionID, array('class' => 'Hijack SmallButton')), 'div', array('class' => 'Tools')) . Wrap( Wrap($Action->Name, 'h4') . Wrap( Wrap($Action->Description, 'span') . ' ' . Wrap(Plural($Action->AwardValue, '%s Point', '%s Points'), 'span'), 'div', array('class' => 'Meta')) . Wrap( Wrap(' ', 'span', array('class' => 'ReactSprite React-' . $Action->ActionID . ' ' . $Action->CssClass)) . WrapIf(rand(0, 18), 'span', array('class' => 'Count')) . Wrap($Action->Name, 'span', array('class' => 'ReactLabel')), 'div', array('class' => 'Preview Reactions')), 'div', array('class' => 'Action')), 'li', array('id' => 'Action_' . $Action->ActionID)); if($Edit) { $this->JsonTarget('#Action_' . $this->Action->ActionID, $NewActionRow, 'ReplaceWith'); $this->InformMessage('Action updated successfully!'); } else { $this->JsonTarget('#Actions', $NewActionRow, 'Append'); $this->InformMessage('Action added successfully!'); } } } $this->Render('add'); } /** * Convenience function for nice URLs */ public function Add() { $this->Edit(); } /** * Remove the action via model. * * @todo Consider adding a confirmation page when not using JS * @param int $ActionID */ public function Delete($ActionID) { $this->Permission('Yaga.Reactions.Manage'); $this->ActionModel->DeleteAction($ActionID); redirect('action/settings'); } public function Sort() { // Check permission $this->Permission('Garden.Reactions.Manage'); // Set delivery type to true/false $TransientKey = GetIncomingValue('TransientKey'); if (Gdn::Request()->IsPostBack()) { $SortArray = GetValue('SortArray', $_POST); $Saves = $this->ActionModel->SaveSort($SortArray); $this->SetData('Result', TRUE); $this->SetData('Saves', $Saves); } // Renders true/false rather than template $this->Render(); } }