/** * Application management screen. */ public function Applications($Filter = '', $TransientKey = '') { $Session = Gdn::Session(); $ApplicationName = $Session->ValidateTransientKey($TransientKey) ? $Filter : ''; if (!in_array($Filter, array('enabled', 'disabled'))) { $Filter = ''; } $this->Filter = $Filter; $this->Permission('Garden.Applications.Manage'); $this->AddSideMenu('garden/settings/applications'); $this->AddJsFile('applications.js'); $this->Title(Translate('Applications')); $AuthenticatedPostBack = $this->Form->AuthenticatedPostBack(); $ApplicationManager = new Gdn_ApplicationManager(); $this->AvailableApplications = $ApplicationManager->AvailableVisibleApplications(); $this->EnabledApplications = $ApplicationManager->EnabledVisibleApplications(); // Loop through all of the available visible apps and mark them if they have an update available // Retrieve the list of apps that require updates from the config file $RequiredUpdates = Format::Unserialize(Gdn::Config('Garden.RequiredUpdates', '')); if (is_array($RequiredUpdates)) { foreach ($RequiredUpdates as $UpdateInfo) { if (is_object($UpdateInfo)) { $UpdateInfo = Format::ObjectAsArray($UpdateInfo); } $NewVersion = ArrayValue('Version', $UpdateInfo, ''); $Name = ArrayValue('Name', $UpdateInfo, ''); $Type = ArrayValue('Type', $UpdateInfo, ''); foreach ($this->AvailableApplications as $App => $Info) { $CurrentName = ArrayValue('Name', $Info, $App); if ($CurrentName == $Name && $Type == 'Application') { $Info['NewVersion'] = $NewVersion; $this->AvailableApplications[$App] = $Info; } } } } if ($ApplicationName != '') { if (array_key_exists($ApplicationName, $this->EnabledApplications) === TRUE) { try { $ApplicationManager->DisableApplication($ApplicationName); } catch (Exception $e) { $this->Form->AddError(strip_tags($e->getMessage())); } } else { try { $ApplicationManager->CheckRequirements($ApplicationName); } catch (Exception $e) { $this->Form->AddError(strip_tags($e->getMessage())); } if ($this->Form->ErrorCount() == 0) { $Validation = new Gdn_Validation(); $ApplicationManager->RegisterPermissions($ApplicationName, $Validation); $ApplicationManager->EnableApplication($ApplicationName, $Validation); if ($ApplicationManager->ApplicationHasSetup($ApplicationName)) { $ApplicationManager->ApplicationSetup($ApplicationName, $this->ControllerName, $Validation); } } $this->Form->SetValidationResults($Validation->Results()); } if ($this->Form->ErrorCount() == 0) { Redirect('settings/applications'); } } $this->Render(); }