diff options
Diffstat (limited to 'apps/user_status')
23 files changed, 161 insertions, 185 deletions
diff --git a/apps/user_status/l10n/bg.js b/apps/user_status/l10n/bg.js index c100350511e..c0cca7e6c43 100644 --- a/apps/user_status/l10n/bg.js +++ b/apps/user_status/l10n/bg.js @@ -4,7 +4,7 @@ OC.L10N.register( "Recent statuses" : "Последни състояния", "No recent status changes" : "Няма скорошни промени в състоянието", "In a meeting" : "В среща", - "Commuting" : "Работно пътуване", + "Commuting" : "Пътувам до работа", "Out sick" : "Болничен", "Vacationing" : "Отпуск", "Out of office" : "Извън офиса", @@ -12,7 +12,7 @@ OC.L10N.register( "In a call" : "В обаждане", "User status" : "Потребителско състояние", "Clear status after" : "Изчистване на състоянието след", - "What is your status?" : "Какъв е вашият статус?", + "What is your status?" : "Какво е вашето състояние?", "Previously set" : "Предишно зададени", "Reset status" : "Възстановяване на състоянието", "Reset status to \"{icon} {message}\"" : "Възстановяване на състоянието на „{icon} {message}“", @@ -22,11 +22,13 @@ OC.L10N.register( "There was an error clearing the status" : "Възникна грешка при изчистване на състоянието", "There was an error reverting the status" : "Имаше грешка при връщане на състоянието", "Set status" : "Задаване на състояние", - "Online status" : "Състояние на линия", + "Online status" : "Състояние", "Status message" : "Съобщение за състояние", + "Set absence period" : "Задай период на отсъствие", + "Set absence period and replacement" : "Задай период на отсъствие и заместник.", "Your status was set automatically" : "Състоянието ви беше зададено автоматично", - "Clear status message" : "Изчистване на съобщението за състояние", - "Set status message" : "Задаване на съобщение за състояние", + "Clear status message" : "Изчисти състоянието", + "Set status message" : "Задай състояние", "Don't clear" : "Да не се изчиства", "Today" : "Днес", "This week" : "Тази седмица", @@ -38,7 +40,7 @@ OC.L10N.register( "There was an error saving the new status" : "Възникна грешка при запазване на новото състояние", "30 minutes" : "30 минути", "1 hour" : "1 час", - "4 hours" : "4 часа", + "4 hours" : "4 чàса", "Mute all notifications" : "Заглушаване на всички известия", "Appear offline" : "Показване като офлайн" }, diff --git a/apps/user_status/l10n/bg.json b/apps/user_status/l10n/bg.json index 3d0cd96280c..0909badbed2 100644 --- a/apps/user_status/l10n/bg.json +++ b/apps/user_status/l10n/bg.json @@ -2,7 +2,7 @@ "Recent statuses" : "Последни състояния", "No recent status changes" : "Няма скорошни промени в състоянието", "In a meeting" : "В среща", - "Commuting" : "Работно пътуване", + "Commuting" : "Пътувам до работа", "Out sick" : "Болничен", "Vacationing" : "Отпуск", "Out of office" : "Извън офиса", @@ -10,7 +10,7 @@ "In a call" : "В обаждане", "User status" : "Потребителско състояние", "Clear status after" : "Изчистване на състоянието след", - "What is your status?" : "Какъв е вашият статус?", + "What is your status?" : "Какво е вашето състояние?", "Previously set" : "Предишно зададени", "Reset status" : "Възстановяване на състоянието", "Reset status to \"{icon} {message}\"" : "Възстановяване на състоянието на „{icon} {message}“", @@ -20,11 +20,13 @@ "There was an error clearing the status" : "Възникна грешка при изчистване на състоянието", "There was an error reverting the status" : "Имаше грешка при връщане на състоянието", "Set status" : "Задаване на състояние", - "Online status" : "Състояние на линия", + "Online status" : "Състояние", "Status message" : "Съобщение за състояние", + "Set absence period" : "Задай период на отсъствие", + "Set absence period and replacement" : "Задай период на отсъствие и заместник.", "Your status was set automatically" : "Състоянието ви беше зададено автоматично", - "Clear status message" : "Изчистване на съобщението за състояние", - "Set status message" : "Задаване на съобщение за състояние", + "Clear status message" : "Изчисти състоянието", + "Set status message" : "Задай състояние", "Don't clear" : "Да не се изчиства", "Today" : "Днес", "This week" : "Тази седмица", @@ -36,7 +38,7 @@ "There was an error saving the new status" : "Възникна грешка при запазване на новото състояние", "30 minutes" : "30 минути", "1 hour" : "1 час", - "4 hours" : "4 часа", + "4 hours" : "4 чàса", "Mute all notifications" : "Заглушаване на всички известия", "Appear offline" : "Показване като офлайн" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_status/l10n/es_AR.js b/apps/user_status/l10n/es_AR.js deleted file mode 100644 index 4e9b8b095c7..00000000000 --- a/apps/user_status/l10n/es_AR.js +++ /dev/null @@ -1,22 +0,0 @@ -OC.L10N.register( - "user_status", - { - "Set status" : "Establecer estado", - "Online status" : "Estado en línea", - "Status message" : "Mensaje de estado", - "Clear status message" : "Limpiar mensaje de estado", - "Set status message" : "Establecer mensaje de estado", - "Away" : "Lejos", - "Do not disturb" : "No molestar", - "Don't clear" : "No vaciar", - "Today" : "Hoy", - "This week" : "Esta semana", - "Online" : "En línea", - "Invisible" : "Invisible", - "Offline" : "Sin conexión", - "30 minutes" : "30 minutos", - "1 hour" : "1 hora", - "4 hours" : "4 horas", - "Clear status message after" : "Limpiar mensaje de estado después" -}, -"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/user_status/l10n/es_AR.json b/apps/user_status/l10n/es_AR.json deleted file mode 100644 index b510ed89617..00000000000 --- a/apps/user_status/l10n/es_AR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ "translations": { - "Set status" : "Establecer estado", - "Online status" : "Estado en línea", - "Status message" : "Mensaje de estado", - "Clear status message" : "Limpiar mensaje de estado", - "Set status message" : "Establecer mensaje de estado", - "Away" : "Lejos", - "Do not disturb" : "No molestar", - "Don't clear" : "No vaciar", - "Today" : "Hoy", - "This week" : "Esta semana", - "Online" : "En línea", - "Invisible" : "Invisible", - "Offline" : "Sin conexión", - "30 minutes" : "30 minutos", - "1 hour" : "1 hora", - "4 hours" : "4 horas", - "Clear status message after" : "Limpiar mensaje de estado después" -},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" -}
\ No newline at end of file diff --git a/apps/user_status/l10n/hu.js b/apps/user_status/l10n/hu.js index 2075d1dce52..c24669860aa 100644 --- a/apps/user_status/l10n/hu.js +++ b/apps/user_status/l10n/hu.js @@ -26,6 +26,8 @@ OC.L10N.register( "Set status" : "Állapot beállítása", "Online status" : "Elérhető állapot", "Status message" : "Állapotüzenet", + "Set absence period" : "Távolléti időszak beállítása", + "Set absence period and replacement" : "Távolléti időszak és helyettes beállítása", "Your status was set automatically" : "Az állapota automatikusan lett beállítva", "Clear status message" : "Állapotüzenet törlése", "Set status message" : "Állapotüzenet beállítása", diff --git a/apps/user_status/l10n/hu.json b/apps/user_status/l10n/hu.json index 313b66be2ed..dcbe3b70f3b 100644 --- a/apps/user_status/l10n/hu.json +++ b/apps/user_status/l10n/hu.json @@ -24,6 +24,8 @@ "Set status" : "Állapot beállítása", "Online status" : "Elérhető állapot", "Status message" : "Állapotüzenet", + "Set absence period" : "Távolléti időszak beállítása", + "Set absence period and replacement" : "Távolléti időszak és helyettes beállítása", "Your status was set automatically" : "Az állapota automatikusan lett beállítva", "Clear status message" : "Állapotüzenet törlése", "Set status message" : "Állapotüzenet beállítása", diff --git a/apps/user_status/l10n/lo.js b/apps/user_status/l10n/lo.js deleted file mode 100644 index 1038b87d53e..00000000000 --- a/apps/user_status/l10n/lo.js +++ /dev/null @@ -1,24 +0,0 @@ -OC.L10N.register( - "user_status", - { - "Set status" : "ຕັ້ງຄ່າສະຖານະພາບ", - "Online status" : "ສະຖານະພາບອອນລາຍ", - "Status message" : "ສະຖານະຂໍ້ຄວາມ", - "Clear status message" : "ລ້າງສະຖານະພາບຂໍ້ຄວາມ", - "Set status message" : "ຕັ້ງຄ່າສະຖານະພາບຂໍ້ຄວາມ", - "Away" : "ອອກໄປ", - "Do not disturb" : "ຫ້າມລົບກວນ", - "Don't clear" : "ບໍ່ຈະແຈ້ງ", - "Today" : "ມື້ນີ້", - "This week" : "ທິດນີ້", - "Online" : "ອອນລາຍ", - "Invisible" : "ເບິ່ງບໍ່ເຫັນ", - "Offline" : "ອັອບລາຍ", - "30 minutes" : "30 ນາທີ", - "1 hour" : "1 ຊົ່ວໂມງ", - "4 hours" : "4 ຊົ່ວໂມງ", - "Mute all notifications" : "ປິດການແຈ້ງເຕືອນທັງໝົດ", - "Appear offline" : "ເປີດອັອບລາຍ", - "Clear status message after" : "ລ້າງສະຖານະພາບຂໍ້ຄວາມພາຍຫຼັງ" -}, -"nplurals=1; plural=0;"); diff --git a/apps/user_status/l10n/lo.json b/apps/user_status/l10n/lo.json deleted file mode 100644 index afba4141134..00000000000 --- a/apps/user_status/l10n/lo.json +++ /dev/null @@ -1,22 +0,0 @@ -{ "translations": { - "Set status" : "ຕັ້ງຄ່າສະຖານະພາບ", - "Online status" : "ສະຖານະພາບອອນລາຍ", - "Status message" : "ສະຖານະຂໍ້ຄວາມ", - "Clear status message" : "ລ້າງສະຖານະພາບຂໍ້ຄວາມ", - "Set status message" : "ຕັ້ງຄ່າສະຖານະພາບຂໍ້ຄວາມ", - "Away" : "ອອກໄປ", - "Do not disturb" : "ຫ້າມລົບກວນ", - "Don't clear" : "ບໍ່ຈະແຈ້ງ", - "Today" : "ມື້ນີ້", - "This week" : "ທິດນີ້", - "Online" : "ອອນລາຍ", - "Invisible" : "ເບິ່ງບໍ່ເຫັນ", - "Offline" : "ອັອບລາຍ", - "30 minutes" : "30 ນາທີ", - "1 hour" : "1 ຊົ່ວໂມງ", - "4 hours" : "4 ຊົ່ວໂມງ", - "Mute all notifications" : "ປິດການແຈ້ງເຕືອນທັງໝົດ", - "Appear offline" : "ເປີດອັອບລາຍ", - "Clear status message after" : "ລ້າງສະຖານະພາບຂໍ້ຄວາມພາຍຫຼັງ" -},"pluralForm" :"nplurals=1; plural=0;" -}
\ No newline at end of file diff --git a/apps/user_status/l10n/nl.js b/apps/user_status/l10n/nl.js index 1f9f157d3a1..99655a094fc 100644 --- a/apps/user_status/l10n/nl.js +++ b/apps/user_status/l10n/nl.js @@ -17,11 +17,17 @@ OC.L10N.register( "Predefined statuses" : "Voorgedefinieerde statussen", "Previously set" : "Eerder ingesteld", "Reset status" : "Reset status", + "Reset status to \"{icon} {message}\"" : "Status terugzetten naar \"{icon} {message}\"", + "Reset status to \"{message}\"" : "Status terugzetten naar \"{message}\"", + "Reset status to \"{icon}\"" : "Status terugzetten naar \"{icon}\"", "There was an error saving the status" : "Er is een fout opgetreden bij het bewaren van de status", "There was an error clearing the status" : "Er is een fout opgetreden bij het leegmaken van de status", + "There was an error reverting the status" : "Er was een fout bij het terugdraaien van de status", "Set status" : "Status instellen", "Online status" : "Online status", "Status message" : "Statusbericht", + "Set absence period" : "Afwezigheidsperiode instellen", + "Set absence period and replacement" : "Afwezigheidsperiode en vervanging instellen", "Your status was set automatically" : "Uw status is automatisch ingesteld", "Clear status message" : "Statusbericht wissen", "Set status message" : "Statusbericht instellen", diff --git a/apps/user_status/l10n/nl.json b/apps/user_status/l10n/nl.json index 58cfe0c305e..f345b68c6ef 100644 --- a/apps/user_status/l10n/nl.json +++ b/apps/user_status/l10n/nl.json @@ -15,11 +15,17 @@ "Predefined statuses" : "Voorgedefinieerde statussen", "Previously set" : "Eerder ingesteld", "Reset status" : "Reset status", + "Reset status to \"{icon} {message}\"" : "Status terugzetten naar \"{icon} {message}\"", + "Reset status to \"{message}\"" : "Status terugzetten naar \"{message}\"", + "Reset status to \"{icon}\"" : "Status terugzetten naar \"{icon}\"", "There was an error saving the status" : "Er is een fout opgetreden bij het bewaren van de status", "There was an error clearing the status" : "Er is een fout opgetreden bij het leegmaken van de status", + "There was an error reverting the status" : "Er was een fout bij het terugdraaien van de status", "Set status" : "Status instellen", "Online status" : "Online status", "Status message" : "Statusbericht", + "Set absence period" : "Afwezigheidsperiode instellen", + "Set absence period and replacement" : "Afwezigheidsperiode en vervanging instellen", "Your status was set automatically" : "Uw status is automatisch ingesteld", "Clear status message" : "Statusbericht wissen", "Set status message" : "Statusbericht instellen", diff --git a/apps/user_status/l10n/ru.js b/apps/user_status/l10n/ru.js index 4f518bdcede..901c313f537 100644 --- a/apps/user_status/l10n/ru.js +++ b/apps/user_status/l10n/ru.js @@ -2,46 +2,48 @@ OC.L10N.register( "user_status", { "Recent statuses" : "Недавние статусы", - "No recent status changes" : "Недавние изменения статуса отсуствуют ", + "No recent status changes" : "Нет недавних изменений статуса", "In a meeting" : "На встрече", "Commuting" : "В пути", - "Out sick" : "Болею", + "Out sick" : "Болен", "Vacationing" : "В отпуске", "Out of office" : "Вне офиса", - "Working remotely" : "Удалённая работа", - "In a call" : "В звонке", + "Working remotely" : "Удалённо", + "In a call" : "В вызове", "User status" : "Статус пользователя", - "Clear status after" : "Удалить статус через", - "Emoji for your status message" : "Эмодзи для вашего сообщения о состоянии", - "What is your status?" : "Какой у вас статус?", + "Clear status after" : "Очистить статус после", + "Emoji for your status message" : "Эмодзи для вашего сообщения к статусу", + "What is your status?" : "Какой у Вас статус?", "Predefined statuses" : "Предопределенные статусы", "Previously set" : "Установлено ранее", "Reset status" : "Сбросить статус", "Reset status to \"{icon} {message}\"" : "Сбросить статус на \"{icon} {message}\"", "Reset status to \"{message}\"" : "Сбросить статус на \"{message}\"", "Reset status to \"{icon}\"" : "Сбросить статус на \"{icon}\"", - "There was an error saving the status" : "Не удалось сохранить статус", - "There was an error clearing the status" : "Не удалось убрать статус", + "There was an error saving the status" : "Произошла ошибка при сохранении статуса", + "There was an error clearing the status" : "Произошла ошибка при удалении статуса", "There was an error reverting the status" : "Произошла ошибка при сбросе статуса", "Set status" : "Установить статус", - "Online status" : "Статус работы в сети", + "Online status" : "Онлайн статус", "Status message" : "Описание статуса", + "Set absence period" : "Задать период отсутствия", + "Set absence period and replacement" : "Задать период отсутствия и замену", "Your status was set automatically" : "Ваш статус был установлен автоматически", - "Clear status message" : "Удалить описание статуса", - "Set status message" : "Установить описание статуса", + "Clear status message" : "Удалить сообщение к статусу", + "Set status message" : "Установить сообщение к статусу", "Don't clear" : "Не очищать", "Today" : "Сегодня", "This week" : "Эта неделя", - "Online" : "На связи", - "Away" : "Отошёл", + "Online" : "В сети", + "Away" : "Неактивен", "Do not disturb" : "Не беспокоить", - "Invisible" : "Невидимка", - "Offline" : "Автономно", - "There was an error saving the new status" : "Не удалось сохранить новый статус", + "Invisible" : "Невидимый", + "Offline" : "Не в сети", + "There was an error saving the new status" : "Произошла ошибка при сохранении нового статуса", "30 minutes" : "30 минут", "1 hour" : "1 час", "4 hours" : "4 часа", "Mute all notifications" : "Отключить все уведомления", - "Appear offline" : "Возможно, не в сети" + "Appear offline" : "\"Не в сети\" для остальных" }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/user_status/l10n/ru.json b/apps/user_status/l10n/ru.json index e6dc51b2f9d..8a1967e1196 100644 --- a/apps/user_status/l10n/ru.json +++ b/apps/user_status/l10n/ru.json @@ -1,45 +1,47 @@ { "translations": { "Recent statuses" : "Недавние статусы", - "No recent status changes" : "Недавние изменения статуса отсуствуют ", + "No recent status changes" : "Нет недавних изменений статуса", "In a meeting" : "На встрече", "Commuting" : "В пути", - "Out sick" : "Болею", + "Out sick" : "Болен", "Vacationing" : "В отпуске", "Out of office" : "Вне офиса", - "Working remotely" : "Удалённая работа", - "In a call" : "В звонке", + "Working remotely" : "Удалённо", + "In a call" : "В вызове", "User status" : "Статус пользователя", - "Clear status after" : "Удалить статус через", - "Emoji for your status message" : "Эмодзи для вашего сообщения о состоянии", - "What is your status?" : "Какой у вас статус?", + "Clear status after" : "Очистить статус после", + "Emoji for your status message" : "Эмодзи для вашего сообщения к статусу", + "What is your status?" : "Какой у Вас статус?", "Predefined statuses" : "Предопределенные статусы", "Previously set" : "Установлено ранее", "Reset status" : "Сбросить статус", "Reset status to \"{icon} {message}\"" : "Сбросить статус на \"{icon} {message}\"", "Reset status to \"{message}\"" : "Сбросить статус на \"{message}\"", "Reset status to \"{icon}\"" : "Сбросить статус на \"{icon}\"", - "There was an error saving the status" : "Не удалось сохранить статус", - "There was an error clearing the status" : "Не удалось убрать статус", + "There was an error saving the status" : "Произошла ошибка при сохранении статуса", + "There was an error clearing the status" : "Произошла ошибка при удалении статуса", "There was an error reverting the status" : "Произошла ошибка при сбросе статуса", "Set status" : "Установить статус", - "Online status" : "Статус работы в сети", + "Online status" : "Онлайн статус", "Status message" : "Описание статуса", + "Set absence period" : "Задать период отсутствия", + "Set absence period and replacement" : "Задать период отсутствия и замену", "Your status was set automatically" : "Ваш статус был установлен автоматически", - "Clear status message" : "Удалить описание статуса", - "Set status message" : "Установить описание статуса", + "Clear status message" : "Удалить сообщение к статусу", + "Set status message" : "Установить сообщение к статусу", "Don't clear" : "Не очищать", "Today" : "Сегодня", "This week" : "Эта неделя", - "Online" : "На связи", - "Away" : "Отошёл", + "Online" : "В сети", + "Away" : "Неактивен", "Do not disturb" : "Не беспокоить", - "Invisible" : "Невидимка", - "Offline" : "Автономно", - "There was an error saving the new status" : "Не удалось сохранить новый статус", + "Invisible" : "Невидимый", + "Offline" : "Не в сети", + "There was an error saving the new status" : "Произошла ошибка при сохранении нового статуса", "30 minutes" : "30 минут", "1 hour" : "1 час", "4 hours" : "4 часа", "Mute all notifications" : "Отключить все уведомления", - "Appear offline" : "Возможно, не в сети" + "Appear offline" : "\"Не в сети\" для остальных" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/apps/user_status/l10n/sw.js b/apps/user_status/l10n/sw.js new file mode 100644 index 00000000000..5470b5c623f --- /dev/null +++ b/apps/user_status/l10n/sw.js @@ -0,0 +1,28 @@ +OC.L10N.register( + "user_status", + { + "Out of office" : "Nje ya ofisi", + "User status" : "Hadhi ya mtumiaji", + "Emoji for your status message" : "Emoji kwa ujumbe wako wa hadhi", + "What is your status?" : "Hadhi yako ni nini?", + "Previously set" : "Imepangiliwa mwanzo", + "Reset status" : "Pangilia hali", + "Set status" : "Panglia hali", + "Online status" : "Hadhi ya mtandaoni", + "Status message" : "Ujumbe wa hadhi", + "Your status was set automatically" : "Hadhi yako ilipangiliwa moja kwa moja", + "Clear status message" : "Futa jumbe za wadhifa", + "Set status message" : "Pangilia hali ya ujumbe", + "Don't clear" : "Usifute", + "Today" : "Leo", + "This week" : "Wiki hii", + "Online" : "Mtandaoni", + "Away" : "Mbali", + "Do not disturb" : "Acha kusumbua", + "Invisible" : "Haionekani", + "Offline" : "Nje ya mtandao", + "30 minutes" : "Dakika 30", + "1 hour" : "Saa 1", + "4 hours" : "Masaa 4" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/user_status/l10n/sw.json b/apps/user_status/l10n/sw.json new file mode 100644 index 00000000000..6e0c9c6a77c --- /dev/null +++ b/apps/user_status/l10n/sw.json @@ -0,0 +1,26 @@ +{ "translations": { + "Out of office" : "Nje ya ofisi", + "User status" : "Hadhi ya mtumiaji", + "Emoji for your status message" : "Emoji kwa ujumbe wako wa hadhi", + "What is your status?" : "Hadhi yako ni nini?", + "Previously set" : "Imepangiliwa mwanzo", + "Reset status" : "Pangilia hali", + "Set status" : "Panglia hali", + "Online status" : "Hadhi ya mtandaoni", + "Status message" : "Ujumbe wa hadhi", + "Your status was set automatically" : "Hadhi yako ilipangiliwa moja kwa moja", + "Clear status message" : "Futa jumbe za wadhifa", + "Set status message" : "Pangilia hali ya ujumbe", + "Don't clear" : "Usifute", + "Today" : "Leo", + "This week" : "Wiki hii", + "Online" : "Mtandaoni", + "Away" : "Mbali", + "Do not disturb" : "Acha kusumbua", + "Invisible" : "Haionekani", + "Offline" : "Nje ya mtandao", + "30 minutes" : "Dakika 30", + "1 hour" : "Saa 1", + "4 hours" : "Masaa 4" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/user_status/lib/Listener/UserLiveStatusListener.php b/apps/user_status/lib/Listener/UserLiveStatusListener.php index aad0943b8d0..2db999d3712 100644 --- a/apps/user_status/lib/Listener/UserLiveStatusListener.php +++ b/apps/user_status/lib/Listener/UserLiveStatusListener.php @@ -61,8 +61,8 @@ class UserLiveStatusListener implements IEventListener { // If the status is user-defined and one of the persistent status, we // will not override it. - if ($userStatus->getIsUserDefined() && - \in_array($userStatus->getStatus(), StatusService::PERSISTENT_STATUSES, true)) { + if ($userStatus->getIsUserDefined() + && \in_array($userStatus->getStatus(), StatusService::PERSISTENT_STATUSES, true)) { return; } diff --git a/apps/user_status/lib/Service/StatusService.php b/apps/user_status/lib/Service/StatusService.php index 9adc13e4dbf..188eb26d1d7 100644 --- a/apps/user_status/lib/Service/StatusService.php +++ b/apps/user_status/lib/Service/StatusService.php @@ -167,7 +167,7 @@ class StatusService { $userStatus->setIsBackup(false); if ($userStatus->getId() === null) { - return $this->mapper->insert($userStatus); + return $this->insertWithoutThrowingUniqueConstrain($userStatus); } return $this->mapper->update($userStatus); @@ -211,7 +211,7 @@ class StatusService { $userStatus->setStatusMessageTimestamp($this->timeFactory->now()->getTimestamp()); if ($userStatus->getId() === null) { - return $this->mapper->insert($userStatus); + return $this->insertWithoutThrowingUniqueConstrain($userStatus); } return $this->mapper->update($userStatus); @@ -313,7 +313,7 @@ class StatusService { if ($userStatus->getId() !== null) { return $this->mapper->update($userStatus); } - return $this->mapper->insert($userStatus); + return $this->insertWithoutThrowingUniqueConstrain($userStatus); } /** @@ -360,7 +360,7 @@ class StatusService { $userStatus->setStatusMessageTimestamp($this->timeFactory->now()->getTimestamp()); if ($userStatus->getId() === null) { - return $this->mapper->insert($userStatus); + return $this->insertWithoutThrowingUniqueConstrain($userStatus); } return $this->mapper->update($userStatus); @@ -584,4 +584,16 @@ class StatusService { // For users that matched restore the previous status $this->mapper->restoreBackupStatuses($restoreIds); } + + protected function insertWithoutThrowingUniqueConstrain(UserStatus $userStatus): UserStatus { + try { + return $this->mapper->insert($userStatus); + } catch (Exception $e) { + // Ignore if a parallel request already set the status + if ($e->getReason() !== Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + throw $e; + } + } + return $userStatus; + } } diff --git a/apps/user_status/openapi.json b/apps/user_status/openapi.json index a0d30693e37..65d9af59fef 100644 --- a/apps/user_status/openapi.json +++ b/apps/user_status/openapi.json @@ -427,7 +427,8 @@ "schema": { "type": "integer", "format": "int64", - "nullable": true + "nullable": true, + "default": null } }, { @@ -438,6 +439,7 @@ "type": "integer", "format": "int64", "nullable": true, + "default": null, "minimum": 0 } }, diff --git a/apps/user_status/tests/Unit/CapabilitiesTest.php b/apps/user_status/tests/Unit/CapabilitiesTest.php index ef721eaa90b..f07892ff3fd 100644 --- a/apps/user_status/tests/Unit/CapabilitiesTest.php +++ b/apps/user_status/tests/Unit/CapabilitiesTest.php @@ -24,9 +24,7 @@ class CapabilitiesTest extends TestCase { $this->capabilities = new Capabilities($this->emojiHelper); } - /** - * @dataProvider getCapabilitiesDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('getCapabilitiesDataProvider')] public function testGetCapabilities(bool $supportsEmojis): void { $this->emojiHelper->expects($this->once()) ->method('doesPlatformSupportEmoji') diff --git a/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php b/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php index 45ee9c4fdba..e99290319ed 100644 --- a/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php +++ b/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php @@ -87,9 +87,7 @@ class UserStatusControllerTest extends TestCase { $this->controller->getStatus(); } - /** - * @dataProvider setStatusDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('setStatusDataProvider')] public function testSetStatus( string $statusType, ?string $statusIcon, @@ -149,9 +147,7 @@ class UserStatusControllerTest extends TestCase { ]; } - /** - * @dataProvider setPredefinedMessageDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('setPredefinedMessageDataProvider')] public function testSetPredefinedMessage( string $messageId, ?int $clearAt, @@ -211,9 +207,7 @@ class UserStatusControllerTest extends TestCase { ]; } - /** - * @dataProvider setCustomMessageDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('setCustomMessageDataProvider')] public function testSetCustomMessage( ?string $statusIcon, string $message, diff --git a/apps/user_status/tests/Unit/Db/UserStatusMapperTest.php b/apps/user_status/tests/Unit/Db/UserStatusMapperTest.php index c9bda492210..ea4480489c7 100644 --- a/apps/user_status/tests/Unit/Db/UserStatusMapperTest.php +++ b/apps/user_status/tests/Unit/Db/UserStatusMapperTest.php @@ -134,9 +134,7 @@ class UserStatusMapperTest extends TestCase { $this->mapper->insert($userStatus2); } - /** - * @dataProvider clearStatusesOlderThanDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('clearStatusesOlderThanDataProvider')] public function testClearStatusesOlderThan(string $status, bool $isUserDefined, int $timestamp, bool $expectsClean): void { $oldStatus = UserStatus::fromParams([ 'userId' => 'john.doe', @@ -233,9 +231,7 @@ class UserStatusMapperTest extends TestCase { ]; } - /** - * @dataProvider dataCreateBackupStatus - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataCreateBackupStatus')] public function testCreateBackupStatus(bool $hasStatus, bool $hasBackup, bool $backupCreated): void { if ($hasStatus) { $userStatus1 = new UserStatus(); diff --git a/apps/user_status/tests/Unit/Listener/UserLiveStatusListenerTest.php b/apps/user_status/tests/Unit/Listener/UserLiveStatusListenerTest.php index c94315a7a93..c03eed0089e 100644 --- a/apps/user_status/tests/Unit/Listener/UserLiveStatusListenerTest.php +++ b/apps/user_status/tests/Unit/Listener/UserLiveStatusListenerTest.php @@ -49,9 +49,7 @@ class UserLiveStatusListenerTest extends TestCase { ); } - /** - * @dataProvider handleEventWithCorrectEventDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('handleEventWithCorrectEventDataProvider')] public function testHandleWithCorrectEvent( string $userId, string $previousStatus, diff --git a/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php b/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php index 091466637f0..de5d92055f1 100644 --- a/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php +++ b/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php @@ -93,9 +93,7 @@ class PredefinedStatusServiceTest extends TestCase { ], $actual); } - /** - * @dataProvider getIconForIdDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('getIconForIdDataProvider')] public function testGetIconForId(string $id, ?string $expectedIcon): void { $actual = $this->service->getIconForId($id); $this->assertEquals($expectedIcon, $actual); @@ -113,9 +111,7 @@ class PredefinedStatusServiceTest extends TestCase { ]; } - /** - * @dataProvider getTranslatedStatusForIdDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('getTranslatedStatusForIdDataProvider')] public function testGetTranslatedStatusForId(string $id, ?string $expected): void { $this->l10n->method('t') ->willReturnArgument(0); @@ -136,9 +132,7 @@ class PredefinedStatusServiceTest extends TestCase { ]; } - /** - * @dataProvider isValidIdDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('isValidIdDataProvider')] public function testIsValidId(string $id, bool $expected): void { $actual = $this->service->isValidId($id); $this->assertEquals($expected, $actual); diff --git a/apps/user_status/tests/Unit/Service/StatusServiceTest.php b/apps/user_status/tests/Unit/Service/StatusServiceTest.php index 7aeb1d48448..7dfa5b0d064 100644 --- a/apps/user_status/tests/Unit/Service/StatusServiceTest.php +++ b/apps/user_status/tests/Unit/Service/StatusServiceTest.php @@ -221,9 +221,7 @@ class StatusServiceTest extends TestCase { $this->assertNull($status->getMessageId()); } - /** - * @dataProvider setStatusDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('setStatusDataProvider')] public function testSetStatus( string $userId, string $status, @@ -344,9 +342,7 @@ class StatusServiceTest extends TestCase { ]; } - /** - * @dataProvider setPredefinedMessageDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('setPredefinedMessageDataProvider')] public function testSetPredefinedMessage( string $userId, string $messageId, @@ -433,9 +429,7 @@ class StatusServiceTest extends TestCase { ]; } - /** - * @dataProvider setCustomMessageDataProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('setCustomMessageDataProvider')] public function testSetCustomMessage( string $userId, ?string $statusIcon, @@ -799,9 +793,7 @@ class StatusServiceTest extends TestCase { ]; } - /** - * @dataProvider dataSetUserStatus - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataSetUserStatus')] public function testSetUserStatus(string $messageId, string $oldMessageId, bool $expectedUpdateShortcut): void { $previous = new UserStatus(); $previous->setId(1); |