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;