Merge branch 'Alinto:master' into master

This commit is contained in:
adetk
2022-08-19 09:55:09 +06:00
committed by GitHub
608 changed files with 2027 additions and 1208 deletions
@@ -106,6 +106,7 @@
"Personal" = "Personnel";
"To Do" = "À faire";
"Later" = "Peut attendre";
"Forwarded" = "Transféré";
"Return Receipt Sent" = "Accusé de réception envoyé";
"a2_Sunday" = "Di";
"a2_Monday" = "Lu";
@@ -106,6 +106,7 @@
"Personal" = "Személyes";
"To Do" = "Teendő";
"Later" = "Később";
"Forwarded" = "Továbbított";
"Return Receipt Sent" = "Visszaigazolás elküldve";
"a2_Sunday" = "Va";
"a2_Monday" = "Hé";
+2 -1
View File
@@ -221,7 +221,7 @@
"New Addressbook..." = "Nouveau carnet d'adresses...";
"Subscribe to an Addressbook..." = "S'inscrire à un carnet d'adresses...";
"Remove the selected Addressbook" = "Enlever le carnet d'adresses sélectionné";
"Subscribe to a shared folder" = "S'abonner à un dossier partagé";
"Subscribe to a shared contact" = "S'inscrire au carnet d'adresses partagé";
"Search User" = "Recherche utilisateur";
"Name of the Address Book" = "Nom du carnet d'adresses";
"Are you sure you want to delete the selected address book?"
@@ -350,6 +350,7 @@
"Synchronization" = "Synchronisation";
"Synchronize" = "Synchroniser";
"Sucessfully subscribed to address book" = "Abonnement au carnet d'adresses complété";
"A similar card already exists. Would you like to save it anyway?" = "Un contact identique existe déjà. Souhaitez-vous tout de même le sauvegarder ?";
/* Aria label for scope of search on contacts */
"Search scope" = "Étendue de la recherche";
@@ -257,6 +257,12 @@
"Confirmation" = "Confirmation";
"Change" = "Change";
"Passwords don't match" = "Passwords don't match";
"POLICY_MIN_LOWERCASE_LETTER" = "Minimum of %{0} lowercase letter";
"POLICY_MIN_UPPERCASE_LETTER" = "Minimum of %{0} uppercase letter";
"POLICY_MIN_DIGIT" = "Minimum of %{0} digit";
"POLICY_MIN_SPECIAL_SYMBOLS" = "Minimum of %{0}special symbols";
"POLICY_MIN_LENGTH" = "Minimum length of %{0} characters";
/* Event+task classifications */
"Default events classification" = "Default events classification";
@@ -257,6 +257,12 @@
"Confirmation" = "Confirmation";
"Change" = "Changer";
"Passwords don't match" = "Les mots de passe ne correspondent pas";
"POLICY_MIN_LOWERCASE_LETTER" = "Au moins %{0} lettre(s) minuscule(s)";
"POLICY_MIN_UPPERCASE_LETTER" = "Au moins %{0} lettre(s) majuscule(s)";
"POLICY_MIN_DIGIT" = "Au moins %{0} chiffre(s)";
"POLICY_MIN_SPECIAL_SYMBOLS" = "Au moins %{0} caractère(s) special(aux)";
"POLICY_MIN_LENGTH" = "Longueur d'au moins %{0} caractère(s)";
/* Event+task classifications */
"Default events classification" = "Classification par défaut des événements";
@@ -257,6 +257,12 @@
"Confirmation" = "Megerősítés";
"Change" = "Módosítás";
"Passwords don't match" = "Jelszavak nem egyeznek meg";
"POLICY_MIN_LOWERCASE_LETTER" = "Legalább %{0} kisbetű";
"POLICY_MIN_UPPERCASE_LETTER" = "Legalább %{0} nagybetű";
"POLICY_MIN_DIGIT" = "Legalább %{0} szám";
"POLICY_MIN_SPECIAL_SYMBOLS" = "Legalább %{0} különleges karakter";
"POLICY_MIN_LENGTH" = "Legalább %{0} karakter";
/* Event+task classifications */
"Default events classification" = "Események alapértelmezett besorolása";
+15 -2
View File
@@ -45,6 +45,7 @@
#import <SOGo/SOGoTextTemplateFile.h>
#import <SOGo/WOResourceManager+SOGo.h>
#import <SOGo/SOGoBuild.h>
#import <SOGo/SOGoPasswordPolicy.h>
#import <Mailer/SOGoMailAccount.h>
#import <Mailer/SOGoMailAccounts.h>
@@ -257,9 +258,21 @@ static NSArray *reminderValues = nil;
- (NSArray *) passwordPolicy
{
NSObject <SOGoSource> *userSource;
NSMutableDictionary *translations = [[NSMutableDictionary alloc] init];
NSDictionary *policy;
NSDictionary *translatedUserPolicy;
userSource = [user authenticationSource];
return [userSource userPasswordPolicy];
for(policy in [userSource userPasswordPolicy]) {
[translations setObject:[self labelForKey:[policy objectForKey:@"label"]]
forKey: [policy objectForKey:@"label"]];
}
translatedUserPolicy = [SOGoPasswordPolicy createPasswordPolicyLabels: [userSource userPasswordPolicy]
withTranslations: translations];
[translations release];
return translatedUserPolicy;
}
//
+8 -3
View File
@@ -238,7 +238,10 @@
hours:[date hourOfDay]
minutes:[date minuteOfHour]
seconds:0];
[rule setUntilDate: untilDate];
if ([event isAllDay])
[rule setUntil: [untilDate descriptionWithCalendarFormat: @"%Y%m%d"]];
else
[rule setUntilDate: untilDate];
[date release];
}
}
@@ -669,7 +672,8 @@
* @apiSuccess (Success 200) {String} endDate End date (ISO8601)
* @apiSuccess (Success 200) {String} localizedEndDate Formatted end date
* @apiSuccess (Success 200) {String} [localizedEndTime] Formatted end time
* @apiSuccess (Success 200) {Number} isReadOnly 1 if event is read-only
* @apiSuccess (Success 200) {Number} isEditable 1 if event can be edited by the active user
* @apiSuccess (Success 200) {Number} isErasable 1 if event can be deleted by the active user
* @apiSuccess (Success 200) {Number} userHasRSVP 1 if owner is invited
* @apiSuccess (Success 200) {Number} [reply] 0 if needs-action, 1 if accepted, 2 if declined, 3 if tentative, 4 if delegated
* @apiSuccess (Success 200) {Object[]} [attachUrls] Attached URLs
@@ -823,7 +827,8 @@
[componentCalendar nameInContainer], @"pid",
[componentCalendar displayName], @"calendar",
[NSNumber numberWithBool: isAllDay], @"isAllDay",
[NSNumber numberWithBool: [self isReadOnly]], @"isReadOnly",
[NSNumber numberWithBool: [self isEditable]], @"isEditable",
[NSNumber numberWithBool: [self isErasable]], @"isErasable",
[NSNumber numberWithBool: [self userHasRSVP]], @"userHasRSVP",
[eventStartDate iso8601DateString], @"startDate",
[eventEndDate iso8601DateString], @"endDate",
-1
View File
@@ -255,7 +255,6 @@ static NSArray *tasksFields = nil;
timeZone: userTZ];
endDate = [[newDate lastDayOfMonth] endOfDay];
}
NSLog(@"***[UIxCalListingActions _setupDatesWithPopup:%@ andUserTZ:%@] %@ => %@", popupValue, userTZ, startDate, endDate);
}
- (void) _setupContext
+3 -2
View File
@@ -1,6 +1,6 @@
/* UIxComponentEditor.h - this file is part of SOGo
*
* Copyright (C) 2006-2015 Inverse inc.
* Copyright (C) 2006-2022 Inverse inc.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -33,7 +33,8 @@
SOGoAppointmentFolder *componentCalendar;
}
- (BOOL) isReadOnly;
- (BOOL) isEditable;
- (BOOL) isErasable;
- (BOOL) userHasRSVP;
- (NSNumber *) reply;
- (BOOL) isChildOccurrence;
+13 -2
View File
@@ -837,10 +837,21 @@ static NSArray *reminderValues = nil;
return rc;
}
- (BOOL) isReadOnly
- (BOOL) isEditable
{
return [self getEventRWType] != componentReadableWritable;
return [self getEventRWType] == componentReadableWritable;
}
- (BOOL) isErasable
{
NSString *owner, *userLogin;
userLogin = [[context activeUser] login];
owner = [componentCalendar ownerInContext: context];
return ([owner isEqualToString: userLogin] || [[componentCalendar aclsForUser: userLogin] containsObject: SOGoRole_ObjectEraser]);
}
//
//- (NSString *) emailAlarmsEnabled
//{
+4 -2
View File
@@ -431,7 +431,8 @@
* @apiSuccess (Success 200) {String} localizedDueTime Formatted due time
* @apiSuccess (Success 200) {String} localizedCompletedDate Formatted completed date
* @apiSuccess (Success 200) {String} localizedCompletedTime Formatted completed time
* @apiSuccess (Success 200) {Number} isReadOnly 1 if task is read-only
* @apiSuccess (Success 200) {Number} isEditable 1 if task can be edited by the active user
* @apiSuccess (Success 200) {Number} isErasable 1 if task can be deleted by the active user
* @apiSuccess (Success 200) {Object[]} [attachUrls] Attached URLs
* @apiSuccess (Success 200) {String} attachUrls.value URL
*
@@ -561,7 +562,8 @@
data = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[componentCalendar nameInContainer], @"pid",
[componentCalendar displayName], @"calendar",
[NSNumber numberWithBool: [self isReadOnly]], @"isReadOnly",
[NSNumber numberWithBool: [self isEditable]], @"isEditable",
[NSNumber numberWithBool: [self isErasable]], @"isErasable",
[self alarm], @"alarm",
nil];
@@ -199,7 +199,8 @@
<label>
<var:string label:value="Email Address"/>
</label>
<input type="email" ng-model="email.value"
<input type="text" ng-model="email.value"
ng-pattern="editor.emailRE"
sg-focus-on="email_{{$index}}"/>
</md-input-container>
</div>
@@ -164,9 +164,10 @@
<md-input-container class="md-block"
ng-hide="$AccountDialogController.customFromIsReadonly()">
<label><var:string label:value="Reply To Email"/></label>
<input type="email"
<input type="text"
autocomplete="off"
ng-model="identity.replyTo"/>
ng-model="identity.replyTo"
ng-pattern="$AccountDialogController.emailRE"/>
</md-input-container>
<md-input-container
class="md-block md-flex"
@@ -1124,10 +1124,10 @@
<md-datepicker
name="vacationStartDate"
label:md-placeholder="Enter date"
ng-change="app.toggleVacationEndDate()"
ng-disabled="!app.preferences.defaults.Vacation.startDateEnabled"
ng-required="app.preferences.defaults.Vacation.startDateEnabled"
ng-model="app.preferences.defaults.Vacation.startDate"
md-date-filter="app.validateVacationStartDate"
sg-reset-on-disabled="sg-reset-on-disabled"><!-- datepicker --></md-datepicker>
</md-input-container>
</div>
@@ -35,7 +35,7 @@
<label><var:string label:value="Calendar"/></label>
<md-select ng-model="editor.component.destinationCalendar"
ng-change="editor.changeCalendar()">
<md-option ng-repeat="calendar in editor.service.$findAll(null, true)"
<md-option ng-repeat="calendar in editor.destinationCalendars()"
ng-value="calendar.id">
<div layout="row" layout-align="start center">
<div class="sg-color-chip"
@@ -49,7 +49,7 @@
</md-menu-content>
</md-menu>
</md-menu-item>
<md-menu-item ng-show="editor.component.isMovable()">
<md-menu-item ng-show="editor.component.isErasable">
<md-menu>
<md-button label:aria-label="Move To" ng-click="$mdMenu.open($event)">
<var:string label:value="Move To"/>
@@ -272,20 +272,23 @@
<!-- actions -->
<!-- editable but not recurrent -->
<md-dialog-actions ng-show="::editor.component.isEditable()">
<md-dialog-actions ng-show="::editor.component.isActionable()">
<md-button class="md-warn"
label:aria-label="Delete Event"
ng-show="::editor.component.isErasable"
ng-click="editor.deleteAllOccurrences()">
<var:string label:value="Delete"/>
</md-button>
<div class="md-flex"><!-- spacer --></div>
<md-button type="button" ng-click="editor.edit()">
<md-button type="button"
ng-show="::editor.component.isEditable"
ng-click="editor.edit()">
<var:string label:value="Edit"/>
</md-button>
</md-dialog-actions>
<!-- editable and recurrent -->
<md-dialog-actions ng-show="::editor.component.isEditableOccurrence()">
<md-menu>
<md-dialog-actions ng-show="::editor.component.isActionableOccurrence()">
<md-menu ng-show="::editor.component.isErasable">
<md-button class="md-warn"
label:aria-label="Delete Event"
ng-click="$mdMenu.open()"
@@ -310,7 +313,7 @@
</md-menu-content>
</md-menu>
<div class="md-flex"><!-- spacer --></div>
<md-menu>
<md-menu ng-show="::editor.component.isEditable">
<md-button label:aria-label="Edit"
ng-click="$mdMenu.open()"
md-menu-origin="md-menu-origin">
@@ -79,9 +79,10 @@
<var:string label:value="When I modify my calendar, send a mail to"/>
</md-checkbox>
<md-input-container flex-offset="5" md-no-float="md-no-float">
<input type="email"
<input type="text"
label:placeholder="Email Address"
ng-model="properties.calendar.notifiedUserOnPersonalModifications"
ng-pattern="properties.emailRE"
ng-required="properties.calendar.notifications.notifyUserOnPersonalModifications"
ng-disabled="!properties.calendar.notifications.notifyUserOnPersonalModifications"/>
</md-input-container>
@@ -34,7 +34,7 @@
<md-input-container flex="50" flex-xs="100">
<label><var:string label:value="Calendar"/></label>
<md-select ng-model="editor.component.destinationCalendar">
<md-option ng-repeat="calendar in editor.service.$findAll(null, true)"
<md-option ng-repeat="calendar in editor.destinationCalendars()"
ng-value="calendar.id">
<div layout="row" layout-align="start center">
<div class="sg-color-chip"
@@ -125,19 +125,22 @@
<!-- actions -->
<!-- editable but not recurrent -->
<md-dialog-actions ng-show="::editor.component.isEditable()">
<md-dialog-actions ng-show="::editor.component.isActionable()">
<md-button class="md-warn" label:aria-label="Delete Task"
ng-show="::editor.component.isErasable"
ng-click="editor.deleteAllOccurrences()">
<var:string label:value="Delete"/>
</md-button>
<div class="md-flex"><!-- spacer --></div>
<md-button ng-click="editor.edit()">
<md-button type="button"
ng-show="::editor.component.isEditable"
ng-click="editor.edit()">
<var:string label:value="Edit"/>
</md-button>
</md-dialog-actions>
<!-- editable and recurrent -->
<md-dialog-actions ng-show="::editor.component.isEditableOccurrence()">
<md-menu>
<md-dialog-actions ng-show="::editor.component.isActionableOccurrence()">
<md-menu ng-show="::editor.component.isErasable">
<md-button class="md-warn"
label:aria-label="Delete Task"
ng-click="$mdMenu.open()"
@@ -162,7 +165,7 @@
</md-menu-content>
</md-menu>
<div class="md-flex"><!-- spacer --></div>
<md-menu>
<md-menu ng-show="::editor.component.isEditable">
<md-button label:aria-label="Edit"
ng-click="$mdMenu.open()"
md-menu-origin="md-menu-origin">
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File

Some files were not shown because too many files have changed in this diff Show More