Compare commits
47
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cf7d22ddf | ||
|
|
8743ec7736 | ||
|
|
da1297a535 | ||
|
|
69aa792405 | ||
|
|
d339462802 | ||
|
|
0c629e5303 | ||
|
|
223c25fb86 | ||
|
|
6a4d03b35f | ||
|
|
c8b0c3321e | ||
|
|
405703162e | ||
|
|
7ca0a7b5fb | ||
|
|
0a828a739e | ||
|
|
395a01ed52 | ||
|
|
c05b331ac0 | ||
|
|
da32b3f86d | ||
|
|
a09720cf22 | ||
|
|
0364f7f2a4 | ||
|
|
00082eb0bc | ||
|
|
178b1a3a0e | ||
|
|
9ffa72ee9b | ||
|
|
169a0c6125 | ||
|
|
c7b0133000 | ||
|
|
2f9c2cf4da | ||
|
|
57db6b5f91 | ||
|
|
f65ab9b43a | ||
|
|
2258d5cd60 | ||
|
|
ea427ea41a | ||
|
|
ce86d14826 | ||
|
|
7f7c743976 | ||
|
|
6f86506b28 | ||
|
|
e44bc1fc91 | ||
|
|
c90e2b0501 | ||
|
|
cd0324dd49 | ||
|
|
581b2c1912 | ||
|
|
9a9d968756 | ||
|
|
fe003eeef5 | ||
|
|
a09f4d8f49 | ||
|
|
617c1bbc64 | ||
|
|
5bab72726a | ||
|
|
01863987dd | ||
|
|
f1257088f2 | ||
|
|
1c611a0a4a | ||
|
|
f2ba6870d5 | ||
|
|
253d14cfce | ||
|
|
b3c77a0e00 | ||
|
|
cba0c6d420 | ||
|
|
1d8ee80c39 |
No files matched your search
@@ -2,6 +2,14 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
### [5.11.2](https://github.com/Alinto/sogo/compare/SOGo-5.11.1...SOGo-5.11.2) (2024-10-15)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **mail:** modify the message-id to not start by XX- that trigger a native spamassassin rule ([1d8ee80](https://github.com/Alinto/sogo/commit/1d8ee80c394382d26e50457cda9f9292b0f4f63b))
|
||||
* **security:** fix a security issue introduced in 5.11.1 with parameter SOGoForbidUnknownDomainsAuth ([04a9a87](https://github.com/Alinto/sogo/commit/04a9a8773dfb30dcc86c6146eed175a9a115f6b2))
|
||||
|
||||
## [5.11.1](https://github.com/Alinto/sogo/compare/SOGo-5.11.0...SOGo-5.11.1) (2024-10-08)
|
||||
|
||||
|
||||
|
||||
@@ -815,6 +815,8 @@ Obiously, if your users can connect without specifying a domain, let this parame
|
||||
|S |SOGoDomainAllowed
|
||||
|Parameter used to define which domains SOGo should allowed during a connection request. This parameter is an array of strings.
|
||||
|
||||
|S |SOGoURLCreateAccount
|
||||
|Add a link below the login form and set the link using the value of this setting.
|
||||
|
||||
|S |SOGoPasswordRecoveryEnabled
|
||||
|Boolean enable password recovery with secret question or secondary e-mail. Default value is `NO`.
|
||||
@@ -1676,6 +1678,9 @@ URL could be set to something like:
|
||||
|
||||
See the "EMail reminders" section in this document for more information.
|
||||
|
||||
|S |SOGoEnableMailCleaning
|
||||
|Parameter used to enable cleaning folders and mailbox (remove mail older than X days). Default value is `NO`.
|
||||
|
||||
|S |SOGoDisableOrganizerEventCheck
|
||||
|Parameter used to disable organizer's calendar event check
|
||||
|
||||
@@ -3949,7 +3954,7 @@ _Defaults_ stores all parameters that can be found in Preferences panel. So it g
|
||||
autoreply to many others options.
|
||||
|
||||
|
||||
user-preferences get|set|unset defaults|settings user key [value|-f filename] [-p credentialFile]
|
||||
user-preferences get|set|unset defaults|settings user key [value|-f filename] [-p credentialFile [-F]]
|
||||
|
||||
* First argument is the action *get*, *set* or *unset*
|
||||
* Second argument is parameter type *settings* or *defaults*
|
||||
@@ -3957,7 +3962,8 @@ autoreply to many others options.
|
||||
* Fourth argument *key* is the name of the parameters where to make the action
|
||||
* If the action is *set*, you should provide either *value* as fifth argument or a file with the value inside with *-f* filename/path
|
||||
* If the action is *set* or *unset* and the *key* concerns a sieve script (filter, vacation, forward...), you
|
||||
should provide a credential file, a one-line file that contains "username:password" of an admin account of your imap/sieve server.
|
||||
should provide a credential file, a one-line file that contains "username:password" of an admin account of your imap/sieve server. If you
|
||||
want t oforce the sieve script activation add -F after.
|
||||
|
||||
As there is a lot of parameters, this documentation will not go into details for each one. To know what are
|
||||
the key names and their value you should got to your database in table defined by _SOGoProfileURL_ in your sogo.conf.
|
||||
@@ -3986,7 +3992,7 @@ sogo-tool user-preferences unset defaults user1 Forward -p /etc/sogo/cred
|
||||
|
||||
*set* action:
|
||||
----
|
||||
sogo-tool user-preferences set defaults user1 Forward '{"forwardAddress":["sogo-tests2@sogo.alinto"],"enabled":1,"keepCopy":0}' -p cred
|
||||
sogo-tool user-preferences set defaults user1 Forward '{"forwardAddress":["sogo-tests2@sogo.alinto"],"enabled":1,"keepCopy":0}' -p cred -F
|
||||
----
|
||||
or create a json file which contains _{"forwardAddress":["sogo-tests2@sogo.alinto"],"enabled":1,"keepCopy":0}_ then:
|
||||
----
|
||||
|
||||
+4
-2
@@ -374,8 +374,10 @@ static BOOL debugLeaks;
|
||||
|
||||
request = [_ctx request];
|
||||
login = [SOGoUser getDecryptedUsernameIfNeeded: _key request: request];
|
||||
|
||||
user = [SOGoUser userWithLogin: login roles: nil];
|
||||
if([login isEqualToString: @"changeLanguage"])
|
||||
user = nil;
|
||||
else
|
||||
user = [SOGoUser userWithLogin: login roles: nil];
|
||||
if (user)
|
||||
userFolder = [$(@"SOGoUserFolder") objectWithName: login
|
||||
inContainer: self];
|
||||
|
||||
@@ -464,7 +464,8 @@ lastPossibleRecurrenceStartDateUsingFirstInstanceCalendarDateRange: (NGCalendarD
|
||||
}
|
||||
}
|
||||
|
||||
if ([self hasRecurrenceDates])
|
||||
//If there are recurrence rules and we have no date yet, its means it's infinite and rdates shouldn't be count as last dates.
|
||||
if ([self hasRecurrenceDates] && !([self hasRecurrenceRules] && !date))
|
||||
{
|
||||
NSEnumerator *rDates;
|
||||
|
||||
|
||||
@@ -1130,28 +1130,26 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir
|
||||
delta = [masterEndDate timeIntervalSinceDate: [master startDate]];
|
||||
recurrenceIdRange = [NGCalendarDateRange calendarDateRangeWithStartDate: recurrenceId
|
||||
endDate: [recurrenceId dateByAddingYears:0 months:0 days:0 hours:0 minutes:0 seconds: delta]];
|
||||
if ([dateRange doesIntersectWithDateRange: recurrenceIdRange])
|
||||
recordIndex = [self _indexOfRecordMatchingDate: recurrenceId inArray: ma];
|
||||
if ([dateRange doesIntersectWithDateRange: recurrenceIdRange] && recordIndex == -1) {
|
||||
[self warnWithFormat:
|
||||
@"missing exception record for recurrence-id %@ (uid %@), ma = %@, dr = %@, rir = %@",
|
||||
recurrenceId, [component uid], ma, dateRange, recurrenceIdRange];
|
||||
}
|
||||
if ([dateRange doesIntersectWithDateRange: recurrenceIdRange] && recordIndex != -1)
|
||||
{
|
||||
// The recurrence exception intersects with the date range;
|
||||
// find the occurence and replace it with the new record
|
||||
recordIndex = [self _indexOfRecordMatchingDate: recurrenceId inArray: ma];
|
||||
if (recordIndex > -1)
|
||||
{
|
||||
if ([dateRange containsDate: [component startDate]] ||
|
||||
(endDate && [dateRange containsDate: endDate]))
|
||||
{
|
||||
// We must pass nil to :container here in order to avoid re-entrancy issues.
|
||||
newRecord = [self _fixupRecord: [component quickRecordFromContent: nil container: nil nameInContainer: nil]];
|
||||
[ma replaceObjectAtIndex: recordIndex withObject: newRecord];
|
||||
}
|
||||
else
|
||||
// The range doesn't cover the exception; remove it from the records
|
||||
[ma removeObjectAtIndex: recordIndex];
|
||||
}
|
||||
else
|
||||
[self errorWithFormat:
|
||||
@"missing exception record for recurrence-id %@ (uid %@)",
|
||||
recurrenceId, [component uid]];
|
||||
if ([dateRange containsDate: [component startDate]] ||
|
||||
(endDate && [dateRange containsDate: endDate]))
|
||||
{
|
||||
// We must pass nil to :container here in order to avoid re-entrancy issues.
|
||||
newRecord = [self _fixupRecord: [component quickRecordFromContent: nil container: nil nameInContainer: nil]];
|
||||
[ma replaceObjectAtIndex: recordIndex withObject: newRecord];
|
||||
}
|
||||
else
|
||||
// The range doesn't cover the exception; remove it from the records
|
||||
[ma removeObjectAtIndex: recordIndex];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1762,7 +1760,7 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir
|
||||
{
|
||||
NSCalendarDate *now, *rc;
|
||||
|
||||
if (davCalendarStartTimeLimit > 0 && ![[context activeUser] isSuperUser])
|
||||
if ([[context request] isSoWebDAVRequest] && davCalendarStartTimeLimit > 0 && ![[context activeUser] isSuperUser])
|
||||
{
|
||||
now = [NSCalendarDate date];
|
||||
rc = [now addTimeInterval: -davTimeLimitSeconds];
|
||||
|
||||
@@ -379,7 +379,7 @@ NSNumber *iCalDistantFutureNumber = nil;
|
||||
currentAttendee = [attendees nextObject];
|
||||
while (!isAttendee
|
||||
&& currentAttendee)
|
||||
if ([user hasEmail: [currentAttendee rfc822Email]])
|
||||
if ([user hasEmail: [currentAttendee rfc822Email]] && ![self isOrganizer:[currentAttendee rfc822Email]]) // Exclude organizer if in attendees
|
||||
isAttendee = YES;
|
||||
else
|
||||
currentAttendee = [attendees nextObject];
|
||||
|
||||
@@ -291,6 +291,7 @@ static NSString *userAgent = nil;
|
||||
{
|
||||
[headers setObject: @"true" forKey: @"receipt"];
|
||||
[headers setObject: receipt forKey: @"Disposition-Notification-To"];
|
||||
[headers setObject: receipt forKey: @"Return-Receipt-To"];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -302,12 +303,14 @@ static NSString *userAgent = nil;
|
||||
if (pureSender)
|
||||
{
|
||||
[headers setObject: pureSender forKey: @"Disposition-Notification-To"];
|
||||
[headers setObject: pureSender forKey: @"Return-Receipt-To"];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
[headers removeObjectForKey: @"receipt"];
|
||||
[headers removeObjectForKey: @"Disposition-Notification-To"];
|
||||
[headers removeObjectForKey: @"Return-Receipt-To"];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -990,7 +993,6 @@ static NSString *userAgent = nil;
|
||||
[self _fileAttachmentsFromPart: [m body] onlyImages: onlyImages];
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
@@ -1019,7 +1021,7 @@ static NSString *userAgent = nil;
|
||||
|
||||
addresses = [NSMutableArray array];
|
||||
[self _addEMailsOfAddresses: [sourceEnvelope from] toArray: addresses];
|
||||
if ([addresses count])
|
||||
if ([addresses count] > 0)
|
||||
[info setObject: [addresses objectAtIndex: 0] forKey: @"from"];
|
||||
addresses = [NSMutableArray array];
|
||||
[self _addEMailsOfAddresses: [sourceEnvelope to] toArray: addresses];
|
||||
@@ -1035,15 +1037,17 @@ static NSString *userAgent = nil;
|
||||
addresses = [NSMutableArray array];
|
||||
[self _addEMailsOfAddresses: [sourceEnvelope replyTo] toArray: addresses];
|
||||
if ([addresses count] > 0)
|
||||
[info setObject: addresses forKey: @"replyTo"];
|
||||
[info setObject: [addresses objectAtIndex: 0] forKey: @"replyTo"];
|
||||
|
||||
h = [sourceMail mailHeaders];
|
||||
priority = [h objectForKey: @"x-priority"];
|
||||
if ([priority isNotEmpty] && [priority isKindOfClass: [NSString class]])
|
||||
[info setObject: (NSString*)priority forKey: @"X-Priority"];
|
||||
receipt = [h objectForKey: @"disposition-notification-to"];
|
||||
if ([receipt isNotEmpty] && [receipt isKindOfClass: [NSString class]])
|
||||
if ([receipt isNotEmpty] && [receipt isKindOfClass: [NSString class]]) {
|
||||
[info setObject: (NSString*)receipt forKey: @"Disposition-Notification-To"];
|
||||
[info setObject: (NSString*)receipt forKey: @"Return-Receipt-To"];
|
||||
}
|
||||
|
||||
ud = [[context activeUser] userDefaults];
|
||||
|
||||
@@ -1893,6 +1897,8 @@ static NSString *userAgent = nil;
|
||||
[map setObject: s forKey: @"X-Priority"];
|
||||
if ([(s = [headers objectForKey: @"Disposition-Notification-To"]) length] > 0)
|
||||
[map setObject: s forKey: @"Disposition-Notification-To"];
|
||||
if ([(s = [headers objectForKey: @"Return-Receipt-To"]) length] > 0)
|
||||
[map setObject: s forKey: @"Return-Receipt-To"];
|
||||
|
||||
[self _addHeaders: _headers toHeaderMap: map];
|
||||
|
||||
|
||||
@@ -104,6 +104,7 @@ typedef enum {
|
||||
- (NSArray *) toManyRelationshipKeysWithNamespaces: (BOOL) withNSs;
|
||||
|
||||
- (NSArray *) allFolderPaths: (SOGoMailListingMode) theListingMode;
|
||||
- (NSArray *) allFolderPaths: (SOGoMailListingMode) theListingMode onlyRoot: (BOOL) onlyRoot;
|
||||
- (NSArray *) allFoldersMetadata: (SOGoMailListingMode) theListingMode;
|
||||
|
||||
- (NSDictionary *) imapFolderGUIDs;
|
||||
|
||||
@@ -378,14 +378,21 @@ static NSString *inboxFolderName = @"INBOX";
|
||||
return folders;
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
- (NSArray *) allFolderPaths: (SOGoMailListingMode) theListingMode
|
||||
- (NSArray *) allFolderPaths: (SOGoMailListingMode) theListingMode
|
||||
{
|
||||
NSMutableArray *folderPaths, *namespaces;
|
||||
return [self allFolderPaths: theListingMode onlyRoot: NO];
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
- (NSArray *) allFolderPaths: (SOGoMailListingMode) theListingMode onlyRoot: (BOOL) onlyRoot
|
||||
{
|
||||
NSMutableArray *folderPaths, *namespaces, *filteredFolders;
|
||||
NSArray *folders, *mainFolders;
|
||||
NSString *namespace;
|
||||
NSString *folder;
|
||||
NSUInteger slashCount;
|
||||
|
||||
BOOL subscribedOnly;
|
||||
int count, max;
|
||||
@@ -401,10 +408,10 @@ static NSString *inboxFolderName = @"INBOX";
|
||||
onlySubscribedFolders: YES];
|
||||
max = [folders count];
|
||||
for (count = 0; count < max; count++)
|
||||
{
|
||||
[subscribedFolders setObject: [NSNull null]
|
||||
forKey: [folders objectAtIndex: count]];
|
||||
}
|
||||
{
|
||||
[subscribedFolders setObject: [NSNull null]
|
||||
forKey: [folders objectAtIndex: count]];
|
||||
}
|
||||
[[self imap4Connection] flushFolderHierarchyCache];
|
||||
}
|
||||
|
||||
@@ -418,6 +425,17 @@ static NSString *inboxFolderName = @"INBOX";
|
||||
nil] stringsWithFormat: @"/%@"];
|
||||
folders = [[self imap4Connection] allFoldersForURL: [self imap4URL]
|
||||
onlySubscribedFolders: subscribedOnly];
|
||||
if (onlyRoot) {
|
||||
filteredFolders = [[NSMutableArray alloc] init];
|
||||
for (folder in folders) {
|
||||
slashCount = [[folder componentsSeparatedByString:@"/"] count] - 1;
|
||||
if (slashCount <= 1) {
|
||||
[filteredFolders addObject: folder];
|
||||
}
|
||||
}
|
||||
folders = [NSArray arrayWithArray: filteredFolders];
|
||||
[filteredFolders release];
|
||||
}
|
||||
folderPaths = [folders mutableCopy];
|
||||
[folderPaths autorelease];
|
||||
|
||||
|
||||
@@ -953,7 +953,10 @@ static BOOL debugSoParts = NO;
|
||||
body = [NSData data];
|
||||
|
||||
currentAttachment = [NSMutableDictionary dictionaryWithDictionary: currentInfo];
|
||||
[currentAttachment setObject: body forKey: @"body"];
|
||||
if (body)
|
||||
[currentAttachment setObject: body forKey: @"body"];
|
||||
else
|
||||
[self errorWithFormat: @"Failed add attachement %@, empty body - failed to decode : %@", currentPath, currentInfo];
|
||||
[attachments addObject: currentAttachment];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1429,11 +1429,25 @@ groupObjectClasses: (NSArray *) newGroupObjectClasses
|
||||
NSMutableArray *contacts;
|
||||
EOQualifier *qualifier;
|
||||
unsigned int i;
|
||||
NSMutableString *s;
|
||||
NSString *sortAttribute;
|
||||
BOOL sortReverse;
|
||||
|
||||
contacts = [NSMutableArray array];
|
||||
|
||||
NSLog(@"fetchContactsMatching: baseDN was %@", _baseDN);
|
||||
if(theDomain != nil && [theDomain length] > 0)
|
||||
{
|
||||
NSLog(@"fetchContactsMatching: the domain is %@", theDomain);
|
||||
if ([_pristineBaseDN rangeOfString: @"%d"].location != NSNotFound)
|
||||
{
|
||||
s = [NSMutableString stringWithString: _pristineBaseDN];
|
||||
[s replaceOccurrencesOfString: @"%d" withString: theDomain options: 0 range: NSMakeRange(0, [s length])];
|
||||
ASSIGN(_baseDN, s);
|
||||
}
|
||||
}
|
||||
NSLog(@"fetchContactsMatching: baseDN is now %@", _baseDN);
|
||||
|
||||
if ([match length] > 0 || !_listRequiresDot)
|
||||
{
|
||||
ldapConnection = [self _ldapConnection];
|
||||
@@ -2290,8 +2304,7 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection,
|
||||
NSRange r;
|
||||
|
||||
r = [theLogin rangeOfString: @"@"];
|
||||
if (r.location != NSNotFound &&
|
||||
[_pristineBaseDN rangeOfString: @"%d"].location != NSNotFound)
|
||||
if (r.location != NSNotFound && [_pristineBaseDN rangeOfString: @"%d"].location != NSNotFound)
|
||||
{
|
||||
s = [NSMutableString stringWithString: _pristineBaseDN];
|
||||
[s replaceOccurrencesOfString: @"%d" withString: [theLogin substringFromIndex: r.location+1] options: 0 range: NSMakeRange(0, [s length])];
|
||||
@@ -2306,7 +2319,7 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection,
|
||||
|
||||
- (NSArray *) membersForGroupWithUID: (NSString *) uid
|
||||
{
|
||||
NSMutableArray *dns, *uids;
|
||||
NSMutableArray *dns, *uids, *userLogins;
|
||||
NSString *dn, *login;
|
||||
SOGoUserManager *um;
|
||||
NSDictionary *d, *contactInfos;
|
||||
@@ -2327,6 +2340,7 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection,
|
||||
members = [NSMutableArray new];
|
||||
uids = [NSMutableArray array];
|
||||
dns = [NSMutableArray array];
|
||||
userLogins = [NSMutableArray array];
|
||||
|
||||
// We check if it's a static group
|
||||
// Fetch "members" - we get DNs
|
||||
@@ -2358,6 +2372,13 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection,
|
||||
pool = [NSAutoreleasePool new];
|
||||
dn = [dns objectAtIndex: i];
|
||||
login = [um getLoginForDN: [dn lowercaseString]];
|
||||
if([userLogins containsObject: login])
|
||||
{
|
||||
[pool release];
|
||||
continue; //user alrady fetch
|
||||
}
|
||||
if(login != nil)
|
||||
[userLogins addObject: login];
|
||||
user = [SOGoUser userWithLogin: login roles: nil];
|
||||
if (user)
|
||||
{
|
||||
@@ -2385,6 +2406,13 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection,
|
||||
{
|
||||
pool = [NSAutoreleasePool new];
|
||||
login = [uids objectAtIndex: i];
|
||||
if([userLogins containsObject: login])
|
||||
{
|
||||
[pool release];
|
||||
continue; //user alrady fetch
|
||||
}
|
||||
if(login != nil)
|
||||
[userLogins addObject: login];
|
||||
user = [SOGoUser userWithLogin: login roles: nil];
|
||||
if (user)
|
||||
{
|
||||
@@ -2456,4 +2484,4 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection,
|
||||
return rc;
|
||||
}
|
||||
|
||||
@end
|
||||
@end
|
||||
@@ -65,7 +65,8 @@
|
||||
domain: &domain
|
||||
perr: &perr
|
||||
expire: &expire
|
||||
grace: &grace]
|
||||
grace: &grace
|
||||
additionalInfo: nil]
|
||||
&& perr == PolicyNoError);
|
||||
|
||||
if (!rc)
|
||||
|
||||
@@ -1531,6 +1531,11 @@ static NSArray *childRecordFields = nil;
|
||||
return valid;
|
||||
}
|
||||
|
||||
- (NSCalendarDate *) _getMaxStartDate
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
/**
|
||||
DAV:sync-collection Report
|
||||
https://datatracker.ietf.org/doc/html/rfc6578#section-3.2
|
||||
@@ -1559,9 +1564,10 @@ static NSArray *childRecordFields = nil;
|
||||
propElement = [(NGDOMNodeWithChildren *) documentElement
|
||||
firstElementWithTag: @"prop" inNamespace: XMLNS_WEBDAV];
|
||||
properties = [self parseDAVRequestedProperties: propElement];
|
||||
|
||||
records = [self syncTokenFieldsWithProperties: properties
|
||||
matchingSyncToken: syncToken
|
||||
fromDate: nil
|
||||
fromDate: [self _getMaxStartDate]
|
||||
initialLoad: NO];
|
||||
|
||||
[self _appendComponentProperties: [properties allKeys]
|
||||
|
||||
@@ -102,6 +102,8 @@
|
||||
pid = getpid();
|
||||
rndm = random();
|
||||
}
|
||||
if(pid<255)
|
||||
pid+=255; //Because of a native spamassassin rule -> header TVD_RATWARE_MSGID_01 rule on message-id like '<XX-' are suspicious.(Message-ID =~ /<[a-z0-9]{2}-/)
|
||||
sequence++;
|
||||
f = [[NSDate date] timeIntervalSince1970];
|
||||
|
||||
|
||||
@@ -140,6 +140,10 @@ NSComparisonResult languageSort(id el1, id el2, void *context);
|
||||
- (BOOL)isURLEncryptionEnabled;
|
||||
- (NSString *)urlEncryptionPassphrase;
|
||||
|
||||
- (NSString *)urlCreateAccount;
|
||||
|
||||
- (BOOL)enableMailCleaning;
|
||||
|
||||
@end
|
||||
|
||||
#endif /* SOGOSYSTEMDEFAULTS_H */
|
||||
@@ -928,4 +928,14 @@ NSComparisonResult languageSort(id el1, id el2, void *context)
|
||||
return disableExport;
|
||||
}
|
||||
|
||||
- (NSString *)urlCreateAccount
|
||||
{
|
||||
return [self stringForKey: @"SOGoURLCreateAccount"];
|
||||
}
|
||||
|
||||
- (BOOL) enableMailCleaning
|
||||
{
|
||||
return [self boolForKey: @"SOGoEnableMailCleaning"];
|
||||
}
|
||||
|
||||
@end
|
||||
+102
-76
@@ -145,92 +145,91 @@ static const NSString *kEncryptedUserNamePrefix = @"uenc";
|
||||
realUID = nil;
|
||||
domain = nil;
|
||||
|
||||
if ([newLogin isEqualToString: @"anonymous"]
|
||||
|| [newLogin isEqualToString: @"freebusy"])
|
||||
if ([newLogin isEqualToString: @"anonymous"] || [newLogin isEqualToString: @"freebusy"])
|
||||
realUID = newLogin;
|
||||
else
|
||||
{
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
if ([sd enableDomainBasedUID] || [[sd loginDomains] count] > 0)
|
||||
{
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
if ([sd enableDomainBasedUID] || [[sd loginDomains] count] > 0)
|
||||
{
|
||||
r = [newLogin rangeOfString: @"@" options: NSBackwardsSearch];
|
||||
if (r.location != NSNotFound)
|
||||
{
|
||||
// The domain is probably appended to the username;
|
||||
// make sure it is defined as a domain in the configuration.
|
||||
domain = [newLogin substringFromIndex: (r.location + r.length)];
|
||||
if ([[SOGoUserManager sharedUserManager] isDomainDefined: domain] &&
|
||||
![sd enableDomainBasedUID])
|
||||
newLogin = [newLogin substringToIndex: r.location];
|
||||
r = [newLogin rangeOfString: @"@" options: NSBackwardsSearch];
|
||||
if (r.location != NSNotFound)
|
||||
{
|
||||
// The domain is probably appended to the username;
|
||||
// make sure it is defined as a domain in the configuration.
|
||||
domain = [newLogin substringFromIndex: (r.location + r.length)];
|
||||
if ([[SOGoUserManager sharedUserManager] isDomainDefined: domain] &&
|
||||
![sd enableDomainBasedUID])
|
||||
newLogin = [newLogin substringToIndex: r.location];
|
||||
|
||||
if (domain != nil && ![sd enableDomainBasedUID])
|
||||
// Login domains are enabled (SOGoLoginDomains) but not
|
||||
// domain-based UID (SOGoEnableDomainBasedUID).
|
||||
// Drop the domain from the login name.
|
||||
domain = nil;
|
||||
}
|
||||
}
|
||||
|
||||
newLogin = [newLogin stringByReplacingString: @"%40"
|
||||
withString: @"@"];
|
||||
if (b)
|
||||
realUID = newLogin;
|
||||
else
|
||||
{
|
||||
um = [SOGoUserManager sharedUserManager];
|
||||
contactInfos = [um contactInfosForUserWithUIDorEmail: newLogin
|
||||
inDomain: domain];
|
||||
realUID = [contactInfos objectForKey: @"c_uid"];
|
||||
if (domain == nil && [sd enableDomainBasedUID])
|
||||
domain = [contactInfos objectForKey: @"c_domain"];
|
||||
}
|
||||
|
||||
if ([realUID length] && [domain length])
|
||||
{
|
||||
// When the user is associated to a domain, the [SOGoUser login]
|
||||
// method returns the combination login@domain while
|
||||
// [SOGoUser loginInDomain] only returns the login.
|
||||
r = [realUID rangeOfString: domain options: NSBackwardsSearch|NSCaseInsensitiveSearch];
|
||||
|
||||
// Do NOT strip @domain.com if SOGoEnableDomainBasedUID is enabled since
|
||||
// the real login most likely is the email address.
|
||||
if (r.location != NSNotFound && ![sd enableDomainBasedUID])
|
||||
uid = [realUID substringToIndex: r.location-1];
|
||||
// If we don't have the domain in the UID but SOGoEnableDomainBasedUID is
|
||||
// enabled, let's add it internally so so it becomes unique across
|
||||
// all potential domains.
|
||||
else if (r.location == NSNotFound && [sd enableDomainBasedUID])
|
||||
{
|
||||
uid = [NSString stringWithString: realUID];
|
||||
realUID = [NSString stringWithFormat: @"%@@%@", realUID, domain];
|
||||
}
|
||||
// We found the domain and SOGoEnableDomainBasedUID is enabled,
|
||||
// we keep realUID.. This would happen for example if the user
|
||||
// authenticates with foo@bar.com and the UIDFieldName is also foo@bar.com
|
||||
else if ([sd enableDomainBasedUID])
|
||||
uid = [NSString stringWithString: realUID];
|
||||
}
|
||||
if (domain != nil && ![sd enableDomainBasedUID])
|
||||
// Login domains are enabled (SOGoLoginDomains) but not
|
||||
// domain-based UID (SOGoEnableDomainBasedUID).
|
||||
// Drop the domain from the login name.
|
||||
domain = nil;
|
||||
}
|
||||
}
|
||||
|
||||
newLogin = [newLogin stringByReplacingString: @"%40"
|
||||
withString: @"@"];
|
||||
if (b)
|
||||
realUID = newLogin;
|
||||
else
|
||||
{
|
||||
um = [SOGoUserManager sharedUserManager];
|
||||
contactInfos = [um contactInfosForUserWithUIDorEmail: newLogin
|
||||
inDomain: domain];
|
||||
realUID = [contactInfos objectForKey: @"c_uid"];
|
||||
if (domain == nil && [sd enableDomainBasedUID])
|
||||
domain = [contactInfos objectForKey: @"c_domain"];
|
||||
}
|
||||
|
||||
if ([realUID length] && [domain length])
|
||||
{
|
||||
// When the user is associated to a domain, the [SOGoUser login]
|
||||
// method returns the combination login@domain while
|
||||
// [SOGoUser loginInDomain] only returns the login.
|
||||
r = [realUID rangeOfString: domain options: NSBackwardsSearch|NSCaseInsensitiveSearch];
|
||||
|
||||
// Do NOT strip @domain.com if SOGoEnableDomainBasedUID is enabled since
|
||||
// the real login most likely is the email address.
|
||||
if (r.location != NSNotFound && ![sd enableDomainBasedUID])
|
||||
uid = [realUID substringToIndex: r.location-1];
|
||||
// If we don't have the domain in the UID but SOGoEnableDomainBasedUID is
|
||||
// enabled, let's add it internally so so it becomes unique across
|
||||
// all potential domains.
|
||||
else if (r.location == NSNotFound && [sd enableDomainBasedUID])
|
||||
{
|
||||
uid = [NSString stringWithString: realUID];
|
||||
realUID = [NSString stringWithFormat: @"%@@%@", realUID, domain];
|
||||
}
|
||||
// We found the domain and SOGoEnableDomainBasedUID is enabled,
|
||||
// we keep realUID.. This would happen for example if the user
|
||||
// authenticates with foo@bar.com and the UIDFieldName is also foo@bar.com
|
||||
else if ([sd enableDomainBasedUID])
|
||||
uid = [NSString stringWithString: realUID];
|
||||
}
|
||||
}
|
||||
|
||||
if ([realUID length])
|
||||
{
|
||||
if ((self = [super initWithLogin: realUID roles: newRoles]))
|
||||
{
|
||||
if ((self = [super initWithLogin: realUID roles: newRoles]))
|
||||
{
|
||||
allEmails = nil;
|
||||
currentPassword = nil;
|
||||
cn = nil;
|
||||
ASSIGN (loginInDomain, (uid ? uid : realUID));
|
||||
_defaults = nil;
|
||||
_domainDefaults = nil;
|
||||
_settings = nil;
|
||||
mailAccounts = nil;
|
||||
}
|
||||
allEmails = nil;
|
||||
currentPassword = nil;
|
||||
cn = nil;
|
||||
ASSIGN (loginInDomain, (uid ? uid : realUID));
|
||||
_defaults = nil;
|
||||
_domainDefaults = nil;
|
||||
_settings = nil;
|
||||
mailAccounts = nil;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
[self release];
|
||||
self = nil;
|
||||
}
|
||||
{
|
||||
[self release];
|
||||
self = nil;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
@@ -265,6 +264,33 @@ static const NSString *kEncryptedUserNamePrefix = @"uenc";
|
||||
|
||||
- (NSString *) loginInDomain
|
||||
{
|
||||
SOGoSystemDefaults *sd;
|
||||
NSString *_domain, *realLoginInDomain;
|
||||
NSRange r;
|
||||
NSLog(@"loginInDomain start: %@", loginInDomain);
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
if ([sd enableDomainBasedUID] || [[sd loginDomains] count] > 0)
|
||||
{
|
||||
NSLog(@"loginInDomain enableDomainBasedUID: %@", self->login);
|
||||
return self->login;
|
||||
// r = [loginInDomain rangeOfString: @"@" options: NSBackwardsSearch];
|
||||
// if (r.location == NSNotFound)
|
||||
// {
|
||||
// _domain = [self _fetchFieldForUser: @"c_domain"];
|
||||
// if (_domain != nil)
|
||||
// {
|
||||
// realLoginInDomain = [NSString stringWithFormat: @"%@@%@", loginInDomain, _domain];
|
||||
// NSLog(@"loginInDomain return: %@", realLoginInDomain):
|
||||
// return realLoginInDomain;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// NSLog(@"loginInDomain return: %@", [self _fetchFieldForUser: @"c_email"]):
|
||||
// return [self _fetchFieldForUser: @"c_email"];
|
||||
// }
|
||||
// }
|
||||
}
|
||||
NSLog(@"loginInDomain return: %@", loginInDomain);
|
||||
return loginInDomain;
|
||||
}
|
||||
|
||||
|
||||
@@ -502,6 +502,7 @@ static const NSString *kObfuscatedSecondaryEmailKey = @"obfuscatedSecondaryEmail
|
||||
perr: (SOGoPasswordPolicyError *) perr
|
||||
expire: (int *) expire
|
||||
grace: (int *) grace
|
||||
additionalInfo: (NSMutableDictionary **)_additionalInfo
|
||||
{
|
||||
NSObject <SOGoSource> *sogoSource;
|
||||
NSEnumerator *authIDs;
|
||||
@@ -520,8 +521,11 @@ static const NSString *kObfuscatedSecondaryEmailKey = @"obfuscatedSecondaryEmail
|
||||
perr: perr
|
||||
expire: expire
|
||||
grace: grace];
|
||||
if (_additionalInfo && *_additionalInfo && [sogoSource userPasswordPolicy] && [[sogoSource userPasswordPolicy] count] > 0) {
|
||||
[*_additionalInfo setObject:[sogoSource userPasswordPolicy] forKey:@"userPolicies"];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (checkOK && *domain == nil)
|
||||
{
|
||||
SOGoSystemDefaults *sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
@@ -554,6 +558,7 @@ static const NSString *kObfuscatedSecondaryEmailKey = @"obfuscatedSecondaryEmail
|
||||
perr: (SOGoPasswordPolicyError *) _perr
|
||||
expire: (int *) _expire
|
||||
grace: (int *) _grace
|
||||
additionalInfo:(NSMutableDictionary **)_additionalInfo
|
||||
{
|
||||
return [self checkLogin: _login
|
||||
password: _pwd
|
||||
@@ -561,6 +566,7 @@ static const NSString *kObfuscatedSecondaryEmailKey = @"obfuscatedSecondaryEmail
|
||||
perr: _perr
|
||||
expire: _expire
|
||||
grace: _grace
|
||||
additionalInfo: _additionalInfo
|
||||
useCache: YES];
|
||||
}
|
||||
|
||||
@@ -573,6 +579,7 @@ static const NSString *kObfuscatedSecondaryEmailKey = @"obfuscatedSecondaryEmail
|
||||
perr: (SOGoPasswordPolicyError *) _perr
|
||||
expire: (int *) _expire
|
||||
grace: (int *) _grace
|
||||
additionalInfo: (NSMutableDictionary **)_additionalInfo
|
||||
useCache: (BOOL) useCache
|
||||
{
|
||||
NSString *dictPassword, *username, *jsonUser;
|
||||
@@ -726,7 +733,8 @@ static const NSString *kObfuscatedSecondaryEmailKey = @"obfuscatedSecondaryEmail
|
||||
domain: _domain
|
||||
perr: _perr
|
||||
expire: _expire
|
||||
grace: _grace])
|
||||
grace: _grace
|
||||
additionalInfo: _additionalInfo])
|
||||
{
|
||||
checkOK = YES;
|
||||
if (!currentUser)
|
||||
@@ -1085,30 +1093,37 @@ static const NSString *kObfuscatedSecondaryEmailKey = @"obfuscatedSecondaryEmail
|
||||
domain = nil;
|
||||
infos = nil;
|
||||
|
||||
//Try to get the domain from the uid
|
||||
r = [uid rangeOfString: @"@" options: NSBackwardsSearch];
|
||||
if (r.location != NSNotFound)
|
||||
{
|
||||
// The domain is probably appended to the username;
|
||||
// make sure it is a defined domain in the configuration.
|
||||
domain = [uid substringFromIndex: (r.location + r.length)];
|
||||
if ([self isDomainDefined: domain])
|
||||
username = [uid substringToIndex: r.location];
|
||||
else
|
||||
domain = nil;
|
||||
}
|
||||
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
if ([sd enableDomainBasedUID])
|
||||
{
|
||||
r = [uid rangeOfString: @"@" options: NSBackwardsSearch];
|
||||
if (r.location != NSNotFound)
|
||||
{
|
||||
// The domain is probably appended to the username;
|
||||
// make sure it is a defined domain in the configuration.
|
||||
domain = [uid substringFromIndex: (r.location + r.length)];
|
||||
if ([self isDomainDefined: domain])
|
||||
username = [uid substringToIndex: r.location];
|
||||
else
|
||||
domain = nil;
|
||||
}
|
||||
if (domain != nil)
|
||||
infos = [self contactInfosForUserWithUIDorEmail: username
|
||||
if (domain != nil)
|
||||
{
|
||||
if ([sd enableDomainBasedUID])
|
||||
infos = [self contactInfosForUserWithUIDorEmail: username
|
||||
inDomain: domain];
|
||||
}
|
||||
else
|
||||
infos = [self contactInfosForUserWithUIDorEmail: uid
|
||||
inDomain: domain];
|
||||
}
|
||||
|
||||
if (infos == nil)
|
||||
{
|
||||
// If the user was not found using the domain or if no domain was detected,
|
||||
// search using the original uid.
|
||||
infos = [self contactInfosForUserWithUIDorEmail: uid
|
||||
inDomain: nil];
|
||||
}
|
||||
|
||||
return infos;
|
||||
}
|
||||
@@ -1137,8 +1152,7 @@ static const NSString *kObfuscatedSecondaryEmailKey = @"obfuscatedSecondaryEmail
|
||||
|
||||
if ([currentUser isKindOfClass: NSNullK])
|
||||
currentUser = nil;
|
||||
else if (!([currentUser objectForKey: @"emails"]
|
||||
&& [currentUser objectForKey: @"cn"]))
|
||||
else if (!([currentUser objectForKey: @"emails"] && [currentUser objectForKey: @"cn"]))
|
||||
{
|
||||
// We make sure that we either have no occurence of a cache entry or
|
||||
// that we have an occurence with only a cached password. In the
|
||||
@@ -1155,6 +1169,19 @@ static const NSString *kObfuscatedSecondaryEmailKey = @"obfuscatedSecondaryEmail
|
||||
}
|
||||
else
|
||||
newUser = NO;
|
||||
|
||||
if(!domain)
|
||||
{
|
||||
//No domain provided is there one?
|
||||
NSRange r;
|
||||
r = [uid rangeOfString: @"@" options: NSBackwardsSearch];
|
||||
if (r.location != NSNotFound)
|
||||
{
|
||||
domain = [uid substringFromIndex: (r.location + r.length)];
|
||||
if (![self isDomainDefined: domain])
|
||||
domain = nil;
|
||||
}
|
||||
}
|
||||
[self _fillContactInfosForUser: currentUser
|
||||
withUIDorEmail: aUID
|
||||
inDomain: domain];
|
||||
@@ -1332,8 +1359,7 @@ static const NSString *kObfuscatedSecondaryEmailKey = @"obfuscatedSecondaryEmail
|
||||
- (NSArray *) fetchContactsMatching: (NSString *) filter
|
||||
inDomain: (NSString *) domain
|
||||
{
|
||||
return [self
|
||||
_fetchEntriesInSources: [self addressBookSourceIDsInDomain: domain]
|
||||
return [self _fetchEntriesInSources: [self addressBookSourceIDsInDomain: domain]
|
||||
matching: filter
|
||||
inDomain: domain];
|
||||
}
|
||||
|
||||
@@ -37,20 +37,22 @@
|
||||
|
||||
+ (id) sharedSOGoWebAuthenticator;
|
||||
|
||||
- (BOOL) checkLogin: (NSString *) _login
|
||||
password: (NSString *) _pwd
|
||||
domain: (NSString **) _domain
|
||||
perr: (SOGoPasswordPolicyError *) _perr
|
||||
expire: (int *) _expire
|
||||
grace: (int *) _grace;
|
||||
- (BOOL)checkLogin:(NSString *)_login
|
||||
password:(NSString *)_pwd
|
||||
domain:(NSString **)_domain
|
||||
perr:(SOGoPasswordPolicyError *)_perr
|
||||
expire:(int *)_expire
|
||||
grace:(int *)_grace
|
||||
additionalInfo:(NSMutableDictionary **)_additionalInfo;
|
||||
|
||||
- (BOOL) checkLogin: (NSString *) _login
|
||||
password: (NSString *) _pwd
|
||||
domain: (NSString **) _domain
|
||||
perr: (SOGoPasswordPolicyError *) _perr
|
||||
expire: (int *) _expire
|
||||
grace: (int *) _grace
|
||||
useCache: (BOOL) useCache;
|
||||
- (BOOL)checkLogin:(NSString *)_login
|
||||
password:(NSString *)_pwd
|
||||
domain:(NSString **)_domain
|
||||
perr:(SOGoPasswordPolicyError *)_perr
|
||||
expire:(int *)_expire
|
||||
grace:(int *)_grace
|
||||
additionalInfo:(NSMutableDictionary **)_additionalInfo
|
||||
useCache:(BOOL)useCache;
|
||||
|
||||
- (WOCookie *) cookieWithUsername: (NSString *) username
|
||||
andPassword: (NSString *) password
|
||||
|
||||
@@ -102,7 +102,8 @@
|
||||
domain: &domain
|
||||
perr: &perr
|
||||
expire: &expire
|
||||
grace: &grace];
|
||||
grace: &grace
|
||||
additionalInfo: nil];
|
||||
}
|
||||
|
||||
- (BOOL) checkLogin: (NSString *) _login
|
||||
@@ -111,6 +112,7 @@
|
||||
perr: (SOGoPasswordPolicyError *) _perr
|
||||
expire: (int *) _expire
|
||||
grace: (int *) _grace
|
||||
additionalInfo: (NSMutableDictionary **)_additionalInfo
|
||||
{
|
||||
return [self checkLogin: _login
|
||||
password: _pwd
|
||||
@@ -118,6 +120,7 @@
|
||||
perr: _perr
|
||||
expire: _expire
|
||||
grace: _grace
|
||||
additionalInfo: _additionalInfo
|
||||
useCache: YES];
|
||||
}
|
||||
|
||||
@@ -127,6 +130,7 @@
|
||||
perr: (SOGoPasswordPolicyError *) _perr
|
||||
expire: (int *) _expire
|
||||
grace: (int *) _grace
|
||||
additionalInfo: (NSMutableDictionary **)_additionalInfo
|
||||
useCache: (BOOL) _useCache
|
||||
{
|
||||
SOGoCASSession *session;
|
||||
@@ -164,6 +168,7 @@
|
||||
perr: _perr
|
||||
expire: _expire
|
||||
grace: _grace
|
||||
additionalInfo: _additionalInfo
|
||||
useCache: _useCache];
|
||||
|
||||
//[self logWithFormat: @"Checked login with ppolicy enabled: %d %d %d", *_perr, *_expire, *_grace];
|
||||
@@ -250,7 +255,8 @@
|
||||
domain: &domain
|
||||
perr: &perr
|
||||
expire: &expire
|
||||
grace: &grace])
|
||||
grace: &grace
|
||||
additionalInfo: nil])
|
||||
return nil;
|
||||
|
||||
if (domain && [login rangeOfString: @"@"].location == NSNotFound)
|
||||
|
||||
+77
-25
@@ -245,6 +245,20 @@
|
||||
return result;
|
||||
}
|
||||
|
||||
- (BOOL) checkLogin: (NSString *) _login
|
||||
password: (NSString *) _pwd
|
||||
perr: (SOGoPasswordPolicyError *) _perr
|
||||
expire: (int *) _expire
|
||||
grace: (int *) _grace
|
||||
{
|
||||
return [self checkLogin: _login
|
||||
password: _pwd
|
||||
perr: _perr
|
||||
expire: _perr
|
||||
grace: _grace
|
||||
disablepasswordPolicyCheck: NO];
|
||||
}
|
||||
|
||||
//
|
||||
// SQL sources don't support right now all the password policy
|
||||
// stuff supported by OpenLDAP (and others). If we want to support
|
||||
@@ -256,6 +270,7 @@
|
||||
perr: (SOGoPasswordPolicyError *) _perr
|
||||
expire: (int *) _expire
|
||||
grace: (int *) _grace
|
||||
disablepasswordPolicyCheck: (BOOL) _disablepasswordPolicyCheck
|
||||
{
|
||||
EOAdaptorChannel *channel;
|
||||
EOQualifier *qualifier;
|
||||
@@ -335,10 +350,69 @@
|
||||
else
|
||||
[self errorWithFormat:@"failed to acquire channel for URL: %@",
|
||||
[_viewURL absoluteString]];
|
||||
|
||||
if (YES == rc && !_disablepasswordPolicyCheck) {
|
||||
[self checkPasswordPolicyWithPassword:_pwd perr: _perr];
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates a given password against the configured user password policies.
|
||||
*
|
||||
* This method checks if the provided password complies with all defined
|
||||
* password policies for the user. Each policy is expected to include
|
||||
* a regular expression (`regex`) that the password must match.
|
||||
*
|
||||
* If the password violates any policy, the method sets an appropriate error
|
||||
* in the `perr` parameter and stops further validation.
|
||||
*
|
||||
* @param password the password to validate.
|
||||
* @param perr will be set to indicate a policy violation, if the password
|
||||
* does not meet the required standards. Possible values include:
|
||||
* `PolicyInsufficientPasswordQuality` for insufficient complexity.
|
||||
* @return YES if the password satisfies all policies, NO otherwise.
|
||||
*
|
||||
* @note This method assumes that `_userPasswordPolicy` is an array of dictionaries,
|
||||
* where each dictionary represents a password policy with at least a "regex" key.
|
||||
* @warning If a policy does not include a "regex" key, an error will be logged, and
|
||||
* the method will continue to the next policy.
|
||||
*/
|
||||
- (BOOL) checkPasswordPolicyWithPassword: (NSString *)password perr: (SOGoPasswordPolicyError *)perr
|
||||
{
|
||||
BOOL isPolicyOk;
|
||||
NSDictionary *policy;
|
||||
NSEnumerator *policies;
|
||||
NSRange match;
|
||||
NSString *regex;
|
||||
|
||||
isPolicyOk = YES;
|
||||
|
||||
if ([_userPasswordPolicy count])
|
||||
{
|
||||
policies = [_userPasswordPolicy objectEnumerator];
|
||||
while (isPolicyOk && (policy = [policies nextObject]))
|
||||
{
|
||||
regex = [policy objectForKey: @"regex"];
|
||||
if (regex)
|
||||
{
|
||||
match = [password rangeOfString: regex options: NSRegularExpressionSearch];
|
||||
isPolicyOk = isPolicyOk && match.length > 0;
|
||||
if (match.length == 0)
|
||||
{
|
||||
// [self errorWithFormat: @"Password not conform to policy %@ (%@)", regex, [policy objectForKey: @"label"]];
|
||||
*perr = PolicyInsufficientPasswordQuality;
|
||||
}
|
||||
}
|
||||
else
|
||||
[self errorWithFormat: @"Invalid password policy (missing regex): %@", policy];
|
||||
}
|
||||
}
|
||||
|
||||
return isPolicyOk;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change a user's password.
|
||||
* @param login the user's login name.
|
||||
@@ -357,11 +431,8 @@
|
||||
BOOL didChange, isOldPwdOk, isPolicyOk;
|
||||
EOAdaptorChannel *channel;
|
||||
GCSChannelManager *cm;
|
||||
NSDictionary *policy;
|
||||
NSEnumerator *policies;
|
||||
NSException *ex;
|
||||
NSRange match;
|
||||
NSString *sqlstr, *regex;
|
||||
NSString *sqlstr;
|
||||
|
||||
*perr = -1;
|
||||
isOldPwdOk = NO;
|
||||
@@ -369,30 +440,11 @@
|
||||
didChange = NO;
|
||||
|
||||
// Verify current password
|
||||
isOldPwdOk = [self checkLogin:login password:oldPassword perr:perr expire:0 grace:0];
|
||||
isOldPwdOk = [self checkLogin:login password:oldPassword perr:perr expire:0 grace:0 disablepasswordPolicyCheck: YES];
|
||||
|
||||
if (isOldPwdOk || passwordRecovery)
|
||||
{
|
||||
if ([_userPasswordPolicy count])
|
||||
{
|
||||
policies = [_userPasswordPolicy objectEnumerator];
|
||||
while (isPolicyOk && (policy = [policies nextObject]))
|
||||
{
|
||||
regex = [policy objectForKey: @"regex"];
|
||||
if (regex)
|
||||
{
|
||||
match = [newPassword rangeOfString: regex options: NSRegularExpressionSearch];
|
||||
isPolicyOk = isPolicyOk && match.length > 0;
|
||||
if (match.length == 0)
|
||||
{
|
||||
// [self errorWithFormat: @"Password not conform to policy %@ (%@)", regex, [policy objectForKey: @"label"]];
|
||||
*perr = PolicyInsufficientPasswordQuality;
|
||||
}
|
||||
}
|
||||
else
|
||||
[self errorWithFormat: @"Invalid password policy (missing regex): %@", policy];
|
||||
}
|
||||
}
|
||||
isPolicyOk = [self checkPasswordPolicyWithPassword:newPassword perr: perr];
|
||||
}
|
||||
|
||||
if ((isOldPwdOk || passwordRecovery) && isPolicyOk)
|
||||
|
||||
@@ -267,4 +267,8 @@
|
||||
return ret;
|
||||
}
|
||||
|
||||
- (NSString *) applicationName {
|
||||
return @"SOGo";
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -68,6 +68,7 @@ typedef enum
|
||||
" -p credentialFile Specify the file containing the sieve admin credentials\n"
|
||||
" The file should contain a single line:\n"
|
||||
" username:password\n"
|
||||
" -F force the activation of the sieve script in case external scripts. Must be the las targument after -p credentialsFile"
|
||||
" Examples:\n"
|
||||
" sogo-tool user-preferences get defaults janedoe SOGoLanguage\n"
|
||||
" sogo-tool user-preferences unset settings janedoe Mail\n"
|
||||
@@ -144,9 +145,19 @@ typedef enum
|
||||
account = [folder lookupName: @"0" inContext: localContext acquire: NO];
|
||||
[account setContext: localContext];
|
||||
|
||||
error = [account updateFiltersWithUsername: authname
|
||||
andPassword: authpwd
|
||||
forceActivation: NO];
|
||||
if([[arguments lastObject] isEqualToString: @"-F"])
|
||||
{
|
||||
error = [account updateFiltersWithUsername: authname
|
||||
andPassword: authpwd
|
||||
forceActivation: YES];
|
||||
}
|
||||
else
|
||||
{
|
||||
error = [account updateFiltersWithUsername: authname
|
||||
andPassword: authpwd
|
||||
forceActivation: NO];
|
||||
}
|
||||
|
||||
if (error)
|
||||
return NO;
|
||||
}
|
||||
@@ -248,7 +259,7 @@ typedef enum
|
||||
break;
|
||||
|
||||
case UserPreferencesSet:
|
||||
if (max > 4)
|
||||
if (![arguments containsObject: @"-f"])
|
||||
{
|
||||
/* value specified on command line */
|
||||
value = [sanitizedArguments objectAtIndex: 4];
|
||||
|
||||
+1
-2
@@ -114,8 +114,7 @@
|
||||
if (count < max)
|
||||
{
|
||||
max -= count;
|
||||
toolArguments = [arguments
|
||||
subarrayWithRange: NSMakeRange (count, max)];
|
||||
toolArguments = [arguments subarrayWithRange: NSMakeRange (count, max)];
|
||||
[toolArguments retain];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,3 +233,10 @@
|
||||
"passwordRecovery_SecretQuestion2" = "What was your first car ?";
|
||||
"passwordRecovery_SecretQuestion3" = "What is your favorite movie ?";
|
||||
"passwordRecovery_SecondaryEmail" = "Secondary E-mail";
|
||||
|
||||
/* Password */
|
||||
"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";
|
||||
@@ -233,3 +233,10 @@
|
||||
"passwordRecovery_SecretQuestion2" = "Quelle était votre première voiture ?";
|
||||
"passwordRecovery_SecretQuestion3" = "Quel est votre film préféré ?";
|
||||
"passwordRecovery_SecondaryEmail" = "E-mail secondaire";
|
||||
|
||||
/* Password */
|
||||
"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)";
|
||||
@@ -78,6 +78,14 @@
|
||||
NSArray *cats, *newCats, *contactCategories;
|
||||
|
||||
ownerLogin = [[self clientObject] ownerInContext: context];
|
||||
//if ownerLogin == @"nobody", meaning the current folder is not the personnal source of the user (it's the global address book)
|
||||
//No need to fetch the user "nobody". Beware that if someone is really called nobody...
|
||||
if([ownerLogin isEqualToString:@"nobody"])
|
||||
{
|
||||
cats = [self _languageContactsCategories];
|
||||
return cats;
|
||||
}
|
||||
|
||||
ud = [[SOGoUser userWithLogin: ownerLogin] userDefaults];
|
||||
cats = [ud contactsCategories];
|
||||
if (!cats)
|
||||
@@ -85,16 +93,16 @@
|
||||
|
||||
contactCategories = [card categories];
|
||||
if (contactCategories)
|
||||
{
|
||||
newCats = [cats mergedArrayWithArray: [contactCategories trimmedComponents]];
|
||||
if ([newCats count] != [cats count])
|
||||
{
|
||||
cats = [newCats sortedArrayUsingSelector:
|
||||
@selector (localizedCaseInsensitiveCompare:)];
|
||||
[ud setContactsCategories: cats];
|
||||
[ud synchronize];
|
||||
}
|
||||
}
|
||||
{
|
||||
newCats = [cats mergedArrayWithArray: [contactCategories trimmedComponents]];
|
||||
if ([newCats count] != [cats count])
|
||||
{
|
||||
cats = [newCats sortedArrayUsingSelector:
|
||||
@selector (localizedCaseInsensitiveCompare:)];
|
||||
[ud setContactsCategories: cats];
|
||||
[ud synchronize];
|
||||
}
|
||||
}
|
||||
|
||||
return cats;
|
||||
}
|
||||
|
||||
@@ -171,6 +171,7 @@
|
||||
/* MailListView */
|
||||
"Sender" = "Sender";
|
||||
"Subject or Sender" = "Subject or Sender";
|
||||
"Subject or Recipient" = "Subject or Recipient";
|
||||
"To or Cc" = "To or Cc";
|
||||
"Entire Message" = "Entire Message";
|
||||
"Date" = "Date";
|
||||
@@ -514,3 +515,18 @@
|
||||
|
||||
/* Hotkey to forward to a message */
|
||||
"hotkey_forward" = "f";
|
||||
|
||||
/* Email deletion */
|
||||
"Clean folder" = "Clean folder";
|
||||
"Clean mailbox" = "Clean mailbox";
|
||||
"Delete permanently (do not use trash)" = "Delete permanently (do not use trash)";
|
||||
"Apply to subfolders" = "Apply to subfolders";
|
||||
"Delete e-mails older than" = "Delete e-mails older than";
|
||||
"3 months" = "3 months";
|
||||
"6 months" = "6 months";
|
||||
"9 months" = "9 months";
|
||||
"1 year" = "1 year";
|
||||
"Custom" = "Custom";
|
||||
"You are about to permanently delete some messages. Are you sure you want to proceed with this action?" = "You are about to permanently delete some messages. Are you sure you want to proceed with this action?";
|
||||
"Apply" = "Apply";
|
||||
"%{0} message(s) deleted" = "%{0} message(s) deleted";
|
||||
@@ -171,6 +171,7 @@
|
||||
/* MailListView */
|
||||
"Sender" = "Expéditeur";
|
||||
"Subject or Sender" = "Sujet ou expéditeur";
|
||||
"Subject or Recipient" = "Sujet ou destinataire";
|
||||
"To or Cc" = "Pour ou Copie à";
|
||||
"Entire Message" = "Message Complet";
|
||||
"Date" = "Date";
|
||||
@@ -514,3 +515,18 @@
|
||||
|
||||
/* Hotkey to forward to a message */
|
||||
"hotkey_forward" = "f";
|
||||
|
||||
/* Email deletion */
|
||||
"Clean folder" = "Nettoyer le dossier";
|
||||
"Clean mailbox" = "Nettoyer la boite mail";
|
||||
"Delete permanently (do not use trash)" = "Supprimer définitivement (ne pas utiliser la corbeille)";
|
||||
"Apply to subfolders" = "Appliquer aux sous-dossiers";
|
||||
"Delete e-mails older than" = "Supprimer les e-mails plus vieux de";
|
||||
"3 months" = "3 mois";
|
||||
"6 months" = "6 mois";
|
||||
"9 months" = "9 mois";
|
||||
"1 year" = "1 an";
|
||||
"Custom" = "Personnalisé";
|
||||
"You are about to permanently delete some messages. Are you sure you want to proceed with this action?" = "Vous êtes sur le point de supprimer définitivement certains messages. Êtes-vous certain de vouloir effectuer cette action ?";
|
||||
"Apply" = "Appliquer";
|
||||
"%{0} message(s) deleted" = "%{0} message(s) supprimés";
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
#import <Foundation/NSData.h>
|
||||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSAutoreleasePool.h>
|
||||
|
||||
#import <NGHttp/NGHttpRequest.h>
|
||||
|
||||
@@ -60,11 +61,72 @@
|
||||
|
||||
@implementation UIxMailAccountActions
|
||||
|
||||
- (NSArray *)sortChildrenRecursively: (NSArray *)children {
|
||||
NSInteger i, j;
|
||||
NSMutableArray *sortedArray;
|
||||
NSArray *unsortedChildren, *sortedChildren;
|
||||
NSDictionary *child;
|
||||
NSMutableDictionary *mutableChild;
|
||||
NSString *name1, *name2;
|
||||
|
||||
if (nil == children || 0 == [children count]) {
|
||||
return children;
|
||||
}
|
||||
|
||||
sortedArray = [NSMutableArray array];
|
||||
|
||||
for (child in children) {
|
||||
unsortedChildren = [child objectForKey:@"children"];
|
||||
sortedChildren = [self sortChildrenRecursively:unsortedChildren];
|
||||
mutableChild = [child mutableCopy];
|
||||
[mutableChild setObject:sortedChildren forKey:@"children"];
|
||||
[sortedArray addObject:mutableChild];
|
||||
}
|
||||
|
||||
for (i = 0; i < [sortedArray count] - 1; i++) {
|
||||
for (j = i + 1; j < [sortedArray count]; j++) {
|
||||
name1 = [[sortedArray objectAtIndex:i] objectForKey:@"name"];
|
||||
name2 = [[sortedArray objectAtIndex:j] objectForKey:@"name"];
|
||||
if ([name1 compare:name2 options:NSCaseInsensitiveSearch] == NSOrderedDescending) {
|
||||
[sortedArray exchangeObjectAtIndex:i withObjectAtIndex:j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sortedArray;
|
||||
}
|
||||
|
||||
- (NSDictionary *)sortMailboxesRecursively: (NSDictionary *)data {
|
||||
NSArray *mailboxes, *mailboxChildren, *sortedMailboxChildren;
|
||||
NSMutableDictionary *sortedData, *mutableMailbox;
|
||||
NSMutableArray *sortedMailboxes;
|
||||
NSDictionary *mailbox;
|
||||
|
||||
mailboxes = [data objectForKey:@"mailboxes"];
|
||||
sortedData = [data mutableCopy];
|
||||
|
||||
sortedMailboxes = [NSMutableArray array];
|
||||
for (mailbox in mailboxes) {
|
||||
mutableMailbox = [mailbox mutableCopy];
|
||||
|
||||
mailboxChildren = [mailbox objectForKey:@"children"];
|
||||
sortedMailboxChildren = [self sortChildrenRecursively:mailboxChildren];
|
||||
|
||||
[mutableMailbox setObject:sortedMailboxChildren forKey:@"children"];
|
||||
[sortedMailboxes addObject:mutableMailbox];
|
||||
}
|
||||
|
||||
[sortedData setObject:sortedMailboxes forKey:@"mailboxes"];
|
||||
|
||||
return sortedData;
|
||||
}
|
||||
|
||||
- (WOResponse *) listMailboxesAction
|
||||
{
|
||||
SOGoMailAccount *co;
|
||||
NSArray *folders;
|
||||
NSDictionary *data;
|
||||
NSAutoreleasePool *pool;
|
||||
|
||||
co = [self clientObject];
|
||||
|
||||
@@ -74,6 +136,9 @@
|
||||
folders, @"mailboxes",
|
||||
[co getInboxQuota], @"quotas",
|
||||
nil];
|
||||
pool = [[NSAutoreleasePool alloc] init];
|
||||
data = [self sortMailboxesRecursively: data];
|
||||
DESTROY(pool);
|
||||
|
||||
return [self responseWithStatus: 200
|
||||
andJSONRepresentation: data];
|
||||
|
||||
@@ -132,6 +132,8 @@
|
||||
drafts = [account draftsFolderInContext: context];
|
||||
newMail = [drafts newDraft];
|
||||
[newMail fetchMailForEditing: co];
|
||||
if ([co isInTemplatesFolder])
|
||||
[newMail save];
|
||||
[newMail storeInfo];
|
||||
|
||||
accountName = [account nameInContainer];
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSURL.h>
|
||||
#import <Foundation/NSValue.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import <NGObjWeb/WOContext+SoObjects.h>
|
||||
#import <NGObjWeb/WORequest.h>
|
||||
@@ -46,6 +47,8 @@
|
||||
#import <SOGo/SOGoUser.h>
|
||||
#import <SOGo/SOGoUserSettings.h>
|
||||
|
||||
#import <EOControl/EOQualifier.h>
|
||||
|
||||
#import "UIxMailFolderActions.h"
|
||||
|
||||
@implementation UIxMailFolderActions
|
||||
@@ -1298,4 +1301,126 @@
|
||||
return [self _markMessagesAsJunkOrNotJunk: NO];
|
||||
}
|
||||
|
||||
- (BOOL)isDateStringValid: (NSString *)dateString {
|
||||
NSString *dateRegex = @"^\\d{4}-\\d{2}-\\d{2}$";
|
||||
NSPredicate *dateTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", dateRegex];
|
||||
return [dateTest evaluateWithObject:dateString];
|
||||
}
|
||||
|
||||
- (void) cleanFolderWithFolder: (SOGoMailFolder *)folder
|
||||
withQualifier: (EOQualifier *)qualifier
|
||||
recursive: (BOOL)isRecursive
|
||||
withTrashFolder: (BOOL)useTrashFolder
|
||||
exception: (NSException **)exception
|
||||
counter: (NSUInteger *)counter {
|
||||
NSArray *results, *subfolders;
|
||||
NSUInteger i;
|
||||
SOGoMailFolder *newFolder;
|
||||
NSString *folderName;
|
||||
NSException *e;
|
||||
|
||||
results = [folder fetchUIDsMatchingQualifier: qualifier
|
||||
sortOrdering: @"REVERSE DATE"
|
||||
threaded: NO];
|
||||
|
||||
if (results && [results count] > 0) {
|
||||
e = [folder deleteUIDs: results
|
||||
useTrashFolder: &useTrashFolder
|
||||
inContext: [self context]];
|
||||
[folder expunge];
|
||||
[self logWithFormat: @"Removed %d messages in %@ (%@)", [results count], [folder nameInContainer], results];
|
||||
*counter += [results count];
|
||||
if (e) {
|
||||
[self errorWithFormat: @"Error while cleaning mailbox : %@", e];
|
||||
*exception = e;
|
||||
}
|
||||
}
|
||||
|
||||
if (isRecursive) {
|
||||
subfolders = [folder subfolders];
|
||||
for (i = 0 ; i < [subfolders count] ; i++) {
|
||||
folderName = [NSString stringWithFormat:@"%@/%@", [folder nameInContainer], [subfolders objectAtIndex: i]];
|
||||
newFolder = [[SOGoMailFolder alloc] initWithName: folderName inContainer: [folder container]];
|
||||
[self cleanFolderWithFolder: newFolder
|
||||
withQualifier: qualifier
|
||||
recursive: isRecursive
|
||||
withTrashFolder: useTrashFolder
|
||||
exception: exception
|
||||
counter: counter];
|
||||
[newFolder release];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (WOResponse *) cleanMailboxAction
|
||||
{
|
||||
NSDictionary *jsonRequest, *jsonResponse;
|
||||
WORequest *request;
|
||||
NSString *searchString, *folderName;
|
||||
EOQualifier *searchQualifier;
|
||||
BOOL isRecursive, useTrashFolder;
|
||||
NSException *exception;
|
||||
SOGoMailFolder *folder;
|
||||
SOGoMailAccount *account;
|
||||
NSUInteger i, counter;
|
||||
NSArray *folderNames;
|
||||
|
||||
request = [[self context] request];
|
||||
jsonRequest = [[request contentAsString] objectFromJSONString];
|
||||
|
||||
if (![[SOGoSystemDefaults sharedSystemDefaults] enableMailCleaning])
|
||||
return [self responseWithStatus: 401];
|
||||
|
||||
if (![self isDateStringValid: [jsonRequest objectForKey: @"date"]]) {
|
||||
[self errorWithFormat: @"Error while cleaning mailbox, invalid date : %@", [jsonRequest objectForKey: @"date"]];
|
||||
return [self responseWithStatus: 502];
|
||||
}
|
||||
|
||||
searchString = [NSString stringWithFormat: @"(NOT (flags = 'deleted') AND (DATE <= (NSCalendarDate)\"%@\"))", [jsonRequest objectForKey: @"date"]];
|
||||
searchQualifier = [EOQualifier qualifierWithQualifierFormat: searchString];
|
||||
isRecursive = [[jsonRequest objectForKey: @"applyToSubfolders"] boolValue];
|
||||
useTrashFolder = ![[jsonRequest objectForKey: @"permanentlyDelete"] boolValue];
|
||||
counter = 0;
|
||||
exception = nil;
|
||||
|
||||
if ([[self clientObject] isKindOfClass: [SOGoMailFolder class]]) {
|
||||
folder = [self clientObject];
|
||||
[self cleanFolderWithFolder: folder
|
||||
withQualifier: searchQualifier
|
||||
recursive: isRecursive
|
||||
withTrashFolder: useTrashFolder
|
||||
exception: &exception
|
||||
counter: &counter];
|
||||
} else if ([[self clientObject] isKindOfClass: [SOGoMailAccount class]]) {
|
||||
account = [self clientObject];
|
||||
folderNames = [account allFolderPaths: SOGoMailStandardListing onlyRoot: YES];
|
||||
for (i = 0 ; i < [folderNames count] ; i ++) {
|
||||
folderName = [folderNames objectAtIndex: i];
|
||||
if ([folderName hasPrefix:@"/"]) {
|
||||
folderName = [folderName substringFromIndex:1];
|
||||
}
|
||||
folder = [account folderWithTraversal: folderName andClassName: nil];
|
||||
// Disable clean for trash folder
|
||||
if (![folderName isEqualToString: [account trashFolderNameInContext: [self context]]]
|
||||
&& ![folderName isEqualToString: [account templatesFolderNameInContext: [self context]]])
|
||||
[self cleanFolderWithFolder: folder
|
||||
withQualifier: searchQualifier
|
||||
recursive: isRecursive
|
||||
withTrashFolder: useTrashFolder
|
||||
exception: &exception
|
||||
counter: &counter];
|
||||
}
|
||||
|
||||
[[account imap4Connection] flushMailCaches];
|
||||
}
|
||||
|
||||
if (exception) {
|
||||
return [self responseWithStatus: 500];
|
||||
}
|
||||
|
||||
jsonResponse = [NSDictionary dictionaryWithObject: [NSNumber numberWithInt: counter]
|
||||
forKey: @"nbMessageDeleted"];
|
||||
return [self responseWithStatus: 200 andJSONRepresentation: jsonResponse];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -611,6 +611,17 @@
|
||||
return result;
|
||||
}
|
||||
|
||||
- (BOOL) isCleanMailboxEnabled {
|
||||
BOOL result;
|
||||
SOGoSystemDefaults *sd;
|
||||
|
||||
sd = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
|
||||
result = [sd enableMailCleaning];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@end /* UIxMailMainFrame */
|
||||
|
||||
@interface UIxMailFolderTemplate : UIxComponent
|
||||
|
||||
@@ -49,6 +49,11 @@
|
||||
actionClass = "UIxMailFolderActions";
|
||||
actionName = "expunge";
|
||||
};
|
||||
cleanMailbox = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailFolderActions";
|
||||
actionName = "cleanMailbox";
|
||||
};
|
||||
createFolder = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailFolderActions";
|
||||
@@ -417,6 +422,11 @@
|
||||
protectedBy = "View";
|
||||
pageName = "UIxMailUserDelegationEditor";
|
||||
};
|
||||
cleanMailbox = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailFolderActions";
|
||||
actionName = "cleanMailbox";
|
||||
};
|
||||
addDelegate = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailAccountActions";
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"Domain" = "Domain";
|
||||
"Remember username" = "Remember username";
|
||||
"Connect" = "Connect";
|
||||
"Create an account" = "Create an account";
|
||||
|
||||
/* Appears while authentication is in progress */
|
||||
"Authenticating" = "Authenticating";
|
||||
@@ -87,6 +88,7 @@ See <a href=\"http://www.sogo.nu/en/support/community.html\">this page</a> for v
|
||||
"Change your Password" = "Change your Password";
|
||||
"The password was changed successfully." = "The password was changed successfully.";
|
||||
"Your password has expired, please enter a new one below" = "Your password has expired, please enter a new one below";
|
||||
"Your password is too weak. Please choose a stronger password to enhance your security" = "Your password is too weak. Please choose a stronger password to enhance your security";
|
||||
"Password must not be empty." = "Password must not be empty.";
|
||||
"The passwords do not match. Please try again." = "The passwords do not match. Please try again.";
|
||||
"Password Grace Period" = "Password Grace Period";
|
||||
@@ -129,4 +131,4 @@ See <a href=\"http://www.sogo.nu/en/support/community.html\">this page</a> for v
|
||||
"Invalid configuration for email password recovery" = "Invalid configuration for email password recovery";
|
||||
"Password recovery email in error" = "Password recovery email in error";
|
||||
"Password reset" = "Password reset";
|
||||
"Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}" = "Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}";
|
||||
"Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}" = "Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}";
|
||||
@@ -6,6 +6,7 @@
|
||||
"Domain" = "Domaine";
|
||||
"Remember username" = "Se souvenir de moi";
|
||||
"Connect" = "Connexion";
|
||||
"Create an account" = "Créer un compte";
|
||||
|
||||
/* Appears while authentication is in progress */
|
||||
"Authenticating" = "Authentification en cours";
|
||||
@@ -84,6 +85,7 @@
|
||||
"Change your Password" = "Changez votre mot de passe";
|
||||
"The password was changed successfully." = "Votre mot de passe a bien été changé.";
|
||||
"Your password has expired, please enter a new one below" = "Votre mot de passe est expiré, veuillez entrer un nouveau mot de passe";
|
||||
"Your password is too weak. Please choose a stronger password to enhance your security" = "Votre mot de passe est trop faible. Veuillez choisir un mot de passe plus sécurisé pour renforcer votre protection";
|
||||
"Password must not be empty." = "Le mot de passe ne doit pas être vide.";
|
||||
"The passwords do not match. Please try again." = "Les mots de passe ne sont pas identiques. Essayez de nouveau.";
|
||||
"Password Grace Period" = "Période de grâce pour le mot de passe";
|
||||
@@ -126,4 +128,4 @@
|
||||
"Invalid configuration for email password recovery" = "Configuration invalide pour la récupération de mot de passe par e-mail";
|
||||
"Password recovery email in error" = "Erreur lors de l'envoi de l'email de récupération";
|
||||
"Password reset" = "Réinitialisation de mot de passe";
|
||||
"Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}" = "Bonjour %{0},\nUne demande de changement de mot de passe a été initiée.\n\nSi vous n'êtes pas à l'origine de cet e-mail, n'en tenez pas compte.\n\nSi vous en êtes bien à l'origine, veuillez cliquer sur le lien ci-dessous pour modifier votre mot de passe: %{1}";
|
||||
"Hi %{0},\nThere was a request to change your password!\n\nIf you did not make this request then please ignore this email.\n\nOtherwise, please click this link to change your password: %{1}" = "Bonjour %{0},\nUne demande de changement de mot de passe a été initiée.\n\nSi vous n'êtes pas à l'origine de cet e-mail, n'en tenez pas compte.\n\nSi vous en êtes bien à l'origine, veuillez cliquer sur le lien ci-dessous pour modifier votre mot de passe: %{1}";
|
||||
+60
-10
@@ -52,6 +52,7 @@
|
||||
#import <SOGo/SOGoEmptyAuthenticator.h>
|
||||
#import <SOGo/SOGoMailer.h>
|
||||
#import <SOGo/SOGoAdmin.h>
|
||||
#import <SOGo/SOGoPasswordPolicy.h>
|
||||
|
||||
#if defined(MFA_CONFIG)
|
||||
#include <liboath/oath.h>
|
||||
@@ -167,14 +168,23 @@ static const NSString *kJwtKey = @"jwt";
|
||||
//
|
||||
//
|
||||
//
|
||||
- (WOResponse *) _responseWithLDAPPolicyError: (int) error
|
||||
- (WOResponse *) _responseWithLDAPPolicyError: (int) error additionalInfos: (NSDictionary *) additionalInfos
|
||||
{
|
||||
NSDictionary *jsonError;
|
||||
|
||||
jsonError = [NSDictionary dictionaryWithObject: [NSNumber numberWithInt: error]
|
||||
forKey: @"LDAPPasswordPolicyError"];
|
||||
return [self responseWithStatus: 403
|
||||
andJSONRepresentation: jsonError];
|
||||
if (additionalInfos) {
|
||||
jsonError = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
[NSNumber numberWithInt:error], @"LDAPPasswordPolicyError",
|
||||
additionalInfos, @"additionalInfos",
|
||||
nil];
|
||||
} else {
|
||||
jsonError = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
[NSNumber numberWithInt:error], @"LDAPPasswordPolicyError",
|
||||
nil];
|
||||
}
|
||||
|
||||
return [self responseWithStatus:403
|
||||
andJSONRepresentation:jsonError];
|
||||
}
|
||||
|
||||
- (void) _checkAutoReloadWebCalendars: (SOGoUser *) loggedInUser
|
||||
@@ -197,6 +207,27 @@ static const NSString *kJwtKey = @"jwt";
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
- (void)translateAdditionalLoginInformations:(NSMutableDictionary **)additionalLoginInformations
|
||||
{
|
||||
NSDictionary *policy;
|
||||
NSMutableDictionary *translations;
|
||||
|
||||
if (additionalLoginInformations && *additionalLoginInformations) {
|
||||
if ([*additionalLoginInformations objectForKey:@"userPolicies"]) {
|
||||
translations = [[NSMutableDictionary alloc] init];
|
||||
for (policy in [*additionalLoginInformations objectForKey:@"userPolicies"]) {
|
||||
[translations setObject:[self commonLabelForKey: [policy objectForKey:@"label"]] forKey: [policy objectForKey:@"label"]];
|
||||
}
|
||||
[*additionalLoginInformations setObject:[SOGoPasswordPolicy createPasswordPolicyLabels: [*additionalLoginInformations objectForKey:@"userPolicies"] withTranslations: translations]
|
||||
forKey:@"userPolicies"];
|
||||
[translations release];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
@@ -210,6 +241,7 @@ static const NSString *kJwtKey = @"jwt";
|
||||
SOGoUserSettings *us;
|
||||
SOGoUser *loggedInUser;
|
||||
NSDictionary *params;
|
||||
NSMutableDictionary *additionalLoginInformations;
|
||||
NSString *username, *password, *language, *domain, *remoteHost;
|
||||
NSArray *supportedLanguages, *creds;
|
||||
|
||||
@@ -223,6 +255,7 @@ static const NSString *kJwtKey = @"jwt";
|
||||
auth = [[WOApplication application] authenticatorInContext: context];
|
||||
request = [context request];
|
||||
params = [[request contentAsString] objectFromJSONString];
|
||||
additionalLoginInformations = [[NSMutableDictionary alloc] init];
|
||||
|
||||
username = [params objectForKey: @"userName"];
|
||||
password = [params objectForKey: @"password"];
|
||||
@@ -232,9 +265,11 @@ static const NSString *kJwtKey = @"jwt";
|
||||
/* this will always be set to something more or less useful by
|
||||
* [WOHttpTransaction applyAdaptorHeadersWithHttpRequest] */
|
||||
remoteHost = [request headerForKey:@"x-webobjects-remote-host"];
|
||||
b = [auth checkLogin: username password: password domain: &domain
|
||||
perr: &err expire: &expire grace: &grace additionalInfo: &additionalLoginInformations useCache: NO];
|
||||
[self translateAdditionalLoginInformations: &additionalLoginInformations];
|
||||
|
||||
if ((b = [auth checkLogin: username password: password domain: &domain
|
||||
perr: &err expire: &expire grace: &grace useCache: NO])
|
||||
if (b
|
||||
&& (err == PolicyNoError)
|
||||
// no password policy
|
||||
&& ((expire < 0 && grace < 0) // no password policy or everything is alright
|
||||
@@ -334,7 +369,7 @@ static const NSString *kJwtKey = @"jwt";
|
||||
#endif
|
||||
|
||||
if ([us objectForKey: @"ForceResetPassword"]) {
|
||||
response = [self _responseWithLDAPPolicyError: PolicyPasswordExpired];
|
||||
response = [self _responseWithLDAPPolicyError: PolicyPasswordExpired additionalInfos: additionalLoginInformations];
|
||||
} else {
|
||||
[self _checkAutoReloadWebCalendars: loggedInUser];
|
||||
|
||||
@@ -377,7 +412,7 @@ static const NSString *kJwtKey = @"jwt";
|
||||
[self logWithFormat: @"Login from '%@' for user '%@' might not have worked - password policy: %d grace: %d expire: %d bound: %d",
|
||||
remoteHost, username, err, grace, expire, b];
|
||||
|
||||
response = [self _responseWithLDAPPolicyError: err];
|
||||
response = [self _responseWithLDAPPolicyError: err additionalInfos: additionalLoginInformations];
|
||||
}
|
||||
|
||||
if (rememberLogin)
|
||||
@@ -385,6 +420,8 @@ static const NSString *kJwtKey = @"jwt";
|
||||
else
|
||||
[response addCookie: [self _cookieWithUsername: nil]];
|
||||
|
||||
[additionalLoginInformations release];
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
@@ -808,7 +845,7 @@ static const NSString *kJwtKey = @"jwt";
|
||||
}
|
||||
}
|
||||
else
|
||||
response = [self _responseWithLDAPPolicyError: error];
|
||||
response = [self _responseWithLDAPPolicyError: error additionalInfos: nil];
|
||||
}
|
||||
|
||||
return response;
|
||||
@@ -1060,4 +1097,17 @@ static const NSString *kJwtKey = @"jwt";
|
||||
return [[SOGoAdmin sharedInstance] getMotd] && [[[SOGoAdmin sharedInstance] getMotd] length] > 1;
|
||||
}
|
||||
|
||||
- (BOOL) hasUrlCreateAccount
|
||||
{
|
||||
return ([[SOGoSystemDefaults sharedSystemDefaults]
|
||||
urlCreateAccount] != nil);
|
||||
}
|
||||
|
||||
- (NSString *) urlCreateAccount
|
||||
{
|
||||
return [[SOGoSystemDefaults sharedSystemDefaults]
|
||||
urlCreateAccount];
|
||||
}
|
||||
|
||||
|
||||
@end /* SOGoRootPage */
|
||||
@@ -274,11 +274,6 @@
|
||||
"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 */
|
||||
|
||||
@@ -274,11 +274,7 @@
|
||||
"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 */
|
||||
|
||||
@@ -278,7 +278,7 @@ static NSArray *reminderValues = nil;
|
||||
userSource = [user authenticationSource];
|
||||
|
||||
for(policy in [userSource userPasswordPolicy]) {
|
||||
[translations setObject:[self labelForKey:[policy objectForKey:@"label"]]
|
||||
[translations setObject:[self commonLabelForKey:[policy objectForKey:@"label"]]
|
||||
forKey: [policy objectForKey:@"label"]];
|
||||
}
|
||||
translatedUserPolicy = [SOGoPasswordPolicy createPasswordPolicyLabels: [userSource userPasswordPolicy]
|
||||
|
||||
@@ -350,6 +350,7 @@ static NSArray *tasksFields = nil;
|
||||
//NSLog(@"***[UIxCalListingActions _fixDates:] %@ = %@ (%i)", aDateField, aDate, daylightOffset);
|
||||
if (daylightOffset)
|
||||
{
|
||||
[self logWithFormat: @"Changing date (aDate '%@'), (startDate '%@'), (daylightOffset %d)", aDate, startDate, daylightOffset];
|
||||
// If it is the end date and allday, we need to remove the offset
|
||||
if ([fields[count * 2] isEqualToString: @"endDate"] && [[theRecord objectForKey: @"c_isallday"] boolValue] && daylightOffset > 0)
|
||||
aDate = [aDate dateByAddingYears: 0 months: 0 days: 0 hours: 0
|
||||
|
||||
@@ -495,7 +495,7 @@
|
||||
</md-autocomplete>
|
||||
<md-chip-template>
|
||||
<div class="sg-tile-content">
|
||||
{{$chip.c_cn}}
|
||||
{{$chip.c_cn || $chip.email}}
|
||||
</div>
|
||||
</md-chip-template>
|
||||
</md-chips>
|
||||
|
||||
@@ -87,11 +87,16 @@
|
||||
<md-icon label:aria-label="Subject">{{ mailbox.sortedBy('subject') ? 'check' : null }}</md-icon> <var:string label:value="Subject"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<md-menu-item>
|
||||
<md-menu-item ng-if="!mailbox.selectedFolder.isSentFolder">
|
||||
<md-button ng-click="mailbox.sort('from')">
|
||||
<md-icon label:aria-label="From">{{ mailbox.sortedBy('from') ? 'check' : null }}</md-icon> <var:string label:value="From"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<md-menu-item ng-if="mailbox.selectedFolder.isSentFolder">
|
||||
<md-button ng-click="mailbox.sort('to')">
|
||||
<md-icon label:aria-label="To">{{ mailbox.sortedBy('to') ? 'check' : null }}</md-icon> <var:string label:value="To"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<md-menu-item>
|
||||
<md-button ng-click="mailbox.sort('date')">
|
||||
<md-icon label:aria-label="Date">{{ mailbox.sortedBy('date') ? 'check' : null }}</md-icon> <var:string label:value="Date"/>
|
||||
@@ -143,7 +148,8 @@
|
||||
</md-input-container>
|
||||
<md-input-container flex="25">
|
||||
<md-select label:aria-label="Search scope">
|
||||
<md-option value="subject_or_from" selected="selected"><var:string label:value="Subject or Sender"/></md-option>
|
||||
<md-option value="subject_or_from" selected="selected" ng-if="!mailbox.selectedFolder.isSentFolder"><var:string label:value="Subject or Sender"/></md-option>
|
||||
<md-option value="subject_or_to" selected="selected" ng-if="mailbox.selectedFolder.isSentFolder"><var:string label:value="Subject or Recipient"/></md-option>
|
||||
<md-option value="subject"><var:string label:value="Subject"/></md-option>
|
||||
<md-option value="from"><var:string label:value="Sender"/></md-option>
|
||||
<md-option value="to_or_cc"><var:string label:value="To or Cc"/></md-option>
|
||||
@@ -265,7 +271,7 @@
|
||||
<md-button class="sg-no-wrap"
|
||||
aria-label="{{folder.$displayName}}"
|
||||
ng-disabled="::(mailbox.service.selectedFolder.id == folder.id)"
|
||||
ng-click="mailbox.moveSelectedMessages(folder.id)">
|
||||
ng-click="mailbox.moveSelectedMessages(folder.id, null)">
|
||||
<span ng-class="::('sg-child-level-' + folder.level)"
|
||||
ng-bind="folder.$displayName"><!-- mailbox name --></span>
|
||||
</md-button>
|
||||
@@ -632,4 +638,87 @@
|
||||
</md-dialog-actions>
|
||||
</md-dialog>
|
||||
</script>
|
||||
<!-- Remove old emails -->
|
||||
<script type="text/ng-template" id="cleanMailbox">
|
||||
<md-dialog flex="50" flex-sm="80" flex-xs="100">
|
||||
<!-- Toolbar -->
|
||||
<md-toolbar>
|
||||
<div class="md-toolbar-tools">
|
||||
<md-icon class="material-icons sg-icon-toolbar-bg">delete</md-icon>
|
||||
<div class="pseudo-input-container md-flex" ng-if="::!dialogCtrl.isMailbox">
|
||||
<var:string label:value="Clean folder"/>
|
||||
</div>
|
||||
<div class="pseudo-input-container md-flex" ng-if="::dialogCtrl.isMailbox">
|
||||
<var:string label:value="Clean mailbox"/>
|
||||
</div>
|
||||
<md-button class="md-icon-button" ng-click="dialogCtrl.closeDialog()">
|
||||
<md-icon aria-label="Close dialog">close</md-icon>
|
||||
</md-button>
|
||||
</div>
|
||||
</md-toolbar>
|
||||
|
||||
<!-- Dialog Content -->
|
||||
<md-dialog-content class="md-dialog-content">
|
||||
<div class="md-dialog-content">
|
||||
<h4>
|
||||
{{ dialogCtrl.name }}
|
||||
</h4>
|
||||
|
||||
<md-input-container class="md-block">
|
||||
<md-checkbox ng-model="dialogCtrl.form.permanentlyDelete" label:aria-label="Delete permanently (do not use trash)">
|
||||
<var:string label:value="Delete permanently (do not use trash)"/>
|
||||
</md-checkbox>
|
||||
</md-input-container>
|
||||
|
||||
<md-input-container class="md-block">
|
||||
<md-checkbox ng-model="dialogCtrl.form.applyToSubfolders" label:aria-label="Apply to subfolders">
|
||||
<var:string label:value="Apply to subfolders"/>
|
||||
</md-checkbox>
|
||||
</md-input-container>
|
||||
|
||||
<md-input-container class="md-block">
|
||||
<label><var:string label:value="Delete e-mails older than"/></label>
|
||||
<md-select ng-model="dialogCtrl.form.filterDuration">
|
||||
<md-option value="3m"><var:string label:value="3 months"/></md-option>
|
||||
<md-option value="6m"><var:string label:value="6 months"/></md-option>
|
||||
<md-option value="9m"><var:string label:value="9 months"/></md-option>
|
||||
<md-option value="1y"><var:string label:value="1 year"/></md-option>
|
||||
<md-option value="custom"><var:string label:value="Custom"/></md-option>
|
||||
</md-select>
|
||||
</md-input-container>
|
||||
|
||||
<md-input-container class="md-block" ng-show="['custom'].indexOf(dialogCtrl.form.filterDuration) != -1">
|
||||
<label><var:string label:value="Date"/></label>
|
||||
<md-datepicker class="md-text"
|
||||
ng-model="dialogCtrl.form.filterDurationDate"
|
||||
md-hide-icons="calendar"
|
||||
md-max-date="dialogCtrl.maxDate"
|
||||
ng-change="dialogCtrl.mainController.changeDate()">
|
||||
</md-datepicker>
|
||||
</md-input-container>
|
||||
|
||||
<md-input-container class="md-block" ng-show="dialogCtrl.isWarningDisplayed()">
|
||||
<md-checkbox ng-model="dialogCtrl.form.confirmDelete" label:aria-label="You are about to permanently delete some messages. Are you sure you want to proceed with this action?">
|
||||
<span class="clean-mailbox-warn"><var:string label:value="You are about to permanently delete some messages. Are you sure you want to proceed with this action?" /></span>
|
||||
</md-checkbox>
|
||||
</md-input-container>
|
||||
</div>
|
||||
</md-dialog-content>
|
||||
|
||||
<!-- Dialog Actions -->
|
||||
<md-dialog-actions>
|
||||
<md-button class="md-warn" ng-click="dialogCtrl.closeDialog()">
|
||||
<var:string label:value="Cancel" />
|
||||
</md-button>
|
||||
<div class="sg-progress-linear-bottom"
|
||||
ng-show="dialogCtrl.isLoading()">
|
||||
<md-progress-linear class="md-accent"
|
||||
md-mode="indeterminate"><!-- progress --></md-progress-linear>
|
||||
</div>
|
||||
<md-button class="md-primary" ng-disabled="dialogCtrl.isApplyDisabled()" ng-click="dialogCtrl.apply()">
|
||||
<var:string label:value="Apply" />
|
||||
</md-button>
|
||||
</md-dialog-actions>
|
||||
</md-dialog>
|
||||
</script>
|
||||
</container>
|
||||
@@ -69,6 +69,13 @@
|
||||
<var:string label:value="New Folder..."/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<var:if condition="isCleanMailboxEnabled">
|
||||
<md-menu-item>
|
||||
<md-button type="button" ng-click="app.showCleanMailboxPanel(null, account)">
|
||||
<var:string label:value="Clean mailbox"/>...
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
</var:if>
|
||||
<md-menu-item ng-show="::account.id == 0">
|
||||
<md-button
|
||||
label:aria-label="Search"
|
||||
@@ -179,6 +186,13 @@
|
||||
<var:string label:value="Compact"/>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
<var:if condition="isCleanMailboxEnabled">
|
||||
<md-menu-item ng-show="::($menuCtrl.folder.type != 'trash')">
|
||||
<md-button type="button" ng-click="$menuCtrl.cleanMailbox()">
|
||||
<var:string label:value="Clean folder"/>...
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
</var:if>
|
||||
<md-menu-item ng-show="::$menuCtrl.folder.$isEditable">
|
||||
<md-button type="button" ng-click="$menuCtrl.confirmDelete()">
|
||||
<var:string label:value="Delete"/>
|
||||
|
||||
@@ -75,6 +75,53 @@
|
||||
<md-tooltip md-direction="bottom"><var:string label:value="Delete selected message or folder"/></md-tooltip>
|
||||
<md-icon>delete</md-icon>
|
||||
</md-button>
|
||||
|
||||
<md-menu>
|
||||
<md-button class="sg-icon-button" label:aria-label="Move To"
|
||||
ng-click="$mdMenu.open($event)">
|
||||
<md-tooltip md-direction="bottom"><var:string label:value="Move To"/></md-tooltip>
|
||||
<md-icon>call_split</md-icon>
|
||||
</md-button>
|
||||
<md-menu-content width="4">
|
||||
<md-menu-item>
|
||||
<md-menu>
|
||||
<md-button label:aria-label="Move To" ng-click="$mdMenu.open($event)">
|
||||
<var:string label:value="Move To"/>
|
||||
</md-button>
|
||||
<md-menu-content width="4">
|
||||
<div ng-repeat="account in ::mailbox.accounts track by account.id">
|
||||
<md-menu-item>
|
||||
<md-menu>
|
||||
<md-button class="md-primary"
|
||||
aria-label="{{ ::account.name }}"
|
||||
ng-click="$mdMenu.open($event)"
|
||||
ng-bind="::account.name"><!-- account name --></md-button>
|
||||
<md-menu-content class="md-dense" width="4">
|
||||
<div ng-repeat="folder in
|
||||
account.$flattenMailboxes({ all: true })
|
||||
track by folder.path">
|
||||
<md-menu-item>
|
||||
<md-button class="sg-no-wrap"
|
||||
aria-label="{{folder.$displayName}}"
|
||||
ng-disabled="::(mailbox.service.selectedFolder.id == folder.id)"
|
||||
ng-click="mailbox.moveSelectedMessages(folder.id, viewer.message)">
|
||||
<span ng-class="::('sg-child-level-' + folder.level)"
|
||||
ng-bind="folder.$displayName"><!-- mailbox name --></span>
|
||||
</md-button>
|
||||
</md-menu-item>
|
||||
</div>
|
||||
</md-menu-content>
|
||||
</md-menu>
|
||||
</md-menu-item>
|
||||
</div>
|
||||
</md-menu-content>
|
||||
</md-menu>
|
||||
</md-menu-item>
|
||||
</md-menu-content>
|
||||
</md-menu>
|
||||
|
||||
|
||||
|
||||
<md-button class="sg-icon-button hide show-gt-md" label:aria-label="'Open in New Mail Window'.asSafeJSString"
|
||||
ng-hide="::isPopup"
|
||||
ng-click="viewer.openInPopup()">
|
||||
|
||||
@@ -106,6 +106,11 @@
|
||||
<var:string label:value="Remember username"/>
|
||||
</md-switch>
|
||||
</div>
|
||||
<var:if condition="hasUrlCreateAccount">
|
||||
<div layout="row" layout-align="center center">
|
||||
<a var:href="urlCreateAccount" target="_blank" class="create-account-link"><var:string label:value="Create an account"/></a>
|
||||
</div>
|
||||
</var:if>
|
||||
</div>
|
||||
|
||||
<!-- Password recovery -->
|
||||
@@ -208,17 +213,18 @@
|
||||
<!-- Password policy: Password is expired / password recovery-->
|
||||
<div layout="column" layout-align="center center"
|
||||
ng-switch-when="passwordchange">
|
||||
<md-icon class="md-accent md-hue-1 sg-icon--large" ng-if="!app.isInPasswordRecoveryMode()">watch_later</md-icon>
|
||||
<md-icon class="md-accent md-hue-1 sg-icon--large" ng-if="app.isInPasswordRecoveryMode()">vpn_key</md-icon>
|
||||
<md-icon class="md-accent md-hue-1 sg-icon--large" ng-if="!(app.isInPasswordRecoveryMode() || app.isPasswordExpiredSecurity())">watch_later</md-icon>
|
||||
<md-icon class="md-accent md-hue-1 sg-icon--large" ng-if="app.isInPasswordRecoveryMode() || app.isPasswordExpiredSecurity()">vpn_key</md-icon>
|
||||
<div class="md-default-theme md-accent md-hue-1 md-fg md-padding" ng-if="!app.isInPasswordRecoveryMode()">
|
||||
<var:string label:value="Your password has expired, please enter a new one below"/>
|
||||
<span ng-if="!app.isPasswordExpiredSecurity()"><var:string label:value="Your password has expired, please enter a new one below"/></span>
|
||||
<span ng-if="app.isPasswordExpiredSecurity()"><var:string label:value="Your password is too weak. Please choose a stronger password to enhance your security"/></span>
|
||||
</div>
|
||||
<div class="md-default-theme md-accent md-hue-1 md-fg md-padding" ng-if="app.isInPasswordRecoveryMode()">
|
||||
<var:string label:value="Please enter a new password below"/>
|
||||
</div>
|
||||
<div flex="100">
|
||||
<div layout="row" layout-xs="column">
|
||||
<md-input-container class="md-block" flex="flex" ng-if="!app.isInPasswordRecoveryMode()">
|
||||
<md-input-container class="md-block" flex="flex" ng-if="!(app.isInPasswordRecoveryMode())">
|
||||
<label><var:string label:value="Current password"/>
|
||||
</label>
|
||||
<input type="password" sg-no-dirty-check="true" ng-model="app.passwords.oldPassword"/>
|
||||
@@ -227,6 +233,13 @@
|
||||
<label><var:string label:value="New password"/>
|
||||
</label>
|
||||
<input type="password" sg-no-dirty-check="true" ng-model="app.passwords.newPassword"/>
|
||||
<div class="sg-hint">
|
||||
<ul class="sg-padded">
|
||||
<li ng-repeat="item in app.passwordPolicy">
|
||||
{{ item.label }}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</md-input-container>
|
||||
<md-input-container class="md-block" flex="flex">
|
||||
<label><var:string label:value="Confirmation"/>
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
@charset "UTF-8";.ng-cloak,.x-ng-cloak,[data-ng-cloak],[ng-cloak],[ng\:cloak],[x-ng-cloak]{display:none!important}.sg-hide{opacity:0}@-moz-document url-prefix(){[layout-fill]{margin:0;width:100%;min-height:100%;height:100%}}[flex-order]{-webkit-box-ordinal-group:1;-webkit-order:0;order:0}[flex-order="-20"]{-webkit-box-ordinal-group:-19;-webkit-order:-20;order:-20}[flex-order="-19"]{-webkit-box-ordinal-group:-18;-webkit-order:-19;order:-19}[flex-order="-18"]{-webkit-box-ordinal-group:-17;-webkit-order:-18;order:-18}[flex-order="-17"]{-webkit-box-ordinal-group:-16;-webkit-order:-17;order:-17}[flex-order="-16"]{-webkit-box-ordinal-group:-15;-webkit-order:-16;order:-16}[flex-order="-15"]{-webkit-box-ordinal-group:-14;-webkit-order:-15;order:-15}[flex-order="-14"]{-webkit-box-ordinal-group:-13;-webkit-order:-14;order:-14}[flex-order="-13"]{-webkit-box-ordinal-group:-12;-webkit-order:-13;order:-13}[flex-order="-12"]{-webkit-box-ordinal-group:-11;-webkit-order:-12;order:-12}[flex-order="-11"]{-webkit-box-ordinal-group:-10;-webkit-order:-11;order:-11}[flex-order="-10"]{-webkit-box-ordinal-group:-9;-webkit-order:-10;order:-10}[flex-order="-9"]{-webkit-box-ordinal-group:-8;-webkit-order:-9;order:-9}[flex-order="-8"]{-webkit-box-ordinal-group:-7;-webkit-order:-8;order:-8}[flex-order="-7"]{-webkit-box-ordinal-group:-6;-webkit-order:-7;order:-7}[flex-order="-6"]{-webkit-box-ordinal-group:-5;-webkit-order:-6;order:-6}[flex-order="-5"]{-webkit-box-ordinal-group:-4;-webkit-order:-5;order:-5}[flex-order="-4"]{-webkit-box-ordinal-group:-3;-webkit-order:-4;order:-4}[flex-order="-3"]{-webkit-box-ordinal-group:-2;-webkit-order:-3;order:-3}[flex-order="-2"]{-webkit-box-ordinal-group:-1;-webkit-order:-2;order:-2}[flex-order="-1"]{-webkit-box-ordinal-group:0;-webkit-order:-1;order:-1}[flex-order="0"]{-webkit-box-ordinal-group:1;-webkit-order:0;order:0}[flex-order="1"]{-webkit-box-ordinal-group:2;-webkit-order:1;order:1}[flex-order="2"]{-webkit-box-ordinal-group:3;-webkit-order:2;order:2}[flex-order="3"]{-webkit-box-ordinal-group:4;-webkit-order:3;order:3}[flex-order="4"]{-webkit-box-ordinal-group:5;-webkit-order:4;order:4}[flex-order="5"]{-webkit-box-ordinal-group:6;-webkit-order:5;order:5}[flex-order="6"]{-webkit-box-ordinal-group:7;-webkit-order:6;order:6}[flex-order="7"]{-webkit-box-ordinal-group:8;-webkit-order:7;order:7}[flex-order="8"]{-webkit-box-ordinal-group:9;-webkit-order:8;order:8}[flex-order="9"]{-webkit-box-ordinal-group:10;-webkit-order:9;order:9}[flex-order="10"]{-webkit-box-ordinal-group:11;-webkit-order:10;order:10}[flex-order="11"]{-webkit-box-ordinal-group:12;-webkit-order:11;order:11}[flex-order="12"]{-webkit-box-ordinal-group:13;-webkit-order:12;order:12}[flex-order="13"]{-webkit-box-ordinal-group:14;-webkit-order:13;order:13}[flex-order="14"]{-webkit-box-ordinal-group:15;-webkit-order:14;order:14}[flex-order="15"]{-webkit-box-ordinal-group:16;-webkit-order:15;order:15}[flex-order="16"]{-webkit-box-ordinal-group:17;-webkit-order:16;order:16}[flex-order="17"]{-webkit-box-ordinal-group:18;-webkit-order:17;order:17}[flex-order="18"]{-webkit-box-ordinal-group:19;-webkit-order:18;order:18}[flex-order="19"]{-webkit-box-ordinal-group:20;-webkit-order:19;order:19}[flex-order="20"]{-webkit-box-ordinal-group:21;-webkit-order:20;order:20}[flex-offset="0"]{margin-left:0}[flex-offset="5"]{margin-left:5%}[flex-offset="10"]{margin-left:10%}[flex-offset="15"]{margin-left:15%}[flex-offset="20"]{margin-left:20%}[flex-offset="25"]{margin-left:25%}[flex-offset="30"]{margin-left:30%}[flex-offset="35"]{margin-left:35%}[flex-offset="40"]{margin-left:40%}[flex-offset="45"]{margin-left:45%}[flex-offset="50"]{margin-left:50%}[flex-offset="55"]{margin-left:55%}[flex-offset="60"]{margin-left:60%}[flex-offset="65"]{margin-left:65%}[flex-offset="70"]{margin-left:70%}[flex-offset="75"]{margin-left:75%}[flex-offset="80"]{margin-left:80%}[flex-offset="85"]{margin-left:85%}[flex-offset="90"]{margin-left:90%}[flex-offset="95"]{margin-left:95%}[flex-offset="33"]{margin-left:33.3333333333%}[flex-offset="66"]{margin-left:66.6666666667%}[layout-align="start stretch"],[layout-align]{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-box-align:stretch;-webkit-align-items:stretch;align-items:stretch}[layout-align="start center"],[layout-align="start end"],[layout-align="start start"],[layout-align="start stretch"],[layout-align=start]{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}[layout-align="center center"],[layout-align="center end"],[layout-align="center start"],[layout-align="center stretch"],[layout-align=center]{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}[layout-align="end center"],[layout-align="end end"],[layout-align="end start"],[layout-align="end stretch"],[layout-align=end]{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}[layout-align="spacLine truncated
|
||||
@charset "UTF-8";.ng-cloak,.x-ng-cloak,[data-ng-cloak],[ng-cloak],[ng\:cloak],[x-ng-cloak]{display:none!important}.sg-hide{opacity:0}@-moz-document url-prefix(){[layout-fill]{margin:0;width:100%;min-height:100%;height:100%}}[flex-order]{-webkit-box-ordinal-group:1;-webkit-order:0;order:0}[flex-order="-20"]{-webkit-box-ordinal-group:-19;-webkit-order:-20;order:-20}[flex-order="-19"]{-webkit-box-ordinal-group:-18;-webkit-order:-19;order:-19}[flex-order="-18"]{-webkit-box-ordinal-group:-17;-webkit-order:-18;order:-18}[flex-order="-17"]{-webkit-box-ordinal-group:-16;-webkit-order:-17;order:-17}[flex-order="-16"]{-webkit-box-ordinal-group:-15;-webkit-order:-16;order:-16}[flex-order="-15"]{-webkit-box-ordinal-group:-14;-webkit-order:-15;order:-15}[flex-order="-14"]{-webkit-box-ordinal-group:-13;-webkit-order:-14;order:-14}[flex-order="-13"]{-webkit-box-ordinal-group:-12;-webkit-order:-13;order:-13}[flex-order="-12"]{-webkit-box-ordinal-group:-11;-webkit-order:-12;order:-12}[flex-order="-11"]{-webkit-box-ordinal-group:-10;-webkit-order:-11;order:-11}[flex-order="-10"]{-webkit-box-ordinal-group:-9;-webkit-order:-10;order:-10}[flex-order="-9"]{-webkit-box-ordinal-group:-8;-webkit-order:-9;order:-9}[flex-order="-8"]{-webkit-box-ordinal-group:-7;-webkit-order:-8;order:-8}[flex-order="-7"]{-webkit-box-ordinal-group:-6;-webkit-order:-7;order:-7}[flex-order="-6"]{-webkit-box-ordinal-group:-5;-webkit-order:-6;order:-6}[flex-order="-5"]{-webkit-box-ordinal-group:-4;-webkit-order:-5;order:-5}[flex-order="-4"]{-webkit-box-ordinal-group:-3;-webkit-order:-4;order:-4}[flex-order="-3"]{-webkit-box-ordinal-group:-2;-webkit-order:-3;order:-3}[flex-order="-2"]{-webkit-box-ordinal-group:-1;-webkit-order:-2;order:-2}[flex-order="-1"]{-webkit-box-ordinal-group:0;-webkit-order:-1;order:-1}[flex-order="0"]{-webkit-box-ordinal-group:1;-webkit-order:0;order:0}[flex-order="1"]{-webkit-box-ordinal-group:2;-webkit-order:1;order:1}[flex-order="2"]{-webkit-box-ordinal-group:3;-webkit-order:2;order:2}[flex-order="3"]{-webkit-box-ordinal-group:4;-webkit-order:3;order:3}[flex-order="4"]{-webkit-box-ordinal-group:5;-webkit-order:4;order:4}[flex-order="5"]{-webkit-box-ordinal-group:6;-webkit-order:5;order:5}[flex-order="6"]{-webkit-box-ordinal-group:7;-webkit-order:6;order:6}[flex-order="7"]{-webkit-box-ordinal-group:8;-webkit-order:7;order:7}[flex-order="8"]{-webkit-box-ordinal-group:9;-webkit-order:8;order:8}[flex-order="9"]{-webkit-box-ordinal-group:10;-webkit-order:9;order:9}[flex-order="10"]{-webkit-box-ordinal-group:11;-webkit-order:10;order:10}[flex-order="11"]{-webkit-box-ordinal-group:12;-webkit-order:11;order:11}[flex-order="12"]{-webkit-box-ordinal-group:13;-webkit-order:12;order:12}[flex-order="13"]{-webkit-box-ordinal-group:14;-webkit-order:13;order:13}[flex-order="14"]{-webkit-box-ordinal-group:15;-webkit-order:14;order:14}[flex-order="15"]{-webkit-box-ordinal-group:16;-webkit-order:15;order:15}[flex-order="16"]{-webkit-box-ordinal-group:17;-webkit-order:16;order:16}[flex-order="17"]{-webkit-box-ordinal-group:18;-webkit-order:17;order:17}[flex-order="18"]{-webkit-box-ordinal-group:19;-webkit-order:18;order:18}[flex-order="19"]{-webkit-box-ordinal-group:20;-webkit-order:19;order:19}[flex-order="20"]{-webkit-box-ordinal-group:21;-webkit-order:20;order:20}[flex-offset="0"]{margin-left:0}[flex-offset="5"]{margin-left:5%}[flex-offset="10"]{margin-left:10%}[flex-offset="15"]{margin-left:15%}[flex-offset="20"]{margin-left:20%}[flex-offset="25"]{margin-left:25%}[flex-offset="30"]{margin-left:30%}[flex-offset="35"]{margin-left:35%}[flex-offset="40"]{margin-left:40%}[flex-offset="45"]{margin-left:45%}[flex-offset="50"]{margin-left:50%}[flex-offset="55"]{margin-left:55%}[flex-offset="60"]{margin-left:60%}[flex-offset="65"]{margin-left:65%}[flex-offset="70"]{margin-left:70%}[flex-offset="75"]{margin-left:75%}[flex-offset="80"]{margin-left:80%}[flex-offset="85"]{margin-left:85%}[flex-offset="90"]{margin-left:90%}[flex-offset="95"]{margin-left:95%}[flex-offset="33"]{margin-left:33.3333333333%}[flex-offset="66"]{margin-left:66.6666666667%}[layout-align="start stretch"],[layout-align]{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-content:stretch;align-content:stretch;-webkit-box-align:stretch;-webkit-align-items:stretch;align-items:stretch}[layout-align="start center"],[layout-align="start end"],[layout-align="start start"],[layout-align="start stretch"],[layout-align=start]{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}[layout-align="center center"],[layout-align="center end"],[layout-align="center start"],[layout-align="center stretch"],[layout-align=center]{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}[layout-align="end center"],[layout-align="end end"],[layout-align="end start"],[layout-align="end stretch"],[layout-align=end]{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}[layout-align="spacLine truncated
|
||||
/*# sourceMappingURL=styles.css.map */
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"sources":["css/styles.css"],"names":[],"mappings":"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 truncated
|
||||
{"version":3,"sources":["css/styles.css"],"names":[],"mappings":"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 truncated
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function e(e,t){e.state("administration",{abstract:!0,views:{administration:{templateUrl:"administration.html",controller:"AdministrationController",controllerAs:"app"}}}).state("administration.rights",{url:"/rights",views:{module:{templateUrl:"rights.html"}}}).state("administration.rights.edit",{url:"/:userId/:folderId/edit",views:{acl:{templateUrl:"UIxAdministrationAclEditor",controller:"AdministrationAclController",controllerAs:"acl"}},resolve:{stateUser:n,stateFolder:r,stateAcls:o}}).state("administration.theme",{url:"/theme",views:{module:{templateUrl:"UIxThemePreview",controller:"ThemePreviewController",controllerAs:"ctrl"}}}).state("administration.motd",{url:"/motd",views:{module:{templateUrl:"UIxAdministrationMotd",controller:"AdministrationMotdController",controllerAs:"ctrl"}}}),t.rules.otherwise("/rights")}function n(t,n,r){var o=_.find(r.$users,function(e){return e.uid==n.userId});return angular.isUndefined(o)?r.$filter(n.userId).then(function(e){return o=_.find(r.$users,function(e){return e.uid==n.userId}),angular.isUndefined(o)?t.reject("User with ID "+n.userId+" not found"):o.$folders().then(function(){return o})}):o}function r(e,t,n,r,o,i){var s=n(t.folderId),n=_.find(r.$$folders,function(e){return e.name==s}),t=new("Appointment"==n.type?i:o)({id:n.name.split("/").pop(),owner:n.owner,name:n.displayName});return r.selectedFolder=t.id,t}function o(e){return e.$acl.$users(e.owner)}function t(e,t,n,r){e.DebugEnabled||r.defaultErrorHandler(function(){}),n.onError({to:"administration.**"},function(e){"administration"==e.to().name||e.ignored()||(t.error("transition error to "+e.to().name+": "+e.error().detail),r.go({state:"administration.rights"}))})}angular.module("SOGo.AdministrationUI",["ui.router","SOGo.Common","SOGo.Authentication","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.SchedulerUI","sgCkeditor"]).config(e).run(t),e.$inject=["$stateProvider","$urlServiceProvider"],n.$inject=["$q","$stateParams","User"],r.$inject=["$state","$stateParams","decodeUriFilter","stateUser","AddressBook","Calendar"],o.$inject=["stateFolder"],t.$inject=["$window","$log","$transitions","$state"]}(),function(){"use strict";function e(t,e,n,r,o,i,s,a,d){var u=this;function c(e,t){if(t&&t.target.parentNode.classList.contains("md-secondary"))return!1;u.selectedUid==e.uid?u.selectedUid=null:(u.selectedUid=e.uid,u.selectedUser=e,u.selectedUser.$rights())}function m(){e.go("administration.rights").then(function(){delete u.user.selectedFolder,u.user=null})}u.user=o,u.folder=i,u.users=s,u.folderType=angular.isDefined(i.$cards)?"AddressBook":"Calendar",u.selectedUser=null,u.selectedUid=null,u.selectUser=c,u.selectAllRights=function(e){i.$acl.$selectAllRights(e)},u.showRights=function(e){return u.selectedUid==e.uid&&e.rights},u.removeUser=function(e){t(function(){i.$acl.$removeUser(e.uid,i.owner)},500)},u.getTemplate=function(){return angular.isDefined(i.$cards)?"../"+i.owner+"/Contacts/"+i.id+"/UIxContactsUserRightsEditor":"../"+i.owner+"/Calendar/"+i.id+"/UIxCalUserRightsEditor"},u.close=m,u.save=function(){i.$acl.$saveUsersRights(i.owner).then(function(){r.show(r.simple().textContent(l("ACLs saved")).position(a.toastPosition).hideDelay(2e3)),n("xs")&&m()})},u.userToAdd="",u.searchText="",u.userFilter=function(e){return d.$filter(e,i.$acl.users,{dry:!0,uid:u.user.uid})},u.addUser=function(e){e&&i.$acl.$addUser(e,i.owner).then(function(e){u.userToAdd="",u.searchText="",u.selectedUid=null,e&&c(e)})}}e.$inject=["$timeout","$state","$mdMedia","$mdToast","stateUser","stateFolder","stateAcls","sgConstant","User"],angular.module("SOGo.AdministrationUI").controller("AdministrationAclController",e)}(),function(){"use strict";function e(t,e,n,r,o,i,s,a,d){var l=this;angular.element(e.document).find("title").attr("sg-default");this.$onInit=function(){this.service=d,this.selectedUser=null,this.users=d.$users},this.go=function(e){t.go("administration."+e),r(i["gt-md"])||o("left").close()},this.filter=function(e){d.$filter(e)},this.selectUser=function(e){this.selectedUser==this.users[e]?this.selectedUser=null:this.users[e].$folders().then(function(){l.selectedUser=l.users[e]})},this.selectFolder=function(e){t.go("administration.rights.edit",{userId:this.selectedUser.uid,folderId:a(e.name)})}}e.$inject=["$state","$window","$mdToast","$mdMedia","$mdSidenav","sgConstant","Dialog","encodeUriFilter","User"],angular.module("SOGo.AdministrationUI").controller("AdministrationController",e)}(),function(){"use strict";function e(e,t,n,r,o,i,s){var a=this;a.administration=i,a.motd=null,a.save=function(){this.administration.$saveMotd(a.motd).then(function(){r.show(r.simple().textContent(l("Message of the day has been saved")).position(o.toastPosition).hideDelay(3e3))})},a.clear=function(){console.log("HEY"),a.motd=""},a.ckConfig={autoGrow_minHeight:200,removeButtons:"Save,NewPage,Preview,Print,Templates,Cut,Copy,Paste,PasteText,PasteFromWord,Undo,Redo,Find,Replace,SelectAll,Scayt,Form,Checkbox,Radio,TextField,Textarea,SelecLine truncated
|
||||
(()=>{function e(e,t){e.state("administration",{abstract:!0,views:{administration:{templateUrl:"administration.html",controller:"AdministrationController",controllerAs:"app"}}}).state("administration.rights",{url:"/rights",views:{module:{templateUrl:"rights.html"}}}).state("administration.rights.edit",{url:"/:userId/:folderId/edit",views:{acl:{templateUrl:"UIxAdministrationAclEditor",controller:"AdministrationAclController",controllerAs:"acl"}},resolve:{stateUser:r,stateFolder:n,stateAcls:o}}).state("administration.theme",{url:"/theme",views:{module:{templateUrl:"UIxThemePreview",controller:"ThemePreviewController",controllerAs:"ctrl"}}}).state("administration.motd",{url:"/motd",views:{module:{templateUrl:"UIxAdministrationMotd",controller:"AdministrationMotdController",controllerAs:"ctrl"}}}),t.rules.otherwise("/rights")}function r(t,r,n){var o=_.find(n.$users,function(e){return e.uid==r.userId});return angular.isUndefined(o)?n.$filter(r.userId).then(function(e){return o=_.find(n.$users,function(e){return e.uid==r.userId}),angular.isUndefined(o)?t.reject("User with ID "+r.userId+" not found"):o.$folders().then(function(){return o})}):o}function n(e,t,r,n,o,i){var s=r(t.folderId),r=_.find(n.$$folders,function(e){return e.name==s}),t=new("Appointment"==r.type?i:o)({id:r.name.split("/").pop(),owner:r.owner,name:r.displayName});return n.selectedFolder=t.id,t}function o(e){return e.$acl.$users(e.owner)}function t(e,t,r,n){e.DebugEnabled||n.defaultErrorHandler(function(){}),r.onError({to:"administration.**"},function(e){"administration"==e.to().name||e.ignored()||(t.error("transition error to "+e.to().name+": "+e.error().detail),n.go({state:"administration.rights"}))})}angular.module("SOGo.AdministrationUI",["ui.router","SOGo.Common","SOGo.Authentication","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.SchedulerUI","sgCkeditor"]).config(e).run(t),e.$inject=["$stateProvider","$urlServiceProvider"],r.$inject=["$q","$stateParams","User"],n.$inject=["$state","$stateParams","decodeUriFilter","stateUser","AddressBook","Calendar"],o.$inject=["stateFolder"],t.$inject=["$window","$log","$transitions","$state"]})(),(()=>{function e(t,e,r,n,o,i,s,a,d){var u=this;function c(e,t){if(t&&t.target.parentNode.classList.contains("md-secondary"))return!1;u.selectedUid==e.uid?u.selectedUid=null:(u.selectedUid=e.uid,u.selectedUser=e,u.selectedUser.$rights())}function m(){e.go("administration.rights").then(function(){delete u.user.selectedFolder,u.user=null})}u.user=o,u.folder=i,u.users=s,u.folderType=angular.isDefined(i.$cards)?"AddressBook":"Calendar",u.selectedUser=null,u.selectedUid=null,u.selectUser=c,u.selectAllRights=function(e){i.$acl.$selectAllRights(e)},u.showRights=function(e){return u.selectedUid==e.uid&&e.rights},u.removeUser=function(e){t(function(){i.$acl.$removeUser(e.uid,i.owner)},500)},u.getTemplate=function(){return angular.isDefined(i.$cards)?"../"+i.owner+"/Contacts/"+i.id+"/UIxContactsUserRightsEditor":"../"+i.owner+"/Calendar/"+i.id+"/UIxCalUserRightsEditor"},u.close=m,u.save=function(){i.$acl.$saveUsersRights(i.owner).then(function(){n.show(n.simple().textContent(l("ACLs saved")).position(a.toastPosition).hideDelay(2e3)),r("xs")&&m()})},u.userToAdd="",u.searchText="",u.userFilter=function(e){return d.$filter(e,i.$acl.users,{dry:!0,uid:u.user.uid})},u.addUser=function(e){e&&i.$acl.$addUser(e,i.owner).then(function(e){u.userToAdd="",u.searchText="",u.selectedUid=null,e&&c(e)})}}e.$inject=["$timeout","$state","$mdMedia","$mdToast","stateUser","stateFolder","stateAcls","sgConstant","User"],angular.module("SOGo.AdministrationUI").controller("AdministrationAclController",e)})(),(()=>{function e(t,e,r,n,o,i,s,a,d){var l=this;angular.element(e.document).find("title").attr("sg-default");this.$onInit=function(){this.service=d,this.selectedUser=null,this.users=d.$users},this.go=function(e){t.go("administration."+e),n(i["gt-md"])||o("left").close()},this.filter=function(e){d.$filter(e)},this.selectUser=function(e){this.selectedUser==this.users[e]?this.selectedUser=null:this.users[e].$folders().then(function(){l.selectedUser=l.users[e]})},this.selectFolder=function(e){t.go("administration.rights.edit",{userId:this.selectedUser.uid,folderId:a(e.name)})}}e.$inject=["$state","$window","$mdToast","$mdMedia","$mdSidenav","sgConstant","Dialog","encodeUriFilter","User"],angular.module("SOGo.AdministrationUI").controller("AdministrationController",e)})(),(()=>{function e(e,t,r,n,o,i,s){var a=this;a.administration=i,a.motd=null,a.save=function(){this.administration.$saveMotd(a.motd).then(function(){n.show(n.simple().textContent(l("Message of the day has been saved")).position(o.toastPosition).hideDelay(3e3))})},a.clear=function(){console.log("HEY"),a.motd=""},a.ckConfig={autoGrow_minHeight:200,removeButtons:"Save,NewPage,Preview,Print,Templates,Cut,Copy,Paste,PasteText,PasteFromWord,Undo,Redo,Find,Replace,SelectAll,Scayt,Form,Checkbox,Radio,TextField,Textarea,Select,Button,Image,HiddenField,CopyFormatting,RemoveFormat,NumberedList,BuLine truncated
|
||||
//# sourceMappingURL=Administration.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Administration.js","sources":["Administration/Administration.app.js","Administration/AdministrationAclController.js","Administration/AdministrationController.js","Administration/AdministrationMotdController.js","Administration/ThemePreviewController.js"],"names":["configure","$stateProvider","$urlServiceProvider","state","abstract","views","administration","templateUrl","controller","controllerAs","url","module","acl","resolve","stateUser","stateFolder","stateAcls","rules","otherwise","$q","$stateParams","User","user","_","find","$users","uid","userId","angular","isUndefined","$filter","then","users","reject","$folders","$state","decodeUriFilter","AddressBook","Calendar","folderId","folder","$$folders","name","o","type","id","split","pop","owner","displayName","selectedFolder","$acl","runBlock","$window","$log","$transitions","DebugEnabled","defaultErrorHandler","onError","to","transition","ignored","error","detail","go","config","run","$inject","AdministrationAclController","$timeout","$mdMedia","$mdToast","sgConstant","vm","this","selectUser","$event","target","parentNode","classList","contains","selectedUid","selectedUser","$rights","close","folderType","isDefined","$cards","selectAllRights","$selectAllRights","showRights","rights","removeUser","$removeUser","getTemplate","save","$saveUsersRights","show","simple","textContent","l","position","toastPosition","hideDelay","userToAdd","searchText","userFilter","$query","dry","addUser","data","$addUser","AdministrationController","$mdSidenav","Dialog","encodeUriFilter","element","document","attr","$onInit","service","filter","i","selectFolder","AdministrationMotdController","Administration","Settings","motd","$saveMotd","clear","console","log","ckConfig","autoGrow_minHeight","removeButtons","$getMotd","$mdThemingProvider","registerStyles","join","generateThemesOnDemand","ThemePreviewController","$mdTheming","$mdColors","defaultTheme","THEMES","jsonDefaultTheme","JSON","stringify","undefined","getColor","getThemeColor"],"mappings":"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 truncated
|
||||
{"version":3,"file":"Administration.js","sources":["Administration/Administration.app.js","Administration/AdministrationAclController.js","Administration/AdministrationController.js","Administration/AdministrationMotdController.js","Administration/ThemePreviewController.js"],"names":["configure","$stateProvider","$urlServiceProvider","state","abstract","views","administration","templateUrl","controller","controllerAs","url","module","acl","resolve","stateUser","stateFolder","stateAcls","rules","otherwise","$q","$stateParams","User","user","_","find","$users","uid","userId","angular","isUndefined","$filter","then","users","reject","$folders","$state","decodeUriFilter","AddressBook","Calendar","folderId","folder","$$folders","name","o","type","id","split","pop","owner","displayName","selectedFolder","$acl","runBlock","$window","$log","$transitions","DebugEnabled","defaultErrorHandler","onError","to","transition","ignored","error","detail","go","config","run","$inject","AdministrationAclController","$timeout","$mdMedia","$mdToast","sgConstant","vm","this","selectUser","$event","target","parentNode","classList","contains","selectedUid","selectedUser","$rights","close","folderType","isDefined","$cards","selectAllRights","$selectAllRights","showRights","rights","removeUser","$removeUser","getTemplate","save","$saveUsersRights","show","simple","textContent","l","position","toastPosition","hideDelay","userToAdd","searchText","userFilter","$query","dry","addUser","data","$addUser","AdministrationController","$mdSidenav","Dialog","encodeUriFilter","element","document","attr","$onInit","service","filter","i","selectFolder","AdministrationMotdController","Administration","Settings","motd","$saveMotd","clear","console","log","ckConfig","autoGrow_minHeight","removeButtons","$getMotd","$mdThemingProvider","registerStyles","join","generateThemesOnDemand","ThemePreviewController","$mdTheming","$mdColors","defaultTheme","THEMES","jsonDefaultTheme","JSON","stringify","undefined","getColor","getThemeColor"],"mappings":"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 truncated
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function a(){}a.$factory=["$q","$timeout","$log","sgSettings","Resource","User",function(t,e,o,n,r,i){return angular.extend(a,{$q:t,$timeout:e,$log:o,$$resource:new r(n.activeUser("folderURL"),n.activeUser()),activeUser:n.activeUser(),$User:i}),new a}],a.prototype.$getMotd=function(){return a.$$resource.fetch("Administration/getMotd").then(function(t){return t})},a.prototype.$saveMotd=function(t){return a.$$resource.save("Administration",{motd:t},{action:"saveMotd"}).then(function(t){return t})};try{angular.module("SOGo.AdministrationUI")}catch(t){angular.module("SOGo.AdministrationUI",["SOGo.Common"])}angular.module("SOGo.AdministrationUI").factory("Administration",a.$factory)}();
|
||||
(()=>{function a(){}a.$factory=["$q","$timeout","$log","sgSettings","Resource","User",function(t,e,o,n,r,i){return angular.extend(a,{$q:t,$timeout:e,$log:o,$$resource:new r(n.activeUser("folderURL"),n.activeUser()),activeUser:n.activeUser(),$User:i}),new a}],a.prototype.$getMotd=function(){return a.$$resource.fetch("Administration/getMotd").then(function(t){return t})},a.prototype.$saveMotd=function(t){return a.$$resource.save("Administration",{motd:t},{action:"saveMotd"}).then(function(t){return t})};try{angular.module("SOGo.AdministrationUI")}catch(t){angular.module("SOGo.AdministrationUI",["SOGo.Common"])}angular.module("SOGo.AdministrationUI").factory("Administration",a.$factory)})();
|
||||
//# sourceMappingURL=Administration.services.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Administration.services.js","sources":["Administration/Administration.service.js"],"names":["Administration","$factory","$q","$timeout","$log","Settings","Resource","User","angular","extend","$$resource","activeUser","$User","prototype","$getMotd","fetch","then","data","$saveMotd","message","save","motd","action","module","e","factory"],"mappings":"AAEA,CAAA,WACE,aAMA,SAASA,KASTA,EAAeC,SAAW,CAAC,KAAM,WAAY,OAAQ,aAAc,WAAY,OAAQ,SAASC,EAAIC,EAAUC,EAAMC,EAAUC,EAAUC,GAUtI,OATAC,QAAQC,OAAOT,EAAgB,CAC7BE,GAAIA,EACJC,SAAUA,EACVC,KAAMA,EACNM,WAAY,IAAIJ,EAASD,EAASM,WAAW,WAAW,EAAGN,EAASM,WAAW,CAAC,EAChFA,WAAYN,EAASM,WAAW,EAChCC,MAAOL,CACT,CAAC,EAEM,IAAIP,CACb,GAOAA,EAAea,UAAUC,SAAW,WAGlC,OAAOd,EAAeU,WAAWK,MAAM,wBAAwB,EAC5DC,KAAK,SAAUC,GACd,OAAOA,CACT,CAAC,CACL,EAOAjB,EAAea,UAAUK,UAAY,SAAUC,GAG7C,OAAOnB,EAAeU,WAAWU,KAAK,iBAAkB,CAAEC,KAAMF,CAAQ,EAAG,CAAEG,OAAQ,UAAW,CAAC,EAC9FN,KAAK,SAAUC,GACd,OAAOA,CACT,CAAC,CACL,EAGA,IACET,QAAQe,OAAO,uBAAuB,CAIxC,CAFA,MAAMC,GACJhB,QAAQe,OAAO,wBAAyB,CAAC,cAAc,CACzD,CAGAf,QAAQe,OAAO,uBAAuB,EACnCE,QAAQ,iBAAkBzB,EAAeC,QAAQ,CAErD,EAAE"}
|
||||
{"version":3,"file":"Administration.services.js","sources":["Administration/Administration.service.js"],"names":["Administration","$factory","$q","$timeout","$log","Settings","Resource","User","angular","extend","$$resource","activeUser","$User","prototype","$getMotd","fetch","then","data","$saveMotd","message","save","motd","action","module","e","factory"],"mappings":"CAEA,KAOE,SAASA,KASTA,EAAeC,SAAW,CAAC,KAAM,WAAY,OAAQ,aAAc,WAAY,OAAQ,SAASC,EAAIC,EAAUC,EAAMC,EAAUC,EAAUC,GAUtI,OATAC,QAAQC,OAAOT,EAAgB,CAC7BE,GAAIA,EACJC,SAAUA,EACVC,KAAMA,EACNM,WAAY,IAAIJ,EAASD,EAASM,WAAW,WAAW,EAAGN,EAASM,WAAW,CAAC,EAChFA,WAAYN,EAASM,WAAW,EAChCC,MAAOL,CACT,CAAC,EAEM,IAAIP,CACb,GAOAA,EAAea,UAAUC,SAAW,WAGlC,OAAOd,EAAeU,WAAWK,MAAM,wBAAwB,EAC5DC,KAAK,SAAUC,GACd,OAAOA,CACT,CAAC,CACL,EAOAjB,EAAea,UAAUK,UAAY,SAAUC,GAG7C,OAAOnB,EAAeU,WAAWU,KAAK,iBAAkB,CAAEC,KAAMF,CAAQ,EAAG,CAAEG,OAAQ,UAAW,CAAC,EAC9FN,KAAK,SAAUC,GACd,OAAOA,CACT,CAAC,CACL,EAGA,IACET,QAAQe,OAAO,uBAAuB,CAIxC,CAFA,MAAMC,GACJhB,QAAQe,OAAO,wBAAyB,CAAC,cAAc,CACzD,CAGAf,QAAQe,OAAO,uBAAuB,EACnCE,QAAQ,iBAAkBzB,EAAeC,QAAQ,CAErD,GAAE"}
|
||||
@@ -1,2 +1,2 @@
|
||||
function l(){var n,e,t=arguments[0],o=t,r=arguments;for(labels[t]?o=labels[t]:clabels[t]&&(o=clabels[t]),n=1,e=0;n<r.length;n++,e++)o=o.replace("%{"+e+"}",r[n]);return o=(n=1)<r.length?o.replace(/%((%)|s|d)/g,function(e){var t=null;return e[2]?t=e[2]:(t=r[n],"%d"===e&&(t=parseFloat(t),isNaN(t))&&(t=0),n++),t}):o}function hexToRgb(e){e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null}function contrast(e){var t=1,e=hexToRgb(e);if(e){for(var n=[e.r/255,e.g/255,e.b/255],o=0;o<n.length;++o)n[o]=n[o]<=.03928?n[o]/12.92:Math.pow((n[o]+.055)/1.055,2.4);t=.2126*n[0]+.7152*n[1]+.0722*n[2]}return.179<t?"black":"white"}function guid(){function e(){return(65536*(1+Math.random())|0).toString(16).substring(1)}return(e()+e()+"-"+e()+"-4"+e().substr(0,3)+"-"+e()+"-"+e()+e()+e()).toLowerCase()}!function(){"use strict";function e(e,t,n,o,r,i,s){e.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/),r.definePalette("sogo-green",{50:"eaf5e9",100:"cbe5c8",200:"aad6a5",300:"88c781",400:"66b86a",500:"56b04c",600:"4da143",700:"388e3c",800:"367d2e",900:"225e1b",A100:"fafafa",A200:"69f0ae",A400:"00e676",A700:"00c853",contrastDefaultColor:"dark",contrastLightColors:["300","400","500","600","700","800","900"]}),r.definePalette("sogo-blue",{50:"f0faf9",100:"e1f5f3",200:"ceebe8",300:"bfe0dd",400:"b2d6d3",500:"a1ccc8",600:"8ebfbb",700:"7db3b0",800:"639997",900:"4d8080",A100:"d4f7fa",A200:"c3f5fa",A400:"53e3f0",A700:"00b0c0",contrastDefaultColor:"light",contrastDarkColors:["50","100","200"]});e=r.extendPalette("grey",{1e3:"baa870"});r.definePalette("sogo-grey",e),r.theme("default").primaryPalette("sogo-blue",{default:"900","hue-1":"400","hue-2":"800","hue-3":"A700"}).accentPalette("sogo-green",{default:"500","hue-1":"A100","hue-2":"300","hue-3":"A700"}).backgroundPalette("sogo-grey"),r.registerStyles(["md-toolbar.md-hue-1:not(.md-menu-toolbar).md-accent,","md-toolbar.md-hue-1:not(.md-menu-toolbar).md-accent md-input-container[md-no-float] .md-input {"," background-color: '{{accent-hue-1}}';"," color: '{{foreground-1}}';","}","md-toolbar.md-hue-1:not(.md-menu-toolbar).md-accent md-icon {"," color: '{{foreground-1}}';"," fill: '{{foreground-1}}';","}"].join("")),r.registerStyles([".md-autocomplete-suggestions.md-3-line li p {"," color: '{{foreground-2}}';","}"].join("")),r.registerStyles([".sg-time-selection-indicator.sg-time-selected,",".sg-time-selection-indicator:hover.sg-time-selected,",".sg-time-selection-indicator.md-focus.sg-time-selected {"," background: '{{primary-500}}';","}",".sg-timepicker-open .sg-timepicker-icon {"," color: '{{primary-900}}';","}",".sg-timepicker-time,",".sg-timepicker-open .sg-timepicker-input-container {"," background: '{{background-hue-1}}';","}",".sg-timepicker-input-mask-opaque {"," box-shadow: 0 0 0 9999px '{{background-hue-1}}';","}"].join("")),r.registerStyles(["[ui-view=calendars] .hours {"," color: '{{primary-700}}';","}",".attendees .busy {"," background-color: '{{background-1000}}';","}",".attendees .event {"," background-color: '{{primary-300}}';","}"].join("")),r.registerStyles([".sg-message-thread {"," background-color: '{{primary-100}}';","}",".sg-message-thread-first {"," background-color: '{{primary-200}}';","}"].join("")),window.DebugEnabled||(t.debugEnabled(!1),n.debugInfoEnabled(!1),i.disableWarnings(),s.errorOnUnhandledRejections(!1),r.generateThemesOnDemand(!0)),o.interceptors.push("AuthInterceptor"),o.interceptors.push("ErrorInterceptor")}function a(t,e,n,o,r){var i=e.defer(),s=angular.element('<iframe class="ng-hide" src="'+t.UserFolderURL+'recover"></iframe>');return s.on("load",function(){var e=o.get("$state");2<r.config.attempt?(angular.element(t).off("beforeunload"),t.location.href=t.ApplicationBaseURL+e.href(e.current),i.reject()):n(function(){var e=o.get("$http");r.config.attempt?r.config.attempt++:r.config.attempt=1,e(r.config).then(function(e){i.resolve(e)},function(e){i.reject(e)}).finally(function(){n(s.remove,1e3)})},2e3)}),document.body.appendChild(s[0]),i.promise}function t(n,o,r,i){return{response:function(e){var t;return e&&/^application\/json/.test(e.config.headers.Accept)&&/^[\n\r\t ]*<!DOCTYPE html/.test(e.data)?n.usesCASAuthentication||n.usesSAML2Authentication?a(n,o,r,i,e):(t=i.get("$state"),angular.element(n).off("beforeunload"),t.href(t.current)?n.location.href=n.ApplicationBaseURL+t.href(t.current):n.location.href=n.ApplicationBaseURL,o.reject()):e}}}function n(n,o,r,i,s){return{responseError:function(e){var t;if(/^application\/json/.test(e.config.headers.Accept)){if((o.usesCASAuthentication||o.usesSAML2Authentication)&&(-1==e.status||500==e.status&&-1!==document.cookie.indexOf("cas-location")))return a(o,r,i,s,e);o.usesSAML2Authentication&&401==e.status&&!o.recovered?(t=s.get("$state"),angular.element(o).off("beforeunload"),o.recovered=!0,o.location.href=o.ApplicationBaseURL+t.href(t.current)):e.data&&e.data.quiet||n.$broadcast("http:Error",e)}return r.reject(e)}}}angular.Line truncated
|
||||
function l(){var n,e,t=arguments[0],o=t,r=arguments;for(labels[t]?o=labels[t]:clabels[t]&&(o=clabels[t]),n=1,e=0;n<r.length;n++,e++)o=o.replace("%{"+e+"}",r[n]);return o=(n=1)<r.length?o.replace(/%((%)|s|d)/g,function(e){var t=null;return e[2]?t=e[2]:(t=r[n],"%d"===e&&(t=parseFloat(t),isNaN(t))&&(t=0),n++),t}):o}function hexToRgb(e){e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null}function contrast(e){var t=1,e=hexToRgb(e);if(e){for(var n=[e.r/255,e.g/255,e.b/255],o=0;o<n.length;++o)n[o]=n[o]<=.03928?n[o]/12.92:Math.pow((n[o]+.055)/1.055,2.4);t=.2126*n[0]+.7152*n[1]+.0722*n[2]}return.179<t?"black":"white"}function guid(){function e(){return(65536*(1+Math.random())|0).toString(16).substring(1)}return(e()+e()+"-"+e()+"-4"+e().substr(0,3)+"-"+e()+"-"+e()+e()+e()).toLowerCase()}(()=>{function e(e,t,n,o,r,i,s){e.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/),r.definePalette("sogo-green",{50:"eaf5e9",100:"cbe5c8",200:"aad6a5",300:"88c781",400:"66b86a",500:"56b04c",600:"4da143",700:"388e3c",800:"367d2e",900:"225e1b",A100:"fafafa",A200:"69f0ae",A400:"00e676",A700:"00c853",contrastDefaultColor:"dark",contrastLightColors:["300","400","500","600","700","800","900"]}),r.definePalette("sogo-blue",{50:"f0faf9",100:"e1f5f3",200:"ceebe8",300:"bfe0dd",400:"b2d6d3",500:"a1ccc8",600:"8ebfbb",700:"7db3b0",800:"639997",900:"4d8080",A100:"d4f7fa",A200:"c3f5fa",A400:"53e3f0",A700:"00b0c0",contrastDefaultColor:"light",contrastDarkColors:["50","100","200"]});e=r.extendPalette("grey",{1e3:"baa870"});r.definePalette("sogo-grey",e),r.theme("default").primaryPalette("sogo-blue",{default:"900","hue-1":"400","hue-2":"800","hue-3":"A700"}).accentPalette("sogo-green",{default:"500","hue-1":"A100","hue-2":"300","hue-3":"A700"}).backgroundPalette("sogo-grey"),r.registerStyles(["md-toolbar.md-hue-1:not(.md-menu-toolbar).md-accent,","md-toolbar.md-hue-1:not(.md-menu-toolbar).md-accent md-input-container[md-no-float] .md-input {"," background-color: '{{accent-hue-1}}';"," color: '{{foreground-1}}';","}","md-toolbar.md-hue-1:not(.md-menu-toolbar).md-accent md-icon {"," color: '{{foreground-1}}';"," fill: '{{foreground-1}}';","}"].join("")),r.registerStyles([".md-autocomplete-suggestions.md-3-line li p {"," color: '{{foreground-2}}';","}"].join("")),r.registerStyles([".sg-time-selection-indicator.sg-time-selected,",".sg-time-selection-indicator:hover.sg-time-selected,",".sg-time-selection-indicator.md-focus.sg-time-selected {"," background: '{{primary-500}}';","}",".sg-timepicker-open .sg-timepicker-icon {"," color: '{{primary-900}}';","}",".sg-timepicker-time,",".sg-timepicker-open .sg-timepicker-input-container {"," background: '{{background-hue-1}}';","}",".sg-timepicker-input-mask-opaque {"," box-shadow: 0 0 0 9999px '{{background-hue-1}}';","}"].join("")),r.registerStyles(["[ui-view=calendars] .hours {"," color: '{{primary-700}}';","}",".attendees .busy {"," background-color: '{{background-1000}}';","}",".attendees .event {"," background-color: '{{primary-300}}';","}"].join("")),r.registerStyles([".sg-message-thread {"," background-color: '{{primary-100}}';","}",".sg-message-thread-first {"," background-color: '{{primary-200}}';","}"].join("")),window.DebugEnabled||(t.debugEnabled(!1),n.debugInfoEnabled(!1),i.disableWarnings(),s.errorOnUnhandledRejections(!1),r.generateThemesOnDemand(!0)),o.interceptors.push("AuthInterceptor"),o.interceptors.push("ErrorInterceptor")}function a(t,e,n,o,r){var i=e.defer(),s=angular.element('<iframe class="ng-hide" src="'+t.UserFolderURL+'recover"></iframe>');return s.on("load",function(){var e=o.get("$state");2<r.config.attempt?(angular.element(t).off("beforeunload"),t.location.href=t.ApplicationBaseURL+e.href(e.current),i.reject()):n(function(){var e=o.get("$http");r.config.attempt?r.config.attempt++:r.config.attempt=1,e(r.config).then(function(e){i.resolve(e)},function(e){i.reject(e)}).finally(function(){n(s.remove,1e3)})},2e3)}),document.body.appendChild(s[0]),i.promise}function t(n,o,r,i){return{response:function(e){var t;return e&&/^application\/json/.test(e.config.headers.Accept)&&/^[\n\r\t ]*<!DOCTYPE html/.test(e.data)?n.usesCASAuthentication||n.usesSAML2Authentication?a(n,o,r,i,e):(t=i.get("$state"),angular.element(n).off("beforeunload"),t.href(t.current)?n.location.href=n.ApplicationBaseURL+t.href(t.current):n.location.href=n.ApplicationBaseURL,o.reject()):e}}}function n(n,o,r,i,s){return{responseError:function(e){var t;if(/^application\/json/.test(e.config.headers.Accept)){if((o.usesCASAuthentication||o.usesSAML2Authentication)&&(-1==e.status||500==e.status&&-1!==document.cookie.indexOf("cas-location")))return a(o,r,i,s,e);o.usesSAML2Authentication&&401==e.status&&!o.recovered?(t=s.get("$state"),angular.element(o).off("beforeunload"),o.recovered=!0,o.location.href=o.ApplicationBaseURL+t.href(t.current)):e.data&&e.data.quiet||n.$broadcast("http:Error",e)}return r.reject(e)}}}angular.module("SOGo.CommonLine truncated
|
||||
//# sourceMappingURL=Common.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Common.js","sources":["Common/utils.js","Common/Common.app.js","Common/mdColors.app.js","Common/cssescape.filter.js","Common/decodeUri.filter.js","Common/encodeUri.filter.js","Common/ensureTarget.filter.js","Common/loc.filter.js","Common/range.filter.js","Common/txt2html.filter.js","Common/AclController.js","Common/navController.js","Common/Acl.service.js","Common/Authentication.service.js","Common/Dialog.service.js","Common/Gravatar.service.js","Common/Resource.service.js","Common/sgFocus.service.js","Common/sgHotkeys.service.js","Common/sgRippleClick.service.js","Common/User.service.js","Common/sgAutogrow.directive.js","Common/sgAvatarImage.directive.js","Common/sgBlockToggle.directive.js","Common/sgCheckmark.directive.js","Common/sgColorPicker.directive.js","Common/sgCompile.directive.js","Common/sgDatepickerReadonlyInput.directive.js","Common/sgDraggable.directive.js","Common/sgDroppable.directive.js","Common/sgEnter.directive.js","Common/sgEscape.directive.js","Common/sgFocus.directive.js","Common/sgFolderStylesheet.directive.js","Common/sgLabels.directive.js","Common/sgNoDirtyCheck.directive.js","Common/sgPlaceholder.directive.js","Common/sgQrCode.directive.js","Common/sgResetOnDisabled.directive.js","Common/sgRippleClick.directive.js","Common/sgSearch.directive.js","Common/sgSelectOnly.directive.js","Common/sgSubscribe.directive.js","Common/sgTimepicker.directive.js","Common/sgToggleGrid.directive.js"],"names":["l","i","j","key","arguments","value","args","labels","clabels","length","replace","m","val","parseFloat","isNaN","hexToRgb","hex","result","exec","r","parseInt","g","b","contrast","color","c","Math","pow","guid","S4","random","toString","substring","substr","toLowerCase","configure","$animateProvider","$logProvider","$compileProvider","$httpProvider","$mdThemingProvider","$mdAriaProvider","$qProvider","classNameFilter","definePalette","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastLightColors","contrastDarkColors","greyMap","extendPalette","1000","theme","primaryPalette","default","hue-1","hue-2","hue-3","accentPalette","backgroundPalette","registerStyles","join","window","DebugEnabled","debugEnabled","debugInfoEnabled","disableWarnings","errorOnUnhandledRejections","generateThemesOnDemand","interceptors","push","renewTicket","$window","$q","$timeout","$injector","response","deferred","defer","iframe","angular","element","UserFolderURL","on","$state","get","config","attempt","off","location","href","ApplicationBaseURL","current","reject","$http","then","resolve","finally","remove","document","body","appendChild","promise","AuthInterceptor","test","headers","Accept","data","usesCASAuthentication","usesSAML2Authentication","ErrorInterceptor","$rootScope","responseError","rejection","status","cookie","indexOf","recovered","quiet","$broadcast","module","isPopup","classList","contains","baseURL","resourcesURL","ResourcesURL","activeUser","param","settings","login","UserLogin","identification","UserIdentification","email","UserEmail","language","UserLanguage","folderURL","isSuperUser","IsSuperUser","path","calendar","UserCalendarPath","contacts","UserContactsPath","mail","UserMailPath","preferences","UserPreferencesPath","administration","UserAdministrationPath","help","HelpURL","logoff","UserLogoffPath","minimumSearchLength","isNumber","constant","selection","xs","gt-xs","sm","gt-sm","md","gt-md","lg","gt-lg","xl","print","toastPosition","factory","$inject","_$mdThemingProvider","runBlock","$interpolate","$document","$log","buildCssSelectors","selectors","fgDefault","bgDefault","bdrDefault","fgDefaultHue","bgDefaultHue","fgColor","bgColor","bdrColor","fgHue","bgHue","customSheet","style","head","querySelector","createElement","title","createTextNode","sheet","index","cssRules","deleteRule","addRule","fgInterpolate","bgInterpolate","themeName","paletteName","colorArray","hueName","context","palette","hue","insertRule","addBorderRule","bdrInterpolate","colorValue","forEach","_THEMES","_PALETTES","colors","primary","name","hues","run","cssEscape","CSS","escape","filter","decodeUri","decodeURIComponent","encodeUri","encodeURIComponent","ensureTarget","$sce","tree","find","attr","trustAs","html","n","res","txt2html","linkyFilter","text","String","rel","undefined","AclController","$mdDialog","Dialog","usersWithACL","User","folder","vm","this","selectUser","user","$event","target","parentNode","selectedUid","uid","selectedUser","inactive","$rights","users","userToAdd","searchText","folderClassName","isFunction","getClassName","templateName","getElementById","$isAnonymous","userFilter","$query","$filter","$acl","dry","closeModal","$resetUsersRights","hide","saveModal","$saveUsersRights","alert","confirmChange","confirmation","$confirmRights","showing","message","removeUser","$removeUser","addUser","$addUser","toggleAllRights","$toggleAllRights","hasNoRight","$hasNoRight","showRights","controller","navController",Line truncated
|
||||
{"version":3,"file":"Common.js","sources":["Common/utils.js","Common/Common.app.js","Common/mdColors.app.js","Common/cssescape.filter.js","Common/decodeUri.filter.js","Common/encodeUri.filter.js","Common/ensureTarget.filter.js","Common/loc.filter.js","Common/range.filter.js","Common/txt2html.filter.js","Common/AclController.js","Common/navController.js","Common/Acl.service.js","Common/Authentication.service.js","Common/Dialog.service.js","Common/Gravatar.service.js","Common/Resource.service.js","Common/sgFocus.service.js","Common/sgHotkeys.service.js","Common/sgRippleClick.service.js","Common/User.service.js","Common/sgAutogrow.directive.js","Common/sgAvatarImage.directive.js","Common/sgBlockToggle.directive.js","Common/sgCheckmark.directive.js","Common/sgColorPicker.directive.js","Common/sgCompile.directive.js","Common/sgDatepickerReadonlyInput.directive.js","Common/sgDraggable.directive.js","Common/sgDroppable.directive.js","Common/sgEnter.directive.js","Common/sgEscape.directive.js","Common/sgFocus.directive.js","Common/sgFolderStylesheet.directive.js","Common/sgLabels.directive.js","Common/sgNoDirtyCheck.directive.js","Common/sgPlaceholder.directive.js","Common/sgQrCode.directive.js","Common/sgResetOnDisabled.directive.js","Common/sgRippleClick.directive.js","Common/sgSearch.directive.js","Common/sgSelectOnly.directive.js","Common/sgSubscribe.directive.js","Common/sgTimepicker.directive.js","Common/sgToggleGrid.directive.js"],"names":["l","i","j","key","arguments","value","args","labels","clabels","length","replace","m","val","parseFloat","isNaN","hexToRgb","hex","result","exec","r","parseInt","g","b","contrast","color","c","Math","pow","guid","S4","random","toString","substring","substr","toLowerCase","configure","$animateProvider","$logProvider","$compileProvider","$httpProvider","$mdThemingProvider","$mdAriaProvider","$qProvider","classNameFilter","definePalette","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastLightColors","contrastDarkColors","greyMap","extendPalette","1000","theme","primaryPalette","default","hue-1","hue-2","hue-3","accentPalette","backgroundPalette","registerStyles","join","window","DebugEnabled","debugEnabled","debugInfoEnabled","disableWarnings","errorOnUnhandledRejections","generateThemesOnDemand","interceptors","push","renewTicket","$window","$q","$timeout","$injector","response","deferred","defer","iframe","angular","element","UserFolderURL","on","$state","get","config","attempt","off","location","href","ApplicationBaseURL","current","reject","$http","then","resolve","finally","remove","document","body","appendChild","promise","AuthInterceptor","test","headers","Accept","data","usesCASAuthentication","usesSAML2Authentication","ErrorInterceptor","$rootScope","responseError","rejection","status","cookie","indexOf","recovered","quiet","$broadcast","module","isPopup","classList","contains","baseURL","resourcesURL","ResourcesURL","activeUser","param","settings","login","UserLogin","identification","UserIdentification","email","UserEmail","language","UserLanguage","folderURL","isSuperUser","IsSuperUser","path","calendar","UserCalendarPath","contacts","UserContactsPath","mail","UserMailPath","preferences","UserPreferencesPath","administration","UserAdministrationPath","help","HelpURL","logoff","UserLogoffPath","minimumSearchLength","isNumber","constant","selection","xs","gt-xs","sm","gt-sm","md","gt-md","lg","gt-lg","xl","print","toastPosition","factory","$inject","_$mdThemingProvider","runBlock","$interpolate","$document","$log","buildCssSelectors","selectors","fgDefault","bgDefault","bdrDefault","fgDefaultHue","bgDefaultHue","fgColor","bgColor","bdrColor","fgHue","bgHue","customSheet","style","head","querySelector","createElement","title","createTextNode","sheet","index","cssRules","deleteRule","addRule","fgInterpolate","bgInterpolate","themeName","paletteName","colorArray","hueName","context","palette","hue","insertRule","addBorderRule","bdrInterpolate","colorValue","forEach","_THEMES","_PALETTES","colors","primary","name","hues","run","cssEscape","CSS","escape","filter","decodeUri","decodeURIComponent","encodeUri","encodeURIComponent","ensureTarget","$sce","tree","find","attr","trustAs","html","n","res","txt2html","linkyFilter","text","String","rel","undefined","AclController","$mdDialog","Dialog","usersWithACL","User","folder","vm","this","selectUser","user","$event","target","parentNode","selectedUid","uid","selectedUser","inactive","$rights","users","userToAdd","searchText","folderClassName","isFunction","getClassName","templateName","getElementById","$isAnonymous","userFilter","$query","$filter","$acl","dry","closeModal","$resetUsersRights","hide","saveModal","$saveUsersRights","alert","confirmChange","confirmation","$confirmRights","showing","message","removeUser","$removeUser","addUser","$addUser","toggleAllRights","$toggleAllRights","hasNoRight","$hasNoRight","showRights","controller","navController",Line truncated
|
||||
@@ -149,12 +149,20 @@
|
||||
perr == passwordPolicyConfig.PolicyChangeAfterReset) {
|
||||
response = {
|
||||
passwordexpired: 1,
|
||||
userPolicies: data.additionalInfos.userPolicies,
|
||||
url: redirectUrl(username, domain)
|
||||
};
|
||||
}
|
||||
else if (perr == passwordPolicyConfig.PolicyChangeAfterReset) {
|
||||
response = {
|
||||
passwordexpired: 1,
|
||||
userPolicies: data.additionalInfos.userPolicies,
|
||||
url: redirectUrl(username, domain)
|
||||
};
|
||||
} else if (perr == passwordPolicyConfig.PolicyInsufficientPasswordQuality) {
|
||||
response = {
|
||||
passwordexpired: 2,
|
||||
userPolicies: data.additionalInfos.userPolicies,
|
||||
url: redirectUrl(username, domain)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function e(e,t){e.state("app",{url:"/addressbooks",abstract:!0,views:{addressbooks:{templateUrl:"UIxContactFoldersView",controller:"AddressBooksController",controllerAs:"app"}},resolve:{stateAddressbooks:o}}).state("app.addressbook",{url:"/:addressbookId",views:{addressbook:{templateUrl:"addressbook",controller:"AddressBookController",controllerAs:"addressbook"}},resolve:{stateAddressbook:s}}).state("app.addressbook.new",{url:"/{contactType:(?:card|list)}/new",params:{refs:{array:!0}},views:{card:{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}},resolve:{stateCard:r}}).state("app.addressbook.card",{url:"/:cardId",abstract:!0,views:{card:{template:"<ui-view/>"}},resolve:{stateCard:d},onEnter:n,onExit:i}).state("app.addressbook.card.view",{url:"/view",views:{"card@app.addressbook":{templateUrl:"UIxContactViewTemplate",controller:"CardController",controllerAs:"editor"}}}).state("app.addressbook.card.editor",{url:"/edit",views:{"card@app.addressbook":{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}}}),t.rules.otherwise({state:"app.addressbook",params:{addressbookId:"personal"}})}function o(e){return e.$findAll(window.contactFolders)}function s(e,t,o,s){s=_.find(s.$findAll(),function(e){return e.id==o.addressbookId});return s?(delete s.selectedCard,s.$reload(),s):e.reject("Addressbook "+o.addressbookId+" not found")}function r(e,t,o){var s="v"+e.contactType,o=new o({pid:e.addressbookId,c_component:s,refs:e.refs});return t.selectedCard=!0,o}function d(t,o,s){return s.$futureAddressBookData.then(function(){var e=_.find(s.$cards,function(e){return e.id==o.cardId});if(e)return e.$reload();t.go("app.addressbook")})}function n(e,t){t.selectedCard=e.cardId}function i(e){delete s.selectedCard}function t(e,t,o,s){e.DebugEnabled||s.defaultErrorHandler(function(){}),o.onError({to:"app.**"},function(e){"app"==e.to().name||e.ignored()||(t.error("transition error to "+e.to().name+": "+e.error().detail),s.go("app.addressbook",{addressbookId:"personal"}))})}angular.module("SOGo.ContactsUI",["ngCookies","ui.router","angularFileUpload","sgCkeditor","SOGo.Common","SOGo.PreferencesUI","SOGo.MailerUI"]).config(e).run(t),e.$inject=["$stateProvider","$urlServiceProvider"],o.$inject=["AddressBook"],s.$inject=["$q","$state","$stateParams","AddressBook"],r.$inject=["$stateParams","stateAddressbook","Card"],d.$inject=["$state","$stateParams","stateAddressbook"],n.$inject=["$stateParams","stateAddressbook"],i.$inject=["stateAddressbook"],t.$inject=["$window","$log","$transitions","$state"]}(),function(){"use strict";function e(n,i,o,a,e,c,u,t,h,r,s,d,f,p,m,$){var g,k=this,C=[],b=angular.element(o.document).find("title").attr("sg-default")||"SOGo";function v(e){var t=k.selectedFolder.$selectedCardIndex();return angular.isDefined(t)?(t--,0<k.selectedFolder.$topIndex&&k.selectedFolder.$topIndex--):(t=k.selectedFolder.$cards.length()-1,k.selectedFolder.$topIndex=k.selectedFolder.getLength()),-1<t&&k.selectCard(k.selectedFolder.$cards[t]),e.preventDefault(),t}function w(e){var t=k.selectedFolder.$selectedCardIndex();return angular.isDefined(t)?(t++,k.selectedFolder.$topIndex<k.selectedFolder.$cards.length&&k.selectedFolder.$topIndex++):t=0,t<k.selectedFolder.$cards.length?k.selectCard(k.selectedFolder.$cards[t]):t=-1,e.preventDefault(),t}function y(e){var t;k.selectedFolder.hasSelectedCard()&&0<=(t=v(e))&&toggleCardSelection(e,k.selectedFolder.$cards[t])}function F(e){var t;k.selectedFolder.hasSelectedCard()&&0<=(t=w(e))&&toggleCardSelection(e,k.selectedFolder.$cards[t])}function A(e,t){var o,s,r=k.selectedFolder,d=!1,n=r.$selectedCards(),i=_.filter(n,function(e){return e.$isCard()});i.length!=n.length&&u.show(u.simple().textContent(l("Lists can't be moved or copied.")).position(f.toastPosition).hideDelay(2e3)),i.length&&("copy"==e?(o=r.$copyCards(i,t),s=l("%{0} card(s) copied",i.length)):(o=r.$moveCards(i,t),s=l("%{0} card(s) moved",i.length),n=_.map(i,"id"),d=r.selectedCard&&0<=n.indexOf(r.selectedCard)),o.then(function(){d&&a.go("app.addressbook"),u.show(u.simple().textContent(s).position(f.toastPosition).hideDelay(2e3))}))}g={c_cn:"Name",c_sn:"Lastname",c_givenname:"Firstname",c_mail:"Email",c_screenname:"Screen Name",c_o:"Organization",c_telephonenumber:"Preferred Phone"},this.$onInit=function(){var t;r.selectedFolder=$,this.service=r,this.selectedFolder=$,this.mode={search:!1,multiple:0},this.allSelected=!1,(t=C).push(p.createHotkey({key:l("hotkey_search"),description:l("Search"),callback:angular.bind(k,k.searchMode)})),t.push(p.createHotkey({key:l("key_create_card"),description:l("Create a new address book card"),callback:angular.bind(k,k.newComponent,"card")})),t.push(p.createHotkey({key:l("key_create_list"),description:l("Create a new list"),callback:angular.bind(k,k.newComponent,"list")})),t.push(p.createHotkey({key:"space",description:l("Toggle item"),callback:angular.bind(k,k.toggleCardSelection)})),t.push(p.createHotkey({keLine truncated
|
||||
(()=>{function e(e,t){e.state("app",{url:"/addressbooks",abstract:!0,views:{addressbooks:{templateUrl:"UIxContactFoldersView",controller:"AddressBooksController",controllerAs:"app"}},resolve:{stateAddressbooks:o}}).state("app.addressbook",{url:"/:addressbookId",views:{addressbook:{templateUrl:"addressbook",controller:"AddressBookController",controllerAs:"addressbook"}},resolve:{stateAddressbook:s}}).state("app.addressbook.new",{url:"/{contactType:(?:card|list)}/new",params:{refs:{array:!0}},views:{card:{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}},resolve:{stateCard:r}}).state("app.addressbook.card",{url:"/:cardId",abstract:!0,views:{card:{template:"<ui-view/>"}},resolve:{stateCard:d},onEnter:n,onExit:i}).state("app.addressbook.card.view",{url:"/view",views:{"card@app.addressbook":{templateUrl:"UIxContactViewTemplate",controller:"CardController",controllerAs:"editor"}}}).state("app.addressbook.card.editor",{url:"/edit",views:{"card@app.addressbook":{templateUrl:"UIxContactEditorTemplate",controller:"CardController",controllerAs:"editor"}}}),t.rules.otherwise({state:"app.addressbook",params:{addressbookId:"personal"}})}function o(e){return e.$findAll(window.contactFolders)}function s(e,t,o,s){s=_.find(s.$findAll(),function(e){return e.id==o.addressbookId});return s?(delete s.selectedCard,s.$reload(),s):e.reject("Addressbook "+o.addressbookId+" not found")}function r(e,t,o){var s="v"+e.contactType,o=new o({pid:e.addressbookId,c_component:s,refs:e.refs});return t.selectedCard=!0,o}function d(t,o,s){return s.$futureAddressBookData.then(function(){var e=_.find(s.$cards,function(e){return e.id==o.cardId});if(e)return e.$reload();t.go("app.addressbook")})}function n(e,t){t.selectedCard=e.cardId}function i(e){delete s.selectedCard}function t(e,t,o,s){e.DebugEnabled||s.defaultErrorHandler(function(){}),o.onError({to:"app.**"},function(e){"app"==e.to().name||e.ignored()||(t.error("transition error to "+e.to().name+": "+e.error().detail),s.go("app.addressbook",{addressbookId:"personal"}))})}angular.module("SOGo.ContactsUI",["ngCookies","ui.router","angularFileUpload","sgCkeditor","SOGo.Common","SOGo.PreferencesUI","SOGo.MailerUI"]).config(e).run(t),e.$inject=["$stateProvider","$urlServiceProvider"],o.$inject=["AddressBook"],s.$inject=["$q","$state","$stateParams","AddressBook"],r.$inject=["$stateParams","stateAddressbook","Card"],d.$inject=["$state","$stateParams","stateAddressbook"],n.$inject=["$stateParams","stateAddressbook"],i.$inject=["stateAddressbook"],t.$inject=["$window","$log","$transitions","$state"]})(),(()=>{function e(n,i,o,a,e,c,u,t,h,r,s,d,f,p,m,$){var g,k=this,C=[],b=angular.element(o.document).find("title").attr("sg-default")||"SOGo";function v(e){var t=k.selectedFolder.$selectedCardIndex();return angular.isDefined(t)?(t--,0<k.selectedFolder.$topIndex&&k.selectedFolder.$topIndex--):(t=k.selectedFolder.$cards.length()-1,k.selectedFolder.$topIndex=k.selectedFolder.getLength()),-1<t&&k.selectCard(k.selectedFolder.$cards[t]),e.preventDefault(),t}function w(e){var t=k.selectedFolder.$selectedCardIndex();return angular.isDefined(t)?(t++,k.selectedFolder.$topIndex<k.selectedFolder.$cards.length&&k.selectedFolder.$topIndex++):t=0,t<k.selectedFolder.$cards.length?k.selectCard(k.selectedFolder.$cards[t]):t=-1,e.preventDefault(),t}function y(e){var t;k.selectedFolder.hasSelectedCard()&&0<=(t=v(e))&&toggleCardSelection(e,k.selectedFolder.$cards[t])}function F(e){var t;k.selectedFolder.hasSelectedCard()&&0<=(t=w(e))&&toggleCardSelection(e,k.selectedFolder.$cards[t])}function A(e,t){var o,s,r=k.selectedFolder,d=!1,n=r.$selectedCards(),i=_.filter(n,function(e){return e.$isCard()});i.length!=n.length&&u.show(u.simple().textContent(l("Lists can't be moved or copied.")).position(f.toastPosition).hideDelay(2e3)),i.length&&("copy"==e?(o=r.$copyCards(i,t),s=l("%{0} card(s) copied",i.length)):(o=r.$moveCards(i,t),s=l("%{0} card(s) moved",i.length),n=_.map(i,"id"),d=r.selectedCard&&0<=n.indexOf(r.selectedCard)),o.then(function(){d&&a.go("app.addressbook"),u.show(u.simple().textContent(s).position(f.toastPosition).hideDelay(2e3))}))}g={c_cn:"Name",c_sn:"Lastname",c_givenname:"Firstname",c_mail:"Email",c_screenname:"Screen Name",c_o:"Organization",c_telephonenumber:"Preferred Phone"},this.$onInit=function(){var t;r.selectedFolder=$,this.service=r,this.selectedFolder=$,this.mode={search:!1,multiple:0},this.allSelected=!1,(t=C).push(p.createHotkey({key:l("hotkey_search"),description:l("Search"),callback:angular.bind(k,k.searchMode)})),t.push(p.createHotkey({key:l("key_create_card"),description:l("Create a new address book card"),callback:angular.bind(k,k.newComponent,"card")})),t.push(p.createHotkey({key:l("key_create_list"),description:l("Create a new list"),callback:angular.bind(k,k.newComponent,"list")})),t.push(p.createHotkey({key:"space",description:l("Toggle item"),callback:angular.bind(k,k.toggleCardSelection)})),t.push(p.createHotkey({key:"shift+space",description:l("TogglLine truncated
|
||||
//# sourceMappingURL=Contacts.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Contacts.js","sources":["Contacts/Contacts.app.js","Contacts/AddressBookController.js","Contacts/AddressBooksController.js","Contacts/CardController.js","Contacts/sgAddress.directive.js"],"names":["configure","$stateProvider","$urlServiceProvider","state","url","abstract","views","addressbooks","templateUrl","controller","controllerAs","resolve","stateAddressbooks","addressbook","stateAddressbook","params","refs","array","card","stateCard","stateNewCard","template","onEnter","onEnterCard","onExit","onExitCard","card@app.addressbook","rules","otherwise","addressbookId","AddressBook","$findAll","window","contactFolders","$q","$state","$stateParams","_","find","id","selectedCard","$reload","reject","Card","tag","contactType","pid","c_component","$futureAddressBookData","then","$cards","cardObject","cardId","go","stateMailbox","runBlock","$window","$log","$transitions","DebugEnabled","defaultErrorHandler","onError","to","transition","name","ignored","error","detail","angular","module","config","run","$inject","AddressBookController","$scope","$timeout","$mdDialog","$mdToast","Account","focus","Dialog","sgConstant","sgHotkeys","sortLabels","vm","this","hotkeys","defaultWindowTitle","element","document","attr","_nextCard","$event","index","selectedFolder","$selectedCardIndex","isDefined","$topIndex","length","getLength","selectCard","preventDefault","_previousCard","_addNextCardToSelection","hasSelectedCard","toggleCardSelection","_addPreviousCardToSelection","_selectedCardsOperation","operation","dstId","promise","success","srcFolder","clearCardView","allCards","$selectedCards","cards","filter","$isCard","show","simple","textContent","l","position","toastPosition","hideDelay","$copyCards","$moveCards","ids","map","indexOf","c_cn","c_sn","c_givenname","c_mail","c_screenname","c_o","c_telephonenumber","$onInit","keys","service","mode","search","multiple","allSelected","push","createHotkey","key","description","callback","bind","searchMode","newComponent","forEach","hotkey","confirmDeleteSelectedCards","registerHotkey","$on","deregisterHotkey","$watch","selectedAddressbookName","title","centerIsClose","navController_centerIsClose","selectedIndex","nextSelectedIndex","i","folder","$selectedCard","selected","shiftKey","$selectedCount","idsMap","Math","min","max","stopPropagation","type","unselectCards","selectedCards","acls","objectEraser","size","confirm","ok","$deleteCards","copySelectedCards","moveSelectedCards","selectAll","sort","field","$query","$filter","sortedBy","ascending","asc","cancelSearch","newMessage","recipients","recipientsField","accounts","account","o","onCompleteDeferred","defer","$getMailboxes","mailboxes","$newMessage","message","editable","parent","body","targetEvent","clickOutsideToClose","escapeToClose","onComplete","scope","locals","stateParent","stateAccount","stateMessage","onCompletePromise","newMessageWithRecipient","recipient","fn","newMessageWithSelectedCards","promises","$isList","expandable","ref","email","$shortFormat","$loaded","STATUS","LOADED","$loadCard","$futureHeadersData","loadedCard","all","uniq","newListWithSelectedCards","$$email","futureHeadersData","$$resource","post","$unwrapHeaders","uniqBy","reference","AddressBooksController","$rootScope","$mdMedia","$mdSidenav","FileUploader","Settings","User","activeUser","saving","confirmDelete","$onDestroy","select","editMode","value","close","newAddressbook","prompt","isEditable","isRemote","owner","UserLogin","$id","$add","catch","noop","edit","originalAddressbook","$omit","revertEditing","save","$rename","data","finally","isSubscription","$delete","status","alert","response","statusText","importCards","CardsImportDialogController","filterByExtension","item","isTextFile","test","join","uploader","ApplicationBaseURL","autoUpload","queueLimit","filters","onSuccessItem","headers","msg","hide","imported","onErrorItem","showLinks","LinksDialogController","urls","when","$reloadAll","showProperties","PropertiesDialogController","srcAddressBook","saveProperties","$save","init","cancel","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","$subscribe","isDroppableFolder","dstFolder","isOwned","objectCreator","dragSelectedCards","CardController","sgSettings","currentFolder","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","showRawSource","emailRE","String","hasCertificate","$certificate","crt","certificate","transformCategory","input","isString","removeAttribute","form","attribute","$setDirty","addOrg","$addOrg","removeCertificate","$removeCertificate","addBirthday","birthday","Date","addScreenName","$addScreenName","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","canAddCustomField","customFields","addCustomField","availableKeys","pullAll","deleteCustomField","addAddress","$addAddress","userFilter","excludedCards","minimumSearchLength","dry","excludeLists","options"Line truncated
|
||||
{"version":3,"file":"Contacts.js","sources":["Contacts/Contacts.app.js","Contacts/AddressBookController.js","Contacts/AddressBooksController.js","Contacts/CardController.js","Contacts/sgAddress.directive.js"],"names":["configure","$stateProvider","$urlServiceProvider","state","url","abstract","views","addressbooks","templateUrl","controller","controllerAs","resolve","stateAddressbooks","addressbook","stateAddressbook","params","refs","array","card","stateCard","stateNewCard","template","onEnter","onEnterCard","onExit","onExitCard","card@app.addressbook","rules","otherwise","addressbookId","AddressBook","$findAll","window","contactFolders","$q","$state","$stateParams","_","find","id","selectedCard","$reload","reject","Card","tag","contactType","pid","c_component","$futureAddressBookData","then","$cards","cardObject","cardId","go","stateMailbox","runBlock","$window","$log","$transitions","DebugEnabled","defaultErrorHandler","onError","to","transition","name","ignored","error","detail","angular","module","config","run","$inject","AddressBookController","$scope","$timeout","$mdDialog","$mdToast","Account","focus","Dialog","sgConstant","sgHotkeys","sortLabels","vm","this","hotkeys","defaultWindowTitle","element","document","attr","_nextCard","$event","index","selectedFolder","$selectedCardIndex","isDefined","$topIndex","length","getLength","selectCard","preventDefault","_previousCard","_addNextCardToSelection","hasSelectedCard","toggleCardSelection","_addPreviousCardToSelection","_selectedCardsOperation","operation","dstId","promise","success","srcFolder","clearCardView","allCards","$selectedCards","cards","filter","$isCard","show","simple","textContent","l","position","toastPosition","hideDelay","$copyCards","$moveCards","ids","map","indexOf","c_cn","c_sn","c_givenname","c_mail","c_screenname","c_o","c_telephonenumber","$onInit","keys","service","mode","search","multiple","allSelected","push","createHotkey","key","description","callback","bind","searchMode","newComponent","forEach","hotkey","confirmDeleteSelectedCards","registerHotkey","$on","deregisterHotkey","$watch","selectedAddressbookName","title","centerIsClose","navController_centerIsClose","selectedIndex","nextSelectedIndex","i","folder","$selectedCard","selected","shiftKey","$selectedCount","idsMap","Math","min","max","stopPropagation","type","unselectCards","selectedCards","acls","objectEraser","size","confirm","ok","$deleteCards","copySelectedCards","moveSelectedCards","selectAll","sort","field","$query","$filter","sortedBy","ascending","asc","cancelSearch","newMessage","recipients","recipientsField","accounts","account","o","onCompleteDeferred","defer","$getMailboxes","mailboxes","$newMessage","message","editable","parent","body","targetEvent","clickOutsideToClose","escapeToClose","onComplete","scope","locals","stateParent","stateAccount","stateMessage","onCompletePromise","newMessageWithRecipient","recipient","fn","newMessageWithSelectedCards","promises","$isList","expandable","ref","email","$shortFormat","$loaded","STATUS","LOADED","$loadCard","$futureHeadersData","loadedCard","all","uniq","newListWithSelectedCards","$$email","futureHeadersData","$$resource","post","$unwrapHeaders","uniqBy","reference","AddressBooksController","$rootScope","$mdMedia","$mdSidenav","FileUploader","Settings","User","activeUser","saving","confirmDelete","$onDestroy","select","editMode","value","close","newAddressbook","prompt","isEditable","isRemote","owner","UserLogin","$id","$add","catch","noop","edit","originalAddressbook","$omit","revertEditing","save","$rename","data","finally","isSubscription","$delete","status","alert","response","statusText","importCards","CardsImportDialogController","filterByExtension","item","isTextFile","test","join","uploader","ApplicationBaseURL","autoUpload","queueLimit","filters","onSuccessItem","headers","msg","hide","imported","onErrorItem","showLinks","LinksDialogController","urls","when","$reloadAll","showProperties","PropertiesDialogController","srcAddressBook","saveProperties","$save","init","cancel","share","$acl","$users","usersWithACL","users","subscribeToFolder","addressbookData","$subscribe","isDroppableFolder","dstFolder","isOwned","objectCreator","dragSelectedCards","CardController","sgSettings","currentFolder","allEmailTypes","$EMAIL_TYPES","allTelTypes","$TEL_TYPES","allUrlTypes","$URL_TYPES","allAddressTypes","$ADDRESS_TYPES","categories","userFilterResults","showRawSource","emailRE","String","hasCertificate","$certificate","crt","certificate","transformCategory","input","isString","removeAttribute","form","attribute","$setDirty","addOrg","$addOrg","removeCertificate","$removeCertificate","addBirthday","birthday","Date","addScreenName","$addScreenName","addEmail","$addEmail","addPhone","$addPhone","addUrl","$addUrl","canAddCustomField","customFields","addCustomField","availableKeys","pullAll","deleteCustomField","addAddress","$addAddress","userFilter","excludedCards","minimumSearchLength","dry","excludeLists","options"Line truncated
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function l(e){var t;"function"!=typeof e.then?(this.init(e),this.name&&!this.id?(t=l.$$resource.create("createFolder",this.name),this.$unwrap(t),this.acls={objectEditor:1,objectCreator:1,objectEraser:1}):this.id&&(this.$acl=new l.$$Acl("Contacts/"+this.id))):this.$unwrap(e)}l.$factory=["$q","$timeout","$log","sgSettings","sgAddressBook_PRELOAD","Resource","Card","Acl","Preferences",function(e,t,i,r,s,n,o,a,d){return angular.extend(l,{$q:e,$timeout:t,$log:i,PRELOAD:s,$$resource:new n(r.activeUser("folderURL")+"Contacts",r.activeUser()),$Card:o,$$Acl:a,$Preferences:d,$query:{value:"",sort:"c_cn",asc:1},activeUser:r.activeUser(),$addressbooks:[],$subscriptions:[],$remotes:[],selectedFolder:null,$refreshTimeout:null}),d.settings.Contact.SortingState&&(l.$query.sort=d.settings.Contact.SortingState[0],l.$query.asc=parseInt(d.settings.Contact.SortingState[1])),l}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common","SOGo.PreferencesUI"])}angular.module("SOGo.ContactsUI").constant("sgAddressBook_PRELOAD",{LOOKAHEAD:50,SIZE:100}).factory("AddressBook",l.$factory),l.$filterAll=function(n,o,e,a){var t={search:n};return n?(angular.isUndefined(o)&&(o=[]),angular.extend(t,e),l.$$resource.fetch(null,"allContactSearch",t).then(function(e){for(var t,i=function(e){return void 0===this.sourceID||void 0===e.sourceid?this.id==e.id:this.id==e.id&&this.sourceID==e.sourceid},r=a?_.filter(e.contacts,function(e){return _.isUndefined(_.find(a,_.bind(i,e)))}):e.contacts,s=o.length-1;0<=s;s--)t=o[s],_.isUndefined(_.find(r,_.bind(i,t)))&&o.splice(s,1);return _.forEach(r,function(e,t){_.isUndefined(_.find(o,_.bind(i,e)))&&(e=new l.$Card(_.mapKeys(e,function(e,t){return t.toLowerCase()}),n),o.splice(t,0,e))}),o})):(o=[],l.$q.when(o))},l.$add=function(t){var e=t.isSubscription?this.$subscriptions:this.$addressbooks,i=_.find(e,function(e){return"personal"==t.id||"personal"!=e.id&&1===e.name.localeCompare(t.name)}),i=i?_.indexOf(_.map(e,"id"),i.id):1;e.splice(i,0,t)},l.$findAll=function(e){var i=this;if(e&&e.length)this.$addressbooks.splice(0,this.$addressbooks.length),this.$subscriptions.splice(0,this.$subscriptions.length),this.$remotes.splice(0,this.$remotes.length),angular.forEach(e,function(e,t){e=new l(e);(e.isRemote?i.$remotes:e.isSubscription?i.$subscriptions:i.$addressbooks).push(e)});else if(angular.isArray(e))return l.$$resource.fetch("addressbooksList").then(function(e){return l.$findAll(e.addressbooks)});return _.union(this.$addressbooks,this.$subscriptions,this.$remotes)},l.$subscribe=function(e,t){var i=this;return l.$$resource.userResource(e).fetch(t,"subscribe").then(function(t){var e=new l(t);return _.isUndefined(_.find(i.$subscriptions,function(e){return e.id==t.id}))&&l.$add(e),e})},l.$reloadAll=function(){var i=this;return l.$$resource.fetch("addressbooksList").then(function(e){_.forEach(e.addressbooks,function(t){var e=t.isRemote?i.$remotes:t.owner!=l.activeUser.login?i.$subscriptions:i.$addressbooks,e=_.find(e,function(e){return e.id==t.id});e&&e.init(t)})})},l.prototype.init=function(e,t){var i=this;this.$$cards||(this.$$cards=[]),this.idsMap={},this.$cards=[],angular.forEach(e,function(e,t){"headers"!=t&&"cards"!=t&&(i[t]=e)}),this.isOwned=l.activeUser.isSuperUser||this.owner==l.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=l.activeUser.login},l.prototype.$id=function(){return this.id?l.$q.when(this.id):this.$futureAddressBookData.then(function(e){return e?e.id:l.$q.reject()})},l.prototype.getLength=function(){return this.$cards.length},l.prototype.getItemAtIndex=function(e){var t;return!this.$isLoading&&0<=e&&e<this.$cards.length&&(t=this.$cards[e],this.$lastVisibleIndex=Math.max(0,e-3),this.$loadCard(t))?t:null},l.prototype.$loadCard=function(e){var t,i,r=e.id,s=this.idsMap[r],n=this.$cards.length,r=!1;if(angular.isUndefined(this.ids)&&e.id)r=!0;else if(angular.isDefined(s)&&s<this.$cards.length&&(e.$loaded!=l.$Card.STATUS.NOT_LOADED&&(r=!0),t=Math.min(s+l.PRELOAD.LOOKAHEAD,n-1),this.$cards[t].$loaded!=l.$Card.STATUS.NOT_LOADED?(e=Math.max(s-l.PRELOAD.LOOKAHEAD,0),this.$cards[e].$loaded!=l.$Card.STATUS.LOADED&&(t=s,s=Math.max(s-l.PRELOAD.SIZE,0))):t=Math.min(s+l.PRELOAD.SIZE,n-1),this.$cards[s].$loaded==l.$Card.STATUS.NOT_LOADED||this.$cards[t].$loaded==l.$Card.STATUS.NOT_LOADED)){for(i=[];s<t&&s<n;s++)this.$cards[s].$loaded!=l.$Card.STATUS.NOT_LOADED?t++:(i.push(this.$cards[s].id),this.$cards[s].$loaded=l.$Card.STATUS.LOADING);l.$log.debug("Loading Ids "+i.join(" ")+" ("+i.length+" cards)"),0<i.length&&(e=l.$$resource.post(this.id,"headers",{ids:i}),this.$unwrapHeaders(e))}return r},l.prototype.hasSelectedCard=function(){return angular.isDefined(this.selectedCard)},l.prototype.isSelectedCard=function(e){return this.hasSelectedCard()&&this.selectedCard==e},l.prototype.$selectedCard=function(){var t=this;return _.find(this.$cards,function(e){return e.id==t.selectedCard})},l.prototype.$selectedCardIndex=function(){return _.indexOfLine truncated
|
||||
(()=>{function l(e){var t;"function"!=typeof e.then?(this.init(e),this.name&&!this.id?(t=l.$$resource.create("createFolder",this.name),this.$unwrap(t),this.acls={objectEditor:1,objectCreator:1,objectEraser:1}):this.id&&(this.$acl=new l.$$Acl("Contacts/"+this.id))):this.$unwrap(e)}l.$factory=["$q","$timeout","$log","sgSettings","sgAddressBook_PRELOAD","Resource","Card","Acl","Preferences",function(e,t,i,r,s,n,o,a,d){return angular.extend(l,{$q:e,$timeout:t,$log:i,PRELOAD:s,$$resource:new n(r.activeUser("folderURL")+"Contacts",r.activeUser()),$Card:o,$$Acl:a,$Preferences:d,$query:{value:"",sort:"c_cn",asc:1},activeUser:r.activeUser(),$addressbooks:[],$subscriptions:[],$remotes:[],selectedFolder:null,$refreshTimeout:null}),d.settings.Contact.SortingState&&(l.$query.sort=d.settings.Contact.SortingState[0],l.$query.asc=parseInt(d.settings.Contact.SortingState[1])),l}];try{angular.module("SOGo.ContactsUI")}catch(e){angular.module("SOGo.ContactsUI",["SOGo.Common","SOGo.PreferencesUI"])}angular.module("SOGo.ContactsUI").constant("sgAddressBook_PRELOAD",{LOOKAHEAD:50,SIZE:100}).factory("AddressBook",l.$factory),l.$filterAll=function(n,o,e,a){var t={search:n};return n?(angular.isUndefined(o)&&(o=[]),angular.extend(t,e),l.$$resource.fetch(null,"allContactSearch",t).then(function(e){for(var t,i=function(e){return void 0===this.sourceID||void 0===e.sourceid?this.id==e.id:this.id==e.id&&this.sourceID==e.sourceid},r=a?_.filter(e.contacts,function(e){return _.isUndefined(_.find(a,_.bind(i,e)))}):e.contacts,s=o.length-1;0<=s;s--)t=o[s],_.isUndefined(_.find(r,_.bind(i,t)))&&o.splice(s,1);return _.forEach(r,function(e,t){_.isUndefined(_.find(o,_.bind(i,e)))&&(e=new l.$Card(_.mapKeys(e,function(e,t){return t.toLowerCase()}),n),o.splice(t,0,e))}),o})):(o=[],l.$q.when(o))},l.$add=function(t){var e=t.isSubscription?this.$subscriptions:this.$addressbooks,i=_.find(e,function(e){return"personal"==t.id||"personal"!=e.id&&1===e.name.localeCompare(t.name)}),i=i?_.indexOf(_.map(e,"id"),i.id):1;e.splice(i,0,t)},l.$findAll=function(e){var i=this;if(e&&e.length)this.$addressbooks.splice(0,this.$addressbooks.length),this.$subscriptions.splice(0,this.$subscriptions.length),this.$remotes.splice(0,this.$remotes.length),angular.forEach(e,function(e,t){e=new l(e);(e.isRemote?i.$remotes:e.isSubscription?i.$subscriptions:i.$addressbooks).push(e)});else if(angular.isArray(e))return l.$$resource.fetch("addressbooksList").then(function(e){return l.$findAll(e.addressbooks)});return _.union(this.$addressbooks,this.$subscriptions,this.$remotes)},l.$subscribe=function(e,t){var i=this;return l.$$resource.userResource(e).fetch(t,"subscribe").then(function(t){var e=new l(t);return _.isUndefined(_.find(i.$subscriptions,function(e){return e.id==t.id}))&&l.$add(e),e})},l.$reloadAll=function(){var i=this;return l.$$resource.fetch("addressbooksList").then(function(e){_.forEach(e.addressbooks,function(t){var e=t.isRemote?i.$remotes:t.owner!=l.activeUser.login?i.$subscriptions:i.$addressbooks,e=_.find(e,function(e){return e.id==t.id});e&&e.init(t)})})},l.prototype.init=function(e,t){var i=this;this.$$cards||(this.$$cards=[]),this.idsMap={},this.$cards=[],angular.forEach(e,function(e,t){"headers"!=t&&"cards"!=t&&(i[t]=e)}),this.isOwned=l.activeUser.isSuperUser||this.owner==l.activeUser.login,this.isSubscription=!this.isRemote&&this.owner!=l.activeUser.login},l.prototype.$id=function(){return this.id?l.$q.when(this.id):this.$futureAddressBookData.then(function(e){return e?e.id:l.$q.reject()})},l.prototype.getLength=function(){return this.$cards.length},l.prototype.getItemAtIndex=function(e){var t;return!this.$isLoading&&0<=e&&e<this.$cards.length&&(t=this.$cards[e],this.$lastVisibleIndex=Math.max(0,e-3),this.$loadCard(t))?t:null},l.prototype.$loadCard=function(e){var t,i,r=e.id,s=this.idsMap[r],n=this.$cards.length,r=!1;if(angular.isUndefined(this.ids)&&e.id)r=!0;else if(angular.isDefined(s)&&s<this.$cards.length&&(e.$loaded!=l.$Card.STATUS.NOT_LOADED&&(r=!0),t=Math.min(s+l.PRELOAD.LOOKAHEAD,n-1),this.$cards[t].$loaded!=l.$Card.STATUS.NOT_LOADED?(e=Math.max(s-l.PRELOAD.LOOKAHEAD,0),this.$cards[e].$loaded!=l.$Card.STATUS.LOADED&&(t=s,s=Math.max(s-l.PRELOAD.SIZE,0))):t=Math.min(s+l.PRELOAD.SIZE,n-1),this.$cards[s].$loaded==l.$Card.STATUS.NOT_LOADED||this.$cards[t].$loaded==l.$Card.STATUS.NOT_LOADED)){for(i=[];s<t&&s<n;s++)this.$cards[s].$loaded!=l.$Card.STATUS.NOT_LOADED?t++:(i.push(this.$cards[s].id),this.$cards[s].$loaded=l.$Card.STATUS.LOADING);l.$log.debug("Loading Ids "+i.join(" ")+" ("+i.length+" cards)"),0<i.length&&(e=l.$$resource.post(this.id,"headers",{ids:i}),this.$unwrapHeaders(e))}return r},l.prototype.hasSelectedCard=function(){return angular.isDefined(this.selectedCard)},l.prototype.isSelectedCard=function(e){return this.hasSelectedCard()&&this.selectedCard==e},l.prototype.$selectedCard=function(){var t=this;return _.find(this.$cards,function(e){return e.id==t.selectedCard})},l.prototype.$selectedCardIndex=function(){return _.indexOf(_.map(this.$cards,Line truncated
|
||||
//# sourceMappingURL=Contacts.services.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Contacts.services.js","sources":["Contacts/AddressBook.service.js","Contacts/Card.service.js"],"names":["AddressBook","futureAddressBookData","newAddressBookData","then","this","init","name","id","$$resource","create","$unwrap","acls","objectEditor","objectCreator","objectEraser","$acl","$$Acl","$factory","$q","$timeout","$log","Settings","AddressBook_PRELOAD","Resource","Card","Acl","Preferences","angular","extend","PRELOAD","activeUser","$Card","$Preferences","$query","value","sort","asc","$addressbooks","$subscriptions","$remotes","selectedFolder","$refreshTimeout","settings","Contact","SortingState","parseInt","module","e","constant","LOOKAHEAD","SIZE","factory","$filterAll","search","cards","options","excludedCards","params","isUndefined","fetch","response","card","compareIds","data","undefined","sourceID","sourceid","results","_","filter","contacts","find","bind","index","length","splice","forEach","mapKeys","key","toLowerCase","when","$add","addressbook","list","isSubscription","sibling","o","localeCompare","i","indexOf","map","$findAll","_this","isRemote","push","isArray","addressbooks","union","$subscribe","uid","path","userResource","addressbookData","$reloadAll","group","owner","login","prototype","$$cards","idsMap","$cards","isOwned","isSuperUser","$id","$futureAddressBookData","reject","getLength","getItemAtIndex","$isLoading","$lastVisibleIndex","Math","max","$loadCard","endIndex","ids","cardId","startIndex","loaded","isDefined","$loaded","STATUS","NOT_LOADED","min","LOADED","LOADING","debug","join","futureHeadersData","post","$unwrapHeaders","hasSelectedCard","selectedCard","isSelectedCard","$selectedCard","$selectedCardIndex","$selectedCards","selected","$selectedCount","count","$startRefreshTimeout","cancel","f","refreshViewCheck","defaults","SOGoRefreshViewCheck","$reload","timeInterval","$filter","query","dry","partial","addressbookId","futureData","fields","idFieldIndex","headers","invokeMap","pid","oldIndex","findIndex","removedCards","zipObject","$rename","$save","$delete","promise","d","defer","remove","resolve","$_deleteCards","forEachRight","selectedIndex","$deleteCards","uids","$copyCards","folder","$moveCards","save","$omit","exportCards","selectedOnly","type","filename","selectedCards","download","open","downloadProvisioningProfile","realOwnerId","urls","cardDavURL","ownerPaths","substring","split","resource","$topIndex","reduce","cardObject","isError","isObject","deferred","$futureHeadersData","j","cardHeaders","futureCardData","newCardData","newguid","isNew","$TEL_TYPES","$EMAIL_TYPES","$URL_TYPES","$ADDRESS_TYPES","Card_STATUS","encodeUriFilter","encodeUri","SOGoContactsCategories","$categories","SOGoAlternateAvatar","$alternateAvatar","DELAYED_LOADING","DELAYED_MS","$find","$unwrapCollection","filterCategories","re","RegExp","category","collection","$futureCardData","refs","categories","c_screenname","container","$$fullname","$fullname","$$email","$preferredEmail","$$image","image","avatar","no_404","hasphoto","photoURL","isgroup","c_component","$avatarIcon","$isList","orgs","org","notes","note","email","emails","reference","birthday","isString","dlp","$mdDateLocaleProvider","parseDate","$birthday","formatDate","c_name","empty","$path","$members","members","$isGroup","expandable","member","action","ref","ignoreDuplicate","$shadowData","attribute","export","toHtmlEntities","string","html","replace","s","charCodeAt","names","fn","c_cn","c_givenname","nickname","c_sn","contactinfo","$description","description","title","role","concat","test","c_mail","$shortFormat","fullname","$isCard","condition","SOGoLDAPGroupExpansionEnabled","$addOrg","includes","$addEmail","$addScreenName","screenName","$addPhone","phones","$addUrl","url","$addAddress","postoffice","street","street2","locality","region","country","postalcode","addresses","$addMember","$certificate","hasCertificate","$$certificate","$removeCertificate","immediate","explode","$reset","deep","copy","format","toString","desc"],"mappings":"AAEA,CAAA,WACE,aAOA,SAASA,EAAYC,GAEnB,IAIQC,EAJkC,YAAtC,OAAOD,EAAsBE,MAC/BC,KAAKC,KAAKJ,CAAqB,EAC3BG,KAAKE,MAAQ,CAACF,KAAKG,IAEjBL,EAAqBF,EAAYQ,WAAWC,OAAO,eAAgBL,KAAKE,IAAI,EAChFF,KAAKM,QAAQR,CAAkB,EAC/BE,KAAKO,KAAO,CAACC,aAAgB,EAAGC,cAAiB,EAAGC,aAAgB,CAAC,GAE9DV,KAAKG,KACZH,KAAKW,KAAO,IAAIf,EAAYgB,MAAM,YAAcZ,KAAKG,EAAE,IAKzDH,KAAKM,QAAQT,CAAqB,CAEtC,CAOAD,EAAYiB,SAAW,CAAC,KAAM,WAAY,OAAQ,aAAc,wBAAyB,WAAY,OAAQ,MAAO,cAAe,SAASC,EAAIC,EAAUC,EAAMC,EAAUC,EAAqBC,EAAUC,EAAMC,EAAKC,GAwBlN,OAvBAC,QAAQC,OAAO5B,EAAa,CAC1BkB,GAAIA,EACJC,SAAUA,EACVC,KAAMA,EACNS,QAASP,EACTd,WAAY,IAAIe,EAASF,EAASS,WAAW,WAAW,EAAI,WAAYT,EAASS,WAAW,CAAC,EAC7FC,MAAOP,EACPR,MAAOS,EACPO,aAAcN,EACdO,OAAQ,CAACC,MAAO,GAAIC,KAAM,OAAQC,IAAK,CAAC,EACxCN,WAAYT,EAASS,WAAW,EAChCO,cAAe,GACfC,eAAgB,GAChBC,SAAU,GACVC,eAAgB,KAChBC,gBAAiB,IACnB,CAAC,EAEGf,EAAYgB,SAASC,QAAQC,eAC/B5C,EAAYiC,OAAOE,KAAOT,EAAYgB,SAASC,QAAQC,aAAa,GACpE5C,EAAYiC,OAAOG,IAAMS,SAASnB,EAAYgB,SAASC,QAAQC,aAAa,EAAE,GAGzE5C,CACT,GAMA,IACE2B,QAAQmB,OAAO,iBLine truncated
|
||||
{"version":3,"file":"Contacts.services.js","sources":["Contacts/AddressBook.service.js","Contacts/Card.service.js"],"names":["AddressBook","futureAddressBookData","newAddressBookData","then","this","init","name","id","$$resource","create","$unwrap","acls","objectEditor","objectCreator","objectEraser","$acl","$$Acl","$factory","$q","$timeout","$log","Settings","AddressBook_PRELOAD","Resource","Card","Acl","Preferences","angular","extend","PRELOAD","activeUser","$Card","$Preferences","$query","value","sort","asc","$addressbooks","$subscriptions","$remotes","selectedFolder","$refreshTimeout","settings","Contact","SortingState","parseInt","module","e","constant","LOOKAHEAD","SIZE","factory","$filterAll","search","cards","options","excludedCards","params","isUndefined","fetch","response","card","compareIds","data","undefined","sourceID","sourceid","results","_","filter","contacts","find","bind","index","length","splice","forEach","mapKeys","key","toLowerCase","when","$add","addressbook","list","isSubscription","sibling","o","localeCompare","i","indexOf","map","$findAll","_this","isRemote","push","isArray","addressbooks","union","$subscribe","uid","path","userResource","addressbookData","$reloadAll","group","owner","login","prototype","$$cards","idsMap","$cards","isOwned","isSuperUser","$id","$futureAddressBookData","reject","getLength","getItemAtIndex","$isLoading","$lastVisibleIndex","Math","max","$loadCard","endIndex","ids","cardId","startIndex","loaded","isDefined","$loaded","STATUS","NOT_LOADED","min","LOADED","LOADING","debug","join","futureHeadersData","post","$unwrapHeaders","hasSelectedCard","selectedCard","isSelectedCard","$selectedCard","$selectedCardIndex","$selectedCards","selected","$selectedCount","count","$startRefreshTimeout","cancel","f","refreshViewCheck","defaults","SOGoRefreshViewCheck","$reload","timeInterval","$filter","query","dry","partial","addressbookId","futureData","fields","idFieldIndex","headers","invokeMap","pid","oldIndex","findIndex","removedCards","zipObject","$rename","$save","$delete","promise","d","defer","remove","resolve","$_deleteCards","forEachRight","selectedIndex","$deleteCards","uids","$copyCards","folder","$moveCards","save","$omit","exportCards","selectedOnly","type","filename","selectedCards","download","open","downloadProvisioningProfile","realOwnerId","urls","cardDavURL","ownerPaths","substring","split","resource","$topIndex","reduce","cardObject","isError","isObject","deferred","$futureHeadersData","j","cardHeaders","futureCardData","newCardData","newguid","isNew","$TEL_TYPES","$EMAIL_TYPES","$URL_TYPES","$ADDRESS_TYPES","Card_STATUS","encodeUriFilter","encodeUri","SOGoContactsCategories","$categories","SOGoAlternateAvatar","$alternateAvatar","DELAYED_LOADING","DELAYED_MS","$find","$unwrapCollection","filterCategories","re","RegExp","category","collection","$futureCardData","refs","categories","c_screenname","container","$$fullname","$fullname","$$email","$preferredEmail","$$image","image","avatar","no_404","hasphoto","photoURL","isgroup","c_component","$avatarIcon","$isList","orgs","org","notes","note","email","emails","reference","birthday","isString","dlp","$mdDateLocaleProvider","parseDate","$birthday","formatDate","c_name","empty","$path","$members","members","$isGroup","expandable","member","action","ref","ignoreDuplicate","$shadowData","attribute","export","toHtmlEntities","string","html","replace","s","charCodeAt","names","fn","c_cn","c_givenname","nickname","c_sn","contactinfo","$description","description","title","role","concat","test","c_mail","$shortFormat","fullname","$isCard","condition","SOGoLDAPGroupExpansionEnabled","$addOrg","includes","$addEmail","$addScreenName","screenName","$addPhone","phones","$addUrl","url","$addAddress","postoffice","street","street2","locality","region","country","postalcode","addresses","$addMember","$certificate","hasCertificate","$$certificate","$removeCertificate","immediate","explode","$reset","deep","copy","format","toString","desc"],"mappings":"CAEA,KAQE,SAASA,EAAYC,GAEnB,IAIQC,EAJkC,YAAtC,OAAOD,EAAsBE,MAC/BC,KAAKC,KAAKJ,CAAqB,EAC3BG,KAAKE,MAAQ,CAACF,KAAKG,IAEjBL,EAAqBF,EAAYQ,WAAWC,OAAO,eAAgBL,KAAKE,IAAI,EAChFF,KAAKM,QAAQR,CAAkB,EAC/BE,KAAKO,KAAO,CAACC,aAAgB,EAAGC,cAAiB,EAAGC,aAAgB,CAAC,GAE9DV,KAAKG,KACZH,KAAKW,KAAO,IAAIf,EAAYgB,MAAM,YAAcZ,KAAKG,EAAE,IAKzDH,KAAKM,QAAQT,CAAqB,CAEtC,CAOAD,EAAYiB,SAAW,CAAC,KAAM,WAAY,OAAQ,aAAc,wBAAyB,WAAY,OAAQ,MAAO,cAAe,SAASC,EAAIC,EAAUC,EAAMC,EAAUC,EAAqBC,EAAUC,EAAMC,EAAKC,GAwBlN,OAvBAC,QAAQC,OAAO5B,EAAa,CAC1BkB,GAAIA,EACJC,SAAUA,EACVC,KAAMA,EACNS,QAASP,EACTd,WAAY,IAAIe,EAASF,EAASS,WAAW,WAAW,EAAI,WAAYT,EAASS,WAAW,CAAC,EAC7FC,MAAOP,EACPR,MAAOS,EACPO,aAAcN,EACdO,OAAQ,CAACC,MAAO,GAAIC,KAAM,OAAQC,IAAK,CAAC,EACxCN,WAAYT,EAASS,WAAW,EAChCO,cAAe,GACfC,eAAgB,GAChBC,SAAU,GACVC,eAAgB,KAChBC,gBAAiB,IACnB,CAAC,EAEGf,EAAYgB,SAASC,QAAQC,eAC/B5C,EAAYiC,OAAOE,KAAOT,EAAYgB,SAASC,QAAQC,aAAa,GACpE5C,EAAYiC,OAAOG,IAAMS,SAASnB,EAAYgB,SAASC,QAAQC,aAAa,EAAE,GAGzE5C,CACT,GAMA,IACE2B,QAAQmB,OAAO,iBAAiB,CAIlCLine truncated
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function e(e,t){e.state("mail",{url:"/Mail",abstract:!0,views:{message:{template:"<ui-view/>"}},resolve:{stateAccounts:o}}).state("mail.account",{url:"/:accountId",abstract:!0,template:'<ui-view id="account"/>',resolve:{stateAccount:n}}).state("mail.account.mailbox",{url:"/:mailboxId",abstract:!0,template:'<ui-view id="mailbox"/>',resolve:{stateMailbox:r}}).state("mail.account.newMessage",{url:"/new",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}},resolve:{stateMessage:a}}).state("mail.account.mailbox.message",{url:"/:messageId",views:{"message@":{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMessage:l}}).state("mail.account.mailbox.messageRaw",{url:"/:messageId/viewRaw",views:{"message@":{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMessage:i}}).state("mail.account.mailbox.message.edit",{url:"/edit",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}},resolve:{stateContent:s}}).state("mail.account.mailbox.message.action",{url:"/{actionName:(?:compose|reply|replyall|forward)}",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}}}),t.otherwise("/Mail/0/new")}function o(e,t,o){var n=[];return e&&e.opener&&e.opener.mailAccounts?(e=o.$findAll(e.opener.mailAccounts),t.when(e)):o.$findAll().then(function(e){return angular.forEach(e,function(t,e){var o=t.$getMailboxes();n.push(0===e?o.then(function(e){return t}):t)}),t.all(n)})}function n(e,t,o,n,r){var a=null;return(a=(a=t.opener&&"$mailboxController"in t.opener&&"account"in t.opener.$mailboxController&&t.opener.$mailboxController.account.id==o.accountId?new n(t.opener.$mailboxController.account.$omit(!0)):a)||_.find(r,function(e){return e.id==o.accountId}))?e.when(a):e.reject("Account "+o.accountId+" doesn't exist")}function r(e,t,o,n,r,a,l){var i,s=null,c=a(n.mailboxId);return t.opener&&"$mailboxController"in t.opener&&"selectedFolder"in t.opener.$mailboxController&&"account"in t.opener.$mailboxController&&t.opener.$mailboxController.account.id==r.id&&t.opener.$mailboxController.selectedFolder.path==c&&(s=new l(r,t.opener.$mailboxController.selectedFolder.$omit(!0))),i=function(e){var t=_.find(e,function(e){return e.path==c});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=i(e.children))}),t},(s?e.when(s):r.$getMailboxes().then(function(e){e=i(e);return new l(r,e)})).then(function(e){return e.$topIndex=0,e.selectFolder(),e},function(){return e.reject("Mailbox "+c+" doesn't exist")})}function a(e,t){var o,e=e.search();return e&&(o=_.find(_.keys(e),function(e){return/^mailto:/i.test(e)})),t.$newMessage({mailto:o})}function l(e,t,o,n,r,a){var l;return window&&window.opener&&window.opener.$messageController&&window.opener.$messageController.message.uid==parseInt(o.messageId)?(l=new a(r.$account.id,r,window.opener.$messageController.message.$omit({privateAttributes:!0})),t.when(l)):(t={uid:o.messageId.toString()},(l=new a(r.$account.id,r,t)).$reload())}function i(e,t,o,n){t={uid:t.messageId.toString()};return new n(o.$account.id,o,t).$reload({useCache:!1,raw:!0})}function s(e){return e.$editableContent()}function t(l,e,i){e.$on("$stateChangeError",function(e,t,o,n,r,a){i.error(a),l.close()}),e.$on("$routeChangeError",function(e,t,o,n){i.error(e,t,o,n)})}function c(e,t,o,n,r,a){var l=o.defer();n.show({hasBackdrop:!1,disableParentScroll:!1,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",onComplete:function(e,t){return l.resolve(t)},locals:{stateParent:t,stateAccount:r,stateMessage:a,onCompletePromise:function(){return l.promise}}}).finally(function(){e.close()})}angular.module("SOGo.MailerUI",["ngCookies","ui.router","sgCkeditor","angularFileUpload","SOGo.Common","SOGo.ContactsUI","SOGo.SchedulerUI","ngAnimate","SOGo.PreferencesUI"]).config(e).run(t).controller("MessageEditorControllerPopup",c),e.$inject=["$stateProvider","$urlRouterProvider"],o.$inject=["$window","$q","Account"],n.$inject=["$q","$window","$stateParams","Account","stateAccounts"],r.$inject=["$q","$window","$state","$stateParams","stateAccount","decodeUriFilter","Mailbox"],a.$inject=["$urlService","stateAccount"],l.$inject=["encodeUriFilter","$q","$stateParams","$state","stateMailbox","Message"],i.$inject=["encodeUriFilter","$stateParams","stateMailbox","Message"],s.$inject=["stateMessage"],t.$inject=["$window","$rootScope","$log"],c.$inject=["$window","$scope","$q","$mdDialog","stateAccount","stateMessage"]}();
|
||||
(()=>{function e(e,t){e.state("mail",{url:"/Mail",abstract:!0,views:{message:{template:"<ui-view/>"}},resolve:{stateAccounts:o}}).state("mail.account",{url:"/:accountId",abstract:!0,template:'<ui-view id="account"/>',resolve:{stateAccount:n}}).state("mail.account.mailbox",{url:"/:mailboxId",abstract:!0,template:'<ui-view id="mailbox"/>',resolve:{stateMailbox:r}}).state("mail.account.newMessage",{url:"/new",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}},resolve:{stateMessage:a}}).state("mail.account.mailbox.message",{url:"/:messageId",views:{"message@":{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMessage:l}}).state("mail.account.mailbox.messageRaw",{url:"/:messageId/viewRaw",views:{"message@":{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMessage:i}}).state("mail.account.mailbox.message.edit",{url:"/edit",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}},resolve:{stateContent:s}}).state("mail.account.mailbox.message.action",{url:"/{actionName:(?:compose|reply|replyall|forward)}",views:{"message@":{template:"<ui-view/>",controller:"MessageEditorControllerPopup"}}}),t.otherwise("/Mail/0/new")}function o(e,t,o){var n=[];return e&&e.opener&&e.opener.mailAccounts?(e=o.$findAll(e.opener.mailAccounts),t.when(e)):o.$findAll().then(function(e){return angular.forEach(e,function(t,e){var o=t.$getMailboxes();n.push(0===e?o.then(function(e){return t}):t)}),t.all(n)})}function n(e,t,o,n,r){var a=null;return(a=(a=t.opener&&"$mailboxController"in t.opener&&"account"in t.opener.$mailboxController&&t.opener.$mailboxController.account.id==o.accountId?new n(t.opener.$mailboxController.account.$omit(!0)):a)||_.find(r,function(e){return e.id==o.accountId}))?e.when(a):e.reject("Account "+o.accountId+" doesn't exist")}function r(e,t,o,n,r,a,l){var i,s=null,c=a(n.mailboxId);return t.opener&&"$mailboxController"in t.opener&&"selectedFolder"in t.opener.$mailboxController&&"account"in t.opener.$mailboxController&&t.opener.$mailboxController.account.id==r.id&&t.opener.$mailboxController.selectedFolder.path==c&&(s=new l(r,t.opener.$mailboxController.selectedFolder.$omit(!0))),i=function(e){var t=_.find(e,function(e){return e.path==c});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=i(e.children))}),t},(s?e.when(s):r.$getMailboxes().then(function(e){e=i(e);return new l(r,e)})).then(function(e){return e.$topIndex=0,e.selectFolder(),e},function(){return e.reject("Mailbox "+c+" doesn't exist")})}function a(e,t){var o,e=e.search();return e&&(o=_.find(_.keys(e),function(e){return/^mailto:/i.test(e)})),t.$newMessage({mailto:o})}function l(e,t,o,n,r,a){var l;return window&&window.opener&&window.opener.$messageController&&window.opener.$messageController.message.uid==parseInt(o.messageId)?(l=new a(r.$account.id,r,window.opener.$messageController.message.$omit({privateAttributes:!0})),t.when(l)):(t={uid:o.messageId.toString()},(l=new a(r.$account.id,r,t)).$reload())}function i(e,t,o,n){t={uid:t.messageId.toString()};return new n(o.$account.id,o,t).$reload({useCache:!1,raw:!0})}function s(e){return e.$editableContent()}function t(l,e,i){e.$on("$stateChangeError",function(e,t,o,n,r,a){i.error(a),l.close()}),e.$on("$routeChangeError",function(e,t,o,n){i.error(e,t,o,n)})}function c(e,t,o,n,r,a){var l=o.defer();n.show({hasBackdrop:!1,disableParentScroll:!1,clickOutsideToClose:!1,escapeToClose:!1,templateUrl:"UIxMailEditor",controller:"MessageEditorController",controllerAs:"editor",onComplete:function(e,t){return l.resolve(t)},locals:{stateParent:t,stateAccount:r,stateMessage:a,onCompletePromise:function(){return l.promise}}}).finally(function(){e.close()})}angular.module("SOGo.MailerUI",["ngCookies","ui.router","sgCkeditor","angularFileUpload","SOGo.Common","SOGo.ContactsUI","SOGo.SchedulerUI","ngAnimate","SOGo.PreferencesUI"]).config(e).run(t).controller("MessageEditorControllerPopup",c),e.$inject=["$stateProvider","$urlRouterProvider"],o.$inject=["$window","$q","Account"],n.$inject=["$q","$window","$stateParams","Account","stateAccounts"],r.$inject=["$q","$window","$state","$stateParams","stateAccount","decodeUriFilter","Mailbox"],a.$inject=["$urlService","stateAccount"],l.$inject=["encodeUriFilter","$q","$stateParams","$state","stateMailbox","Message"],i.$inject=["encodeUriFilter","$stateParams","stateMailbox","Message"],s.$inject=["stateMessage"],t.$inject=["$window","$rootScope","$log"],c.$inject=["$window","$scope","$q","$mdDialog","stateAccount","stateMessage"]})();
|
||||
//# sourceMappingURL=Mailer.app.popup.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Mailer.app.popup.js","sources":["Mailer/Mailer.popup.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","abstract","views","message","template","resolve","stateAccounts","stateAccount","stateMailbox","message@","controller","stateMessage","stateNewMessage","templateUrl","controllerAs","stateMessageRaw","stateContent","otherwise","$window","$q","Account","promises","opener","mailAccounts","accounts","$findAll","when","then","angular","forEach","account","i","mailboxes","$getMailboxes","push","objects","all","$stateParams","$mailboxController","id","accountId","$omit","_","find","reject","$state","decodeUriFilter","Mailbox","_find","mailbox","mailboxId","selectedFolder","path","o","children","length","data","$topIndex","selectFolder","$urlService","mailto","params","search","keys","k","test","$newMessage","encodeUriFilter","Message","window","$messageController","uid","parseInt","messageId","$account","privateAttributes","toString","$reload","useCache","raw","$editableContent","runBlock","$rootScope","$log","$on","event","toState","toParams","fromState","fromParams","error","close","current","previous","rejection","MessageEditorControllerPopup","$scope","$mdDialog","onCompleteDeferred","defer","show","hasBackdrop","disableParentScroll","clickOutsideToClose","escapeToClose","onComplete","scope","element","locals","stateParent","onCompletePromise","promise","finally","module","config","run","$inject"],"mappings":"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 truncated
|
||||
{"version":3,"file":"Mailer.app.popup.js","sources":["Mailer/Mailer.popup.js"],"names":["configure","$stateProvider","$urlRouterProvider","state","url","abstract","views","message","template","resolve","stateAccounts","stateAccount","stateMailbox","message@","controller","stateMessage","stateNewMessage","templateUrl","controllerAs","stateMessageRaw","stateContent","otherwise","$window","$q","Account","promises","opener","mailAccounts","accounts","$findAll","when","then","angular","forEach","account","i","mailboxes","$getMailboxes","push","objects","all","$stateParams","$mailboxController","id","accountId","$omit","_","find","reject","$state","decodeUriFilter","Mailbox","_find","mailbox","mailboxId","selectedFolder","path","o","children","length","data","$topIndex","selectFolder","$urlService","mailto","params","search","keys","k","test","$newMessage","encodeUriFilter","Message","window","$messageController","uid","parseInt","messageId","$account","privateAttributes","toString","$reload","useCache","raw","$editableContent","runBlock","$rootScope","$log","$on","event","toState","toParams","fromState","fromParams","error","close","current","previous","rejection","MessageEditorControllerPopup","$scope","$mdDialog","onCompleteDeferred","defer","show","hasBackdrop","disableParentScroll","clickOutsideToClose","escapeToClose","onComplete","scope","element","locals","stateParent","onCompletePromise","promise","finally","module","config","run","$inject"],"mappings":"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 truncated
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function e(e,t){if(e.state("mail",{url:"/Mail",views:{mailboxes:{templateUrl:"UIxMailMainFrame",controller:"MailboxesController",controllerAs:"app"}},resolve:{stateAccounts:a}}).state("mail.account",{url:"/:accountId",abstract:!0,views:{mailbox:{template:"<ui-view/>"}},resolve:{stateAccount:o}}).state("mail.account.virtualMailbox",{url:"/virtual",views:{"mailbox@mail":{templateUrl:"UIxMailFolderTemplate",controller:"MailboxController",controllerAs:"mailbox"}},resolve:{stateMailbox:l}}).state("mail.account.virtualMailbox.message",{url:"/:mailboxId/:messageId",views:{message:{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMailbox:n,stateMessages:i,stateMessage:c},onEnter:u,onExit:d}).state("mail.account.inbox",{url:"/inbox",onEnter:r}).state("mail.account.mailbox",{url:"/:mailboxId",views:{"mailbox@mail":{templateUrl:"UIxMailFolderTemplate",controller:"MailboxController",controllerAs:"mailbox"}},resolve:{stateMailbox:s,stateMessages:i}}).state("mail.account.mailbox.message",{url:"/:messageId",views:{message:{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},params:{reload:{value:!1}},onEnter:u,onExit:d,resolve:{stateMessage:c}}),t.rules.otherwise("/Mail/0/inbox"),navigator&&navigator.registerProtocolHandler){e=window.location.origin+window.ApplicationBaseURL+"UIxMailPopupView#!/Mail/0/new?%s";try{navigator.registerProtocolHandler("mailto",e,"SOGo")}catch(e){}}}function a(e,t,a){var a=a.$findAll(e.mailAccounts),o=[];return angular.forEach(a,function(t,e){var a=t.$getMailboxes();o.push(0===e?a.then(function(e){return t}):t)}),t.all(o)}function o(t,e){return _.find(e,function(e){return e.id==t.accountId})}function s(e,t,a,o,r){var i,l=o(o(t.mailboxId)),n=function(e){var t=_.find(e,function(e){return e.path==l});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=n(e.children))}),t};return r.selectedFolder&&!r.$virtualMode&&(r.selectedFolder.$isLoading=!0),a.$getMailboxes().then(function(e){if(i=n(e))return i.$topIndex=0,i.selectFolder(),i;$state.go("mail.account",{accountId:s.$account.id})})}function r(t,a,o){return t.injector().getAsync("stateAccount").then(function(e){return 0<e.$mailboxes.length?t.router.stateService.target("mail.account.mailbox",{accountId:e.id,mailboxId:a(e.$mailboxes[0].path)}):(o.selectedFolder=!1,t.router.stateService.target("mail"))})}function i(e,t,a,o){return a.$virtualMode?[]:o?(o.$unselectMessages(),o.$filter().catch(function(){return e.reject("Mailbox not found")})):e.reject("Mailbox doesn't exist")}function l(e,t){return t.$virtualMode?t.selectedFolder:e.reject("No virtual mailbox defined")}function n(e,t,a,o){var r=a(a(o.mailboxId));return t.$virtualMode?(t.selectedFolder.resetSelectedMessage(),_.find(t.selectedFolder.$mailboxes,function(e){return e.path==r})):e.reject("No virtual mailbox defined for message")}function c(e,t,a,o,r,i){var l=_.find(r.$messages,function(e){return e.uid==parseInt(a.messageId)});if(l&&l.$reload)return l.$reload({useCache:!a.reload,nocache:a.reload});o.go("mail.account.mailbox",{accountId:r.$account.id,mailboxId:t(r.path)})}function u(e,t){t.$selectedMessage=parseInt(e.messageId)}function d(e){delete e.$selectedMessage}function t(e,t,a,o,r){e.DebugEnabled||o.defaultErrorHandler(function(){}),t.onError({to:"mail.**"},function(e){("mail"!=e.to().name&&!e.ignored()&&e.error().message.indexOf("superseded")<0||"mail.account.virtualMailbox"===e.to().name||"mail.account.virtualMailbox.message"===e.to().name)&&(a.error("transition error to "+e.to().name+": "+e.error().detail),r.selectedFolder=!1,o.go("mail"))})}angular.module("SOGo.MailerUI",["ngCookies","ui.router","sgCkeditor","angularFileUpload","SOGo.Common","SOGo.ContactsUI","SOGo.SchedulerUI","ngAnimate","SOGo.PreferencesUI"]).config(e).run(t),e.$inject=["$stateProvider","$urlServiceProvider"],a.$inject=["$window","$q","Account"],o.$inject=["$stateParams","stateAccounts"],s.$inject=["$q","$stateParams","stateAccount","decodeUriFilter","Mailbox"],r.$inject=["$transition$","encodeUriFilter","Mailbox"],i.$inject=["$q","$state","Mailbox","stateMailbox"],l.$inject=["$q","Mailbox"],n.$inject=["$q","Mailbox","decodeUriFilter","$stateParams"],c.$inject=["Mailbox","encodeUriFilter","$stateParams","$state","stateMailbox","stateMessages"],u.$inject=["$stateParams","stateMailbox"],d.$inject=["stateMailbox"],t.$inject=["$window","$transitions","$log","$state","Mailbox"]}();
|
||||
(()=>{function e(e,t){if(e.state("mail",{url:"/Mail",views:{mailboxes:{templateUrl:"UIxMailMainFrame",controller:"MailboxesController",controllerAs:"app"}},resolve:{stateAccounts:a}}).state("mail.account",{url:"/:accountId",abstract:!0,views:{mailbox:{template:"<ui-view/>"}},resolve:{stateAccount:o}}).state("mail.account.virtualMailbox",{url:"/virtual",views:{"mailbox@mail":{templateUrl:"UIxMailFolderTemplate",controller:"MailboxController",controllerAs:"mailbox"}},resolve:{stateMailbox:l}}).state("mail.account.virtualMailbox.message",{url:"/:mailboxId/:messageId",views:{message:{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},resolve:{stateMailbox:n,stateMessages:i,stateMessage:c},onEnter:u,onExit:d}).state("mail.account.inbox",{url:"/inbox",onEnter:r}).state("mail.account.mailbox",{url:"/:mailboxId",views:{"mailbox@mail":{templateUrl:"UIxMailFolderTemplate",controller:"MailboxController",controllerAs:"mailbox"}},resolve:{stateMailbox:s,stateMessages:i}}).state("mail.account.mailbox.message",{url:"/:messageId",views:{message:{templateUrl:"UIxMailViewTemplate",controller:"MessageController",controllerAs:"viewer"}},params:{reload:{value:!1}},onEnter:u,onExit:d,resolve:{stateMessage:c}}),t.rules.otherwise("/Mail/0/inbox"),navigator&&navigator.registerProtocolHandler){e=window.location.origin+window.ApplicationBaseURL+"UIxMailPopupView#!/Mail/0/new?%s";try{navigator.registerProtocolHandler("mailto",e,"SOGo")}catch(e){}}}function a(e,t,a){var a=a.$findAll(e.mailAccounts),o=[];return angular.forEach(a,function(t,e){var a=t.$getMailboxes();o.push(0===e?a.then(function(e){return t}):t)}),t.all(o)}function o(t,e){return _.find(e,function(e){return e.id==t.accountId})}function s(e,t,a,o,r){var i,l=o(o(t.mailboxId)),n=function(e){var t=_.find(e,function(e){return e.path==l});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=n(e.children))}),t};return r.selectedFolder&&!r.$virtualMode&&(r.selectedFolder.$isLoading=!0),a.$getMailboxes().then(function(e){if(i=n(e))return i.$topIndex=0,i.selectFolder(),i;$state.go("mail.account",{accountId:s.$account.id})})}function r(t,a,o){return t.injector().getAsync("stateAccount").then(function(e){return 0<e.$mailboxes.length?t.router.stateService.target("mail.account.mailbox",{accountId:e.id,mailboxId:a(e.$mailboxes[0].path)}):(o.selectedFolder=!1,t.router.stateService.target("mail"))})}function i(e,t,a,o){return a.$virtualMode?[]:o?(o.$unselectMessages(),o.$filter().catch(function(){return e.reject("Mailbox not found")})):e.reject("Mailbox doesn't exist")}function l(e,t){return t.$virtualMode?t.selectedFolder:e.reject("No virtual mailbox defined")}function n(e,t,a,o){var r=a(a(o.mailboxId));return t.$virtualMode?(t.selectedFolder.resetSelectedMessage(),_.find(t.selectedFolder.$mailboxes,function(e){return e.path==r})):e.reject("No virtual mailbox defined for message")}function c(e,t,a,o,r,i){var l=_.find(r.$messages,function(e){return e.uid==parseInt(a.messageId)});if(l&&l.$reload)return l.$reload({useCache:!a.reload,nocache:a.reload});o.go("mail.account.mailbox",{accountId:r.$account.id,mailboxId:t(r.path)})}function u(e,t){t.$selectedMessage=parseInt(e.messageId)}function d(e){delete e.$selectedMessage}function t(e,t,a,o,r){e.DebugEnabled||o.defaultErrorHandler(function(){}),t.onError({to:"mail.**"},function(e){("mail"!=e.to().name&&!e.ignored()&&e.error().message.indexOf("superseded")<0||"mail.account.virtualMailbox"===e.to().name||"mail.account.virtualMailbox.message"===e.to().name)&&(a.error("transition error to "+e.to().name+": "+e.error().detail),r.selectedFolder=!1,o.go("mail"))})}angular.module("SOGo.MailerUI",["ngCookies","ui.router","sgCkeditor","angularFileUpload","SOGo.Common","SOGo.ContactsUI","SOGo.SchedulerUI","ngAnimate","SOGo.PreferencesUI"]).config(e).run(t),e.$inject=["$stateProvider","$urlServiceProvider"],a.$inject=["$window","$q","Account"],o.$inject=["$stateParams","stateAccounts"],s.$inject=["$q","$stateParams","stateAccount","decodeUriFilter","Mailbox"],r.$inject=["$transition$","encodeUriFilter","Mailbox"],i.$inject=["$q","$state","Mailbox","stateMailbox"],l.$inject=["$q","Mailbox"],n.$inject=["$q","Mailbox","decodeUriFilter","$stateParams"],c.$inject=["Mailbox","encodeUriFilter","$stateParams","$state","stateMailbox","stateMessages"],u.$inject=["$stateParams","stateMailbox"],d.$inject=["stateMailbox"],t.$inject=["$window","$transitions","$log","$state","Mailbox"]})();
|
||||
//# sourceMappingURL=Mailer.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Mailer.js","sources":["Mailer/Mailer.app.js"],"names":["configure","$stateProvider","$urlServiceProvider","state","url","views","mailboxes","templateUrl","controller","controllerAs","resolve","stateAccounts","abstract","mailbox","template","stateAccount","mailbox@mail","stateMailbox","stateVirtualMailbox","message","stateVirtualMailboxOfMessage","stateMessages","stateMessage","onEnter","onEnterMessage","onExit","onExitMessage","onEnterInbox","params","reload","value","rules","otherwise","navigator","registerProtocolHandler","mailtoURL","window","location","origin","ApplicationBaseURL","e","$window","$q","Account","accounts","$findAll","mailAccounts","promises","angular","forEach","account","i","$getMailboxes","push","then","objects","all","$stateParams","_","find","id","accountId","decodeUriFilter","Mailbox","mailboxId","_find","o","path","children","length","selectedFolder","$virtualMode","$isLoading","$topIndex","selectFolder","$state","go","$account","$transition","encodeUriFilter","injector","getAsync","$mailboxes","router","stateService","target","$unselectMessages","$filter","catch","reject","resetSelectedMessage","mailboxObject","$messages","messageObject","uid","parseInt","messageId","$reload","useCache","nocache","$selectedMessage","runBlock","$transitions","$log","DebugEnabled","defaultErrorHandler","onError","to","transition","name","ignored","error","indexOf","detail","module","config","run","$inject"],"mappings":"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 truncated
|
||||
{"version":3,"file":"Mailer.js","sources":["Mailer/Mailer.app.js"],"names":["configure","$stateProvider","$urlServiceProvider","state","url","views","mailboxes","templateUrl","controller","controllerAs","resolve","stateAccounts","abstract","mailbox","template","stateAccount","mailbox@mail","stateMailbox","stateVirtualMailbox","message","stateVirtualMailboxOfMessage","stateMessages","stateMessage","onEnter","onEnterMessage","onExit","onExitMessage","onEnterInbox","params","reload","value","rules","otherwise","navigator","registerProtocolHandler","mailtoURL","window","location","origin","ApplicationBaseURL","e","$window","$q","Account","accounts","$findAll","mailAccounts","promises","angular","forEach","account","i","$getMailboxes","push","then","objects","all","$stateParams","_","find","id","accountId","decodeUriFilter","Mailbox","mailboxId","_find","o","path","children","length","selectedFolder","$virtualMode","$isLoading","$topIndex","selectFolder","$state","go","$account","$transition","encodeUriFilter","injector","getAsync","$mailboxes","router","stateService","target","$unselectMessages","$filter","catch","reject","resetSelectedMessage","mailboxObject","$messages","messageObject","uid","parseInt","messageId","$reload","useCache","nocache","$selectedMessage","runBlock","$transitions","$log","DebugEnabled","defaultErrorHandler","onError","to","transition","name","ignored","error","indexOf","detail","module","config","run","$inject"],"mappings":"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 truncated
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function c(e){var t=this;"function"!=typeof e.then&&(angular.extend(this,e),_.forEach(this.identities,function(e){var t;e.fullName&&e.email?e.full=e.fullName+" <"+e.email+">":e.email?e.full="<"+e.email+">":e.full="",e.signature&&(t=angular.element("<div>"+e.signature+"</div>"),e.textSignature=_.map(t.contents(),"textContent").join(" ").trim())}),this.$mailboxes)&&c.$Mailbox.$unwrapCollection(this,c.$q.when({mailboxes:this.$mailboxes})).then(function(e){t.$mailboxes=e})}c.$factory=["$q","$timeout","$log","sgSettings","Resource","Preferences","Mailbox","Message",function(e,t,s,n,i,a,o,r){return angular.extend(c,{$q:e,$timeout:t,$log:s,$$resource:new i(n.activeUser("folderURL")+"Mail",n.activeUser()),$Preferences:a,$Mailbox:o,$Message:r}),c}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Account",c.$factory),c.$findAll=function(e){return e?c.$unwrapCollection(e):c.$accounts?c.$q.when(c.$accounts):c.$$resource.fetch("","mailAccounts").then(function(e){return c.$unwrapCollection(e)})},c.$unwrapCollection=function(e){var s=[];return angular.forEach(e,function(e,t){e.id=t,s[t]=new c(e)}),c.$accounts=s},c.refreshUnseenCount=function(e){var t,s=1===c.$Preferences.defaults.SOGoMailFetchAllUnseenCountFolders,n=c.$Preferences.defaults.SOGoRefreshViewCheck;if(s)t=[];else{if(!e)throw Error("SOGoMailFetchAllUnseenCountFolders is disabled and no folders list provided");t=e}_.forEach(c.$accounts,function(e){s?_.forEach(e.$$flattenMailboxes,function(e){t.push(e.id)}):(_.includes(t,e.id+"/folderINBOX")||t.push(e.id+"/folderINBOX"),_.forEach(e.$$flattenMailboxes,function(e){angular.isDefined(e.unseenCount)&&!_.includes(t,e.id)&&t.push(e.id)}))}),c.$$resource.post("","unseenCount",{mailboxes:t}).then(function(t){_.forEach(c.$accounts,function(e){_.forEach(e.$$flattenMailboxes,function(e){angular.isDefined(t[e.id])&&(e.unseenCount=t[e.id])})})}),n&&"manually"!=n&&(c.$refreshUnseenCount&&c.$timeout.cancel(c.$refreshUnseenCount),c.$refreshUnseenCount=c.$timeout(angular.bind(this,c.refreshUnseenCount,e),1e3*n.timeInterval()))},c.prototype.getLength=function(){return this.$expanded?this.$flattenMailboxes().length:0},c.prototype.getItemAtIndex=function(e){var t=this.$flattenMailboxes();return 0<=e&&e<t.length?t[e]:null},c.prototype.$getMailboxes=function(e){var a=this,t=e&&e.reload;return this.$mailboxes&&!t?c.$q.when(this.$mailboxes):(!t&&this.$futureMailboxesData||(this.$futureMailboxesData=c.$Mailbox.$find(this,e).then(function(e){function s(e){_.forEach(e,function(e){var t=_.find(n,["id",e.id]);t&&(e.unseenCount=t.unseenCount),e.children&&0<e.children.length&&s(e.children)})}var n=a.$flattenMailboxes({all:!0});a.$mailboxes=e,a.$expanded=!1;s(a.$mailboxes);function t(e){_.forEach(e,function(e){e.$expanded=0<=i.indexOf("/"+e.id),e.children&&0<e.children.length&&t(e.children)})}var i;if(c.$Preferences.settings.Mail.ExpandedFolders){if(angular.isString(c.$Preferences.settings.Mail.ExpandedFolders))try{i=angular.fromJson(c.$Preferences.settings.Mail.ExpandedFolders)}catch(e){c.$log.warn("Can't parse list of expanded folders. String was: "+c.$Preferences.settings.Mail.ExpandedFolders),i=[]}else i=c.$Preferences.settings.Mail.ExpandedFolders;a.$expanded=0<=i.indexOf("/"+a.id),0<i.length&&t(a.$mailboxes)}return c.$accounts&&(a.$expanded|=1==c.$accounts.length),a.$flattenMailboxes({reload:!0}),a.$mailboxes})),this.$futureMailboxesData)},c.prototype.$flattenMailboxes=function(t){function s(e){_.forEach(e,function(e){n.push(e),(t&&t.all||e.$expanded)&&e.children&&0<e.children.length&&s(e.children)})}var n=[],i=[];return!this.$$flattenMailboxes||t&&(t.reload||t.all)?(s(this.$mailboxes),t&&t.all||(this.$$flattenMailboxes=n,t&&t.saveState&&(_.forEach(c.$accounts,function(e){e.$expanded&&i.push("/"+e.id),_.reduce(e.$$flattenMailboxes,function(e,t){return t.$expanded&&e.push("/"+t.id),e},i)}),c.$$resource.post(null,"saveFoldersState",i)))):n=this.$$flattenMailboxes,n},c.prototype.$getMailboxByType=function(s){function n(e){var t=_.find(e,function(e){return e.type==s});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=n(e.children))}),t}return n(this.$mailboxes)},c.prototype.$getMailboxByPath=function(s){function n(e){var t=_.find(e,function(e){return e.path==s});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=n(e.children))}),t}var e;if(null==(e=n(this.$mailboxes)))throw Error("No mailbox found matching path "+s);return e},c.prototype.$newMailbox=function(e,t){var s=this;return c.$$resource.post(e.toString(),"createFolder",{name:t}).then(function(){s.$getMailboxes({reload:!0})})},c.prototype.getTextSignature=function(e){var t;return e.signature?(t=angular.element("<div>"+e.signature+"</div>"),e.textSignature=_.map(t.contents(),"textContent").join(" ").trim()):e.textSignature="",e.textSignature},c.prototype.$hasCertificate=function(){return this.security&&this.security.hasCLine truncated
|
||||
(()=>{function c(e){var t=this;"function"!=typeof e.then&&(angular.extend(this,e),_.forEach(this.identities,function(e){var t;e.fullName&&e.email?e.full=e.fullName+" <"+e.email+">":e.email?e.full="<"+e.email+">":e.full="",e.signature&&(t=angular.element("<div>"+e.signature+"</div>"),e.textSignature=_.map(t.contents(),"textContent").join(" ").trim())}),this.$mailboxes)&&c.$Mailbox.$unwrapCollection(this,c.$q.when({mailboxes:this.$mailboxes})).then(function(e){t.$mailboxes=e})}c.$factory=["$q","$timeout","$log","sgSettings","Resource","Preferences","Mailbox","Message",function(e,t,s,n,i,a,o,r){return angular.extend(c,{$q:e,$timeout:t,$log:s,$$resource:new i(n.activeUser("folderURL")+"Mail",n.activeUser()),$Preferences:a,$Mailbox:o,$Message:r}),c}];try{angular.module("SOGo.MailerUI")}catch(e){angular.module("SOGo.MailerUI",["SOGo.Common"])}angular.module("SOGo.MailerUI").factory("Account",c.$factory),c.$findAll=function(e){return e?c.$unwrapCollection(e):c.$accounts?c.$q.when(c.$accounts):c.$$resource.fetch("","mailAccounts").then(function(e){return c.$unwrapCollection(e)})},c.$unwrapCollection=function(e){var s=[];return angular.forEach(e,function(e,t){e.id=t,s[t]=new c(e)}),c.$accounts=s},c.refreshUnseenCount=function(e){var t,s=1===c.$Preferences.defaults.SOGoMailFetchAllUnseenCountFolders,n=c.$Preferences.defaults.SOGoRefreshViewCheck;if(s)t=[];else{if(!e)throw Error("SOGoMailFetchAllUnseenCountFolders is disabled and no folders list provided");t=e}_.forEach(c.$accounts,function(e){s?_.forEach(e.$$flattenMailboxes,function(e){t.push(e.id)}):(_.includes(t,e.id+"/folderINBOX")||t.push(e.id+"/folderINBOX"),_.forEach(e.$$flattenMailboxes,function(e){angular.isDefined(e.unseenCount)&&!_.includes(t,e.id)&&t.push(e.id)}))}),c.$$resource.post("","unseenCount",{mailboxes:t}).then(function(t){_.forEach(c.$accounts,function(e){_.forEach(e.$$flattenMailboxes,function(e){angular.isDefined(t[e.id])&&(e.unseenCount=t[e.id])})})}),n&&"manually"!=n&&(c.$refreshUnseenCount&&c.$timeout.cancel(c.$refreshUnseenCount),c.$refreshUnseenCount=c.$timeout(angular.bind(this,c.refreshUnseenCount,e),1e3*n.timeInterval()))},c.prototype.getLength=function(){return this.$expanded?this.$flattenMailboxes().length:0},c.prototype.getItemAtIndex=function(e){var t=this.$flattenMailboxes();return 0<=e&&e<t.length?t[e]:null},c.prototype.$getMailboxes=function(e){var a=this,t=e&&e.reload;return this.$mailboxes&&!t?c.$q.when(this.$mailboxes):(!t&&this.$futureMailboxesData||(this.$futureMailboxesData=c.$Mailbox.$find(this,e).then(function(e){function s(e){_.forEach(e,function(e){var t=_.find(n,["id",e.id]);t&&(e.unseenCount=t.unseenCount),e.children&&0<e.children.length&&s(e.children)})}var n=a.$flattenMailboxes({all:!0});a.$mailboxes=e,a.$expanded=!1;s(a.$mailboxes);function t(e){_.forEach(e,function(e){e.$expanded=0<=i.indexOf("/"+e.id),e.children&&0<e.children.length&&t(e.children)})}var i;if(c.$Preferences.settings.Mail.ExpandedFolders){if(angular.isString(c.$Preferences.settings.Mail.ExpandedFolders))try{i=angular.fromJson(c.$Preferences.settings.Mail.ExpandedFolders)}catch(e){c.$log.warn("Can't parse list of expanded folders. String was: "+c.$Preferences.settings.Mail.ExpandedFolders),i=[]}else i=c.$Preferences.settings.Mail.ExpandedFolders;a.$expanded=0<=i.indexOf("/"+a.id),0<i.length&&t(a.$mailboxes)}return c.$accounts&&(a.$expanded|=1==c.$accounts.length),a.$flattenMailboxes({reload:!0}),a.$mailboxes})),this.$futureMailboxesData)},c.prototype.$flattenMailboxes=function(t){function s(e){_.forEach(e,function(e){n.push(e),(t&&t.all||e.$expanded)&&e.children&&0<e.children.length&&s(e.children)})}var n=[],i=[];return!this.$$flattenMailboxes||t&&(t.reload||t.all)?(s(this.$mailboxes),t&&t.all||(this.$$flattenMailboxes=n,t&&t.saveState&&(_.forEach(c.$accounts,function(e){e.$expanded&&i.push("/"+e.id),_.reduce(e.$$flattenMailboxes,function(e,t){return t.$expanded&&e.push("/"+t.id),e},i)}),c.$$resource.post(null,"saveFoldersState",i)))):n=this.$$flattenMailboxes,n},c.prototype.$getMailboxByType=function(s){function n(e){var t=_.find(e,function(e){return e.type==s});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=n(e.children))}),t}return n(this.$mailboxes)},c.prototype.$getMailboxByPath=function(s){function n(e){var t=_.find(e,function(e){return e.path==s});return t||angular.forEach(e,function(e){!t&&e.children&&0<e.children.length&&(t=n(e.children))}),t}var e;if(null==(e=n(this.$mailboxes)))throw Error("No mailbox found matching path "+s);return e},c.prototype.$newMailbox=function(e,t){var s=this;return c.$$resource.post(e.toString(),"createFolder",{name:t}).then(function(){s.$getMailboxes({reload:!0})})},c.prototype.getTextSignature=function(e){var t;return e.signature?(t=angular.element("<div>"+e.signature+"</div>"),e.textSignature=_.map(t.contents(),"textContent").join(" ").trim()):e.textSignature="",e.textSignature},c.prototype.$hasCertificate=function(){return this.security&&this.security.hasCertificate},c.protoLine truncated
|
||||
//# sourceMappingURL=Mailer.services.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Mailer.services.js","sources":["Mailer/Account.service.js","Mailer/Mailbox.service.js","Mailer/Message.service.js","Mailer/sgImageGallery.service.js","Mailer/VirtualMailbox.service.js","Mailer/MailboxController.js","Mailer/MailboxesController.js","Mailer/MessageController.js","Mailer/MessageEditorController.js","Mailer/sgAccountSection.directive.js","Mailer/sgIMIP.directive.js","Mailer/sgMailboxListItem.directive.js","Mailer/sgMessageListItem.directive.js","Mailer/sgMessageListItemMain.directive.js","Mailer/sgZoomableImage.directive.js"],"names":["Account","futureAccountData","_this","this","then","angular","extend","_","forEach","identities","identity","element","fullName","email","full","signature","textSignature","map","contents","join","trim","$mailboxes","$Mailbox","$unwrapCollection","$q","when","mailboxes","collection","$factory","$timeout","$log","Settings","Resource","Preferences","Mailbox","Message","$$resource","activeUser","$Preferences","$Message","module","e","factory","$findAll","data","$accounts","fetch","o","i","id","refreshUnseenCount","folders","unseenCountFolders","fetchAllUnseenCountFolders","defaults","SOGoMailFetchAllUnseenCountFolders","refreshViewCheck","SOGoRefreshViewCheck","Error","account","$$flattenMailboxes","mailbox","push","includes","isDefined","unseenCount","post","$refreshUnseenCount","cancel","bind","timeInterval","prototype","getLength","$expanded","$flattenMailboxes","length","getItemAtIndex","index","expandedMailboxes","$getMailboxes","options","reload","$futureMailboxesData","$find","_visitForUnseencount","previousMailbox","find","previousMailboxes","children","all","_visitForExpanded","expandedFolders","indexOf","settings","Mail","ExpandedFolders","isString","fromJson","warn","_visit","allMailboxes","saveState","reduce","$getMailboxByType","type","_find","$getMailboxByPath","path","$newMailbox","name","toString","getTextSignature","$hasCertificate","security","hasCertificate","$certificate","$$certificate","reject","$removeCertificate","updateQuota","percent","description","maxQuota","Math","round","usedSpace","l","formatted","maxMessages","messagesCount","$quota","$newMessage","debug","JSON","stringify","undefined","accountId","mailboxPath","message","$absolutePath","asDraft","accountDefaults","AuxiliaryMailAccounts","alwaysSign","sign","alwaysEncrypt","encrypt","editable","isNew","mailto","isObject","$parseMailto","$addDelegate","user","deferred","defer","param","uid","delegates","resolve","users","status","promise","$removeDelegate","splice","$omit","deep","defaultIdentity","value","key","copy","isReadOnly","pick","isDefault","forceDefaultIdentity","futureMailboxData","$account","init","newMailboxData","create","$unwrap","$rootScope","Acl","PRELOAD","BATCH_DELETE_LIMIT","$$Acl","$query","sort","asc","selectedFolder","$refreshTimeout","$virtualMode","$virtualPath","$searchMode","SortingState","parseInt","constant","LOOKAHEAD","SIZE","createMailboxes","level","isSentFolder","isDraftsFolder","quotas","split","component","asCSSIdentifier","isUndefined","uidsMap","headers","$isLoading","$messages","$visibleMessages","$selectedMessages","$highlightWords","$id","$acl","threaded","$collapsedThreads","threadsCollapsed","$displayName","$isEditable","isEditable","$isSpecial","$icon","$isNoInferiors","isNoInferiors","$shadowData","selectFolder","setSearchMode","searchMode","$lastVisibleIndex","max","$loadMessage","selectedMessages","updateCache","filter","selected","selectedCount","$unselectMessages","isSelectedMessage","messageId","$selectedMessage","selectedMessage","$selectedMessageIndex","hasSelectedMessage","$filter","sortingAttributes","filters","action","labels","searchBy","searchInput","word","cleanedWord","toLowerCase","match","secondFilter","$flaggedOnly","$unseenOnly","$syncToken","syncToken","unseenOnly","flaggedOnly","keys","$filteredLabels","k","f","endIndex","uids","startIndex","loaded","subject","min","loading","futureHeadersData","$unwrapHeaders","flags","isNoSelect","isWritable","getClassName","base","$rename","findParent","parent","parentMailbox","$save","_updateChildren","child","replace","pathRE","oldPath","sibling","localeCompare","RegExp","$compact","$canFolderAs","$setFolderAs","$empty","capitalize","substring","$markAsRead","isread","getLabels","$labels","filteredByLabel","$flagMessages","messages","operation","msgUIDs","forwardMessages","saveSelectedMessages","selectedUIDs","download","exportFolder","filename","open","$delete","$_deleteMessages","firstIndex","forEachRight","selectedIndex","findIndex","updateVisibleMessages","$deleteMessages","batchSize","_deleteMessages","start","end","currentUids","slice","$markOrUnMarkMessagesAsJunk","method","$copyMessages","folder","$moveMessages","$move","parentPath","finally","save","response","error","$reset","Object","assign","childrenArray","collapsedThread","msg","first","collapsed","$broadcast","$futureMailboxData","headersFields","msgObject","hasNewMessages","$topIndex","deleted","jLine truncated
|
||||
{"version":3,"file":"Mailer.services.js","sources":["Mailer/Account.service.js","Mailer/Mailbox.service.js","Mailer/Message.service.js","Mailer/sgImageGallery.service.js","Mailer/VirtualMailbox.service.js","Mailer/MailboxController.js","Mailer/MailboxesController.js","Mailer/MessageController.js","Mailer/MessageEditorController.js","Mailer/sgAccountSection.directive.js","Mailer/sgIMIP.directive.js","Mailer/sgMailboxListItem.directive.js","Mailer/sgMessageListItem.directive.js","Mailer/sgMessageListItemMain.directive.js","Mailer/sgZoomableImage.directive.js"],"names":["Account","futureAccountData","_this","this","then","angular","extend","_","forEach","identities","identity","element","fullName","email","full","signature","textSignature","map","contents","join","trim","$mailboxes","$Mailbox","$unwrapCollection","$q","when","mailboxes","collection","$factory","$timeout","$log","Settings","Resource","Preferences","Mailbox","Message","$$resource","activeUser","$Preferences","$Message","module","e","factory","$findAll","data","$accounts","fetch","o","i","id","refreshUnseenCount","folders","unseenCountFolders","fetchAllUnseenCountFolders","defaults","SOGoMailFetchAllUnseenCountFolders","refreshViewCheck","SOGoRefreshViewCheck","Error","account","$$flattenMailboxes","mailbox","push","includes","isDefined","unseenCount","post","$refreshUnseenCount","cancel","bind","timeInterval","prototype","getLength","$expanded","$flattenMailboxes","length","getItemAtIndex","index","expandedMailboxes","$getMailboxes","options","reload","$futureMailboxesData","$find","_visitForUnseencount","previousMailbox","find","previousMailboxes","children","all","_visitForExpanded","expandedFolders","indexOf","settings","Mail","ExpandedFolders","isString","fromJson","warn","_visit","allMailboxes","saveState","reduce","$getMailboxByType","type","_find","$getMailboxByPath","path","$newMailbox","name","toString","getTextSignature","$hasCertificate","security","hasCertificate","$certificate","$$certificate","reject","$removeCertificate","updateQuota","percent","description","maxQuota","Math","round","usedSpace","l","formatted","maxMessages","messagesCount","$quota","$newMessage","debug","JSON","stringify","undefined","accountId","mailboxPath","message","$absolutePath","asDraft","accountDefaults","AuxiliaryMailAccounts","alwaysSign","sign","alwaysEncrypt","encrypt","editable","isNew","mailto","isObject","$parseMailto","$addDelegate","user","deferred","defer","param","uid","delegates","resolve","users","status","promise","$removeDelegate","splice","$omit","deep","defaultIdentity","value","key","copy","isReadOnly","pick","isDefault","forceDefaultIdentity","futureMailboxData","$account","init","newMailboxData","create","$unwrap","$rootScope","Acl","PRELOAD","BATCH_DELETE_LIMIT","$$Acl","$query","sort","asc","selectedFolder","$refreshTimeout","$virtualMode","$virtualPath","$searchMode","SortingState","parseInt","constant","LOOKAHEAD","SIZE","createMailboxes","level","isSentFolder","isDraftsFolder","quotas","split","component","asCSSIdentifier","isUndefined","uidsMap","headers","$isLoading","$messages","$visibleMessages","$selectedMessages","$highlightWords","$id","$acl","threaded","$collapsedThreads","threadsCollapsed","$displayName","$isEditable","isEditable","$isSpecial","$icon","$isNoInferiors","isNoInferiors","$shadowData","selectFolder","setSearchMode","searchMode","$lastVisibleIndex","max","$loadMessage","selectedMessages","updateCache","filter","selected","selectedCount","$unselectMessages","isSelectedMessage","messageId","$selectedMessage","selectedMessage","$selectedMessageIndex","hasSelectedMessage","$filter","sortingAttributes","filters","action","labels","searchBy","searchInput","word","cleanedWord","toLowerCase","match","secondFilter","$flaggedOnly","$unseenOnly","$syncToken","syncToken","unseenOnly","flaggedOnly","keys","$filteredLabels","k","f","endIndex","uids","startIndex","loaded","subject","min","loading","futureHeadersData","$unwrapHeaders","flags","isNoSelect","isWritable","getClassName","base","$rename","findParent","parent","parentMailbox","$save","_updateChildren","child","replace","pathRE","oldPath","sibling","localeCompare","RegExp","$compact","$canFolderAs","$setFolderAs","$empty","capitalize","substring","$markAsRead","isread","getLabels","$labels","filteredByLabel","$flagMessages","messages","operation","msgUIDs","forwardMessages","saveSelectedMessages","selectedUIDs","download","exportFolder","filename","open","$delete","$_deleteMessages","firstIndex","forEachRight","selectedIndex","findIndex","updateVisibleMessages","$deleteMessages","batchSize","_deleteMessages","start","end","currentUids","slice","$markOrUnMarkMessagesAsJunk","method","$copyMessages","folder","$moveMessages","$move","parentPath","finally","save","response","error","$reset","Object","assign","childrenArray","collapsedThread","msg","first","collapsed","$broadcast","$futureMailboxData","headersFields","msgObject","hasNewMessages","$topIndex","deleted","jLine truncated
|
||||
@@ -405,6 +405,7 @@
|
||||
this.$highlightWords = [];
|
||||
filters.forEach(filter => {
|
||||
if ("subject_or_from" == filter.searchBy
|
||||
|| "subject_or_to" == filter.searchBy
|
||||
|| "contains" == filter.searchBy
|
||||
|| "body" == filter.searchBy
|
||||
|| "from" == filter.searchBy
|
||||
@@ -1043,6 +1044,7 @@
|
||||
this.account = account;
|
||||
if (options && options.unseenCount) {
|
||||
this.unseenCount = options.unseenCount;
|
||||
delete options["unseenCount"];
|
||||
}
|
||||
if (options && options.filter) {
|
||||
this.$messages = [];
|
||||
@@ -1312,4 +1314,21 @@
|
||||
Mailbox.prototype.getHighlightWords = function () {
|
||||
return this.$highlightWords;
|
||||
};
|
||||
|
||||
/**
|
||||
* @function cleanMailbox
|
||||
* @memberof Mailbox.prototype
|
||||
* @desc Cleans up the mailbox by applying the specified parameters.
|
||||
* This can include operations such as moving emails to trash,
|
||||
* filtering emails based on a duration, and applying actions to subfolders.
|
||||
* @param {Object} parameters - An object containing the parameters for cleaning the mailbox.
|
||||
* @param {boolean} [parameters.applyToSubfolders=false] - Whether to apply the cleaning operation to subfolders.
|
||||
* @param {boolean} [parameters.moveToTrash=false] - Whether to move the emails to the trash folder.
|
||||
* @param {string|null} [parameters.filterDuration=null] - A duration filter (e.g., "3m", "6m") to select emails older than the specified duration.
|
||||
* @returns {Promise} A promise that resolves when the cleaning operation is completed, or rejects with an error if the operation fails.
|
||||
*/
|
||||
Mailbox.prototype.cleanMailbox = function (parameters) {
|
||||
return parameters.folders.length > 0 ? Mailbox.$$resource.post(this.id.split("/")[0], 'cleanMailbox', parameters) : Mailbox.$$resource.post(this.id, 'cleanMailbox', parameters);
|
||||
};
|
||||
|
||||
})();
|
||||
@@ -589,9 +589,12 @@
|
||||
});
|
||||
};
|
||||
|
||||
this.moveSelectedMessages = function(dstFolder) {
|
||||
this.moveSelectedMessages = function(dstFolder, message) {
|
||||
var moveSelectedMessage = vm.selectedFolder.hasSelectedMessage();
|
||||
var selectedMessages = vm.selectedFolder.selectedMessages();
|
||||
if (message) {
|
||||
selectedMessages.push(message);
|
||||
}
|
||||
var count = vm.selectedFolder.selectedCount();
|
||||
if (_.size(selectedMessages) > 0)
|
||||
vm.selectedFolder.$moveMessages(selectedMessages, '/' + dstFolder).then(function(index) {
|
||||
|
||||
@@ -53,6 +53,10 @@
|
||||
$rootScope.$on('resetMailAdvancedSearchPanel', function () {
|
||||
vm.reset();
|
||||
});
|
||||
|
||||
$rootScope.$on('showCleanMailboxPanel', function (e, d) {
|
||||
vm.showCleanMailboxPanel(d.folder, d.account);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -447,6 +451,128 @@
|
||||
});
|
||||
};
|
||||
|
||||
this.showCleanMailboxPanel = function (folder, account) {
|
||||
// Close sidenav on small devices
|
||||
if (!$mdMedia(sgConstant['gt-md']))
|
||||
$mdSidenav('left').close();
|
||||
|
||||
$mdDialog.show({
|
||||
template: document.getElementById('cleanMailbox').innerHTML,
|
||||
parent: angular.element(document.body),
|
||||
controller: function () {
|
||||
var dialogCtrl = this;
|
||||
|
||||
this.$onInit = function () {
|
||||
this.mainController = vm;
|
||||
this.folder = folder;
|
||||
this.isMailbox = (folder ? false : true);
|
||||
this.name = folder ? folder.$displayName : account.name;
|
||||
this.loading = false;
|
||||
this.date = null;
|
||||
this.form = {
|
||||
filterDuration: "3m",
|
||||
permanentlyDelete: false,
|
||||
confirmDelete: false,
|
||||
filterDurationDate: null
|
||||
};
|
||||
|
||||
var today = new Date();
|
||||
var maxDate = new Date(today);
|
||||
maxDate.setMonth(today.getMonth() - 3);
|
||||
this.maxDate = maxDate;
|
||||
};
|
||||
|
||||
dialogCtrl.closeDialog = function () {
|
||||
$mdDialog.hide();
|
||||
};
|
||||
|
||||
dialogCtrl.isLoading = function () {
|
||||
return this.loading;
|
||||
}
|
||||
|
||||
dialogCtrl.isWarningDisplayed = function () {
|
||||
return (this.form && this.form.permanentlyDelete);
|
||||
}
|
||||
|
||||
dialogCtrl.isApplyDisabled = function () {
|
||||
return !(!this.loading
|
||||
&& (!this.form.permanentlyDelete || (this.form.permanentlyDelete && this.form.confirmDelete))
|
||||
&& (this.form.filterDuration != 'custom' || (this.form.filterDuration == 'custom' && this.form.filterDurationDate))
|
||||
);
|
||||
}
|
||||
|
||||
dialogCtrl.apply = function () {
|
||||
var folders = [];
|
||||
var i;
|
||||
if (account) {
|
||||
for (i = 0; i < account.$mailboxes.length ; i++) {
|
||||
folders.push(account.$mailboxes[i].id);
|
||||
}
|
||||
this.folder = account.$mailboxes[0];
|
||||
}
|
||||
var date = '';
|
||||
var durationMonth = 12;
|
||||
var date = new Date();
|
||||
switch (this.form.filterDuration) {
|
||||
case '3m':
|
||||
durationMonth = 3;
|
||||
date.setMonth(date.getMonth() - durationMonth);
|
||||
break;
|
||||
case '6m':
|
||||
durationMonth = 6;
|
||||
date.setMonth(date.getMonth() - durationMonth);
|
||||
break;
|
||||
case '9m':
|
||||
durationMonth = 9;
|
||||
date.setMonth(date.getMonth() - durationMonth);
|
||||
break;
|
||||
case '1y':
|
||||
durationMonth = 12;
|
||||
date.setMonth(date.getMonth() - durationMonth);
|
||||
break;
|
||||
case 'custom':
|
||||
date = this.form.filterDurationDate;
|
||||
break;
|
||||
}
|
||||
var year = date.getFullYear();
|
||||
var month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
var day = String(date.getDate()).padStart(2, '0');
|
||||
this.date = `${year}-${month}-${day}`;
|
||||
this.folder.cleanMailbox({
|
||||
'applyToSubfolders': (this.form && this.form.applyToSubfolders) ? this.form.applyToSubfolders : false,
|
||||
'permanentlyDelete': (this.form && this.form.permanentlyDelete) ? this.form.permanentlyDelete : false,
|
||||
'date': this.date,
|
||||
'folders': folders
|
||||
}).then(function (data) {
|
||||
dialogCtrl.loading = true;
|
||||
Mailbox.selectedFolder.$filter({
|
||||
"sort": "date",
|
||||
"asc": false,
|
||||
"match": "OR"
|
||||
}).then(function () {
|
||||
$state.go('mail.account.mailbox', { accountId: vm.accounts[0].id, mailboxId: encodeUriFilter(Mailbox.selectedFolder.path) });
|
||||
dialogCtrl.loading = false;
|
||||
$mdDialog.hide();
|
||||
|
||||
$mdToast.show(
|
||||
$mdToast.simple()
|
||||
.textContent(l('%{0} message(s) deleted', data.nbMessageDeleted))
|
||||
.position(sgConstant.toastPosition)
|
||||
.hideDelay(2000));
|
||||
});
|
||||
}).catch(function () {
|
||||
dialogCtrl.loading = false;
|
||||
$mdDialog.hide();
|
||||
});
|
||||
};
|
||||
},
|
||||
controllerAs: 'dialogCtrl',
|
||||
clickOutsideToClose: false,
|
||||
escapeToClose: false,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
this.delegate = function(account) {
|
||||
$mdDialog.show({
|
||||
templateUrl: account.id + '/delegation', // UI/Templates/MailerUI/UIxMailUserDelegation.wox
|
||||
|
||||
@@ -271,6 +271,14 @@
|
||||
});
|
||||
};
|
||||
|
||||
this.cleanMailbox = function () {
|
||||
// Close sidenav on small devices
|
||||
if (!$mdMedia(sgConstant['gt-md']))
|
||||
$mdSidenav('left').close();
|
||||
|
||||
$rootScope.$broadcast('showCleanMailboxPanel', {folder: this.folder, account: null}); // Show remove old emails panel (broadcast event to MailboxesController)
|
||||
};
|
||||
|
||||
this.emptyJunkFolder = function() {
|
||||
return this.emptyFolder(l('Junk folder emptied'));
|
||||
};
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";angular.module("SOGo.MainUI",["SOGo.Common","SOGo.Authentication"]);function e(e,o,s,r,a,n,i,t){var d=this;this.$onInit=function(){this.creds={username:o.cookieUsername,password:null,domain:null,rememberLogin:angular.isDefined(o.cookieUsername)&&0<o.cookieUsername.length},/\blanguage=/.test(o.location.search)&&(this.creds.language=o.language),this.loginState=!1,this.verificationCodePattern="\\d{6}",this.passwords={newPassword:null,newPasswordConfirmation:null,oldPassword:null,visible:!1},this.passwordRecovery={passwordRecoveryEnabled:!1,passwordRecoveryQuestionKey:null,passwordRecoveryQuestion:null,passwordRecoveryMode:null,passwordRecoveryQuestionAnswer:null,passwordRecoveryToken:null,passwordRecoveryLinkTimer:null,passwordRecoverySecondaryEmailText:null,passwordRecoveryMailDomain:null,showLoader:!1},this.showLogin=!1,s(function(){d.showLogin=!0;var e=window.location.search;let o=new URLSearchParams(e).get("token");0<window.location.pathname.indexOf("passwordRecoveryEmail")&&o?3===(e=(o=o.replace(/\//g,"")).split(".")).length&&(d.passwordRecovery.passwordRecoveryToken=o,e=JSON.parse(atob(e[1])),d.creds.username=e.username,d.creds.domain=e.domain,d.passwordRecovery.passwordRecoveryToken=o,d.passwordRecovery.passwordRecoveryMode="SecondaryEmail",d.passwordRecovery.passwordRecoveryEnabled=!0,d.loginState="passwordchange",d.showLogin=!1,t("loginContent")):d.retrievePasswordRecoveryEnabled(),0<document.querySelectorAll("*:autofill").length&&document.querySelectorAll("*:autofill").forEach(e=>{e.parentElement.classList.add("md-input-has-value")})},100)},this.login=function(){return d.loginState="authenticating",n.login(d.creds).then(function(e){e.totpmissingkey?(d.loginState="totpcode",i("totpcode")):e.totpdisabled?(d.loginState="totpdisabled",d.cn=e.cn,d.url=e.url):(d.loginState="logged",d.cn=e.cn,d.url=e.url,s(function(){d.continueLogin()},1e3))},function(e){var o,s;d.loginState="error",e.error?d.errorMessage=e.error:0<e.grace?(d.loginState="passwordwillexpire",d.cn=e.cn,d.url=e.url,d.errorMessage=l("You have %{0} logins remaining before your account is locked. Please change your password in the preference dialog.",e.grace)):0<e.expire?(s=86400<e.expire?(o=Math.round(e.expire/86400),l("days")):3600<e.expire?(o=Math.round(e.expire/3600),l("hours")):60<e.expire?(o=Math.round(e.expire/60),l("minutes")):(o=e.expire,l("seconds")),d.loginState="passwordwillexpire",d.cn=e.cn,d.url=e.url,d.errorMessage=l("Your password is going to expire in %{0} %{1}.",o,s)):e.passwordexpired&&(d.loginState="passwordchange",d.url=e.url)}),!1},this.restoreLogin=function(){d.showLogin=!1,"SecretQuestion"===d.passwordRecovery.passwordRecoveryMode?(t("loginContent"),d.passwordRecoveryInfo()):(delete d.creds.verificationCode,d.passwordRecoveryAbort())},this.continueLogin=function(){o.location.href===d.url?o.location.reload(!0):o.location.href=d.url},this.showAbout=function(e){function o(e){this.closeDialog=function(){e.hide()}}a.show({targetEvent:e,templateUrl:"aboutBox.html",controller:o,controllerAs:"about"}),o.$inject=["$mdDialog"]},this.changeLanguage=function(e){o.location.href=ApplicationBaseURL+"login?language="+this.creds.language},this.hello=function(e){return!1},this.canChangePassword=function(e){return this.passwords.newPasswordConfirmation&&this.passwords.newPasswordConfirmation.length&&this.passwords.newPassword!=this.passwords.newPasswordConfirmation?(e.newPasswordConfirmation.$setValidity("newPasswordMismatch",!1),!1):(e.newPasswordConfirmation.$setValidity("newPasswordMismatch",!0),!!(this.passwords.newPassword&&0<this.passwords.newPassword.length&&this.passwords.newPasswordConfirmation&&this.passwords.newPasswordConfirmation.length&&this.passwords.newPassword==this.passwords.newPasswordConfirmation&&(this.isInPasswordRecoveryMode()||!this.loginState&&this.passwords.oldPassword&&0<this.passwords.oldPassword.length||"passwordchange"==this.loginState&&this.passwords.oldPassword&&0<this.passwords.oldPassword.length)))},this.changePassword=function(){n.changePassword(this.creds.username,this.creds.domain,this.passwords.newPassword,this.passwords.oldPassword,this.passwordRecovery.passwordRecoveryToken).then(function(e){d.loginState="message",d.url=e.url,d.errorMessage=l("The password was changed successfully.")},function(e){d.loginState="error",d.errorMessage=e})},this.passwordRecoveryInfo=function(){d.loginState="passwordrecovery",d.passwordRecovery.showLoader=!0,n.passwordRecovery(this.creds.username,this.creds.domain).then(function(e){d.passwordRecovery.passwordRecoveryMode=e.mode,"SecretQuestion"===e.mode?(d.passwordRecovery.passwordRecoveryQuestion=e.secretQuestionLabel,d.passwordRecovery.passwordRecoveryQuestionKey=e.secretQuestion):"SecondaryEmail"===e.mode?d.passwordRecovery.passwordRecoverySecondaryEmailText=l("A link will be sent to %{0}",e.obfuscatedRecoveryEmail):"Disabled"===e.mode&&(d.loginState="error",d.errorMessage=l("No password recovery method has been defined for this user")),d.passwoLine truncated
|
||||
(()=>{function e(e,s,o,r,a,i,n,t,d,c){var w=this;this.$onInit=function(){this.creds={username:s.cookieUsername,password:null,domain:null,rememberLogin:angular.isDefined(s.cookieUsername)&&0<s.cookieUsername.length},/\blanguage=/.test(s.location.search)&&(this.creds.language=s.language),this.loginState=!1,this.verificationCodePattern="\\d{6}",this.passwords={newPassword:null,newPasswordConfirmation:null,oldPassword:null,visible:!1},this.passwordRecovery={passwordRecoveryEnabled:!1,passwordRecoveryQuestionKey:null,passwordRecoveryQuestion:null,passwordRecoveryMode:null,passwordRecoveryQuestionAnswer:null,passwordRecoveryToken:null,passwordRecoveryLinkTimer:null,passwordRecoverySecondaryEmailText:null,passwordRecoveryMailDomain:null,showLoader:!1},this.showLogin=!1,o(function(){w.showLogin=!0;var e=window.location.search;let s=new URLSearchParams(e).get("token");0<window.location.pathname.indexOf("passwordRecoveryEmail")&&s?3===(e=(s=s.replace(/\//g,"")).split(".")).length&&(w.passwordRecovery.passwordRecoveryToken=s,e=JSON.parse(atob(e[1])),w.creds.username=e.username,w.creds.domain=e.domain,w.passwordRecovery.passwordRecoveryToken=s,w.passwordRecovery.passwordRecoveryMode="SecondaryEmail",w.passwordRecovery.passwordRecoveryEnabled=!0,w.loginState="passwordchange",t("loginContent")):w.retrievePasswordRecoveryEnabled(),0<document.querySelectorAll("*:autofill").length&&document.querySelectorAll("*:autofill").forEach(e=>{e.parentElement.classList.add("md-input-has-value")})},100)},this.login=function(){return w.loginState="authenticating",i.login(w.creds).then(function(e){e.totpmissingkey?(w.loginState="totpcode",n("totpcode")):e.totpdisabled?(w.loginState="totpdisabled",w.cn=e.cn,w.url=e.url):(w.loginState="logged",w.cn=e.cn,w.url=e.url,o(function(){w.continueLogin()},1e3))},function(e){var s,o;w.loginState="error",e.error?w.errorMessage=e.error:0<e.grace?(w.loginState="passwordwillexpire",w.cn=e.cn,w.url=e.url,w.passwordPolicy=e.userPolicies||[],w.errorMessage=l("You have %{0} logins remaining before your account is locked. Please change your password in the preference dialog.",e.grace)):0<e.expire?(o=86400<e.expire?(s=Math.round(e.expire/86400),l("days")):3600<e.expire?(s=Math.round(e.expire/3600),l("hours")):60<e.expire?(s=Math.round(e.expire/60),l("minutes")):(s=e.expire,l("seconds")),w.loginState="passwordwillexpire",w.cn=e.cn,w.url=e.url,w.errorMessage=l("Your password is going to expire in %{0} %{1}.",s,o)):(e.passwordexpired&&2==e.passwordexpired||e.passwordexpired)&&(w.loginState="passwordchange",w.passwordPolicy=e.userPolicies||[],w.url=e.url,w.passwordexpired=e.passwordexpired)}),!1},this.restoreLogin=function(){"SecretQuestion"===w.passwordRecovery.passwordRecoveryMode?t("loginContent"):delete w.creds.verificationCode,w.passwordRecoveryAbort()},this.continueLogin=function(){s.location.href===w.url?s.location.reload(!0):s.location.href=w.url},this.showAbout=function(e){function s(e){this.closeDialog=function(){e.hide()}}a.show({targetEvent:e,templateUrl:"aboutBox.html",controller:s,controllerAs:"about"}),s.$inject=["$mdDialog"]},this.changeLanguage=function(e){s.location.href=ApplicationBaseURL+"changeLanguage?language="+this.creds.language},this.canChangePassword=function(e){return this.passwords.newPasswordConfirmation&&this.passwords.newPasswordConfirmation.length&&this.passwords.newPassword!=this.passwords.newPasswordConfirmation?(e.newPasswordConfirmation.$setValidity("newPasswordMismatch",!1),!1):(e.newPasswordConfirmation.$setValidity("newPasswordMismatch",!0),!!(this.passwords.newPassword&&0<this.passwords.newPassword.length&&this.passwords.newPasswordConfirmation&&this.passwords.newPasswordConfirmation.length&&this.passwords.newPassword==this.passwords.newPasswordConfirmation&&(this.isInPasswordRecoveryMode()||!this.loginState&&this.passwords.oldPassword&&0<this.passwords.oldPassword.length||"passwordchange"==this.loginState&&this.passwords.oldPassword&&0<this.passwords.oldPassword.length)))},this.changePassword=function(){i.changePassword(this.creds.username,this.creds.domain,this.passwords.newPassword,this.passwords.oldPassword,this.passwordRecovery.passwordRecoveryToken).then(function(e){w.loginState="message",w.url=e.url,w.errorMessage=l("The password was changed successfully.")},function(e){c.show(c.simple().textContent(e).position(d.toastPosition).hideDelay(2e3))})},this.passwordRecoveryInfo=function(){w.loginState="passwordrecovery",w.passwordRecovery.showLoader=!0,i.passwordRecovery(this.creds.username,this.creds.domain).then(function(e){w.passwordRecovery.passwordRecoveryMode=e.mode,"SecretQuestion"===e.mode?(w.passwordRecovery.passwordRecoveryQuestion=e.secretQuestionLabel,w.passwordRecovery.passwordRecoveryQuestionKey=e.secretQuestion):"SecondaryEmail"===e.mode?w.passwordRecovery.passwordRecoverySecondaryEmailText=l("A link will be sent to %{0}",e.obfuscatedRecoveryEmail):"Disabled"===e.mode&&(w.loginState="error",w.errorMessage=l("No password recovery method has been defined forLine truncated
|
||||
//# sourceMappingURL=Main.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Main.js","sources":["Main/Main.app.js"],"names":["angular","module","LoginController","$scope","$window","$timeout","Dialog","$mdDialog","Authentication","focus","rippleDo","vm","this","$onInit","creds","username","cookieUsername","password","domain","rememberLogin","isDefined","length","test","location","search","language","loginState","verificationCodePattern","passwords","newPassword","newPasswordConfirmation","oldPassword","visible","passwordRecovery","passwordRecoveryEnabled","passwordRecoveryQuestionKey","passwordRecoveryQuestion","passwordRecoveryMode","passwordRecoveryQuestionAnswer","passwordRecoveryToken","passwordRecoveryLinkTimer","passwordRecoverySecondaryEmailText","passwordRecoveryMailDomain","showLoader","showLogin","queryString","window","let","token","URLSearchParams","get","pathname","indexOf","tokenArray","replace","split","info","JSON","parse","atob","retrievePasswordRecoveryEnabled","document","querySelectorAll","forEach","el","parentElement","classList","add","login","then","data","totpmissingkey","totpdisabled","cn","url","continueLogin","msg","value","string","error","errorMessage","grace","l","expire","Math","round","passwordexpired","restoreLogin","passwordRecoveryInfo","verificationCode","passwordRecoveryAbort","href","reload","showAbout","$event","AboutDialogController","closeDialog","hide","show","targetEvent","templateUrl","controller","controllerAs","$inject","changeLanguage","ApplicationBaseURL","hello","form","canChangePassword","$setValidity","isInPasswordRecoveryMode","changePassword","mode","secretQuestionLabel","secretQuestion","obfuscatedRecoveryEmail","passwordRecoveryEmail","passwordRecoveryCheck","usernameChanged","clearTimeout","setTimeout","mailDomain","changePasswordVisibility","field","getElementById","type","innerHTML"],"mappings":"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 truncated
|
||||
{"version":3,"file":"Main.js","sources":["Main/Main.app.js"],"names":["LoginController","$scope","$window","$timeout","Dialog","$mdDialog","Authentication","focus","rippleDo","sgConstant","$mdToast","vm","this","$onInit","creds","username","cookieUsername","password","domain","rememberLogin","angular","isDefined","length","test","location","search","language","loginState","verificationCodePattern","passwords","newPassword","newPasswordConfirmation","oldPassword","visible","passwordRecovery","passwordRecoveryEnabled","passwordRecoveryQuestionKey","passwordRecoveryQuestion","passwordRecoveryMode","passwordRecoveryQuestionAnswer","passwordRecoveryToken","passwordRecoveryLinkTimer","passwordRecoverySecondaryEmailText","passwordRecoveryMailDomain","showLoader","showLogin","queryString","window","let","token","URLSearchParams","get","pathname","indexOf","tokenArray","replace","split","info","JSON","parse","atob","retrievePasswordRecoveryEnabled","document","querySelectorAll","forEach","el","parentElement","classList","add","login","then","data","totpmissingkey","totpdisabled","cn","url","continueLogin","msg","value","string","error","errorMessage","grace","passwordPolicy","userPolicies","l","expire","Math","round","passwordexpired","restoreLogin","verificationCode","passwordRecoveryAbort","href","reload","showAbout","$event","AboutDialogController","closeDialog","hide","show","targetEvent","templateUrl","controller","controllerAs","$inject","changeLanguage","ApplicationBaseURL","canChangePassword","form","$setValidity","isInPasswordRecoveryMode","changePassword","simple","textContent","position","toastPosition","hideDelay","passwordRecoveryInfo","mode","secretQuestionLabel","secretQuestion","obfuscatedRecoveryEmail","passwordRecoveryEmail","passwordRecoveryCheck","isPasswordExpiredSecurity","usernameChanged","clearTimeout","setTimeout","mailDomain","changePasswordVisibility","field","getElementById","type","innerHTML","module"],"mappings":"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 truncated
|
||||
@@ -1,6 +1,6 @@
|
||||
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* JavaScript for MainUI (SOGoRootPage) */
|
||||
(function() {
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
angular.module('SOGo.MainUI', ['SOGo.Common', 'SOGo.Authentication']);
|
||||
@@ -9,8 +9,8 @@
|
||||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
LoginController.$inject = ['$scope', '$window', '$timeout', 'Dialog', '$mdDialog', 'Authentication', 'sgFocus', 'sgRippleClick'];
|
||||
function LoginController($scope, $window, $timeout, Dialog, $mdDialog, Authentication, focus, rippleDo) {
|
||||
LoginController.$inject = ['$scope', '$window', '$timeout', 'Dialog', '$mdDialog', 'Authentication', 'sgFocus', 'sgRippleClick', 'sgConstant', '$mdToast'];
|
||||
function LoginController($scope, $window, $timeout, Dialog, $mdDialog, Authentication, focus, rippleDo, sgConstant, $mdToast) {
|
||||
var vm = this;
|
||||
|
||||
this.$onInit = function () {
|
||||
@@ -69,10 +69,9 @@
|
||||
vm.passwordRecovery.passwordRecoveryEnabled = true;
|
||||
|
||||
vm.loginState = 'passwordchange';
|
||||
vm.showLogin = false;
|
||||
rippleDo('loginContent');
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
vm.retrievePasswordRecoveryEnabled();
|
||||
}
|
||||
@@ -83,14 +82,14 @@
|
||||
el.parentElement.classList.add("md-input-has-value");
|
||||
});
|
||||
}
|
||||
}, 100);
|
||||
|
||||
}, 100);
|
||||
|
||||
};
|
||||
|
||||
this.login = function() {
|
||||
this.login = function () {
|
||||
vm.loginState = 'authenticating';
|
||||
Authentication.login(vm.creds)
|
||||
.then(function(data) {
|
||||
.then(function (data) {
|
||||
|
||||
if (data.totpmissingkey) {
|
||||
vm.loginState = 'totpcode';
|
||||
@@ -107,11 +106,11 @@
|
||||
vm.url = data.url;
|
||||
|
||||
// Let the user see the succesfull message before reloading the page
|
||||
$timeout(function() {
|
||||
$timeout(function () {
|
||||
vm.continueLogin();
|
||||
}, 1000);
|
||||
}
|
||||
}, function(msg) {
|
||||
}, function (msg) {
|
||||
vm.loginState = 'error';
|
||||
|
||||
if (msg.error) {
|
||||
@@ -122,21 +121,22 @@
|
||||
vm.loginState = 'passwordwillexpire';
|
||||
vm.cn = msg.cn;
|
||||
vm.url = msg.url;
|
||||
vm.passwordPolicy = msg.userPolicies ? msg.userPolicies : [];
|
||||
vm.errorMessage = l('You have %{0} logins remaining before your account is locked. Please change your password in the preference dialog.', msg.grace);
|
||||
}
|
||||
else if (msg.expire > 0) {
|
||||
// Password will soon expire
|
||||
var value, string;
|
||||
if (msg.expire > 86400) {
|
||||
value = Math.round(msg.expire/86400);
|
||||
value = Math.round(msg.expire / 86400);
|
||||
string = l("days");
|
||||
}
|
||||
else if (msg.expire > 3600) {
|
||||
value = Math.round(msg.expire/3600);
|
||||
value = Math.round(msg.expire / 3600);
|
||||
string = l("hours");
|
||||
}
|
||||
else if (msg.expire > 60) {
|
||||
value = Math.round(msg.expire/60);
|
||||
value = Math.round(msg.expire / 60);
|
||||
string = l("minutes");
|
||||
}
|
||||
else {
|
||||
@@ -148,34 +148,40 @@
|
||||
vm.url = msg.url;
|
||||
vm.errorMessage = l('Your password is going to expire in %{0} %{1}.', value, string);
|
||||
}
|
||||
else if (msg.passwordexpired) {
|
||||
else if (msg.passwordexpired && msg.passwordexpired == 2) {
|
||||
vm.loginState = 'passwordchange';
|
||||
vm.passwordPolicy = msg.userPolicies ? msg.userPolicies : [];
|
||||
vm.url = msg.url;
|
||||
vm.passwordexpired = msg.passwordexpired;
|
||||
} else if (msg.passwordexpired) {
|
||||
vm.loginState = 'passwordchange';
|
||||
vm.passwordPolicy = msg.userPolicies ? msg.userPolicies : [];
|
||||
vm.url = msg.url;
|
||||
vm.passwordexpired = msg.passwordexpired;
|
||||
}
|
||||
|
||||
});
|
||||
return false;
|
||||
};
|
||||
|
||||
this.restoreLogin = function() {
|
||||
vm.showLogin = false;
|
||||
this.restoreLogin = function () {
|
||||
if ('SecretQuestion' === vm.passwordRecovery.passwordRecoveryMode) {
|
||||
rippleDo('loginContent');
|
||||
vm.passwordRecoveryInfo();
|
||||
vm.passwordRecoveryAbort();
|
||||
} else {
|
||||
delete vm.creds.verificationCode;
|
||||
vm.passwordRecoveryAbort();
|
||||
}
|
||||
};
|
||||
|
||||
this.continueLogin = function() {
|
||||
this.continueLogin = function () {
|
||||
if ($window.location.href === vm.url)
|
||||
$window.location.reload(true);
|
||||
else
|
||||
$window.location.href = vm.url;
|
||||
};
|
||||
|
||||
this.showAbout = function($event) {
|
||||
this.showAbout = function ($event) {
|
||||
$mdDialog.show({
|
||||
targetEvent: $event,
|
||||
templateUrl: 'aboutBox.html',
|
||||
@@ -184,24 +190,20 @@
|
||||
});
|
||||
AboutDialogController.$inject = ['$mdDialog'];
|
||||
function AboutDialogController($mdDialog) {
|
||||
this.closeDialog = function() {
|
||||
this.closeDialog = function () {
|
||||
$mdDialog.hide();
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
this.changeLanguage = function($event) {
|
||||
this.changeLanguage = function ($event) {
|
||||
// Reload page
|
||||
$window.location.href = ApplicationBaseURL + 'login?language=' + this.creds.language;
|
||||
$window.location.href = ApplicationBaseURL + 'changeLanguage?language=' + this.creds.language;
|
||||
};
|
||||
|
||||
this.hello = function (form) {
|
||||
return !true;
|
||||
}
|
||||
|
||||
this.canChangePassword = function(form) {
|
||||
this.canChangePassword = function (form) {
|
||||
if (this.passwords.newPasswordConfirmation && this.passwords.newPasswordConfirmation.length &&
|
||||
this.passwords.newPassword != this.passwords.newPasswordConfirmation) {
|
||||
this.passwords.newPassword != this.passwords.newPasswordConfirmation) {
|
||||
form.newPasswordConfirmation.$setValidity('newPasswordMismatch', false);
|
||||
return false;
|
||||
}
|
||||
@@ -209,25 +211,29 @@
|
||||
form.newPasswordConfirmation.$setValidity('newPasswordMismatch', true);
|
||||
}
|
||||
if (this.passwords.newPassword && this.passwords.newPassword.length > 0 &&
|
||||
this.passwords.newPasswordConfirmation && this.passwords.newPasswordConfirmation.length &&
|
||||
this.passwords.newPassword == this.passwords.newPasswordConfirmation &&
|
||||
((this.isInPasswordRecoveryMode()) ||
|
||||
(!this.loginState && this.passwords.oldPassword && this.passwords.oldPassword.length > 0) ||
|
||||
this.passwords.newPasswordConfirmation && this.passwords.newPasswordConfirmation.length &&
|
||||
this.passwords.newPassword == this.passwords.newPasswordConfirmation &&
|
||||
((this.isInPasswordRecoveryMode()) ||
|
||||
(!this.loginState && this.passwords.oldPassword && this.passwords.oldPassword.length > 0) ||
|
||||
('passwordchange' == this.loginState && this.passwords.oldPassword && this.passwords.oldPassword.length > 0)
|
||||
))
|
||||
))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
this.changePassword = function() {
|
||||
Authentication.changePassword(this.creds.username, this.creds.domain, this.passwords.newPassword, this.passwords.oldPassword, this.passwordRecovery.passwordRecoveryToken).then(function(data) {
|
||||
this.changePassword = function () {
|
||||
Authentication.changePassword(this.creds.username, this.creds.domain, this.passwords.newPassword, this.passwords.oldPassword, this.passwordRecovery.passwordRecoveryToken).then(function (data) {
|
||||
vm.loginState = 'message';
|
||||
vm.url = data.url;
|
||||
vm.errorMessage = l('The password was changed successfully.');
|
||||
}, function(msg) {
|
||||
vm.loginState = 'error';
|
||||
vm.errorMessage = msg;
|
||||
}, function (msg) {
|
||||
$mdToast.show(
|
||||
$mdToast.simple()
|
||||
.textContent(msg)
|
||||
.position(sgConstant.toastPosition)
|
||||
.hideDelay(2000)
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -260,38 +266,42 @@
|
||||
, this.passwordRecovery.passwordRecoveryMailDomain).then(function () {
|
||||
vm.loginState = 'sendrecoverymail';
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
}, function (msg) {
|
||||
vm.loginState = 'error';
|
||||
vm.errorMessage = msg;
|
||||
}, function (msg) {
|
||||
vm.loginState = 'error';
|
||||
vm.errorMessage = msg;
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
this.passwordRecoveryCheck = function () {
|
||||
vm.passwordRecovery.showLoader = true;
|
||||
Authentication.passwordRecoveryCheck(this.creds.username, this.creds.domain
|
||||
, this.passwordRecovery.passwordRecoveryMode
|
||||
, this.passwordRecovery.passwordRecoveryQuestionKey
|
||||
, this.passwordRecovery.passwordRecoveryQuestionAnswer
|
||||
, this.passwordRecovery.passwordRecoveryMailDomain).then(function (token) {
|
||||
if ("SecretQuestion" == vm.passwordRecovery.passwordRecoveryMode) {
|
||||
vm.passwordRecovery.passwordRecoveryToken = token;
|
||||
vm.loginState = 'passwordchange';
|
||||
} else if ("SecondaryEmail" == vm.passwordRecovery.passwordRecoveryMode) {
|
||||
vm.loginState = 'sendrecoverymail';
|
||||
}
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
}, function (msg) {
|
||||
vm.loginState = 'error';
|
||||
vm.errorMessage = msg;
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
});
|
||||
, this.passwordRecovery.passwordRecoveryMode
|
||||
, this.passwordRecovery.passwordRecoveryQuestionKey
|
||||
, this.passwordRecovery.passwordRecoveryQuestionAnswer
|
||||
, this.passwordRecovery.passwordRecoveryMailDomain).then(function (token) {
|
||||
if ("SecretQuestion" == vm.passwordRecovery.passwordRecoveryMode) {
|
||||
vm.passwordRecovery.passwordRecoveryToken = token;
|
||||
vm.loginState = 'passwordchange';
|
||||
} else if ("SecondaryEmail" == vm.passwordRecovery.passwordRecoveryMode) {
|
||||
vm.loginState = 'sendrecoverymail';
|
||||
}
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
}, function (msg) {
|
||||
vm.loginState = 'error';
|
||||
vm.errorMessage = msg;
|
||||
vm.passwordRecovery.showLoader = false;
|
||||
});
|
||||
};
|
||||
|
||||
this.isPasswordExpiredSecurity = function () {
|
||||
return (this.passwordexpired && 2 === this.passwordexpired);
|
||||
};
|
||||
|
||||
this.isInPasswordRecoveryMode = function () {
|
||||
return (("SecretQuestion" == this.passwordRecovery.passwordRecoveryMode ||
|
||||
"SecondaryEmail" == this.passwordRecovery.passwordRecoveryMode) &&
|
||||
this.passwordRecovery.passwordRecoveryToken) ? true : false;
|
||||
return (("SecretQuestion" == this.passwordRecovery.passwordRecoveryMode) ||
|
||||
("SecondaryEmail" == this.passwordRecovery.passwordRecoveryMode &&
|
||||
this.passwordRecovery.passwordRecoveryToken)) ? true : false;
|
||||
};
|
||||
|
||||
this.passwordRecoveryAbort = function () {
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function e(e,t){e.state("preferences",{abstract:!0,views:{preferences:{templateUrl:"preferences.html",controller:"PreferencesController",controllerAs:"app"}}}).state("preferences.general",{url:"/general",views:{module:{templateUrl:"generalPreferences.html"}}}).state("preferences.calendars",{url:"/calendars",views:{module:{templateUrl:"calendarsPreferences.html"}}}).state("preferences.addressbooks",{url:"/addressbooks",views:{module:{templateUrl:"addressbooksPreferences.html"}}}).state("preferences.mailer",{url:"/mailer",views:{module:{templateUrl:"mailerPreferences.html"}}}),t.rules.otherwise("/general")}function t(e,t,i,s){e.DebugEnabled||s.defaultErrorHandler(function(){}),i.onError({to:"preferences.**"},function(e){"preferences"==e.to().name||e.ignored()||(t.error("transition error to "+e.to().name+": "+e.error().detail),s.go({state:"preferences"}))})}angular.module("SOGo.PreferencesUI",["ui.router","sgCkeditor","angularFileUpload","SOGo.Common","SOGo.MailerUI","SOGo.ContactsUI","SOGo.Authentication","as.sortable"]).config(e).run(t),e.$inject=["$stateProvider","$urlServiceProvider"],t.$inject=["$window","$log","$transitions","$state"]}(),function(){"use strict";function e(a,e,t,i,r,s,n,o,c,d,f){var u=this,h=e.usesCASAuthentication||e.usesSAML2Authentication;function p(){u.account.security&&u.account.security.hasCertificate&&u.account.$certificate().then(function(e){u.certificate=e},function(){delete u.account.security.hasCertificate})}function m(e){e=0<e.type.indexOf("pkcs12")||/\.(p12|pfx)$/.test(e.name);return u.form.certificateFilename.$setValidity("fileformat",e),e}this.defaultPort=143,this.smtpDefaultPort=25,this.defaults=n,this.account=o,this.maxSize=f,this.accountId=c,this.hostnameRE=h&&0<c?/^(?!(127\.0\.0\.1|localhost(?:\.localdomain)?)$)/:/./,this.emailRE=String.emailRE,this.addressesSearchText="",this.ckConfig={autoGrow_minHeight:70,toolbar:{items:["bold","italic","|","fontColor","fontFamily","fontSize","|","link","|","specialCharacters","imageUpload","|","sourceEditing","htmlEmbed"],shouldNotGroupWhenFull:!0},language:n.ckLocaleCode},this.account.encryption?"ssl"==this.account.encryption&&(this.defaultPort=993):this.account.encryption="none",this.account.smtpEncryption?this.smtpDefaultPort=465:this.account.smtpEncryption="none",p(),this.uploader=new i({url:[s.activeUser("folderURL")+"Mail",c,"importCertificate"].join("/"),autoUpload:!1,queueLimit:1,filters:[{name:m,fn:m}],onAfterAddingFile:function(e){u.certificateFilename=e.file.name},onSuccessItem:function(e,t,i,s){this.clearQueue(),a(function(){_.assign(u.account,{security:{hasCertificate:!0},$$certificate:t})}),p()},onErrorItem:function(e,t,i,s){r.alert(l("Error"),l("An error occurred while importing the certificate. Verify your password."))}}),this.hasIdentities=function(){return 0<_.filter(this.account.identities,this.isEditableIdentity).length},this.isEditableIdentity=function(e){return!e.isReadOnly},this.selectIdentity=function(e){this.selectedIdentity==e?this.selectedIdentity=null:this.selectedIdentity=e},this.hasDefaultIdentity=function(){return 0<=_.findIndex(this.account.identities,function(e){return!!e.isDefault})},this.setDefaultIdentity=function(e,i){return _.forEach(this.account.identities,function(e,t){t==i?e.isDefault=!e.isDefault:delete e.isDefault}),e.stopPropagation(),!1},this.canRemoveIdentity=function(e){return e==this.selectedIdentity&&this.hasIdentities()},this.removeIdentity=function(e){this.account.identities.splice(e,1),this.selectedIdentity=null},this.addIdentity=function(){var e=_.findIndex(this.account.identities,{isReadOnly:1}),t={};e<0&&(e=this.account.identities.length),this.customFromIsReadonly()&&(t.fullName=this.account.identities[0].fullName),this.account.identities.splice(Math.max(e,0),0,t),this.selectedIdentity=e},this.showCkEditor=function(e){return this.selectedIdentity==e&&"html"==this.defaults.SOGoMailComposeMessageType},this.filterEmailAddresses=function(t){return _.filter(e.defaultEmailAddresses,function(e){return 0<=e.toLowerCase().indexOf(t.toLowerCase())})},this.customFromIsReadonly=function(){return!(0<c||d)},this.importCertificate=function(){this.uploader.queue[0].formData=[{password:this.certificatePassword}],this.uploader.uploadItem(0)},this.onBeforeUploadCertificate=function(e){this.form=e,this.uploader.clearQueue()},this.removeCertificate=function(){this.account.$removeCertificate()},this.cancel=function(){t.cancel()},this.save=function(){JSON.stringify(this.account).length>this.maxSize?r.alert(l("Error"),l("Data too big. Please contact technical support.")):t.hide()}}e.$inject=["$timeout","$window","$mdDialog","FileUploader","Dialog","sgSettings","defaults","account","accountId","mailCustomFromEnabled","maxSize"],angular.module("SOGo.PreferencesUI").controller("AccountDialogController",e)}(),function(){"use strict";function e(e,t,i,s,a,r,n,o,c){var d=t.sieveCapabilities,f=t.forwardEnabled,u=t.notificationEnabled;t.vacationEnabled;this.filter=a,this.mailboxes=r,thLine truncated
|
||||
(()=>{function e(e,t){e.state("preferences",{abstract:!0,views:{preferences:{templateUrl:"preferences.html",controller:"PreferencesController",controllerAs:"app"}}}).state("preferences.general",{url:"/general",views:{module:{templateUrl:"generalPreferences.html"}}}).state("preferences.calendars",{url:"/calendars",views:{module:{templateUrl:"calendarsPreferences.html"}}}).state("preferences.addressbooks",{url:"/addressbooks",views:{module:{templateUrl:"addressbooksPreferences.html"}}}).state("preferences.mailer",{url:"/mailer",views:{module:{templateUrl:"mailerPreferences.html"}}}),t.rules.otherwise("/general")}function t(e,t,i,s){e.DebugEnabled||s.defaultErrorHandler(function(){}),i.onError({to:"preferences.**"},function(e){"preferences"==e.to().name||e.ignored()||(t.error("transition error to "+e.to().name+": "+e.error().detail),s.go({state:"preferences"}))})}angular.module("SOGo.PreferencesUI",["ui.router","sgCkeditor","angularFileUpload","SOGo.Common","SOGo.MailerUI","SOGo.ContactsUI","SOGo.Authentication","as.sortable"]).config(e).run(t),e.$inject=["$stateProvider","$urlServiceProvider"],t.$inject=["$window","$log","$transitions","$state"]})(),(()=>{function e(a,e,t,i,r,s,n,o,c,d,f){var u=this,h=e.usesCASAuthentication||e.usesSAML2Authentication;function p(){u.account.security&&u.account.security.hasCertificate&&u.account.$certificate().then(function(e){u.certificate=e},function(){delete u.account.security.hasCertificate})}function m(e){e=0<e.type.indexOf("pkcs12")||/\.(p12|pfx)$/.test(e.name);return u.form.certificateFilename.$setValidity("fileformat",e),e}this.defaultPort=143,this.smtpDefaultPort=25,this.defaults=n,this.account=o,this.maxSize=f,this.accountId=c,this.hostnameRE=h&&0<c?/^(?!(127\.0\.0\.1|localhost(?:\.localdomain)?)$)/:/./,this.emailRE=String.emailRE,this.addressesSearchText="",this.ckConfig={autoGrow_minHeight:70,toolbar:{items:["bold","italic","|","fontColor","fontFamily","fontSize","|","link","|","specialCharacters","imageUpload","|","sourceEditing","htmlEmbed"],shouldNotGroupWhenFull:!0},language:n.ckLocaleCode},this.account.encryption?"ssl"==this.account.encryption&&(this.defaultPort=993):this.account.encryption="none",this.account.smtpEncryption?this.smtpDefaultPort=465:this.account.smtpEncryption="none",p(),this.uploader=new i({url:[s.activeUser("folderURL")+"Mail",c,"importCertificate"].join("/"),autoUpload:!1,queueLimit:1,filters:[{name:m,fn:m}],onAfterAddingFile:function(e){u.certificateFilename=e.file.name},onSuccessItem:function(e,t,i,s){this.clearQueue(),a(function(){_.assign(u.account,{security:{hasCertificate:!0},$$certificate:t})}),p()},onErrorItem:function(e,t,i,s){r.alert(l("Error"),l("An error occurred while importing the certificate. Verify your password."))}}),this.hasIdentities=function(){return 0<_.filter(this.account.identities,this.isEditableIdentity).length},this.isEditableIdentity=function(e){return!e.isReadOnly},this.selectIdentity=function(e){this.selectedIdentity==e?this.selectedIdentity=null:this.selectedIdentity=e},this.hasDefaultIdentity=function(){return 0<=_.findIndex(this.account.identities,function(e){return!!e.isDefault})},this.setDefaultIdentity=function(e,i){return _.forEach(this.account.identities,function(e,t){t==i?e.isDefault=!e.isDefault:delete e.isDefault}),e.stopPropagation(),!1},this.canRemoveIdentity=function(e){return e==this.selectedIdentity&&this.hasIdentities()},this.removeIdentity=function(e){this.account.identities.splice(e,1),this.selectedIdentity=null},this.addIdentity=function(){var e=_.findIndex(this.account.identities,{isReadOnly:1}),t={};e<0&&(e=this.account.identities.length),this.customFromIsReadonly()&&(t.fullName=this.account.identities[0].fullName),this.account.identities.splice(Math.max(e,0),0,t),this.selectedIdentity=e},this.showCkEditor=function(e){return this.selectedIdentity==e&&"html"==this.defaults.SOGoMailComposeMessageType},this.filterEmailAddresses=function(t){return _.filter(e.defaultEmailAddresses,function(e){return 0<=e.toLowerCase().indexOf(t.toLowerCase())})},this.customFromIsReadonly=function(){return!(0<c||d)},this.importCertificate=function(){this.uploader.queue[0].formData=[{password:this.certificatePassword}],this.uploader.uploadItem(0)},this.onBeforeUploadCertificate=function(e){this.form=e,this.uploader.clearQueue()},this.removeCertificate=function(){this.account.$removeCertificate()},this.cancel=function(){t.cancel()},this.save=function(){JSON.stringify(this.account).length>this.maxSize?r.alert(l("Error"),l("Data too big. Please contact technical support.")):t.hide()}}e.$inject=["$timeout","$window","$mdDialog","FileUploader","Dialog","sgSettings","defaults","account","accountId","mailCustomFromEnabled","maxSize"],angular.module("SOGo.PreferencesUI").controller("AccountDialogController",e)})(),(()=>{function e(e,t,i,s,a,r,n,o,c){var d=t.sieveCapabilities,f=t.forwardEnabled,t=t.notificationEnabled;this.filter=a,this.mailboxes=r,this.labels=n,this.fieldLabels={subject:l("Subject"),from:l("From"),to:l(Line truncated
|
||||
//# sourceMappingURL=Preferences.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Preferences.js","sources":["Preferences/Preferences.app.js","Preferences/AccountDialogController.js","Preferences/FiltersDialogController.js","Preferences/PreferencesController.js"],"names":["configure","$stateProvider","$urlServiceProvider","state","abstract","views","preferences","templateUrl","controller","controllerAs","url","module","rules","otherwise","runBlock","$window","$log","$transitions","$state","DebugEnabled","defaultErrorHandler","onError","to","transition","name","ignored","error","detail","go","angular","config","run","$inject","AccountDialogController","$timeout","$mdDialog","FileUploader","Dialog","Settings","defaults","account","accountId","mailCustomFromEnabled","maxSize","vm","this","usesSSO","usesCASAuthentication","usesSAML2Authentication","_loadCertificate","security","hasCertificate","$certificate","then","crt","certificate","filterByExtension","item","isP12File","type","indexOf","test","form","certificateFilename","$setValidity","defaultPort","smtpDefaultPort","hostnameRE","emailRE","String","addressesSearchText","ckConfig","autoGrow_minHeight","toolbar","items","shouldNotGroupWhenFull","language","ckLocaleCode","encryption","smtpEncryption","uploader","activeUser","join","autoUpload","queueLimit","filters","fn","onAfterAddingFile","file","onSuccessItem","response","status","headers","clearQueue","_","assign","$$certificate","onErrorItem","alert","l","hasIdentities","filter","identities","isEditableIdentity","length","identity","isReadOnly","selectIdentity","index","selectedIdentity","hasDefaultIdentity","findIndex","isDefault","setDefaultIdentity","$event","$index","forEach","i","stopPropagation","canRemoveIdentity","removeIdentity","splice","addIdentity","firstReadonlyIndex","customFromIsReadonly","fullName","Math","max","showCkEditor","SOGoMailComposeMessageType","filterEmailAddresses","$query","defaultEmailAddresses","address","toLowerCase","importCertificate","queue","formData","password","certificatePassword","uploadItem","onBeforeUploadCertificate","removeCertificate","$removeCertificate","cancel","save","JSON","stringify","hide","FiltersDialogController","$scope","mailboxes","labels","validateForwardAddress","Preferences","sieveCapabilities","forwardEnabled","notificationEnabled","vacationEnabled","fieldLabels","subject","from","cc","to_or_cc","size","header","body","methodLabels","discard","keep","stop","redirect","notify","reject","fileinto","addflag","methods","intersection","keys","numberOperatorLabels","under","over","textOperatorLabels","is","is_not","contains","contains_not","matches","matches_not","regex","regex_not","hasRulesAndActions","requirements","actions","match","push","every","a","invalid","method","action","argument","err","message","addMailFilterRule","event","field","operator","removeMailFilterRule","addMailFilterAction","removeMailFilterAction","PreferencesController","$q","$mdMedia","$mdSidenav","$mdToast","sgSettings","focus","User","Account","Authentication","AddressBook","Date","beginOfDay","_loadAllMailboxes","mail","id","$getMailboxes","allMailboxes","$flattenMailboxes","all","domain","domains","forwardConstraints","defaultAddresses","adr","split","Error","forwardConstraintsDomains","$onInit","passwords","newPassword","newPasswordConfirmation","oldPassword","timeZonesList","timeZonesSearchText","autocomplete","forward","notification","mailLabelKeyRE","RegExp","emailSeparatorKeys","Notification","notificationMessage","notificationTranslated","SOGoMailAutoMarkAsReadMode","mailAutoMarkAsReadDelay","SOGoMailAutoMarkAsReadDelay","SOGoAlternateAvatar","$alternateAvatar","sieveVariablesCapability","hasActiveExternalSieveScripts","updateVacationDates","$valid","close","onLanguageChange","confirm","ok","quick","location","reload","onDesktopNotificationsChange","SOGoDesktopNotifications","authorizeNotifications","resetContactsCategories","SOGoContactsCategories","defaultContactsCategories","slice","$setDirty","resetCalendarCategories","SOGoCalendarCategories","defaultCalendarCategories","SOGoCalendarCategoriesColorsValues","values","addCalendarCategory","resetCalendarCategoryValidity","removeCalendarCategory","addContactCategory","removeContactCategory","onMailAutoMarkAsReadDelay","addMailAccount","ev","AuxiliaryMailAccounts","isNew","email","receipts","receiptAction","receiptNonRecipientAction","receiptOutsideDomainAction","receiptAnyAction","show","targetEvent","locals","CDefaultsSize","isArray","settings","Mail","ExpandedFolders","$omit","editMailAccount","data","cloneDeep","catch","noop","removeMailAccount","resetMailLabelValidity","addMailLabel","guid","SOGoMailLabelsColorsKeys","SOGoMailLabelsColorsValues","removeMailLabel","addMailFilter","active","SOGoMailLabelsColors","SOGoSieveFilters","editMailFilter","copy","removeMailFilter","onFiltersOrderChanged","_onFiltersOrderChanged","difference","Vacation","autoReplyEmailAddresses","addDefaultEmailAddresses","v","isDefined","union","userFilter","search","excludedUsers","minimumSearLine truncated
|
||||
{"version":3,"file":"Preferences.js","sources":["Preferences/Preferences.app.js","Preferences/AccountDialogController.js","Preferences/FiltersDialogController.js","Preferences/PreferencesController.js"],"names":["configure","$stateProvider","$urlServiceProvider","state","abstract","views","preferences","templateUrl","controller","controllerAs","url","module","rules","otherwise","runBlock","$window","$log","$transitions","$state","DebugEnabled","defaultErrorHandler","onError","to","transition","name","ignored","error","detail","go","angular","config","run","$inject","AccountDialogController","$timeout","$mdDialog","FileUploader","Dialog","Settings","defaults","account","accountId","mailCustomFromEnabled","maxSize","vm","this","usesSSO","usesCASAuthentication","usesSAML2Authentication","_loadCertificate","security","hasCertificate","$certificate","then","crt","certificate","filterByExtension","item","isP12File","type","indexOf","test","form","certificateFilename","$setValidity","defaultPort","smtpDefaultPort","hostnameRE","emailRE","String","addressesSearchText","ckConfig","autoGrow_minHeight","toolbar","items","shouldNotGroupWhenFull","language","ckLocaleCode","encryption","smtpEncryption","uploader","activeUser","join","autoUpload","queueLimit","filters","fn","onAfterAddingFile","file","onSuccessItem","response","status","headers","clearQueue","_","assign","$$certificate","onErrorItem","alert","l","hasIdentities","filter","identities","isEditableIdentity","length","identity","isReadOnly","selectIdentity","index","selectedIdentity","hasDefaultIdentity","findIndex","isDefault","setDefaultIdentity","$event","$index","forEach","i","stopPropagation","canRemoveIdentity","removeIdentity","splice","addIdentity","firstReadonlyIndex","customFromIsReadonly","fullName","Math","max","showCkEditor","SOGoMailComposeMessageType","filterEmailAddresses","$query","defaultEmailAddresses","address","toLowerCase","importCertificate","queue","formData","password","certificatePassword","uploadItem","onBeforeUploadCertificate","removeCertificate","$removeCertificate","cancel","save","JSON","stringify","hide","FiltersDialogController","$scope","mailboxes","labels","validateForwardAddress","Preferences","sieveCapabilities","forwardEnabled","notificationEnabled","fieldLabels","subject","from","cc","to_or_cc","size","header","body","methodLabels","discard","keep","stop","redirect","notify","reject","fileinto","addflag","methods","intersection","keys","numberOperatorLabels","under","over","textOperatorLabels","is","is_not","contains","contains_not","matches","matches_not","regex","regex_not","hasRulesAndActions","requirements","actions","match","push","every","a","invalid","method","action","argument","err","message","addMailFilterRule","event","field","operator","removeMailFilterRule","addMailFilterAction","removeMailFilterAction","PreferencesController","$q","$mdMedia","$mdSidenav","$mdToast","sgSettings","focus","User","Account","Authentication","AddressBook","Date","beginOfDay","_loadAllMailboxes","mail","id","$getMailboxes","allMailboxes","$flattenMailboxes","all","domain","domains","forwardConstraints","defaultAddresses","adr","split","Error","forwardConstraintsDomains","$onInit","passwords","newPassword","newPasswordConfirmation","oldPassword","timeZonesList","timeZonesSearchText","autocomplete","forward","notification","mailLabelKeyRE","RegExp","emailSeparatorKeys","Notification","notificationMessage","notificationTranslated","SOGoMailAutoMarkAsReadMode","mailAutoMarkAsReadDelay","SOGoMailAutoMarkAsReadDelay","SOGoAlternateAvatar","$alternateAvatar","sieveVariablesCapability","hasActiveExternalSieveScripts","updateVacationDates","$valid","close","onLanguageChange","confirm","ok","quick","location","reload","onDesktopNotificationsChange","SOGoDesktopNotifications","authorizeNotifications","resetContactsCategories","SOGoContactsCategories","defaultContactsCategories","slice","$setDirty","resetCalendarCategories","SOGoCalendarCategories","defaultCalendarCategories","SOGoCalendarCategoriesColorsValues","values","addCalendarCategory","resetCalendarCategoryValidity","removeCalendarCategory","addContactCategory","removeContactCategory","onMailAutoMarkAsReadDelay","addMailAccount","ev","AuxiliaryMailAccounts","isNew","email","receipts","receiptAction","receiptNonRecipientAction","receiptOutsideDomainAction","receiptAnyAction","show","targetEvent","locals","CDefaultsSize","isArray","settings","Mail","ExpandedFolders","$omit","editMailAccount","data","cloneDeep","catch","noop","removeMailAccount","resetMailLabelValidity","addMailLabel","guid","SOGoMailLabelsColorsKeys","SOGoMailLabelsColorsValues","removeMailLabel","addMailFilter","active","SOGoMailLabelsColors","SOGoSieveFilters","editMailFilter","copy","removeMailFilter","onFiltersOrderChanged","_onFiltersOrderChanged","difference","Vacation","autoReplyEmailAddresses","addDefaultEmailAddresses","v","isDefined","union","userFilter","search","excludedUsers","minimumSearchLength","$filterLine truncated
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function p(){var e,t,a,o,i=this;if(this.nextAlarm=null,this.nextInboxPoll=null,this.currentToast=p.$q.when(!0),this.lastUid=null,this.notifications={},this.defaults={},this.settings={Mail:{}},e=p.$document[0].getElementById("UserDefaults")){try{t=angular.fromJson(e.textContent||e.innerHTML)}catch(e){p.$log.error("Can't parse user's defaults: "+e.message),t={}}if(t.SOGoMailLabelsColorsKeys=[],t.SOGoMailLabelsColorsValues=[],_.forEach(t.SOGoMailLabelsColors,function(e,a){t.SOGoMailLabelsColorsKeys.push(a),t.SOGoMailLabelsColorsValues.push(e),"$"==a.charAt(0)&&(Object.defineProperty(t.SOGoMailLabelsColors,"_"+a,Object.getOwnPropertyDescriptor(t.SOGoMailLabelsColors,a)),delete t.SOGoMailLabelsColors[a])}),_.forEach(t.SOGoSieveFilters,function(e){_.forEach(e.actions,function(e){"addflag"==e.method&&"$"==e.argument.charAt(0)&&(e.argument="_"+e.argument)})}),t.SOGoRememberLastModule&&(t.SOGoLoginModule="Last"),t.SOGoMailAutoMarkAsReadDelay=parseInt(t.SOGoMailAutoMarkAsReadDelay)||0,t.SOGoMailAutoMarkAsReadEnabled=0<=t.SOGoMailAutoMarkAsReadDelay,0<t.SOGoMailAutoMarkAsReadDelay?t.SOGoMailAutoMarkAsReadMode="delay":t.SOGoMailAutoMarkAsReadMode="immediate",t.SOGoMailAutoSave=parseInt(t.SOGoMailAutoSave)||0,t.SOGoMailComposeWindowEnabled=angular.isDefined(t.SOGoMailComposeWindow),t.SOGoMailComposeFontSizeEnabled=0<parseInt(t.SOGoMailComposeFontSize),window.CKEDITOR&&t.SOGoMailComposeFontSizeEnabled&&(window.CKEDITOR.config.fontSize_defaultLabel=t.SOGoMailComposeFontSize,window.CKEDITOR.addCss(".cke_editable { font-size: "+t.SOGoMailComposeFontSize+"px; }")),_.forEach(t.AuxiliaryMailAccounts,function(e){isNaN(parseInt(e.port))&&(e.port=null)}),t.Vacation?(t.Vacation.startDate&&(t.Vacation.startDate=new Date(1e3*parseInt(t.Vacation.startDate))),t.Vacation.endDate&&(t.Vacation.endDate=new Date(1e3*parseInt(t.Vacation.endDate))),t.Vacation.startTime&&(a=t.Vacation.startTime.split(":"),t.Vacation.startTime=new Date,t.Vacation.startTime.setHours(parseInt(a[0]),parseInt(a[1]))),t.Vacation.endTime&&(a=t.Vacation.endTime.split(":"),t.Vacation.endTime=new Date,t.Vacation.endTime.setHours(parseInt(a[0]),parseInt(a[1]))),t.Vacation.autoReplyEmailAddresses&&angular.isString(t.Vacation.autoReplyEmailAddresses)&&t.Vacation.autoReplyEmailAddresses.length&&(t.Vacation.autoReplyEmailAddresses=t.Vacation.autoReplyEmailAddresses.split(/, */))):t.Vacation={},angular.isUndefined(t.Vacation.days)&&(t.Vacation.days=[]),(angular.isUndefined(t.Vacation.autoReplyEmailAddresses)||0==t.Vacation.autoReplyEmailAddresses.length)&&angular.isDefined(window.defaultEmailAddresses)&&(t.Vacation.autoReplyEmailAddresses=window.defaultEmailAddresses.slice()),angular.isUndefined(t.Vacation.daysBetweenResponse)&&(t.Vacation.daysBetweenResponse=7),!angular.isUndefined(t.Vacation.startDate)&&t.Vacation.startDate||(t.Vacation.startDateEnabled=0,t.Vacation.startDate=new Date,t.Vacation.startDate=t.Vacation.startDate.beginOfDay(),t.Vacation.startDate.addDays(1)),!angular.isUndefined(t.Vacation.endDate)&&t.Vacation.endDate||(t.Vacation.endDateEnabled=0,t.Vacation.endDate=new Date(t.Vacation.startDate.getTime()),t.Vacation.endDate.addDays(1)),!angular.isUndefined(t.Vacation.startTime)&&t.Vacation.startTime||(t.Vacation.startTimeEnabled=0,t.Vacation.startTime=new Date,t.Vacation.startTime.setHours(parseInt(t.SOGoDayEndTime)),t.Vacation.startTime.setMinutes(0)),!angular.isUndefined(t.Vacation.endTime)&&t.Vacation.endTime||(t.Vacation.endTimeEnabled=0,t.Vacation.endTime=new Date,t.Vacation.endTime.setHours(parseInt(t.SOGoDayStartTime)),t.Vacation.endTime.setMinutes(0)),t.Forward&&(angular.isString(t.Forward.forwardAddress)?t.Forward.forwardAddress=t.Forward.forwardAddress.split(/, */):angular.isArray(t.Forward.forwardAddress)||(t.Forward.forwardAddress=[])),t.Notification&&(angular.isString(t.Notification.notificationAddress)?t.Notification.notificationAddress=t.Notification.notificationAddress.split(/, */):angular.isArray(t.Notification.notificationAddress)||(t.Notification.notificationAddress=[])),angular.isUndefined(t.SOGoCalendarCategories)&&(t.SOGoCalendarCategories=[]),t.SOGoCalendarCategoriesColorsValues=[],_.forEach(t.SOGoCalendarCategories,function(e){t.SOGoCalendarCategoriesColorsValues.push(t.SOGoCalendarCategoriesColors[e])}),angular.isUndefined(t.SOGoContactsCategories)?t.SOGoContactsCategories=[]:t.SOGoContactsCategories=_.compact(t.SOGoContactsCategories),t.emailSeparatorKeys=[9,13,186,188],t.LocaleCode)switch(t.ckLocaleCode=t.LocaleCode.replace("_","-").toLowerCase(),t.LocaleCode){case"it":t.emailSeparatorKeys=[9,13,188];break;case"ru":t.emailSeparatorKeys=[9,13];break;case"sr_ME":case"sr_RS":t.ckLocaleCode="sr-latn"}angular.extend(i.defaults,t),i.$mdDateLocaleProvider=p.$mdDateLocaleProvider,angular.extend(i.$mdDateLocaleProvider,t.locale),angular.extend(i.$mdDateLocaleProvider,{firstDayOfWeek:t.SOGoFirstDayOfWeek,firstWeekOfYear:t.SOGoFirstWeekOfYear}),i.$mdDateLocaleProvider.firstDayOfWeek=parseInt(t.SOGoFirstDayOfWeek),i.$mLine truncated
|
||||
(()=>{function p(){var e,t,a,o,i=this;if(this.nextAlarm=null,this.nextInboxPoll=null,this.currentToast=p.$q.when(!0),this.lastUid=null,this.notifications={},this.defaults={},this.settings={Mail:{}},e=p.$document[0].getElementById("UserDefaults")){try{t=angular.fromJson(e.textContent||e.innerHTML)}catch(e){p.$log.error("Can't parse user's defaults: "+e.message),t={}}if(t.SOGoMailLabelsColorsKeys=[],t.SOGoMailLabelsColorsValues=[],_.forEach(t.SOGoMailLabelsColors,function(e,a){t.SOGoMailLabelsColorsKeys.push(a),t.SOGoMailLabelsColorsValues.push(e),"$"==a.charAt(0)&&(Object.defineProperty(t.SOGoMailLabelsColors,"_"+a,Object.getOwnPropertyDescriptor(t.SOGoMailLabelsColors,a)),delete t.SOGoMailLabelsColors[a])}),_.forEach(t.SOGoSieveFilters,function(e){_.forEach(e.actions,function(e){"addflag"==e.method&&"$"==e.argument.charAt(0)&&(e.argument="_"+e.argument)})}),t.SOGoRememberLastModule&&(t.SOGoLoginModule="Last"),t.SOGoMailAutoMarkAsReadDelay=parseInt(t.SOGoMailAutoMarkAsReadDelay)||0,t.SOGoMailAutoMarkAsReadEnabled=0<=t.SOGoMailAutoMarkAsReadDelay,0<t.SOGoMailAutoMarkAsReadDelay?t.SOGoMailAutoMarkAsReadMode="delay":t.SOGoMailAutoMarkAsReadMode="immediate",t.SOGoMailAutoSave=parseInt(t.SOGoMailAutoSave)||0,t.SOGoMailComposeWindowEnabled=angular.isDefined(t.SOGoMailComposeWindow),t.SOGoMailComposeFontSizeEnabled=0<parseInt(t.SOGoMailComposeFontSize),window.CKEDITOR&&t.SOGoMailComposeFontSizeEnabled&&(window.CKEDITOR.config.fontSize_defaultLabel=t.SOGoMailComposeFontSize,window.CKEDITOR.addCss(".cke_editable { font-size: "+t.SOGoMailComposeFontSize+"px; }")),_.forEach(t.AuxiliaryMailAccounts,function(e){isNaN(parseInt(e.port))&&(e.port=null)}),t.Vacation?(t.Vacation.startDate&&(t.Vacation.startDate=new Date(1e3*parseInt(t.Vacation.startDate))),t.Vacation.endDate&&(t.Vacation.endDate=new Date(1e3*parseInt(t.Vacation.endDate))),t.Vacation.startTime&&(a=t.Vacation.startTime.split(":"),t.Vacation.startTime=new Date,t.Vacation.startTime.setHours(parseInt(a[0]),parseInt(a[1]))),t.Vacation.endTime&&(a=t.Vacation.endTime.split(":"),t.Vacation.endTime=new Date,t.Vacation.endTime.setHours(parseInt(a[0]),parseInt(a[1]))),t.Vacation.autoReplyEmailAddresses&&angular.isString(t.Vacation.autoReplyEmailAddresses)&&t.Vacation.autoReplyEmailAddresses.length&&(t.Vacation.autoReplyEmailAddresses=t.Vacation.autoReplyEmailAddresses.split(/, */))):t.Vacation={},angular.isUndefined(t.Vacation.days)&&(t.Vacation.days=[]),(angular.isUndefined(t.Vacation.autoReplyEmailAddresses)||0==t.Vacation.autoReplyEmailAddresses.length)&&angular.isDefined(window.defaultEmailAddresses)&&(t.Vacation.autoReplyEmailAddresses=window.defaultEmailAddresses.slice()),angular.isUndefined(t.Vacation.daysBetweenResponse)&&(t.Vacation.daysBetweenResponse=7),!angular.isUndefined(t.Vacation.startDate)&&t.Vacation.startDate||(t.Vacation.startDateEnabled=0,t.Vacation.startDate=new Date,t.Vacation.startDate=t.Vacation.startDate.beginOfDay(),t.Vacation.startDate.addDays(1)),!angular.isUndefined(t.Vacation.endDate)&&t.Vacation.endDate||(t.Vacation.endDateEnabled=0,t.Vacation.endDate=new Date(t.Vacation.startDate.getTime()),t.Vacation.endDate.addDays(1)),!angular.isUndefined(t.Vacation.startTime)&&t.Vacation.startTime||(t.Vacation.startTimeEnabled=0,t.Vacation.startTime=new Date,t.Vacation.startTime.setHours(parseInt(t.SOGoDayEndTime)),t.Vacation.startTime.setMinutes(0)),!angular.isUndefined(t.Vacation.endTime)&&t.Vacation.endTime||(t.Vacation.endTimeEnabled=0,t.Vacation.endTime=new Date,t.Vacation.endTime.setHours(parseInt(t.SOGoDayStartTime)),t.Vacation.endTime.setMinutes(0)),t.Forward&&(angular.isString(t.Forward.forwardAddress)?t.Forward.forwardAddress=t.Forward.forwardAddress.split(/, */):angular.isArray(t.Forward.forwardAddress)||(t.Forward.forwardAddress=[])),t.Notification&&(angular.isString(t.Notification.notificationAddress)?t.Notification.notificationAddress=t.Notification.notificationAddress.split(/, */):angular.isArray(t.Notification.notificationAddress)||(t.Notification.notificationAddress=[])),angular.isUndefined(t.SOGoCalendarCategories)&&(t.SOGoCalendarCategories=[]),t.SOGoCalendarCategoriesColorsValues=[],_.forEach(t.SOGoCalendarCategories,function(e){t.SOGoCalendarCategoriesColorsValues.push(t.SOGoCalendarCategoriesColors[e])}),angular.isUndefined(t.SOGoContactsCategories)?t.SOGoContactsCategories=[]:t.SOGoContactsCategories=_.compact(t.SOGoContactsCategories),t.emailSeparatorKeys=[9,13,186,188],t.LocaleCode)switch(t.ckLocaleCode=t.LocaleCode.replace("_","-").toLowerCase(),t.LocaleCode){case"it":t.emailSeparatorKeys=[9,13,188];break;case"ru":t.emailSeparatorKeys=[9,13];break;case"sr_ME":case"sr_RS":t.ckLocaleCode="sr-latn"}angular.extend(i.defaults,t),i.$mdDateLocaleProvider=p.$mdDateLocaleProvider,angular.extend(i.$mdDateLocaleProvider,t.locale),angular.extend(i.$mdDateLocaleProvider,{firstDayOfWeek:t.SOGoFirstDayOfWeek,firstWeekOfYear:t.SOGoFirstWeekOfYear}),i.$mdDateLocaleProvider.firstDayOfWeek=parseInt(t.SOGoFirstDayOfWeek),i.$mdDateLocaleProviderLine truncated
|
||||
//# sourceMappingURL=Preferences.services.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Preferences.services.js","sources":["Preferences/Preferences.service.js"],"names":["Preferences","settingsElement","data","time","reloadPromises","_this","this","nextAlarm","nextInboxPoll","currentToast","$q","when","lastUid","notifications","defaults","settings","Mail","defaultsElement","$document","getElementById","angular","fromJson","textContent","innerHTML","e","$log","error","message","SOGoMailLabelsColorsKeys","SOGoMailLabelsColorsValues","_","forEach","SOGoMailLabelsColors","value","key","push","charAt","Object","defineProperty","getOwnPropertyDescriptor","SOGoSieveFilters","filter","actions","action","method","argument","SOGoRememberLastModule","SOGoLoginModule","SOGoMailAutoMarkAsReadDelay","parseInt","SOGoMailAutoMarkAsReadEnabled","SOGoMailAutoMarkAsReadMode","SOGoMailAutoSave","SOGoMailComposeWindowEnabled","isDefined","SOGoMailComposeWindow","SOGoMailComposeFontSizeEnabled","SOGoMailComposeFontSize","window","CKEDITOR","config","fontSize_defaultLabel","addCss","AuxiliaryMailAccounts","mailAccount","isNaN","port","Vacation","startDate","Date","endDate","startTime","split","setHours","endTime","autoReplyEmailAddresses","isString","length","isUndefined","days","defaultEmailAddresses","slice","daysBetweenResponse","startDateEnabled","beginOfDay","addDays","endDateEnabled","getTime","startTimeEnabled","SOGoDayEndTime","setMinutes","endTimeEnabled","SOGoDayStartTime","Forward","forwardAddress","isArray","Notification","notificationAddress","SOGoCalendarCategories","SOGoCalendarCategoriesColorsValues","SOGoCalendarCategoriesColors","SOGoContactsCategories","compact","emailSeparatorKeys","LocaleCode","ckLocaleCode","replace","toLowerCase","extend","$mdDateLocaleProvider","locale","firstDayOfWeek","SOGoFirstDayOfWeek","firstWeekOfYear","SOGoFirstWeekOfYear","weekNumberFormatter","weekNumber","l","msgCalendar","msgOpenCalendar","parseDate","dateString","SOGoShortDateFormat","NaN","formatDate","date","format","$dateFormat","parseTime","timeString","SOGoTimeFormat","formatTime","isDateComplete","trim","test","Calendar","ReloadWebCalendars","AutoReloadedWebCalendars","map","autoReload","id","calendarId","deferred","defer","$$resource","quietFetch","finally","resolve","promise","all","then","save","$omit","$rootScope","$emit","PreventInvitationsWhitelist","match","exec","user","$User","uid","cn","c_email","$$image","avatar","no_404","$factory","$window","$timeout","$state","$mdToast","sgConstant","Settings","Gravatar","Resource","User","$toast","$gravatar","activeUser","$resourcesURL","resourcesURL","$sgConstant","module","factory","prototype","ready","warn","email","size","options","alternate_avatar","SOGoAlternateAvatar","url","SOGoGravatarEnabled","join","dstObject","dstAttr","hasActiveExternalSieveScripts","response","status","supportsNotifications","isItemSecretQuestion","SOGoPasswordRecoveryMode","isItemSecondaryEmail","authorizeNotifications","requestPermission","permission","createNotification","title","params","pick","tag","lang","dir","onclick","onClick","close","viewInboxMessage","get","go","accountId","mailboxId","messageId","location","path","pollInbox","toastController","scope","body","hide","sortingAttributes","sort","asc","noHeaders","dry","filters","searchBy","searchInput","cancel","inboxSyncToken","syncToken","$inject","post","debug","headers","uidHeaderIndex","indexOf","isReadHeaderIndex","fromHeaderIndex","subjectHeaderIndex","showToast","show","locals","i","toast","SOGoDesktopNotifications","href","name","icon","bind","template","position","toastPosition","hideDelay","controller","refreshViewCheck","SOGoRefreshViewCheck","timeInterval","getAlarms","now","browserTime","Math","floor","fetch","delay","f","alarms","a","b","x","next","pop","utc","alarmTime","showAlarm","today","day","asDate","period","AlarmController","summary","reminder","snooze","localizedStartDate","localizedEndDate","isAllDay","localizedStartTime","localizedEndTime","view","getDayString","$save","deep","preferences","whitelist","copy","substring","account","identities","identity","isReadOnly","$shortFormat"],"mappings":"AAEA,CAAA,WAEE,aAMA,SAASA,IACP,IAAmCC,EAAiBC,EAAMC,EAqPhDC,EArPNC,EAAQC,KAYZ,GAVAA,KAAKC,UAAY,KACjBD,KAAKE,cAAgB,KACrBF,KAAKG,aAAeT,EAAYU,GAAGC,KAAK,CAAA,CAAI,EAC5CL,KAAKM,QAAU,KACfN,KAAKO,cAAgB,GAErBP,KAAKQ,SAAW,GAChBR,KAAKS,SAAW,CAACC,KAAM,EAAE,EAEzBC,EAAkBjB,EAAYkB,UAAU,GAAGC,eAAe,cAAc,EACnD,CACnB,IACEjB,EAAOkB,QAAQC,SAASJ,EAAgBK,aAAeL,EAAgBM,SAAS,CAIlF,CAHE,MAAOC,GACPxB,EAAYyB,KAAKC,MAAM,gCAAkCF,EAAEG,OAAO,EAClEzB,EAAO,EACT,CAqJA,GAlJAA,EAAK0B,yBAA2B,GAChC1B,EAAK2B,2BAA6B,GAClCC,EAAEC,QAAQ7B,EAAK8B,qBAAsB,SAAUC,EAAOC,GACpDhC,EAAK0B,yBAAyBO,KAAKD,CAAG,EACtChC,EAAK2B,2BAA2BM,KAAKF,CAAK,EACrB,KAAjBC,EAAIE,OAAO,CAAC,IACdC,OAAOC,eAAepC,EAAK8B,qBAAsB,IAAME,EACjCG,OAAOE,yBAAyBrC,EAAK8B,qBAAsBE,CAAG,CAAC,EACrF,OAAOhC,EAAK8B,qBAAqBE,GAErC,CAAC,EAEDJ,EAAEC,QAAQ7B,EAAKsC,iBAAkB,SAASC,GACxCX,EAAEC,QAAQU,EAAOC,QAAS,SAASC,GACZ,WAAjBA,EAAOC,QACsB,KAA7BD,EAAOE,SAAST,OAAO,CAAC,IAC1BO,EAAOE,SAAW,ILine truncated
|
||||
{"version":3,"file":"Preferences.services.js","sources":["Preferences/Preferences.service.js"],"names":["Preferences","settingsElement","data","time","reloadPromises","_this","this","nextAlarm","nextInboxPoll","currentToast","$q","when","lastUid","notifications","defaults","settings","Mail","defaultsElement","$document","getElementById","angular","fromJson","textContent","innerHTML","e","$log","error","message","SOGoMailLabelsColorsKeys","SOGoMailLabelsColorsValues","_","forEach","SOGoMailLabelsColors","value","key","push","charAt","Object","defineProperty","getOwnPropertyDescriptor","SOGoSieveFilters","filter","actions","action","method","argument","SOGoRememberLastModule","SOGoLoginModule","SOGoMailAutoMarkAsReadDelay","parseInt","SOGoMailAutoMarkAsReadEnabled","SOGoMailAutoMarkAsReadMode","SOGoMailAutoSave","SOGoMailComposeWindowEnabled","isDefined","SOGoMailComposeWindow","SOGoMailComposeFontSizeEnabled","SOGoMailComposeFontSize","window","CKEDITOR","config","fontSize_defaultLabel","addCss","AuxiliaryMailAccounts","mailAccount","isNaN","port","Vacation","startDate","Date","endDate","startTime","split","setHours","endTime","autoReplyEmailAddresses","isString","length","isUndefined","days","defaultEmailAddresses","slice","daysBetweenResponse","startDateEnabled","beginOfDay","addDays","endDateEnabled","getTime","startTimeEnabled","SOGoDayEndTime","setMinutes","endTimeEnabled","SOGoDayStartTime","Forward","forwardAddress","isArray","Notification","notificationAddress","SOGoCalendarCategories","SOGoCalendarCategoriesColorsValues","SOGoCalendarCategoriesColors","SOGoContactsCategories","compact","emailSeparatorKeys","LocaleCode","ckLocaleCode","replace","toLowerCase","extend","$mdDateLocaleProvider","locale","firstDayOfWeek","SOGoFirstDayOfWeek","firstWeekOfYear","SOGoFirstWeekOfYear","weekNumberFormatter","weekNumber","l","msgCalendar","msgOpenCalendar","parseDate","dateString","SOGoShortDateFormat","NaN","formatDate","date","format","$dateFormat","parseTime","timeString","SOGoTimeFormat","formatTime","isDateComplete","trim","test","Calendar","ReloadWebCalendars","AutoReloadedWebCalendars","map","autoReload","id","calendarId","deferred","defer","$$resource","quietFetch","finally","resolve","promise","all","then","save","$omit","$rootScope","$emit","PreventInvitationsWhitelist","match","exec","user","$User","uid","cn","c_email","$$image","avatar","no_404","$factory","$window","$timeout","$state","$mdToast","sgConstant","Settings","Gravatar","Resource","User","$toast","$gravatar","activeUser","$resourcesURL","resourcesURL","$sgConstant","module","factory","prototype","ready","warn","email","size","options","alternate_avatar","SOGoAlternateAvatar","url","SOGoGravatarEnabled","join","dstObject","dstAttr","hasActiveExternalSieveScripts","response","status","supportsNotifications","isItemSecretQuestion","SOGoPasswordRecoveryMode","isItemSecondaryEmail","authorizeNotifications","requestPermission","permission","createNotification","title","params","pick","tag","lang","dir","onclick","onClick","close","viewInboxMessage","get","go","accountId","mailboxId","messageId","location","path","pollInbox","toastController","scope","body","hide","sortingAttributes","sort","asc","noHeaders","dry","filters","searchBy","searchInput","cancel","inboxSyncToken","syncToken","$inject","post","debug","headers","uidHeaderIndex","indexOf","isReadHeaderIndex","fromHeaderIndex","subjectHeaderIndex","showToast","show","locals","i","toast","SOGoDesktopNotifications","href","name","icon","bind","template","position","toastPosition","hideDelay","controller","refreshViewCheck","SOGoRefreshViewCheck","timeInterval","getAlarms","now","browserTime","Math","floor","fetch","delay","f","alarms","a","b","x","next","pop","utc","alarmTime","showAlarm","today","day","asDate","period","AlarmController","summary","reminder","snooze","localizedStartDate","localizedEndDate","isAllDay","localizedStartTime","localizedEndTime","view","getDayString","$save","deep","preferences","whitelist","copy","substring","account","identities","identity","isReadOnly","$shortFormat"],"mappings":"CAEA,KAQE,SAASA,IACP,IAAmCC,EAAiBC,EAAMC,EAqPhDC,EArPNC,EAAQC,KAYZ,GAVAA,KAAKC,UAAY,KACjBD,KAAKE,cAAgB,KACrBF,KAAKG,aAAeT,EAAYU,GAAGC,KAAK,CAAA,CAAI,EAC5CL,KAAKM,QAAU,KACfN,KAAKO,cAAgB,GAErBP,KAAKQ,SAAW,GAChBR,KAAKS,SAAW,CAACC,KAAM,EAAE,EAEzBC,EAAkBjB,EAAYkB,UAAU,GAAGC,eAAe,cAAc,EACnD,CACnB,IACEjB,EAAOkB,QAAQC,SAASJ,EAAgBK,aAAeL,EAAgBM,SAAS,CAIlF,CAHE,MAAOC,GACPxB,EAAYyB,KAAKC,MAAM,gCAAkCF,EAAEG,OAAO,EAClEzB,EAAO,EACT,CAqJA,GAlJAA,EAAK0B,yBAA2B,GAChC1B,EAAK2B,2BAA6B,GAClCC,EAAEC,QAAQ7B,EAAK8B,qBAAsB,SAAUC,EAAOC,GACpDhC,EAAK0B,yBAAyBO,KAAKD,CAAG,EACtChC,EAAK2B,2BAA2BM,KAAKF,CAAK,EACrB,KAAjBC,EAAIE,OAAO,CAAC,IACdC,OAAOC,eAAepC,EAAK8B,qBAAsB,IAAME,EACjCG,OAAOE,yBAAyBrC,EAAK8B,qBAAsBE,CAAG,CAAC,EACrF,OAAOhC,EAAK8B,qBAAqBE,GAErC,CAAC,EAEDJ,EAAEC,QAAQ7B,EAAKsC,iBAAkB,SAASC,GACxCX,EAAEC,QAAQU,EAAOC,QAAS,SAASC,GACZ,WAAjBA,EAAOC,QACsB,KAA7BD,EAAOE,SAAST,OAAO,CAAC,IAC1BO,EAAOE,SAAW,IAAMF,EAAOELine truncated
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function e(e,a,n){e.state("calendars",{url:"/calendar",views:{calendars:{templateUrl:"UIxCalMainView",controller:"CalendarsController",controllerAs:"app"}},resolve:{stateCalendars:r}}).state("calendars.view",{url:"/{view:(?:day|week|month|multicolumnday)}/{day:[0-9]{8}}",views:{calendarView:{templateUrl:function(e){return e.view+"view?day="+e.day+"¤tday="+String((new Date).getFullYear())+String((new Date).getMonth()+1).padStart(2,"0")+String((new Date).getDate()).padStart(2,"0")},controller:"CalendarController",controllerAs:"calendar"}},resolve:{stateEventsBlocks:t}}),a.rules.when("/calendar/day",function(){return"/calendar/day/"+(new Date).getDayString()}),a.rules.when("/calendar/multicolumnday",function(){return"/calendar/multicolumnday/"+(new Date).getDayString()}),a.rules.when("/calendar/week",function(){return"/calendar/week/"+(new Date).getDayString()}),a.rules.when("/calendar/month",function(){return"/calendar/month/"+(new Date).getDayString()}),a.rules.otherwise("/calendar/week")}function r(e){return e.$calendars||e.$findAll(window.calendarsData)}function t(e,a,n){return a.$eventsBlocksForView(e.view,e.day.asDate()).then(function(e){return _.forEach(e,function(e){e.id&&(e.calendar=new n({id:e.id,name:e.calendarName}))}),e})}function a(e,a,n,r,t,l){if(e.DebugEnabled||t.defaultErrorHandler(function(){}),n.onError({to:"calendars.**"},function(e){"calendars"==e.to().name||e.ignored()||(a.error("transition error to "+e.to().name+": "+e.error().detail),t.go({state:"calendars"}))}),0===r.url().length){var e="/calendar/",n=/(.+)view/.exec(l.settings.Calendar.View),o=(e+=n?n[1]:"week",new Date);if(l.defaults.SOGoCalendarWeekdays)for(var i=["SU","MO","TU","WE","TH","FR","SA"],d=i[o.getDay()];l.defaults.SOGoCalendarWeekdays.indexOf(d)<0;)o.addDays(1),d=i[o.getDay()];e+="/"+o.getDayString(),r.replace().url(e)}}angular.module("SOGo.SchedulerUI",["ngCookies","ui.router","angularFileUpload","sgCkeditor","SOGo.Common","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.MailerUI","as.sortable"]).config(e).run(a),e.$inject=["$stateProvider","$urlServiceProvider","$mdThemingProvider"],r.$inject=["Calendar"],t.$inject=["$stateParams","Component","Calendar"],a.$inject=["$window","$log","$transitions","$location","$state","Preferences"]}();
|
||||
(()=>{function e(e,a,n){e.state("calendars",{url:"/calendar",views:{calendars:{templateUrl:"UIxCalMainView",controller:"CalendarsController",controllerAs:"app"}},resolve:{stateCalendars:r}}).state("calendars.view",{url:"/{view:(?:day|week|month|multicolumnday)}/{day:[0-9]{8}}",views:{calendarView:{templateUrl:function(e){return e.view+"view?day="+e.day+"¤tday="+String((new Date).getFullYear())+String((new Date).getMonth()+1).padStart(2,"0")+String((new Date).getDate()).padStart(2,"0")},controller:"CalendarController",controllerAs:"calendar"}},resolve:{stateEventsBlocks:t}}),a.rules.when("/calendar/day",function(){return"/calendar/day/"+(new Date).getDayString()}),a.rules.when("/calendar/multicolumnday",function(){return"/calendar/multicolumnday/"+(new Date).getDayString()}),a.rules.when("/calendar/week",function(){return"/calendar/week/"+(new Date).getDayString()}),a.rules.when("/calendar/month",function(){return"/calendar/month/"+(new Date).getDayString()}),a.rules.otherwise("/calendar/week")}function r(e){return e.$calendars||e.$findAll(window.calendarsData)}function t(e,a,n){return a.$eventsBlocksForView(e.view,e.day.asDate()).then(function(e){return _.forEach(e,function(e){e.id&&(e.calendar=new n({id:e.id,name:e.calendarName}))}),e})}function a(e,a,n,r,t,l){if(e.DebugEnabled||t.defaultErrorHandler(function(){}),n.onError({to:"calendars.**"},function(e){"calendars"==e.to().name||e.ignored()||(a.error("transition error to "+e.to().name+": "+e.error().detail),t.go({state:"calendars"}))}),0===r.url().length){var e="/calendar/",n=/(.+)view/.exec(l.settings.Calendar.View),o=(e+=n?n[1]:"week",new Date);if(l.defaults.SOGoCalendarWeekdays)for(var d=["SU","MO","TU","WE","TH","FR","SA"],i=d[o.getDay()];l.defaults.SOGoCalendarWeekdays.indexOf(i)<0;)o.addDays(1),i=d[o.getDay()];e+="/"+o.getDayString(),r.replace().url(e)}}angular.module("SOGo.SchedulerUI",["ngCookies","ui.router","angularFileUpload","sgCkeditor","SOGo.Common","SOGo.PreferencesUI","SOGo.ContactsUI","SOGo.MailerUI","as.sortable"]).config(e).run(a),e.$inject=["$stateProvider","$urlServiceProvider","$mdThemingProvider"],r.$inject=["Calendar"],t.$inject=["$stateParams","Component","Calendar"],a.$inject=["$window","$log","$transitions","$location","$state","Preferences"]})();
|
||||
//# sourceMappingURL=Scheduler.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Scheduler.js","sources":["Scheduler/Scheduler.app.js"],"names":["configure","$stateProvider","$urlServiceProvider","$mdThemingProvider","state","url","views","calendars","templateUrl","controller","controllerAs","resolve","stateCalendars","calendarView","$stateParams","view","day","String","Date","getFullYear","getMonth","padStart","getDate","stateEventsBlocks","rules","when","getDayString","otherwise","Calendar","$calendars","$findAll","window","calendarsData","Component","$eventsBlocksForView","asDate","then","_","forEach","id","calendar","name","calendarName","runBlock","$window","$log","$transitions","$location","$state","Preferences","DebugEnabled","defaultErrorHandler","onError","to","transition","ignored","error","detail","go","length","exec","settings","View","now","defaults","SOGoCalendarWeekdays","weekDays","weekDay","getDay","indexOf","addDays","replace","angular","module","config","run","$inject"],"mappings":"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"}
|
||||
{"version":3,"file":"Scheduler.js","sources":["Scheduler/Scheduler.app.js"],"names":["configure","$stateProvider","$urlServiceProvider","$mdThemingProvider","state","url","views","calendars","templateUrl","controller","controllerAs","resolve","stateCalendars","calendarView","$stateParams","view","day","String","Date","getFullYear","getMonth","padStart","getDate","stateEventsBlocks","rules","when","getDayString","otherwise","Calendar","$calendars","$findAll","window","calendarsData","Component","$eventsBlocksForView","asDate","then","_","forEach","id","calendar","name","calendarName","runBlock","$window","$log","$transitions","$location","$state","Preferences","DebugEnabled","defaultErrorHandler","onError","to","transition","ignored","error","detail","go","length","exec","settings","View","now","defaults","SOGoCalendarWeekdays","weekDays","weekDay","getDay","indexOf","addDays","replace","angular","module","config","run","$inject"],"mappings":"CAGA,KAWE,SAASA,EAAUC,EAAgBC,EAAqBC,GACtDF,EACGG,MAAM,YAAa,CAClBC,IAAK,YACLC,MAAO,CACLC,UAAW,CACTC,YAAa,iBACbC,WAAY,sBACZC,aAAc,KAChB,CACF,EACAC,QAAS,CACPC,eAAgBA,CAClB,CACF,CAAC,EACAR,MAAM,iBAAkB,CACvBC,IAAK,2DAGLC,MAAO,CACLO,aAAc,CACZL,YAAa,SAAUM,GAKrB,OAAOA,EAAaC,KAAO,YAAcD,EAAaE,IAAM,eAAiBC,QAAO,IAAKC,MAAQC,YAAY,CAAC,EAAIF,QAAQ,IAAKC,MAAQE,SAAS,EAAI,CAAE,EAAEC,SAAS,EAAG,GAAG,EAAIJ,QAAQ,IAAKC,MAAQI,QAAS,CAAC,EAAED,SAAS,EAAG,GAAG,CAC7N,EACAZ,WAAY,qBACZC,aAAc,UAChB,CACF,EACAC,QAAS,CACPY,kBAAmBA,CACrB,CACF,CAAC,EAEHrB,EAAoBsB,MAAMC,KAAK,gBAAiB,WAG9C,MAAO,kBADG,IAAIP,MACgBQ,aAAa,CAC7C,CAAC,EACDxB,EAAoBsB,MAAMC,KAAK,2BAA4B,WAGzD,MAAO,6BADG,IAAIP,MAC2BQ,aAAa,CACxD,CAAC,EACDxB,EAAoBsB,MAAMC,KAAK,iBAAkB,WAG/C,MAAO,mBADG,IAAIP,MACiBQ,aAAa,CAC9C,CAAC,EACDxB,EAAoBsB,MAAMC,KAAK,kBAAmB,WAGhD,MAAO,oBADG,IAAIP,MACkBQ,aAAa,CAC/C,CAAC,EAIDxB,EAAoBsB,MAAMG,UAAU,gBAAgB,CACtD,CAMA,SAASf,EAAegB,GACtB,OAAOA,EAASC,YAAcD,EAASE,SAASC,OAAOC,aAAa,CACtE,CAMA,SAAST,EAAkBT,EAAcmB,EAAWL,GAElD,OAAOK,EAAUC,qBAAqBpB,EAAaC,KAAMD,EAAaE,IAAImB,OAAO,CAAC,EAC/EC,KAAK,SAAU9B,GAQd,OAPA+B,EAAEC,QAAQhC,EAAO,SAAUS,GACrBA,EAAKwB,KAGPxB,EAAKyB,SAAW,IAAIZ,EAAS,CAAEW,GAAIxB,EAAKwB,GAAIE,KAAM1B,EAAK2B,YAAa,CAAC,EAEzE,CAAC,EACMpC,CACT,CAAC,CACL,CAMA,SAASqC,EAASC,EAASC,EAAMC,EAAcC,EAAWC,EAAQC,GAYhE,GAXKL,EAAQM,cACXF,EAAOG,oBAAoB,YAE1B,EACHL,EAAaM,QAAQ,CAAEC,GAAI,cAAe,EAAG,SAAUC,GACzB,aAAxBA,EAAWD,GAAG,EAAEZ,MACjBa,EAAWC,QAAQ,IACpBV,EAAKW,MAAM,uBAAyBF,EAAWD,GAAG,EAAEZ,KAAO,KAAOa,EAAWE,MAAM,EAAEC,MAAM,EAC3FT,EAAOU,GAAG,CAAEtD,MAAO,WAAY,CAAC,EAEpC,CAAC,EAC8B,IAA3B2C,EAAU1C,IAAI,EAAEsD,OAAc,CAEhC,IAAItD,EAAM,aACRU,EAAO,WAAW6C,KAAKX,EAAYY,SAASjC,SAASkC,IAAI,EAMvDC,GAJF1D,GADEU,EACKA,EAAK,GAEL,OAEC,IAAIG,MACd,GAAI+B,EAAYe,SAASC,qBAGvB,IAFA,IAAIC,EAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAChDC,EAAUD,EAASH,EAAIK,OAAO,GAC3BnB,EAAYe,SAASC,qBAAqBI,QAAQF,CAAO,EAAI,GAClEJ,EAAIO,QAAQ,CAAC,EACbH,EAAUD,EAASH,EAAIK,OAAO,GAGlC/D,GAAO,IAAM0D,EAAIrC,aAAa,EAC9BqB,EAAUwB,QAAQ,EAAElE,IAAIA,CAAG,CAC7B,CACF,CAvIAmE,QAAQC,OAAO,mBAAoB,CAAC,YAAa,YAAa,oBAAqB,aAAc,cAAe,qBAAsB,kBAAmB,gBAAiB,cAAc,EACrLC,OAAO1E,CAAS,EAChB2E,IAAIhC,CAAQ,EAKf3C,EAAU4E,QAAU,CAAC,iBAAkB,sBAAuB,sBAmE9DhE,EAAegE,QAAU,CAAC,YAQ1BrD,EAAkBqD,QAAU,CAAC,eAAgB,YAAa,YAmB1DjC,EAASiC,QAAU,CAAC,UAAW,OAAQ,eAAgB,YAAa,SAAU,cAoC/E,GAAE"}
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(){"use strict";function d(e){this.component=e,this.component.attendees&&_.forEach(this.component.attendees,function(e){e.image=d.$gravatar(e.email,32)}),this.workDaysOnly=!0,this.slotStartTimeLimit=new Date,this.slotStartTimeLimit.setMinutes(0),this.slotStartTimeLimit.setHours(d.dayStartHour),this.slotEndTimeLimit=new Date,this.slotEndTimeLimit.setMinutes(0),this.slotEndTimeLimit.setHours(d.dayEndHour),this.$days=[],this.$futureFreebusyData={},this.updateFreeBusyCoverage(),this.updateFreeBusy(),0==this.$days.length&&this.getDays()}d.$factory=["$q","$timeout","$log","sgSettings","Attendees_ROLES","Preferences","User","Card","Gravatar","Resource",function(e,t,n,i,a,o,r,s,c,l){return angular.extend(d,{$q:e,$timeout:t,$log:n,$settings:i,$User:r,$Preferences:o,$Card:s,$gravatar:c,$$resource:new l(i.activeUser("folderURL")+"Calendar",i.activeUser()),ROLES:a}),d.dayStartHour=parseInt(o.defaults.SOGoDayStartTime.split(":")[0]),d.dayEndHour=parseInt(o.defaults.SOGoDayEndTime.split(":")[0]),d}];try{angular.module("SOGo.SchedulerUI")}catch(e){angular.module("SOGo.SchedulerUI",["SOGo.Common"])}angular.module("SOGo.SchedulerUI").constant("Attendees_ROLES",{REQ_PARTICIPANT:"req-participant",OPT_PARTICIPANT:"opt-participant",NON_PARTICIPANT:"non-participant",CHAIR:"chair"}).factory("Attendees",d.$factory),d.timeToQuarters=function(e){return 4*e.getHours()+Math.ceil(e.getMinutes()/15)},d.prototype.getLength=function(){return this.component.attendees?this.component.attendees.length:0},d.prototype.initOrganizer=function(e){var t=this,e=e&&e.isSubscription?d.$User.$filter(e.owner).then(function(e){e=e[0];t.component.organizer={uid:e.uid,name:e.cn,email:e.c_email}}):(this.component.organizer||(this.component.organizer={uid:d.$settings.activeUser("login"),name:d.$settings.activeUser("identification"),email:d.$settings.activeUser("email")}),d.$q.when());e.then(function(){t.updateFreeBusyAttendee(t.component.organizer)})},d.prototype.add=function(e,t){var n,i,a=this,o=d.$q.when();return e&&((!this.component.attendees||t&&t.organizerCalendar)&&this.initOrganizer(t?t.organizerCalendar:null),e.$isList({expandable:!0})?o=(i=d.$Card.$find(e.container,e.c_name)).$id().then(function(e){_.forEach(i.refs,function(e){n={name:e.c_cn,email:e.$preferredEmail(t?t.partial:null),role:d.ROLES.REQ_PARTICIPANT,partstat:"needs-action",uid:e.c_uid,$avatarIcon:"person"},_.find(a.component.attendees,function(e){return e.email==n.email})||(n.image=d.$gravatar(n.email,32),a.component.attendees?a.component.attendees.push(n):a.component.attendees=[n],a.updateFreeBusyAttendee(n))})}):(n={uid:e.c_uid,domain:e.c_domain,isMSExchange:e.ismsexchange,isGroup:e.$isList(),isExpandableGroup:!1,isResource:e.isresource,name:e.c_cn,email:e.$$email,role:d.ROLES.REQ_PARTICIPANT,partstat:"needs-action",$avatarIcon:e.$avatarIcon},_.find(this.attendees,function(e){return e.email==n.email})||(e.$isList()&&d.$Preferences.defaults.SOGoLDAPGroupExpansionEnabled&&(o=e.$members().then(function(e){n.members=e,n.isExpandableGroup=!0})),n.image=d.$gravatar(n.email,32),this.component.attendees?_.findIndex(this.component.attendees,{email:n.email})<0&&this.component.attendees.push(n):this.component.attendees=[n],this.updateFreeBusyAttendee(n)))),o},d.prototype.nextRole=function(t){var e=_.values(d.ROLES),n=_.findIndex(e,function(e){return t.role===e});t.role=e[++n%4]},d.prototype.hasAttendee=function(e){var t=_.find(this.component.attendees,function(t){return _.find(e.emails,function(e){return e.value==t.email})});return angular.isDefined(t)},d.prototype.remove=function(t){var e=_.findIndex(this.component.attendees,function(e){return e.email==t.email});-1<e&&this.component.attendees.splice(e,1),delete this.$futureFreebusyData[t.uid]},d.prototype.updateFreeBusyCoverage=function(){var o,r,s,e,c={};this.component.start&&this.component.end&&(o=new Date(this.component.start.getTime()),r=new Date(this.component.end.getTime()),this.component.isAllDay?(o.setHours(d.dayStartHour),o.setMinutes(0),r.setHours(d.dayEndHour),r.setMinutes(0),s=e=0):(s=parseInt(o.getMinutes()/15+.5),e=parseInt(r.getMinutes()/15+.5)),o.setMinutes(15*s),r.setMinutes(15*e),_.forEach(o.beginOfDay().daysUpTo(r.beginOfDay()),function(e,t){var n,i=(e=e<o?new Date(o.getTime()):e).getDate(),a=e.getDayString();if(a===o.getDayString())for(n=e.getHours().toString(),c[a]={},c[a][n]=[];0<s;)c[a][n].push(0),s--;else e=e.beginOfDay(),c[a]={};for(;e.getTime()<r.getTime()&&e.getDate()==i;)n=e.getHours().toString(),angular.isUndefined(c[a][n])&&(c[a][n]=[]),c[a][n].push(1),e.addMinutes(15)}),this.freebusy=c)},d.prototype.coversFreeBusy=function(e,t,n){return this.freebusy&&angular.isDefined(this.freebusy[e])&&angular.isDefined(this.freebusy[e][t])&&1==this.freebusy[e][t][n]},d.prototype.getDays=function(e){var t,n,i,a=this;return e?(t=e,(n=new Date(e.getTime())).addMinutes(this.component.delta)):(t=this.component.start,n=this.component.end),(0===this.$days.length||_.findIndex(this.$days,["getDayString",t.getDayString()])<0||_Line truncated
|
||||
(()=>{function d(e){this.component=e,this.component.attendees&&_.forEach(this.component.attendees,function(e){e.image=d.$gravatar(e.email,32)}),this.workDaysOnly=!0,this.slotStartTimeLimit=new Date,this.slotStartTimeLimit.setMinutes(0),this.slotStartTimeLimit.setHours(d.dayStartHour),this.slotEndTimeLimit=new Date,this.slotEndTimeLimit.setMinutes(0),this.slotEndTimeLimit.setHours(d.dayEndHour),this.$days=[],this.$futureFreebusyData={},this.updateFreeBusyCoverage(),this.updateFreeBusy(),0==this.$days.length&&this.getDays()}d.$factory=["$q","$timeout","$log","sgSettings","Attendees_ROLES","Preferences","User","Card","Gravatar","Resource",function(e,t,n,i,a,o,r,s,c,l){return angular.extend(d,{$q:e,$timeout:t,$log:n,$settings:i,$User:r,$Preferences:o,$Card:s,$gravatar:c,$$resource:new l(i.activeUser("folderURL")+"Calendar",i.activeUser()),ROLES:a}),d.dayStartHour=parseInt(o.defaults.SOGoDayStartTime.split(":")[0]),d.dayEndHour=parseInt(o.defaults.SOGoDayEndTime.split(":")[0]),d}];try{angular.module("SOGo.SchedulerUI")}catch(e){angular.module("SOGo.SchedulerUI",["SOGo.Common"])}angular.module("SOGo.SchedulerUI").constant("Attendees_ROLES",{REQ_PARTICIPANT:"req-participant",OPT_PARTICIPANT:"opt-participant",NON_PARTICIPANT:"non-participant",CHAIR:"chair"}).factory("Attendees",d.$factory),d.timeToQuarters=function(e){return 4*e.getHours()+Math.ceil(e.getMinutes()/15)},d.prototype.getLength=function(){return this.component.attendees?this.component.attendees.length:0},d.prototype.initOrganizer=function(e){var t=this,e=e&&e.isSubscription?d.$User.$filter(e.owner).then(function(e){e=e[0];t.component.organizer={uid:e.uid,name:e.cn,email:e.c_email}}):(this.component.organizer||(this.component.organizer={uid:d.$settings.activeUser("login"),name:d.$settings.activeUser("identification"),email:d.$settings.activeUser("email")}),d.$q.when());e.then(function(){t.updateFreeBusyAttendee(t.component.organizer)})},d.prototype.add=function(e,t){var n,i,a=this,o=d.$q.when();return e&&((!this.component.attendees||t&&t.organizerCalendar)&&this.initOrganizer(t?t.organizerCalendar:null),e.$isList({expandable:!0})?o=(i=d.$Card.$find(e.container,e.c_name)).$id().then(function(e){_.forEach(i.refs,function(e){n={name:e.c_cn,email:e.$preferredEmail(t?t.partial:null),role:d.ROLES.REQ_PARTICIPANT,partstat:"needs-action",uid:e.c_uid,$avatarIcon:"person"},_.find(a.component.attendees,function(e){return e.email==n.email})||(n.image=d.$gravatar(n.email,32),a.component.attendees?a.component.attendees.push(n):a.component.attendees=[n],a.updateFreeBusyAttendee(n))})}):(n={uid:e.c_uid,domain:e.c_domain,isMSExchange:e.ismsexchange,isGroup:e.$isList(),isExpandableGroup:!1,isResource:e.isresource,name:e.c_cn,email:e.$$email,role:d.ROLES.REQ_PARTICIPANT,partstat:"needs-action",$avatarIcon:e.$avatarIcon},_.find(this.attendees,function(e){return e.email==n.email})||(e.$isList()&&d.$Preferences.defaults.SOGoLDAPGroupExpansionEnabled&&(o=e.$members().then(function(e){n.members=e,n.isExpandableGroup=!0})),n.image=d.$gravatar(n.email,32),this.component.attendees?_.findIndex(this.component.attendees,{email:n.email})<0&&this.component.attendees.push(n):this.component.attendees=[n],this.updateFreeBusyAttendee(n)))),o},d.prototype.nextRole=function(t){var e=_.values(d.ROLES),n=_.findIndex(e,function(e){return t.role===e});t.role=e[++n%4]},d.prototype.hasAttendee=function(e){var t=_.find(this.component.attendees,function(t){return _.find(e.emails,function(e){return e.value==t.email})});return angular.isDefined(t)},d.prototype.remove=function(t){var e=_.findIndex(this.component.attendees,function(e){return e.email==t.email});-1<e&&this.component.attendees.splice(e,1),delete this.$futureFreebusyData[t.uid]},d.prototype.updateFreeBusyCoverage=function(){var o,r,s,e,c={};this.component.start&&this.component.end&&(o=new Date(this.component.start.getTime()),r=new Date(this.component.end.getTime()),this.component.isAllDay?(o.setHours(d.dayStartHour),o.setMinutes(0),r.setHours(d.dayEndHour),r.setMinutes(0),s=e=0):(s=parseInt(o.getMinutes()/15+.5),e=parseInt(r.getMinutes()/15+.5)),o.setMinutes(15*s),r.setMinutes(15*e),_.forEach(o.beginOfDay().daysUpTo(r.beginOfDay()),function(e,t){var n,i=(e=e<o?new Date(o.getTime()):e).getDate(),a=e.getDayString();if(a===o.getDayString())for(n=e.getHours().toString(),c[a]={},c[a][n]=[];0<s;)c[a][n].push(0),s--;else e=e.beginOfDay(),c[a]={};for(;e.getTime()<r.getTime()&&e.getDate()==i;)n=e.getHours().toString(),angular.isUndefined(c[a][n])&&(c[a][n]=[]),c[a][n].push(1),e.addMinutes(15)}),this.freebusy=c)},d.prototype.coversFreeBusy=function(e,t,n){return this.freebusy&&angular.isDefined(this.freebusy[e])&&angular.isDefined(this.freebusy[e][t])&&1==this.freebusy[e][t][n]},d.prototype.getDays=function(e){var t,n,i,a=this;return e?(t=e,(n=new Date(e.getTime())).addMinutes(this.component.delta)):(t=this.component.start,n=this.component.end),(0===this.$days.length||_.findIndex(this.$days,["getDayString",t.getDayString()])<0||_.findIndex(this.$daLine truncated
|
||||
//# sourceMappingURL=Scheduler.services.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"Scheduler.services.js","sources":["Scheduler/Attendees.service.js","Scheduler/Calendar.service.js","Scheduler/Component.service.js","Scheduler/CalendarController.js","Scheduler/CalendarListController.js","Scheduler/CalendarsController.js","Scheduler/ComponentController.js","Scheduler/sgCalendarDay.directive.js","Scheduler/sgCalendarDayBlock.directive.js","Scheduler/sgCalendarDayTable.directive.js","Scheduler/sgCalendarGhost.directive.js","Scheduler/sgCalendarListEvent.directive.js","Scheduler/sgCalendarListItem.directive.js","Scheduler/sgCalendarMonthDay.directive.js","Scheduler/sgCalendarMonthEvent.directive.js","Scheduler/sgCalendarPrintStylesheet.directive.js","Scheduler/sgCalendarScrollView.directive.js","Scheduler/sgCategoryStylesheet.directive.js","Scheduler/sgDraggableCalendarBlock.directive.js","Scheduler/sgFreebusy.directive.js","Scheduler/sgFreebusyDay.directive.js","Scheduler/sgNowLine.directive.js"],"names":["Attendees","component","this","attendees","_","forEach","attendee","image","$gravatar","email","workDaysOnly","slotStartTimeLimit","Date","setMinutes","setHours","dayStartHour","slotEndTimeLimit","dayEndHour","$days","$futureFreebusyData","updateFreeBusyCoverage","updateFreeBusy","length","getDays","$factory","$q","$timeout","$log","Settings","ROLES","Preferences","User","Card","Gravatar","Resource","angular","extend","$settings","$User","$Preferences","$Card","$$resource","activeUser","parseInt","defaults","SOGoDayStartTime","split","SOGoDayEndTime","module","e","constant","REQ_PARTICIPANT","OPT_PARTICIPANT","NON_PARTICIPANT","CHAIR","factory","timeToQuarters","dateTime","getHours","Math","ceil","getMinutes","prototype","getLength","initOrganizer","calendar","_this","promise","isSubscription","$filter","owner","then","results","organizer","uid","name","cn","c_email","when","updateFreeBusyAttendee","add","card","options","list","organizerCalendar","$isList","expandable","$find","container","c_name","$id","listId","refs","ref","c_cn","$preferredEmail","partial","role","partstat","c_uid","$avatarIcon","find","o","push","domain","c_domain","isMSExchange","ismsexchange","isGroup","isExpandableGroup","isResource","isresource","$$email","SOGoLDAPGroupExpansionEnabled","$members","members","findIndex","nextRole","roles","values","index","hasAttendee","emails","value","isDefined","remove","currentAttendee","splice","roundedStart","roundedEnd","startQuarter","endQuarter","freebusy","start","end","getTime","isAllDay","beginOfDay","daysUpTo","date","hourKey","currentDay","getDate","dayKey","getDayString","toString","isUndefined","addMinutes","coversFreeBusy","day","hour","quarter","refDate","sd","ed","formatFcn","delta","addDays","$mdDateLocaleProvider","formatDate","$dateFormat","SOGoLongDateFormat","stringWithSeparator","promises","filter","all","resource","days","params","sday","map","eday","userResource","intersection","keys","fetch","data","i","forwardFindDate","currentStart","foundDate","maxOffset","endLimit","duration","offset","firstStep","floor","currentEntries","indexOf","startLimit","foundTime","testDuration","setTime","forwardAdjustCurrentStart","getDay","backwardFindDate","lastIndexOf","testOffset","debug","backwardAdjustCurrentStart","findSlot","direction","findDate","adjustCurrentStart","clone","setSeconds","step","catch","err","mergeFreebusy","startDay","j","attendeeEntries","flatMap","count","reject","l","Calendar","futureCalendarData","init","id","newCalendarData","create","$unwrap","Component","Acl","$Component","$$Acl","$view","EventDragDayLength","EventDragHorizontalOffset","ConflictHTTPErrorCode","$defaultCalendar","SOGoDefaultCalendar","$findAll","active","$add","isWebCalendar","$webcalendars","$subscriptions","$calendars","sibling","localeCompare","settings","FoldersOrder","saveFoldersOrder","$reloadAll","writable","contextId","calendars","union","isOwned","acls","objectCreator","calendarData","group","login","$get","$getIndex","$subscribe","path","$addWebCalendar","url","d","defer","urls","webCalendarURL","post","isEditable","isRemote","JSON","stringify","undefined","resolve","response","status","reloadWebCalendars","$error","statusText","$deleteComponents","components","pid","uids","saveFoldersActivation","ids","request","folders","color","$acl","isSuperUser","$shadowData","$omit","$futureCalendarData","getClassName","base","$rename","$save","$delete","$reset","key","save","setCredentials","username","password","export","realOwnerId","type","filename","webDavICSURL","ownerPaths","substring","join","open","downloadProvisioningProfile","$setActivation","$getComponent","componentId","recurrenceId","isError","isObject","copy","futureComponentData","newComponentData","newguid","isNew","$rootScope","Component_STATUS","STATUS","$Attendees","timeFormat","$query","search","$queryEvents","sort","asc","filterpopup","$queryTasks","$refreshTimeout","$ghost","EventsFilterState","TasksFilterState","EventsSortingState","TasksSortingState","show_completed","ShowCompletedLine truncated
|
||||
{"version":3,"file":"Scheduler.services.js","sources":["Scheduler/Attendees.service.js","Scheduler/Calendar.service.js","Scheduler/Component.service.js","Scheduler/CalendarController.js","Scheduler/CalendarListController.js","Scheduler/CalendarsController.js","Scheduler/ComponentController.js","Scheduler/sgCalendarDay.directive.js","Scheduler/sgCalendarDayBlock.directive.js","Scheduler/sgCalendarDayTable.directive.js","Scheduler/sgCalendarGhost.directive.js","Scheduler/sgCalendarListEvent.directive.js","Scheduler/sgCalendarListItem.directive.js","Scheduler/sgCalendarMonthDay.directive.js","Scheduler/sgCalendarMonthEvent.directive.js","Scheduler/sgCalendarPrintStylesheet.directive.js","Scheduler/sgCalendarScrollView.directive.js","Scheduler/sgCategoryStylesheet.directive.js","Scheduler/sgDraggableCalendarBlock.directive.js","Scheduler/sgFreebusy.directive.js","Scheduler/sgFreebusyDay.directive.js","Scheduler/sgNowLine.directive.js"],"names":["Attendees","component","this","attendees","_","forEach","attendee","image","$gravatar","email","workDaysOnly","slotStartTimeLimit","Date","setMinutes","setHours","dayStartHour","slotEndTimeLimit","dayEndHour","$days","$futureFreebusyData","updateFreeBusyCoverage","updateFreeBusy","length","getDays","$factory","$q","$timeout","$log","Settings","ROLES","Preferences","User","Card","Gravatar","Resource","angular","extend","$settings","$User","$Preferences","$Card","$$resource","activeUser","parseInt","defaults","SOGoDayStartTime","split","SOGoDayEndTime","module","e","constant","REQ_PARTICIPANT","OPT_PARTICIPANT","NON_PARTICIPANT","CHAIR","factory","timeToQuarters","dateTime","getHours","Math","ceil","getMinutes","prototype","getLength","initOrganizer","calendar","_this","promise","isSubscription","$filter","owner","then","results","organizer","uid","name","cn","c_email","when","updateFreeBusyAttendee","add","card","options","list","organizerCalendar","$isList","expandable","$find","container","c_name","$id","listId","refs","ref","c_cn","$preferredEmail","partial","role","partstat","c_uid","$avatarIcon","find","o","push","domain","c_domain","isMSExchange","ismsexchange","isGroup","isExpandableGroup","isResource","isresource","$$email","SOGoLDAPGroupExpansionEnabled","$members","members","findIndex","nextRole","roles","values","index","hasAttendee","emails","value","isDefined","remove","currentAttendee","splice","roundedStart","roundedEnd","startQuarter","endQuarter","freebusy","start","end","getTime","isAllDay","beginOfDay","daysUpTo","date","hourKey","currentDay","getDate","dayKey","getDayString","toString","isUndefined","addMinutes","coversFreeBusy","day","hour","quarter","refDate","sd","ed","formatFcn","delta","addDays","$mdDateLocaleProvider","formatDate","$dateFormat","SOGoLongDateFormat","stringWithSeparator","promises","filter","all","resource","days","params","sday","map","eday","userResource","intersection","keys","fetch","data","i","forwardFindDate","currentStart","foundDate","maxOffset","endLimit","duration","offset","firstStep","floor","currentEntries","indexOf","startLimit","foundTime","testDuration","setTime","forwardAdjustCurrentStart","getDay","backwardFindDate","lastIndexOf","testOffset","debug","backwardAdjustCurrentStart","findSlot","direction","findDate","adjustCurrentStart","clone","setSeconds","step","catch","err","mergeFreebusy","startDay","j","attendeeEntries","flatMap","count","reject","l","Calendar","futureCalendarData","init","id","newCalendarData","create","$unwrap","Component","Acl","$Component","$$Acl","$view","EventDragDayLength","EventDragHorizontalOffset","ConflictHTTPErrorCode","$defaultCalendar","SOGoDefaultCalendar","$findAll","active","$add","isWebCalendar","$webcalendars","$subscriptions","$calendars","sibling","localeCompare","settings","FoldersOrder","saveFoldersOrder","$reloadAll","writable","contextId","calendars","union","isOwned","acls","objectCreator","calendarData","group","login","$get","$getIndex","$subscribe","path","$addWebCalendar","url","d","defer","urls","webCalendarURL","post","isEditable","isRemote","JSON","stringify","undefined","resolve","response","status","reloadWebCalendars","$error","statusText","$deleteComponents","components","pid","uids","saveFoldersActivation","ids","request","folders","color","$acl","isSuperUser","$shadowData","$omit","$futureCalendarData","getClassName","base","$rename","$save","$delete","$reset","key","save","setCredentials","username","password","export","realOwnerId","type","filename","webDavICSURL","ownerPaths","substring","join","open","downloadProvisioningProfile","$setActivation","$getComponent","componentId","recurrenceId","isError","isObject","copy","futureComponentData","newComponentData","newguid","isNew","$rootScope","Component_STATUS","STATUS","$Attendees","timeFormat","$query","search","$queryEvents","sort","asc","filterpopup","$queryTasks","$refreshTimeout","$ghost","EventsFilterState","TasksFilterState","EventsSortingState","TasksSortingState","show_completed","ShowCompletedLine truncated
|
||||
@@ -543,6 +543,7 @@
|
||||
this.adjustEndTime();
|
||||
this.changeAlarmRelation(form);
|
||||
this.addAttendee(this.searchText).then(function () {
|
||||
vm.adjustStartTime();
|
||||
if (form.$valid) {
|
||||
vm.component.$save(options)
|
||||
.then(function(data) {
|
||||
|
||||
@@ -525,7 +525,7 @@
|
||||
this.currentEventCoordinates.dayNumber += deltaDays;
|
||||
}
|
||||
|
||||
$log.debug('event coordinates ' + JSON.stringify(this.currentEventCoordinates));
|
||||
//$log.debug('event coordinates ' + JSON.stringify(this.currentEventCoordinates));
|
||||
$rootScope.$emit('calendar:drag');
|
||||
},
|
||||
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
!function(e,t){"function"==typeof define&&define.amd?define([],t):"undefined"!=typeof exports?t():(t(),e.FileSaver={})}(this,function(){"use strict";var s="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0;function c(e,t,a){var i=new XMLHttpRequest;i.open("GET",e),i.responseType="blob",i.onload=function(){l(i.response,t,a)},i.onerror=function(){console.error("could not download file")},i.send()}function n(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&t.status<=299}function r(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(e){var a=document.createEvent("MouseEvents");a.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(a)}}var d=s.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),l=s.saveAs||("object"!=typeof window||window!==s?function(){}:"download"in HTMLAnchorElement.prototype&&!d?function(e,t,a){var i=s.URL||s.webkitURL,l=document.createElement("a");t=t||e.name||"download",l.download=t,l.rel="noopener","string"==typeof e?(l.href=e,l.origin!==location.origin?n(l.href)?c(e,t,a):r(l,l.target="_blank"):r(l)):(l.href=i.createObjectURL(e),setTimeout(function(){i.revokeObjectURL(l.href)},4e4),setTimeout(function(){r(l)},0))}:"msSaveOrOpenBlob"in navigator?function(e,t,a){var i;t=t||e.name||"download","string"==typeof e?n(e)?c(e,t,a):((i=document.createElement("a")).href=e,i.target="_blank",setTimeout(function(){r(i)})):navigator.msSaveOrOpenBlob((e=e,void 0===(a=a)?a={autoBom:!1}:"object"!=typeof a&&(console.warn("Deprecated: Expected third argument to be a object"),a={autoBom:!a}),a.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e),t)}:function(e,t,a,i){if((i=i||open("","_blank"))&&(i.document.title=i.document.body.innerText="downloading..."),"string"==typeof e)return c(e,t,a);var l,n,r,t="application/octet-stream"===e.type,a=/constructor/i.test(s.HTMLElement)||s.safari,o=/CriOS\/[\d]+/.test(navigator.userAgent);(o||t&&a||d)&&"undefined"!=typeof FileReader?((l=new FileReader).onloadend=function(){var e=l.result,e=o?e:e.replace(/^data:[^;]*;/,"data:attachment/file;");i?i.location.href=e:location=e,i=null},l.readAsDataURL(e)):(n=s.URL||s.webkitURL,r=n.createObjectURL(e),i?i.location=r:location.href=r,i=null,setTimeout(function(){n.revokeObjectURL(r)},4e4))});s.saveAs=l.saveAs=l,"undefined"!=typeof module&&(module.exports=l)}),function(e){e=e.af=e.af||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"%0 van %1","Align center":"Belyn in die middel","Align left":"Belyn links","Align right":"Belyn regs","Block quote":"Verwysingsaanhaling",Bold:"Vet","Bold text":"",Cancel:"Kanselleer",Clear:"","Close contextual balloons, dropdowns, and dialogs":"",Code:"Bronkode","Content editing keystrokes":"","Execute the currently focused button":"","Insert code block":"Voeg bronkodeblok in",Italic:"Kursief","Italic text":"",Justify:"Belyn beide kante","Move focus between form fields (inputs, buttons, etc.)":"","Move focus to the toolbar, navigate between toolbars":"","Move out of an inline code style":"","Navigate through the toolbar":"","Open the accessibility help dialog":"","Plain text":"Gewone skrif","Remove color":"Verwyder kleur","Remove Format":"Verwyder formatering","Restore default":"Herstel verstek",Save:"Stoor","Show more items":"Wys meer items",Strikethrough:"Deurstreep","Strikethrough text":"",Subscript:"Onderskrif",Superscript:"Boskrif","Text alignment":"Teksbelyning","Text alignment toolbar":"Teksbelyning nutsbank","These keyboard shortcuts allow for quick access to content editing features.":"","Toggle caption off":"","Toggle caption on":"",Underline:"Onderstreep","Underline text":"","Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.":"","User interface and content navigation keystrokes":""}),e.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),function(e){e=e.ar=e.ar||{};e.dictionary=Object.assign(e.dictionary||{},{"(may require <kbd>Fn</kbd>)":"(قد يتطلب <kbd>مفتاح Fn</kbd>)","%0 of %1":"%0 من %1",Accept:"قبول","Accessibility help":"تعليمات إمكانية الوصول","Align cell text to the bottom":"قم بمحاذاة نص الخلية للاسفل","Align cell text to the center":"قم بمحاذاة نص الخلية إلى المركز","Align cell text to the left":"قم بمحاذاة نص الخلية إلى اليسار","Align cell text to the middle":"قم بمحاذاة نص الخلية إلى المنتصف","Align cell text to the right":"قم بمحاذاة نص الخلية إلى اليمين","Align cell text to the top":"قم بمحاذاة نص الخلية إلى الأعلى","Align
Line truncated
|
||||
((e,t)=>{"function"==typeof define&&define.amd?define([],t):"undefined"!=typeof exports?t():(t(),e.FileSaver={})})(this,function(){var s="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0;function c(e,t,a){var i=new XMLHttpRequest;i.open("GET",e),i.responseType="blob",i.onload=function(){l(i.response,t,a)},i.onerror=function(){console.error("could not download file")},i.send()}function n(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&t.status<=299}function r(t){try{t.dispatchEvent(new MouseEvent("click"))}catch(e){var a=document.createEvent("MouseEvents");a.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(a)}}var d=s.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),l=s.saveAs||("object"!=typeof window||window!==s?function(){}:"download"in HTMLAnchorElement.prototype&&!d?function(e,t,a){var i=s.URL||s.webkitURL,l=document.createElement("a");t=t||e.name||"download",l.download=t,l.rel="noopener","string"==typeof e?(l.href=e,l.origin!==location.origin?n(l.href)?c(e,t,a):r(l,l.target="_blank"):r(l)):(l.href=i.createObjectURL(e),setTimeout(function(){i.revokeObjectURL(l.href)},4e4),setTimeout(function(){r(l)},0))}:"msSaveOrOpenBlob"in navigator?function(e,t,a){var i;t=t||e.name||"download","string"==typeof e?n(e)?c(e,t,a):((i=document.createElement("a")).href=e,i.target="_blank",setTimeout(function(){r(i)})):navigator.msSaveOrOpenBlob((e=e,void 0===(a=a)?a={autoBom:!1}:"object"!=typeof a&&(console.warn("Deprecated: Expected third argument to be a object"),a={autoBom:!a}),a.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e),t)}:function(e,t,a,i){if((i=i||open("","_blank"))&&(i.document.title=i.document.body.innerText="downloading..."),"string"==typeof e)return c(e,t,a);var l,n,r,t="application/octet-stream"===e.type,a=/constructor/i.test(s.HTMLElement)||s.safari,o=/CriOS\/[\d]+/.test(navigator.userAgent);(o||t&&a||d)&&"undefined"!=typeof FileReader?((l=new FileReader).onloadend=function(){var e=l.result,e=o?e:e.replace(/^data:[^;]*;/,"data:attachment/file;");i?i.location.href=e:location=e,i=null},l.readAsDataURL(e)):(n=s.URL||s.webkitURL,r=n.createObjectURL(e),i?i.location=r:location.href=r,i=null,setTimeout(function(){n.revokeObjectURL(r)},4e4))});s.saveAs=l.saveAs=l,"undefined"!=typeof module&&(module.exports=l)}),(e=>{(e=e.af=e.af||{}).dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"%0 van %1","Align center":"Belyn in die middel","Align left":"Belyn links","Align right":"Belyn regs","Block quote":"Verwysingsaanhaling",Bold:"Vet","Bold text":"",Cancel:"Kanselleer",Clear:"","Close contextual balloons, dropdowns, and dialogs":"",Code:"Bronkode","Content editing keystrokes":"","Execute the currently focused button":"","Insert code block":"Voeg bronkodeblok in",Italic:"Kursief","Italic text":"",Justify:"Belyn beide kante","Move focus between form fields (inputs, buttons, etc.)":"","Move focus to the toolbar, navigate between toolbars":"","Move out of an inline code style":"","Navigate through the toolbar":"","Open the accessibility help dialog":"","Plain text":"Gewone skrif","Remove color":"Verwyder kleur","Remove Format":"Verwyder formatering","Restore default":"Herstel verstek",Save:"Stoor","Show more items":"Wys meer items",Strikethrough:"Deurstreep","Strikethrough text":"",Subscript:"Onderskrif",Superscript:"Boskrif","Text alignment":"Teksbelyning","Text alignment toolbar":"Teksbelyning nutsbank","These keyboard shortcuts allow for quick access to content editing features.":"","Toggle caption off":"","Toggle caption on":"",Underline:"Onderstreep","Underline text":"","Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.":"","User interface and content navigation keystrokes":""}),e.getPluralForm=function(e){return 1!=e}})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),(e=>{(e=e.ar=e.ar||{}).dictionary=Object.assign(e.dictionary||{},{"(may require <kbd>Fn</kbd>)":"(قد يتطلب <kbd>مفتاح Fn</kbd>)","%0 of %1":"%0 من %1",Accept:"قبول","Accessibility help":"تعليمات إمكانية الوصول","Align cell text to the bottom":"قم بمحاذاة نص الخلية للاسفل","Align cell text to the center":"قم بمحاذاة نص الخلية إلى المركز","Align cell text to the left":"قم بمحاذاة نص الخلية إلى اليسار","Align cell text to the middle":"قم بمحاذاة نص الخلية إلى المنتصف","Align cell text to the right":"قم بمحاذاة نص الخلية إلى اليمين","Align cell text to the top":"قم بمحاذاة نص الخلية إلى الأعلى","Align center":"محاذاة في الLine truncated
|
||||
//# sourceMappingURL=FileSaver.min.js.map
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"FileSaver.min.js","sources":["../../node_modules/file-saver/dist/FileSaver.js","ckeditor/build/translations/af.js","ckeditor/build/translations/ar.js","ckeditor/build/translations/ast.js","ckeditor/build/translations/az.js","ckeditor/build/translations/bg.js","ckeditor/build/translations/bn.js","ckeditor/build/translations/bs.js","ckeditor/build/translations/ca.js","ckeditor/build/translations/cs.js","ckeditor/build/translations/da.js","ckeditor/build/translations/de-ch.js","ckeditor/build/translations/de.js","ckeditor/build/translations/el.js","ckeditor/build/translations/en-au.js","ckeditor/build/translations/en-gb.js","ckeditor/build/translations/eo.js","ckeditor/build/translations/es-co.js","ckeditor/build/translations/es.js","ckeditor/build/translations/et.js","ckeditor/build/translations/eu.js","ckeditor/build/translations/fa.js","ckeditor/build/translations/fi.js","ckeditor/build/translations/fr.js","ckeditor/build/translations/gl.js","ckeditor/build/translations/gu.js","ckeditor/build/translations/he.js","ckeditor/build/translations/hi.js","ckeditor/build/translations/hr.js","ckeditor/build/translations/hu.js","ckeditor/build/translations/hy.js","ckeditor/build/translations/id.js","ckeditor/build/translations/it.js","ckeditor/build/translations/ja.js","ckeditor/build/translations/jv.js","ckeditor/build/translations/kk.js","ckeditor/build/translations/km.js","ckeditor/build/translations/kn.js","ckeditor/build/translations/ko.js","ckeditor/build/translations/ku.js","ckeditor/build/translations/lt.js","ckeditor/build/translations/lv.js","ckeditor/build/translations/ms.js","ckeditor/build/translations/nb.js","ckeditor/build/translations/ne.js","ckeditor/build/translations/nl.js","ckeditor/build/translations/no.js","ckeditor/build/translations/oc.js","ckeditor/build/translations/pl.js","ckeditor/build/translations/pt-br.js","ckeditor/build/translations/pt.js","ckeditor/build/translations/ro.js","ckeditor/build/translations/ru.js","ckeditor/build/translations/si.js","ckeditor/build/translations/sk.js","ckeditor/build/translations/sl.js","ckeditor/build/translations/sq.js","ckeditor/build/translations/sr-latn.js","ckeditor/build/translations/sr.js","ckeditor/build/translations/sv.js","ckeditor/build/translations/th.js","ckeditor/build/translations/tk.js","ckeditor/build/translations/tr.js","ckeditor/build/translations/tt.js","ckeditor/build/translations/ug.js","ckeditor/build/translations/uk.js","ckeditor/build/translations/ur.js","ckeditor/build/translations/uz.js","ckeditor/build/translations/vi.js","ckeditor/build/translations/zh-cn.js","ckeditor/build/translations/zh.js"],"names":["global","factory","define","amd","exports","FileSaver","this","_global","window","self","download","url","name","opts","xhr","XMLHttpRequest","open","responseType","onload","saveAs","response","onerror","console","error","send","corsEnabled","e","status","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","isMacOSWebView","navigator","test","userAgent","HTMLAnchorElement","prototype","blob","URL","webkitURL","a","createElement","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","msSaveOrOpenBlob","autoBom","warn","type","Blob","String","fromCharCode","popup","title","body","innerText","reader","force","isSafari","HTMLElement","safari","isChromeIOS","FileReader","onloadend","result","replace","readAsDataURL","module","t","dictionary","Object","assign","%0 of %1","Align center","Align left","Align right","Block quote","Bold","Bold text","Cancel","Clear","Close contextual balloons, dropdowns, and dialogs","Code","Content editing keystrokes","Execute the currently focused button","Insert code block","Italic","Italic text","Justify","Move focus between form fields (inputs, buttons, etc.)","Move focus to the toolbar, navigate between toolbars","Move out of an inline code style","Navigate through the toolbar","Open the accessibility help dialog","Plain text","Remove color","Remove Format","Restore default","Save","Show more items","Strikethrough","Strikethrough text","Subscript","Superscript","Text alignment","Text alignment toolbar","These keyboard shortcuts allow for quick access to content editing features.","Toggle caption off","Toggle caption on","Underline","Underline text","Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.","User interface and content navigation keystrokes","getPluralForm","CKEDITOR_TRANSLATIONS","(may require <kbd>Fn</kbd>)","Accept","Accessibility help","Align cell text to the bottom","Align cell text to the center","Align cell text to the left","Align cell text to the middle","Align cell text to the right","Align cell text to the top","Align table to the left","Align table to the right","Alignment","All","Almost equal to","Angle","Approximately equal to","Aquamarine","Arrows","Asterisk operator","Austral sign","back with leftwards arrow above","Background","BelowLine truncated
|
||||
{"version":3,"file":"FileSaver.min.js","sources":["../../node_modules/file-saver/dist/FileSaver.js","ckeditor/build/translations/af.js","ckeditor/build/translations/ar.js","ckeditor/build/translations/ast.js","ckeditor/build/translations/az.js","ckeditor/build/translations/bg.js","ckeditor/build/translations/bn.js","ckeditor/build/translations/bs.js","ckeditor/build/translations/ca.js","ckeditor/build/translations/cs.js","ckeditor/build/translations/da.js","ckeditor/build/translations/de-ch.js","ckeditor/build/translations/de.js","ckeditor/build/translations/el.js","ckeditor/build/translations/en-au.js","ckeditor/build/translations/en-gb.js","ckeditor/build/translations/eo.js","ckeditor/build/translations/es-co.js","ckeditor/build/translations/es.js","ckeditor/build/translations/et.js","ckeditor/build/translations/eu.js","ckeditor/build/translations/fa.js","ckeditor/build/translations/fi.js","ckeditor/build/translations/fr.js","ckeditor/build/translations/gl.js","ckeditor/build/translations/gu.js","ckeditor/build/translations/he.js","ckeditor/build/translations/hi.js","ckeditor/build/translations/hr.js","ckeditor/build/translations/hu.js","ckeditor/build/translations/hy.js","ckeditor/build/translations/id.js","ckeditor/build/translations/it.js","ckeditor/build/translations/ja.js","ckeditor/build/translations/jv.js","ckeditor/build/translations/kk.js","ckeditor/build/translations/km.js","ckeditor/build/translations/kn.js","ckeditor/build/translations/ko.js","ckeditor/build/translations/ku.js","ckeditor/build/translations/lt.js","ckeditor/build/translations/lv.js","ckeditor/build/translations/ms.js","ckeditor/build/translations/nb.js","ckeditor/build/translations/ne.js","ckeditor/build/translations/nl.js","ckeditor/build/translations/no.js","ckeditor/build/translations/oc.js","ckeditor/build/translations/pl.js","ckeditor/build/translations/pt-br.js","ckeditor/build/translations/pt.js","ckeditor/build/translations/ro.js","ckeditor/build/translations/ru.js","ckeditor/build/translations/si.js","ckeditor/build/translations/sk.js","ckeditor/build/translations/sl.js","ckeditor/build/translations/sq.js","ckeditor/build/translations/sr-latn.js","ckeditor/build/translations/sr.js","ckeditor/build/translations/sv.js","ckeditor/build/translations/th.js","ckeditor/build/translations/tk.js","ckeditor/build/translations/tr.js","ckeditor/build/translations/tt.js","ckeditor/build/translations/ug.js","ckeditor/build/translations/uk.js","ckeditor/build/translations/ur.js","ckeditor/build/translations/uz.js","ckeditor/build/translations/vi.js","ckeditor/build/translations/zh-cn.js","ckeditor/build/translations/zh.js"],"names":["global","factory","define","amd","exports","FileSaver","this","_global","window","self","download","url","name","opts","xhr","XMLHttpRequest","open","responseType","onload","saveAs","response","onerror","console","error","send","corsEnabled","e","status","click","node","dispatchEvent","MouseEvent","evt","document","createEvent","initMouseEvent","isMacOSWebView","navigator","test","userAgent","HTMLAnchorElement","prototype","blob","URL","webkitURL","a","createElement","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","msSaveOrOpenBlob","autoBom","warn","type","Blob","String","fromCharCode","popup","title","body","innerText","reader","force","isSafari","HTMLElement","safari","isChromeIOS","FileReader","onloadend","result","replace","readAsDataURL","module","t","dictionary","Object","assign","%0 of %1","Align center","Align left","Align right","Block quote","Bold","Bold text","Cancel","Clear","Close contextual balloons, dropdowns, and dialogs","Code","Content editing keystrokes","Execute the currently focused button","Insert code block","Italic","Italic text","Justify","Move focus between form fields (inputs, buttons, etc.)","Move focus to the toolbar, navigate between toolbars","Move out of an inline code style","Navigate through the toolbar","Open the accessibility help dialog","Plain text","Remove color","Remove Format","Restore default","Save","Show more items","Strikethrough","Strikethrough text","Subscript","Superscript","Text alignment","Text alignment toolbar","These keyboard shortcuts allow for quick access to content editing features.","Toggle caption off","Toggle caption on","Underline","Underline text","Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.","User interface and content navigation keystrokes","getPluralForm","CKEDITOR_TRANSLATIONS","(may require <kbd>Fn</kbd>)","Accept","Accessibility help","Align cell text to the bottom","Align cell text to the center","Align cell text to the left","Align cell text to the middle","Align cell text to the right","Align cell text to the top","Align table to the left","Align table to the right","Alignment","All","Almost equal to","Angle","Approximately equal to","Aquamarine","Arrows","Asterisk operator","Austral sign","back with leftwards arrow above","Background","BelowLine truncated
|
||||
@@ -1,2 +1,2 @@
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["angular-file-upload"]=t():e["angular-file-upload"]=t()}(this,function(){return n=[function(e,t,o){"use strict";var n=y(o(1)),r=y(o(2)),i=y(o(3)),s=y(o(4)),a=y(o(5)),l=y(o(6)),p=y(o(7)),u=y(o(8)),c=y(o(9)),f=y(o(10)),d=y(o(11)),h=y(o(12)),o=y(o(13));function y(e){return e&&e.__esModule?e:{default:e}}angular.module(n.default.name,[]).value("fileUploaderOptions",r.default).factory("FileUploader",i.default).factory("FileLikeObject",s.default).factory("FileItem",a.default).factory("FileDirective",l.default).factory("FileSelect",p.default).factory("FileDrop",c.default).factory("FileOver",f.default).factory("Pipeline",u.default).directive("nvFileSelect",d.default).directive("nvFileDrop",h.default).directive("nvFileOver",o.default).run(["FileUploader","FileLikeObject","FileItem","FileDirective","FileSelect","FileDrop","FileOver","Pipeline",function(e,t,o,n,r,i,s,a){e.FileLikeObject=t,e.FileItem=o,e.FileDirective=n,e.FileSelect=r,e.FileDrop=i,e.FileOver=s,e.Pipeline=a}])},function(e,t){e.exports={name:"angularFileUpload"}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={url:"/",alias:"file",headers:{},queue:[],progress:0,autoUpload:!1,removeAfterUpload:!1,method:"POST",filters:[],formData:[],queueLimit:Number.MAX_VALUE,withCredentials:!1,disableMultipart:!1}},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var f=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e)){var o=t,n=[],r=!0,t=!1,i=void 0;try{for(var s,a=e[Symbol.iterator]();!(r=(s=a.next()).done)&&(n.push(s.value),!o||n.length!==o);r=!0);}catch(e){t=!0,i=e}finally{try{!r&&a.return&&a.return()}finally{if(t)throw i}}return n}throw new TypeError("Invalid attempt to destructure non-iterable instance")},t=(t.default=n,o(1));(o=t)&&o.__esModule;var t=angular,l=t.bind,d=t.copy,h=t.extend,y=t.forEach,m=t.isObject,v=t.isNumber,_=t.isDefined,g=t.isArray,b=t.isUndefined,F=t.element;function n(o,e,n,t,r,p,u,c){var i=t.File,s=t.FormData,t=(a.prototype.addToQueue=function(e,o,t){var r=this,i=this.isArrayLikeObject(e)?Array.prototype.slice.call(e):[e],s=this._getFilters(t),n=this.queue.length,a=[],l=function(){r.queue.length!==n&&(r._onAfterAddingAll(a),r.progress=r._getTotalProgress()),r._render(),r.autoUpload&&r.uploadAll()};(function n(){var e=i.shift();if(b(e))return l();var e=r.isFile(e)?e:new p(e),t=r._convertFiltersToPipes(s),t=new c(t);t.onThrown=function(e){var t=e.pipe.originalFilter,e=f(e.args,2),o=e[0],e=e[1];r._onWhenAddingFileFailed(o,t,e),n()},t.onSuccessful=function(e,t){e=new u(r,e,t);a.push(e),r.queue.push(e),r._onAfterAddingFile(e),n()},t.exec(e,o)})()},a.prototype.removeFromQueue=function(e){var e=this.getIndexOfItem(e),t=this.queue[e];t.isUploading&&t.cancel(),this.queue.splice(e,1),t._destroy(),this.progress=this._getTotalProgress()},a.prototype.clearQueue=function(){for(;this.queue.length;)this.queue[0].remove();this.progress=0},a.prototype.uploadItem=function(e){var e=this.getIndexOfItem(e),e=this.queue[e],t=this.isHTML5?"_xhrTransport":"_iframeTransport";e._prepareToUploading(),this.isUploading||(this._onBeforeUploadItem(e),e.isCancel)||(e.isUploading=!0,this.isUploading=!0,this[t](e),this._render())},a.prototype.cancelItem=function(e){var t,o=this,e=this.getIndexOfItem(e),n=this.queue[e],e=this.isHTML5?"_xhr":"_form";n&&(n.isCancel=!0,n.isUploading?n[e].abort():(t=[void 0,0,{}],r(function(){o._onCancelItem.apply(o,[n].concat(t)),o._onCompleteItem.apply(o,[n].concat(t))})))},a.prototype.uploadAll=function(){var e=this.getNotUploadedItems().filter(function(e){return!e.isUploading});e.length&&(y(e,function(e){return e._prepareToUploading()}),e[0].upload())},a.prototype.cancelAll=function(){var e=this.getNotUploadedItems();y(e,function(e){return e.cancel()})},a.prototype.isFile=function(e){return this.constructor.isFile(e)},a.prototype.isFileLikeObject=function(e){return this.constructor.isFileLikeObject(e)},a.prototype.isArrayLikeObject=function(e){return this.constructor.isArrayLikeObject(e)},a.prototype.getIndexOfItem=function(e){return v(e)?e:this.queue.indexOf(e)},a.prototype.getNotUploadedItems=function(){return this.queue.filter(function(e){return!e.isUploaded})},a.prototype.getReadyItems=function(){return this.queue.filter(function(e){return e.isReady&&!e.isUploading}).sort(function(e,t){return e.index-t.index})},a.prototype.destroy=function(){var t=this;y(this._directives,function(e){y(t._directives[e],function(e){e.destroy()})})},a.prototype.onAfterAddingAll=function(e){},a.prototype.onAfterAddingFile=function(e){},a.prototype.onWhenAddingFileFailed=function(e,t,o){},a.prototype.onBeforeUploadItem=function(e){},a.prototype.onProgressItem=function(e,t){},a.prototype.onProgressAll=function(e){},a.prototype.onSuccessItem=function(e,t,o,n){},a.prototype.onErrorItem=function(e,t,o,n){},a.pLine truncated
|
||||
((e,t)=>{"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["angular-file-upload"]=t():e["angular-file-upload"]=t()})(this,function(){return n=[function(e,t,o){var n=y(o(1)),r=y(o(2)),i=y(o(3)),s=y(o(4)),a=y(o(5)),l=y(o(6)),p=y(o(7)),u=y(o(8)),c=y(o(9)),f=y(o(10)),d=y(o(11)),h=y(o(12)),o=y(o(13));function y(e){return e&&e.__esModule?e:{default:e}}angular.module(n.default.name,[]).value("fileUploaderOptions",r.default).factory("FileUploader",i.default).factory("FileLikeObject",s.default).factory("FileItem",a.default).factory("FileDirective",l.default).factory("FileSelect",p.default).factory("FileDrop",c.default).factory("FileOver",f.default).factory("Pipeline",u.default).directive("nvFileSelect",d.default).directive("nvFileDrop",h.default).directive("nvFileOver",o.default).run(["FileUploader","FileLikeObject","FileItem","FileDirective","FileSelect","FileDrop","FileOver","Pipeline",function(e,t,o,n,r,i,s,a){e.FileLikeObject=t,e.FileItem=o,e.FileDirective=n,e.FileSelect=r,e.FileDrop=i,e.FileOver=s,e.Pipeline=a}])},function(e,t){e.exports={name:"angularFileUpload"}},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={url:"/",alias:"file",headers:{},queue:[],progress:0,autoUpload:!1,removeAfterUpload:!1,method:"POST",filters:[],formData:[],queueLimit:Number.MAX_VALUE,withCredentials:!1,disableMultipart:!1}},function(e,t,o){Object.defineProperty(t,"__esModule",{value:!0});var f=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e)){var o=t,n=[],r=!0,t=!1,i=void 0;try{for(var s,a=e[Symbol.iterator]();!(r=(s=a.next()).done)&&(n.push(s.value),!o||n.length!==o);r=!0);}catch(e){t=!0,i=e}finally{try{!r&&a.return&&a.return()}finally{if(t)throw i}}return n}throw new TypeError("Invalid attempt to destructure non-iterable instance")},t=(t.default=n,o(1));(o=t)&&o.__esModule;var t=angular,l=t.bind,d=t.copy,h=t.extend,y=t.forEach,m=t.isObject,v=t.isNumber,_=t.isDefined,g=t.isArray,b=t.isUndefined,F=t.element;function n(o,e,n,t,r,p,u,c){var i=t.File,s=t.FormData,t=(a.prototype.addToQueue=function(e,o,t){var r=this,i=this.isArrayLikeObject(e)?Array.prototype.slice.call(e):[e],s=this._getFilters(t),n=this.queue.length,a=[],l=function(){r.queue.length!==n&&(r._onAfterAddingAll(a),r.progress=r._getTotalProgress()),r._render(),r.autoUpload&&r.uploadAll()};(function n(){var e=i.shift();if(b(e))return l();var e=r.isFile(e)?e:new p(e),t=r._convertFiltersToPipes(s),t=new c(t);t.onThrown=function(e){var t=e.pipe.originalFilter,e=f(e.args,2),o=e[0];r._onWhenAddingFileFailed(o,t,e[1]),n()},t.onSuccessful=function(e,t){e=new u(r,e,t);a.push(e),r.queue.push(e),r._onAfterAddingFile(e),n()},t.exec(e,o)})()},a.prototype.removeFromQueue=function(e){var e=this.getIndexOfItem(e),t=this.queue[e];t.isUploading&&t.cancel(),this.queue.splice(e,1),t._destroy(),this.progress=this._getTotalProgress()},a.prototype.clearQueue=function(){for(;this.queue.length;)this.queue[0].remove();this.progress=0},a.prototype.uploadItem=function(e){var e=this.getIndexOfItem(e),e=this.queue[e],t=this.isHTML5?"_xhrTransport":"_iframeTransport";e._prepareToUploading(),this.isUploading||(this._onBeforeUploadItem(e),e.isCancel)||(e.isUploading=!0,this.isUploading=!0,this[t](e),this._render())},a.prototype.cancelItem=function(e){var t,o=this,e=this.getIndexOfItem(e),n=this.queue[e],e=this.isHTML5?"_xhr":"_form";n&&(n.isCancel=!0,n.isUploading?n[e].abort():(t=[void 0,0,{}],r(function(){o._onCancelItem.apply(o,[n].concat(t)),o._onCompleteItem.apply(o,[n].concat(t))})))},a.prototype.uploadAll=function(){var e=this.getNotUploadedItems().filter(function(e){return!e.isUploading});e.length&&(y(e,function(e){return e._prepareToUploading()}),e[0].upload())},a.prototype.cancelAll=function(){var e=this.getNotUploadedItems();y(e,function(e){return e.cancel()})},a.prototype.isFile=function(e){return this.constructor.isFile(e)},a.prototype.isFileLikeObject=function(e){return this.constructor.isFileLikeObject(e)},a.prototype.isArrayLikeObject=function(e){return this.constructor.isArrayLikeObject(e)},a.prototype.getIndexOfItem=function(e){return v(e)?e:this.queue.indexOf(e)},a.prototype.getNotUploadedItems=function(){return this.queue.filter(function(e){return!e.isUploaded})},a.prototype.getReadyItems=function(){return this.queue.filter(function(e){return e.isReady&&!e.isUploading}).sort(function(e,t){return e.index-t.index})},a.prototype.destroy=function(){var t=this;y(this._directives,function(e){y(t._directives[e],function(e){e.destroy()})})},a.prototype.onAfterAddingAll=function(e){},a.prototype.onAfterAddingFile=function(e){},a.prototype.onWhenAddingFileFailed=function(e,t,o){},a.prototype.onBeforeUploadItem=function(e){},a.prototype.onProgressItem=function(e,t){},a.prototype.onProgressAll=function(e){},a.prototype.onSuccessItem=function(e,t,o,n){},a.prototype.onErrorItem=function(e,t,o,n){},a.prototype.onCancelItem=function(e,t,o,n){},a.protLine truncated
|
||||
//# sourceMappingURL=angular-file-upload.min.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"angular-file-upload.min.js","sources":["../../node_modules/angular-file-upload/dist/angular-file-upload.js","../Common/angular-file-upload.trump.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","_config2","_interopRequireDefault","_options2","_FileUploader2","_FileLikeObject2","_FileItem2","_FileDirective2","_FileSelect2","_Pipeline2","_FileDrop2","_FileOver2","_FileSelect4","_FileDrop4","_FileOver4","obj","__esModule","default","angular","name","value","directive","run","FileUploader","FileLikeObject","FileItem","FileDirective","FileSelect","FileDrop","FileOver","Pipeline","Object","defineProperty","url","alias","headers","queue","progress","autoUpload","removeAfterUpload","method","filters","formData","queueLimit","Number","MAX_VALUE","withCredentials","disableMultipart","_slicedToArray","arr","i","Array","isArray","Symbol","iterator","sliceIterator","_arr","_n","_d","_e","undefined","_s","_i","next","done","push","length","err","TypeError","_config","__identity","_angular","bind","copy","extend","forEach","isObject","isNumber","isDefined","isUndefined","element","fileUploaderOptions","$rootScope","$http","$window","$timeout","File","FormData","prototype","addToQueue","files","options","_this","incomingQueue","isArrayLikeObject","slice","call","arrayOfFilters","_getFilters","count","addedFileItems","_onAfterAddingAll","_getTotalProgress","_render","uploadAll","something","shift","fileLikeObject","isFile","pipes","_convertFiltersToPipes","pipeline","onThrown","originalFilter","pipe","_err$args","args","_onWhenAddingFileFailed","onSuccessful","fileItem","_onAfterAddingFile","exec","removeFromQueue","index","getIndexOfItem","item","isUploading","cancel","splice","_destroy","clearQueue","remove","uploadItem","transport","isHTML5","_prepareToUploading","_onBeforeUploadItem","isCancel","cancelItem","dummy","_this2","prop","abort","_onCancelItem","apply","concat","_onCompleteItem","items","getNotUploadedItems","filter","upload","cancelAll","constructor","isFileLikeObject","indexOf","isUploaded","getReadyItems","isReady","sort","item1","item2","destroy","_this3","_directives","key","object","onAfterAddingAll","fileItems","onAfterAddingFile","onWhenAddingFileFailed","onBeforeUploadItem","onProgressItem","onProgressAll","onSuccessItem","response","status","onErrorItem","onCancelItem","onCompleteItem","onTimeoutItem","onCompleteAll","uploaded","ratio","notUploaded","Math","round","names","match","_this4","map","fn","isAsync","$$phase","$apply","_folderFilter","size","type","_queueLimitFilter","_isSuccessCode","_transformResponse","headersGetter","_headersGetter","defaults","transformResponse","transformFn","_parseHeaders","parsed","split","line","trim","toLowerCase","val","parsedHeaders","_xhrTransport","sendable","_this5","xhr","_xhr","XMLHttpRequest","_file","append","file","onprogress","event","lengthComputable","loaded","total","_onProgressItem","onload","getAllResponseHeaders","gist","onerror","_onErrorItem","onabort","ontimeout","e","_onTimeoutItem","open","timeout","setRequestHeader","send","_iframeTransport","_this6","form","iframe","Date","now","input","_input","timer","isTimedOut","_form","replaceWith","element_","action","target","enctype","encoding","html","contentDocument","body","innerHTML","clearTimeout","_onSuccessItem","unbind","after","setTimeout","submit","_onBeforeUpload","_onProgress","_onSuccess","_onError","_onCancel","_onComplete","nextItem","_onTimeout","inherit","source","create","super_","settings","_nextIndex","select","drop","over","unshift","$inject","fileOrInput","fakePathOrObject","isElement","isString","_createFromFakePath","path","lastModifiedDate","lastIndexOf","_createFromObject","$compile","uploader","message","code","onBeforeUpload","onProgress","onSuccess","onError","onCancel","onComplete","onTimeout","isSuccess","isError","_replaceNode","clone","scope","css","some","isInput","_saveLinks","events","_FileDirective","subClass","superClass","extendedOptions","$destroy","change","self","ReferenceError","removeAttr","enumerable","writable","configurable","setPrototypeOf","__proto__","getOptions","getFilters","isEmptyAfterSelection","attr","onChange","_toConsumableArray","arr2","from","$q","deferred","onFulfilled","onRejected","Error","defer","promise","then","Boolean","_len","arguments","_key","instance","Constructor","dragover","dragleave","onDrop","transfer","_getTransfer","_preventAndStop","_removeOverClass","onDragOver","_haveFiles","types","dropEffect","_addOverClass","onDragLeave","currentTarget","dataTransfer","originalEvent","preventDefault","stopPropagation","contains","addOverClass","removeOverClass","overClass","addClass","getOverClass","removeClass","$parse","link","attributes","$eval","installedModules","m","c","p","moduleId","id","FileUploaderDecorator","$delegate","$cookies","token","get","X-XSRF-TOKEN","FileDropDecorator","onDragLeaveTimer","that","decorator"],"mappings":"AAKA,CAAA,SAA2CA,EALine truncated
|
||||
{"version":3,"file":"angular-file-upload.min.js","sources":["../../node_modules/angular-file-upload/dist/angular-file-upload.js","../Common/angular-file-upload.trump.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","_config2","_interopRequireDefault","_options2","_FileUploader2","_FileLikeObject2","_FileItem2","_FileDirective2","_FileSelect2","_Pipeline2","_FileDrop2","_FileOver2","_FileSelect4","_FileDrop4","_FileOver4","obj","__esModule","default","angular","name","value","directive","run","FileUploader","FileLikeObject","FileItem","FileDirective","FileSelect","FileDrop","FileOver","Pipeline","Object","defineProperty","url","alias","headers","queue","progress","autoUpload","removeAfterUpload","method","filters","formData","queueLimit","Number","MAX_VALUE","withCredentials","disableMultipart","_slicedToArray","arr","i","Array","isArray","Symbol","iterator","sliceIterator","_arr","_n","_d","_e","undefined","_s","_i","next","done","push","length","err","TypeError","_config","__identity","_angular","bind","copy","extend","forEach","isObject","isNumber","isDefined","isUndefined","element","fileUploaderOptions","$rootScope","$http","$window","$timeout","File","FormData","prototype","addToQueue","files","options","_this","incomingQueue","isArrayLikeObject","slice","call","arrayOfFilters","_getFilters","count","addedFileItems","_onAfterAddingAll","_getTotalProgress","_render","uploadAll","something","shift","fileLikeObject","isFile","pipes","_convertFiltersToPipes","pipeline","onThrown","originalFilter","pipe","_err$args","args","_onWhenAddingFileFailed","onSuccessful","fileItem","_onAfterAddingFile","exec","removeFromQueue","index","getIndexOfItem","item","isUploading","cancel","splice","_destroy","clearQueue","remove","uploadItem","transport","isHTML5","_prepareToUploading","_onBeforeUploadItem","isCancel","cancelItem","dummy","_this2","prop","abort","_onCancelItem","apply","concat","_onCompleteItem","items","getNotUploadedItems","filter","upload","cancelAll","constructor","isFileLikeObject","indexOf","isUploaded","getReadyItems","isReady","sort","item1","item2","destroy","_this3","_directives","key","object","onAfterAddingAll","fileItems","onAfterAddingFile","onWhenAddingFileFailed","onBeforeUploadItem","onProgressItem","onProgressAll","onSuccessItem","response","status","onErrorItem","onCancelItem","onCompleteItem","onTimeoutItem","onCompleteAll","uploaded","ratio","notUploaded","Math","round","names","match","_this4","map","fn","isAsync","$$phase","$apply","_folderFilter","size","type","_queueLimitFilter","_isSuccessCode","_transformResponse","headersGetter","_headersGetter","defaults","transformResponse","transformFn","_parseHeaders","parsed","split","line","trim","toLowerCase","val","parsedHeaders","_xhrTransport","sendable","_this5","xhr","_xhr","XMLHttpRequest","_file","append","file","onprogress","event","lengthComputable","loaded","total","_onProgressItem","onload","getAllResponseHeaders","gist","onerror","_onErrorItem","onabort","ontimeout","e","_onTimeoutItem","open","timeout","setRequestHeader","send","_iframeTransport","_this6","form","iframe","Date","now","input","_input","timer","isTimedOut","_form","replaceWith","element_","action","target","enctype","encoding","html","contentDocument","body","innerHTML","clearTimeout","_onSuccessItem","unbind","after","setTimeout","submit","_onBeforeUpload","_onProgress","_onSuccess","_onError","_onCancel","_onComplete","nextItem","_onTimeout","inherit","source","create","super_","settings","_nextIndex","select","drop","over","unshift","$inject","fileOrInput","fakePathOrObject","isElement","isString","_createFromFakePath","path","lastModifiedDate","lastIndexOf","_createFromObject","$compile","uploader","message","code","onBeforeUpload","onProgress","onSuccess","onError","onCancel","onComplete","onTimeout","isSuccess","isError","_replaceNode","clone","scope","css","some","isInput","_saveLinks","events","_FileDirective","subClass","superClass","extendedOptions","$destroy","change","self","ReferenceError","removeAttr","enumerable","writable","configurable","setPrototypeOf","__proto__","getOptions","getFilters","isEmptyAfterSelection","attr","onChange","_toConsumableArray","arr2","from","$q","deferred","onFulfilled","onRejected","Error","defer","promise","then","Boolean","_len","arguments","_key","instance","Constructor","dragover","dragleave","onDrop","transfer","_getTransfer","_preventAndStop","_removeOverClass","onDragOver","_haveFiles","types","dropEffect","_addOverClass","onDragLeave","currentTarget","dataTransfer","originalEvent","preventDefault","stopPropagation","contains","addOverClass","removeOverClass","overClass","addClass","getOverClass","removeClass","$parse","link","attributes","$eval","installedModules","m","c","p","moduleId","id","FileUploaderDecorator","$delegate","$cookies","token","get","X-XSRF-TOKEN","FileDropDecorator","onDragLeaveTimer","that","decorator"],"mappings":"CAKA,CAA2CA,EAAMC,KLine truncated
|
||||
@@ -18,6 +18,8 @@ $sg-login-width: grid-step(5);
|
||||
.sg-logo {
|
||||
// Center image
|
||||
margin: auto;
|
||||
margin-top: 60px;
|
||||
margin-bottom: 60px;
|
||||
img {
|
||||
height: 100%;
|
||||
width: grid-step(5);
|
||||
@@ -50,6 +52,13 @@ $sg-login-width: grid-step(5);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.create-account-link {
|
||||
color: rgb(255, 255, 255);
|
||||
font-size: 1em;
|
||||
text-decoration: none;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.password-lost-link {
|
||||
color: rgb(255, 255, 255);
|
||||
font-size: 0.9em;
|
||||
|
||||
@@ -452,6 +452,10 @@ md-dialog md-dialog-actions.sg-mail-editor-attachments {
|
||||
.sogo-raw-html-embed .raw-html-embed__preview-placeholder {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.ck-content p {
|
||||
margin: revert;
|
||||
}
|
||||
}
|
||||
|
||||
// Search highlight
|
||||
@@ -527,4 +531,10 @@ mark {
|
||||
cursor: pointer;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
/* Clean mailbox */
|
||||
|
||||
.clean-mailbox-warn {
|
||||
color: #f44336;
|
||||
}
|
||||
Reference in new issue
Block a user