/** * Application management screen. * * @since 2.0.0 * @access public * @param string $Filter 'enabled', 'disabled', or 'all' (default) * @param string $ApplicationName Unique ID of app to be modified. * @param string $TransientKey Security token. */ public function Applications($Filter = '', $ApplicationName = '', $TransientKey = '') { $this->Permission('Garden.Settings.Manage'); // Page setup $this->AddJsFile('addons.js'); $this->AddJsFile('applications.js'); $this->Title(T('Applications')); $this->AddSideMenu('dashboard/settings/applications'); // Validate & set parameters $Session = Gdn::Session(); if ($ApplicationName && !$Session->ValidateTransientKey($TransientKey)) { $ApplicationName = ''; } if (!in_array($Filter, array('enabled', 'disabled'))) { $Filter = 'all'; } $this->Filter = $Filter; $ApplicationManager = new Gdn_ApplicationManager(); $this->AvailableApplications = $ApplicationManager->AvailableVisibleApplications(); $this->EnabledApplications = $ApplicationManager->EnabledVisibleApplications(); if ($ApplicationName != '') { $this->EventArguments['ApplicationName'] = $ApplicationName; if (array_key_exists($ApplicationName, $this->EnabledApplications) === TRUE) { try { $ApplicationManager->DisableApplication($ApplicationName); Gdn_LibraryMap::ClearCache(); $this->FireEvent('AfterDisableApplication'); } 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); Gdn_LibraryMap::ClearCache(); $this->Form->SetValidationResults($Validation->Results()); $this->EventArguments['Validation'] = $Validation; $this->FireEvent('AfterEnableApplication'); } } if ($this->Form->ErrorCount() == 0) { Redirect('settings/applications/' . $this->Filter); } } $this->Render(); }
/** * The summary of all settings available. * * The menu items displayed here are collected from each application's * application controller and all plugin's definitions. * * @since 2.0.0 * @access public */ public function index() { $this->ApplicationFolder = 'dashboard'; $this->MasterView = 'setup'; // Fatal error if Garden has already been installed. $Installed = c('Garden.Installed'); if ($Installed) { $this->View = "AlreadyInstalled"; $this->render(); return; } if (!$this->_CheckPrerequisites()) { $this->View = 'prerequisites'; } else { $this->View = 'configure'; // Make sure the user has copied the htaccess file over. if (!file_exists(PATH_ROOT . '/.htaccess') && !$this->Form->getFormValue('SkipHtaccess')) { $this->setData('NoHtaccess', true); $this->Form->addError(t('You are missing Vanilla\'s .htaccess file.', 'You are missing Vanilla\'s <b>.htaccess</b> file. Sometimes this file isn\'t copied if you are using ftp to upload your files because this file is hidden. Make sure you\'ve copied the <b>.htaccess</b> file before continuing.')); } $ApplicationManager = new Gdn_ApplicationManager(); // Need to go through all of the setups for each application. Garden, if ($this->configure() && $this->Form->isPostBack()) { // Get list of applications to enable during install // Override by creating the config and adding this setting before install begins $AppNames = c('Garden.Install.Applications', array('Conversations', 'Vanilla')); try { // Step through the available applications, enabling each of them. foreach ($AppNames as $AppName) { $Validation = new Gdn_Validation(); $ApplicationManager->RegisterPermissions($AppName, $Validation); $ApplicationManager->EnableApplication($AppName, $Validation); } Gdn::pluginManager()->start(true); } catch (Exception $ex) { $this->Form->addError($ex); } if ($this->Form->errorCount() == 0) { // Save a variable so that the application knows it has been installed. // Now that the application is installed, select a more user friendly error page. $Config = array('Garden.Installed' => true); saveToConfig($Config); $this->fireAs('UpdateModel')->fireEvent('AfterStructure'); $this->fireEvent('Installed'); // Go to the dashboard redirect('/settings/gettingstarted'); } } } $this->render(); }
/** * The summary of all settings available. The menu items displayed here are * collected from each application's application controller and all plugin's * definitions. */ public function Index() { $this->ApplicationFolder = 'dashboard'; $this->MasterView = 'setup'; // Fatal error if Garden has already been installed. $Installed = Gdn::Config('Garden.Installed') ? TRUE : FALSE; if ($Installed) { throw new Exception('Vanilla has already been installed.'); } if (!$this->_CheckPrerequisites()) { $this->View = 'prerequisites'; } else { $this->View = 'configure'; // Make sure the user has copied the htaccess file over. if (!file_exists(PATH_ROOT . '/.htaccess') && !$this->Form->GetFormValue('SkipHtaccess')) { $this->SetData('NoHtaccess', TRUE); $this->Form->AddError(T('You are missing Vanilla\'s .htaccess file.', 'You are missing Vanilla\'s <b>.htaccess</b> file. Sometimes this file isn\'t copied if you are using ftp to upload your files because this file is hidden. Make sure you\'ve copied the <b>.htaccess</b> file before continuing.')); } $ApplicationManager = new Gdn_ApplicationManager(); $AvailableApplications = $ApplicationManager->AvailableApplications(); // Need to go through all of the setups for each application. Garden, if ($this->Configure() && $this->Form->IsPostBack()) { // Step through the available applications, enabling each of them $AppNames = array_keys($AvailableApplications); try { foreach ($AvailableApplications as $AppName => $AppInfo) { if (strtolower($AppName) != 'dashboard') { $Validation = new Gdn_Validation(); $ApplicationManager->RegisterPermissions($AppName, $Validation); $ApplicationManager->EnableApplication($AppName, $Validation); } } } catch (Exception $ex) { $this->Form->AddError($ex); } if ($this->Form->ErrorCount() == 0) { // Save a variable so that the application knows it has been installed. // Now that the application is installed, select a more user friendly error page. $Config = array('Garden.Installed' => TRUE); if (!defined('DEBUG')) { $Config['Garden.Errors.MasterView'] = 'error.master.php'; } SaveToConfig($Config); // Go to the dashboard Redirect('/settings'); } } } $this->Render(); }
/** * The summary of all settings available. The menu items displayed here are * collected from each application's application controller and all plugin's * definitions. */ public function Index() { $this->ApplicationFolder = 'dashboard'; $this->MasterView = 'setup'; // Fatal error if Garden has already been installed. $Config = Gdn::Factory(Gdn::AliasConfig); $Installed = Gdn::Config('Garden.Installed') ? TRUE : FALSE; if ($Installed) { throw new Exception('Vanilla has already been installed.'); } if (!$this->_CheckPrerequisites()) { $this->View = 'prerequisites'; } else { $this->View = 'configure'; $ApplicationManager = new Gdn_ApplicationManager(); $AvailableApplications = $ApplicationManager->AvailableApplications(); // Need to go through all of the setups for each application. Garden, if ($this->Configure() && $this->Form->IsPostBack()) { // Step through the available applications, enabling each of them $AppNames = array_keys($AvailableApplications); try { foreach ($AvailableApplications as $AppName => $AppInfo) { if (strtolower($AppName) != 'dashboard') { $Validation = new Gdn_Validation(); $ApplicationManager->RegisterPermissions($AppName, $Validation); $ApplicationManager->EnableApplication($AppName, $Validation); } } } catch (Exception $ex) { $this->Form->AddError($ex); } if ($this->Form->ErrorCount() == 0) { // Save a variable so that the application knows it has been installed. // Now that the application is installed, select a more user friendly error page. $Config = array('Garden.Installed' => TRUE); if (!defined('DEBUG')) { $Config['Garden.Errors.MasterView'] = 'error.master.php'; } SaveToConfig($Config); // Go to the dashboard Redirect('/settings'); } } } $this->Render(); }
/** * Application management screen. */ public function Applications($Filter = '', $ApplicationName = '', $TransientKey = '') { $this->AddJsFile('addons.js'); $Session = Gdn::Session(); $ApplicationName = $Session->ValidateTransientKey($TransientKey) ? $ApplicationName : ''; if (!in_array($Filter, array('enabled', 'disabled'))) { $Filter = 'all'; } $this->Filter = $Filter; $this->Permission('Garden.Applications.Manage'); $this->AddSideMenu('dashboard/settings/applications'); $this->AddJsFile('applications.js'); $this->Title(T('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 = Gdn_Format::Unserialize(C('Garden.RequiredUpdates', '')); if (is_array($RequiredUpdates)) { foreach ($RequiredUpdates as $UpdateInfo) { if (is_object($UpdateInfo)) { $UpdateInfo = Gdn_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 != '') { $this->EventArguments['ApplicationName'] = $ApplicationName; if (array_key_exists($ApplicationName, $this->EnabledApplications) === TRUE) { try { $ApplicationManager->DisableApplication($ApplicationName); $this->FireEvent('AfterDisableApplication'); } 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); $this->Form->SetValidationResults($Validation->Results()); $this->EventArguments['Validation'] = $Validation; $this->FireEvent('AfterEnableApplication'); } } if ($this->Form->ErrorCount() == 0) { Redirect('settings/applications/' . $this->Filter); } } $this->Render(); }
/** * 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('dashboard/settings/applications'); $this->AddJsFile('applications.js'); $this->Title(T('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 = Gdn_Format::Unserialize(Gdn::Config('Garden.RequiredUpdates', '')); if (is_array($RequiredUpdates)) { foreach ($RequiredUpdates as $UpdateInfo) { if (is_object($UpdateInfo)) { $UpdateInfo = Gdn_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) { $Test = ProxyRequest(Url('/dashboard/settings/testaddon/Application/' . $ApplicationName . '/' . $Session->TransientKey() . '?DeliveryType=JSON', TRUE)); if ($Test != 'Success') { $this->Form->AddError(sprintf(T('The application could not be enabled because it generated a fatal error: <pre>%s</pre>'), strip_tags($Test))); } else { $Validation = new Gdn_Validation(); $ApplicationManager->RegisterPermissions($ApplicationName, $Validation); $ApplicationManager->EnableApplication($ApplicationName, $Validation); $this->Form->SetValidationResults($Validation->Results()); } } } if ($this->Form->ErrorCount() == 0) { Redirect('settings/applications'); } } $this->Render(); }
/** * Enable applications and create permisisions for roles. * * @return void */ protected function enableApplications() { $ApplicationManager = new Gdn_ApplicationManager(); $AppNames = c('Garden.Install.Applications', ['Conversations', 'Vanilla']); foreach ($AppNames as $AppName) { $Validation = new Gdn_Validation(); $ApplicationManager->RegisterPermissions($AppName, $Validation); $ApplicationManager->EnableApplication($AppName, $Validation); } Gdn::pluginManager()->start(true); // Flag the application as installed saveToConfig('Garden.Installed', true); // Setup default permissions for all roles PermissionModel::ResetAllRoles(); }
/** * Application management screen. */ public function Applications($Action = '', $ApplicationName = '', $TransientKey = '') { $this->Permission('Garden.Applications.Manage'); $this->AddSideMenu('garden/settings/applications'); if ($this->Head) { $this->Head->AddScript('/applications/garden/js/applications.js'); } $Session = Gdn::Session(); $AuthenticatedPostBack = $this->Form->AuthenticatedPostBack(); // Todd: Is this part necessary? if (!$Session->ValidateTransientKey($TransientKey)) { // if(!$AuthenticatedPostBack) { $Action = ''; $ApplicationName = ''; } else { $AuthenticatedPostBack = TRUE; } $FinalRedirect = FALSE; $SetupRender = FALSE; $ApplicationManager = new Gdn_ApplicationManager(); $this->AvailableApplications = $ApplicationManager->AvailableApplications(); // Check the update server for updates to these applications $this->UpdateManager = new Gdn_UpdateManager(); // TODO: FIX UP THE PHONE-HOME CODE - AJAX, PERHAPS? // $this->CurrentVersions = $this->UpdateManager->Check(ADDON_TYPE_APPLICATION, array_keys($this->AvailableApplications)); if ($AuthenticatedPostBack) { $ApplicationName = $this->Form->GetValue('ApplicationName', $ApplicationName); if ($ApplicationName != '') { if (array_key_exists($ApplicationName, $this->EnabledApplications) === TRUE) { try { $ApplicationManager->DisableApplication($ApplicationName); } catch (Exception $e) { $this->Form->AddError(strip_tags($e->getMessage())); } $FinalRedirect = TRUE; } else { if ($Action == '') { // 1. Make sure that the application's requirements are met try { $ApplicationManager->CheckRequirements($ApplicationName); } catch (Exception $e) { $this->Form->AddError(strip_tags($e->getMessage())); } if ($this->Form->ErrorCount() == 0) { // 2. Register any specified permissions $Validation = new Gdn_Validation(); $ApplicationManager->RegisterPermissions($ApplicationName, $Validation); if (count($Validation->Results()) == 0) { if (!$ApplicationManager->ApplicationSetup($ApplicationName, $this, $Validation, TRUE)) { $SetupUrl = '/garden/settings/applications/setup/' . $ApplicationName . '/' . $Session->TransientKey(); if ($this->_DeliveryType === DELIVERY_TYPE_ALL) { Redirect($SetupUrl); } else { $this->SetJson('Go', Url($SetupUrl)); // <---- THIS IS WHAT MAKES IT GET PICKED UP BY THE POPUP $this->Database->CloseConnection(); exit(json_encode($this->GetJson())); } } else { $FinalRedirect = TRUE; } } } $this->Form->SetValidationResults($Validation->Results()); } elseif ($Action == 'setup') { // 3. Run the setup method of the application $SetupRender = TRUE; $Validation = new Gdn_Validation(); if ($ApplicationManager->ApplicationSetup($ApplicationName, $this, $Validation)) { $SetupRender = FALSE; $FinalRedirect = TRUE; } } } if ($FinalRedirect && $this->Form->ErrorCount() == 0) { $this->StatusMessage = Gdn::Translate('Finalizing changes...'); $this->RedirectUrl = Url('/garden/settings/applications/'); } } } if (!$SetupRender) { $this->Render(); } }
/** * 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'); if ($this->Head) { $this->Head->AddScript('/applications/garden/js/applications.js'); $this->Head->Title(Translate('Applications')); } $Session = Gdn::Session(); $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; } } } } // Check the update server for updates to these applications $this->UpdateManager = new Gdn_UpdateManager(); // TODO: FIX UP THE PHONE-HOME CODE - AJAX, PERHAPS? // $this->CurrentVersions = $this->UpdateManager->Check(ADDON_TYPE_APPLICATION, array_keys($this->AvailableApplications)); 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); } $this->Form->SetValidationResults($Validation->Results()); } if ($this->Form->ErrorCount() == 0) { Redirect('settings/applications'); } } $this->Render(); }