diff --git a/Changelog b/Changelog
index 61d067a7..a5347d41 100644
--- a/Changelog
+++ b/Changelog
@@ -1,5 +1,12 @@
ownCloud Contacts Changelog
+6.0.3
+- Some browsers showed the contact photo crop editor in upper-left corner.
+- Added test for functional localStorage.
+- Fixed CardDAV Extended MKCOL.
+- The list item for an open contact disappeared if the user clicked on "New contact".
+- Silenced annoying warning on address book sharing.
+
6.0.2
- Many improvements for groups both front- and back-end.
- Fix unusable app after import of contact with no name.
diff --git a/appinfo/routes.php b/appinfo/routes.php
index b7083d4e..0d0e6301 100644
--- a/appinfo/routes.php
+++ b/appinfo/routes.php
@@ -67,6 +67,17 @@ $this->create('contacts_address_book', 'addressbook/{backend}/{addressBookId}')
)
->requirements(array('backend', 'addressBookId'));
+$this->create('contacts_address_book_contacts', 'addressbook/{backend}/{addressBookId}/contacts')
+ ->get()
+ ->action(
+ function($params) {
+ \OC::$session->close();
+ $dispatcher = new Dispatcher($params);
+ $dispatcher->dispatch('AddressBookController', 'getContacts');
+ }
+ )
+ ->requirements(array('backend', 'addressBookId'));
+
$this->create('contacts_address_book_headers', 'addressbook/{backend}/{addressBookId}')
->method('HEAD')
->action(
diff --git a/js/app.js b/js/app.js
index 8e74b5e3..7e34f6d6 100644
--- a/js/app.js
+++ b/js/app.js
@@ -1598,7 +1598,7 @@ OC.notify = function(params) {
if(!this.$cropBoxTmpl) {
this.$cropBoxTmpl = $('#cropBoxTemplate');
}
- var $container = $('
').appendTo($('body'));
+ var $container = $('').appendTo($('#content'));
var $dlg = this.$cropBoxTmpl.octemplate().prependTo($container);
$.when(this.storage.getTempContactPhoto(
diff --git a/js/contacts.js b/js/contacts.js
index 27ca0dbe..d5d574ed 100644
--- a/js/contacts.js
+++ b/js/contacts.js
@@ -1564,64 +1564,6 @@ OC.Contacts = OC.Contacts || {};
$('body').bind('click', bodyListener);
});
});
- $elem.find('.value.city')
- .autocomplete({
- source: function( request, response ) {
- $.ajax({
- url: 'http://ws.geonames.org/searchJSON',
- dataType: 'jsonp',
- data: {
- featureClass: 'P',
- style: 'full',
- maxRows: 12,
- lang: $elem.data('lang'),
- name_startsWith: request.term
- },
- success: function( data ) {
- response( $.map( data.geonames, function( item ) {
- return {
- label: item.name + (item.adminName1 ? ', ' + item.adminName1 : '') + ', ' + item.countryName,
- value: item.name,
- country: item.countryName
- };
- }));
- }
- });
- },
- minLength: 2,
- select: function( event, ui ) {
- if(ui.item && $.trim($elem.find('.value.country').val()).length === 0) {
- $elem.find('.value.country').val(ui.item.country);
- }
- }
- });
- $elem.find('.value.country')
- .autocomplete({
- source: function(request, response) {
- $.ajax({
- url: 'http://ws.geonames.org/searchJSON',
- dataType: 'jsonp',
- data: {
- /*featureClass: "A",*/
- featureCode: 'PCLI',
- /*countryBias: "true",*/
- /*style: "full",*/
- lang: lang,
- maxRows: 12,
- name_startsWith: request.term
- },
- success: function( data ) {
- response( $.map( data.geonames, function( item ) {
- return {
- label: item.name,
- value: item.name
- };
- }));
- }
- });
- },
- minLength: 2
- });
return $elem;
};
@@ -2591,7 +2533,7 @@ OC.Contacts = OC.Contacts || {};
}
var self = this;
- return $.when(self.storage.getAddressBook(backend, addressBookId, false))
+ return $.when(self.storage.getContacts(backend, addressBookId, false))
.then(function(response) {
console.log('ContactList.loadContacts - fetching', response);
if(!response.error) {
diff --git a/js/storage.js b/js/storage.js
index 51b151e9..51bc562d 100644
--- a/js/storage.js
+++ b/js/storage.js
@@ -57,6 +57,26 @@ OC.Contacts = OC.Contacts || {};
this.user = user ? user : OC.currentUser;
};
+ /**
+ * Test if localStorage is working
+ *
+ * @return bool
+ */
+ Storage.prototype.hasLocalStorage = function() {
+ if (Modernizr && !Modernizr.localStorage) {
+ return false;
+ }
+ // Some browsers report support but doesn't have it
+ // e.g. Safari in private browsing mode.
+ try {
+ OC.localStorage.setItem('Hello', 'World');
+ OC.localStorage.removeItem('Hello');
+ } catch (e) {
+ return false;
+ }
+ return true;
+ };
+
/**
* When the response isn't returned from requestRoute(), you can
* wrap it in a JSONResponse so that it's parsable by other objects.
@@ -148,7 +168,7 @@ OC.Contacts = OC.Contacts || {};
Storage.prototype.deleteAddressBook = function(backend, addressBookId) {
var key = 'contacts::' + backend + '::' + addressBookId;
- if(OC.localStorage.hasItem(key)) {
+ if(this.hasLocalStorage() && OC.localStorage.hasItem(key)) {
OC.localStorage.removeItem(key);
}
@@ -204,6 +224,42 @@ OC.Contacts = OC.Contacts || {};
);
};
+ /**
+ * Get metadata from an address book from a specific backend
+ *
+ * @param string backend
+ * @param string addressBookId Address book ID
+ * @return
+ *
+ * metadata:
+ * {
+ * id:'1234'
+ * permissions:31,
+ * displayname:'Contacts',
+ * lastmodified: (unix timestamp),
+ * owner: 'joye'
+ * }
+ */
+ Storage.prototype.getAddressBook = function(backend, addressBookId) {
+ var defer = $.Deferred();
+
+ $.when(this.requestRoute(
+ 'addressbook/{backend}/{addressBookId}',
+ 'GET',
+ {backend: backend, addressBookId: addressBookId},
+ ''
+ ))
+ .then(function(response) {
+ console.log('response', response);
+ defer.resolve(response);
+ })
+ .fail(function(response) {
+ console.warn('Request Failed:', response.message);
+ defer.reject(response);
+ });
+ return defer;
+ };
+
/**
* Get contacts from an address book from a specific backend
*
@@ -223,18 +279,19 @@ OC.Contacts = OC.Contacts || {};
* data: //array of VCard data
* }
*/
- Storage.prototype.getAddressBook = function(backend, addressBookId) {
- var headers = {},
+ Storage.prototype.getContacts = function(backend, addressBookId) {
+ var self = this,
+ headers = {},
data,
key = 'contacts::' + backend + '::' + addressBookId,
defer = $.Deferred();
- if(OC.localStorage.hasItem(key)) {
+ if(this.hasLocalStorage() && OC.localStorage.hasItem(key)) {
data = OC.localStorage.getItem(key);
headers['If-None-Match'] = data.Etag;
}
$.when(this.requestRoute(
- 'addressbook/{backend}/{addressBookId}',
+ 'addressbook/{backend}/{addressBookId}/contacts',
'GET',
{backend: backend, addressBookId: addressBookId},
'',
@@ -246,7 +303,9 @@ OC.Contacts = OC.Contacts || {};
console.log('Returning fetched address book');
if(response.data) {
response.data.Etag = response.getResponseHeader('Etag');
- OC.localStorage.setItem(key, response.data);
+ if (!self.hasLocalStorage()) {
+ OC.localStorage.setItem(key, response.data);
+ }
defer.resolve(response);
}
} else if(response.statusCode === 304) {
diff --git a/l10n/el.php b/l10n/el.php
index 63e181ae..b8768819 100644
--- a/l10n/el.php
+++ b/l10n/el.php
@@ -1,6 +1,11 @@
"Επαφές",
"Save" => "Αποθήκευση",
+"Starting file import" => "Έναρξη εισαγωγής αρχείου",
+"Format selected: {format}" => "Επιλεγμένη μορφή: {format}",
+"Automatic format detection" => "Αυτόματη ανίχνευση μορφής",
+"Processing {count}/{total} cards" => "Επεξεργασία {count}/{total} καρτών",
+"Total:{total}, Success:{imported}, Errors:{failed}" => "Σύνολο:{total}, Επιτυχείς:{imported}, Ανεπιτυχείς:{failed}",
"An address book called {name} already exists" => "Το βιβλίο διευθύνσεων με το όνομα {name} υπάρχει ήδη ",
"Failed adding address book: {error}" => "Αποτυχία πρόσθεσης βιβλίου διευθύνσεων: {error}",
"Failed loading address books: {error}" => "Αποτυχία φόρτωσης βιβλίων διευθύνσεων: {error}",
@@ -17,6 +22,8 @@
"Merge failed. Error saving contact." => "Αποτυχία συγχώνευσης. Σφάλμα αποθήκευσης επαφής.",
"Select photo" => "Επέλεξε φωτογραφία",
"Network or server error. Please inform administrator." => "Σφάλμα δικτύου ή διακομιστή. Παρακαλώ ενημερώστε το διαχειριστή.",
+"Only images can be used as contact photos" => "Μόνο αρχεία εικόνας μπορούν να χρησιμοποιηθούν σαν φωτογραφίες επαφών",
+"The size of \"{filename}\" exceeds the maximum allowed {size}" => "Το μέγεθος του \"{filename}\" υπερβαίνει το μέγιστο επιτρεπόμενο {size}",
"Error adding to group." => "Σφάλμα κατά την προσθήκη σε ομάδα.",
"Error removing from group." => "Σφάλμα κατά την αφαίρεση από ομάδα.",
"You have selected over 300 contacts.\nThis will most likely fail! Click here to try anyway." => "Έχετε επιλέξει πάνω από 300 επαφές.\nΑυτό μάλλον θα αποτύχει! Κλικάρετε εδώ για να δοκιμάσετε ούτως ή άλλως.",
@@ -31,6 +38,7 @@
"Error parsing date: {date}" => "Σφάλμα κατά την ανάλυση της ημερομηνίας: {date}",
"# groups" => "# ομάδων",
"Error parsing birthday {bday}" => "Σφάλμα κατά την ανάλυση των γενεθλίων {bday}",
+"The backend does not support multi-byte characters." => "Το σύστημα δεν υποστηρίζει χαρακτήρες πολλών bytes",
"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Κάποιες επαφές σημειώθηκαν προς διαγραφή αλλά δεν έχουν διαγραφεί ακόμα. Παρακαλώ περιμένετε μέχρι να διαγραφούν.",
"Click to undo deletion of {num} contacts" => "Επιλέξτε για να αναιρέσετε τη διαγραφή {num} επαφών",
"Cancelled deletion of {num} contacts" => "Αναιρέθηκε η διαγραφή {num} επαφών",
@@ -67,6 +75,7 @@
"You do not have permissions to delete this contact" => "Δεν έχετε άδεια για τη διαγραφή αυτής της επαφής",
"The backend for this address book does not support deleting contacts" => "Το σύστημα για αυτό το βιβλίο διευθύνσεων δεν υποστηρίζει τη διαγραφή επαφών",
"Unknown error" => "Άγνωστο σφάλμα",
+"Access denied" => "Δεν επιτρέπεται η πρόσβαση",
"The backend for this address book does not support updating" => "Το σύστημα για αυτό το βιβλίο διευθύνσεων δεν υποστηρίζει ενημέρωση ",
"You don't have permissions to delete the address book." => "Δεν έχετε άδεια να διαγράψετε το βιβλίο διευθύνσεων.",
"Address book not found" => "Δε βρέθηκε βιβλίο διευθύνσεων",
@@ -79,13 +88,16 @@
"Unknown IM: " => "Άγνωστο AM:",
"{name}'s Birthday" => "Τα γενέθλια του/της {name}",
"Error creating address book" => "Σφάλμα κατά την δημιουργία βιβλίου διευθύνσεων ",
+"The \"%s\" backend does not support deleting address books" => "Το σύστημα \"%s\" δεν υποστηρίζει την διαγραφή βιβλίων διευθύνσεων",
"You do not have permissions to delete the \"%s\" address book" => "Δεν έχετε άδεια να διαγράψετε το βιβλίο διευθύνσεων \"%s\"",
"Error deleting address book" => "Σφάλμα κατά την διαγραφή βιβλίου διεευθύνσεων ",
"Error creating contact." => "Σφάλμα δημιουργίας επαφής.",
"Error creating contact" => "Σφάλμα δημιουργίας επαφής",
"Error deleting contact" => "Σφάλμα διαγραφής επαφής",
+"Error retrieving contact" => "Σφάλμα κατά την ανάκτηση της επαφής",
"Error saving contact" => "Σφάλμα αποθήκευσης επαφής",
"Error removing contact from other address book." => "Σφάλμα διαγραφής επαφής από άλλο βιβλίο διευθύνσεων.",
+"Error getting moved contact" => "Σφάλμα κατά την λήψη μετακινημένης επαφής",
"Couldn't find contact." => "Αδυναμία εύρεσης επαφής.",
"No contact data in request." => "Δεν υπάρχουν δεδομένα επαφής στο αίτημα.",
"Error merging into contact." => "Σφάλμα κατά τη συγχώνευση με επαφή. ",
@@ -97,6 +109,7 @@
"Error saving contact to backend" => "Σφάλμα κατά την αποθήκευση επαφής στο σύστημα",
"Error getting user photo" => "Σφάλμα κατά την λήψη φωτογραφίας χρήστη",
"No photo path was submitted." => "Δεν δόθηκε διαδρομή εικόνας",
+"Error loading image from cache" => "Σφάλμα κατά την φόρτωση της εικόνας από την προσωρινή αποθήκευση",
"Error getting PHOTO property." => "Σφάλμα κατά τη λήψη ιδιοτήτων ΦΩΤΟΓΡΑΦΙΑΣ.",
"Error saving contact." => "Σφάλμα κατά την αποθήκευση επαφής.",
"No group name given." => "Δεν δόθηκε όνομα ομάδας.",
@@ -160,6 +173,7 @@
"Address books" => "Βιβλία Διευθύνσεων",
"Display name" => "Προβαλλόμενο όνομα",
"Add Address Book" => "Προσθήκη Βιβλίου Διευθύνσεων",
+"Automatic format" => "Αυτόματη μορφοποίηση",
"Select file..." => "Επιλογή αρχείου...",
"(De-)select all" => "(Απο-)επιλογή όλων",
"Sort order" => "Σειρά ταξινόμησης",
diff --git a/l10n/el/contacts.po b/l10n/el/contacts.po
index bd7752c3..99e77935 100644
--- a/l10n/el/contacts.po
+++ b/l10n/el/contacts.po
@@ -21,6 +21,7 @@
# Nisok Kosin , 2012
# Petros Kyladitis , 2011-2012
# Serenata , 2013
+# pe_ppe , 2014
# Teogramm , 2013
# xneo1 , 2013
# xneo1 , 2012
@@ -33,9 +34,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-03-26 05:41-0400\n"
-"PO-Revision-Date: 2014-03-26 06:00+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-04-01 00:49-0400\n"
+"PO-Revision-Date: 2014-03-31 16:21+0000\n"
+"Last-Translator: pe_ppe \n"
"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -53,23 +54,23 @@ msgstr "Αποθήκευση"
#: js/addressbooks.js:306
msgid "Starting file import"
-msgstr ""
+msgstr "Έναρξη εισαγωγής αρχείου"
#: js/addressbooks.js:310 js/addressbooks.js:338
msgid "Format selected: {format}"
-msgstr ""
+msgstr "Επιλεγμένη μορφή: {format}"
#: js/addressbooks.js:313 js/addressbooks.js:341
msgid "Automatic format detection"
-msgstr ""
+msgstr "Αυτόματη ανίχνευση μορφής"
#: js/addressbooks.js:391
msgid "Processing {count}/{total} cards"
-msgstr ""
+msgstr "Επεξεργασία {count}/{total} καρτών"
#: js/addressbooks.js:415
msgid "Total:{total}, Success:{imported}, Errors:{failed}"
-msgstr ""
+msgstr "Σύνολο:{total}, Επιτυχείς:{imported}, Ανεπιτυχείς:{failed}"
#: js/addressbooks.js:569
msgid "An address book called {name} already exists"
@@ -137,11 +138,11 @@ msgstr "Σφάλμα δικτύου ή διακομιστή. Παρακαλώ ε
#: js/app.js:789
msgid "Only images can be used as contact photos"
-msgstr ""
+msgstr "Μόνο αρχεία εικόνας μπορούν να χρησιμοποιηθούν σαν φωτογραφίες επαφών"
#: js/app.js:798
msgid "The size of \"{filename}\" exceeds the maximum allowed {size}"
-msgstr ""
+msgstr "Το μέγεθος του \"{filename}\" υπερβαίνει το μέγιστο επιτρεπόμενο {size}"
#: js/app.js:967
msgid "Error adding to group."
@@ -204,19 +205,19 @@ msgstr "Σφάλμα κατά την ανάλυση των γενεθλίων {b
#: js/contacts.js:1315
msgid "The backend does not support multi-byte characters."
-msgstr ""
+msgstr "Το σύστημα δεν υποστηρίζει χαρακτήρες πολλών bytes"
-#: js/contacts.js:2270
+#: js/contacts.js:2212
msgid ""
"Some contacts are marked for deletion, but not deleted yet. Please wait for "
"them to be deleted."
msgstr "Κάποιες επαφές σημειώθηκαν προς διαγραφή αλλά δεν έχουν διαγραφεί ακόμα. Παρακαλώ περιμένετε μέχρι να διαγραφούν."
-#: js/contacts.js:2281
+#: js/contacts.js:2223
msgid "Click to undo deletion of {num} contacts"
msgstr "Επιλέξτε για να αναιρέσετε τη διαγραφή {num} επαφών"
-#: js/contacts.js:2290
+#: js/contacts.js:2232
msgid "Cancelled deletion of {num} contacts"
msgstr "Αναιρέθηκε η διαγραφή {num} επαφών"
@@ -319,7 +320,7 @@ msgstr "Κλείσιμο"
msgid "Server error! Please inform system administator"
msgstr "Σφάλμα διακομιστή! Παρακαλώ ενημερώστε το διαχειριστή"
-#: js/storage.js:346 js/storage.js:385
+#: js/storage.js:405 js/storage.js:444
msgid "Failed loading photo: {error}"
msgstr "Αποτυχία φόρτωσης φωτογραφίας: {error}"
@@ -357,7 +358,7 @@ msgstr "Άγνωστο σφάλμα"
#: lib/addressbook.php:410
msgid "Access denied"
-msgstr ""
+msgstr "Δεν επιτρέπεται η πρόσβαση"
#: lib/addressbook.php:417
msgid "The backend for this address book does not support updating"
@@ -403,51 +404,51 @@ msgstr "Άγνωστο AM:"
msgid "{name}'s Birthday"
msgstr "Τα γενέθλια του/της {name}"
-#: lib/controller/addressbookcontroller.php:141
+#: lib/controller/addressbookcontroller.php:163
msgid "Error creating address book"
msgstr "Σφάλμα κατά την δημιουργία βιβλίου διευθύνσεων "
-#: lib/controller/addressbookcontroller.php:173
+#: lib/controller/addressbookcontroller.php:195
#, php-format
msgid "The \"%s\" backend does not support deleting address books"
-msgstr ""
+msgstr "Το σύστημα \"%s\" δεν υποστηρίζει την διαγραφή βιβλίων διευθύνσεων"
-#: lib/controller/addressbookcontroller.php:181
+#: lib/controller/addressbookcontroller.php:203
#, php-format
msgid "You do not have permissions to delete the \"%s\" address book"
msgstr "Δεν έχετε άδεια να διαγράψετε το βιβλίο διευθύνσεων \"%s\""
-#: lib/controller/addressbookcontroller.php:188
+#: lib/controller/addressbookcontroller.php:210
msgid "Error deleting address book"
msgstr "Σφάλμα κατά την διαγραφή βιβλίου διεευθύνσεων "
-#: lib/controller/addressbookcontroller.php:228
+#: lib/controller/addressbookcontroller.php:250
msgid "Error creating contact."
msgstr "Σφάλμα δημιουργίας επαφής."
-#: lib/controller/addressbookcontroller.php:237
+#: lib/controller/addressbookcontroller.php:259
msgid "Error creating contact"
msgstr "Σφάλμα δημιουργίας επαφής"
-#: lib/controller/addressbookcontroller.php:269
+#: lib/controller/addressbookcontroller.php:291
msgid "Error deleting contact"
msgstr "Σφάλμα διαγραφής επαφής"
-#: lib/controller/addressbookcontroller.php:309
+#: lib/controller/addressbookcontroller.php:331
msgid "Error retrieving contact"
-msgstr ""
+msgstr "Σφάλμα κατά την ανάκτηση της επαφής"
-#: lib/controller/addressbookcontroller.php:320
+#: lib/controller/addressbookcontroller.php:342
msgid "Error saving contact"
msgstr "Σφάλμα αποθήκευσης επαφής"
-#: lib/controller/addressbookcontroller.php:326
+#: lib/controller/addressbookcontroller.php:348
msgid "Error removing contact from other address book."
msgstr "Σφάλμα διαγραφής επαφής από άλλο βιβλίο διευθύνσεων."
-#: lib/controller/addressbookcontroller.php:333
+#: lib/controller/addressbookcontroller.php:355
msgid "Error getting moved contact"
-msgstr ""
+msgstr "Σφάλμα κατά την λήψη μετακινημένης επαφής"
#: lib/controller/contactcontroller.php:37
#: lib/controller/contactcontroller.php:63
@@ -498,7 +499,7 @@ msgstr "Δεν δόθηκε διαδρομή εικόνας"
#: lib/controller/contactphotocontroller.php:193
msgid "Error loading image from cache"
-msgstr ""
+msgstr "Σφάλμα κατά την φόρτωση της εικόνας από την προσωρινή αποθήκευση"
#: lib/controller/contactphotocontroller.php:203
msgid "Error getting PHOTO property."
@@ -768,7 +769,7 @@ msgstr "Προσθήκη Βιβλίου Διευθύνσεων"
#: templates/contacts.php:35
msgid "Automatic format"
-msgstr ""
+msgstr "Αυτόματη μορφοποίηση"
#: templates/contacts.php:44 templates/contacts.php:45
msgid "Select file..."
diff --git a/l10n/it.php b/l10n/it.php
index 43f05188..70fe7f7e 100644
--- a/l10n/it.php
+++ b/l10n/it.php
@@ -4,8 +4,8 @@
"Starting file import" => "Inizio importazione file",
"Format selected: {format}" => "Formato selezionato: {format}",
"Automatic format detection" => "Rilevamento automatico del formato",
-"Processing {count}/{total} cards" => "Elaborazione di {count}/{total} scheda/e",
-"Total:{total}, Success:{imported}, Errors:{failed}" => "Totale:{total}, Riusciti:{imported}, Errori:{failed}",
+"Processing {count}/{total} cards" => "Elaborazione di {count}/{total} schede",
+"Total:{total}, Success:{imported}, Errors:{failed}" => "Totale:{total}, riusciti:{imported}, errori:{failed}",
"An address book called {name} already exists" => "Una rubrica con nome {name} esiste già",
"Failed adding address book: {error}" => "Aggiunta della rubrica non riuscita: {error}",
"Failed loading address books: {error}" => "Caricamento rubriche non riuscito: {error}",
diff --git a/l10n/it/contacts.po b/l10n/it/contacts.po
index 87d4adba..657ab2e6 100644
--- a/l10n/it/contacts.po
+++ b/l10n/it/contacts.po
@@ -17,9 +17,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-03-26 05:41-0400\n"
-"PO-Revision-Date: 2014-03-26 06:00+0000\n"
-"Last-Translator: Paolo Velati \n"
+"POT-Creation-Date: 2014-03-30 00:49-0400\n"
+"PO-Revision-Date: 2014-03-29 08:40+0000\n"
+"Last-Translator: Vincenzo Reale \n"
"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -49,11 +49,11 @@ msgstr "Rilevamento automatico del formato"
#: js/addressbooks.js:391
msgid "Processing {count}/{total} cards"
-msgstr "Elaborazione di {count}/{total} scheda/e"
+msgstr "Elaborazione di {count}/{total} schede"
#: js/addressbooks.js:415
msgid "Total:{total}, Success:{imported}, Errors:{failed}"
-msgstr "Totale:{total}, Riusciti:{imported}, Errori:{failed}"
+msgstr "Totale:{total}, riusciti:{imported}, errori:{failed}"
#: js/addressbooks.js:569
msgid "An address book called {name} already exists"
diff --git a/l10n/sk_SK.php b/l10n/sk_SK.php
index 412e4299..ad3efa87 100644
--- a/l10n/sk_SK.php
+++ b/l10n/sk_SK.php
@@ -1,6 +1,7 @@
"Kontakty",
"Save" => "Uložiť",
+"Starting file import" => "Spusteni importu súboru",
"An address book called {name} already exists" => "Adresár s názvom {name} už existuje",
"Failed adding address book: {error}" => "Pridanie adresára zlyhalo: {error}",
"Failed loading address books: {error}" => "Načítanie adresára zlyhalo: {error}",
@@ -67,6 +68,7 @@
"You do not have permissions to delete this contact" => "Nemáte oprávnenie na vymazanie tohto kontaktu",
"The backend for this address book does not support deleting contacts" => "Úložisko tohto adresára nepodporuje vymazanie kontaktov",
"Unknown error" => "Neznáma chyba",
+"Access denied" => "Prístup bol odmietnutý",
"The backend for this address book does not support updating" => "Úložisko tohto adresára nepodporuje jeho aktualizáciu",
"You don't have permissions to delete the address book." => "Nemáte oprávnenie na vymazanie tohto adresára.",
"Address book not found" => "Adresár nenájdený",
@@ -82,6 +84,9 @@
"You do not have permissions to delete the \"%s\" address book" => "Nemáte oprávnenie pre zmazanie zoznamu kontaktov \"%s\"",
"Error deleting address book" => "Chyba pri vymazávaní adresára",
"Error creating contact." => "Chyba pri vytváraní kontaktu.",
+"Error creating contact" => "Chyba pri vytváraní kontaktu",
+"Error deleting contact" => "Chyba pri odstraňovaní kontaktu",
+"Error saving contact" => "Chyba pri ukladaní kontaktu",
"Error removing contact from other address book." => "Chyba pri vymazávaní kontaktu z iného adresára.",
"Couldn't find contact." => "Kontakt sa nenašiel.",
"No contact data in request." => "Neobsahuje požadované kontaktné údaje.",
@@ -158,6 +163,7 @@
"Address books" => "Adresár",
"Display name" => "Zobrazované meno",
"Add Address Book" => "Pridať adresár",
+"Automatic format" => "Automatický formát",
"Select file..." => "Vybrať súbor...",
"(De-)select all" => "(Ne-)vybrať všetky",
"Sort order" => "Zoradiť podľa",
diff --git a/l10n/sk_SK/contacts.po b/l10n/sk_SK/contacts.po
index 2308c8f0..704ddcf7 100644
--- a/l10n/sk_SK/contacts.po
+++ b/l10n/sk_SK/contacts.po
@@ -16,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-03-26 05:41-0400\n"
-"PO-Revision-Date: 2014-03-26 06:00+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-04-01 00:49-0400\n"
+"PO-Revision-Date: 2014-03-31 10:51+0000\n"
+"Last-Translator: mhh \n"
"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -36,7 +36,7 @@ msgstr "Uložiť"
#: js/addressbooks.js:306
msgid "Starting file import"
-msgstr ""
+msgstr "Spusteni importu súboru"
#: js/addressbooks.js:310 js/addressbooks.js:338
msgid "Format selected: {format}"
@@ -189,17 +189,17 @@ msgstr "Chyba parsovania narodenín {bday}"
msgid "The backend does not support multi-byte characters."
msgstr ""
-#: js/contacts.js:2270
+#: js/contacts.js:2212
msgid ""
"Some contacts are marked for deletion, but not deleted yet. Please wait for "
"them to be deleted."
msgstr "Počkajte prosím do skončenia mazania kontaktov označených na mazanie."
-#: js/contacts.js:2281
+#: js/contacts.js:2223
msgid "Click to undo deletion of {num} contacts"
msgstr "Kliknite pre odvrátenie operácie zmazania {num} kontaktov."
-#: js/contacts.js:2290
+#: js/contacts.js:2232
msgid "Cancelled deletion of {num} contacts"
msgstr "Zrušené vymazanie {num} kontaktov"
@@ -302,7 +302,7 @@ msgstr "Zavrieť"
msgid "Server error! Please inform system administator"
msgstr "Chyba servera! Informujte vášho administrátora"
-#: js/storage.js:346 js/storage.js:385
+#: js/storage.js:405 js/storage.js:444
msgid "Failed loading photo: {error}"
msgstr "Načítanie fotografie sa nepodarilo: {error}"
@@ -340,7 +340,7 @@ msgstr "Neznáma chyba"
#: lib/addressbook.php:410
msgid "Access denied"
-msgstr ""
+msgstr "Prístup bol odmietnutý"
#: lib/addressbook.php:417
msgid "The backend for this address book does not support updating"
@@ -386,49 +386,49 @@ msgstr "Neznáme IM:"
msgid "{name}'s Birthday"
msgstr "Narodeniny {name}"
-#: lib/controller/addressbookcontroller.php:141
+#: lib/controller/addressbookcontroller.php:163
msgid "Error creating address book"
msgstr "Chyba pri vytváraní adresára"
-#: lib/controller/addressbookcontroller.php:173
+#: lib/controller/addressbookcontroller.php:195
#, php-format
msgid "The \"%s\" backend does not support deleting address books"
msgstr ""
-#: lib/controller/addressbookcontroller.php:181
+#: lib/controller/addressbookcontroller.php:203
#, php-format
msgid "You do not have permissions to delete the \"%s\" address book"
msgstr "Nemáte oprávnenie pre zmazanie zoznamu kontaktov \"%s\""
-#: lib/controller/addressbookcontroller.php:188
+#: lib/controller/addressbookcontroller.php:210
msgid "Error deleting address book"
msgstr "Chyba pri vymazávaní adresára"
-#: lib/controller/addressbookcontroller.php:228
+#: lib/controller/addressbookcontroller.php:250
msgid "Error creating contact."
msgstr "Chyba pri vytváraní kontaktu."
-#: lib/controller/addressbookcontroller.php:237
+#: lib/controller/addressbookcontroller.php:259
msgid "Error creating contact"
-msgstr ""
+msgstr "Chyba pri vytváraní kontaktu"
-#: lib/controller/addressbookcontroller.php:269
+#: lib/controller/addressbookcontroller.php:291
msgid "Error deleting contact"
-msgstr ""
+msgstr "Chyba pri odstraňovaní kontaktu"
-#: lib/controller/addressbookcontroller.php:309
+#: lib/controller/addressbookcontroller.php:331
msgid "Error retrieving contact"
msgstr ""
-#: lib/controller/addressbookcontroller.php:320
+#: lib/controller/addressbookcontroller.php:342
msgid "Error saving contact"
-msgstr ""
+msgstr "Chyba pri ukladaní kontaktu"
-#: lib/controller/addressbookcontroller.php:326
+#: lib/controller/addressbookcontroller.php:348
msgid "Error removing contact from other address book."
msgstr "Chyba pri vymazávaní kontaktu z iného adresára."
-#: lib/controller/addressbookcontroller.php:333
+#: lib/controller/addressbookcontroller.php:355
msgid "Error getting moved contact"
msgstr ""
@@ -751,7 +751,7 @@ msgstr "Pridať adresár"
#: templates/contacts.php:35
msgid "Automatic format"
-msgstr ""
+msgstr "Automatický formát"
#: templates/contacts.php:44 templates/contacts.php:45
msgid "Select file..."
diff --git a/l10n/sl.php b/l10n/sl.php
index 8d18a191..4577f124 100644
--- a/l10n/sl.php
+++ b/l10n/sl.php
@@ -1,6 +1,11 @@
"Stiki",
"Save" => "Shrani",
+"Starting file import" => "Začenjanje uvoza datoteke",
+"Format selected: {format}" => "Izbran zapis: {format}",
+"Automatic format detection" => "Samodejno zaznavanje zapisa",
+"Processing {count}/{total} cards" => "Obdelava {count}/{total} kartic",
+"Total:{total}, Success:{imported}, Errors:{failed}" => "Skupaj:{total}, od tega {imported} uspešno uvoženih in {failed} napak.",
"An address book called {name} already exists" => "Imenik z imenom {name} že obstaja",
"Failed adding address book: {error}" => "Dodajanje imenika je spodletelo: {error}",
"Failed loading address books: {error}" => "Nalaganje imenikov je spodletelo: {error}",
@@ -17,6 +22,7 @@
"Merge failed. Error saving contact." => "Združevanje je spodletelo. Prišlo je do napake med shranjevanjem stika.",
"Select photo" => "Izbor slike",
"Network or server error. Please inform administrator." => "Napaka omrežja ali strežnika. Pošljite obvestilo skrbniku sistema.",
+"Only images can be used as contact photos" => "Kot slike stika je mogoče uporabljati le slike.",
"The size of \"{filename}\" exceeds the maximum allowed {size}" => "Velikost datoteke \"{filename}\" presega največjo dovoljeno velikost {size}",
"Error adding to group." => "Napaka med dodajanjem stika v skupino.",
"Error removing from group." => "Napaka med odstranjevanjem stika iz skupino.",
@@ -69,6 +75,7 @@
"You do not have permissions to delete this contact" => "Ni ustreznih dovoljenj za brisanje tega stika",
"The backend for this address book does not support deleting contacts" => "Zaledje tega imenika ne omogoča brisanje stikov",
"Unknown error" => "Neznana napaka",
+"Access denied" => "Dostop je zavrnjen",
"The backend for this address book does not support updating" => "Zaledje tega imenika ne omogoča posodobitev",
"You don't have permissions to delete the address book." => "Ni ustreznih dovoljenj za brisanje imenika.",
"Address book not found" => "Imenika ni mogoče najti",
@@ -167,6 +174,7 @@
"Address books" => "Imeniki",
"Display name" => "Ime za prikaz",
"Add Address Book" => "Dodaj imenik",
+"Automatic format" => "Samodejno zaznavanje zapisa",
"Select file..." => "Izbor datoteke ...",
"(De-)select all" => "Preklopi izbor vsega",
"Sort order" => "Vrstni red razvrščanja",
diff --git a/l10n/sl/contacts.po b/l10n/sl/contacts.po
index 70d167ba..d25613a2 100644
--- a/l10n/sl/contacts.po
+++ b/l10n/sl/contacts.po
@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-03-26 05:41-0400\n"
-"PO-Revision-Date: 2014-03-26 06:00+0000\n"
-"Last-Translator: I Robot\n"
+"POT-Creation-Date: 2014-03-30 00:49-0400\n"
+"PO-Revision-Date: 2014-03-29 20:30+0000\n"
+"Last-Translator: mateju <>\n"
"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -34,23 +34,23 @@ msgstr "Shrani"
#: js/addressbooks.js:306
msgid "Starting file import"
-msgstr ""
+msgstr "Začenjanje uvoza datoteke"
#: js/addressbooks.js:310 js/addressbooks.js:338
msgid "Format selected: {format}"
-msgstr ""
+msgstr "Izbran zapis: {format}"
#: js/addressbooks.js:313 js/addressbooks.js:341
msgid "Automatic format detection"
-msgstr ""
+msgstr "Samodejno zaznavanje zapisa"
#: js/addressbooks.js:391
msgid "Processing {count}/{total} cards"
-msgstr ""
+msgstr "Obdelava {count}/{total} kartic"
#: js/addressbooks.js:415
msgid "Total:{total}, Success:{imported}, Errors:{failed}"
-msgstr ""
+msgstr "Skupaj:{total}, od tega {imported} uspešno uvoženih in {failed} napak."
#: js/addressbooks.js:569
msgid "An address book called {name} already exists"
@@ -118,7 +118,7 @@ msgstr "Napaka omrežja ali strežnika. Pošljite obvestilo skrbniku sistema."
#: js/app.js:789
msgid "Only images can be used as contact photos"
-msgstr ""
+msgstr "Kot slike stika je mogoče uporabljati le slike."
#: js/app.js:798
msgid "The size of \"{filename}\" exceeds the maximum allowed {size}"
@@ -338,7 +338,7 @@ msgstr "Neznana napaka"
#: lib/addressbook.php:410
msgid "Access denied"
-msgstr ""
+msgstr "Dostop je zavrnjen"
#: lib/addressbook.php:417
msgid "The backend for this address book does not support updating"
@@ -749,7 +749,7 @@ msgstr "Dodaj imenik"
#: templates/contacts.php:35
msgid "Automatic format"
-msgstr ""
+msgstr "Samodejno zaznavanje zapisa"
#: templates/contacts.php:44 templates/contacts.php:45
msgid "Select file..."
diff --git a/l10n/templates/contacts.pot b/l10n/templates/contacts.pot
index 40fbab5c..fc20b013 100644
--- a/l10n/templates/contacts.pot
+++ b/l10n/templates/contacts.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud contacts 5.0.0\n"
"Report-Msgid-Bugs-To: translations@owncloud.org\n"
-"POT-Creation-Date: 2014-03-28 00:48-0400\n"
+"POT-Creation-Date: 2014-04-01 00:49-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -180,17 +180,17 @@ msgstr ""
msgid "The backend does not support multi-byte characters."
msgstr ""
-#: js/contacts.js:2270
+#: js/contacts.js:2212
msgid ""
"Some contacts are marked for deletion, but not deleted yet. Please wait for "
"them to be deleted."
msgstr ""
-#: js/contacts.js:2281
+#: js/contacts.js:2223
msgid "Click to undo deletion of {num} contacts"
msgstr ""
-#: js/contacts.js:2290
+#: js/contacts.js:2232
msgid "Cancelled deletion of {num} contacts"
msgstr ""
@@ -293,7 +293,7 @@ msgstr ""
msgid "Server error! Please inform system administator"
msgstr ""
-#: js/storage.js:346 js/storage.js:385
+#: js/storage.js:405 js/storage.js:444
msgid "Failed loading photo: {error}"
msgstr ""
@@ -377,49 +377,49 @@ msgstr ""
msgid "{name}'s Birthday"
msgstr ""
-#: lib/controller/addressbookcontroller.php:141
+#: lib/controller/addressbookcontroller.php:163
msgid "Error creating address book"
msgstr ""
-#: lib/controller/addressbookcontroller.php:173
+#: lib/controller/addressbookcontroller.php:195
#, php-format
msgid "The \"%s\" backend does not support deleting address books"
msgstr ""
-#: lib/controller/addressbookcontroller.php:181
+#: lib/controller/addressbookcontroller.php:203
#, php-format
msgid "You do not have permissions to delete the \"%s\" address book"
msgstr ""
-#: lib/controller/addressbookcontroller.php:188
+#: lib/controller/addressbookcontroller.php:210
msgid "Error deleting address book"
msgstr ""
-#: lib/controller/addressbookcontroller.php:228
+#: lib/controller/addressbookcontroller.php:250
msgid "Error creating contact."
msgstr ""
-#: lib/controller/addressbookcontroller.php:237
+#: lib/controller/addressbookcontroller.php:259
msgid "Error creating contact"
msgstr ""
-#: lib/controller/addressbookcontroller.php:269
+#: lib/controller/addressbookcontroller.php:291
msgid "Error deleting contact"
msgstr ""
-#: lib/controller/addressbookcontroller.php:309
+#: lib/controller/addressbookcontroller.php:331
msgid "Error retrieving contact"
msgstr ""
-#: lib/controller/addressbookcontroller.php:320
+#: lib/controller/addressbookcontroller.php:342
msgid "Error saving contact"
msgstr ""
-#: lib/controller/addressbookcontroller.php:326
+#: lib/controller/addressbookcontroller.php:348
msgid "Error removing contact from other address book."
msgstr ""
-#: lib/controller/addressbookcontroller.php:333
+#: lib/controller/addressbookcontroller.php:355
msgid "Error getting moved contact"
msgstr ""
diff --git a/lib/controller/addressbookcontroller.php b/lib/controller/addressbookcontroller.php
index 4a19ac2a..e93b74c1 100644
--- a/lib/controller/addressbookcontroller.php
+++ b/lib/controller/addressbookcontroller.php
@@ -67,6 +67,28 @@ class AddressBookController extends Controller {
public function getAddressBook() {
$params = $this->request->urlParams;
+ $addressBook = $this->app->getAddressBook($params['backend'], $params['addressBookId']);
+ $lastModified = $addressBook->lastModified();
+ $response = new JSONResponse();
+ $response->setData(array('data' => $addressBook->getMetaData()));
+
+ if (!is_null($lastModified)) {
+ $response->addHeader('Cache-Control', 'private, must-revalidate');
+ $response->setLastModified(\DateTime::createFromFormat('U', $lastModified) ?: null);
+ $etag = md5($lastModified);
+ $response->setETag($etag);
+ }
+
+ return $response;
+ }
+
+ /**
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ */
+ public function getContacts() {
+ $params = $this->request->urlParams;
+
$addressBook = $this->app->getAddressBook($params['backend'], $params['addressBookId']);
$lastModified = $addressBook->lastModified();
$etag = null;
diff --git a/lib/controller/contactcontroller.php b/lib/controller/contactcontroller.php
index 04c35f11..176df2ea 100644
--- a/lib/controller/contactcontroller.php
+++ b/lib/controller/contactcontroller.php
@@ -83,8 +83,8 @@ class ContactController extends Controller {
$patch = $this->request->patch;
$response = new JSONResponse();
- $name = $patch['name'];
- $value = $patch['value'];
+ $name = isset($patch['name']) ? $patch['name'] : null;
+ $value = isset($patch['value']) ? $patch['value'] : null;
$checksum = isset($patch['checksum']) ? $patch['checksum'] : null;
$parameters = isset($patch['parameters']) ? $patch['parameters'] : null;