Merge branch 'master' into enh/paginate-circles

This commit is contained in:
Maxence Lange 2022-01-27 08:21:35 -01:00 committed by GitHub
commit fc686a19f6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 255 additions and 12 deletions

View file

@ -0,0 +1,21 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
name: Pull request checks
on: pull_request
jobs:
block-merges-during-freeze:
name: Block merges during freezes
runs-on: ubuntu-latest
steps:
- name: Download version.php from ${{ github.base_ref }}
run: curl https://raw.githubusercontent.com/nextcloud/server/${{ github.base_ref }}/version.php --output version.php
- name: Run check
run: cat version.php | grep 'OC_VersionString' | grep -i -v 'RC'

View file

@ -169,6 +169,7 @@ OC.L10N.register(
"%s shared a file with you." : "%s hat eine Datei mit Dir geteilt.",
"%1$s shared some content with you.\nYou should have already received a separate email with a link to access it.\n" : "%1$s hat einen Inhalt mit Dir geteilt.\nDu solltest bereits eine weitere E-Mail mit einem Link für den Zugriff erhalten haben.\n",
"%1$s shared some content with you. You should have already received a separate email with a link to access it." : "%1$s hat einen Inhalt mit Dir geteilt. Du solltest bereits eine weitere E-Mail mit einem Link für den Zugriff erhalten haben.",
"Password to access content shared with you by %1$s" : "Passwort für den Zugriff auf den Inhalt, der von %1$s mit Dir geteilt wurde.",
"Password to access content" : "Passwort für den Zugriff auf den Inhalt",
"This item is already shared with this circle" : "Dieses Element wird bereits mit diesem Kreis geteilt",
"Could not find share" : "Freigabe konnte nicht gefunden werden",

View file

@ -167,6 +167,7 @@
"%s shared a file with you." : "%s hat eine Datei mit Dir geteilt.",
"%1$s shared some content with you.\nYou should have already received a separate email with a link to access it.\n" : "%1$s hat einen Inhalt mit Dir geteilt.\nDu solltest bereits eine weitere E-Mail mit einem Link für den Zugriff erhalten haben.\n",
"%1$s shared some content with you. You should have already received a separate email with a link to access it." : "%1$s hat einen Inhalt mit Dir geteilt. Du solltest bereits eine weitere E-Mail mit einem Link für den Zugriff erhalten haben.",
"Password to access content shared with you by %1$s" : "Passwort für den Zugriff auf den Inhalt, der von %1$s mit Dir geteilt wurde.",
"Password to access content" : "Passwort für den Zugriff auf den Inhalt",
"This item is already shared with this circle" : "Dieses Element wird bereits mit diesem Kreis geteilt",
"Could not find share" : "Freigabe konnte nicht gefunden werden",

View file

@ -167,6 +167,10 @@ OC.L10N.register(
"This contact is not available" : "A névjegy nem érhető el",
"%s shared a file with \"%s\"." : "%s megosztott egy fájlt a következővel: „%s”.",
"%s shared a file with you." : "%s megosztott egy fájlt Önnel.",
"%1$s shared some content with you.\nYou should have already received a separate email with a link to access it.\n" : "%1$s tartalmat osztott meg Önnel.\nMár meg kellett volna kapnia a különálló e-mailt, amely a hozzáféréshez szükséges hivatkozást tartalmazza.\n",
"%1$s shared some content with you. You should have already received a separate email with a link to access it." : "%1$s tartalmat osztott meg Önnel. Már meg kellett volna kapnia a különálló e-mailt, amely a hozzáféréshez szükséges hivatkozást tartalmazza.",
"Password to access content shared with you by %1$s" : "Jelszó a(z) %1$s által megosztott tartalom eléréséhez",
"Password to access content" : "Jelszó a tartalom eléréséhez",
"This item is already shared with this circle" : "Ez az elem már megosztásra került ezzel a körrel",
"Could not find share" : "A megosztás nem található",
"Bring cloud-users closer together." : "Közelebb hozza a felhőfelhasználókat.",

View file

@ -165,6 +165,10 @@
"This contact is not available" : "A névjegy nem érhető el",
"%s shared a file with \"%s\"." : "%s megosztott egy fájlt a következővel: „%s”.",
"%s shared a file with you." : "%s megosztott egy fájlt Önnel.",
"%1$s shared some content with you.\nYou should have already received a separate email with a link to access it.\n" : "%1$s tartalmat osztott meg Önnel.\nMár meg kellett volna kapnia a különálló e-mailt, amely a hozzáféréshez szükséges hivatkozást tartalmazza.\n",
"%1$s shared some content with you. You should have already received a separate email with a link to access it." : "%1$s tartalmat osztott meg Önnel. Már meg kellett volna kapnia a különálló e-mailt, amely a hozzáféréshez szükséges hivatkozást tartalmazza.",
"Password to access content shared with you by %1$s" : "Jelszó a(z) %1$s által megosztott tartalom eléréséhez",
"Password to access content" : "Jelszó a tartalom eléréséhez",
"This item is already shared with this circle" : "Ez az elem már megosztásra került ezzel a körrel",
"Could not find share" : "A megosztás nem található",
"Bring cloud-users closer together." : "Közelebb hozza a felhőfelhasználókat.",

View file

@ -25,7 +25,7 @@ OC.L10N.register(
"The request to link {circle} with {remote} has been accepted" : "{circle}と{remote}をリンクするリクエストが承認されました",
"You dismissed the request to link {remote} with {circle}" : "{remote}と{circle}のリンクリクエストを却下しました。",
"{author} dismissed the request to link {remote} with {circle}" : "{author}が{remote}と{circle}のリンクリクエストを却下しました",
"You canceled the request to link {circle} with {remote}" : "{サークル}と{リモート}とのリンクリクエストをキャンセルしました",
"You canceled the request to link {circle} with {remote}" : "{circle}と{remote}とのリンクリクエストをキャンセルしました",
"{author} canceled the request to link {circle} with {remote}" : "{author}が{circle}と{remote}のリンクリクエストをキャンセルしました",
"You accepted the request to link {remote} with {circle}" : "{リモート}と{サークル}のリンクリクエストを受け入れました。",
"{author} accepted the request to link {remote} with {circle}" : "{author}が{remote}と{circle}のリンクリクエストを受け入れました",

View file

@ -23,7 +23,7 @@
"The request to link {circle} with {remote} has been accepted" : "{circle}と{remote}をリンクするリクエストが承認されました",
"You dismissed the request to link {remote} with {circle}" : "{remote}と{circle}のリンクリクエストを却下しました。",
"{author} dismissed the request to link {remote} with {circle}" : "{author}が{remote}と{circle}のリンクリクエストを却下しました",
"You canceled the request to link {circle} with {remote}" : "{サークル}と{リモート}とのリンクリクエストをキャンセルしました",
"You canceled the request to link {circle} with {remote}" : "{circle}と{remote}とのリンクリクエストをキャンセルしました",
"{author} canceled the request to link {circle} with {remote}" : "{author}が{circle}と{remote}のリンクリクエストをキャンセルしました",
"You accepted the request to link {remote} with {circle}" : "{リモート}と{サークル}のリンクリクエストを受け入れました。",
"{author} accepted the request to link {remote} with {circle}" : "{author}が{remote}と{circle}のリンクリクエストを受け入れました",

View file

@ -75,24 +75,57 @@ OC.L10N.register(
"On events happening in a <strong>Circle</strong> of which you are a member" : "При событии в <strong>круге</strong>, которому вы принадлежите ",
"Any important event in a <strong>Circle</strong> you are moderating" : "Любое важное событие в модерируемом вами <strong>круге </strong> ",
"On global events happening in any <strong>Circle</strong>" : "При глобальном событии в <strong>круге</strong>, которому вы принадлежите ",
"Single" : "Единственный",
"Personal" : "Личный",
"System" : "Система",
"Visible" : "Видимый",
"Open" : "Открыть",
"Invite" : "Приглашение",
"Join Request" : "Запрос на вступление",
"Friends" : "Друзья",
"Password Protected" : "Защищено паролем",
"No Owner" : "Новый владелец",
"Hidden" : "Скрыто",
"Backend" : "Внутренний",
"Local" : "Локальный",
"Root" : "Корневой каталог",
"Circle Invite" : "Приглашение в круг",
"Federated" : "Федеративный",
"Mount point" : "Место установки",
"Nextcloud User" : "Пользователь Nextcloud",
"Nextcloud Group" : "Группа Nextcloud",
"Email Address" : "Адрес электронной почты",
"Contact" : "Контакт",
"Circle" : "Круг",
"Nextcloud App" : "Приложение Nextcloud",
"Member" : "Участник",
"Moderator" : "Модератор",
"Admin" : "Администратор",
"Owner" : "Владелец",
"%s shared »%s« with you." : "%s предоставил(а) вам доступ к «%s».",
"%s shared »%s« with \"%s\"." : "%s предоставил(а) доступ »%s« для \"%s\".",
"%s on %s" : "%s на %s",
"%1$s shared »%2$s« with you.\nYou should have already received a separate email with a link to access it.\n" : " %1$s поделился »%2$s« с вами.\nВы уже должны были получить отдельное письмо со ссылкой для доступа к нему.\n",
"%1$s shared »%2$s« with you. You should have already received a separate email with a link to access it." : "%1$s поделился »%2$s« с вами. Вы уже должны были получить отдельное письмо со ссылкой для доступа к нему.",
"Password to access »%1$s« shared to you by %2$s" : "Пароль для доступа к «%1$s», общий доступ к которому предоставлен вам пользователем %2$s",
"Password to access »%s«" : "Пароль для доступа к «%s»",
"It is protected with the following password:" : "Доступ защищён следующим паролем: ",
"%1$s via %2$s" : "%1$sчерез %2$s",
"Click the button below to open it." : "Нажмите расположенную ниже кнопку для его открытия.",
"Open »%s«" : "Открыть «%s»",
"%1$s shared multiple files with you.\nYou should have already received a separate email with a link to access them.\n" : "%1$s поделился с вами несколькими файлами.\nВы уже должны были получить отдельное письмо со ссылкой для доступа к ним.\n",
"%1$s shared multiple files with you. You should have already received a separate email with a link to access them." : "%1$s поделился с вами несколькими файлами. Вы уже должны были получить отдельное письмо со ссылкой для доступа к ним.",
"Password to access files shared to you by %1$s" : "Пароль для доступа к файлам, общий доступ к которому предоставлен вам пользователем %1$s",
"Password to access files" : "Пароль для доступа к файлам",
"%s shared multiple files with \"%s\"." : "%s поделился несколькими файлами с \"%s\".",
"%s shared multiple files with you." : "%s предоставил(а) вам доступ к нескольким файлам.",
"Boot up" : "Загрузка",
"Initialisation Nextcloud" : "Инициализация Nextcloud",
"Initialisation Circles App" : "Инициализация приложения Круги",
"Fresh installation status" : "Статус новой установки",
"Building Local Database" : "Создание локальной базы данных",
"Testing Basic Circle Creation" : "Тестирование базового созданного Круга",
"Adding local users and moderators" : "Добавление локальных пользователей и модераторов",
"Circle not found" : "Круг не найден",
"Circle not found " : "Круг не найден",
"A circle with that name exists" : "Круг с таким именем существует",
@ -117,7 +150,9 @@ OC.L10N.register(
"Accept" : "Принять",
"Refuse" : "Отказаться",
"Leave the circle" : "Покинуть Круг",
"%s" : "%s",
"Personal Circle" : "Личный круг",
"%s owned by %s" : "%sпринадлежащий %s",
"You need a specify a type of circle" : "Необходимо указать тип круга",
"This member is not the owner of the circle" : "Этот участник — не владелец круга",
"This member is not an admin of the circle" : "Этот участник — не администратор круга",
@ -130,8 +165,16 @@ OC.L10N.register(
"This user does not exist" : "Этот пользователь не существует",
"Email format is not valid" : "Неверный формат электронной почты",
"This contact is not available" : "Контакт не доступен",
"%s shared a file with \"%s\"." : "%s поделился файлом с \"%s\".",
"%s shared a file with you." : "%s поделился с вами файлом.",
"%1$s shared some content with you.\nYou should have already received a separate email with a link to access it.\n" : "%1$s поделился с вами некоторыми материалами.\nВы уже должны были получить отдельное письмо со ссылкой для доступа к нему.\n",
"%1$s shared some content with you. You should have already received a separate email with a link to access it." : "%1$s поделился с вами некоторыми материалами. Вы уже должны были получить отдельное письмо со ссылкой для доступа к нему.",
"Password to access content shared with you by %1$s" : "Пароль для доступа к содержимому, предоставленному вам %1$s",
"Password to access content" : "Пароль для доступа к содержимому",
"This item is already shared with this circle" : "Этот элемент уже используется в этом круге",
"Could not find share" : "Невозможно найти общий ресурс",
"Bring cloud-users closer together." : "Собирайте вокруг себе пользователей Вашего облака пользователей.",
"Circles allows your users to create their own groups of users/colleagues/friends.\nThose groups of users (or \"circles\") can then be used by any other app for sharing purpose." : "Круги позволяют вашим пользователям создавать свои собственные группы пользователей/коллег/друзей.\nЭти группы пользователей (или \"круги\") могут затем использоваться любым другим приложением для обмена информацией.",
"No files in here" : "Здесь нет файлов",
"No entries found in this folder" : "В этой папке ничего нет",
"Name" : "Имя",

View file

@ -73,24 +73,57 @@
"On events happening in a <strong>Circle</strong> of which you are a member" : "При событии в <strong>круге</strong>, которому вы принадлежите ",
"Any important event in a <strong>Circle</strong> you are moderating" : "Любое важное событие в модерируемом вами <strong>круге </strong> ",
"On global events happening in any <strong>Circle</strong>" : "При глобальном событии в <strong>круге</strong>, которому вы принадлежите ",
"Single" : "Единственный",
"Personal" : "Личный",
"System" : "Система",
"Visible" : "Видимый",
"Open" : "Открыть",
"Invite" : "Приглашение",
"Join Request" : "Запрос на вступление",
"Friends" : "Друзья",
"Password Protected" : "Защищено паролем",
"No Owner" : "Новый владелец",
"Hidden" : "Скрыто",
"Backend" : "Внутренний",
"Local" : "Локальный",
"Root" : "Корневой каталог",
"Circle Invite" : "Приглашение в круг",
"Federated" : "Федеративный",
"Mount point" : "Место установки",
"Nextcloud User" : "Пользователь Nextcloud",
"Nextcloud Group" : "Группа Nextcloud",
"Email Address" : "Адрес электронной почты",
"Contact" : "Контакт",
"Circle" : "Круг",
"Nextcloud App" : "Приложение Nextcloud",
"Member" : "Участник",
"Moderator" : "Модератор",
"Admin" : "Администратор",
"Owner" : "Владелец",
"%s shared »%s« with you." : "%s предоставил(а) вам доступ к «%s».",
"%s shared »%s« with \"%s\"." : "%s предоставил(а) доступ »%s« для \"%s\".",
"%s on %s" : "%s на %s",
"%1$s shared »%2$s« with you.\nYou should have already received a separate email with a link to access it.\n" : " %1$s поделился »%2$s« с вами.\nВы уже должны были получить отдельное письмо со ссылкой для доступа к нему.\n",
"%1$s shared »%2$s« with you. You should have already received a separate email with a link to access it." : "%1$s поделился »%2$s« с вами. Вы уже должны были получить отдельное письмо со ссылкой для доступа к нему.",
"Password to access »%1$s« shared to you by %2$s" : "Пароль для доступа к «%1$s», общий доступ к которому предоставлен вам пользователем %2$s",
"Password to access »%s«" : "Пароль для доступа к «%s»",
"It is protected with the following password:" : "Доступ защищён следующим паролем: ",
"%1$s via %2$s" : "%1$sчерез %2$s",
"Click the button below to open it." : "Нажмите расположенную ниже кнопку для его открытия.",
"Open »%s«" : "Открыть «%s»",
"%1$s shared multiple files with you.\nYou should have already received a separate email with a link to access them.\n" : "%1$s поделился с вами несколькими файлами.\nВы уже должны были получить отдельное письмо со ссылкой для доступа к ним.\n",
"%1$s shared multiple files with you. You should have already received a separate email with a link to access them." : "%1$s поделился с вами несколькими файлами. Вы уже должны были получить отдельное письмо со ссылкой для доступа к ним.",
"Password to access files shared to you by %1$s" : "Пароль для доступа к файлам, общий доступ к которому предоставлен вам пользователем %1$s",
"Password to access files" : "Пароль для доступа к файлам",
"%s shared multiple files with \"%s\"." : "%s поделился несколькими файлами с \"%s\".",
"%s shared multiple files with you." : "%s предоставил(а) вам доступ к нескольким файлам.",
"Boot up" : "Загрузка",
"Initialisation Nextcloud" : "Инициализация Nextcloud",
"Initialisation Circles App" : "Инициализация приложения Круги",
"Fresh installation status" : "Статус новой установки",
"Building Local Database" : "Создание локальной базы данных",
"Testing Basic Circle Creation" : "Тестирование базового созданного Круга",
"Adding local users and moderators" : "Добавление локальных пользователей и модераторов",
"Circle not found" : "Круг не найден",
"Circle not found " : "Круг не найден",
"A circle with that name exists" : "Круг с таким именем существует",
@ -115,7 +148,9 @@
"Accept" : "Принять",
"Refuse" : "Отказаться",
"Leave the circle" : "Покинуть Круг",
"%s" : "%s",
"Personal Circle" : "Личный круг",
"%s owned by %s" : "%sпринадлежащий %s",
"You need a specify a type of circle" : "Необходимо указать тип круга",
"This member is not the owner of the circle" : "Этот участник — не владелец круга",
"This member is not an admin of the circle" : "Этот участник — не администратор круга",
@ -128,8 +163,16 @@
"This user does not exist" : "Этот пользователь не существует",
"Email format is not valid" : "Неверный формат электронной почты",
"This contact is not available" : "Контакт не доступен",
"%s shared a file with \"%s\"." : "%s поделился файлом с \"%s\".",
"%s shared a file with you." : "%s поделился с вами файлом.",
"%1$s shared some content with you.\nYou should have already received a separate email with a link to access it.\n" : "%1$s поделился с вами некоторыми материалами.\nВы уже должны были получить отдельное письмо со ссылкой для доступа к нему.\n",
"%1$s shared some content with you. You should have already received a separate email with a link to access it." : "%1$s поделился с вами некоторыми материалами. Вы уже должны были получить отдельное письмо со ссылкой для доступа к нему.",
"Password to access content shared with you by %1$s" : "Пароль для доступа к содержимому, предоставленному вам %1$s",
"Password to access content" : "Пароль для доступа к содержимому",
"This item is already shared with this circle" : "Этот элемент уже используется в этом круге",
"Could not find share" : "Невозможно найти общий ресурс",
"Bring cloud-users closer together." : "Собирайте вокруг себе пользователей Вашего облака пользователей.",
"Circles allows your users to create their own groups of users/colleagues/friends.\nThose groups of users (or \"circles\") can then be used by any other app for sharing purpose." : "Круги позволяют вашим пользователям создавать свои собственные группы пользователей/коллег/друзей.\nЭти группы пользователей (или \"круги\") могут затем использоваться любым другим приложением для обмена информацией.",
"No files in here" : "Здесь нет файлов",
"No entries found in this folder" : "В этой папке ничего нет",
"Name" : "Имя",

View file

@ -169,6 +169,7 @@ OC.L10N.register(
"%s shared a file with you." : "%s sizinle bir dosya paylaştı.",
"%1$s shared some content with you.\nYou should have already received a separate email with a link to access it.\n" : "%1$s sizinle bir içerik paylaştı.\nErişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.\n",
"%1$s shared some content with you. You should have already received a separate email with a link to access it." : "%1$s sizinle bir içerik paylaştı. Erişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.",
"Password to access content shared with you by %1$s" : "%1$s tarafından sizinle paylaşılan içeriğe erişme parolası",
"Password to access content" : "İçeriğe erişme parolası",
"This item is already shared with this circle" : "Bu öge zaten bu çevre ile paylaşılmış",
"Could not find share" : "Paylaşım bulunamadı",

View file

@ -167,6 +167,7 @@
"%s shared a file with you." : "%s sizinle bir dosya paylaştı.",
"%1$s shared some content with you.\nYou should have already received a separate email with a link to access it.\n" : "%1$s sizinle bir içerik paylaştı.\nErişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.\n",
"%1$s shared some content with you. You should have already received a separate email with a link to access it." : "%1$s sizinle bir içerik paylaştı. Erişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.",
"Password to access content shared with you by %1$s" : "%1$s tarafından sizinle paylaşılan içeriğe erişme parolası",
"Password to access content" : "İçeriğe erişme parolası",
"This item is already shared with this circle" : "Bu öge zaten bu çevre ile paylaşılmış",
"Could not find share" : "Paylaşım bulunamadı",

View file

@ -38,6 +38,7 @@ use Closure;
use OC;
use OCA\Circles\Events\AddingCircleMemberEvent;
use OCA\Circles\Events\CircleMemberAddedEvent;
use OCA\Circles\Events\DestroyingCircleEvent;
use OCA\Circles\Events\Files\CreatingFileShareEvent;
use OCA\Circles\Events\Files\FileShareCreatedEvent;
use OCA\Circles\Events\Files\PreparingFileShareEvent;
@ -54,9 +55,10 @@ use OCA\Circles\Listeners\Examples\ExampleMembershipsRemoved;
use OCA\Circles\Listeners\Examples\ExampleRequestingCircleMember;
use OCA\Circles\Listeners\Files\AddingMemberSendMail as ListenerFilesAddingMemberSendMail;
use OCA\Circles\Listeners\Files\CreatingShareSendMail as ListenerFilesCreatingShareSendMail;
use OCA\Circles\Listeners\Files\PreparingShareSendMail as ListenerFilesPreparingShareSendMail;
use OCA\Circles\Listeners\Files\DestroyingCircle as ListenerFilesDestroyingCircle;
use OCA\Circles\Listeners\Files\MemberAddedSendMail as ListenerFilesMemberAddedSendMail;
use OCA\Circles\Listeners\Files\PreparingMemberSendMail as ListenerFilesPreparingMemberSendMail;
use OCA\Circles\Listeners\Files\PreparingShareSendMail as ListenerFilesPreparingShareSendMail;
use OCA\Circles\Listeners\Files\RemovingMember as ListenerFilesRemovingMember;
use OCA\Circles\Listeners\Files\ShareCreatedSendMail as ListenerFilesShareCreatedSendMail;
use OCA\Circles\Listeners\GroupCreated;
@ -174,6 +176,7 @@ class Application extends App implements IBootstrap {
RequestingCircleMemberEvent::class,
ListenerNotificationsRequestingMember::class
);
$context->registerEventListener(DestroyingCircleEvent::class, ListenerFilesDestroyingCircle::class);
// It seems that AccountManager use deprecated dispatcher, let's use a deprecated listener
$dispatcher = OC::$server->getEventDispatcher();

View file

@ -155,6 +155,7 @@ class CirclesMaintenance extends Base {
}
$this->outputService->setOccOutput($output);
$this->maintenanceService->setOccOutput($output);
for ($i = 1; $i <= $level; $i++) {
try {
$this->maintenanceService->runMaintenance($i);

View file

@ -151,6 +151,7 @@ class MemberLevel implements
$oldOwner = clone $event->getCircle()->getOwner();
$oldOwner->setLevel(Member::LEVEL_ADMIN);
$this->memberRequest->updateLevel($oldOwner);
$this->membershipService->onUpdate($oldOwner->getSingleId());
}
$this->membershipService->onUpdate($member->getSingleId());

View file

@ -0,0 +1,82 @@
<?php
declare(strict_types=1);
/**
* Circles - Bring cloud-users closer together.
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Maxence Lange <maxence@artificial-owl.com>
* @copyright 2021
* @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 OCA\Circles\Listeners\Files;
use ArtificialOwl\MySmallPhpTools\Traits\Nextcloud\nc22\TNC22Logger;
use ArtificialOwl\MySmallPhpTools\Traits\TStringTools;
use OCA\Circles\AppInfo\Application;
use OCA\Circles\Events\DestroyingCircleEvent;
use OCA\Circles\Exceptions\RequestBuilderException;
use OCA\Circles\Service\ShareWrapperService;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
/**
* Class AddingMemberSendMail
*
* @package OCA\Circles\Listeners\Files
*/
class DestroyingCircle implements IEventListener {
use TStringTools;
use TNC22Logger;
/** @var ShareWrapperService */
private $shareWrapperService;
/**
* AddingMember constructor.
*
* @param ShareWrapperService $shareWrapperService
*/
public function __construct(ShareWrapperService $shareWrapperService) {
$this->shareWrapperService = $shareWrapperService;
$this->setup('app', Application::APP_ID);
}
/**
* @param Event $event
*
* @throws RequestBuilderException
*/
public function handle(Event $event): void {
if (!$event instanceof DestroyingCircleEvent) {
return;
}
$circle = $event->getCircle();
$this->shareWrapperService->deleteSharesToCircle($circle->getSingleId());
}
}

View file

@ -95,7 +95,7 @@ class Membership extends ManagedModel implements IDeserializable, INC22QueryRow,
$this->setSingleId($singleId);
$this->setCircleId($circle->getSingleId());
$this->setInheritanceFirst($member->getSingleId());
$this->setInheritanceLast($inheritanceLast === '' ? $member->getCircleId() : $inheritanceLast);
$this->setInheritanceLast($inheritanceLast ?: $member->getCircleId());
$this->setLevel($member->getLevel());
}

View file

@ -76,6 +76,9 @@ class MaintenanceService {
/** @var FederatedUserService */
private $federatedUserService;
/** @var MembershipService */
private $membershipService;
/** @var EventWrapperService */
private $eventWrapperService;
@ -99,6 +102,7 @@ class MaintenanceService {
* @param ShareWrapperRequest $shareWrapperRequest
* @param SyncService $syncService
* @param FederatedUserService $federatedUserService
* @param MembershipService $membershipService
* @param EventWrapperService $eventWrapperService
* @param CircleService $circleService
* @param ConfigService $configService
@ -110,6 +114,7 @@ class MaintenanceService {
ShareWrapperRequest $shareWrapperRequest,
SyncService $syncService,
FederatedUserService $federatedUserService,
MembershipService $membershipService,
EventWrapperService $eventWrapperService,
CircleService $circleService,
ConfigService $configService
@ -121,6 +126,7 @@ class MaintenanceService {
$this->syncService = $syncService;
$this->federatedUserService = $federatedUserService;
$this->eventWrapperService = $eventWrapperService;
$this->membershipService = $membershipService;
$this->circleService = $circleService;
$this->configService = $configService;
}
@ -191,7 +197,7 @@ class MaintenanceService {
*/
private function runMaintenance1(): void {
try {
$this->output('remove circles with no owner');
$this->output('Remove circles with no owner');
$this->removeCirclesWithNoOwner();
} catch (Exception $e) {
}
@ -203,13 +209,13 @@ class MaintenanceService {
*/
private function runMaintenance2(): void {
try {
$this->output('remove members with no circles');
$this->output('Remove members with no circles');
$this->removeMembersWithNoCircles();
} catch (Exception $e) {
}
try {
$this->output('retry failed FederatedEvents (asap)');
$this->output('Retry failed FederatedEvents (asap)');
$this->eventWrapperService->retry(EventWrapperService::RETRY_ASAP);
} catch (Exception $e) {
}
@ -221,7 +227,7 @@ class MaintenanceService {
*/
private function runMaintenance3(): void {
try {
$this->output('retry failed FederatedEvents (hourly)');
$this->output('Retry failed FederatedEvents (hourly)');
$this->eventWrapperService->retry(EventWrapperService::RETRY_HOURLY);
} catch (Exception $e) {
}
@ -233,21 +239,22 @@ class MaintenanceService {
*/
private function runMaintenance4(): void {
try {
$this->output('retry failed FederatedEvents (daily)');
$this->output('Retry failed FederatedEvents (daily)');
$this->eventWrapperService->retry(EventWrapperService::RETRY_DAILY);
} catch (Exception $e) {
}
try {
// TODO: waiting for confirmation of a good migration before cleaning orphan shares
if ($this->configService->getAppValue(ConfigService::MIGRATION_22_CONFIRMED)) {
$this->output('remove deprecated shares');
if ($this->configService->getAppValueBool(ConfigService::MIGRATION_22_CONFIRMED)) {
$this->output('Remove deprecated shares');
$this->removeDeprecatedShares();
}
} catch (Exception $e) {
}
try {
$this->output('synchronizing local entities');
$this->output('Synchronizing local entities');
$this->syncService->sync();
} catch (Exception $e) {
}
@ -257,6 +264,12 @@ class MaintenanceService {
* every week
*/
private function runMaintenance5(): void {
try {
$this->output('Update memberships');
$this->updateAllMemberships();
} catch (Exception $e) {
}
// try {
// $this->output('refresh displayNames older than 7d');
// // $this->refreshOldDisplayNames();
@ -329,6 +342,21 @@ class MaintenanceService {
}
/**
* @throws InitiatorNotFoundException
* @throws RequestBuilderException
*/
private function updateAllMemberships(): void {
$probe = new CircleProbe();
$probe->includeSystemCircles()
->includeSingleCircles()
->includePersonalCircles();
foreach ($this->circleService->getCircles($probe) as $circle) {
$this->membershipService->manageMemberships($circle->getSingleId());
}
}
/**
* @throws RequestBuilderException
* @throws InitiatorNotFoundException

View file

@ -358,6 +358,8 @@ class MembershipService {
if ($item->getLevel() !== $membership->getLevel()) {
$this->membershipRequest->update($membership);
$new[] = $item;
} elseif ($item->getInheritancePath() !== $membership->getInheritancePath()) {
$this->membershipRequest->update($membership);
}
} catch (ItemNotFoundException $e) {
$this->membershipRequest->insert($membership);

View file

@ -102,6 +102,13 @@ class ShareWrapperService {
$this->shareWrapperRequest->delete((int)$shareWrapper->getId());
}
/**
* @param string $circleId
*/
public function deleteSharesToCircle(string $circleId) {
$this->shareWrapperRequest->deleteFromCircle($circleId);
}
/**
* @param string $circleId