diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/command/base.php | 38 | ||||
-rw-r--r-- | core/l10n/fr.js | 3 | ||||
-rw-r--r-- | core/l10n/fr.json | 3 | ||||
-rw-r--r-- | core/l10n/ru.js | 7 | ||||
-rw-r--r-- | core/l10n/ru.json | 7 |
5 files changed, 58 insertions, 0 deletions
diff --git a/core/command/base.php b/core/command/base.php index bc5ae2e429b..a34d7ec1c9a 100644 --- a/core/command/base.php +++ b/core/command/base.php @@ -33,6 +33,12 @@ class Base extends Command { protected $defaultOutputFormat = self::OUTPUT_FORMAT_PLAIN; + /** @var boolean */ + private $php_pcntl_signal = false; + + /** @var boolean */ + private $interrupted = false; + protected function configure() { $this ->addOption( @@ -43,6 +49,15 @@ class Base extends Command { $this->defaultOutputFormat ) ; + + // check if the php pcntl_signal functions are accessible + $this->php_pcntl_signal = function_exists('pcntl_signal'); + if ($this->php_pcntl_signal) { + // Collect interrupts and notify the running command + pcntl_signal(SIGTERM, [$this, 'cancelOperation']); + pcntl_signal(SIGINT, [$this, 'cancelOperation']); + } + } /** @@ -116,4 +131,27 @@ class Base extends Command { return $value; } } + + /** + * @return bool + */ + protected function hasBeenInterrupted() { + // return always false if pcntl_signal functions are not accessible + if ($this->php_pcntl_signal) { + pcntl_signal_dispatch(); + return $this->interrupted; + } else { + return false; + } + } + + /** + * Changes the status of the command to "interrupted" if ctrl-c has been pressed + * + * Gives a chance to the command to properly terminate what it's doing + */ + private function cancelOperation() { + $this->interrupted = true; + } + } diff --git a/core/l10n/fr.js b/core/l10n/fr.js index 5e312662719..68184dc4ddc 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -164,17 +164,20 @@ OC.L10N.register( "change" : "modification", "delete" : "suppression", "access control" : "contrôle d'accès", + "Could not unshare" : "Impossible d'arrêter de partager", "Share details could not be loaded for this item." : "Les informations de partage n'ont pu être chargées pour cet élément.", "An error occured. Please try again" : "Une erreur est survenue. Merci de réessayer", "Share" : "Partager", "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Partagez avec des personnes sur d'autres ownClouds en utilisant la syntaxe utilisateur@exemple.com/owncloud", "Share with users or groups …" : "Partager avec des utilisateurs ou groupes...", "Share with users, groups or remote users …" : "Partager avec des utilisateurs, groupes, ou utilisateurs distants", + "Error removing share" : "Erreur lors de l'arrêt du partage", "Warning" : "Attention", "Error while sending notification" : "Erreur lors de l'envoi de la notification", "Non-existing tag #{tag}" : "Étiquette #{tag} inexistante", "not assignable" : "inassignable", "invisible" : "invisible", + "({scope})" : "({scope})", "Delete" : "Supprimer", "Rename" : "Renommer", "Global tags" : "Étiquettes globales", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 4b0196e5ee4..b9a888268dc 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -162,17 +162,20 @@ "change" : "modification", "delete" : "suppression", "access control" : "contrôle d'accès", + "Could not unshare" : "Impossible d'arrêter de partager", "Share details could not be loaded for this item." : "Les informations de partage n'ont pu être chargées pour cet élément.", "An error occured. Please try again" : "Une erreur est survenue. Merci de réessayer", "Share" : "Partager", "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Partagez avec des personnes sur d'autres ownClouds en utilisant la syntaxe utilisateur@exemple.com/owncloud", "Share with users or groups …" : "Partager avec des utilisateurs ou groupes...", "Share with users, groups or remote users …" : "Partager avec des utilisateurs, groupes, ou utilisateurs distants", + "Error removing share" : "Erreur lors de l'arrêt du partage", "Warning" : "Attention", "Error while sending notification" : "Erreur lors de l'envoi de la notification", "Non-existing tag #{tag}" : "Étiquette #{tag} inexistante", "not assignable" : "inassignable", "invisible" : "invisible", + "({scope})" : "({scope})", "Delete" : "Supprimer", "Rename" : "Renommer", "Global tags" : "Étiquettes globales", diff --git a/core/l10n/ru.js b/core/l10n/ru.js index 93e919453a8..2b942444db1 100644 --- a/core/l10n/ru.js +++ b/core/l10n/ru.js @@ -164,16 +164,23 @@ OC.L10N.register( "change" : "изменить", "delete" : "удалить", "access control" : "контроль доступа", + "Could not unshare" : "Не удается отменить доступ", "Share details could not be loaded for this item." : "Не удалось загрузить информацию об общем доступе для этого элемента.", "An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз", "Share" : "Поделиться", "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах ownCloud используя формат username@example.com/owncloud", "Share with users or groups …" : "Поделиться с пользователями или группами ...", "Share with users, groups or remote users …" : "Поделиться с пользователями, группами или удаленными пользователями ...", + "Error removing share" : "Ошибка удаления общего доступа", "Warning" : "Предупреждение", "Error while sending notification" : "Ошибка при отправке уведомления", + "Non-existing tag #{tag}" : "Несуществующий тег #{tag}", + "not assignable" : "не назначаемый", + "invisible" : "невидимый", + "({scope})" : "({scope})", "Delete" : "Удалить", "Rename" : "Переименовать", + "Global tags" : "Глобальные теги", "The object type is not specified." : "Тип объекта не указан", "Enter new" : "Ввести новое", "Add" : "Добавить", diff --git a/core/l10n/ru.json b/core/l10n/ru.json index f88f24d6582..d90e88b37ae 100644 --- a/core/l10n/ru.json +++ b/core/l10n/ru.json @@ -162,16 +162,23 @@ "change" : "изменить", "delete" : "удалить", "access control" : "контроль доступа", + "Could not unshare" : "Не удается отменить доступ", "Share details could not be loaded for this item." : "Не удалось загрузить информацию об общем доступе для этого элемента.", "An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз", "Share" : "Поделиться", "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах ownCloud используя формат username@example.com/owncloud", "Share with users or groups …" : "Поделиться с пользователями или группами ...", "Share with users, groups or remote users …" : "Поделиться с пользователями, группами или удаленными пользователями ...", + "Error removing share" : "Ошибка удаления общего доступа", "Warning" : "Предупреждение", "Error while sending notification" : "Ошибка при отправке уведомления", + "Non-existing tag #{tag}" : "Несуществующий тег #{tag}", + "not assignable" : "не назначаемый", + "invisible" : "невидимый", + "({scope})" : "({scope})", "Delete" : "Удалить", "Rename" : "Переименовать", + "Global tags" : "Глобальные теги", "The object type is not specified." : "Тип объекта не указан", "Enter new" : "Ввести новое", "Add" : "Добавить", |