LINUX.ORG.RU

nextcloud php routes

 ,


0

1

Приветствую!
Есть файл приложения photos на nextcloud

cat /usr/local/www/nextcloud/apps/photos/appinfo/routes.php 

<?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/>.
 *
 */

return [
	'routes' => [
		['name' => 'api#setUserConfig', 'url' => '/api/v1/config/{key}', 'verb' => 'PUT'],
		['name' => 'api#serviceWorker', 'url' => '/service-worker.js', 'verb' => 'GET'],

		['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
		['name' => 'page#index', 'url' => '/videos', 'verb' => 'GET', 'postfix' => 'videos'],
		['name' => 'page#index', 'url' => '/favorites', 'verb' => 'GET', 'postfix' => 'favorites'], 
		['name' => 'page#index', 'url' => '/albums/{path}', 'verb' => 'GET', 'postfix' => 'albums',
			'requirements' => [
				'path' => '.*',
			],
			'defaults' => [
				'path' => '',
			]
		],
		['name' => 'page#index', 'url' => '/shared/{path}', 'verb' => 'GET', 'postfix' => 'shared',
			'requirements' => [
				'path' => '.*',
			],
			'defaults' => [
				'path' => '',
			]
		],
		['name' => 'page#index', 'url' => '/tags/{path}', 'verb' => 'GET', 'postfix' => 'tags',
			'requirements' => [
				'path' => '.*',
			],
			'defaults' => [
				'path' => '',
			]
		],
		 
		// apis
		[
			'name' => 'albums#myAlbums',
			'url' => '/api/v1/albums/{path}',
			'verb' => 'GET',
			'requirements' => [
				'path' => '.*',
			],
			'defaults' => [
				'path' => '',
			],
		],
		[
			'name' => 'albums#sharedAlbums',
			'url' => '/api/v1/shared/{path}',
			'verb' => 'GET',
			'requirements' => [
				'path' => '.*',
			],
			'defaults' => [
				'path' => '',
			],
		],
	]
];
в браузере по дефолту открывается по пути https://<мой сайт>/apps/photos/
что в нем подправить чтоб по дефолту открывался путь https://<мой сайт>/apps/photos/albums
Спасибо!

Ответ на: комментарий от firkax

Ты ошибся разделом, вот правильный www.linux.org.ru/forum/job/

Что то я не видел чтоб ты писал в джоб когда тебе надо было кнопку в Power button в Debian Bullseye поправить. Так чем моя тема «рожей» не вышла?

nextcloud - это опенсорс, freesoft
вопрос по php вроде к Web-development относится, что не так?

на форуме nextcloud спрашивал, там осилили только сменить открытие дефолтного приложения с files на photos, но так как по дефолту photos открывает кашей все фотки подряд. Хотелось бы сменить дефолтный раздел «Your photos» на «Albums». Нашел файл который вроде за это отвечает, трабла скилов не хватает на решение, в интернетах про php пишут, что роуты берут начало из корня, а корень в данном случае выступает именно ...apps/photos.
Как сменить на apps/photos/albums, может кто знает решение? Есть кто использует для домашней хранилки nextcloud?

kozanostra
() автор топика
Ответ на: комментарий от kozanostra

Я просто мимо проходил, но чисто по коду могу предположить, что к / надо добавить ‘postfix’ => ‘albums’

anonymous
()
Ответ на: комментарий от kozanostra

Ты привёл вырванный из контекста кусок пхп-кода, который и так есть у тех, кто пользуется этим nextcloud, и мало что скажет тем, кто им не пользовался, поскольку парсинг этого всего находится где-то в другом месте. Ты хочешь чтобы кто-то занялся расшифровкой смысла полей этого конфига за тебя?

Кроме того, ты даже вопрос задал так что в нём ничего не понятно. Что значит «по дефолту открывается»? Что ты вписывал в адресную строку? Там редирект откуда-то куда-то и ты хочешь его исправить?

а корень в данном случае выступает именно ...apps/photos.
Как сменить на apps/photos/albums, может кто знает решение?

Корень - это неизменяемая часть урла слева, к которой справа приписывается всё остальное. Ты точно хочешь не сменить корень.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

firkax ты используешь nextcloud? Ниже лучше объяснил?


Что есть.
Система: FreeBSD 12.2-RELEASE-p7 GENERIC amd64
Установленные пакеты для nextcloud:
nextcloud-php74-22.2.3
nginx-1.20.1_5,2
php74-7.4.26 с модулем fpm
memcached-1.6.12
postgresql12-server-12.9

Установленные apps в nextcloud:
Enabled:
- accessibility: 1.8.0
- admin_audit: 1.12.0
- bruteforcesettings: 2.2.0
- calendar: 3.0.0
- cloud_federation_api: 1.5.0
- contacts: 4.0.6
- contactsinteraction: 1.3.0
- dav: 1.19.0
- federatedfilesharing: 1.12.0
- files: 1.17.0
- files_external: 1.13.0
- files_pdfviewer: 2.3.1
- files_rightclick: 1.1.0
- files_sharing: 1.14.0
- files_trashbin: 1.12.0
- files_videoplayer: 1.11.0
- logreader: 2.7.0
- lookup_server_connector: 1.10.0
- mail: 1.11.0
- oauth2: 1.10.0
- password_policy: 1.12.0
- photos: 1.4.0
- previewgenerator: 3.4.0
- privacy: 1.6.0
- provisioning_api: 1.12.0
- serverinfo: 1.12.0
- settings: 1.4.0
- sharebymail: 1.12.0
- spreed: 12.1.2
- text: 3.3.0
- theming: 1.13.0
- twofactor_backupcodes: 1.11.0
- viewer: 1.6.0
- weather_status: 1.2.0
- workflowengine: 2.4.0

Для чего все это: для синхронизации фото с телефона.
Стартовая страница после логина dashboard сменена на photos по инструкции https://docs.nextcloud.com/server/12/admin_manual/configuration_server/config... добалением в config.php строку 'defaultapp' => 'photos'

Те кто использует nextcloud с фотографиями давно, знает, что раньше было приложение Gallery с разными плюшками. С версии вроде nextcloud 16 это приложение Gallery https://github.com/nextcloud/gallery заменили на photos https://github.com/nextcloud/photos/ .
Если система только установлена и фоток мало, то все ок. Быстро работает, быстро смотрим, но если фото много, то стоит подумать как это оптимизировать и на помощь приходит Preview Generator.
Вот как один из пользователей рекомендует https://rayagainstthemachine.net/linux administration/nextcloud-photos/ .
Уже лучше, но если фото много (у меня допустим 3000) то после логина мы видим кашу из наших фото без альбомов, директорий и это очень медленно пролистывается
ссылка картинки как выглядит https://disk.yandex.ru/i/L2VJ8wfOLQTTmg

корень приложения в данном контексте выделен красным
слева по менюшке «Мои фотографии» - адресс https://localhost.com/apps/photos/

нужно изменить код в файле /usr/local/www/nextcloud/apps/photos/appinfo/routes.php так чтоб при входе был переход на страницу

ссылка картинки желаемого https://disk.yandex.ru/i/u5S16Py4TPt6ng

слева по менюшке «Ваши каталоги» - адресс https://localhost.com/apps/photos/albums

погуглив в этом направлении находим, что https://habr.com/ru/sandbox/43322/ роутами это вполне реально использовать и да nextcloud использует их в своей работе https://docs.nextcloud.com/server/19/developer_manual/app/requests/routes.html
Вопрос, что поменять в файле маршрутов чтоб данное действие реализовать?

kozanostra
() автор топика
Ответ на: комментарий от anonymous

Я просто мимо проходил, но чисто по коду могу предположить, что к / надо добавить ‘postfix’ => ‘albums’

пробовал не помогло

kozanostra
() автор топика

['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],

Пальцем в небо, заменить на

['name' => 'page#index', 'url' => '/albums', 'verb' => 'GET'],

fernandos ★★★
()
Ответ на: комментарий от kozanostra

Мне кажется, там перегрузка роутов, там позже идёт

page#index’, ‘url’ => ‘/albums/{path}’,

fernandos ★★★
()
Ответ на: комментарий от kozanostra

firkax ты используешь nextcloud?

Нет, конечно.

Ниже лучше объяснил?

Да.

погуглив в этом направлении находим, что https://habr.com/ru/sandbox/43322/ роутами это вполне реально использовать

Откуда сделан этот (в общем случае неверный, тут скорее всего тоже) вывод? Роутами у пхпшников принято называть тривиальную штуку: конвертацию урла в название скрипта/функции которая будет вызвана для его отрисовки. Только они, в своих обычных традициях, вокруг этой тривиальной операции накрутили ненужных абстракций, что она стала в их исполнении сложной.

Так что, если только в этом файле не скрыто ещё какого-то функционала, то он тут не поможет.

корень приложения в данном контексте выделен красным
слева по менюшке «Мои фотографии» - адресс https://localhost.com/apps/photos/
нужно изменить код в файле /usr/local/www/nextcloud/apps/photos/appinfo/routes.php так чтоб при входе был переход на страницу

Адрес в меню и адрес дефолтной страницы после логина, подозреваю, могут быть разными. Я бы нашёл где используется 'defaultapp' - каким образом там генерируется из него урл для редиректа (может быть, он напрямую в урл вставляется, а может оно ещё у приложения спрашивает куда идти). Ну и отдельно поискал бы код рисования меню - откуда там берётся урл.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Большое спасибо за направление.
Да ты оказался прав, нужно копать глубже, нашел по 'defaultapp' файл /usr/local/www/nextcloud/lib/private/legacy/OC_Util.php с нужным кодом, похоже там все тяжелее


/**
         * Returns the URL of the default page
         * based on the system configuration and
         * the apps visible for the current user
         *
         * @return string URL
         * @suppress PhanDeprecatedFunction
         */
        public static function getDefaultPageUrl() {
                /** @var IConfig $config */
                $config = \OC::$server->get(IConfig::class);
                $urlGenerator = \OC::$server->getURLGenerator();
                // Deny the redirect if the URL contains a @
                // This prevents unvalidated redirects like ?redirect_url=:user@domain.com
                if (isset($_REQUEST['redirect_url']) && strpos($_REQUEST['redirect_url'], '@') === false) {
                        $location = $urlGenerator->getAbsoluteURL(urldecode($_REQUEST['redirect_url']));
                } else {
                        $defaultPage = \OC::$server->getConfig()->getAppValue('core', 'defaultpage');
                        if ($defaultPage) {
                                $location = $urlGenerator->getAbsoluteURL($defaultPage);
                        } else {
                                $appId = 'files';
                                $defaultApps = explode(',', $config->getSystemValue('defaultapp', 'dashboard,files'));

                                /** @var IUserSession $userSession */
                                $userSession = \OC::$server->get(IUserSession::class);
                                $user = $userSession->getUser();
                                if ($user) {
                                        $userDefaultApps = explode(',', $config->getUserValue($user->getUID(), 'core', 'defaultapp'));
                                        $defaultApps = array_filter(array_merge($userDefaultApps, $defaultApps));
                                }

                                // find the first app that is enabled for the current user
                                foreach ($defaultApps as $defaultApp) {
                                        $defaultApp = OC_App::cleanAppId(strip_tags($defaultApp));
                                        if (static::getAppManager()->isEnabledForUser($defaultApp)) {
                                                $appId = $defaultApp;
                                                break;
                                        }
                                }

                                if ($config->getSystemValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true') {
                                        $location = $urlGenerator->getAbsoluteURL('/apps/' . $appId . '/');
                                } else {
                                        $location = $urlGenerator->getAbsoluteURL('/index.php/apps/' . $appId . '/');
                                }
                        }
                }
                return $location;
 }

        /**
         * Redirect to the user default page
         *
         * @return void
         */
        public static function redirectToDefaultPage() {
                $location = self::getDefaultPageUrl();
                header('Location: ' . $location);
                exit();
        }



Возможно эта информация поможет кому то докопаться до истины.

kozanostra
() автор топика
Ответ на: комментарий от kozanostra

Очевидно там не предусмотрен редирект куда-то кроме главной страницы приложения.

Но можно в начало getDefaultPageUrl() вставить return '/apps/photos/albums' а весь остальной код вообще убрать. После этого эту штуку нельзя будет настраивать в конфигах, но тебе это и не нужно.

firkax ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.