mirror of
https://github.com/nextcloud/server.git
synced 2026-06-10 17:23:59 -04:00
Merge pull request #43769 from nextcloud/enh/refactor-appstore
This commit is contained in:
commit
2f0929110b
17 changed files with 118 additions and 248 deletions
|
|
@ -47,6 +47,7 @@ use OCP\AppFramework\Http\Attribute\OpenAPI;
|
|||
use OCP\AppFramework\Http\ContentSecurityPolicy;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\AppFramework\Services\IInitialState;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
use OCP\INavigationManager;
|
||||
|
|
@ -58,72 +59,26 @@ use Psr\Log\LoggerInterface;
|
|||
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
|
||||
class AppSettingsController extends Controller {
|
||||
|
||||
/** @var \OCP\IL10N */
|
||||
private $l10n;
|
||||
/** @var IConfig */
|
||||
private $config;
|
||||
/** @var INavigationManager */
|
||||
private $navigationManager;
|
||||
/** @var IAppManager */
|
||||
private $appManager;
|
||||
/** @var CategoryFetcher */
|
||||
private $categoryFetcher;
|
||||
/** @var AppFetcher */
|
||||
private $appFetcher;
|
||||
/** @var IFactory */
|
||||
private $l10nFactory;
|
||||
/** @var BundleFetcher */
|
||||
private $bundleFetcher;
|
||||
/** @var Installer */
|
||||
private $installer;
|
||||
/** @var IURLGenerator */
|
||||
private $urlGenerator;
|
||||
/** @var LoggerInterface */
|
||||
private $logger;
|
||||
|
||||
/** @var array */
|
||||
private $allApps = [];
|
||||
|
||||
/**
|
||||
* @param string $appName
|
||||
* @param IRequest $request
|
||||
* @param IL10N $l10n
|
||||
* @param IConfig $config
|
||||
* @param INavigationManager $navigationManager
|
||||
* @param IAppManager $appManager
|
||||
* @param CategoryFetcher $categoryFetcher
|
||||
* @param AppFetcher $appFetcher
|
||||
* @param IFactory $l10nFactory
|
||||
* @param BundleFetcher $bundleFetcher
|
||||
* @param Installer $installer
|
||||
* @param IURLGenerator $urlGenerator
|
||||
* @param LoggerInterface $logger
|
||||
*/
|
||||
public function __construct(string $appName,
|
||||
public function __construct(
|
||||
string $appName,
|
||||
IRequest $request,
|
||||
IL10N $l10n,
|
||||
IConfig $config,
|
||||
INavigationManager $navigationManager,
|
||||
IAppManager $appManager,
|
||||
CategoryFetcher $categoryFetcher,
|
||||
AppFetcher $appFetcher,
|
||||
IFactory $l10nFactory,
|
||||
BundleFetcher $bundleFetcher,
|
||||
Installer $installer,
|
||||
IURLGenerator $urlGenerator,
|
||||
LoggerInterface $logger) {
|
||||
private IL10N $l10n,
|
||||
private IConfig $config,
|
||||
private INavigationManager $navigationManager,
|
||||
private IAppManager $appManager,
|
||||
private CategoryFetcher $categoryFetcher,
|
||||
private AppFetcher $appFetcher,
|
||||
private IFactory $l10nFactory,
|
||||
private BundleFetcher $bundleFetcher,
|
||||
private Installer $installer,
|
||||
private IURLGenerator $urlGenerator,
|
||||
private LoggerInterface $logger,
|
||||
private IInitialState $initialState,
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
$this->l10n = $l10n;
|
||||
$this->config = $config;
|
||||
$this->navigationManager = $navigationManager;
|
||||
$this->appManager = $appManager;
|
||||
$this->categoryFetcher = $categoryFetcher;
|
||||
$this->appFetcher = $appFetcher;
|
||||
$this->l10nFactory = $l10nFactory;
|
||||
$this->bundleFetcher = $bundleFetcher;
|
||||
$this->installer = $installer;
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
$this->logger = $logger;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -132,18 +87,22 @@ class AppSettingsController extends Controller {
|
|||
* @return TemplateResponse
|
||||
*/
|
||||
public function viewApps(): TemplateResponse {
|
||||
$params = [];
|
||||
$params['appstoreEnabled'] = $this->config->getSystemValueBool('appstoreenabled', true);
|
||||
$params['updateCount'] = count($this->getAppsWithUpdates());
|
||||
$params['developerDocumentation'] = $this->urlGenerator->linkToDocs('developer-manual');
|
||||
$params['bundles'] = $this->getBundles();
|
||||
$this->navigationManager->setActiveEntry('core_apps');
|
||||
|
||||
$templateResponse = new TemplateResponse('settings', 'settings-vue', ['serverData' => $params, 'pageTitle' => $this->l10n->t('Apps')]);
|
||||
$this->initialState->provideInitialState('appstoreEnabled', $this->config->getSystemValueBool('appstoreenabled', true));
|
||||
$this->initialState->provideInitialState('appstoreBundles', $this->getBundles());
|
||||
$this->initialState->provideInitialState('appstoreDeveloperDocs', $this->urlGenerator->linkToDocs('developer-manual'));
|
||||
$this->initialState->provideInitialState('appstoreUpdateCount', count($this->getAppsWithUpdates()));
|
||||
|
||||
$policy = new ContentSecurityPolicy();
|
||||
$policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com');
|
||||
|
||||
$templateResponse = new TemplateResponse('settings', 'settings/empty', ['pageTitle' => $this->l10n->t('Apps')]);
|
||||
$templateResponse->setContentSecurityPolicy($policy);
|
||||
|
||||
\OCP\Util::addStyle('settings', 'settings');
|
||||
\OCP\Util::addScript('settings', 'vue-settings-apps-users-management');
|
||||
|
||||
return $templateResponse;
|
||||
}
|
||||
|
||||
|
|
@ -184,17 +143,11 @@ class AppSettingsController extends Controller {
|
|||
private function getAllCategories() {
|
||||
$currentLanguage = substr($this->l10nFactory->findLanguage(), 0, 2);
|
||||
|
||||
$formattedCategories = [];
|
||||
$categories = $this->categoryFetcher->get();
|
||||
foreach ($categories as $category) {
|
||||
$formattedCategories[] = [
|
||||
'id' => $category['id'],
|
||||
'ident' => $category['id'],
|
||||
'displayName' => $category['translations'][$currentLanguage]['name'] ?? $category['translations']['en']['name'],
|
||||
];
|
||||
}
|
||||
|
||||
return $formattedCategories;
|
||||
return array_map(fn ($category) => [
|
||||
'id' => $category['id'],
|
||||
'displayName' => $category['translations'][$currentLanguage]['name'] ?? $category['translations']['en']['name'],
|
||||
], $categories);
|
||||
}
|
||||
|
||||
private function fetchApps() {
|
||||
|
|
|
|||
|
|
@ -33,8 +33,6 @@ declare(strict_types=1);
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*
|
||||
*/
|
||||
// FIXME: disabled for now to be able to inject IGroupManager and also use
|
||||
// getSubAdmin()
|
||||
|
||||
namespace OCA\Settings\Controller;
|
||||
|
||||
|
|
@ -42,9 +40,7 @@ use InvalidArgumentException;
|
|||
use OC\AppFramework\Http;
|
||||
use OC\Encryption\Exceptions\ModuleDoesNotExistsException;
|
||||
use OC\ForbiddenException;
|
||||
use OC\Group\Manager as GroupManager;
|
||||
use OC\KnownUser\KnownUserService;
|
||||
use OC\L10N\Factory;
|
||||
use OC\Security\IdentityProof\Manager;
|
||||
use OC\User\Manager as UserManager;
|
||||
use OCA\Settings\BackgroundJobs\VerifyUserData;
|
||||
|
|
@ -59,6 +55,7 @@ use OCP\AppFramework\Http\Attribute\OpenAPI;
|
|||
use OCP\AppFramework\Http\DataResponse;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\AppFramework\Services\IInitialState;
|
||||
use OCP\BackgroundJob\IJobList;
|
||||
use OCP\Encryption\IManager;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
|
|
@ -67,7 +64,6 @@ use OCP\IGroupManager;
|
|||
use OCP\IL10N;
|
||||
use OCP\IRequest;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use OCP\IUserSession;
|
||||
use OCP\L10N\IFactory;
|
||||
use OCP\Mail\IMailer;
|
||||
|
|
@ -75,73 +71,28 @@ use function in_array;
|
|||
|
||||
#[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)]
|
||||
class UsersController extends Controller {
|
||||
/** @var UserManager */
|
||||
private $userManager;
|
||||
/** @var GroupManager */
|
||||
private $groupManager;
|
||||
/** @var IUserSession */
|
||||
private $userSession;
|
||||
/** @var IConfig */
|
||||
private $config;
|
||||
/** @var bool */
|
||||
private $isAdmin;
|
||||
/** @var IL10N */
|
||||
private $l10n;
|
||||
/** @var IMailer */
|
||||
private $mailer;
|
||||
/** @var Factory */
|
||||
private $l10nFactory;
|
||||
/** @var IAppManager */
|
||||
private $appManager;
|
||||
/** @var IAccountManager */
|
||||
private $accountManager;
|
||||
/** @var Manager */
|
||||
private $keyManager;
|
||||
/** @var IJobList */
|
||||
private $jobList;
|
||||
/** @var IManager */
|
||||
private $encryptionManager;
|
||||
/** @var KnownUserService */
|
||||
private $knownUserService;
|
||||
/** @var IEventDispatcher */
|
||||
private $dispatcher;
|
||||
|
||||
|
||||
public function __construct(
|
||||
string $appName,
|
||||
IRequest $request,
|
||||
IUserManager $userManager,
|
||||
IGroupManager $groupManager,
|
||||
IUserSession $userSession,
|
||||
IConfig $config,
|
||||
bool $isAdmin,
|
||||
IL10N $l10n,
|
||||
IMailer $mailer,
|
||||
IFactory $l10nFactory,
|
||||
IAppManager $appManager,
|
||||
IAccountManager $accountManager,
|
||||
Manager $keyManager,
|
||||
IJobList $jobList,
|
||||
IManager $encryptionManager,
|
||||
KnownUserService $knownUserService,
|
||||
IEventDispatcher $dispatcher
|
||||
private UserManager $userManager,
|
||||
private IGroupManager $groupManager,
|
||||
private IUserSession $userSession,
|
||||
private IConfig $config,
|
||||
private bool $isAdmin,
|
||||
private IL10N $l10n,
|
||||
private IMailer $mailer,
|
||||
private IFactory $l10nFactory,
|
||||
private IAppManager $appManager,
|
||||
private IAccountManager $accountManager,
|
||||
private Manager $keyManager,
|
||||
private IJobList $jobList,
|
||||
private IManager $encryptionManager,
|
||||
private KnownUserService $knownUserService,
|
||||
private IEventDispatcher $dispatcher,
|
||||
private IInitialState $initialState,
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
$this->userManager = $userManager;
|
||||
$this->groupManager = $groupManager;
|
||||
$this->userSession = $userSession;
|
||||
$this->config = $config;
|
||||
$this->isAdmin = $isAdmin;
|
||||
$this->l10n = $l10n;
|
||||
$this->mailer = $mailer;
|
||||
$this->l10nFactory = $l10nFactory;
|
||||
$this->appManager = $appManager;
|
||||
$this->accountManager = $accountManager;
|
||||
$this->keyManager = $keyManager;
|
||||
$this->jobList = $jobList;
|
||||
$this->encryptionManager = $encryptionManager;
|
||||
$this->knownUserService = $knownUserService;
|
||||
$this->dispatcher = $dispatcher;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -231,6 +182,7 @@ class UsersController extends Controller {
|
|||
$userCount -= 1; // we also lower from one the total count
|
||||
}
|
||||
}
|
||||
|
||||
$userCount += $this->userManager->countUsersOfGroups($groupsInfo->getGroups());
|
||||
$disabledUsers = $this->userManager->countDisabledUsersOfGroups($groupsNames);
|
||||
}
|
||||
|
|
@ -280,7 +232,12 @@ class UsersController extends Controller {
|
|||
$serverData['newUserRequireEmail'] = $this->config->getAppValue('core', 'newUser.requireEmail', 'no') === 'yes';
|
||||
$serverData['newUserSendEmail'] = $this->config->getAppValue('core', 'newUser.sendEmail', 'yes') === 'yes';
|
||||
|
||||
return new TemplateResponse('settings', 'settings-vue', ['serverData' => $serverData, 'pageTitle' => $this->l10n->t('Users')]);
|
||||
$this->initialState->provideInitialState('usersSettings', $serverData);
|
||||
|
||||
\OCP\Util::addStyle('settings', 'settings');
|
||||
\OCP\Util::addScript('settings', 'vue-settings-apps-users-management');
|
||||
|
||||
return new TemplateResponse('settings', 'settings/empty', ['pageTitle' => $this->l10n->t('Users')]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -27,12 +27,5 @@
|
|||
<script>
|
||||
export default {
|
||||
name: 'App',
|
||||
beforeMount() {
|
||||
// importing server data into the store
|
||||
const serverDataElmt = document.getElementById('serverData')
|
||||
if (serverDataElmt !== null) {
|
||||
this.$store.commit('setServerData', JSON.parse(document.getElementById('serverData').dataset.server))
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ export default {
|
|||
})
|
||||
},
|
||||
bundles() {
|
||||
return this.$store.getters.getServerData.bundles.filter(bundle => this.bundleApps(bundle.id).length > 0)
|
||||
return this.$store.getters.getAppBundles.filter(bundle => this.bundleApps(bundle.id).length > 0)
|
||||
},
|
||||
bundleApps() {
|
||||
return function(bundle) {
|
||||
|
|
|
|||
|
|
@ -26,11 +26,13 @@ import api from './api.js'
|
|||
import Vue from 'vue'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { showError, showInfo } from '@nextcloud/dialogs'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
|
||||
const state = {
|
||||
apps: [],
|
||||
bundles: loadState('settings', 'appstoreBundles', []),
|
||||
categories: [],
|
||||
updateCount: 0,
|
||||
updateCount: loadState('settings', 'appstoreUpdateCount', 0),
|
||||
loading: {},
|
||||
loadingList: false,
|
||||
gettingCategoriesPromise: null,
|
||||
|
|
@ -164,6 +166,9 @@ const getters = {
|
|||
getAllApps(state) {
|
||||
return state.apps
|
||||
},
|
||||
getAppBundles(state) {
|
||||
return state.bundles
|
||||
},
|
||||
getUpdateCount(state) {
|
||||
return state.updateCount
|
||||
},
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ import Vue from 'vue'
|
|||
import Vuex, { Store } from 'vuex'
|
||||
import users from './users.js'
|
||||
import apps from './apps.js'
|
||||
import settings from './settings.js'
|
||||
import settings from './users-settings.js'
|
||||
import oc from './oc.js'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
|
||||
|
|
|
|||
|
|
@ -20,8 +20,10 @@
|
|||
*
|
||||
*/
|
||||
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
|
||||
const state = {
|
||||
serverData: {},
|
||||
serverData: loadState('settings', 'usersSettings', {}),
|
||||
}
|
||||
const mutations = {
|
||||
setServerData(state, data) {
|
||||
|
|
@ -32,7 +32,7 @@ import axios from '@nextcloud/axios'
|
|||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { getCapabilities } from '@nextcloud/capabilities'
|
||||
import logger from '../logger.js'
|
||||
import { parseFileSize } from "@nextcloud/files"
|
||||
import { parseFileSize } from '@nextcloud/files'
|
||||
|
||||
const orderGroups = function(groups, orderBy) {
|
||||
/* const SORT_USERCOUNT = 1;
|
||||
|
|
|
|||
|
|
@ -65,18 +65,18 @@
|
|||
<NcAppNavigationSpacer />
|
||||
|
||||
<!-- App store categories -->
|
||||
<template v-if="settings.appstoreEnabled">
|
||||
<template v-if="appstoreEnabled">
|
||||
<NcAppNavigationItem id="app-category-featured"
|
||||
:to="{ name: 'apps-category', params: { category: 'featured' } }"
|
||||
icon="icon-favorite"
|
||||
:name="$options.APPS_SECTION_ENUM.featured" />
|
||||
|
||||
<NcAppNavigationItem v-for="cat in categories"
|
||||
:key="'icon-category-' + cat.ident"
|
||||
:icon="'icon-category-' + cat.ident"
|
||||
:key="'icon-category-' + cat.id"
|
||||
:icon="'icon-category-' + cat.id"
|
||||
:to="{
|
||||
name: 'apps-category',
|
||||
params: { category: cat.ident },
|
||||
params: { category: cat.id },
|
||||
}"
|
||||
:name="cat.displayName" />
|
||||
</template>
|
||||
|
|
@ -165,9 +165,13 @@ import AppScore from '../components/AppList/AppScore.vue'
|
|||
import Markdown from '../components/Markdown.vue'
|
||||
|
||||
import { APPS_SECTION_ENUM } from './../constants/AppsConstants.js'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
|
||||
Vue.use(VueLocalStorage)
|
||||
|
||||
const appstoreEnabled = loadState('settings', 'appstoreEnabled')
|
||||
const developerDocumentation = loadState('settings', 'appstoreDeveloperDocs')
|
||||
|
||||
export default {
|
||||
name: 'Apps',
|
||||
APPS_SECTION_ENUM,
|
||||
|
|
@ -208,6 +212,9 @@ export default {
|
|||
},
|
||||
|
||||
computed: {
|
||||
appstoreEnabled() {
|
||||
return appstoreEnabled
|
||||
},
|
||||
pageHeading() {
|
||||
if (this.$options.APPS_SECTION_ENUM[this.category]) {
|
||||
return this.$options.APPS_SECTION_ENUM[this.category]
|
||||
|
|
@ -233,9 +240,6 @@ export default {
|
|||
updateCount() {
|
||||
return this.$store.getters.getUpdateCount
|
||||
},
|
||||
settings() {
|
||||
return this.$store.getters.getServerData
|
||||
},
|
||||
|
||||
hasRating() {
|
||||
return this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5
|
||||
|
|
@ -302,7 +306,6 @@ export default {
|
|||
this.$store.dispatch('getCategories', { shouldRefetchCategories: true })
|
||||
this.$store.dispatch('getAllApps')
|
||||
this.$store.dispatch('getGroups', { offset: 0, limit: 5 })
|
||||
this.$store.commit('setUpdateCount', this.$store.getters.getServerData.updateCount)
|
||||
},
|
||||
|
||||
mounted() {
|
||||
|
|
@ -329,7 +332,7 @@ export default {
|
|||
})
|
||||
},
|
||||
openDeveloperDocumentation() {
|
||||
window.open(this.settings.developerDocumentation)
|
||||
window.open(developerDocumentation)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>
|
||||
*
|
||||
* @author John Molakvoæ <skjnldsv@protonmail.com>
|
||||
*
|
||||
* @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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
script('settings', 'vue-settings-apps-users-management');
|
||||
style('settings', 'settings');
|
||||
|
||||
// Do we have some data to inject ?
|
||||
if (is_array($_['serverData'])) {
|
||||
?>
|
||||
<span id="serverData" data-server="<?php p(json_encode($_['serverData'])); ?>"></span>
|
||||
<?php
|
||||
} ?>
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
* @license AGPL-3.0-or-later
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
|
|
@ -21,4 +21,4 @@
|
|||
*
|
||||
*/
|
||||
|
||||
# used for Personal/Additional settings as fallback for legacy settings
|
||||
// Empty template as Vue will take over the `id="conent"` of the base template element
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ use OCP\App\IAppManager;
|
|||
use OCP\AppFramework\Http\ContentSecurityPolicy;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\AppFramework\Services\IInitialState;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
use OCP\INavigationManager;
|
||||
|
|
@ -81,6 +82,8 @@ class AppSettingsControllerTest extends TestCase {
|
|||
private $urlGenerator;
|
||||
/** @var LoggerInterface|MockObject */
|
||||
private $logger;
|
||||
/** @var IInitialState|MockObject */
|
||||
private $initialState;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
|
@ -100,6 +103,7 @@ class AppSettingsControllerTest extends TestCase {
|
|||
$this->installer = $this->createMock(Installer::class);
|
||||
$this->urlGenerator = $this->createMock(IURLGenerator::class);
|
||||
$this->logger = $this->createMock(LoggerInterface::class);
|
||||
$this->initialState = $this->createMock(IInitialState::class);
|
||||
|
||||
$this->appSettingsController = new AppSettingsController(
|
||||
'settings',
|
||||
|
|
@ -114,7 +118,8 @@ class AppSettingsControllerTest extends TestCase {
|
|||
$this->bundleFetcher,
|
||||
$this->installer,
|
||||
$this->urlGenerator,
|
||||
$this->logger
|
||||
$this->logger,
|
||||
$this->initialState,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -125,52 +130,42 @@ class AppSettingsControllerTest extends TestCase {
|
|||
$expected = new JSONResponse([
|
||||
[
|
||||
'id' => 'auth',
|
||||
'ident' => 'auth',
|
||||
'displayName' => 'Authentication & authorization',
|
||||
],
|
||||
[
|
||||
'id' => 'customization',
|
||||
'ident' => 'customization',
|
||||
'displayName' => 'Customization',
|
||||
],
|
||||
[
|
||||
'id' => 'files',
|
||||
'ident' => 'files',
|
||||
'displayName' => 'Files',
|
||||
],
|
||||
[
|
||||
'id' => 'integration',
|
||||
'ident' => 'integration',
|
||||
'displayName' => 'Integration',
|
||||
],
|
||||
[
|
||||
'id' => 'monitoring',
|
||||
'ident' => 'monitoring',
|
||||
'displayName' => 'Monitoring',
|
||||
],
|
||||
[
|
||||
'id' => 'multimedia',
|
||||
'ident' => 'multimedia',
|
||||
'displayName' => 'Multimedia',
|
||||
],
|
||||
[
|
||||
'id' => 'office',
|
||||
'ident' => 'office',
|
||||
'displayName' => 'Office & text',
|
||||
],
|
||||
[
|
||||
'id' => 'organization',
|
||||
'ident' => 'organization',
|
||||
'displayName' => 'Organization',
|
||||
],
|
||||
[
|
||||
'id' => 'social',
|
||||
'ident' => 'social',
|
||||
'displayName' => 'Social & communication',
|
||||
],
|
||||
[
|
||||
'id' => 'tools',
|
||||
'ident' => 'tools',
|
||||
'displayName' => 'Tools',
|
||||
],
|
||||
]);
|
||||
|
|
@ -198,18 +193,16 @@ class AppSettingsControllerTest extends TestCase {
|
|||
->method('setActiveEntry')
|
||||
->with('core_apps');
|
||||
|
||||
$this->initialState
|
||||
->expects($this->exactly(4))
|
||||
->method('provideInitialState');
|
||||
|
||||
$policy = new ContentSecurityPolicy();
|
||||
$policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com');
|
||||
|
||||
$expected = new TemplateResponse('settings',
|
||||
'settings-vue',
|
||||
'settings/empty',
|
||||
[
|
||||
'serverData' => [
|
||||
'updateCount' => 0,
|
||||
'appstoreEnabled' => true,
|
||||
'bundles' => [],
|
||||
'developerDocumentation' => ''
|
||||
],
|
||||
'pageTitle' => 'Apps'
|
||||
],
|
||||
'user');
|
||||
|
|
@ -233,18 +226,16 @@ class AppSettingsControllerTest extends TestCase {
|
|||
->method('setActiveEntry')
|
||||
->with('core_apps');
|
||||
|
||||
$this->initialState
|
||||
->expects($this->exactly(4))
|
||||
->method('provideInitialState');
|
||||
|
||||
$policy = new ContentSecurityPolicy();
|
||||
$policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com');
|
||||
|
||||
$expected = new TemplateResponse('settings',
|
||||
'settings-vue',
|
||||
'settings/empty',
|
||||
[
|
||||
'serverData' => [
|
||||
'updateCount' => 0,
|
||||
'appstoreEnabled' => false,
|
||||
'bundles' => [],
|
||||
'developerDocumentation' => ''
|
||||
],
|
||||
'pageTitle' => 'Apps'
|
||||
],
|
||||
'user');
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ use OC\Encryption\Exceptions\ModuleDoesNotExistsException;
|
|||
use OC\ForbiddenException;
|
||||
use OC\Group\Manager;
|
||||
use OC\KnownUser\KnownUserService;
|
||||
use OC\User\Manager as UserManager;
|
||||
use OCA\Settings\Controller\UsersController;
|
||||
use OCP\Accounts\IAccount;
|
||||
use OCP\Accounts\IAccountManager;
|
||||
|
|
@ -42,21 +43,19 @@ use OCP\Accounts\IAccountProperty;
|
|||
use OCP\Accounts\PropertyDoesNotExistException;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Services\IInitialState;
|
||||
use OCP\BackgroundJob\IJobList;
|
||||
use OCP\Encryption\IEncryptionModule;
|
||||
use OCP\Encryption\IManager;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\IAvatarManager;
|
||||
use OCP\IConfig;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IL10N;
|
||||
use OCP\IRequest;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use OCP\IUserSession;
|
||||
use OCP\L10N\IFactory;
|
||||
use OCP\Mail\IMailer;
|
||||
use OCP\Security\ISecureRandom;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
|
||||
/**
|
||||
|
|
@ -67,7 +66,7 @@ use PHPUnit\Framework\MockObject\MockObject;
|
|||
class UsersControllerTest extends \Test\TestCase {
|
||||
/** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $groupManager;
|
||||
/** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
/** @var UserManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $userManager;
|
||||
/** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $userSession;
|
||||
|
|
@ -79,33 +78,29 @@ class UsersControllerTest extends \Test\TestCase {
|
|||
private $l10nFactory;
|
||||
/** @var IAppManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $appManager;
|
||||
/** @var IAvatarManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $avatarManager;
|
||||
/** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $l;
|
||||
/** @var AccountManager | \PHPUnit\Framework\MockObject\MockObject */
|
||||
/** @var AccountManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $accountManager;
|
||||
/** @var ISecureRandom | \PHPUnit\Framework\MockObject\MockObject */
|
||||
private $secureRandom;
|
||||
/** @var \OCA\Settings\Mailer\NewUserMailHelper|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $newUserMailHelper;
|
||||
/** @var IJobList | \PHPUnit\Framework\MockObject\MockObject */
|
||||
private $jobList;
|
||||
/** @var \OC\Security\IdentityProof\Manager |\PHPUnit\Framework\MockObject\MockObject */
|
||||
/** @var \OC\Security\IdentityProof\Manager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $securityManager;
|
||||
/** @var IManager | \PHPUnit\Framework\MockObject\MockObject */
|
||||
/** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $encryptionManager;
|
||||
/** @var KnownUserService|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $knownUserService;
|
||||
/** @var IEncryptionModule | \PHPUnit\Framework\MockObject\MockObject */
|
||||
/** @var IEncryptionModule|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $encryptionModule;
|
||||
/** @var IEventDispatcher|\PHPUnit\Framework\MockObject\MockObject */
|
||||
private $dispatcher;
|
||||
/** @var IInitialState|\PHPUnit\Framework\MockObject\MockObject*/
|
||||
private $initialState;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->userManager = $this->createMock(IUserManager::class);
|
||||
$this->userManager = $this->createMock(UserManager::class);
|
||||
$this->groupManager = $this->createMock(Manager::class);
|
||||
$this->userSession = $this->createMock(IUserSession::class);
|
||||
$this->config = $this->createMock(IConfig::class);
|
||||
|
|
@ -119,6 +114,7 @@ class UsersControllerTest extends \Test\TestCase {
|
|||
$this->encryptionManager = $this->createMock(IManager::class);
|
||||
$this->knownUserService = $this->createMock(KnownUserService::class);
|
||||
$this->dispatcher = $this->createMock(IEventDispatcher::class);
|
||||
$this->initialState = $this->createMock(IInitialState::class);
|
||||
|
||||
$this->l->method('t')
|
||||
->willReturnCallback(function ($text, $parameters = []) {
|
||||
|
|
@ -155,7 +151,8 @@ class UsersControllerTest extends \Test\TestCase {
|
|||
$this->jobList,
|
||||
$this->encryptionManager,
|
||||
$this->knownUserService,
|
||||
$this->dispatcher
|
||||
$this->dispatcher,
|
||||
$this->initialState,
|
||||
);
|
||||
} else {
|
||||
return $this->getMockBuilder(UsersController::class)
|
||||
|
|
@ -177,9 +174,10 @@ class UsersControllerTest extends \Test\TestCase {
|
|||
$this->jobList,
|
||||
$this->encryptionManager,
|
||||
$this->knownUserService,
|
||||
$this->dispatcher
|
||||
$this->dispatcher,
|
||||
$this->initialState,
|
||||
]
|
||||
)->setMethods($mockedMethods)->getMock();
|
||||
)->onlyMethods($mockedMethods)->getMock();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
4
dist/settings-apps-view-4529.js
vendored
4
dist/settings-apps-view-4529.js
vendored
File diff suppressed because one or more lines are too long
2
dist/settings-apps-view-4529.js.map
vendored
2
dist/settings-apps-view-4529.js.map
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue