parent
646db7f88d
commit
47cd976035
@ -0,0 +1,66 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OC\App\AppStore\Bundles; |
||||
|
||||
use OCP\IL10N; |
||||
|
||||
abstract class Bundle { |
||||
/** @var IL10N */ |
||||
protected $l10n; |
||||
|
||||
/** |
||||
* @param IL10N $l10n |
||||
*/ |
||||
public function __construct(IL10N $l10n) { |
||||
$this->l10n = $l10n; |
||||
} |
||||
|
||||
/** |
||||
* Get the identifier of the bundle |
||||
* |
||||
* @return string |
||||
*/ |
||||
public final function getIdentifier() { |
||||
return substr(strrchr(get_class($this), '\\'), 1); |
||||
} |
||||
|
||||
/** |
||||
* Get the name of the bundle |
||||
* |
||||
* @return string |
||||
*/ |
||||
public abstract function getName(); |
||||
|
||||
/** |
||||
* Get the description of the bundle |
||||
* |
||||
* @return string |
||||
*/ |
||||
public abstract function getDescription(); |
||||
|
||||
/** |
||||
* Get the list of app identifiers in the bundle |
||||
* |
||||
* @return array |
||||
*/ |
||||
public abstract function getAppIdentifiers(); |
||||
} |
@ -0,0 +1,79 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OC\App\AppStore\Bundles; |
||||
|
||||
use OCP\IL10N; |
||||
|
||||
class BundleFetcher { |
||||
/** @var IL10N */ |
||||
private $l10n; |
||||
|
||||
/** |
||||
* @param IL10N $l10n |
||||
*/ |
||||
public function __construct(IL10N $l10n) { |
||||
$this->l10n = $l10n; |
||||
} |
||||
|
||||
/** |
||||
* @return Bundle[] |
||||
*/ |
||||
public function getBundles() { |
||||
return [ |
||||
new EnterpriseBundle($this->l10n), |
||||
new GroupwareBundle($this->l10n), |
||||
]; |
||||
} |
||||
|
||||
/** |
||||
* Bundles that should be installed by default after installation |
||||
* |
||||
* @return Bundle[] |
||||
*/ |
||||
public function getDefaultInstallationBundle() { |
||||
return [ |
||||
new CoreBundle($this->l10n), |
||||
]; |
||||
} |
||||
|
||||
/** |
||||
* Get the bundle with the specified identifier |
||||
* |
||||
* @param string $identifier |
||||
* @return Bundle |
||||
* @throws \BadMethodCallException If the bundle does not exist |
||||
*/ |
||||
public function getBundleByIdentifier($identifier) { |
||||
/** @var Bundle[] $bundles */ |
||||
$bundles = array_merge( |
||||
$this->getBundles(), |
||||
$this->getDefaultInstallationBundle() |
||||
); |
||||
foreach($bundles as $bundle) { |
||||
if($bundle->getIdentifier() === $identifier) { |
||||
return $bundle; |
||||
} |
||||
} |
||||
|
||||
throw new \BadMethodCallException('Bundle with specified identifier does not exist'); |
||||
} |
||||
} |
@ -0,0 +1,49 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OC\App\AppStore\Bundles; |
||||
|
||||
class CoreBundle extends Bundle { |
||||
|
||||
/** |
||||
* {@inheritDoc} |
||||
*/ |
||||
public function getName() { |
||||
return (string)$this->l10n->t('Core bundle'); |
||||
} |
||||
|
||||
/** |
||||
* {@inheritDoc} |
||||
*/ |
||||
public function getDescription() { |
||||
return (string)$this->l10n->t('Default apps required by Nextcloud'); |
||||
} |
||||
|
||||
/** |
||||
* {@inheritDoc} |
||||
*/ |
||||
public function getAppIdentifiers() { |
||||
return [ |
||||
'bruteforcesettings', |
||||
]; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,54 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OC\App\AppStore\Bundles; |
||||
|
||||
class EnterpriseBundle extends Bundle { |
||||
|
||||
/** |
||||
* {@inheritDoc} |
||||
*/ |
||||
public function getName() { |
||||
return (string)$this->l10n->t('Enterprise bundle'); |
||||
} |
||||
|
||||
/** |
||||
* {@inheritDoc} |
||||
*/ |
||||
public function getDescription() { |
||||
return (string)$this->l10n->t('Apps for the Enterprise.'); |
||||
} |
||||
|
||||
/** |
||||
* {@inheritDoc} |
||||
*/ |
||||
public function getAppIdentifiers() { |
||||
return [ |
||||
'admin_audit', |
||||
'user_ldap', |
||||
'files_retention', |
||||
'files_automatedtagging', |
||||
'user_saml', |
||||
'files_accesscontrol', |
||||
]; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,50 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OC\App\AppStore\Bundles; |
||||
|
||||
class GroupwareBundle extends Bundle { |
||||
|
||||
/** |
||||
* {@inheritDoc} |
||||
*/ |
||||
public function getName() { |
||||
return (string)$this->l10n->t('Groupware bundle'); |
||||
} |
||||
|
||||
/** |
||||
* {@inheritDoc} |
||||
*/ |
||||
public function getDescription() { |
||||
return (string)$this->l10n->t('Apps for groupware functionalities.'); |
||||
} |
||||
|
||||
/** |
||||
* {@inheritDoc} |
||||
*/ |
||||
public function getAppIdentifiers() { |
||||
return [ |
||||
'calendar', |
||||
'contacts', |
||||
]; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,78 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OC\Repair\NC12; |
||||
|
||||
use OC\App\AppStore\Bundles\BundleFetcher; |
||||
use OC\Installer; |
||||
use OCP\IConfig; |
||||
use OCP\Migration\IOutput; |
||||
use OCP\Migration\IRepairStep; |
||||
|
||||
class InstallCoreBundle implements IRepairStep { |
||||
/** @var BundleFetcher */ |
||||
private $bundleFetcher; |
||||
/** @var IConfig */ |
||||
private $config; |
||||
/** @var Installer */ |
||||
private $installer; |
||||
|
||||
/** |
||||
* @param BundleFetcher $bundleFetcher |
||||
* @param IConfig $config |
||||
* @param Installer $installer |
||||
*/ |
||||
public function __construct(BundleFetcher $bundleFetcher, |
||||
IConfig $config, |
||||
Installer $installer) { |
||||
$this->bundleFetcher = $bundleFetcher; |
||||
$this->config = $config; |
||||
$this->installer = $installer; |
||||
} |
||||
|
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function getName() { |
||||
return 'Install new core bundle components'; |
||||
} |
||||
|
||||
/** |
||||
* {@inheritdoc} |
||||
*/ |
||||
public function run(IOutput $output) { |
||||
$versionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0'); |
||||
|
||||
if (version_compare($versionFromBeforeUpdate, '12.0.0.14', '>')) { |
||||
return; |
||||
} |
||||
|
||||
$defaultBundle = $this->bundleFetcher->getDefaultInstallationBundle(); |
||||
foreach($defaultBundle as $bundle) { |
||||
try { |
||||
$this->installer->installAppBundle($bundle); |
||||
$output->info('Successfully installed core app bundle.'); |
||||
} catch (\Exception $e) { |
||||
$output->warning('Could not install core app bundle:' . $e->getMessage()); |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue