Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

settings: Refactor appstore and user management code #43769

Merged
merged 4 commits into from
Feb 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 30 additions & 77 deletions apps/settings/lib/Controller/AppSettingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
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;
Expand All @@ -58,72 +59,26 @@
#[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;
}

/**
Expand All @@ -132,18 +87,22 @@ public function __construct(string $appName,
* @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;
}

Expand Down Expand Up @@ -184,17 +143,11 @@ public function listCategories(): JSONResponse {
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() {
Expand Down
91 changes: 24 additions & 67 deletions apps/settings/lib/Controller/UsersController.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,14 @@
* 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;

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;
Expand All @@ -59,6 +55,7 @@
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;
Expand All @@ -67,81 +64,35 @@
use OCP\IL10N;
use OCP\IRequest;
use OCP\IUser;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\Mail\IMailer;
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;
}


Expand Down Expand Up @@ -231,6 +182,7 @@ public function usersList(): TemplateResponse {
$userCount -= 1; // we also lower from one the total count
}
}

$userCount += $this->userManager->countUsersOfGroups($groupsInfo->getGroups());
$disabledUsers = $this->userManager->countDisabledUsersOfGroups($groupsNames);
}
Expand Down Expand Up @@ -280,7 +232,12 @@ public function usersList(): TemplateResponse {
$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')]);
}

/**
Expand Down
7 changes: 0 additions & 7 deletions apps/settings/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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>
2 changes: 1 addition & 1 deletion apps/settings/src/components/AppList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
7 changes: 6 additions & 1 deletion apps/settings/src/store/apps.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -164,6 +166,9 @@ const getters = {
getAllApps(state) {
return state.apps
},
getAppBundles(state) {
return state.bundles
},
getUpdateCount(state) {
return state.updateCount
},
Expand Down
2 changes: 1 addition & 1 deletion apps/settings/src/store/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@
*
*/

import { loadState } from '@nextcloud/initial-state'

const state = {
serverData: {},
serverData: loadState('settings', 'usersSettings', {}),
}
const mutations = {
setServerData(state, data) {
Expand Down
2 changes: 1 addition & 1 deletion apps/settings/src/store/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Loading
Loading