/**
  * 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();
 }
Exemple #8
0
 /**
  * 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();
 }