mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-06-08 03:49:47 +00:00
Merge branch 'Alinto:master' into master
This commit is contained in:
@@ -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é";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -255,7 +255,6 @@ static NSArray *tasksFields = nil;
|
||||
timeZone: userTZ];
|
||||
endDate = [[newDate lastDayOfMonth] endOfDay];
|
||||
}
|
||||
NSLog(@"***[UIxCalListingActions _setupDatesWithPopup:%@ andUserTZ:%@] %@ => %@", popupValue, userTZ, startDate, endDate);
|
||||
}
|
||||
|
||||
- (void) _setupContext
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
//{
|
||||
|
||||
@@ -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
Regular → Executable
BIN
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user