1
0
mirror of https://github.com/owncloudarchive/contacts.git synced 2024-12-01 13:24:10 +01:00

Merge branch 'master' into filesystem

This commit is contained in:
Robin Appelman 2012-12-15 02:32:24 +01:00
commit 7db0425204
62 changed files with 983 additions and 261 deletions

View File

@ -5,6 +5,7 @@ OC::$CLASSPATH['OCA\Contacts\VCard'] = 'contacts/lib/vcard.php';
OC::$CLASSPATH['OCA\Contacts\Hooks'] = 'contacts/lib/hooks.php'; OC::$CLASSPATH['OCA\Contacts\Hooks'] = 'contacts/lib/hooks.php';
OC::$CLASSPATH['OCA\Contacts\Share_Backend_Contact'] = 'contacts/lib/share/contact.php'; OC::$CLASSPATH['OCA\Contacts\Share_Backend_Contact'] = 'contacts/lib/share/contact.php';
OC::$CLASSPATH['OCA\Contacts\Share_Backend_Addressbook'] = 'contacts/lib/share/addressbook.php'; OC::$CLASSPATH['OCA\Contacts\Share_Backend_Addressbook'] = 'contacts/lib/share/addressbook.php';
OC::$CLASSPATH['OCA\Contacts\AddressbookProvider'] = 'contacts/lib/addressbookprovider.php';
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV'] = 'contacts/lib/sabre/backend.php'; OC::$CLASSPATH['OC_Connector_Sabre_CardDAV'] = 'contacts/lib/sabre/backend.php';
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_AddressBookRoot'] = 'contacts/lib/sabre/addressbookroot.php'; OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_AddressBookRoot'] = 'contacts/lib/sabre/addressbookroot.php';
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_UserAddressBooks'] = 'contacts/lib/sabre/useraddressbooks.php'; OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_UserAddressBooks'] = 'contacts/lib/sabre/useraddressbooks.php';
@ -27,3 +28,7 @@ OCP\Util::addscript('contacts', 'loader');
OC_Search::registerProvider('OCA\Contacts\SearchProvider'); OC_Search::registerProvider('OCA\Contacts\SearchProvider');
OCP\Share::registerBackend('contact', 'OCA\Contacts\Share_Backend_Contact'); OCP\Share::registerBackend('contact', 'OCA\Contacts\Share_Backend_Contact');
OCP\Share::registerBackend('addressbook', 'OCA\Contacts\Share_Backend_Addressbook', 'contact'); OCP\Share::registerBackend('addressbook', 'OCA\Contacts\Share_Backend_Addressbook', 'contact');
foreach(OCA\Contacts\Addressbook::all(OCP\USER::getUser()) as $addressbook) {
OCP\Contacts::registerAddressBook(new OCA\Contacts\AddressbookProvider($addressbook['id']));
}

View File

@ -3,7 +3,8 @@
#content li { cursor: default; } #content li { cursor: default; }
#content input[type=checkbox] { #content input[type=checkbox] {
height: 14px; width: 14px; height: 14px; width: 14px;
border: 1px solid #fff; border: 0px solid #fff;
background-color: white;
-moz-appearance:none; -webkit-appearance: none; -moz-appearance:none; -webkit-appearance: none;
-moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none;
-moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px;
@ -17,8 +18,8 @@
content: url('%appswebroot%/contacts/img/checkmark.png'); content: url('%appswebroot%/contacts/img/checkmark.png');
display: block; display: block;
position: relative; position: relative;
top: -8px; top: -2px;
left: -6px; left: -1px;
} }
#content input[type=radio]:checked::after { #content input[type=radio]:checked::after {
content: url('%appswebroot%/contacts/img/checkmark.png'); content: url('%appswebroot%/contacts/img/checkmark.png');
@ -35,14 +36,17 @@
#content input:-ms-input-placeholder { color: #aaa; } #content input:-ms-input-placeholder { color: #aaa; }
#content input:placeholder { color: #aaa; } #content input:placeholder { color: #aaa; }
#content input:not([type="checkbox"]), #content select, #content textarea { #content input:not([type="checkbox"]), #content select:not(.button), #content textarea {
background-color: #fefefe; border: 1px solid #fff !important; background-color: #fefefe; border: 1px solid #fff !important;
-moz-appearance:none !important; -webkit-appearance: none !important; -moz-appearance:none !important; -webkit-appearance: none !important;
-moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none;
-moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px;
-moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
float: left; float: left;
width: auto;
} }
#content input[type="button"]:hover, #content select:hover, #content select:focus, #content select:active, #content input[type="button"]:focus, #content .button:hover, button:hover { background-color:#fff; color:#333; }
#content fieldset, #content div, #content span, #content section { #content fieldset, #content div, #content span, #content section {
-moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
} }
@ -92,7 +96,7 @@
} }
#groupactions { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; height: 4em; border-bottom: 1px solid #DDDDDD; } #groupactions { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; height: 4em; border-bottom: 1px solid #DDDDDD; }
#groupactions > button, .addcontact, .import-upload-button, .doImport { /*#groupactions > button, .addcontact, .import-upload-button, .doImport {
-moz-border-bottom-colors: none; -moz-border-bottom-colors: none;
-moz-border-left-colors: none; -moz-border-left-colors: none;
-moz-border-right-colors: none; -moz-border-right-colors: none;
@ -106,7 +110,7 @@
color: #fff; color: #fff;
border-right: medium none; border-right: medium none;
margin: .7em 2em; margin: .7em 2em;
} }*/
#grouplist { z-index: 100; } #grouplist { z-index: 100; }
#grouplist h3 .action:not(.starred):not(.checked):not(.favorite) { float: right; display: none; padding: 0; margin: auto; } #grouplist h3 .action:not(.starred):not(.checked):not(.favorite) { float: right; display: none; padding: 0; margin: auto; }
@ -128,26 +132,69 @@
dl.form { display: block; width: auto; margin: 0; padding: 0; cursor: normal; } dl.form { display: block; width: auto; margin: 0; padding: 0; cursor: normal; }
.form dt { display: table-cell; clear: left; float: left; width: 7em; margin: 0; padding: 0.8em 0.5em 0 0; text-align:right; text-overflow:ellipsis; o-text-overflow: ellipsis; vertical-align: text-bottom; color: #bbb;/* white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap;*/ } .form dt { display: table-cell; clear: left; float: left; width: 7em; margin: 0; padding: 0.8em 0.5em 0 0; text-align:right; text-overflow:ellipsis; o-text-overflow: ellipsis; vertical-align: text-bottom; color: #bbb;/* white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap;*/ }
.form dd { display: table-cell; clear: right; float: left; margin: 0; padding: 0; white-space: nowrap; vertical-align: text-bottom; } .form dd { display: table-cell; clear: right; float: left; margin: 0; padding: 0; white-space: nowrap; vertical-align: text-bottom; }
.action { display: inline-block; width: 22px; height: 22px; padding: 0; margin: 0; cursor: pointer; }
/* override the default margin on share dropdown */ /* override the default margin on share dropdown */
#dropdown { margin: 1.5em 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; } #dropdown { margin: 1.5em 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; }
.add { background:url('%webroot%/core/img/actions/add.svg') no-repeat center; clear: both; }
.delete { background:url('%webroot%/core/img/actions/delete.png') no-repeat center; } .action, .icon {
.edit { background:url('%webroot%/core/img/actions/rename.svg') no-repeat center; } display: inline-block;
.share { background:url('%webroot%/core/img/actions/share.svg') no-repeat center; } cursor: pointer;
.mail { background:url('%webroot%/core/img/actions/mail.svg') no-repeat center; } background-repeat: no-repeat;
.upload { background:url('%webroot%/core/img/actions/upload.svg') no-repeat center; } }
.download { background:url('%webroot%/core/img/actions/download.svg') no-repeat center; } .action:not(.text), .icon:not(.text) {
.cloud { background:url('%webroot%/core/img/places/picture.svg') no-repeat center; } width: 16px; height: 16px;
.globe { background:url('%webroot%/core/img/actions/public.svg') no-repeat center; } padding: 0; margin: 0;
.starred { background:url('%appswebroot%/contacts/img/starred.png') no-repeat center; } background-position: center;
.checked { background:url('%appswebroot%/contacts/img/checkmark-green.png') no-repeat center; } }
.checked.disabled { background:url('%appswebroot%/contacts/img/checkmark-gray.png') no-repeat center; cursor: default; }
.action.text, .icon.text {
background-position: left;
text-indent: 18px;
}
/* TODO: Use @import url('%appswebroot%/contacts/css/[no-]svg.css); instead. */
.no-svg .add { background-image:url('%webroot%/core/img/actions/add.png'); }
.no-svg .delete { background-image:url('%webroot%/core/img/actions/delete.png'); }
.no-svg .edit { background-image:url('%webroot%/core/img/actions/rename.png'); }
.no-svg .share { background-image:url('%webroot%/core/img/actions/share.png'); }
.no-svg .groups { background-image:url('%webroot%/core/img/actions/shared.png'); }
.no-svg .mail { background-image:url('%webroot%/core/img/actions/mail.png'); }
.no-svg .import, .no-svg .upload { background-image:url('%webroot%/core/img/actions/upload.png'); }
.no-svg .export, .no-svg .download { background-image:url('%webroot%/core/img/actions/download.png'); }
.no-svg .cloud:not { background-image:url('%webroot%/core/img/places/picture.png'); }
.no-svg .globe:not { background-image:url('%webroot%/core/img/actions/public.png'); }
.no-svg .starred { background-image:url('%appswebroot%/contacts/img/starred.png'); background-size: contain; }
.no-svg .checked { background-image:url('%appswebroot%/contacts/img/checkmark-green.png'); }
.no-svg .checked.disabled { background-image:url('%appswebroot%/contacts/img/checkmark-gray.png'); cursor: default; }
.svg .action:not(.text), .svg .icon:not(.text), .svg .svg:not(.text) {
background-size: contain;
}
.svg .action.text, .svg .icon.text, .svg .svg.text {
background-size: 16px 16px;
background-origin: content-box;
background-repeat: no-repeat;
}
.svg .add { background-image:url('%webroot%/core/img/actions/add.svg'); }
.svg .delete { background-image:url('%webroot%/core/img/actions/delete.svg'); }
.svg .edit { background-image:url('%webroot%/core/img/actions/rename.svg'); }
.svg .share { background-image:url('%webroot%/core/img/actions/share.svg'); }
.svg .groups { background-image:url('%webroot%/core/img/actions/shared.svg'); }
.svg .mail { background-image:url('%webroot%/core/img/actions/mail.svg'); }
.svg .import,.svg .upload { background-image:url('%webroot%/core/img/actions/upload.svg'); }
.svg .export,.svg .download { background-image:url('%webroot%/core/img/actions/download.svg'); }
.svg .cloud { background-image:url('%webroot%/core/img/places/picture.svg'); }
.svg .globe { background-image:url('%webroot%/core/img/actions/public.svg'); }
.svg .starred { background-image:url('%appswebroot%/contacts/img/starred.svg'); background-size: contain; }
.svg .checked { background-image:url('%appswebroot%/contacts/img/checkmark-green.svg'); }
.svg .checked.disabled { background-image:url('%appswebroot%/contacts/img/checkmark-gray.svg'); cursor: default; }
.transparent{ opacity: 0.6; } .transparent{ opacity: 0.6; }
.float { float: left; display: inline-block; width: auto; } .float { float: left; display: inline-block; width: auto; }
.float.right { float: right; } .float.right { float: right; }
.break { clear: both; } .break { clear: both; }
.loading { background: url('%webroot%/core/img/loading.gif') no-repeat center !important; /*cursor: progress; */ cursor: wait; } .loading { background: url('%webroot%/core/img/loading.gif') no-repeat center !important; cursor: wait; }
.wait { opacity: cursor: wait; } .wait { opacity: cursor: wait; }
.control { .control {
border: 1px solid #DDDDDD; border: 1px solid #DDDDDD;
@ -201,7 +248,7 @@ ul.propertylist { width: 450px; }
.propertylist li.propertycontainer .listactions a { .propertylist li.propertycontainer .listactions a {
display: inline-block; display: inline-block;
float: left; clear: none; float: left; clear: none;
width: 20px; height: 20px; width: 16px; height: 16px;
} }
.propertylist { float: left; } .propertylist { float: left; }
@ -216,7 +263,7 @@ ul.propertylist { width: 450px; }
.select_wrapper select:hover { overflow: inherit; text-overflow: inherit; } .select_wrapper select:hover { overflow: inherit; text-overflow: inherit; }
.select_wrapper select option { color: #777; } .select_wrapper select option { color: #777; }
.select_wrapper select:hover,.propertylist li > select:focus,.propertylist li > select:active { color: #777; } .select_wrapper select:hover,.propertylist li > select:focus,.propertylist li > select:active { color: #777; }
.select_wrapper select.rtl { margin-left: -24px; direction: rtl; } .select_wrapper select.rtl { margin-left: -24px; text-align: right; }
.select_wrapper select.ltr { margin-right: -23px; } .select_wrapper select.ltr { margin-right: -23px; }
.propertylist li > input[type="checkbox"].impp { clear: none; } .propertylist li > input[type="checkbox"].impp { clear: none; }
.propertylist li > label.xab { display: block; color: #bbb; float:left; clear: both; padding: 0.5em 0 0 2.5em; } .propertylist li > label.xab { display: block; color: #bbb; float:left; clear: both; padding: 0.5em 0 0 2.5em; }
@ -262,7 +309,7 @@ ul.propertylist { width: 450px; }
#contacts-settings .settings { #contacts-settings .settings {
width: 20px; height: 20px; width: 20px; height: 20px;
float: left; float: left;
background:url('%webroot%/core/img/actions/settings.svg') no-repeat center; background-image:url('%webroot%/core/img/actions/settings.svg');
} }
#contacts-settings.open { #contacts-settings.open {
height: auto; height: auto;
@ -301,7 +348,7 @@ ul.propertylist { width: 450px; }
z-index: 1001; z-index: 1001;
} }
.import-upload-button { .import-upload-button {
background-image: url("%webroot%/core/img/actions/upload-white.svg"); background-image: url("%webroot%/core/img/actions/upload.svg");
background-position: center center; background-position: center center;
background-repeat: no-repeat; background-repeat: no-repeat;
cursor: pointer; cursor: pointer;
@ -315,8 +362,19 @@ ul.propertylist { width: 450px; }
.doImport{ margin: auto; } .doImport{ margin: auto; }
#toggle_all { position: absolute; bottom: .5em; left: .8em; } #toggle_all { position: absolute; bottom: .5em; left: .8em; }
input.propertytype { float: left; font-size: .8em; width: 8em !important; text-align: right; } input:not([type="checkbox"]).propertytype {
.contactphoto { float: left; display: inline-block; border-radius: 0.3em; border: thin solid #bbb; margin: 0.5em; background: url('%webroot%/core/img/loading.gif') no-repeat center center; -moz-box-shadow: 0 1px 3px #777; -webkit-box-shadow: 0 1px 3px #777; box-shadow: 0 1px 3px #777; opacity: 1; } float: left; font-size: .8em;
max-width: 100px;
text-align: right;
margin: 0;
}
input[type="checkbox"].propertytype { width: 10px; }
.contactphoto {
float: left; display: inline-block;
border-radius: 0.3em; border: thin solid #bbb;
margin: 0.5em; -moz-box-shadow: 0 1px 3px #777; -webkit-box-shadow: 0 1px 3px #777; box-shadow: 0 1px 3px #777;
opacity: 1;
}
.contactphoto:hover { background: #fff; cursor: default; } .contactphoto:hover { background: #fff; cursor: default; }
#photowrapper { #photowrapper {
display: inline-block; display: inline-block;
@ -330,18 +388,24 @@ input.propertytype { float: left; font-size: .8em; width: 8em !important; text-a
display: inline-block; display: inline-block;
float: right; float: right;
position: absolute; position: absolute;
right: -8px; top: -8px; right: -6px; top: -6px;
width: 25px; height: 25px; width: 25px; height: 25px;
} }
#photowrapper.wait { opacity: 0.6; filter:alpha(opacity=0.6); z-index:1000; background: url('%webroot%/core/img/loading.gif') no-repeat center; cursor: wait; } #photowrapper.wait { opacity: 0.6; filter:alpha(opacity=0.6); z-index:1000; background-image: url('%webroot%/core/img/loading.gif'); cursor: wait; }
#phototools { position:absolute; margin: 5px 0 0 10px; width:auto; height:22px; padding:0px; background-color:#fff; list-style-type:none; border-radius: 0.3em; -moz-box-shadow: 0 1px 3px #777; -webkit-box-shadow: 0 1px 3px #777; box-shadow: 0 1px 3px #777; } #phototools { position:absolute; margin: 5px 0 0 10px; width:auto; height:20px; padding:2px; background-color:#fff; list-style-type:none; border-radius: 0.3em; -moz-box-shadow: 0 1px 3px #777; -webkit-box-shadow: 0 1px 3px #777; box-shadow: 0 1px 3px #777; }
#phototools li { display: inline; } #phototools li { display: inline; }
#phototools li a { float:left; cursor:pointer; width:22px; height:22px; opacity: 0.6; } #phototools li a { float:left; opacity: 0.6; }
#phototools li a:hover { opacity: 0.8; } #phototools li a:hover { opacity: 0.8; }
#contactphoto_fileupload, #import_fileupload { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; z-index:1001; } #contactphoto_fileupload, #import_fileupload { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; z-index:1001; }
.favorite { display: inline-block; float: left; height: 20px; width: 20px; background:url('%appswebroot%/contacts/img/inactive_star.png') no-repeat center; }
.favorite.active, .favorite:hover { background:url('%appswebroot%/contacts/img/active_star.png') no-repeat center; } .no-svg .favorite { display: inline-block; float: left; height: 20px; width: 20px; background-image:url('%appswebroot%/contacts/img/inactive_star.png'); }
.favorite.inactive { background:url('%appswebroot%/contacts/img/inactive_star.png') no-repeat center; } .no-svg .favorite.active, .favorite:hover { background-image:url('%appswebroot%/contacts/img/active_star.png'); }
.no-svg .favorite.inactive { background-image:url('%appswebroot%/contacts/img/inactive_star.png'); }
.svg .favorite { display: inline-block; float: left; height: 20px; width: 20px; background-image:url('%appswebroot%/contacts/img/inactive_star.svg'); }
.svg .favorite.active, .favorite:hover { background-image:url('%appswebroot%/contacts/img/active_star.svg'); }
.svg .favorite.inactive { background-image:url('%appswebroot%/contacts/img/inactive_star.svg'); }
/* Header */ /* Header */
#contactsheader { #contactsheader {
@ -357,9 +421,13 @@ input.propertytype { float: left; font-size: .8em; width: 8em !important; text-a
height: 100%; width: 100%; height: 100%; width: 100%;
} }
#contactsheader button, #contactsheader select { position: relative; float: left; min-width: 26px; height: 26px; margin: .7em; padding: .2em; clear: none; } #contactsheader button, #contactsheader select { position: relative; float: left; min-width: 26px; height: 26px; margin: .7em; padding: .2em; clear: none; }
#contactsheader .back { } #contactsheader .delete {
#contactsheader .import { background:url('%webroot%/core/img/actions/upload.svg') no-repeat center; } bottom: 0.5em;
#contactsheader .delete { background:url('%webroot%/core/img/actions/delete.svg') no-repeat center; float: right;} right: 1em;
position: absolute;
background-image:url('%webroot%/core/img/actions/delete.svg');
}
.no-svg #contactsheader .delete { background-image:url('%webroot%/core/img/actions/delete.vg'); float: right;}
#contactsheader .list.add { margin-left: 5em; } #contactsheader .list.add { margin-left: 5em; }
@ -382,8 +450,8 @@ input.propertytype { float: left; font-size: .8em; width: 8em !important; text-a
/*display: table-cell;*/ /*display: table-cell;*/
} }
.display .meta { text-align: right; } .display .meta { text-align: right; margin-left: -30px; }
.display .adr { cursor: pointer; } .display .adr { cursor: pointer; margin-left: 30px; }
.adr.editor { .adr.editor {
width: 20em; width: 20em;
margin-left: 120px; margin-left: 120px;
@ -416,9 +484,9 @@ input.propertytype { float: left; font-size: .8em; width: 8em !important; text-a
#contactlist tr > td.name>input[type="checkbox"]:hover:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; } #contactlist tr > td.name>input[type="checkbox"]:hover:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; }
#contactlist tr > td.name>input[type="checkbox"]:checked:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; } #contactlist tr > td.name>input[type="checkbox"]:checked:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
#contactlist tr > td.name { font-weight: bold; text-indent: 1.6em; -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms; position:relative; background-position:1em .5em !important; background-repeat:no-repeat !important; } #contactlist tr > td.name { font-weight: bold; text-indent: 1.6em; -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms; position:relative; background-position:1em .5em !important; background-repeat:no-repeat !important; }
#contactlist tr > td a.mailto { position: absolute; float: right; clear: none; cursor:pointer; width:22px; height:22px; z-index: 200; opacity: 0.6; background:url('%webroot%/core/img/actions/mail.svg') no-repeat center; } #contactlist tr > td a.mailto { position: absolute; float: right; clear: none; cursor:pointer; width:16px; height:16px; margin: 2px; z-index: 200; opacity: 0.6; background-image:url('%webroot%/core/img/actions/mail.svg'); }
#contactlist tr > td a.mailto:hover { opacity: 0.8; } #contactlist tr > td a.mailto:hover { opacity: 0.8; }
#contactlist.dim { background: #ddd; opacity: .50;filter:Alpha(Opacity=50); } #contactlist.dim { background-image: #ddd; opacity: .50;filter:Alpha(Opacity=50); }
#contact { #contact {
background-color: white; color: #333333; background-color: white; color: #333333;
@ -443,7 +511,7 @@ input.propertytype { float: left; font-size: .8em; width: 8em !important; text-a
-ms-transform: rotate(270deg); transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg);
} }
#contact figure img { -moz-border-radius:.3em; -webkit-border-radius:.3em; border-radius:.3em; border: thin solid #bbb; margin: 0.3em; background: url('%webroot%/core/img/loading.gif') no-repeat center center; -moz-box-shadow: 0 1px 3px #777; -webkit-box-shadow: 0 1px 3px #777; box-shadow: 0 1px 3px #777; opacity: 1; } #contact figure img { -moz-border-radius:.3em; -webkit-border-radius:.3em; border-radius:.3em; border: thin solid #bbb; margin: 0.3em; background-image: url('%webroot%/core/img/loading.gif'); -moz-box-shadow: 0 1px 3px #777; -webkit-box-shadow: 0 1px 3px #777; box-shadow: 0 1px 3px #777; opacity: 1; }
#contact span.adr { #contact span.adr {

View File

@ -11,10 +11,11 @@ OCP\User::checkLoggedIn();
OCP\App::checkAppEnabled('contacts'); OCP\App::checkAppEnabled('contacts');
$bookid = isset($_GET['bookid']) ? $_GET['bookid'] : null; $bookid = isset($_GET['bookid']) ? $_GET['bookid'] : null;
$contactid = isset($_GET['contactid']) ? $_GET['contactid'] : null; $contactid = isset($_GET['contactid']) ? $_GET['contactid'] : null;
$selectedids = isset($_GET['selectedids']) ? $_GET['selectedids'] : null;
$nl = "\n"; $nl = "\n";
if(!is_null($bookid)) { if(!is_null($bookid)) {
try { try {
$addressbook = OCA\Contacts\Addressbook::find($bookid); // is owner access check $addressbook = OCA\Contacts\Addressbook::find($bookid);
} catch(Exception $e) { } catch(Exception $e) {
OCP\JSON::error( OCP\JSON::error(
array( array(
@ -25,7 +26,7 @@ if(!is_null($bookid)) {
); );
exit(); exit();
} }
//$cardobjects = OCA\Contacts\VCard::all($bookid);
header('Content-Type: text/directory'); header('Content-Type: text/directory');
header('Content-Disposition: inline; filename=' header('Content-Disposition: inline; filename='
. str_replace(' ', '_', $addressbook['displayname']) . '.vcf'); . str_replace(' ', '_', $addressbook['displayname']) . '.vcf');
@ -34,7 +35,7 @@ if(!is_null($bookid)) {
$batchsize = OCP\Config::getUserValue(OCP\User::getUser(), $batchsize = OCP\Config::getUserValue(OCP\User::getUser(),
'contacts', 'contacts',
'export_batch_size', 20); 'export_batch_size', 20);
while($cardobjects = OCA\Contacts\VCard::all($bookid, $start, $batchsize)) { while($cardobjects = OCA\Contacts\VCard::all($bookid, $start, $batchsize, array('carddata'))) {
foreach($cardobjects as $card) { foreach($cardobjects as $card) {
echo $card['carddata'] . $nl; echo $card['carddata'] . $nl;
} }
@ -57,4 +58,19 @@ if(!is_null($bookid)) {
header('Content-Disposition: inline; filename=' header('Content-Disposition: inline; filename='
. str_replace(' ', '_', $data['fullname']) . '.vcf'); . str_replace(' ', '_', $data['fullname']) . '.vcf');
echo $data['carddata']; echo $data['carddata'];
} elseif(!is_null($selectedids)) {
$selectedids = explode(',', $selectedids);
$l10n = \OC_L10N::get('contacts');
header('Content-Type: text/directory');
header('Content-Disposition: inline; filename='
. $l10n->t('%d_selected_contacts', array(count($selectedids))) . '.vcf');
foreach($selectedids as $id) {
try {
$data = OCA\Contacts\VCard::find($id);
echo $data['carddata'] . $nl;
} catch(Exception $e) {
continue;
}
}
} }

78
img/active_star.svg Normal file
View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="322.00055"
height="306.45065"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="inactive_star.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="116.4202"
inkscape:cy="165.53453"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1021"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-148.03866,-745.93365)">
<path
sodipodi:type="star"
style="fill:#ffcc00;fill-opacity:1;stroke:none"
id="path2987"
sodipodi:sides="5"
sodipodi:cx="330"
sodipodi:cy="1027.7194"
sodipodi:r1="169.28609"
sodipodi:r2="75.090069"
sodipodi:arg1="-1.5686866"
sodipodi:arg2="-0.95344865"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 330.35715,858.43365 43.11057,108.05601 117.64292,9.25721 -89.44547,74.39173 27.54954,114.7457 -98.39092,-62.0794 -100.61637,61.6596 28.63654,-112.759 -89.73387,-76.63797 116.08927,-7.60945 z"
inkscape:transform-center-x="-0.11036321"
inkscape:transform-center-y="-16.060386"
transform="translate(-21.071429,-112.5)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

78
img/inactive_star.svg Normal file
View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="322.00055"
height="306.45065"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="inactive_star.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="116.4202"
inkscape:cy="165.53453"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1021"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-148.03866,-745.93365)">
<path
sodipodi:type="star"
style="fill:#cccccc;fill-opacity:1;stroke:none"
id="path2987"
sodipodi:sides="5"
sodipodi:cx="330"
sodipodi:cy="1027.7194"
sodipodi:r1="169.28609"
sodipodi:r2="75.090069"
sodipodi:arg1="-1.5686866"
sodipodi:arg2="-0.95344865"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="m 330.35715,858.43365 43.11057,108.05601 117.64292,9.25721 -89.44547,74.39173 27.54954,114.7457 -98.39092,-62.0794 -100.61637,61.6596 28.63654,-112.759 -89.73387,-76.63797 116.08927,-7.60945 z"
inkscape:transform-center-x="-0.11036321"
inkscape:transform-center-y="-16.060386"
transform="translate(-21.071429,-112.5)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

219
js/app.js
View File

@ -460,6 +460,10 @@ GroupList.prototype.deleteGroup = function(groupid, cb) {
GroupList.prototype.editGroup = function(id) { GroupList.prototype.editGroup = function(id) {
var self = this; var self = this;
if(this.$editelem) {
console.log('Already editing, returning');
return;
}
// NOTE: Currently this only works for adding, not renaming // NOTE: Currently this only works for adding, not renaming
var saveChanges = function($elem, $input) { var saveChanges = function($elem, $input) {
console.log('saveChanges', $input.val()); console.log('saveChanges', $input.val());
@ -474,6 +478,7 @@ GroupList.prototype.editGroup = function(id) {
$elem.prepend(name).removeClass('editing').attr('data-id', response.id); $elem.prepend(name).removeClass('editing').attr('data-id', response.id);
$input.next('.checked').remove() $input.next('.checked').remove()
$input.remove() $input.remove()
self.$editelem = null;
} else { } else {
$input.prop('disabled', false); $input.prop('disabled', false);
OC.notify({message:response.message}); OC.notify({message:response.message});
@ -484,17 +489,17 @@ GroupList.prototype.editGroup = function(id) {
if(typeof id === 'undefined') { if(typeof id === 'undefined') {
// Add new group // Add new group
var tmpl = this.$groupListItemTemplate; var tmpl = this.$groupListItemTemplate;
var $elem = (tmpl).octemplate({ self.$editelem = (tmpl).octemplate({
id: 'new', id: 'new',
type: 'category', type: 'category',
num: 0, num: 0,
name: '', name: '',
}); });
var $input = $('<input type="text" class="active" /><a class="action checked disabled" />'); var $input = $('<input type="text" class="active" /><a class="action checked disabled" />');
$elem.prepend($input).addClass('editing'); self.$editelem.prepend($input).addClass('editing');
$elem.data('contacts', []); self.$editelem.data('contacts', []);
this.$groupList.find('h3.group[data-type="category"]').first().before($elem); this.$groupList.find('h3.group[data-type="category"]').first().before(self.$editelem);
this.selectGroup({element:$elem}); this.selectGroup({element:self.$editelem});
$input.on('input', function(event) { $input.on('input', function(event) {
if($(this).val().length > 0) { if($(this).val().length > 0) {
$(this).next('.checked').removeClass('disabled'); $(this).next('.checked').removeClass('disabled');
@ -505,9 +510,10 @@ GroupList.prototype.editGroup = function(id) {
$input.on('keyup', function(event) { $input.on('keyup', function(event) {
var keyCode = Math.max(event.keyCode, event.which); var keyCode = Math.max(event.keyCode, event.which);
if(keyCode === 13) { if(keyCode === 13) {
saveChanges($elem, $(this)); saveChanges(self.$editelem, $(this));
} else if(keyCode === 27) { } else if(keyCode === 27) {
$elem.remove(); self.$editelem.remove();
self.$editelem = null;
} }
}); });
$input.next('.checked').on('click keydown', function(event) { $input.next('.checked').on('click keydown', function(event) {
@ -515,7 +521,7 @@ GroupList.prototype.editGroup = function(id) {
if(wrongKey(event)) { if(wrongKey(event)) {
return; return;
} }
saveChanges($elem, $input); saveChanges(self.$editelem, $input);
}); });
$input.focus(); $input.focus();
} else if(utils.isUInt(id)) { } else if(utils.isUInt(id)) {
@ -719,19 +725,19 @@ OC.Contacts = OC.Contacts || {
this.scrollTimeoutMiliSecs = 100; this.scrollTimeoutMiliSecs = 100;
this.isScrolling = false; this.isScrolling = false;
this.cacheElements(); this.cacheElements();
this.Contacts = new OC.Contacts.ContactList( this.contacts = new OC.Contacts.ContactList(
this.$contactList, this.$contactList,
this.$contactListItemTemplate, this.$contactListItemTemplate,
this.$contactFullTemplate, this.$contactFullTemplate,
this.detailTemplates this.detailTemplates
); );
this.Groups = new GroupList(this.$groupList, this.$groupListItemTemplate); this.groups = new GroupList(this.$groupList, this.$groupListItemTemplate);
OCCategories.changed = this.Groups.categoriesChanged; OCCategories.changed = this.groups.categoriesChanged;
OCCategories.app = 'contacts'; OCCategories.app = 'contacts';
OCCategories.type = 'contact'; OCCategories.type = 'contact';
this.bindEvents(); this.bindEvents();
this.$toggleAll.show(); this.$toggleAll.show();
this.showActions(['addcontact']); this.showActions(['add']);
// Wait 2 mins then check if contacts are indexed. // Wait 2 mins then check if contacts are indexed.
setTimeout(function() { setTimeout(function() {
@ -754,6 +760,8 @@ OC.Contacts = OC.Contacts || {
this.showActions(false); this.showActions(false);
}, },
showActions:function(act) { showActions:function(act) {
console.log('showActions', act);
//console.trace();
this.$headeractions.children().hide(); this.$headeractions.children().hide();
if(act && act.length > 0) { if(act && act.length > 0) {
this.$headeractions.children('.'+act.join(',.')).show(); this.$headeractions.children('.'+act.join(',.')).show();
@ -771,7 +779,7 @@ OC.Contacts = OC.Contacts || {
$.each($($('#contactDetailsTemplate').html()), function(idx, node) { $.each($($('#contactDetailsTemplate').html()), function(idx, node) {
if(node.nodeType === Node.ELEMENT_NODE && node.nodeName === 'DIV') { if(node.nodeType === Node.ELEMENT_NODE && node.nodeName === 'DIV') {
var $tmpl = $(node.innerHTML); var $tmpl = $(node.innerHTML);
self.detailTemplates[$tmpl.data('element')] = $(node.outerHTML); self.detailTemplates[$tmpl.data('element')] = $(node);
} }
}); });
this.$groupListItemTemplate = $('#groupListItemTemplate'); this.$groupListItemTemplate = $('#groupListItemTemplate');
@ -796,10 +804,10 @@ OC.Contacts = OC.Contacts || {
buildGroupSelect: function() { buildGroupSelect: function() {
// If a contact is open we know which categories it's in // If a contact is open we know which categories it's in
if(this.currentid) { if(this.currentid) {
var contact = this.Contacts.contacts[this.currentid]; var contact = this.contacts.contacts[this.currentid];
this.$groups.find('optgroup,option:not([value="-1"])').remove(); this.$groups.find('optgroup,option:not([value="-1"])').remove();
var addopts = '', rmopts = ''; var addopts = '', rmopts = '';
$.each(this.Groups.categories, function(i, category) { $.each(this.groups.categories, function(i, category) {
if(contact.inGroup(category.name)) { if(contact.inGroup(category.name)) {
rmopts += '<option value="' + category.id + '">' + category.name + '</option>'; rmopts += '<option value="' + category.id + '">' + category.name + '</option>';
} else { } else {
@ -814,10 +822,10 @@ OC.Contacts = OC.Contacts || {
$(rmopts).appendTo(this.$groups) $(rmopts).appendTo(this.$groups)
.wrapAll('<optgroup data-action="remove" label="' + t('contacts', 'Remove from...') + '"/>'); .wrapAll('<optgroup data-action="remove" label="' + t('contacts', 'Remove from...') + '"/>');
} }
} else if(this.Contacts.getSelectedContacts().length > 0) { // Otherwise add all categories to both add and remove } else if(this.contacts.getSelectedContacts().length > 0) { // Otherwise add all categories to both add and remove
this.$groups.find('optgroup,option:not([value="-1"])').remove(); this.$groups.find('optgroup,option:not([value="-1"])').remove();
var addopts = '', rmopts = ''; var addopts = '', rmopts = '';
$.each(this.Groups.categories, function(i, category) { $.each(this.groups.categories, function(i, category) {
rmopts += '<option value="' + category.id + '">' + category.name + '</option>'; rmopts += '<option value="' + category.id + '">' + category.name + '</option>';
addopts += '<option value="' + category.id + '">' + category.name + '</option>'; addopts += '<option value="' + category.id + '">' + category.name + '</option>';
}); });
@ -845,7 +853,7 @@ OC.Contacts = OC.Contacts || {
var id = parseInt(data.id); var id = parseInt(data.id);
console.log('contact', data.id, 'deleted'); console.log('contact', data.id, 'deleted');
// update counts on group lists // update counts on group lists
self.Groups.removeFromAll(data.id, true) self.groups.removeFromAll(data.id, true)
}); });
$(document).bind('status.contact.added', function(e, data) { $(document).bind('status.contact.added', function(e, data) {
@ -874,7 +882,7 @@ OC.Contacts = OC.Contacts || {
} else { } else {
self.numcontacts = result.numcontacts; self.numcontacts = result.numcontacts;
self.loading(self.$rightContent, false); self.loading(self.$rightContent, false);
self.Groups.loadGroups(self.numcontacts, function() { self.groups.loadGroups(self.numcontacts, function() {
self.loading($('#leftcontent'), false); self.loading($('#leftcontent'), false);
console.log('Groups loaded, currentid', self.currentid); console.log('Groups loaded, currentid', self.currentid);
if(self.currentid) { if(self.currentid) {
@ -930,9 +938,13 @@ OC.Contacts = OC.Contacts || {
}); });
$(document).bind('request.contact.setasfavorite', function(e, data) { $(document).bind('request.contact.setasfavorite', function(e, data) {
var id = parseInt(data.id);
console.log('contact', data.id, 'request.contact.setasfavorite'); console.log('contact', data.id, 'request.contact.setasfavorite');
self.Groups.setAsFavorite(data.id, data.state); self.groups.setAsFavorite(data.id, data.state);
});
$(document).bind('request.contact.addtogroup', function(e, data) {
console.log('contact', data.id, 'request.contact.addtogroup');
self.groups.addTo(data.id, data.groupid);
}); });
$(document).bind('request.contact.export', function(e, data) { $(document).bind('request.contact.export', function(e, data) {
@ -950,7 +962,7 @@ OC.Contacts = OC.Contacts || {
$(document).bind('request.contact.delete', function(e, data) { $(document).bind('request.contact.delete', function(e, data) {
var id = parseInt(data.id); var id = parseInt(data.id);
console.log('contact', data.id, 'request.contact.delete'); console.log('contact', data.id, 'request.contact.delete');
self.Contacts.delayedDelete(id); self.contacts.delayedDelete(id);
self.$contactList.removeClass('dim'); self.$contactList.removeClass('dim');
self.showActions(['add']); self.showActions(['add']);
}); });
@ -974,13 +986,13 @@ OC.Contacts = OC.Contacts || {
$(document).bind('request.addressbook.activate', function(e, result) { $(document).bind('request.addressbook.activate', function(e, result) {
console.log('request.addressbook.activate', result); console.log('request.addressbook.activate', result);
self.Contacts.showFromAddressbook(result.id, result.activate); self.contacts.showFromAddressbook(result.id, result.activate);
}); });
$(document).bind('status.contact.removedfromgroup', function(e, result) { $(document).bind('status.contact.removedfromgroup', function(e, result) {
console.log('status.contact.removedfromgroup', result); console.log('status.contact.removedfromgroup', result);
if(self.currentgroup == result.groupid) { if(self.currentgroup == result.groupid) {
self.Contacts.hideContact(result.contactid); self.contacts.hideContact(result.contactid);
self.closeContact(result.contactid); self.closeContact(result.contactid);
} }
}); });
@ -989,21 +1001,21 @@ OC.Contacts = OC.Contacts || {
console.log('status.group.groupremoved', result); console.log('status.group.groupremoved', result);
if(parseInt(result.groupid) === parseInt(self.currentgroup)) { if(parseInt(result.groupid) === parseInt(self.currentgroup)) {
console.time('hiding'); console.time('hiding');
self.Contacts.showContacts([]); self.contacts.showContacts([]);
console.timeEnd('hiding'); console.timeEnd('hiding');
self.currentgroup = 'all'; self.currentgroup = 'all';
} }
$.each(result.contacts, function(idx, contactid) { $.each(result.contacts, function(idx, contactid) {
var contact = self.Contacts.findById(contactid); var contact = self.contacts.findById(contactid);
console.log('contactid', contactid, contact); console.log('contactid', contactid, contact);
self.Contacts.findById(contactid).removeFromGroup(result.groupname); self.contacts.findById(contactid).removeFromGroup(result.groupname);
}); });
}); });
$(document).bind('status.group.contactadded', function(e, result) { $(document).bind('status.group.contactadded', function(e, result) {
console.log('status.group.contactadded', result); console.log('status.group.contactadded', result);
self.Contacts.contacts[parseInt(result.contactid)].addToGroup(result.groupname); self.contacts.contacts[parseInt(result.contactid)].addToGroup(result.groupname);
}); });
// Group sorted, save the sort order // Group sorted, save the sort order
@ -1027,13 +1039,13 @@ OC.Contacts = OC.Contacts || {
} }
self.$contactList.show(); self.$contactList.show();
self.$toggleAll.show(); self.$toggleAll.show();
self.showActions(['addcontact']); self.showActions(['add']);
if(result.type === 'category' || result.type === 'fav') { if(result.type === 'category' || result.type === 'fav') {
self.Contacts.showContacts(result.contacts); self.contacts.showContacts(result.contacts);
} else if(result.type === 'shared') { } else if(result.type === 'shared') {
self.Contacts.showFromAddressbook(self.currentgroup, true, true); self.contacts.showFromAddressbook(self.currentgroup, true, true);
} else { } else {
self.Contacts.showContacts(self.currentgroup); self.contacts.showContacts(self.currentgroup);
} }
$.post(OC.filePath('contacts', 'ajax', 'setpreference.php'), {'key':'lastgroup', 'value':self.currentgroup}, function(jsondata) { $.post(OC.filePath('contacts', 'ajax', 'setpreference.php'), {'key':'lastgroup', 'value':self.currentgroup}, function(jsondata) {
if(!jsondata || jsondata.status !== 'success') { if(!jsondata || jsondata.status !== 'success') {
@ -1052,7 +1064,7 @@ OC.Contacts = OC.Contacts || {
var offset = self.$contactList.find('tr:eq(' + (num-20) + ')').offset().top; var offset = self.$contactList.find('tr:eq(' + (num-20) + ')').offset().top;
if(offset < self.$rightContent.height()) { if(offset < self.$rightContent.height()) {
console.log('load more'); console.log('load more');
self.Contacts.loadContacts(num, function() { self.contacts.loadContacts(num, function() {
self.isScrolling = false; self.isScrolling = false;
}); });
} else { } else {
@ -1088,7 +1100,7 @@ OC.Contacts = OC.Contacts || {
if(wrongKey(event)) { if(wrongKey(event)) {
return; return;
} }
self.Groups.editGroup(); self.groups.editGroup();
//self.addGroup(); //self.addGroup();
}); });
@ -1106,9 +1118,9 @@ OC.Contacts = OC.Contacts || {
self.buildGroupSelect(); self.buildGroupSelect();
} }
if(isChecked) { if(isChecked) {
self.showActions(['addcontact', 'groups', 'delete', 'favorite']); self.showActions(['add', 'download', 'groups', 'delete', 'favorite']);
} else { } else {
self.showActions(['addcontact']); self.showActions(['add']);
} }
}); });
@ -1117,12 +1129,14 @@ OC.Contacts = OC.Contacts || {
if(self.$groups.find('option').length === 1) { if(self.$groups.find('option').length === 1) {
self.buildGroupSelect(); self.buildGroupSelect();
} }
self.showActions(['addcontact', 'groups', 'delete', 'favorite']); self.showActions(['add', 'download', 'groups', 'delete', 'favorite']);
} else if(self.Contacts.getSelectedContacts().length === 0) { } else if(self.contacts.getSelectedContacts().length === 0) {
self.showActions(['addcontact']); self.showActions(['add']);
} }
}); });
// Add to/remove from group multiple contacts.
// FIXME: Refactor this to be usable for favoriting also.
this.$groups.on('change', function() { this.$groups.on('change', function() {
var $opt = $(this).find('option:selected'); var $opt = $(this).find('option:selected');
var action = $opt.parent().data('action'); var action = $opt.parent().data('action');
@ -1134,13 +1148,13 @@ OC.Contacts = OC.Contacts || {
ids = [self.currentid,]; ids = [self.currentid,];
buildnow = true buildnow = true
} else { } else {
ids = self.Contacts.getSelectedContacts(); ids = self.contacts.getSelectedContacts();
} }
self.setAllChecked(false); self.setAllChecked(false);
self.$toggleAll.prop('checked', false); self.$toggleAll.prop('checked', false);
if(!self.currentid) { if(!self.currentid) {
self.showActions(['addcontact']); self.showActions(['add']);
} }
if($opt.val() === 'add') { // Add new group if($opt.val() === 'add') { // Add new group
@ -1151,13 +1165,13 @@ OC.Contacts = OC.Contacts || {
if(response.status === 'success') { if(response.status === 'success') {
groupId = response.id; groupId = response.id;
groupName = response.name; groupName = response.name;
self.Groups.addTo(ids, groupId, function(result) { self.groups.addTo(ids, groupId, function(result) {
if(result.status === 'success') { if(result.status === 'success') {
$.each(ids, function(idx, id) { $.each(ids, function(idx, id) {
// Delay each contact to not trigger too many ajax calls // Delay each contact to not trigger too many ajax calls
// at a time. // at a time.
setTimeout(function() { setTimeout(function() {
self.Contacts.contacts[id].addToGroup(groupName); self.contacts.contacts[id].addToGroup(groupName);
// I don't think this is used... // I don't think this is used...
if(buildnow) { if(buildnow) {
self.buildGroupSelect(); self.buildGroupSelect();
@ -1170,7 +1184,7 @@ OC.Contacts = OC.Contacts || {
}, 1000); }, 1000);
}); });
} else { } else {
// TODO: Use message return from Groups object. // TODO: Use message returned from groups object.
OC.notify({message:t('contacts', t('contacts', 'Error adding to group.'))}); OC.notify({message:t('contacts', t('contacts', 'Error adding to group.'))});
} }
}); });
@ -1185,7 +1199,7 @@ OC.Contacts = OC.Contacts || {
console.log('trut', groupName, groupId); console.log('trut', groupName, groupId);
if(action === 'add') { if(action === 'add') {
self.Groups.addTo(ids, $opt.val(), function(result) { self.groups.addTo(ids, $opt.val(), function(result) {
console.log('after add', result); console.log('after add', result);
if(result.status === 'success') { if(result.status === 'success') {
$.each(result.ids, function(idx, id) { $.each(result.ids, function(idx, id) {
@ -1193,7 +1207,7 @@ OC.Contacts = OC.Contacts || {
// at a time. // at a time.
setTimeout(function() { setTimeout(function() {
console.log('adding', id, 'to', groupName); console.log('adding', id, 'to', groupName);
self.Contacts.contacts[id].addToGroup(groupName); self.contacts.contacts[id].addToGroup(groupName);
// I don't think this is used... // I don't think this is used...
if(buildnow) { if(buildnow) {
self.buildGroupSelect(); self.buildGroupSelect();
@ -1214,12 +1228,12 @@ OC.Contacts = OC.Contacts || {
self.$groups.val(-1).hide().find('optgroup,option:not([value="-1"])').remove(); self.$groups.val(-1).hide().find('optgroup,option:not([value="-1"])').remove();
} }
} else if(action === 'remove') { } else if(action === 'remove') {
self.Groups.removeFrom(ids, $opt.val(), function(result) { self.groups.removeFrom(ids, $opt.val(), function(result) {
console.log('after remove', result); console.log('after remove', result);
if(result.status === 'success') { if(result.status === 'success') {
var groupname = $opt.text(), groupid = $opt.val(); var groupname = $opt.text(), groupid = $opt.val();
$.each(result.ids, function(idx, id) { $.each(result.ids, function(idx, id) {
self.Contacts.contacts[id].removeFromGroup(groupname); self.contacts.contacts[id].removeFromGroup(groupname);
if(buildnow) { if(buildnow) {
self.buildGroupSelect(); self.buildGroupSelect();
} }
@ -1252,7 +1266,7 @@ OC.Contacts = OC.Contacts || {
event.preventDefault(); event.preventDefault();
console.log('select', event); console.log('select', event);
self.dontScroll = true; self.dontScroll = true;
self.Contacts.select($(this).data('id'), true); self.contacts.select($(this).data('id'), true);
return; return;
} }
if($(event.target).is('a.mailto')) { if($(event.target).is('a.mailto')) {
@ -1268,23 +1282,6 @@ OC.Contacts = OC.Contacts || {
self.openContact($(this).data('id')); self.openContact($(this).data('id'));
}); });
$('.addcontact').on('click keydown', function(event) {
if(wrongKey(event)) {
return;
}
console.log('add');
self.$toggleAll.hide();
$(this).hide();
self.currentid = 'new';
var props = {
favorite: false,
groups: self.Groups.categories,
};
self.tmpcontact = self.Contacts.addContact();
self.$rightContent.prepend(self.tmpcontact);
self.hideActions();
});
this.$settings.find('h3').on('click keydown', function(event) { this.$settings.find('h3').on('click keydown', function(event) {
if(wrongKey(event)) { if(wrongKey(event)) {
return; return;
@ -1303,7 +1300,7 @@ OC.Contacts = OC.Contacts || {
} }
$list.empty(); $list.empty();
$.each(self.Contacts.addressbooks, function(id, book) { $.each(self.contacts.addressbooks, function(id, book) {
var $li = self.$addressbookTmpl.octemplate({ var $li = self.$addressbookTmpl.octemplate({
id: id, id: id,
permissions: book.permissions, permissions: book.permissions,
@ -1325,7 +1322,7 @@ OC.Contacts = OC.Contacts || {
success:function(jsondata) { success:function(jsondata) {
console.log(jsondata); console.log(jsondata);
if(jsondata.status == 'success') { if(jsondata.status == 'success') {
self.Contacts.unsetAddressbook(id); self.contacts.unsetAddressbook(id);
$li.remove(); $li.remove();
OC.notify({ OC.notify({
message:t('contacts','Deleting done. Click here to cancel reloading.'), message:t('contacts','Deleting done. Click here to cancel reloading.'),
@ -1351,7 +1348,7 @@ OC.Contacts = OC.Contacts || {
}); });
$list.find('a.action.globe').on('click keypress', function() { $list.find('a.action.globe').on('click keypress', function() {
var id = parseInt($(this).parents('li').first().data('id')); var id = parseInt($(this).parents('li').first().data('id'));
var book = self.Contacts.addressbooks[id]; var book = self.contacts.addressbooks[id];
var uri = (book.owner === oc_current_user ) ? book.uri : book.uri + '_shared_by_' + book.owner; var uri = (book.owner === oc_current_user ) ? book.uri : book.uri + '_shared_by_' + book.owner;
var link = totalurl+'/'+encodeURIComponent(oc_current_user)+'/'+encodeURIComponent(uri); var link = totalurl+'/'+encodeURIComponent(oc_current_user)+'/'+encodeURIComponent(uri);
var $dropdown = $('<div id="dropdown" class="drop"><input type="text" value="' + link + '" /></div>'); var $dropdown = $('<div id="dropdown" class="drop"><input type="text" value="' + link + '" /></div>');
@ -1384,7 +1381,7 @@ OC.Contacts = OC.Contacts || {
success:function(jsondata) { success:function(jsondata) {
console.log(jsondata); console.log(jsondata);
if(jsondata.status == 'success') { if(jsondata.status == 'success') {
self.Contacts.setAddressbook(jsondata.data.addressbook); self.contacts.setAddressbook(jsondata.data.addressbook);
id = jsondata.data.addressbook.id id = jsondata.data.addressbook.id
} else { } else {
OC.notify({message:jsondata.data.message}); OC.notify({message:jsondata.data.message});
@ -1399,7 +1396,7 @@ OC.Contacts = OC.Contacts || {
} }
self.$importIntoSelect.empty(); self.$importIntoSelect.empty();
$.each(self.Contacts.addressbooks, function(id, book) { $.each(self.contacts.addressbooks, function(id, book) {
self.$importIntoSelect.append('<option value="' + id + '">' + book.displayname + '</option>'); self.$importIntoSelect.append('<option value="' + id + '">' + book.displayname + '</option>');
}); });
self.$importIntoSelect.multiSelect({ self.$importIntoSelect.multiSelect({
@ -1414,13 +1411,24 @@ OC.Contacts = OC.Contacts || {
$list.toggle('slow'); $list.toggle('slow');
}); });
this.$header.on('click keydown', '.back', function(event) { this.$header.on('click keydown', '.add', function(event) {
if(wrongKey(event)) { if(wrongKey(event)) {
return; return;
} }
console.log('back'); console.log('add');
self.closeContact(self.currentid); self.$toggleAll.hide();
self.$toggleAll.show(); $(this).hide();
self.currentid = 'new';
// Properties that the contact doesn't know
console.log('addContact, groupid', self.currentgroup)
var groupprops = {
favorite: false,
groups: self.groups.categories,
currentgroup: {id:self.currentgroup, name:self.groups.nameById(self.currentgroup)},
};
self.tmpcontact = self.contacts.addContact(groupprops);
self.$rightContent.prepend(self.tmpcontact);
self.hideActions();
}); });
this.$header.on('click keydown', '.delete', function(event) { this.$header.on('click keydown', '.delete', function(event) {
@ -1430,11 +1438,11 @@ OC.Contacts = OC.Contacts || {
console.log('delete'); console.log('delete');
if(self.currentid) { if(self.currentid) {
console.assert(utils.isUInt(self.currentid), 'self.currentid is not an integer'); console.assert(utils.isUInt(self.currentid), 'self.currentid is not an integer');
self.Contacts.delayedDelete(self.currentid); self.contacts.delayedDelete(self.currentid);
} else { } else {
self.Contacts.delayedDelete(self.Contacts.getSelectedContacts()); self.contacts.delayedDelete(self.contacts.getSelectedContacts());
} }
self.showActions(['addcontact']); self.showActions(['add']);
}); });
this.$header.on('click keydown', '.download', function(event) { this.$header.on('click keydown', '.download', function(event) {
@ -1442,11 +1450,8 @@ OC.Contacts = OC.Contacts || {
return; return;
} }
console.log('download'); console.log('download');
if(self.currentid) { document.location.href = OC.linkTo('contacts', 'export.php')
document.location.href = OC.linkTo('contacts', 'export.php') + '?contactid=' + self.currentid; + '?selectedids=' + self.contacts.getSelectedContacts().join(',');
} else {
console.log('currentid is not set');
}
}); });
this.$header.on('click keydown', '.favorite', function(event) { this.$header.on('click keydown', '.favorite', function(event) {
@ -1457,9 +1462,9 @@ OC.Contacts = OC.Contacts || {
return; return;
} }
// FIXME: This should only apply for contacts list. // FIXME: This should only apply for contacts list.
var state = self.Groups.isFavorite(self.currentid); var state = self.groups.isFavorite(self.currentid);
console.log('Favorite?', this, state); console.log('Favorite?', this, state);
self.Groups.setAsFavorite(self.currentid, !state, function(jsondata) { self.groups.setAsFavorite(self.currentid, !state, function(jsondata) {
if(jsondata.status === 'success') { if(jsondata.status === 'success') {
if(state) { if(state) {
self.$header.find('.favorite').switchClass('active', ''); self.$header.find('.favorite').switchClass('active', '');
@ -1672,7 +1677,7 @@ OC.Contacts = OC.Contacts || {
}); });
$(document).on('keypress', function(event) { $(document).on('keypress', function(event) {
if(event.target.nodeName.toUpperCase() != 'BODY') { if(!$(event.target).is('body')) {
return; return;
} }
var keyCode = Math.max(event.keyCode, event.which); var keyCode = Math.max(event.keyCode, event.which);
@ -1700,14 +1705,14 @@ OC.Contacts = OC.Contacts || {
break; break;
case 46: // Delete case 46: // Delete
if(event.shiftKey) { if(event.shiftKey) {
self.Contacts.delayedDelete(self.currentid); self.contacts.delayedDelete(self.currentid);
} }
break; break;
case 40: // down case 40: // down
case 74: // j case 74: // j
console.log('next'); console.log('next');
if(!self.currentid && self.currentlistid) { if(!self.currentid && self.currentlistid) {
self.Contacts.contacts[self.currentlistid].next(); self.contacts.contacts[self.currentlistid].next();
} }
break; break;
case 65: // a case 65: // a
@ -1721,7 +1726,7 @@ OC.Contacts = OC.Contacts || {
case 75: // k case 75: // k
console.log('previous'); console.log('previous');
if(!self.currentid && self.currentlistid) { if(!self.currentid && self.currentlistid) {
self.Contacts.contacts[self.currentlistid].prev(); self.contacts.contacts[self.currentlistid].prev();
} }
break; break;
case 34: // PageDown case 34: // PageDown
@ -1734,7 +1739,7 @@ OC.Contacts = OC.Contacts || {
case 33: // PageUp case 33: // PageUp
case 80: // p case 80: // p
// prev addressbook // prev addressbook
//OC.Contacts.Contacts.previousAddressbook(); //OC.contacts.contacts.previousAddressbook();
break; break;
case 82: // r case 82: // r
console.log('refresh - what?'); console.log('refresh - what?');
@ -1774,7 +1779,7 @@ OC.Contacts = OC.Contacts || {
height: 'auto', width: 'auto', height: 'auto', width: 'auto',
buttons: { buttons: {
'Ok':function() { 'Ok':function() {
self.Groups.addGroup( self.groups.addGroup(
{name:$dlg.find('input:text').val()}, {name:$dlg.find('input:text').val()},
function(response) { function(response) {
if(typeof cb === 'function') { if(typeof cb === 'function') {
@ -1808,11 +1813,12 @@ OC.Contacts = OC.Contacts || {
}); });
}, },
jumpToContact: function(id) { jumpToContact: function(id) {
this.$rightContent.scrollTop(this.Contacts.contactPos(id)+10); this.$rightContent.scrollTop(this.contacts.contactPos(id)+10);
}, },
closeContact: function(id) { closeContact: function(id) {
if(typeof this.currentid === 'number') { if(typeof this.currentid === 'number') {
if(this.Contacts.findById(id).close()) { var contact = this.contacts.findById(id);
if(contact && contact.close()) {
this.$contactList.show(); this.$contactList.show();
this.jumpToContact(id); this.jumpToContact(id);
} }
@ -1822,7 +1828,7 @@ OC.Contacts = OC.Contacts || {
} }
this.$contactList.removeClass('dim'); this.$contactList.removeClass('dim');
delete this.currentid; delete this.currentid;
this.showActions(['addcontact']); this.showActions(['add']);
this.$groups.find('optgroup,option:not([value="-1"])').remove(); this.$groups.find('optgroup,option:not([value="-1"])').remove();
}, },
openContact: function(id) { openContact: function(id) {
@ -1831,17 +1837,19 @@ OC.Contacts = OC.Contacts || {
this.closeContact(this.currentid); this.closeContact(this.currentid);
} }
this.currentid = parseInt(id); this.currentid = parseInt(id);
console.log('Contacts.openContact, Favorite', this.currentid, this.Groups.isFavorite(this.currentid), this.Groups); console.log('Contacts.openContact, Favorite', this.currentid, this.groups.isFavorite(this.currentid), this.groups);
this.setAllChecked(false); this.setAllChecked(false);
//this.$contactList.hide(); //this.$contactList.hide();
this.$contactList.addClass('dim'); this.$contactList.addClass('dim');
this.$toggleAll.hide(); this.$toggleAll.hide();
this.jumpToContact(this.currentid); this.jumpToContact(this.currentid);
var props = { // Properties that the contact doesn't know
favorite: this.Groups.isFavorite(this.currentid), var groupprops = {
groups: this.Groups.categories, favorite: this.groups.isFavorite(this.currentid),
groups: this.groups.categories,
currentgroup: {id:this.currentgroup, name:this.groups.nameById(this.currentgroup)},
}; };
var $contactelem = this.Contacts.showContact(this.currentid, props); var $contactelem = this.contacts.showContact(this.currentid, groupprops);
var self = this; var self = this;
var $contact = $contactelem.find('#contact'); var $contact = $contactelem.find('#contact');
var adjustElems = function() { var adjustElems = function() {
@ -2067,7 +2075,7 @@ OC.Contacts = OC.Contacts || {
if(typeof cb === 'function') { if(typeof cb === 'function') {
cb({ cb({
status:'success', status:'success',
addressbook:self.Contacts.addressbooks[parseInt(aid)], addressbook:self.contacts.addressbooks[parseInt(aid)],
}); });
} }
$(this).dialog('close'); $(this).dialog('close');
@ -2084,7 +2092,7 @@ OC.Contacts = OC.Contacts || {
open: function(event, ui) { open: function(event, ui) {
console.log('open', $(this)); console.log('open', $(this));
var $lastrow = $(this).find('tr.new'); var $lastrow = $(this).find('tr.new');
$.each(self.Contacts.addressbooks, function(i, book) { $.each(self.contacts.addressbooks, function(i, book) {
console.log('book', i, book); console.log('book', i, book);
if(book.owner === OC.currentUser if(book.owner === OC.currentUser
|| (book.permissions & OC.PERMISSION_UPDATE || (book.permissions & OC.PERMISSION_UPDATE
@ -2114,7 +2122,12 @@ OC.Contacts = OC.Contacts || {
}; };
(function( $ ) { (function( $ ) {
// Support older browsers. From http://www.yelotofu.com/2008/08/jquery-outerhtml/
jQuery.fn.outerHTML = function(s) {
return s
? this.before(s).remove()
: jQuery('<p>').append(this.eq(0).clone()).html();
};
/** /**
* Object Template * Object Template
* Inspired by micro templating done by e.g. underscore.js * Inspired by micro templating done by e.g. underscore.js
@ -2136,7 +2149,7 @@ OC.Contacts = OC.Contacts || {
// From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript // From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript
_build: function(o){ _build: function(o){
var data = this.$elem.attr('type') === 'text/template' var data = this.$elem.attr('type') === 'text/template'
? this.$elem.html() : this.$elem.get(0).outerHTML; ? this.$elem.html() : this.$elem.outerHTML();
return data.replace(/{([^{}]*)}/g, return data.replace(/{([^{}]*)}/g,
function (a, b) { function (a, b) {
var r = o[b]; var r = o[b];

View File

@ -26,6 +26,13 @@ OC.Contacts = OC.Contacts || {};
this.multi_properties = ['EMAIL', 'TEL', 'IMPP', 'ADR', 'URL']; this.multi_properties = ['EMAIL', 'TEL', 'IMPP', 'ADR', 'URL'];
} }
Contact.prototype.showActions = function(act) {
this.$footer.children().hide();
if(act && act.length > 0) {
this.$footer.children('.'+act.join(',.')).show();
}
}
Contact.prototype.setAsSaving = function(obj, state) { Contact.prototype.setAsSaving = function(obj, state) {
if(!obj) { if(!obj) {
return; return;
@ -160,6 +167,7 @@ OC.Contacts = OC.Contacts || {};
return false; return false;
} }
self.saveProperty(params); self.saveProperty(params);
self.showActions(['close', 'add', 'export', 'delete']);
}); });
return; return;
} }
@ -395,6 +403,20 @@ OC.Contacts = OC.Contacts || {};
self.id = parseInt(jsondata.data.id); self.id = parseInt(jsondata.data.id);
self.access.id = parseInt(jsondata.data.aid); self.access.id = parseInt(jsondata.data.aid);
self.data = jsondata.data.details; self.data = jsondata.data.details;
// Add contact to current group
if(self.groupprops && self.groupprops.currentgroup.name !== 'all'
&& self.groupprops.currentgroup.name !== 'fav') {
if(!self.data.CATEGORIES) {
self.data.CATEGORIES = [{value:[self.groupprops.currentgroup.name], parameters:[]}];
// Save to vCard
self.saveProperty({name:'CATEGORIES', value:self.data.CATEGORIES[0].value.join(',') });
// Tell OC.Contacts to save in backend
$(document).trigger('request.contact.addtogroup', {
id: self.id,
groupid: self.groupprops.currentgroup.id,
});
}
}
$(document).trigger('status.contact.added', { $(document).trigger('status.contact.added', {
id: self.id, id: self.id,
contact: self, contact: self,
@ -547,14 +569,15 @@ OC.Contacts = OC.Contacts || {};
* Render the full contact * Render the full contact
* @return A jquery object to be inserted in the DOM * @return A jquery object to be inserted in the DOM
*/ */
Contact.prototype.renderContact = function(props) { Contact.prototype.renderContact = function(groupprops) {
this.groupprops = groupprops;
var self = this; var self = this;
var n = this.getPreferredValue('N', ['', '', '', '', '']); var n = this.getPreferredValue('N', ['', '', '', '', '']);
//console.log('Contact.renderContact', this.data); //console.log('Contact.renderContact', this.data);
var values = this.data var values = this.data
? { ? {
id: this.id, id: this.id,
favorite:props.favorite ? 'active' : '', favorite:groupprops.favorite ? 'active' : '',
name: this.getPreferredValue('FN', ''), name: this.getPreferredValue('FN', ''),
n0: n[0]||'', n1: n[1]||'', n2: n[2]||'', n3: n[3]||'', n4: n[4]||'', n0: n[0]||'', n1: n[1]||'', n2: n[2]||'', n3: n[3]||'', n4: n[4]||'',
nickname: this.getPreferredValue('NICKNAME', ''), nickname: this.getPreferredValue('NICKNAME', ''),
@ -569,6 +592,9 @@ OC.Contacts = OC.Contacts || {};
} }
: {id:'', favorite:'', name:'', nickname:'', title:'', org:'', bday:'', note:'', n0:'', n1:'', n2:'', n3:'', n4:''}; : {id:'', favorite:'', name:'', nickname:'', title:'', org:'', bday:'', note:'', n0:'', n1:'', n2:'', n3:'', n4:''};
this.$fullelem = this.$fullTemplate.octemplate(values).data('contactobject', this); this.$fullelem = this.$fullTemplate.octemplate(values).data('contactobject', this);
this.$footer = this.$fullelem.find('footer');
this.$fullelem.find('.tooltipped.rightwards.onfocus').tipsy({trigger: 'focus', gravity: 'w'}); this.$fullelem.find('.tooltipped.rightwards.onfocus').tipsy({trigger: 'focus', gravity: 'w'});
this.$fullelem.on('submit', function() { this.$fullelem.on('submit', function() {
return false; return false;
@ -613,14 +639,12 @@ OC.Contacts = OC.Contacts || {};
self.deleteProperty({obj:event.target}); self.deleteProperty({obj:event.target});
}); });
var $footer = this.$fullelem.find('footer'); this.$footer.on('click keydown', 'button', function(event) {
$footer.on('click keydown', 'button', function(event) {
$('.tipsy').remove(); $('.tipsy').remove();
if(wrongKey(event)) { if(wrongKey(event)) {
return; return;
} }
if($(this).is('.close')) { if($(this).is('.close') || $(this).is('.cancel')) {
$(document).trigger('request.contact.close', { $(document).trigger('request.contact.close', {
id: self.id, id: self.id,
}); });
@ -628,7 +652,7 @@ OC.Contacts = OC.Contacts || {};
$(document).trigger('request.contact.export', { $(document).trigger('request.contact.export', {
id: self.id, id: self.id,
}); });
} else if($(this).is('.deletecontact')) { } else if($(this).is('.delete')) {
$(document).trigger('request.contact.delete', { $(document).trigger('request.contact.delete', {
id: self.id, id: self.id,
}); });
@ -657,6 +681,9 @@ OC.Contacts = OC.Contacts || {};
}); });
this.$fullelem.find('.favorite').on('click', function () { this.$fullelem.find('.favorite').on('click', function () {
var state = $(this).hasClass('active'); var state = $(this).hasClass('active');
if(!this.data) {
return;
}
if(state) { if(state) {
$(this).switchClass('active', 'inactive'); $(this).switchClass('active', 'inactive');
} else { } else {
@ -671,6 +698,7 @@ OC.Contacts = OC.Contacts || {};
if(!this.data) { if(!this.data) {
// A new contact // A new contact
this.setEnabled(true); this.setEnabled(true);
this.showActions(['cancel']);
return this.$fullelem; return this.$fullelem;
} }
// Loop thru all single occurrence values. If not set hide the // Loop thru all single occurrence values. If not set hide the
@ -782,8 +810,10 @@ OC.Contacts = OC.Contacts || {};
&& !(this.access.permissions & OC.PERMISSION_UPDATE && !(this.access.permissions & OC.PERMISSION_UPDATE
|| this.access.permissions & OC.PERMISSION_DELETE)) { || this.access.permissions & OC.PERMISSION_DELETE)) {
this.setEnabled(false); this.setEnabled(false);
this.showActions(['close']);
} else { } else {
this.setEnabled(true); this.setEnabled(true);
this.showActions(['close', 'add', 'export', 'delete']);
} }
return this.$fullelem; return this.$fullelem;
} }
@ -800,7 +830,7 @@ OC.Contacts = OC.Contacts || {};
*/ */
Contact.prototype.renderStandardProperty = function(name, property) { Contact.prototype.renderStandardProperty = function(name, property) {
if(!this.detailTemplates[name]) { if(!this.detailTemplates[name]) {
console.log('No template for', name); console.error('No template for', name);
return; return;
} }
var values = property var values = property
@ -966,7 +996,7 @@ OC.Contacts = OC.Contacts || {};
if(!dontloadhandlers && this.isEditable()) { if(!dontloadhandlers && this.isEditable()) {
this.$photowrapper.on('mouseenter', function(event) { this.$photowrapper.on('mouseenter', function(event) {
if(event.target !== this) { if($(event.target).is('.favorite') || !self.data) {
return; return;
} }
$phototools.slideDown(200); $phototools.slideDown(200);
@ -1245,8 +1275,6 @@ OC.Contacts = OC.Contacts || {};
} }
ContactList.prototype.contactPos = function(id) { ContactList.prototype.contactPos = function(id) {
console.log('ContactList.contactPos, id', id);
console.trace()
if(!id) { if(!id) {
console.warn('id missing'); console.warn('id missing');
return false; return false;

View File

@ -34,6 +34,7 @@
"Phone" => "الهاتف", "Phone" => "الهاتف",
"Email" => "البريد الالكتروني", "Email" => "البريد الالكتروني",
"Address" => "عنوان", "Address" => "عنوان",
"Delete contact" => "امحي المعرفه",
"Preferred" => "مفضل", "Preferred" => "مفضل",
"City" => "المدينة", "City" => "المدينة",
"Country" => "البلد", "Country" => "البلد",
@ -41,7 +42,6 @@
"Export" => "تصدير المعلومات", "Export" => "تصدير المعلومات",
"Add Contact" => "أضف شخص ", "Add Contact" => "أضف شخص ",
"Download contact" => "انزال المعرفه", "Download contact" => "انزال المعرفه",
"Delete contact" => "امحي المعرفه",
"Type" => "نوع", "Type" => "نوع",
"PO Box" => "العنوان البريدي", "PO Box" => "العنوان البريدي",
"Extended" => "إضافة", "Extended" => "إضافة",

View File

@ -49,12 +49,14 @@
"Couldn't load temporary image: " => "No s'ha pogut carregar la imatge temporal: ", "Couldn't load temporary image: " => "No s'ha pogut carregar la imatge temporal: ",
"No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut", "No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut",
"Contacts" => "Contactes", "Contacts" => "Contactes",
"%d_selected_contacts" => "%d_contactes_selecionats",
"Contact is already in this group." => "El contacte ja és en aquest grup.", "Contact is already in this group." => "El contacte ja és en aquest grup.",
"Contacts are already in this group." => "Els contactes ja són en aquest grup", "Contacts are already in this group." => "Els contactes ja són en aquest grup",
"Couldn't get contact list." => "No s'ha pogut obtenir la llista de contactes.", "Couldn't get contact list." => "No s'ha pogut obtenir la llista de contactes.",
"Contact is not in this group." => "El contacte no és en aquest grup.", "Contact is not in this group." => "El contacte no és en aquest grup.",
"Contacts are not in this group." => "Els contactes no són en aquest grup.", "Contacts are not in this group." => "Els contactes no són en aquest grup.",
"A group named {group} already exists" => "Un grup anomenat {group} ja existeix", "A group named {group} already exists" => "Un grup anomenat {group} ja existeix",
"You can drag groups to\narrange them as you like." => "Podeu arrossegar grups per\norganitzar-los com volgueu.",
"All" => "Tots", "All" => "Tots",
"Favorites" => "Preferits", "Favorites" => "Preferits",
"Shared by {owner}" => "Compartits per {owner}", "Shared by {owner}" => "Compartits per {owner}",
@ -67,9 +69,14 @@
"Error adding to group." => "Error en afegir grup", "Error adding to group." => "Error en afegir grup",
"Error removing from group." => "Error en eliminar del grup", "Error removing from group." => "Error en eliminar del grup",
"There was an error opening a mail composer." => "S'ha produït un error en obrir un redactor de correus electrónics.", "There was an error opening a mail composer." => "S'ha produït un error en obrir un redactor de correus electrónics.",
"Deleting done. Click here to cancel reloading." => "S'ha eliminat. Feu clic aquí per cancel·lar la recàrrega.",
"Add address book" => "Afegeix llibreta d'adreces",
"Import done. Click here to cancel reloading." => "S'ha importat. Feu clic aquí per cancel·lar la recàrrega.",
"Not all files uploaded. Retrying..." => "No s'han pujat tots els fitxers. Es reintenta...", "Not all files uploaded. Retrying..." => "No s'han pujat tots els fitxers. Es reintenta...",
"Something went wrong with the upload, please retry." => "Alguna cosa ha fallat en la pujada, intenteu-ho de nou.", "Something went wrong with the upload, please retry." => "Alguna cosa ha fallat en la pujada, intenteu-ho de nou.",
"Error" => "Error", "Error" => "Error",
"Importing from {filename}..." => "Important des de {filename}...",
"{success} imported, {failed} failed." => "{success} importat, {failed} fallat.",
"Importing..." => "Important...", "Importing..." => "Important...",
"Unable to upload your file as it is a directory or has 0 bytes" => "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes", "Unable to upload your file as it is a directory or has 0 bytes" => "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes",
"Upload Error" => "Error en la pujada", "Upload Error" => "Error en la pujada",
@ -145,12 +152,15 @@
"HomePage" => "Pàgina d'inici", "HomePage" => "Pàgina d'inici",
"New Group" => "Grup nou", "New Group" => "Grup nou",
"Settings" => "Configuració", "Settings" => "Configuració",
"Address books" => "Llibretes d'adreces",
"Import" => "Importa", "Import" => "Importa",
"Select files to import" => "Seleccioneu els fitxers a importar",
"Select files" => "Seleccioneu fitxers",
"Import into:" => "Importa a:", "Import into:" => "Importa a:",
"OK" => "D'acord", "OK" => "D'acord",
"(De-)select all" => "(Des-)selecciona'ls tots", "(De-)select all" => "(Des-)selecciona'ls tots",
"New Contact" => "Contate nou", "New Contact" => "Contate nou",
"Download Contact" => "Baixa contacte", "Download Contact(s)" => "Baixa contacte(s)",
"Groups" => "Grups", "Groups" => "Grups",
"Favorite" => "Preferits", "Favorite" => "Preferits",
"Delete Contact" => "Elimina contacte", "Delete Contact" => "Elimina contacte",
@ -181,9 +191,12 @@
"Nickname" => "Sobrenom", "Nickname" => "Sobrenom",
"Enter nickname" => "Escriviu el sobrenom", "Enter nickname" => "Escriviu el sobrenom",
"Title" => "Títol", "Title" => "Títol",
"Enter title" => "Escriviu el títol",
"Organization" => "Organització", "Organization" => "Organització",
"Enter organization" => "Escriviu l'organització",
"Birthday" => "Aniversari", "Birthday" => "Aniversari",
"Notes go here..." => "Escriviu notes aquí...", "Notes go here..." => "Escriviu notes aquí...",
"Export as VCF" => "Exporta com a VCF",
"Add" => "Afegeix", "Add" => "Afegeix",
"Phone" => "Telèfon", "Phone" => "Telèfon",
"Email" => "Correu electrònic", "Email" => "Correu electrònic",
@ -191,6 +204,7 @@
"Address" => "Adreça", "Address" => "Adreça",
"Note" => "Nota", "Note" => "Nota",
"Web site" => "Adreça web", "Web site" => "Adreça web",
"Delete contact" => "Suprimeix el contacte",
"Preferred" => "Preferit", "Preferred" => "Preferit",
"Please specify a valid email address." => "Especifiqueu una adreça de correu electrònic correcta", "Please specify a valid email address." => "Especifiqueu una adreça de correu electrònic correcta",
"someone@example.com" => "algú@exemple.com", "someone@example.com" => "algú@exemple.com",
@ -209,12 +223,14 @@
"Your city" => "Ciutat", "Your city" => "Ciutat",
"City" => "Ciutat", "City" => "Ciutat",
"Some region" => "Comarca", "Some region" => "Comarca",
"State or province" => "Estat o província",
"Your country" => "País", "Your country" => "País",
"Country" => "País", "Country" => "País",
"Instant Messenger" => "Instant Messenger", "Instant Messenger" => "Instant Messenger",
"Delete IM" => "Elimina IM", "Delete IM" => "Elimina IM",
"Share" => "Comparteix", "Share" => "Comparteix",
"Export" => "Exporta", "Export" => "Exporta",
"CardDAV link" => "Enllaç CardDAV",
"Add Contact" => "Afegeix un contacte", "Add Contact" => "Afegeix un contacte",
"Drop photo to upload" => "Elimina la foto a carregar", "Drop photo to upload" => "Elimina la foto a carregar",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format personalitzat, Nom curt, Nom sencer, Invertit o Invertit amb coma", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format personalitzat, Nom curt, Nom sencer, Invertit o Invertit amb coma",
@ -228,7 +244,6 @@
"Add notes here." => "Afegiu notes aquí.", "Add notes here." => "Afegiu notes aquí.",
"Add field" => "Afegeix un camp", "Add field" => "Afegeix un camp",
"Download contact" => "Baixa el contacte", "Download contact" => "Baixa el contacte",
"Delete contact" => "Suprimeix el contacte",
"The temporary image has been removed from cache." => "La imatge temporal ha estat eliminada de la memòria de cau.", "The temporary image has been removed from cache." => "La imatge temporal ha estat eliminada de la memòria de cau.",
"Edit address" => "Edita l'adreça", "Edit address" => "Edita l'adreça",
"Type" => "Tipus", "Type" => "Tipus",

View File

@ -49,6 +49,7 @@
"Couldn't load temporary image: " => "Nelze načíst dočasný obrázek: ", "Couldn't load temporary image: " => "Nelze načíst dočasný obrázek: ",
"No file was uploaded. Unknown error" => "Soubor nebyl odeslán. Neznámá chyba", "No file was uploaded. Unknown error" => "Soubor nebyl odeslán. Neznámá chyba",
"Contacts" => "Kontakty", "Contacts" => "Kontakty",
"%d_selected_contacts" => "%d_vybranych_kontaktu",
"Contact is already in this group." => "Kontakt je již v této skupině.", "Contact is already in this group." => "Kontakt je již v této skupině.",
"Contacts are already in this group." => "Kontakty jsou již v této skupině.", "Contacts are already in this group." => "Kontakty jsou již v této skupině.",
"Couldn't get contact list." => "Nelze získat seznam kontaktů.", "Couldn't get contact list." => "Nelze získat seznam kontaktů.",
@ -159,7 +160,7 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "Vybrat (odznačit) vše", "(De-)select all" => "Vybrat (odznačit) vše",
"New Contact" => "Nový kontakt", "New Contact" => "Nový kontakt",
"Download Contact" => "Stáhnout kontakt", "Download Contact(s)" => "Stáhnout kontakt(y)",
"Groups" => "Skupiny", "Groups" => "Skupiny",
"Favorite" => "Oblíbit", "Favorite" => "Oblíbit",
"Delete Contact" => "Smazat kontakt", "Delete Contact" => "Smazat kontakt",
@ -190,9 +191,12 @@
"Nickname" => "Přezdívka", "Nickname" => "Přezdívka",
"Enter nickname" => "Zadejte přezdívku", "Enter nickname" => "Zadejte přezdívku",
"Title" => "Název", "Title" => "Název",
"Enter title" => "Zadejte název",
"Organization" => "Organizace", "Organization" => "Organizace",
"Enter organization" => "Zadejte organizaci",
"Birthday" => "Narozeniny", "Birthday" => "Narozeniny",
"Notes go here..." => "Sem vložte poznámky...", "Notes go here..." => "Sem vložte poznámky...",
"Export as VCF" => "Exportovat jako VCF",
"Add" => "Přidat", "Add" => "Přidat",
"Phone" => "Telefon", "Phone" => "Telefon",
"Email" => "E-mail", "Email" => "E-mail",
@ -200,6 +204,7 @@
"Address" => "Adresa", "Address" => "Adresa",
"Note" => "Poznámka", "Note" => "Poznámka",
"Web site" => "Webová stránka", "Web site" => "Webová stránka",
"Delete contact" => "Smazat kontakt",
"Preferred" => "Preferované", "Preferred" => "Preferované",
"Please specify a valid email address." => "Prosím zadejte platnou e-mailovou adresu", "Please specify a valid email address." => "Prosím zadejte platnou e-mailovou adresu",
"someone@example.com" => "někdo@example.com", "someone@example.com" => "někdo@example.com",
@ -218,6 +223,7 @@
"Your city" => "Vaše město", "Your city" => "Vaše město",
"City" => "Město", "City" => "Město",
"Some region" => "Nějaký region", "Some region" => "Nějaký region",
"State or province" => "Stát, či provincie",
"Your country" => "Váše země", "Your country" => "Váše země",
"Country" => "Země", "Country" => "Země",
"Instant Messenger" => "Komunikátor", "Instant Messenger" => "Komunikátor",
@ -238,7 +244,6 @@
"Add notes here." => "Zde přidejte poznámky.", "Add notes here." => "Zde přidejte poznámky.",
"Add field" => "Přidat pole", "Add field" => "Přidat pole",
"Download contact" => "Stáhnout kontakt", "Download contact" => "Stáhnout kontakt",
"Delete contact" => "Smazat kontakt",
"The temporary image has been removed from cache." => "Obrázek byl odstraněn z vyrovnávací paměti.", "The temporary image has been removed from cache." => "Obrázek byl odstraněn z vyrovnávací paměti.",
"Edit address" => "Upravit adresu", "Edit address" => "Upravit adresu",
"Type" => "Typ", "Type" => "Typ",

View File

@ -140,6 +140,7 @@
"Address" => "Adresse", "Address" => "Adresse",
"Note" => "Note", "Note" => "Note",
"Web site" => "Hjemmeside", "Web site" => "Hjemmeside",
"Delete contact" => "Slet kontaktperson",
"Preferred" => "Foretrukken", "Preferred" => "Foretrukken",
"Please specify a valid email address." => "Indtast venligst en gyldig email-adresse.", "Please specify a valid email address." => "Indtast venligst en gyldig email-adresse.",
"Mail to address" => "Send mail til adresse", "Mail to address" => "Send mail til adresse",
@ -169,7 +170,6 @@
"Add notes here." => "Tilføj noter her.", "Add notes here." => "Tilføj noter her.",
"Add field" => "Tilføj element", "Add field" => "Tilføj element",
"Download contact" => "Download kontaktperson", "Download contact" => "Download kontaktperson",
"Delete contact" => "Slet kontaktperson",
"The temporary image has been removed from cache." => "Det midlertidige billede er ikke længere tilgængeligt.", "The temporary image has been removed from cache." => "Det midlertidige billede er ikke længere tilgængeligt.",
"Edit address" => "Rediger adresse", "Edit address" => "Rediger adresse",
"Type" => "Type", "Type" => "Type",

View File

@ -159,7 +159,6 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "Alle (nicht) auswählen", "(De-)select all" => "Alle (nicht) auswählen",
"New Contact" => "Neuer Kontakt", "New Contact" => "Neuer Kontakt",
"Download Contact" => "Kontakt herunterladen",
"Groups" => "Gruppen", "Groups" => "Gruppen",
"Favorite" => "Favorit", "Favorite" => "Favorit",
"Delete Contact" => "Kontakt löschen", "Delete Contact" => "Kontakt löschen",
@ -190,7 +189,9 @@
"Nickname" => "Spitzname", "Nickname" => "Spitzname",
"Enter nickname" => "Spitzname angeben", "Enter nickname" => "Spitzname angeben",
"Title" => "Titel", "Title" => "Titel",
"Enter title" => "Titel eingeben",
"Organization" => "Organisation", "Organization" => "Organisation",
"Enter organization" => "Organisation eingeben",
"Birthday" => "Geburtstag", "Birthday" => "Geburtstag",
"Notes go here..." => "Notizen hier hinein...", "Notes go here..." => "Notizen hier hinein...",
"Add" => "Hinzufügen", "Add" => "Hinzufügen",
@ -200,6 +201,7 @@
"Address" => "Adresse", "Address" => "Adresse",
"Note" => "Notiz", "Note" => "Notiz",
"Web site" => "Webseite", "Web site" => "Webseite",
"Delete contact" => "Kontakt löschen",
"Preferred" => "Bevorzugt", "Preferred" => "Bevorzugt",
"Please specify a valid email address." => "Bitte trage eine gültige E-Mail-Adresse ein.", "Please specify a valid email address." => "Bitte trage eine gültige E-Mail-Adresse ein.",
"someone@example.com" => "jemand@beispiel.de", "someone@example.com" => "jemand@beispiel.de",
@ -218,6 +220,7 @@
"Your city" => "Deine Stadt", "Your city" => "Deine Stadt",
"City" => "Stadt", "City" => "Stadt",
"Some region" => "Eine Region", "Some region" => "Eine Region",
"State or province" => "Staat oder Provinz",
"Your country" => "Dein Land", "Your country" => "Dein Land",
"Country" => "Land", "Country" => "Land",
"Instant Messenger" => "Instant Messenger", "Instant Messenger" => "Instant Messenger",
@ -238,7 +241,6 @@
"Add notes here." => "Füge hier Notizen ein.", "Add notes here." => "Füge hier Notizen ein.",
"Add field" => "Feld hinzufügen", "Add field" => "Feld hinzufügen",
"Download contact" => "Kontakt herunterladen", "Download contact" => "Kontakt herunterladen",
"Delete contact" => "Kontakt löschen",
"The temporary image has been removed from cache." => "Das temporäre Bild wurde aus dem Cache gelöscht.", "The temporary image has been removed from cache." => "Das temporäre Bild wurde aus dem Cache gelöscht.",
"Edit address" => "Adresse ändern", "Edit address" => "Adresse ändern",
"Type" => "Typ", "Type" => "Typ",

View File

@ -159,7 +159,7 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "Alle (ab-)wählen", "(De-)select all" => "Alle (ab-)wählen",
"New Contact" => "Neuer Kontakt", "New Contact" => "Neuer Kontakt",
"Download Contact" => "Kontakt herunterladen", "Download Contact(s)" => "Kontakte herunterladen",
"Groups" => "Gruppen", "Groups" => "Gruppen",
"Favorite" => "Favorit", "Favorite" => "Favorit",
"Delete Contact" => "Kontakt löschen", "Delete Contact" => "Kontakt löschen",
@ -190,9 +190,12 @@
"Nickname" => "Spitzname", "Nickname" => "Spitzname",
"Enter nickname" => "Spitzname angeben", "Enter nickname" => "Spitzname angeben",
"Title" => "Titel", "Title" => "Titel",
"Enter title" => "Titel eingeben",
"Organization" => "Organisation", "Organization" => "Organisation",
"Enter organization" => "Organisation eingeben",
"Birthday" => "Geburtstag", "Birthday" => "Geburtstag",
"Notes go here..." => "Notizen hier hinein...", "Notes go here..." => "Notizen hier hinein...",
"Export as VCF" => "Als VCF exportieren",
"Add" => "Hinzufügen", "Add" => "Hinzufügen",
"Phone" => "Telefon", "Phone" => "Telefon",
"Email" => "E-Mail", "Email" => "E-Mail",
@ -200,6 +203,7 @@
"Address" => "Adresse", "Address" => "Adresse",
"Note" => "Notiz", "Note" => "Notiz",
"Web site" => "Webseite", "Web site" => "Webseite",
"Delete contact" => "Kontakt löschen",
"Preferred" => "Bevorzugt", "Preferred" => "Bevorzugt",
"Please specify a valid email address." => "Bitte tragen Sie eine gültige E-Mail-Adresse ein.", "Please specify a valid email address." => "Bitte tragen Sie eine gültige E-Mail-Adresse ein.",
"someone@example.com" => "jemand@beispiel.com", "someone@example.com" => "jemand@beispiel.com",
@ -218,6 +222,7 @@
"Your city" => "Ihre Stadt", "Your city" => "Ihre Stadt",
"City" => "Stadt", "City" => "Stadt",
"Some region" => "Eine Region", "Some region" => "Eine Region",
"State or province" => "Staat oder Provinz",
"Your country" => "Ihr Land", "Your country" => "Ihr Land",
"Country" => "Land", "Country" => "Land",
"Instant Messenger" => "Instant Messenger", "Instant Messenger" => "Instant Messenger",
@ -238,7 +243,6 @@
"Add notes here." => "Fügen Sie hier Notizen ein.", "Add notes here." => "Fügen Sie hier Notizen ein.",
"Add field" => "Feld hinzufügen", "Add field" => "Feld hinzufügen",
"Download contact" => "Kontakt herunterladen", "Download contact" => "Kontakt herunterladen",
"Delete contact" => "Kontakt löschen",
"The temporary image has been removed from cache." => "Das temporäre Bild wurde aus dem Cache gelöscht.", "The temporary image has been removed from cache." => "Das temporäre Bild wurde aus dem Cache gelöscht.",
"Edit address" => "Adresse ändern", "Edit address" => "Adresse ändern",
"Type" => "Typ", "Type" => "Typ",

View File

@ -165,6 +165,7 @@
"Address" => "Διεύθυνση", "Address" => "Διεύθυνση",
"Note" => "Σημείωση", "Note" => "Σημείωση",
"Web site" => "Ιστότοπος", "Web site" => "Ιστότοπος",
"Delete contact" => "Διαγραφή επαφής",
"Preferred" => "Προτιμώμενο", "Preferred" => "Προτιμώμενο",
"Please specify a valid email address." => "Παρακαλώ εισήγαγε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου", "Please specify a valid email address." => "Παρακαλώ εισήγαγε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
"someone@example.com" => "someone@example.com", "someone@example.com" => "someone@example.com",
@ -200,7 +201,6 @@
"Add notes here." => "Πρόσθεσε τις σημειώσεις εδώ", "Add notes here." => "Πρόσθεσε τις σημειώσεις εδώ",
"Add field" => "Προσθήκη πεδίου", "Add field" => "Προσθήκη πεδίου",
"Download contact" => "Λήψη επαφής", "Download contact" => "Λήψη επαφής",
"Delete contact" => "Διαγραφή επαφής",
"The temporary image has been removed from cache." => "Η προσωρινή εικόνα αφαιρέθηκε από την κρυφή μνήμη.", "The temporary image has been removed from cache." => "Η προσωρινή εικόνα αφαιρέθηκε από την κρυφή μνήμη.",
"Edit address" => "Επεξεργασία διεύθυνσης", "Edit address" => "Επεξεργασία διεύθυνσης",
"Type" => "Τύπος", "Type" => "Τύπος",

View File

@ -150,7 +150,6 @@
"OK" => "Akcepti", "OK" => "Akcepti",
"(De-)select all" => "(Mal)elekti ĉion", "(De-)select all" => "(Mal)elekti ĉion",
"New Contact" => "Nova kontakto", "New Contact" => "Nova kontakto",
"Download Contact" => "Elŝuti kontakton",
"Groups" => "Grupoj", "Groups" => "Grupoj",
"Favorite" => "Favorato", "Favorite" => "Favorato",
"Delete Contact" => "Forigi kontakton", "Delete Contact" => "Forigi kontakton",
@ -191,6 +190,7 @@
"Address" => "Adreso", "Address" => "Adreso",
"Note" => "Noto", "Note" => "Noto",
"Web site" => "TTT-ejo", "Web site" => "TTT-ejo",
"Delete contact" => "Forigi kontakton",
"Preferred" => "Preferata", "Preferred" => "Preferata",
"Please specify a valid email address." => "Bonvolu specifi validan retpoŝtadreson.", "Please specify a valid email address." => "Bonvolu specifi validan retpoŝtadreson.",
"someone@example.com" => "iu@example.com", "someone@example.com" => "iu@example.com",
@ -228,7 +228,6 @@
"Add notes here." => "Aldoni notojn ĉi tie.", "Add notes here." => "Aldoni notojn ĉi tie.",
"Add field" => "Aldoni kampon", "Add field" => "Aldoni kampon",
"Download contact" => "Elŝuti kontakton", "Download contact" => "Elŝuti kontakton",
"Delete contact" => "Forigi kontakton",
"The temporary image has been removed from cache." => "La provizora bildo estas forigita de la kaŝmemoro.", "The temporary image has been removed from cache." => "La provizora bildo estas forigita de la kaŝmemoro.",
"Edit address" => "Redakti adreson", "Edit address" => "Redakti adreson",
"Type" => "Tipo", "Type" => "Tipo",

View File

@ -67,9 +67,15 @@
"Network or server error. Please inform administrator." => "Error en la red o en el servidor. Por favor informe al administrador.", "Network or server error. Please inform administrator." => "Error en la red o en el servidor. Por favor informe al administrador.",
"Error adding to group." => "Error al añadir al grupo.", "Error adding to group." => "Error al añadir al grupo.",
"Error removing from group." => "Error al remover del grupo.", "Error removing from group." => "Error al remover del grupo.",
"There was an error opening a mail composer." => "Hubo un error al abrir el escritor de correo electrónico.",
"Deleting done. Click here to cancel reloading." => "Borrado completo. Haga click para cancelar la recarga",
"Add address book" => "Añadir libreta de direcciones",
"Import done. Click here to cancel reloading." => "Importación completa. Haga click para cancerla la recarga. ",
"Not all files uploaded. Retrying..." => "No se han podido subir todos los archivos. Reintentando...", "Not all files uploaded. Retrying..." => "No se han podido subir todos los archivos. Reintentando...",
"Something went wrong with the upload, please retry." => "Algo ha ido mal con la subida, por favor, reintentelo.", "Something went wrong with the upload, please retry." => "Algo ha ido mal con la subida, por favor, reintentelo.",
"Error" => "Fallo", "Error" => "Fallo",
"Importing from {filename}..." => "Importando desde {filename}...",
"{success} imported, {failed} failed." => "{success} importados, {failed} fallidos.",
"Importing..." => "Importando...", "Importing..." => "Importando...",
"Unable to upload your file as it is a directory or has 0 bytes" => "Imposible subir su archivo, es un directorio o tiene 0 bytes", "Unable to upload your file as it is a directory or has 0 bytes" => "Imposible subir su archivo, es un directorio o tiene 0 bytes",
"Upload Error" => "Error de subida", "Upload Error" => "Error de subida",
@ -82,7 +88,7 @@
"Error loading profile picture." => "Error cargando la imagen del perfil.", "Error loading profile picture." => "Error cargando la imagen del perfil.",
"Enter name" => "Introducir nombre", "Enter name" => "Introducir nombre",
"Enter description" => "Introducir descripción", "Enter description" => "Introducir descripción",
"Select addressbook" => "Seleccionar contactos", "Select addressbook" => "Seleccionar libreta de direcciones",
"The address book name cannot be empty." => "El nombre de la libreta de direcciones no puede estar vacio.", "The address book name cannot be empty." => "El nombre de la libreta de direcciones no puede estar vacio.",
"Is this correct?" => "¿Es esto correcto?", "Is this correct?" => "¿Es esto correcto?",
"There was an unknown error when trying to delete this contact" => "Hubo un error desconocido al tratar de eliminar este contacto", "There was an unknown error when trying to delete this contact" => "Hubo un error desconocido al tratar de eliminar este contacto",
@ -145,12 +151,14 @@
"HomePage" => "Página de inicio", "HomePage" => "Página de inicio",
"New Group" => "Nuevo grupo", "New Group" => "Nuevo grupo",
"Settings" => "Configuración", "Settings" => "Configuración",
"Address books" => "Libretas de direcciones",
"Import" => "Importar", "Import" => "Importar",
"Select files to import" => "Selecionar archivos para importar",
"Select files" => "Selecionar archivos",
"Import into:" => "Importar hacia:", "Import into:" => "Importar hacia:",
"OK" => "Aceptar", "OK" => "Aceptar",
"(De-)select all" => "Seleccionar todos", "(De-)select all" => "Seleccionar todos",
"New Contact" => "Nuevo contacto", "New Contact" => "Nuevo contacto",
"Download Contact" => "Descargar contacto",
"Groups" => "Grupos", "Groups" => "Grupos",
"Favorite" => "Favorito", "Favorite" => "Favorito",
"Delete Contact" => "Eliminar contacto", "Delete Contact" => "Eliminar contacto",
@ -159,7 +167,7 @@
"Navigation" => "Navegación", "Navigation" => "Navegación",
"Next contact in list" => "Siguiente contacto en la lista", "Next contact in list" => "Siguiente contacto en la lista",
"Previous contact in list" => "Anterior contacto en la lista", "Previous contact in list" => "Anterior contacto en la lista",
"Expand/collapse current addressbook" => "Abrir/Cerrar la agenda", "Expand/collapse current addressbook" => "Abrir/Cerrar la libreta de direcciones",
"Next addressbook" => "Siguiente libreta de direcciones", "Next addressbook" => "Siguiente libreta de direcciones",
"Previous addressbook" => "Anterior libreta de direcciones", "Previous addressbook" => "Anterior libreta de direcciones",
"Actions" => "Acciones", "Actions" => "Acciones",
@ -181,9 +189,12 @@
"Nickname" => "Alias", "Nickname" => "Alias",
"Enter nickname" => "Introduce un alias", "Enter nickname" => "Introduce un alias",
"Title" => "Título", "Title" => "Título",
"Enter title" => "Ingrese titulo",
"Organization" => "Organización", "Organization" => "Organización",
"Enter organization" => "Ingrese organización",
"Birthday" => "Cumpleaños", "Birthday" => "Cumpleaños",
"Notes go here..." => "Las notas van acá...", "Notes go here..." => "Las notas van acá...",
"Export as VCF" => "Exportar como VCF",
"Add" => "Añadir", "Add" => "Añadir",
"Phone" => "Teléfono", "Phone" => "Teléfono",
"Email" => "Correo electrónico", "Email" => "Correo electrónico",
@ -191,6 +202,7 @@
"Address" => "Dirección", "Address" => "Dirección",
"Note" => "Nota", "Note" => "Nota",
"Web site" => "Sitio Web", "Web site" => "Sitio Web",
"Delete contact" => "Eliminar contacto",
"Preferred" => "Preferido", "Preferred" => "Preferido",
"Please specify a valid email address." => "Por favor especifica una dirección de correo electrónico válida.", "Please specify a valid email address." => "Por favor especifica una dirección de correo electrónico válida.",
"someone@example.com" => "alguien@ejemplo.com", "someone@example.com" => "alguien@ejemplo.com",
@ -209,12 +221,14 @@
"Your city" => "Su ciudad", "Your city" => "Su ciudad",
"City" => "Ciudad", "City" => "Ciudad",
"Some region" => "Alguna región", "Some region" => "Alguna región",
"State or province" => "Estado o provincia",
"Your country" => "Su país", "Your country" => "Su país",
"Country" => "País", "Country" => "País",
"Instant Messenger" => "Mensajero instantáneo", "Instant Messenger" => "Mensajero instantáneo",
"Delete IM" => "Eliminar IM", "Delete IM" => "Eliminar IM",
"Share" => "Compartir", "Share" => "Compartir",
"Export" => "Exportar", "Export" => "Exportar",
"CardDAV link" => "Enlace a CardDAV",
"Add Contact" => "Añadir contacto", "Add Contact" => "Añadir contacto",
"Drop photo to upload" => "Suelta una foto para subirla", "Drop photo to upload" => "Suelta una foto para subirla",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formato personalizado, nombre abreviado, nombre completo, al revés o al revés con coma", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formato personalizado, nombre abreviado, nombre completo, al revés o al revés con coma",
@ -228,7 +242,6 @@
"Add notes here." => "Añade notas aquí.", "Add notes here." => "Añade notas aquí.",
"Add field" => "Añadir campo", "Add field" => "Añadir campo",
"Download contact" => "Descargar contacto", "Download contact" => "Descargar contacto",
"Delete contact" => "Eliminar contacto",
"The temporary image has been removed from cache." => "La foto temporal se ha borrado del cache.", "The temporary image has been removed from cache." => "La foto temporal se ha borrado del cache.",
"Edit address" => "Editar dirección", "Edit address" => "Editar dirección",
"Type" => "Tipo", "Type" => "Tipo",

View File

@ -68,9 +68,9 @@
"Error adding to group." => "Error al añadir al grupo.", "Error adding to group." => "Error al añadir al grupo.",
"Error removing from group." => "Error al quitar del grupo.", "Error removing from group." => "Error al quitar del grupo.",
"There was an error opening a mail composer." => "Hubo un error al abrir el escritor de correo electrónico", "There was an error opening a mail composer." => "Hubo un error al abrir el escritor de correo electrónico",
"Deleting done. Click here to cancel reloading." => "Borrado completo. Click para cancerla la recarga. ", "Deleting done. Click here to cancel reloading." => "Borrado completo. Haga click para cancerla la recarga. ",
"Add address book" => "Añadir agenda", "Add address book" => "Añadir agenda",
"Import done. Click here to cancel reloading." => "Importación completo. Click para cancerla la recarga. ", "Import done. Click here to cancel reloading." => "Importación completa. Haga click para cancerla la recarga. ",
"Not all files uploaded. Retrying..." => "No fue posible subir todos los archivos. Reintentando...", "Not all files uploaded. Retrying..." => "No fue posible subir todos los archivos. Reintentando...",
"Something went wrong with the upload, please retry." => "Algo salió mal durante la subida. Por favor, intentalo nuevamente.", "Something went wrong with the upload, please retry." => "Algo salió mal durante la subida. Por favor, intentalo nuevamente.",
"Error" => "Error", "Error" => "Error",
@ -159,7 +159,6 @@
"OK" => "Aceptar", "OK" => "Aceptar",
"(De-)select all" => "(De)selecionar todos", "(De-)select all" => "(De)selecionar todos",
"New Contact" => "Nuevo contato", "New Contact" => "Nuevo contato",
"Download Contact" => "Descargar contacto",
"Groups" => "Grupos", "Groups" => "Grupos",
"Favorite" => "Favorito", "Favorite" => "Favorito",
"Delete Contact" => "Borrar contacto", "Delete Contact" => "Borrar contacto",
@ -190,9 +189,12 @@
"Nickname" => "Sobrenombre", "Nickname" => "Sobrenombre",
"Enter nickname" => "Escribí un sobrenombre", "Enter nickname" => "Escribí un sobrenombre",
"Title" => "Título", "Title" => "Título",
"Enter title" => "Ingrese titulo",
"Organization" => "Organización", "Organization" => "Organización",
"Enter organization" => "Ingrese organización",
"Birthday" => "Cumpleaños", "Birthday" => "Cumpleaños",
"Notes go here..." => "Las notas van aquí", "Notes go here..." => "Las notas van aquí",
"Export as VCF" => "Exportar como VCF",
"Add" => "Agregar", "Add" => "Agregar",
"Phone" => "Teléfono", "Phone" => "Teléfono",
"Email" => "Correo Electrónico", "Email" => "Correo Electrónico",
@ -200,6 +202,7 @@
"Address" => "Dirección", "Address" => "Dirección",
"Note" => "Nota", "Note" => "Nota",
"Web site" => "Página web", "Web site" => "Página web",
"Delete contact" => "Borrar contacto",
"Preferred" => "Preferido", "Preferred" => "Preferido",
"Please specify a valid email address." => "Por favor, escribí una dirección de correo electrónico válida.", "Please specify a valid email address." => "Por favor, escribí una dirección de correo electrónico válida.",
"someone@example.com" => "alguien@ejemplo.com", "someone@example.com" => "alguien@ejemplo.com",
@ -218,6 +221,7 @@
"Your city" => "Tu ciudad", "Your city" => "Tu ciudad",
"City" => "Ciudad", "City" => "Ciudad",
"Some region" => "Alguna región", "Some region" => "Alguna región",
"State or province" => "Estado o provincia",
"Your country" => "Tu país", "Your country" => "Tu país",
"Country" => "País", "Country" => "País",
"Instant Messenger" => "Mensajero instantáneo", "Instant Messenger" => "Mensajero instantáneo",
@ -238,7 +242,6 @@
"Add notes here." => "Agregá notas acá.", "Add notes here." => "Agregá notas acá.",
"Add field" => "Agregar campo", "Add field" => "Agregar campo",
"Download contact" => "Descargar contacto", "Download contact" => "Descargar contacto",
"Delete contact" => "Borrar contacto",
"The temporary image has been removed from cache." => "La imagen temporal fue borrada de la caché", "The temporary image has been removed from cache." => "La imagen temporal fue borrada de la caché",
"Edit address" => "Editar dirección", "Edit address" => "Editar dirección",
"Type" => "Tipo", "Type" => "Tipo",

View File

@ -149,7 +149,6 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "(Ära) vali kõik", "(De-)select all" => "(Ära) vali kõik",
"New Contact" => "Uus kontakt", "New Contact" => "Uus kontakt",
"Download Contact" => "Lae kontakt alla",
"Groups" => "Grupid", "Groups" => "Grupid",
"Favorite" => "Lemmik", "Favorite" => "Lemmik",
"Delete Contact" => "Kustuta kontakt", "Delete Contact" => "Kustuta kontakt",
@ -190,6 +189,7 @@
"Address" => "Aadress", "Address" => "Aadress",
"Note" => "Märkus", "Note" => "Märkus",
"Web site" => "Veebisait", "Web site" => "Veebisait",
"Delete contact" => "Kustuta kontakt",
"Preferred" => "Eelistatud", "Preferred" => "Eelistatud",
"Please specify a valid email address." => "Palun sisesta korrektne e-posti aadress.", "Please specify a valid email address." => "Palun sisesta korrektne e-posti aadress.",
"someone@example.com" => "someone@example.com", "someone@example.com" => "someone@example.com",
@ -227,7 +227,6 @@
"Add notes here." => "Lisa märkmed siia.", "Add notes here." => "Lisa märkmed siia.",
"Add field" => "Lisa väli", "Add field" => "Lisa väli",
"Download contact" => "Lae kontakt alla", "Download contact" => "Lae kontakt alla",
"Delete contact" => "Kustuta kontakt",
"The temporary image has been removed from cache." => "Ajutine pilt on puhvrist eemaldatud.", "The temporary image has been removed from cache." => "Ajutine pilt on puhvrist eemaldatud.",
"Edit address" => "Muuda aadressi", "Edit address" => "Muuda aadressi",
"Type" => "Tüüp", "Type" => "Tüüp",

View File

@ -66,9 +66,12 @@
"Error adding to group." => "Errore bat izan da taldera gehitzean.", "Error adding to group." => "Errore bat izan da taldera gehitzean.",
"Error removing from group." => "Errore bat izan da taldetik kentzean.", "Error removing from group." => "Errore bat izan da taldetik kentzean.",
"There was an error opening a mail composer." => "Errore bat izan da posta editorea abiaraztean.", "There was an error opening a mail composer." => "Errore bat izan da posta editorea abiaraztean.",
"Add address book" => "Gehitu helbide-liburua",
"Import done. Click here to cancel reloading." => "Inportatzea eginda. Hemen klikatu birkargatzea uzteko.",
"Not all files uploaded. Retrying..." => "Fitxategi guztiak ez dira igo. Berriz saiatzen...", "Not all files uploaded. Retrying..." => "Fitxategi guztiak ez dira igo. Berriz saiatzen...",
"Something went wrong with the upload, please retry." => "Zerbait gaizki joan da igotzean, mesedez saiatu berriz.", "Something went wrong with the upload, please retry." => "Zerbait gaizki joan da igotzean, mesedez saiatu berriz.",
"Error" => "Errorea", "Error" => "Errorea",
"Importing from {filename}..." => "Inportatzen {fitxategi-izena}...",
"Importing..." => "Inportatzen", "Importing..." => "Inportatzen",
"Unable to upload your file as it is a directory or has 0 bytes" => "Ezin izan da zure fitxategia igo karpeta bat delako edo 0 byte dituelako", "Unable to upload your file as it is a directory or has 0 bytes" => "Ezin izan da zure fitxategia igo karpeta bat delako edo 0 byte dituelako",
"Upload Error" => "Igotzeak huts egin du", "Upload Error" => "Igotzeak huts egin du",
@ -143,12 +146,14 @@
"HomePage" => "WebOrria", "HomePage" => "WebOrria",
"New Group" => "Talde berria", "New Group" => "Talde berria",
"Settings" => "Ezarpenak", "Settings" => "Ezarpenak",
"Address books" => "Helbide liburuak",
"Import" => "Inportatu", "Import" => "Inportatu",
"Select files to import" => "Hautatu inportatzeko fitxategiak",
"Select files" => "Hautatu fitxategiak",
"Import into:" => "Inportatu hemen:", "Import into:" => "Inportatu hemen:",
"OK" => "Ados", "OK" => "Ados",
"(De-)select all" => "(Ez-)Hautatu dena", "(De-)select all" => "(Ez-)Hautatu dena",
"New Contact" => "Kontaktu berria", "New Contact" => "Kontaktu berria",
"Download Contact" => "Deskargatu kontaktua",
"Groups" => "Taldeak", "Groups" => "Taldeak",
"Favorite" => "Gogokoa", "Favorite" => "Gogokoa",
"Delete Contact" => "Ezabatu kontaktua", "Delete Contact" => "Ezabatu kontaktua",
@ -179,9 +184,12 @@
"Nickname" => "Ezizena", "Nickname" => "Ezizena",
"Enter nickname" => "Sartu ezizena", "Enter nickname" => "Sartu ezizena",
"Title" => "Izenburua", "Title" => "Izenburua",
"Enter title" => "Idatzi titulua",
"Organization" => "Erakundea", "Organization" => "Erakundea",
"Enter organization" => "Idatzi erakundea",
"Birthday" => "Jaioteguna", "Birthday" => "Jaioteguna",
"Notes go here..." => "Idatzi oharrak hemen...", "Notes go here..." => "Idatzi oharrak hemen...",
"Export as VCF" => "VCF gisa esportatu",
"Add" => "Gehitu", "Add" => "Gehitu",
"Phone" => "Telefonoa", "Phone" => "Telefonoa",
"Email" => "Eposta", "Email" => "Eposta",
@ -189,8 +197,10 @@
"Address" => "Helbidea", "Address" => "Helbidea",
"Note" => "Oharra", "Note" => "Oharra",
"Web site" => "Web orria", "Web site" => "Web orria",
"Delete contact" => "Ezabatu kontaktua",
"Preferred" => "Hobetsia", "Preferred" => "Hobetsia",
"Please specify a valid email address." => "Mesedez sartu eposta helbide egoki bat", "Please specify a valid email address." => "Mesedez sartu eposta helbide egoki bat",
"someone@example.com" => "norbait@adibide.com",
"Mail to address" => "Bidali helbidera", "Mail to address" => "Bidali helbidera",
"Delete email address" => "Ezabatu eposta helbidea", "Delete email address" => "Ezabatu eposta helbidea",
"Enter phone number" => "Sartu telefono zenbakia", "Enter phone number" => "Sartu telefono zenbakia",
@ -199,17 +209,21 @@
"Delete URL" => "Ezabatu URLa", "Delete URL" => "Ezabatu URLa",
"View on map" => "Ikusi mapan", "View on map" => "Ikusi mapan",
"Delete address" => "Ezabatu helbidea", "Delete address" => "Ezabatu helbidea",
"1 Main Street" => "Kale nagusia 1",
"Street address" => "Kalearen helbidea", "Street address" => "Kalearen helbidea",
"12345" => "12345", "12345" => "12345",
"Postal code" => "Posta kodea", "Postal code" => "Posta kodea",
"Your city" => "Zure hiria", "Your city" => "Zure hiria",
"City" => "Hiria", "City" => "Hiria",
"Some region" => "Eskualde bat",
"State or province" => "Estatu edo probintzia",
"Your country" => "Zure herrialdea", "Your country" => "Zure herrialdea",
"Country" => "Herrialdea", "Country" => "Herrialdea",
"Instant Messenger" => "Instant Messenger", "Instant Messenger" => "Instant Messenger",
"Delete IM" => "Ezabatu BM", "Delete IM" => "Ezabatu BM",
"Share" => "Partekatu", "Share" => "Partekatu",
"Export" => "Exportatu", "Export" => "Exportatu",
"CardDAV link" => "CardDAV lotura",
"Add Contact" => "Gehitu kontaktua", "Add Contact" => "Gehitu kontaktua",
"Drop photo to upload" => "Askatu argazkia igotzeko", "Drop photo to upload" => "Askatu argazkia igotzeko",
"Edit name details" => "Editatu izenaren zehaztasunak", "Edit name details" => "Editatu izenaren zehaztasunak",
@ -222,7 +236,6 @@
"Add notes here." => "Gehitu oharrak hemen.", "Add notes here." => "Gehitu oharrak hemen.",
"Add field" => "Gehitu eremua", "Add field" => "Gehitu eremua",
"Download contact" => "Deskargatu kontaktua", "Download contact" => "Deskargatu kontaktua",
"Delete contact" => "Ezabatu kontaktua",
"The temporary image has been removed from cache." => "Aldi bateko irudia cachetik ezabatu da.", "The temporary image has been removed from cache." => "Aldi bateko irudia cachetik ezabatu da.",
"Edit address" => "Editatu helbidea", "Edit address" => "Editatu helbidea",
"Type" => "Mota", "Type" => "Mota",

View File

@ -88,6 +88,7 @@
"Email" => "نشانی پست الکترنیک", "Email" => "نشانی پست الکترنیک",
"Address" => "نشانی", "Address" => "نشانی",
"Note" => "یادداشت", "Note" => "یادداشت",
"Delete contact" => "پاک کردن اطلاعات شخص مورد نظر",
"Preferred" => "مقدم", "Preferred" => "مقدم",
"Please specify a valid email address." => "لطفا یک پست الکترونیکی معتبر وارد کنید", "Please specify a valid email address." => "لطفا یک پست الکترونیکی معتبر وارد کنید",
"Mail to address" => "به نشانی ارسال شد", "Mail to address" => "به نشانی ارسال شد",
@ -111,7 +112,6 @@
"Add notes here." => "اینجا یادداشت ها را بیافزایید", "Add notes here." => "اینجا یادداشت ها را بیافزایید",
"Add field" => "اضافه کردن فیلد", "Add field" => "اضافه کردن فیلد",
"Download contact" => "دانلود مشخصات اشخاص", "Download contact" => "دانلود مشخصات اشخاص",
"Delete contact" => "پاک کردن اطلاعات شخص مورد نظر",
"The temporary image has been removed from cache." => "تصویر موقت از کش پاک شد.", "The temporary image has been removed from cache." => "تصویر موقت از کش پاک شد.",
"Edit address" => "ویرایش نشانی", "Edit address" => "ویرایش نشانی",
"Type" => "نوع", "Type" => "نوع",

View File

@ -52,9 +52,12 @@
"Network or server error. Please inform administrator." => "Verkko- tai palvelinvirhe. Ilmoita asiasta ylläpitäjälle.", "Network or server error. Please inform administrator." => "Verkko- tai palvelinvirhe. Ilmoita asiasta ylläpitäjälle.",
"Error adding to group." => "Virhe ryhmään lisättäessä.", "Error adding to group." => "Virhe ryhmään lisättäessä.",
"Error removing from group." => "Virhe poistettaessa ryhmästä.", "Error removing from group." => "Virhe poistettaessa ryhmästä.",
"Add address book" => "Lisää osoitekirja.",
"Import done. Click here to cancel reloading." => "Tuonti valmistui. Napsauta tästä peruaksesi uudelleen latauksen.",
"Not all files uploaded. Retrying..." => "Kaikkia tiedostoja ei lähetetty. Yritetään uudelleen...", "Not all files uploaded. Retrying..." => "Kaikkia tiedostoja ei lähetetty. Yritetään uudelleen...",
"Something went wrong with the upload, please retry." => "Jokin meni vikaan lähettäessä. Yritä uudelleen.", "Something went wrong with the upload, please retry." => "Jokin meni vikaan lähettäessä. Yritä uudelleen.",
"Error" => "Virhe", "Error" => "Virhe",
"{success} imported, {failed} failed." => "{success} tuotu, {failed} epäonnistui.",
"Importing..." => "Tuodaan...", "Importing..." => "Tuodaan...",
"Unable to upload your file as it is a directory or has 0 bytes" => "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio.", "Unable to upload your file as it is a directory or has 0 bytes" => "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio.",
"Upload Error" => "Lähetysvirhe", "Upload Error" => "Lähetysvirhe",
@ -126,11 +129,13 @@
"Contact not found." => "Yhteystietoja ei löytynyt.", "Contact not found." => "Yhteystietoja ei löytynyt.",
"New Group" => "Uusi ryhmä", "New Group" => "Uusi ryhmä",
"Settings" => "Asetukset", "Settings" => "Asetukset",
"Address books" => "Osoitekirjat",
"Import" => "Tuo", "Import" => "Tuo",
"Select files to import" => "Valitse tuotavat tiedostot",
"Select files" => "Valitse tiedostot",
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "Valitse kaikki tai poista kaikki valinnat", "(De-)select all" => "Valitse kaikki tai poista kaikki valinnat",
"New Contact" => "Uusi yhteystieto", "New Contact" => "Uusi yhteystieto",
"Download Contact" => "Lataa yhteystieto",
"Groups" => "Ryhmät", "Groups" => "Ryhmät",
"Favorite" => "Suosikki", "Favorite" => "Suosikki",
"Delete Contact" => "Poista yhteystieto", "Delete Contact" => "Poista yhteystieto",
@ -163,6 +168,7 @@
"Organization" => "Organisaatio", "Organization" => "Organisaatio",
"Birthday" => "Syntymäpäivä", "Birthday" => "Syntymäpäivä",
"Notes go here..." => "Muistiinpanot kuuluvat tähän...", "Notes go here..." => "Muistiinpanot kuuluvat tähän...",
"Export as VCF" => "Vie VCF-muodossa",
"Add" => "Lisää", "Add" => "Lisää",
"Phone" => "Puhelin", "Phone" => "Puhelin",
"Email" => "Sähköposti", "Email" => "Sähköposti",
@ -170,6 +176,7 @@
"Address" => "Osoite", "Address" => "Osoite",
"Note" => "Huomio", "Note" => "Huomio",
"Web site" => "Verkkosivu", "Web site" => "Verkkosivu",
"Delete contact" => "Poista yhteystieto",
"Preferred" => "Ensisijainen", "Preferred" => "Ensisijainen",
"Please specify a valid email address." => "Anna kelvollinen sähköpostiosoite.", "Please specify a valid email address." => "Anna kelvollinen sähköpostiosoite.",
"Mail to address" => "Lähetä sähköpostia", "Mail to address" => "Lähetä sähköpostia",
@ -188,6 +195,7 @@
"Delete IM" => "Poista IM", "Delete IM" => "Poista IM",
"Share" => "Jaa", "Share" => "Jaa",
"Export" => "Vie", "Export" => "Vie",
"CardDAV link" => "CardDAV-linkki",
"Add Contact" => "Lisää yhteystieto", "Add Contact" => "Lisää yhteystieto",
"Drop photo to upload" => "Ladataksesi pudota kuva", "Drop photo to upload" => "Ladataksesi pudota kuva",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Itsemääritelty muoto, lyhyt nimi, pitkä nimi, vastakkainen tai vastakkainen pilkun kanssa", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Itsemääritelty muoto, lyhyt nimi, pitkä nimi, vastakkainen tai vastakkainen pilkun kanssa",
@ -201,7 +209,6 @@
"Add notes here." => "Lisää huomiot tähän.", "Add notes here." => "Lisää huomiot tähän.",
"Add field" => "Lisää kenttä", "Add field" => "Lisää kenttä",
"Download contact" => "Lataa yhteystieto", "Download contact" => "Lataa yhteystieto",
"Delete contact" => "Poista yhteystieto",
"The temporary image has been removed from cache." => "Väliaikainen kuva on poistettu välimuistista.", "The temporary image has been removed from cache." => "Väliaikainen kuva on poistettu välimuistista.",
"Edit address" => "Muokkaa osoitetta", "Edit address" => "Muokkaa osoitetta",
"Type" => "Tyyppi", "Type" => "Tyyppi",

View File

@ -150,7 +150,6 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "(Dé-)sélectionner tout", "(De-)select all" => "(Dé-)sélectionner tout",
"New Contact" => "Nouveau Contact", "New Contact" => "Nouveau Contact",
"Download Contact" => "Télécharger le Contact",
"Groups" => "Groupes", "Groups" => "Groupes",
"Favorite" => "Favoris", "Favorite" => "Favoris",
"Delete Contact" => "Supprimer le Contact", "Delete Contact" => "Supprimer le Contact",
@ -191,6 +190,7 @@
"Address" => "Adresse", "Address" => "Adresse",
"Note" => "Note", "Note" => "Note",
"Web site" => "Page web", "Web site" => "Page web",
"Delete contact" => "Supprimer le contact",
"Preferred" => "Préféré", "Preferred" => "Préféré",
"Please specify a valid email address." => "Veuillez entrer une adresse e-mail valide.", "Please specify a valid email address." => "Veuillez entrer une adresse e-mail valide.",
"someone@example.com" => "personne@exemple.com", "someone@example.com" => "personne@exemple.com",
@ -228,7 +228,6 @@
"Add notes here." => "Ajouter des notes ici.", "Add notes here." => "Ajouter des notes ici.",
"Add field" => "Ajouter un champ.", "Add field" => "Ajouter un champ.",
"Download contact" => "Télécharger le contact", "Download contact" => "Télécharger le contact",
"Delete contact" => "Supprimer le contact",
"The temporary image has been removed from cache." => "L'image temporaire a été supprimée du cache.", "The temporary image has been removed from cache." => "L'image temporaire a été supprimée du cache.",
"Edit address" => "Editer l'adresse", "Edit address" => "Editer l'adresse",
"Type" => "Type", "Type" => "Type",

View File

@ -142,6 +142,7 @@
"Address" => "Enderezo", "Address" => "Enderezo",
"Note" => "Nota", "Note" => "Nota",
"Web site" => "Sitio web", "Web site" => "Sitio web",
"Delete contact" => "Borrar contacto",
"Preferred" => "Preferido", "Preferred" => "Preferido",
"Please specify a valid email address." => "Indica unha dirección de correo electrónico válida.", "Please specify a valid email address." => "Indica unha dirección de correo electrónico válida.",
"Mail to address" => "Enviar correo ao enderezo", "Mail to address" => "Enviar correo ao enderezo",
@ -171,7 +172,6 @@
"Add notes here." => "Engadir aquí as notas.", "Add notes here." => "Engadir aquí as notas.",
"Add field" => "Engadir campo", "Add field" => "Engadir campo",
"Download contact" => "Descargar contacto", "Download contact" => "Descargar contacto",
"Delete contact" => "Borrar contacto",
"The temporary image has been removed from cache." => "A imaxe temporal foi eliminada da caché.", "The temporary image has been removed from cache." => "A imaxe temporal foi eliminada da caché.",
"Edit address" => "Editar o enderezo", "Edit address" => "Editar o enderezo",
"Type" => "Escribir", "Type" => "Escribir",

View File

@ -75,6 +75,7 @@
"Email" => "דואר אלקטרוני", "Email" => "דואר אלקטרוני",
"Address" => "כתובת", "Address" => "כתובת",
"Note" => "הערה", "Note" => "הערה",
"Delete contact" => "מחיקת איש קשר",
"Preferred" => "מועדף", "Preferred" => "מועדף",
"Please specify a valid email address." => "אנא הזן כתובת דוא\"ל חוקית", "Please specify a valid email address." => "אנא הזן כתובת דוא\"ל חוקית",
"Mail to address" => "כתובת", "Mail to address" => "כתובת",
@ -97,7 +98,6 @@
"Add notes here." => "הוסף הערות כאן.", "Add notes here." => "הוסף הערות כאן.",
"Add field" => "הוסף שדה", "Add field" => "הוסף שדה",
"Download contact" => "הורדת איש קשר", "Download contact" => "הורדת איש קשר",
"Delete contact" => "מחיקת איש קשר",
"Edit address" => "ערוך כתובת", "Edit address" => "ערוך כתובת",
"Type" => "סוג", "Type" => "סוג",
"PO Box" => "תא דואר", "PO Box" => "תא דואר",

View File

@ -80,6 +80,7 @@
"Email" => "E-mail", "Email" => "E-mail",
"Address" => "Adresa", "Address" => "Adresa",
"Note" => "Bilješka", "Note" => "Bilješka",
"Delete contact" => "Izbriši kontakt",
"Preferred" => "Preferirano", "Preferred" => "Preferirano",
"Please specify a valid email address." => "Upiši važeću email adresu.", "Please specify a valid email address." => "Upiši važeću email adresu.",
"Delete email address" => "Izbriši email adresu", "Delete email address" => "Izbriši email adresu",
@ -102,7 +103,6 @@
"Add notes here." => "Dodaj bilješke ovdje.", "Add notes here." => "Dodaj bilješke ovdje.",
"Add field" => "Dodaj polje", "Add field" => "Dodaj polje",
"Download contact" => "Preuzmi kontakt", "Download contact" => "Preuzmi kontakt",
"Delete contact" => "Izbriši kontakt",
"Edit address" => "Uredi adresu", "Edit address" => "Uredi adresu",
"Type" => "Tip", "Type" => "Tip",
"PO Box" => "Poštanski Pretinac", "PO Box" => "Poštanski Pretinac",

View File

@ -88,6 +88,7 @@
"Email" => "E-mail", "Email" => "E-mail",
"Address" => "Cím", "Address" => "Cím",
"Note" => "Jegyzet", "Note" => "Jegyzet",
"Delete contact" => "Kapcsolat törlése",
"Preferred" => "Előnyben részesített", "Preferred" => "Előnyben részesített",
"Please specify a valid email address." => "Adjon meg érvényes email címet", "Please specify a valid email address." => "Adjon meg érvényes email címet",
"Mail to address" => "Postai cím", "Mail to address" => "Postai cím",
@ -111,7 +112,6 @@
"Add notes here." => "Megjegyzések", "Add notes here." => "Megjegyzések",
"Add field" => "Mező hozzáadása", "Add field" => "Mező hozzáadása",
"Download contact" => "Kapcsolat letöltése", "Download contact" => "Kapcsolat letöltése",
"Delete contact" => "Kapcsolat törlése",
"The temporary image has been removed from cache." => "Az ideiglenes kép el lett távolítva a gyorsítótárból", "The temporary image has been removed from cache." => "Az ideiglenes kép el lett távolítva a gyorsítótárból",
"Edit address" => "Cím szerkesztése", "Edit address" => "Cím szerkesztése",
"Type" => "Típus", "Type" => "Típus",

View File

@ -44,6 +44,7 @@
"Email" => "E-posta", "Email" => "E-posta",
"Address" => "Adresse", "Address" => "Adresse",
"Note" => "Nota", "Note" => "Nota",
"Delete contact" => "Deler contacto",
"Preferred" => "Preferite", "Preferred" => "Preferite",
"Delete email address" => "Deler adresse de E-posta", "Delete email address" => "Deler adresse de E-posta",
"Enter phone number" => "Entrar un numero de telephono", "Enter phone number" => "Entrar un numero de telephono",
@ -59,7 +60,6 @@
"Add notes here." => "Adder notas hic", "Add notes here." => "Adder notas hic",
"Add field" => "Adder campo", "Add field" => "Adder campo",
"Download contact" => "Discargar contacto", "Download contact" => "Discargar contacto",
"Delete contact" => "Deler contacto",
"Edit address" => "Modificar adresses", "Edit address" => "Modificar adresses",
"Type" => "Typo", "Type" => "Typo",
"PO Box" => "Cassa postal", "PO Box" => "Cassa postal",

View File

@ -43,6 +43,7 @@
"Phone" => "telefon", "Phone" => "telefon",
"Email" => "surel", "Email" => "surel",
"Address" => "alamat", "Address" => "alamat",
"Delete contact" => "hapus kontak",
"Preferred" => "disarankan", "Preferred" => "disarankan",
"City" => "kota", "City" => "kota",
"Country" => "negara", "Country" => "negara",
@ -53,7 +54,6 @@
"dd-mm-yyyy" => "dd-mm-yyyy", "dd-mm-yyyy" => "dd-mm-yyyy",
"Separate groups with commas" => "pisahkan grup dengan tanda koma", "Separate groups with commas" => "pisahkan grup dengan tanda koma",
"Download contact" => "unduk kontak", "Download contact" => "unduk kontak",
"Delete contact" => "hapus kontak",
"Type" => "tipe", "Type" => "tipe",
"PO Box" => "PO box", "PO Box" => "PO box",
"Region" => "daerah", "Region" => "daerah",

View File

@ -49,6 +49,7 @@
"Couldn't load temporary image: " => "Impossibile caricare l'immagine temporanea: ", "Couldn't load temporary image: " => "Impossibile caricare l'immagine temporanea: ",
"No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto", "No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto",
"Contacts" => "Contatti", "Contacts" => "Contatti",
"%d_selected_contacts" => "%d_contatti_selezionati",
"Contact is already in this group." => "Il contatto è già in questo gruppo.", "Contact is already in this group." => "Il contatto è già in questo gruppo.",
"Contacts are already in this group." => "I contatti sono già in questo gruppo.", "Contacts are already in this group." => "I contatti sono già in questo gruppo.",
"Couldn't get contact list." => "Impossibile ottenere l'elenco dei contatti.", "Couldn't get contact list." => "Impossibile ottenere l'elenco dei contatti.",
@ -159,7 +160,7 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "(De)seleziona tutto", "(De-)select all" => "(De)seleziona tutto",
"New Contact" => "Nuovo contatto", "New Contact" => "Nuovo contatto",
"Download Contact" => "Scarica contatto", "Download Contact(s)" => "Scarica contatto(i)",
"Groups" => "Gruppi", "Groups" => "Gruppi",
"Favorite" => "Preferito", "Favorite" => "Preferito",
"Delete Contact" => "Elimina contatto", "Delete Contact" => "Elimina contatto",
@ -190,9 +191,12 @@
"Nickname" => "Pseudonimo", "Nickname" => "Pseudonimo",
"Enter nickname" => "Inserisci pseudonimo", "Enter nickname" => "Inserisci pseudonimo",
"Title" => "Titolo", "Title" => "Titolo",
"Enter title" => "Inserisci il titolo",
"Organization" => "Organizzazione", "Organization" => "Organizzazione",
"Enter organization" => "Inserisci l'organizzazione",
"Birthday" => "Compleanno", "Birthday" => "Compleanno",
"Notes go here..." => "Le note vanno qui...", "Notes go here..." => "Le note vanno qui...",
"Export as VCF" => "Esporta come VCF",
"Add" => "Aggiungi", "Add" => "Aggiungi",
"Phone" => "Telefono", "Phone" => "Telefono",
"Email" => "Email", "Email" => "Email",
@ -200,6 +204,7 @@
"Address" => "Indirizzo", "Address" => "Indirizzo",
"Note" => "Nota", "Note" => "Nota",
"Web site" => "Sito web", "Web site" => "Sito web",
"Delete contact" => "Elimina contatto",
"Preferred" => "Preferito", "Preferred" => "Preferito",
"Please specify a valid email address." => "Specifica un indirizzo email valido", "Please specify a valid email address." => "Specifica un indirizzo email valido",
"someone@example.com" => "qualcuno@esempio.com", "someone@example.com" => "qualcuno@esempio.com",
@ -218,6 +223,7 @@
"Your city" => "La tua città", "Your city" => "La tua città",
"City" => "Città", "City" => "Città",
"Some region" => "Una regione", "Some region" => "Una regione",
"State or province" => "Stato o regione",
"Your country" => "Il tuo paese", "Your country" => "Il tuo paese",
"Country" => "Stato", "Country" => "Stato",
"Instant Messenger" => "Client di messaggistica istantanea", "Instant Messenger" => "Client di messaggistica istantanea",
@ -238,7 +244,6 @@
"Add notes here." => "Aggiungi qui le note.", "Add notes here." => "Aggiungi qui le note.",
"Add field" => "Aggiungi campo", "Add field" => "Aggiungi campo",
"Download contact" => "Scarica contatto", "Download contact" => "Scarica contatto",
"Delete contact" => "Elimina contatto",
"The temporary image has been removed from cache." => "L'immagine temporanea è stata rimossa dalla cache.", "The temporary image has been removed from cache." => "L'immagine temporanea è stata rimossa dalla cache.",
"Edit address" => "Modifica indirizzo", "Edit address" => "Modifica indirizzo",
"Type" => "Tipo", "Type" => "Tipo",

View File

@ -49,6 +49,7 @@
"Couldn't load temporary image: " => "一時的な画像の読み込みができませんでした: ", "Couldn't load temporary image: " => "一時的な画像の読み込みができませんでした: ",
"No file was uploaded. Unknown error" => "ファイルは何もアップロードされていません。不明なエラー", "No file was uploaded. Unknown error" => "ファイルは何もアップロードされていません。不明なエラー",
"Contacts" => "連絡先", "Contacts" => "連絡先",
"%d_selected_contacts" => "%d個の選択された連絡先",
"Contact is already in this group." => "連絡先はすでにこのグループに存在します。", "Contact is already in this group." => "連絡先はすでにこのグループに存在します。",
"Contacts are already in this group." => "連絡先はすでにこのグループに存在します。", "Contacts are already in this group." => "連絡先はすでにこのグループに存在します。",
"Couldn't get contact list." => "連絡先リストを取得できませんでした。", "Couldn't get contact list." => "連絡先リストを取得できませんでした。",
@ -159,7 +160,7 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "すべての選択を解除", "(De-)select all" => "すべての選択を解除",
"New Contact" => "新しい連絡先", "New Contact" => "新しい連絡先",
"Download Contact" => "連絡先をダウンロード", "Download Contact(s)" => "連絡先をダウンロード",
"Groups" => "グループ", "Groups" => "グループ",
"Favorite" => "お気に入り", "Favorite" => "お気に入り",
"Delete Contact" => "連絡先を削除", "Delete Contact" => "連絡先を削除",
@ -190,9 +191,12 @@
"Nickname" => "ニックネーム", "Nickname" => "ニックネーム",
"Enter nickname" => "ニックネームを入力", "Enter nickname" => "ニックネームを入力",
"Title" => "タイトル", "Title" => "タイトル",
"Enter title" => "タイトルを入力",
"Organization" => "所属", "Organization" => "所属",
"Enter organization" => "組織を入力",
"Birthday" => "誕生日", "Birthday" => "誕生日",
"Notes go here..." => "メモはここに...", "Notes go here..." => "メモはここに...",
"Export as VCF" => "VCFとしてエクスポート",
"Add" => "追加", "Add" => "追加",
"Phone" => "電話番号", "Phone" => "電話番号",
"Email" => "メールアドレス", "Email" => "メールアドレス",
@ -200,6 +204,7 @@
"Address" => "住所", "Address" => "住所",
"Note" => "メモ", "Note" => "メモ",
"Web site" => "ウェブサイト", "Web site" => "ウェブサイト",
"Delete contact" => "連絡先の削除",
"Preferred" => "推奨", "Preferred" => "推奨",
"Please specify a valid email address." => "有効なメールアドレスを指定してください。", "Please specify a valid email address." => "有効なメールアドレスを指定してください。",
"someone@example.com" => "someone@example.com", "someone@example.com" => "someone@example.com",
@ -218,6 +223,7 @@
"Your city" => "", "Your city" => "",
"City" => "都市", "City" => "都市",
"Some region" => "都道府県", "Some region" => "都道府県",
"State or province" => "州/県",
"Your country" => "", "Your country" => "",
"Country" => "国名", "Country" => "国名",
"Instant Messenger" => "インスタントメッセンジャー", "Instant Messenger" => "インスタントメッセンジャー",
@ -238,7 +244,6 @@
"Add notes here." => "ここにメモを追加。", "Add notes here." => "ここにメモを追加。",
"Add field" => "項目を追加", "Add field" => "項目を追加",
"Download contact" => "連絡先のダウンロード", "Download contact" => "連絡先のダウンロード",
"Delete contact" => "連絡先の削除",
"The temporary image has been removed from cache." => "一時画像はキャッシュから削除されました。", "The temporary image has been removed from cache." => "一時画像はキャッシュから削除されました。",
"Edit address" => "住所を編集", "Edit address" => "住所を編集",
"Type" => "種類", "Type" => "種類",

View File

@ -46,6 +46,7 @@
"Email" => "იმეილი", "Email" => "იმეილი",
"Address" => "მისამართი", "Address" => "მისამართი",
"Note" => "შენიშვნა", "Note" => "შენიშვნა",
"Delete contact" => "კონტაქტის წაშლა",
"City" => "ქალაქი", "City" => "ქალაქი",
"Country" => "ქვეყანა", "Country" => "ქვეყანა",
"Share" => "გაზიარება", "Share" => "გაზიარება",
@ -56,7 +57,6 @@
"Enter email address" => "ჩაწერეთ იმეილ მისამართი", "Enter email address" => "ჩაწერეთ იმეილ მისამართი",
"Add field" => "დაამატე ველი", "Add field" => "დაამატე ველი",
"Download contact" => "კონტაქტის ჩამოტვირთვა", "Download contact" => "კონტაქტის ჩამოტვირთვა",
"Delete contact" => "კონტაქტის წაშლა",
"Edit address" => "მისამართის რედაქტირება", "Edit address" => "მისამართის რედაქტირება",
"Type" => "ტიპი", "Type" => "ტიპი",
"PO Box" => "PO ყუთი", "PO Box" => "PO ყუთი",

View File

@ -159,7 +159,6 @@
"OK" => "확인", "OK" => "확인",
"(De-)select all" => "전체 선택(해제)", "(De-)select all" => "전체 선택(해제)",
"New Contact" => "새 연락처", "New Contact" => "새 연락처",
"Download Contact" => "연락처 다운로드",
"Groups" => "그룹", "Groups" => "그룹",
"Favorite" => "즐겨찾기", "Favorite" => "즐겨찾기",
"Delete Contact" => "연락처 삭제", "Delete Contact" => "연락처 삭제",
@ -190,7 +189,9 @@
"Nickname" => "별명", "Nickname" => "별명",
"Enter nickname" => "별명 입력", "Enter nickname" => "별명 입력",
"Title" => "직위", "Title" => "직위",
"Enter title" => "제목 입력",
"Organization" => "조직", "Organization" => "조직",
"Enter organization" => "조직명 입력",
"Birthday" => "생일", "Birthday" => "생일",
"Notes go here..." => "메모를 입력하십시오...", "Notes go here..." => "메모를 입력하십시오...",
"Add" => "추가", "Add" => "추가",
@ -200,6 +201,7 @@
"Address" => "주소", "Address" => "주소",
"Note" => "메모", "Note" => "메모",
"Web site" => "웹 사이트", "Web site" => "웹 사이트",
"Delete contact" => "연락처 삭제",
"Preferred" => "선호함", "Preferred" => "선호함",
"Please specify a valid email address." => "올바른 이메일 주소를 입력하십시오.", "Please specify a valid email address." => "올바른 이메일 주소를 입력하십시오.",
"someone@example.com" => "someone@example.com", "someone@example.com" => "someone@example.com",
@ -218,6 +220,7 @@
"Your city" => "도시", "Your city" => "도시",
"City" => "도시", "City" => "도시",
"Some region" => "지역", "Some region" => "지역",
"State or province" => "주 또는 도",
"Your country" => "국가", "Your country" => "국가",
"Country" => "국가", "Country" => "국가",
"Instant Messenger" => "인스턴트 메신저", "Instant Messenger" => "인스턴트 메신저",
@ -238,7 +241,6 @@
"Add notes here." => "여기에 메모를 추가하십시오.", "Add notes here." => "여기에 메모를 추가하십시오.",
"Add field" => "항목 추가", "Add field" => "항목 추가",
"Download contact" => "연락처 다운로드", "Download contact" => "연락처 다운로드",
"Delete contact" => "연락처 삭제",
"The temporary image has been removed from cache." => "임시 그림이 캐시에서 삭제되었습니다. ", "The temporary image has been removed from cache." => "임시 그림이 캐시에서 삭제되었습니다. ",
"Edit address" => "주소 편집", "Edit address" => "주소 편집",
"Type" => "종류", "Type" => "종류",

View File

@ -58,6 +58,7 @@
"Email" => "Email", "Email" => "Email",
"Address" => "Adress", "Address" => "Adress",
"Note" => "Note", "Note" => "Note",
"Delete contact" => "Kontakt läschen",
"Enter phone number" => "Telefonsnummer aginn", "Enter phone number" => "Telefonsnummer aginn",
"Delete phone number" => "Telefonsnummer läschen", "Delete phone number" => "Telefonsnummer läschen",
"View on map" => "Op da Kaart uweisen", "View on map" => "Op da Kaart uweisen",
@ -70,7 +71,6 @@
"Edit groups" => "Gruppen editéieren", "Edit groups" => "Gruppen editéieren",
"Edit address details" => "Adress Detailer editéieren", "Edit address details" => "Adress Detailer editéieren",
"Download contact" => "Kontakt eroflueden", "Download contact" => "Kontakt eroflueden",
"Delete contact" => "Kontakt läschen",
"Type" => "Typ", "Type" => "Typ",
"PO Box" => "Postleetzuel", "PO Box" => "Postleetzuel",
"Extended" => "Erweidert", "Extended" => "Erweidert",

View File

@ -50,13 +50,13 @@
"Phone" => "Telefonas", "Phone" => "Telefonas",
"Email" => "El. paštas", "Email" => "El. paštas",
"Address" => "Adresas", "Address" => "Adresas",
"Delete contact" => "Ištrinti kontaktą",
"City" => "Miestas", "City" => "Miestas",
"Country" => "Šalis", "Country" => "Šalis",
"Share" => "Dalintis", "Share" => "Dalintis",
"Export" => "Eksportuoti", "Export" => "Eksportuoti",
"Add Contact" => "Pridėti kontaktą", "Add Contact" => "Pridėti kontaktą",
"Download contact" => "Atsisųsti kontaktą", "Download contact" => "Atsisųsti kontaktą",
"Delete contact" => "Ištrinti kontaktą",
"Type" => "Tipas", "Type" => "Tipas",
"PO Box" => "Pašto dėžutė", "PO Box" => "Pašto dėžutė",
"Region" => "Regionas", "Region" => "Regionas",

View File

@ -88,6 +88,7 @@
"Email" => "Е-пошта", "Email" => "Е-пошта",
"Address" => "Адреса", "Address" => "Адреса",
"Note" => "Забелешка", "Note" => "Забелешка",
"Delete contact" => "Избриши го контактот",
"Preferred" => "Претпочитано", "Preferred" => "Претпочитано",
"Please specify a valid email address." => "Ве молам внесете правилна адреса за е-пошта.", "Please specify a valid email address." => "Ве молам внесете правилна адреса за е-пошта.",
"Mail to address" => "Прати порака до адреса", "Mail to address" => "Прати порака до адреса",
@ -111,7 +112,6 @@
"Add notes here." => "Внесете забелешки тука.", "Add notes here." => "Внесете забелешки тука.",
"Add field" => "Додади поле", "Add field" => "Додади поле",
"Download contact" => "Преземи го контактот", "Download contact" => "Преземи го контактот",
"Delete contact" => "Избриши го контактот",
"The temporary image has been removed from cache." => "Привремената слика е отстранета од кешот.", "The temporary image has been removed from cache." => "Привремената слика е отстранета од кешот.",
"Edit address" => "Уреди адреса", "Edit address" => "Уреди адреса",
"Type" => "Тип", "Type" => "Тип",

View File

@ -92,6 +92,7 @@
"Email" => "Emel", "Email" => "Emel",
"Address" => "Alamat", "Address" => "Alamat",
"Note" => "Nota", "Note" => "Nota",
"Delete contact" => "Padam hubungan",
"Preferred" => "Pilihan", "Preferred" => "Pilihan",
"Please specify a valid email address." => "Berikan alamat emel yang sah.", "Please specify a valid email address." => "Berikan alamat emel yang sah.",
"Mail to address" => "Hantar ke alamat", "Mail to address" => "Hantar ke alamat",
@ -115,7 +116,6 @@
"Add notes here." => "Letak nota disini.", "Add notes here." => "Letak nota disini.",
"Add field" => "Letak ruangan", "Add field" => "Letak ruangan",
"Download contact" => "Muat turun hubungan", "Download contact" => "Muat turun hubungan",
"Delete contact" => "Padam hubungan",
"The temporary image has been removed from cache." => "Imej sementara telah dibuang dari cache.", "The temporary image has been removed from cache." => "Imej sementara telah dibuang dari cache.",
"Edit address" => "Ubah alamat", "Edit address" => "Ubah alamat",
"Type" => "Jenis", "Type" => "Jenis",

View File

@ -105,6 +105,7 @@
"Address" => "Adresse", "Address" => "Adresse",
"Note" => "Notat", "Note" => "Notat",
"Web site" => "Hjemmeside", "Web site" => "Hjemmeside",
"Delete contact" => "Slett kontakt",
"Preferred" => "Foretrukket", "Preferred" => "Foretrukket",
"Please specify a valid email address." => "Vennligst angi en gyldig e-postadresse.", "Please specify a valid email address." => "Vennligst angi en gyldig e-postadresse.",
"Mail to address" => "Send e-post til adresse", "Mail to address" => "Send e-post til adresse",
@ -128,7 +129,6 @@
"Add notes here." => "Legg inn notater her.", "Add notes here." => "Legg inn notater her.",
"Add field" => "Legg til felt", "Add field" => "Legg til felt",
"Download contact" => "Hend ned kontakten", "Download contact" => "Hend ned kontakten",
"Delete contact" => "Slett kontakt",
"The temporary image has been removed from cache." => "Det midlertidige bildet er fjernet fra cache.", "The temporary image has been removed from cache." => "Det midlertidige bildet er fjernet fra cache.",
"Edit address" => "Endre adresse", "Edit address" => "Endre adresse",
"Type" => "Type", "Type" => "Type",

View File

@ -149,7 +149,6 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "(De-)selecteer alle", "(De-)select all" => "(De-)selecteer alle",
"New Contact" => "Nieuw Contact", "New Contact" => "Nieuw Contact",
"Download Contact" => "Download Contact",
"Groups" => "Groepen", "Groups" => "Groepen",
"Favorite" => "Favoriet", "Favorite" => "Favoriet",
"Delete Contact" => "Verwijder Contact", "Delete Contact" => "Verwijder Contact",
@ -190,6 +189,7 @@
"Address" => "Adres", "Address" => "Adres",
"Note" => "Notitie", "Note" => "Notitie",
"Web site" => "Website", "Web site" => "Website",
"Delete contact" => "Verwijder contact",
"Preferred" => "Voorkeur", "Preferred" => "Voorkeur",
"Please specify a valid email address." => "Geef een geldig email adres op.", "Please specify a valid email address." => "Geef een geldig email adres op.",
"someone@example.com" => "iemand@voorbeeld.nl", "someone@example.com" => "iemand@voorbeeld.nl",
@ -223,7 +223,6 @@
"Add notes here." => "Voeg notitie toe", "Add notes here." => "Voeg notitie toe",
"Add field" => "Voeg veld toe", "Add field" => "Voeg veld toe",
"Download contact" => "Download contact", "Download contact" => "Download contact",
"Delete contact" => "Verwijder contact",
"The temporary image has been removed from cache." => "Het tijdelijke plaatje is uit de cache verwijderd.", "The temporary image has been removed from cache." => "Het tijdelijke plaatje is uit de cache verwijderd.",
"Edit address" => "Wijzig adres", "Edit address" => "Wijzig adres",
"Type" => "Type", "Type" => "Type",

View File

@ -35,13 +35,13 @@
"Phone" => "Telefonnummer", "Phone" => "Telefonnummer",
"Email" => "Epost", "Email" => "Epost",
"Address" => "Adresse", "Address" => "Adresse",
"Delete contact" => "Slett kontakt",
"Preferred" => "Føretrekt", "Preferred" => "Føretrekt",
"City" => "Stad", "City" => "Stad",
"Country" => "Land", "Country" => "Land",
"Export" => "Eksporter", "Export" => "Eksporter",
"Add Contact" => "Legg til kontakt", "Add Contact" => "Legg til kontakt",
"Download contact" => "Last ned kontakt", "Download contact" => "Last ned kontakt",
"Delete contact" => "Slett kontakt",
"Type" => "Skriv", "Type" => "Skriv",
"PO Box" => "Postboks", "PO Box" => "Postboks",
"Extended" => "Utvida", "Extended" => "Utvida",

View File

@ -55,6 +55,7 @@
"Contact is not in this group." => "Kontakt nie jest w tej grupie.", "Contact is not in this group." => "Kontakt nie jest w tej grupie.",
"Contacts are not in this group." => "Kontakty nie sa w tej grupie.", "Contacts are not in this group." => "Kontakty nie sa w tej grupie.",
"A group named {group} already exists" => "Nazwa grupy {group} już istnieje", "A group named {group} already exists" => "Nazwa grupy {group} już istnieje",
"You can drag groups to\narrange them as you like." => "Można przeciągnąć grupy do\naby podzielić je jak chcesz.",
"All" => "Wszystkie", "All" => "Wszystkie",
"Favorites" => "Ulubione", "Favorites" => "Ulubione",
"Shared by {owner}" => "Udostępnione przez {owner}", "Shared by {owner}" => "Udostępnione przez {owner}",
@ -67,9 +68,14 @@
"Error adding to group." => "Błąd dodania do grupy.", "Error adding to group." => "Błąd dodania do grupy.",
"Error removing from group." => "Błąd usunięcia z grupy.", "Error removing from group." => "Błąd usunięcia z grupy.",
"There was an error opening a mail composer." => "Wystąpił błąd podczas otwierania edytora.", "There was an error opening a mail composer." => "Wystąpił błąd podczas otwierania edytora.",
"Deleting done. Click here to cancel reloading." => "Usuwanie udane. Kliknij tu aby anulować przeładowanie.",
"Add address book" => "Dodaj książkę adresową",
"Import done. Click here to cancel reloading." => "Importowanie zakończone. Kliknij tu aby anulować przeładowanie.",
"Not all files uploaded. Retrying..." => "Nie wszystkie pliki załadowane. Ponowna próba...", "Not all files uploaded. Retrying..." => "Nie wszystkie pliki załadowane. Ponowna próba...",
"Something went wrong with the upload, please retry." => "Coś poszło nie tak z ładowanie, proszę spróbować ponownie.", "Something went wrong with the upload, please retry." => "Coś poszło nie tak z ładowanie, proszę spróbować ponownie.",
"Error" => "Błąd", "Error" => "Błąd",
"Importing from {filename}..." => "Importowanie z {filename}...",
"{success} imported, {failed} failed." => "{success} udanych, {failed} nieudanych.",
"Importing..." => "Importowanie...", "Importing..." => "Importowanie...",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nie można przesłać pliku, ponieważ to jest katalog lub ma 0 bajtów", "Unable to upload your file as it is a directory or has 0 bytes" => "Nie można przesłać pliku, ponieważ to jest katalog lub ma 0 bajtów",
"Upload Error" => "Błąd ładowania", "Upload Error" => "Błąd ładowania",
@ -145,12 +151,14 @@
"HomePage" => "Strona domowa", "HomePage" => "Strona domowa",
"New Group" => "Nowa grupa", "New Group" => "Nowa grupa",
"Settings" => "Ustawienia", "Settings" => "Ustawienia",
"Address books" => "Książki adresowe",
"Import" => "Import", "Import" => "Import",
"Select files to import" => "Wybierz pliki do importu",
"Select files" => "Wybierz pliki",
"Import into:" => "Importuj do:", "Import into:" => "Importuj do:",
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "Odznacz wszystkie", "(De-)select all" => "Odznacz wszystkie",
"New Contact" => "Nowy kontakt", "New Contact" => "Nowy kontakt",
"Download Contact" => "Pobierz kontakt",
"Groups" => "Grupy", "Groups" => "Grupy",
"Favorite" => "Ulubione", "Favorite" => "Ulubione",
"Delete Contact" => "Usuń kontakt", "Delete Contact" => "Usuń kontakt",
@ -181,9 +189,12 @@
"Nickname" => "Nazwa", "Nickname" => "Nazwa",
"Enter nickname" => "Wpisz nazwę", "Enter nickname" => "Wpisz nazwę",
"Title" => "Tytuł", "Title" => "Tytuł",
"Enter title" => "Wpisz nazwę",
"Organization" => "Organizacja", "Organization" => "Organizacja",
"Enter organization" => "Wpisz organizację",
"Birthday" => "Urodziny", "Birthday" => "Urodziny",
"Notes go here..." => "Notatki kliknij tutaj...", "Notes go here..." => "Notatki kliknij tutaj...",
"Export as VCF" => "Eksportuj jako VCF",
"Add" => "Dodaj", "Add" => "Dodaj",
"Phone" => "Telefon", "Phone" => "Telefon",
"Email" => "E-mail", "Email" => "E-mail",
@ -191,6 +202,7 @@
"Address" => "Adres", "Address" => "Adres",
"Note" => "Uwaga", "Note" => "Uwaga",
"Web site" => "Strona www", "Web site" => "Strona www",
"Delete contact" => "Usuwa kontakt",
"Preferred" => "Preferowane", "Preferred" => "Preferowane",
"Please specify a valid email address." => "Określ prawidłowy adres e-mail.", "Please specify a valid email address." => "Określ prawidłowy adres e-mail.",
"someone@example.com" => "twójmail@twojadomena.pl", "someone@example.com" => "twójmail@twojadomena.pl",
@ -209,12 +221,14 @@
"Your city" => "Twoje miasto", "Your city" => "Twoje miasto",
"City" => "Miasto", "City" => "Miasto",
"Some region" => "Region", "Some region" => "Region",
"State or province" => "Województwo ",
"Your country" => "Twoje państwo", "Your country" => "Twoje państwo",
"Country" => "Kraj", "Country" => "Kraj",
"Instant Messenger" => "Komunikator", "Instant Messenger" => "Komunikator",
"Delete IM" => "Usuń Komunikator", "Delete IM" => "Usuń Komunikator",
"Share" => "Udostępnij", "Share" => "Udostępnij",
"Export" => "Export", "Export" => "Export",
"CardDAV link" => "Link CardDAV",
"Add Contact" => "Dodaj kontakt", "Add Contact" => "Dodaj kontakt",
"Drop photo to upload" => "Upuść fotografię aby załadować", "Drop photo to upload" => "Upuść fotografię aby załadować",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format niestandardowy, krótkie nazwy, imię i nazwisko, Odwracać lub Odwrócić z przecinkiem", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format niestandardowy, krótkie nazwy, imię i nazwisko, Odwracać lub Odwrócić z przecinkiem",
@ -228,7 +242,6 @@
"Add notes here." => "Dodaj notatkę tutaj.", "Add notes here." => "Dodaj notatkę tutaj.",
"Add field" => "Dodaj pole", "Add field" => "Dodaj pole",
"Download contact" => "Pobiera kontakt", "Download contact" => "Pobiera kontakt",
"Delete contact" => "Usuwa kontakt",
"The temporary image has been removed from cache." => "Tymczasowy obraz został usunięty z pamięci podręcznej.", "The temporary image has been removed from cache." => "Tymczasowy obraz został usunięty z pamięci podręcznej.",
"Edit address" => "Edytuj adres", "Edit address" => "Edytuj adres",
"Type" => "Typ", "Type" => "Typ",

View File

@ -155,6 +155,7 @@
"Address" => "Endereço", "Address" => "Endereço",
"Note" => "Nota", "Note" => "Nota",
"Web site" => "Web site", "Web site" => "Web site",
"Delete contact" => "Apagar contato",
"Preferred" => "Preferido", "Preferred" => "Preferido",
"Please specify a valid email address." => "Por favor, especifique um email válido.", "Please specify a valid email address." => "Por favor, especifique um email válido.",
"Mail to address" => "Correio para endereço", "Mail to address" => "Correio para endereço",
@ -184,7 +185,6 @@
"Add notes here." => "Adicionar notas", "Add notes here." => "Adicionar notas",
"Add field" => "Adicionar campo", "Add field" => "Adicionar campo",
"Download contact" => "Baixar contato", "Download contact" => "Baixar contato",
"Delete contact" => "Apagar contato",
"The temporary image has been removed from cache." => "A imagem temporária foi removida cache.", "The temporary image has been removed from cache." => "A imagem temporária foi removida cache.",
"Edit address" => "Editar endereço", "Edit address" => "Editar endereço",
"Type" => "Digite", "Type" => "Digite",

View File

@ -159,7 +159,6 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "(Des)seleccionar todos", "(De-)select all" => "(Des)seleccionar todos",
"New Contact" => "Novo Contacto", "New Contact" => "Novo Contacto",
"Download Contact" => "Transferir o contacto",
"Groups" => "Grupos", "Groups" => "Grupos",
"Favorite" => "Favorito", "Favorite" => "Favorito",
"Delete Contact" => "Eliminar o Contacto", "Delete Contact" => "Eliminar o Contacto",
@ -200,6 +199,7 @@
"Address" => "Morada", "Address" => "Morada",
"Note" => "Nota", "Note" => "Nota",
"Web site" => "Página web", "Web site" => "Página web",
"Delete contact" => "Apagar contacto",
"Preferred" => "Preferido", "Preferred" => "Preferido",
"Please specify a valid email address." => "Por favor indique um endereço de correio válido", "Please specify a valid email address." => "Por favor indique um endereço de correio válido",
"someone@example.com" => "alguem@exemplo.com", "someone@example.com" => "alguem@exemplo.com",
@ -238,7 +238,6 @@
"Add notes here." => "Insira notas aqui.", "Add notes here." => "Insira notas aqui.",
"Add field" => "Adicionar campo", "Add field" => "Adicionar campo",
"Download contact" => "Transferir contacto", "Download contact" => "Transferir contacto",
"Delete contact" => "Apagar contacto",
"The temporary image has been removed from cache." => "A imagem temporária foi retirada do cache.", "The temporary image has been removed from cache." => "A imagem temporária foi retirada do cache.",
"Edit address" => "Editar endereço", "Edit address" => "Editar endereço",
"Type" => "Tipo", "Type" => "Tipo",

View File

@ -84,6 +84,7 @@
"Address" => "Adresă", "Address" => "Adresă",
"Note" => "Notă", "Note" => "Notă",
"Web site" => "Site web", "Web site" => "Site web",
"Delete contact" => "Șterge contact",
"Preferred" => "Preferat", "Preferred" => "Preferat",
"Please specify a valid email address." => "Te rog să specifici un e-mail corect", "Please specify a valid email address." => "Te rog să specifici un e-mail corect",
"Mail to address" => "Trimite mesaj la e-mail", "Mail to address" => "Trimite mesaj la e-mail",
@ -108,7 +109,6 @@
"Add notes here." => "Adaugă note", "Add notes here." => "Adaugă note",
"Add field" => "Adaugă câmp", "Add field" => "Adaugă câmp",
"Download contact" => "Descarcă acest contact", "Download contact" => "Descarcă acest contact",
"Delete contact" => "Șterge contact",
"The temporary image has been removed from cache." => "Imaginea temporară a fost eliminată din cache.", "The temporary image has been removed from cache." => "Imaginea temporară a fost eliminată din cache.",
"Edit address" => "Editeză adresă", "Edit address" => "Editeză adresă",
"Type" => "Tip", "Type" => "Tip",

View File

@ -2,6 +2,10 @@
"Error (de)activating addressbook." => "Ошибка (де)активации адресной книги.", "Error (de)activating addressbook." => "Ошибка (де)активации адресной книги.",
"id is not set." => "id не установлен.", "id is not set." => "id не установлен.",
"Cannot update addressbook with an empty name." => "Нельзя обновить адресную книгу с пустым именем.", "Cannot update addressbook with an empty name." => "Нельзя обновить адресную книгу с пустым именем.",
"No category name given." => "Не задано имя категории",
"Error adding group." => "Ошибка добавления группы.",
"Group ID missing from request." => "В запросе отсутствует ID группы.",
"Contact ID missing from request." => "В запросе отсутствует ID контакта.",
"No ID provided" => "ID не предоставлен", "No ID provided" => "ID не предоставлен",
"Error setting checksum." => "Ошибка установки контрольной суммы.", "Error setting checksum." => "Ошибка установки контрольной суммы.",
"No categories selected for deletion." => "Категории для удаления не установлены.", "No categories selected for deletion." => "Категории для удаления не установлены.",
@ -10,8 +14,10 @@
"element name is not set." => "имя элемента не установлено.", "element name is not set." => "имя элемента не установлено.",
"checksum is not set." => "контрольная сумма не установлена.", "checksum is not set." => "контрольная сумма не установлена.",
"Information about vCard is incorrect. Please reload the page." => "Информация о vCard некорректна. Пожалуйста, обновите страницу.", "Information about vCard is incorrect. Please reload the page." => "Информация о vCard некорректна. Пожалуйста, обновите страницу.",
"Couldn't find vCard for %d." => "Невозможно найти vCard для %d.",
"Information about vCard is incorrect. Please reload the page: " => "Информация о vCard не корректна. Перезагрузите страницу: ", "Information about vCard is incorrect. Please reload the page: " => "Информация о vCard не корректна. Перезагрузите страницу: ",
"Something went FUBAR. " => "Что-то пошло FUBAR.", "Something went FUBAR. " => "Что-то пошло FUBAR.",
"Cannot save property of type \"%s\" as array" => "Невозможно сохранить свойство типа \"%s\", как массив",
"Missing IM parameter." => "Отсутствует параметр IM.", "Missing IM parameter." => "Отсутствует параметр IM.",
"Unknown IM: " => "Неизвестный IM:", "Unknown IM: " => "Неизвестный IM:",
"No contact ID was submitted." => "Нет контакта ID", "No contact ID was submitted." => "Нет контакта ID",
@ -29,6 +35,9 @@
"Error cropping image" => "Ошибка обрезки изображений", "Error cropping image" => "Ошибка обрезки изображений",
"Error creating temporary image" => "Ошибка создания временных изображений", "Error creating temporary image" => "Ошибка создания временных изображений",
"Error finding image: " => "Ошибка поиска изображений:", "Error finding image: " => "Ошибка поиска изображений:",
"Key is not set for: " => "Не установлен ключ для:",
"Value is not set for: " => "Не установлено значение для:",
"Could not set preference: " => "Не удалось установить важность:",
"Error uploading contacts to storage." => "Ошибка загрузки контактов в хранилище.", "Error uploading contacts to storage." => "Ошибка загрузки контактов в хранилище.",
"There is no error, the file uploaded with success" => "Файл загружен успешно.", "There is no error, the file uploaded with success" => "Файл загружен успешно.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Загружаемый файл первосходит значение переменной upload_max_filesize, установленно в php.ini", "The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Загружаемый файл первосходит значение переменной upload_max_filesize, установленно в php.ini",
@ -40,10 +49,33 @@
"Couldn't load temporary image: " => "Не удалось загрузить временное изображение:", "Couldn't load temporary image: " => "Не удалось загрузить временное изображение:",
"No file was uploaded. Unknown error" => "Файл не был загружен. Неизвестная ошибка", "No file was uploaded. Unknown error" => "Файл не был загружен. Неизвестная ошибка",
"Contacts" => "Контакты", "Contacts" => "Контакты",
"Contact is already in this group." => "Контакт уже находятся в этой группе.",
"Contacts are already in this group." => "Контакты уже находятся в этой группе.",
"Couldn't get contact list." => "Не удалось получить список контактов.",
"Contact is not in this group." => "Контакт не в этой группе.",
"Contacts are not in this group." => "Контакты не в этой группе.",
"A group named {group} already exists" => "Группа с названием {group} уже существует",
"You can drag groups to\narrange them as you like." => "Вы можете перетащить группы в\nрасположите их как вам нравится",
"All" => "Все",
"Favorites" => "Избранное",
"Shared by {owner}" => "Опубликовано {owner}",
"Indexing contacts" => "Индексация контактов",
"Add to..." => "Добавить в...",
"Remove from..." => "Удалить из...",
"Add group..." => "Добавить группу...",
"Select photo" => "Выберите фото", "Select photo" => "Выберите фото",
"Network or server error. Please inform administrator." => "Ошибка сети или сервера. Пожалуйста, обратитесь к администратору.",
"Error adding to group." => "Ошибка добавления в группу.",
"Error removing from group." => "Ошибка удаления из группы",
"There was an error opening a mail composer." => "Произошла ошибка при открытии почтовой программы.",
"Deleting done. Click here to cancel reloading." => "Удаление завершено. Щелкните здесь для отмены перезагрузки.",
"Add address book" => "Добавить адресную книгу",
"Import done. Click here to cancel reloading." => "Импорт завершен. Щелкните здесь для отмены перезагрузки.",
"Not all files uploaded. Retrying..." => "Не все файлы были загружены. Повторяю...", "Not all files uploaded. Retrying..." => "Не все файлы были загружены. Повторяю...",
"Something went wrong with the upload, please retry." => "В процессе загрузки что-то пошло не так, пожалуйста загрузите повторно.", "Something went wrong with the upload, please retry." => "В процессе загрузки что-то пошло не так, пожалуйста загрузите повторно.",
"Error" => "Ошибка", "Error" => "Ошибка",
"Importing from {filename}..." => "Импорт из {filename}...",
"{success} imported, {failed} failed." => "{success} импортировано, {failed} потеряно.",
"Importing..." => "Импортирую...", "Importing..." => "Импортирую...",
"Unable to upload your file as it is a directory or has 0 bytes" => "Файл не был загружен: его размер 0 байт либо это не файл, а директория.", "Unable to upload your file as it is a directory or has 0 bytes" => "Файл не был загружен: его размер 0 байт либо это не файл, а директория.",
"Upload Error" => "Ошибка при загрузке", "Upload Error" => "Ошибка при загрузке",
@ -56,8 +88,13 @@
"Error loading profile picture." => "Ошибка загрузки изображения профиля.", "Error loading profile picture." => "Ошибка загрузки изображения профиля.",
"Enter name" => "Введите имя", "Enter name" => "Введите имя",
"Enter description" => "Ввдите описание", "Enter description" => "Ввдите описание",
"Select addressbook" => "Выбрать адресную книгу",
"The address book name cannot be empty." => "Имя адресной книги не может быть пустым.", "The address book name cannot be empty." => "Имя адресной книги не может быть пустым.",
"Is this correct?" => "Это верно?",
"There was an unknown error when trying to delete this contact" => "Произошла неизвестная ошибка при попытке удалить этот контакт",
"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Некоторые контакты помечены на удаление, но ещё не удалены. Подождите, пока они удаляются.", "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}" => "Отменено удаление {num}",
"Result: " => "Результат:", "Result: " => "Результат:",
" imported, " => "импортировано, ", " imported, " => "импортировано, ",
" failed." => "не удалось.", " failed." => "не удалось.",
@ -100,6 +137,7 @@
"Internet" => "Интернет", "Internet" => "Интернет",
"Friends" => "Друзья", "Friends" => "Друзья",
"Family" => "Семья", "Family" => "Семья",
"There was an error deleting properties for this contact." => "Произошла ошибка при удалении свойств данного контакта.",
"{name}'s Birthday" => "День рождения {name}", "{name}'s Birthday" => "День рождения {name}",
"Contact" => "Контакт", "Contact" => "Контакт",
"You do not have the permissions to add contacts to this addressbook." => "У вас нет права создавать контакты в этой адресной книге.", "You do not have the permissions to add contacts to this addressbook." => "У вас нет права создавать контакты в этой адресной книге.",
@ -109,11 +147,20 @@
"Could not find the Addressbook with ID: " => "Не могу найти адресную книгу с ID:", "Could not find the Addressbook with ID: " => "Не могу найти адресную книгу с ID:",
"You do not have the permissions to delete this contact." => "У вас нет разрешений удалять этот контакт.", "You do not have the permissions to delete this contact." => "У вас нет разрешений удалять этот контакт.",
"There was an error deleting this contact." => "Ошибка при удалении контакта.", "There was an error deleting this contact." => "Ошибка при удалении контакта.",
"Contact not found." => "Контакт не найден.",
"HomePage" => "Домашняя страница",
"New Group" => "Новая группа",
"Settings" => "Настройки", "Settings" => "Настройки",
"Address books" => "Адресная книга",
"Import" => "Импорт", "Import" => "Импорт",
"Select files to import" => "Выберите файлы для импорта:",
"Select files" => "Выберите файл",
"Import into:" => "Импорт в",
"OK" => "ОК", "OK" => "ОК",
"(De-)select all" => "(Отменить) отметить все",
"New Contact" => "Новый контакт", "New Contact" => "Новый контакт",
"Groups" => "Группы", "Groups" => "Группы",
"Favorite" => "Избранное",
"Delete Contact" => "Удалить контакт", "Delete Contact" => "Удалить контакт",
"Close" => "Закрыть", "Close" => "Закрыть",
"Keyboard shortcuts" => "Горячие клавиши", "Keyboard shortcuts" => "Горячие клавиши",
@ -128,17 +175,26 @@
"Add new contact" => "Добавить новый контакт", "Add new contact" => "Добавить новый контакт",
"Add new addressbook" => "Добавить новую адресную книгу", "Add new addressbook" => "Добавить новую адресную книгу",
"Delete current contact" => "Удалить текущий контакт", "Delete current contact" => "Удалить текущий контакт",
"<h3>You have no contacts in your addressbook.</h3><p>Add a new contact or import existing contacts from a VCF file.</p>" => "<h3>В вашей адресной книге нет контактов.</h3><p>Добавьте новый контакт или импортируйте контакты из VCF файла.</p>",
"Add contact" => "Добавить контакт", "Add contact" => "Добавить контакт",
"Compose mail" => "Написать письмо",
"Delete group" => "Удалить группу",
"Delete current photo" => "Удалить текущую фотографию", "Delete current photo" => "Удалить текущую фотографию",
"Edit current photo" => "Редактировать текущую фотографию", "Edit current photo" => "Редактировать текущую фотографию",
"Upload new photo" => "Загрузить новую фотографию", "Upload new photo" => "Загрузить новую фотографию",
"Select photo from ownCloud" => "Выбрать фотографию из ownCloud", "Select photo from ownCloud" => "Выбрать фотографию из ownCloud",
"First name" => "Имя",
"Additional names" => "Отчество", "Additional names" => "Отчество",
"Last name" => "Фамилия",
"Nickname" => "Псевдоним", "Nickname" => "Псевдоним",
"Enter nickname" => "Введите псевдоним", "Enter nickname" => "Введите псевдоним",
"Title" => "Заголовок", "Title" => "Заголовок",
"Enter title" => "Введите название",
"Organization" => "Организация", "Organization" => "Организация",
"Enter organization" => "Введите организацию",
"Birthday" => "День рождения", "Birthday" => "День рождения",
"Notes go here..." => "Здесь будут заметки...",
"Export as VCF" => "Экспорт в VCF",
"Add" => "Добавить", "Add" => "Добавить",
"Phone" => "Телефон", "Phone" => "Телефон",
"Email" => "Эл. почта", "Email" => "Эл. почта",
@ -146,8 +202,10 @@
"Address" => "Адрес", "Address" => "Адрес",
"Note" => "Заметка", "Note" => "Заметка",
"Web site" => "Веб-сайт", "Web site" => "Веб-сайт",
"Delete contact" => "Удалить контакт",
"Preferred" => "Предпочитаемый", "Preferred" => "Предпочитаемый",
"Please specify a valid email address." => "Укажите правильный адрес электронной почты.", "Please specify a valid email address." => "Укажите правильный адрес электронной почты.",
"someone@example.com" => "someone@example.com",
"Mail to address" => "Написать по адресу", "Mail to address" => "Написать по адресу",
"Delete email address" => "Удалить адрес электронной почты", "Delete email address" => "Удалить адрес электронной почты",
"Enter phone number" => "Введите номер телефона", "Enter phone number" => "Введите номер телефона",
@ -155,14 +213,22 @@
"Go to web site" => "Перейти на веб-сайт", "Go to web site" => "Перейти на веб-сайт",
"Delete URL" => "Удалить URL", "Delete URL" => "Удалить URL",
"View on map" => "Показать на карте", "View on map" => "Показать на карте",
"Delete address" => "Удалить адрес",
"1 Main Street" => "1 Ленина улица",
"Street address" => "Улица", "Street address" => "Улица",
"12345" => "12345",
"Postal code" => "Почтовый индекс", "Postal code" => "Почтовый индекс",
"Your city" => "Ваш город",
"City" => "Город", "City" => "Город",
"Some region" => "Некоторый регион",
"State or province" => "Область или район",
"Your country" => "Ваша страна",
"Country" => "Страна", "Country" => "Страна",
"Instant Messenger" => "Instant Messenger", "Instant Messenger" => "Instant Messenger",
"Delete IM" => "Удалить IM", "Delete IM" => "Удалить IM",
"Share" => "Опубликовать", "Share" => "Опубликовать",
"Export" => "Экспорт", "Export" => "Экспорт",
"CardDAV link" => "Ссылка CardDAV",
"Add Contact" => "Добавить Контакт", "Add Contact" => "Добавить Контакт",
"Drop photo to upload" => "Перетяните фотографии для загрузки", "Drop photo to upload" => "Перетяните фотографии для загрузки",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Формат Краткое имя, Полное имя", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Формат Краткое имя, Полное имя",
@ -176,7 +242,6 @@
"Add notes here." => "Добавьте заметки здесь.", "Add notes here." => "Добавьте заметки здесь.",
"Add field" => "Добавить поле", "Add field" => "Добавить поле",
"Download contact" => "Скачать контакт", "Download contact" => "Скачать контакт",
"Delete contact" => "Удалить контакт",
"The temporary image has been removed from cache." => "Временный образ был удален из кэша.", "The temporary image has been removed from cache." => "Временный образ был удален из кэша.",
"Edit address" => "Редактировать адрес", "Edit address" => "Редактировать адрес",
"Type" => "Тип", "Type" => "Тип",

View File

@ -150,7 +150,6 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "Отметить(снять отметку) все", "(De-)select all" => "Отметить(снять отметку) все",
"New Contact" => "Новый контакт", "New Contact" => "Новый контакт",
"Download Contact" => "Загрузить контакт",
"Groups" => "Группы", "Groups" => "Группы",
"Favorite" => "Избранный", "Favorite" => "Избранный",
"Delete Contact" => "Удалить контакт", "Delete Contact" => "Удалить контакт",
@ -191,6 +190,7 @@
"Address" => "Адрес", "Address" => "Адрес",
"Note" => "Заметки", "Note" => "Заметки",
"Web site" => "Веб-сайт", "Web site" => "Веб-сайт",
"Delete contact" => "Удалить контакт",
"Preferred" => "Предпочтительный", "Preferred" => "Предпочтительный",
"Please specify a valid email address." => "Пожалуйста,укажите действительный email адрес.", "Please specify a valid email address." => "Пожалуйста,укажите действительный email адрес.",
"someone@example.com" => "someone@example.com", "someone@example.com" => "someone@example.com",
@ -228,7 +228,6 @@
"Add notes here." => "Добавить здесь заметок.", "Add notes here." => "Добавить здесь заметок.",
"Add field" => "Добавить поле", "Add field" => "Добавить поле",
"Download contact" => "загрузить контакт", "Download contact" => "загрузить контакт",
"Delete contact" => "Удалить контакт",
"The temporary image has been removed from cache." => "Временное изображение было удалено из кэша.", "The temporary image has been removed from cache." => "Временное изображение было удалено из кэша.",
"Edit address" => "Редактировать адрес", "Edit address" => "Редактировать адрес",
"Type" => "Тип", "Type" => "Тип",

View File

@ -93,6 +93,7 @@
"Address" => "ලිපිනය", "Address" => "ලිපිනය",
"Note" => "නෝට්ටුවක්", "Note" => "නෝට්ටුවක්",
"Web site" => "වෙබ් අඩවිය", "Web site" => "වෙබ් අඩවිය",
"Delete contact" => "සබඳතාව මකන්න",
"Preferred" => "රුචි", "Preferred" => "රුචි",
"Please specify a valid email address." => "වලංගු විද්‍යුත් තැපැල් ලිපිනයක් ලබා දෙන්න", "Please specify a valid email address." => "වලංගු විද්‍යුත් තැපැල් ලිපිනයක් ලබා දෙන්න",
"Mail to address" => "තැපැල් එවිය යුතු ලිපිනය", "Mail to address" => "තැපැල් එවිය යුතු ලිපිනය",
@ -117,7 +118,6 @@
"Add notes here." => "මෙතැන නෝට්ටුවක් තබන්න", "Add notes here." => "මෙතැන නෝට්ටුවක් තබන්න",
"Add field" => "ක්ෂේත්‍රයක් එකතු කරන්න", "Add field" => "ක්ෂේත්‍රයක් එකතු කරන්න",
"Download contact" => "සබඳතා බාගත කරන්න", "Download contact" => "සබඳතා බාගත කරන්න",
"Delete contact" => "සබඳතාව මකන්න",
"Edit address" => "ලිපිනය සංස්කරණය කරන්න", "Edit address" => "ලිපිනය සංස්කරණය කරන්න",
"Type" => "වර්ගය", "Type" => "වර්ගය",
"PO Box" => "තැ.පෙ.", "PO Box" => "තැ.පෙ.",

View File

@ -159,7 +159,6 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "(Ne-)vybrať všetky", "(De-)select all" => "(Ne-)vybrať všetky",
"New Contact" => "Nový kontakt", "New Contact" => "Nový kontakt",
"Download Contact" => "Stiahnuť kontakt",
"Groups" => "Skupiny", "Groups" => "Skupiny",
"Favorite" => "Obľúbené", "Favorite" => "Obľúbené",
"Delete Contact" => "Odstrániť kontakt", "Delete Contact" => "Odstrániť kontakt",
@ -200,6 +199,7 @@
"Address" => "Adresa", "Address" => "Adresa",
"Note" => "Poznámka", "Note" => "Poznámka",
"Web site" => "Web stránka", "Web site" => "Web stránka",
"Delete contact" => "Odstrániť kontakt",
"Preferred" => "Uprednostňované", "Preferred" => "Uprednostňované",
"Please specify a valid email address." => "Prosím zadajte platnú e-mailovú adresu.", "Please specify a valid email address." => "Prosím zadajte platnú e-mailovú adresu.",
"someone@example.com" => "niekto@niečo.sk", "someone@example.com" => "niekto@niečo.sk",
@ -238,7 +238,6 @@
"Add notes here." => "Tu môžete pridať poznámky.", "Add notes here." => "Tu môžete pridať poznámky.",
"Add field" => "Pridať pole", "Add field" => "Pridať pole",
"Download contact" => "Stiahnuť kontakt", "Download contact" => "Stiahnuť kontakt",
"Delete contact" => "Odstrániť kontakt",
"The temporary image has been removed from cache." => "Dočasný obrázok bol odstránený z cache.", "The temporary image has been removed from cache." => "Dočasný obrázok bol odstránený z cache.",
"Edit address" => "Upraviť adresu", "Edit address" => "Upraviť adresu",
"Type" => "Typ", "Type" => "Typ",

View File

@ -159,7 +159,6 @@
"OK" => "V redu", "OK" => "V redu",
"(De-)select all" => "(Od-)izberi vse", "(De-)select all" => "(Od-)izberi vse",
"New Contact" => "Nov stik", "New Contact" => "Nov stik",
"Download Contact" => "Prenesi stik",
"Groups" => "Skupine", "Groups" => "Skupine",
"Favorite" => "Priljubljen", "Favorite" => "Priljubljen",
"Delete Contact" => "Izbriši stik", "Delete Contact" => "Izbriši stik",
@ -200,6 +199,7 @@
"Address" => "Naslov", "Address" => "Naslov",
"Note" => "Opomba", "Note" => "Opomba",
"Web site" => "Spletna stran", "Web site" => "Spletna stran",
"Delete contact" => "Izbriši stik",
"Preferred" => "Prednostno", "Preferred" => "Prednostno",
"Please specify a valid email address." => "Navesti je treba veljaven elektronski poštni naslov.", "Please specify a valid email address." => "Navesti je treba veljaven elektronski poštni naslov.",
"someone@example.com" => "nekdo@primer.com", "someone@example.com" => "nekdo@primer.com",
@ -238,7 +238,6 @@
"Add notes here." => "Opombe dodajte tukaj.", "Add notes here." => "Opombe dodajte tukaj.",
"Add field" => "Dodaj polje", "Add field" => "Dodaj polje",
"Download contact" => "Prejmi stik", "Download contact" => "Prejmi stik",
"Delete contact" => "Izbriši stik",
"The temporary image has been removed from cache." => "Začasna slika je odstranjena iz predpomnilnika.", "The temporary image has been removed from cache." => "Začasna slika je odstranjena iz predpomnilnika.",
"Edit address" => "Uredi naslov", "Edit address" => "Uredi naslov",
"Type" => "Vrsta", "Type" => "Vrsta",

View File

@ -1,6 +1,8 @@
<?php $TRANSLATIONS = array( <?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Greška u (de)aktiviranju adresara",
"No categories selected for deletion." => "Ни једна категорија није означена за брисање.", "No categories selected for deletion." => "Ни једна категорија није означена за брисање.",
"Information about vCard is incorrect. Please reload the page." => "Подаци о вКарти су неисправни. Поново учитајте страницу.", "Information about vCard is incorrect. Please reload the page." => "Подаци о вКарти су неисправни. Поново учитајте страницу.",
"Error loading image." => "Greška pri učitavanju slika",
"There is no error, the file uploaded with success" => "Нема грешке, фајл је успешно послат", "There is no error, the file uploaded with success" => "Нема грешке, фајл је успешно послат",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Послати фајл превазилази директиву upload_max_filesize из ", "The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Послати фајл превазилази директиву upload_max_filesize из ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Послати фајл превазилази директиву MAX_FILE_SIZE која је наведена у ХТМЛ форми", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Послати фајл превазилази директиву MAX_FILE_SIZE која је наведена у ХТМЛ форми",
@ -31,6 +33,10 @@
"Import" => "Увези", "Import" => "Увези",
"Groups" => "Групе", "Groups" => "Групе",
"Close" => "Затвори", "Close" => "Затвори",
"Delete current photo" => "Izbriši trenutnu fotografiju",
"Edit current photo" => "Izmeni trenutnu fotografiju",
"Upload new photo" => "Učitaj novu fotografiju",
"Select photo from ownCloud" => "Izaberi fotografiju sa ownCloud",
"Title" => "Наслов", "Title" => "Наслов",
"Organization" => "Организација", "Organization" => "Организација",
"Birthday" => "Рођендан", "Birthday" => "Рођендан",
@ -38,6 +44,7 @@
"Phone" => "Телефон", "Phone" => "Телефон",
"Email" => "Е-маил", "Email" => "Е-маил",
"Address" => "Адреса", "Address" => "Адреса",
"Delete contact" => "Обриши контакт",
"Preferred" => "Пожељан", "Preferred" => "Пожељан",
"City" => "Град", "City" => "Град",
"Country" => "Земља", "Country" => "Земља",
@ -45,13 +52,15 @@
"Export" => "Извези", "Export" => "Извези",
"Add Contact" => "Додај контакт", "Add Contact" => "Додај контакт",
"Download contact" => "Преузми контакт", "Download contact" => "Преузми контакт",
"Delete contact" => "Обриши контакт", "Edit address" => "Izmeni adresu",
"Type" => "Тип", "Type" => "Тип",
"PO Box" => "Поштански број", "PO Box" => "Поштански број",
"Extended" => "Прошири", "Extended" => "Прошири",
"Region" => "Регија", "Region" => "Регија",
"Zipcode" => "Зип код", "Zipcode" => "Зип код",
"Addressbook" => "Адресар", "Addressbook" => "Адресар",
"more info" => "више информација",
"iOS/OS X" => "iOS/OS X",
"Addressbooks" => "Адресар", "Addressbooks" => "Адресар",
"New Address Book" => "Нови адресар", "New Address Book" => "Нови адресар",
"Name" => "Име", "Name" => "Име",

View File

@ -159,7 +159,6 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "(Av-)markera alla", "(De-)select all" => "(Av-)markera alla",
"New Contact" => "Ny kontakt", "New Contact" => "Ny kontakt",
"Download Contact" => "Ladda ner kontakt",
"Groups" => "Grupper", "Groups" => "Grupper",
"Favorite" => "Favorit", "Favorite" => "Favorit",
"Delete Contact" => "Radera kontakt", "Delete Contact" => "Radera kontakt",
@ -200,6 +199,7 @@
"Address" => "Adress", "Address" => "Adress",
"Note" => "Notering", "Note" => "Notering",
"Web site" => "Webbplats", "Web site" => "Webbplats",
"Delete contact" => "Radera kontakt",
"Preferred" => "Föredragen", "Preferred" => "Föredragen",
"Please specify a valid email address." => "Vänligen ange en giltig e-postadress.", "Please specify a valid email address." => "Vänligen ange en giltig e-postadress.",
"someone@example.com" => "någon@exempel.com", "someone@example.com" => "någon@exempel.com",
@ -238,7 +238,6 @@
"Add notes here." => "Lägg till noteringar här.", "Add notes here." => "Lägg till noteringar här.",
"Add field" => "Lägg till fält", "Add field" => "Lägg till fält",
"Download contact" => "Ladda ner kontakt", "Download contact" => "Ladda ner kontakt",
"Delete contact" => "Radera kontakt",
"The temporary image has been removed from cache." => "Den tillfälliga bilden har raderats från cache.", "The temporary image has been removed from cache." => "Den tillfälliga bilden har raderats från cache.",
"Edit address" => "Editera adress", "Edit address" => "Editera adress",
"Type" => "Typ", "Type" => "Typ",

View File

@ -147,7 +147,6 @@
"OK" => "சரி ", "OK" => "சரி ",
"(De-)select all" => "எல்லாவற்றையும் தெரிவுசெய்க (செய்யாதிக-)", "(De-)select all" => "எல்லாவற்றையும் தெரிவுசெய்க (செய்யாதிக-)",
"New Contact" => "புதிய தொடர்பு", "New Contact" => "புதிய தொடர்பு",
"Download Contact" => "தொடர்பை பதிவிறக்குக",
"Groups" => "குழுக்கள்", "Groups" => "குழுக்கள்",
"Favorite" => "விருப்பமான", "Favorite" => "விருப்பமான",
"Delete Contact" => "தொடர்பை நீக்குக", "Delete Contact" => "தொடர்பை நீக்குக",
@ -188,6 +187,7 @@
"Address" => "முகவரி", "Address" => "முகவரி",
"Note" => "குறிப்பு", "Note" => "குறிப்பு",
"Web site" => "வலைய தளம்", "Web site" => "வலைய தளம்",
"Delete contact" => "தொடர்பை நீக்குக",
"Preferred" => "விரும்பிய", "Preferred" => "விரும்பிய",
"Please specify a valid email address." => "தயவுசெய்து செல்லுபடியான மின்னஞ்சல் முகவரியை குறிப்பிடுக.", "Please specify a valid email address." => "தயவுசெய்து செல்லுபடியான மின்னஞ்சல் முகவரியை குறிப்பிடுக.",
"someone@example.com" => "someone@example.com", "someone@example.com" => "someone@example.com",
@ -225,7 +225,6 @@
"Add notes here." => "குறிப்புக்களை இங்கே சேர்க்க", "Add notes here." => "குறிப்புக்களை இங்கே சேர்க்க",
"Add field" => "புலத்தை சேர்க்க", "Add field" => "புலத்தை சேர்க்க",
"Download contact" => "தொடர்பை தரவிறக்குக", "Download contact" => "தொடர்பை தரவிறக்குக",
"Delete contact" => "தொடர்பை நீக்குக",
"The temporary image has been removed from cache." => "தற்காலிக படம் இடைமாற்றுநினைவகத்திலிருந்து அகற்றப்படுகிறது.", "The temporary image has been removed from cache." => "தற்காலிக படம் இடைமாற்றுநினைவகத்திலிருந்து அகற்றப்படுகிறது.",
"Edit address" => "முகவரியை தொகுக்க", "Edit address" => "முகவரியை தொகுக்க",
"Type" => "வகை", "Type" => "வகை",

View File

@ -150,7 +150,6 @@
"OK" => "ตกลง", "OK" => "ตกลง",
"(De-)select all" => "ยกเลิกการเลือกทั้งหมด", "(De-)select all" => "ยกเลิกการเลือกทั้งหมด",
"New Contact" => "สร้างรายชื่อผู้ติดต่อใหม่", "New Contact" => "สร้างรายชื่อผู้ติดต่อใหม่",
"Download Contact" => "ดาวน์โหลดรายชื่อผู้ติดต่อ",
"Groups" => "กลุ่ม", "Groups" => "กลุ่ม",
"Favorite" => "รายการโปรด", "Favorite" => "รายการโปรด",
"Delete Contact" => "ลบรายชื่อผู้ติดต่อ", "Delete Contact" => "ลบรายชื่อผู้ติดต่อ",
@ -191,6 +190,7 @@
"Address" => "ที่อยู่", "Address" => "ที่อยู่",
"Note" => "หมายเหตุ", "Note" => "หมายเหตุ",
"Web site" => "เว็บไซต์", "Web site" => "เว็บไซต์",
"Delete contact" => "ลบข้อมูลการติดต่อ",
"Preferred" => "พิเศษ", "Preferred" => "พิเศษ",
"Please specify a valid email address." => "กรุณาระบุที่อยู่อีเมลที่ถูกต้อง", "Please specify a valid email address." => "กรุณาระบุที่อยู่อีเมลที่ถูกต้อง",
"someone@example.com" => "someone@example.com", "someone@example.com" => "someone@example.com",
@ -228,7 +228,6 @@
"Add notes here." => "เพิ่มหมายเหตุกำกับไว้ที่นี่", "Add notes here." => "เพิ่มหมายเหตุกำกับไว้ที่นี่",
"Add field" => "เพิ่มช่องรับข้อมูล", "Add field" => "เพิ่มช่องรับข้อมูล",
"Download contact" => "ดาวน์โหลดข้อมูลการติดต่อ", "Download contact" => "ดาวน์โหลดข้อมูลการติดต่อ",
"Delete contact" => "ลบข้อมูลการติดต่อ",
"The temporary image has been removed from cache." => "รูปภาพชั่วคราวดังกล่าวได้ถูกลบออกจากหน่วยความจำแคชแล้ว", "The temporary image has been removed from cache." => "รูปภาพชั่วคราวดังกล่าวได้ถูกลบออกจากหน่วยความจำแคชแล้ว",
"Edit address" => "แก้ไขที่อยู่", "Edit address" => "แก้ไขที่อยู่",
"Type" => "ประเภท", "Type" => "ประเภท",

View File

@ -140,6 +140,7 @@
"Address" => "Adres", "Address" => "Adres",
"Note" => "Not", "Note" => "Not",
"Web site" => "Web sitesi", "Web site" => "Web sitesi",
"Delete contact" => "Kişiyi sil",
"Preferred" => "Tercih edilen", "Preferred" => "Tercih edilen",
"Please specify a valid email address." => "Lütfen geçerli bir eposta adresi belirtin.", "Please specify a valid email address." => "Lütfen geçerli bir eposta adresi belirtin.",
"Mail to address" => "Eposta adresi", "Mail to address" => "Eposta adresi",
@ -169,7 +170,6 @@
"Add notes here." => "Notları buraya ekleyin.", "Add notes here." => "Notları buraya ekleyin.",
"Add field" => "Alan ekle", "Add field" => "Alan ekle",
"Download contact" => "Kişiyi indir", "Download contact" => "Kişiyi indir",
"Delete contact" => "Kişiyi sil",
"The temporary image has been removed from cache." => "Geçici resim ön bellekten silinmiştir.", "The temporary image has been removed from cache." => "Geçici resim ön bellekten silinmiştir.",
"Edit address" => "Adresi düzenle", "Edit address" => "Adresi düzenle",
"Type" => "Tür", "Type" => "Tür",

View File

@ -55,6 +55,7 @@
"Contact is not in this group." => "Контакт не в даній групі.", "Contact is not in this group." => "Контакт не в даній групі.",
"Contacts are not in this group." => "Контакти не в даній групі.", "Contacts are not in this group." => "Контакти не в даній групі.",
"A group named {group} already exists" => "Група з назвою {group} вже існує", "A group named {group} already exists" => "Група з назвою {group} вже існує",
"You can drag groups to\narrange them as you like." => "Ви можете перетягнути групи в\nрозташуйте їх як вам до вподоби.",
"All" => "Всі", "All" => "Всі",
"Favorites" => "Улюблені", "Favorites" => "Улюблені",
"Shared by {owner}" => "Опублікував {owner}", "Shared by {owner}" => "Опублікував {owner}",
@ -67,8 +68,14 @@
"Error adding to group." => "Помилка при додаванні у групу.", "Error adding to group." => "Помилка при додаванні у групу.",
"Error removing from group." => "Помилка при видаленні з групи.", "Error removing from group." => "Помилка при видаленні з групи.",
"There was an error opening a mail composer." => "Виникла помилка при відкриванні поштової програми.", "There was an error opening a mail composer." => "Виникла помилка при відкриванні поштової програми.",
"Deleting done. Click here to cancel reloading." => "Видалення завершено. Клацніть тут для скасування перезавантаження.",
"Add address book" => "Додати адресну книгу",
"Import done. Click here to cancel reloading." => "Імпорт завершено. Клацніть тут для скасування перезавантаження.",
"Not all files uploaded. Retrying..." => "Не всі файли завантажено. Повторна спроба...", "Not all files uploaded. Retrying..." => "Не всі файли завантажено. Повторна спроба...",
"Something went wrong with the upload, please retry." => "Щось пішло не так при завантаженні, будь ласка, повторіть.",
"Error" => "Помилка", "Error" => "Помилка",
"Importing from {filename}..." => "Імпорт з {filename}...",
"{success} imported, {failed} failed." => "{success} імпортовано, {failed} змарновано.",
"Importing..." => "Імпортування...", "Importing..." => "Імпортування...",
"Unable to upload your file as it is a directory or has 0 bytes" => "Неможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт", "Unable to upload your file as it is a directory or has 0 bytes" => "Неможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт",
"Upload Error" => "Помилка завантаження", "Upload Error" => "Помилка завантаження",
@ -144,12 +151,14 @@
"HomePage" => "Домашня Сторінка", "HomePage" => "Домашня Сторінка",
"New Group" => "Нова група", "New Group" => "Нова група",
"Settings" => "Налаштування", "Settings" => "Налаштування",
"Address books" => "Адресні книги",
"Import" => "Імпорт", "Import" => "Імпорт",
"Select files to import" => "Виберіть файли для імпорта",
"Select files" => "Виберіть файли",
"Import into:" => "Імпортувати в:", "Import into:" => "Імпортувати в:",
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "(Відміна) виділення усіх", "(De-)select all" => "(Відміна) виділення усіх",
"New Contact" => "Новий контакт", "New Contact" => "Новий контакт",
"Download Contact" => "Завантажити контакт",
"Groups" => "Групи", "Groups" => "Групи",
"Favorite" => "Улюблений", "Favorite" => "Улюблений",
"Delete Contact" => "Видалити контакт", "Delete Contact" => "Видалити контакт",
@ -180,9 +189,12 @@
"Nickname" => "Прізвисько", "Nickname" => "Прізвисько",
"Enter nickname" => "Ввести прізвисько", "Enter nickname" => "Ввести прізвисько",
"Title" => "Назва", "Title" => "Назва",
"Enter title" => "Введіть назву",
"Organization" => "Організація", "Organization" => "Організація",
"Enter organization" => "Введіть організацію",
"Birthday" => "День народження", "Birthday" => "День народження",
"Notes go here..." => "Тут будуть примітки...", "Notes go here..." => "Тут будуть примітки...",
"Export as VCF" => "Експорт як VCF",
"Add" => "Додати", "Add" => "Додати",
"Phone" => "Телефон", "Phone" => "Телефон",
"Email" => "Ел.пошта", "Email" => "Ел.пошта",
@ -190,6 +202,7 @@
"Address" => "Адреса", "Address" => "Адреса",
"Note" => "Примітка", "Note" => "Примітка",
"Web site" => "Веб-сайт", "Web site" => "Веб-сайт",
"Delete contact" => "Видалити контакт",
"Preferred" => "Пріоритетний", "Preferred" => "Пріоритетний",
"Please specify a valid email address." => "Будь ласка, вкажіть вірну адресу електронної пошти.", "Please specify a valid email address." => "Будь ласка, вкажіть вірну адресу електронної пошти.",
"someone@example.com" => "someone@example.com", "someone@example.com" => "someone@example.com",
@ -208,12 +221,14 @@
"Your city" => "Ваше місто", "Your city" => "Ваше місто",
"City" => "Місто", "City" => "Місто",
"Some region" => "Деякий регіон", "Some region" => "Деякий регіон",
"State or province" => "Область",
"Your country" => "Ваша країна", "Your country" => "Ваша країна",
"Country" => "Країна", "Country" => "Країна",
"Instant Messenger" => "Instant Messenger", "Instant Messenger" => "Instant Messenger",
"Delete IM" => "Видалити IM", "Delete IM" => "Видалити IM",
"Share" => "Поділитися", "Share" => "Поділитися",
"Export" => "Експорт", "Export" => "Експорт",
"CardDAV link" => "CardDAV посилання",
"Add Contact" => "Додати контакт", "Add Contact" => "Додати контакт",
"Drop photo to upload" => "Піднесіть фото для завантаження", "Drop photo to upload" => "Піднесіть фото для завантаження",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format custom, Short name, Full name, Reverse or Reverse with comma", "Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format custom, Short name, Full name, Reverse or Reverse with comma",
@ -227,7 +242,6 @@
"Add notes here." => "Додайте сюди примітки.", "Add notes here." => "Додайте сюди примітки.",
"Add field" => "Додати поле", "Add field" => "Додати поле",
"Download contact" => "Завантажити контакт", "Download contact" => "Завантажити контакт",
"Delete contact" => "Видалити контакт",
"The temporary image has been removed from cache." => "Тимчасове зображення було видалене з кешу.", "The temporary image has been removed from cache." => "Тимчасове зображення було видалене з кешу.",
"Edit address" => "Редагувати адреси", "Edit address" => "Редагувати адреси",
"Type" => "Тип", "Type" => "Тип",
@ -240,11 +254,11 @@
"Zipcode" => "Поштовий індекс", "Zipcode" => "Поштовий індекс",
"Addressbook" => "Адресна книга", "Addressbook" => "Адресна книга",
"Hon. prefixes" => "Високоповажні префікси", "Hon. prefixes" => "Високоповажні префікси",
"Miss" => "Miss", "Miss" => "Пані",
"Ms" => "Пані", "Ms" => "Пані",
"Mr" => "Пан", "Mr" => "Пан",
"Sir" => "Sir", "Sir" => "Пан",
"Mrs" => "Mrs", "Mrs" => "Панове",
"Dr" => "Доктор", "Dr" => "Доктор",
"Given name" => "Ім'я", "Given name" => "Ім'я",
"Family name" => "Прізвище", "Family name" => "Прізвище",

View File

@ -150,7 +150,6 @@
"OK" => "Chấp nhận", "OK" => "Chấp nhận",
"(De-)select all" => "(Hủy) chọn tất cả", "(De-)select all" => "(Hủy) chọn tất cả",
"New Contact" => "Liên lạc mới", "New Contact" => "Liên lạc mới",
"Download Contact" => "Tải liên lạc",
"Groups" => "Nhóm", "Groups" => "Nhóm",
"Favorite" => "Ưu thích", "Favorite" => "Ưu thích",
"Delete Contact" => "Xóa liên lạc", "Delete Contact" => "Xóa liên lạc",
@ -191,6 +190,7 @@
"Address" => "Địa chỉ", "Address" => "Địa chỉ",
"Note" => "Chú thích", "Note" => "Chú thích",
"Web site" => "Web site", "Web site" => "Web site",
"Delete contact" => "Xóa liên lạc",
"Preferred" => "Được ưu tiên", "Preferred" => "Được ưu tiên",
"Please specify a valid email address." => "Vui lòng nhập địa chỉ Email hợp lệ.", "Please specify a valid email address." => "Vui lòng nhập địa chỉ Email hợp lệ.",
"someone@example.com" => "someone@example.com", "someone@example.com" => "someone@example.com",
@ -228,7 +228,6 @@
"Add notes here." => "Thêm chú thích", "Add notes here." => "Thêm chú thích",
"Add field" => "Thêm trường mới", "Add field" => "Thêm trường mới",
"Download contact" => "Tải liên lạc", "Download contact" => "Tải liên lạc",
"Delete contact" => "Xóa liên lạc",
"The temporary image has been removed from cache." => "Những hình ảnh tạm thời đã được gỡ bỏ từ bộ nhớ cache.", "The temporary image has been removed from cache." => "Những hình ảnh tạm thời đã được gỡ bỏ từ bộ nhớ cache.",
"Edit address" => "Sửa địa chỉ", "Edit address" => "Sửa địa chỉ",
"Type" => "Loại", "Type" => "Loại",

View File

@ -140,6 +140,7 @@
"Address" => "地址", "Address" => "地址",
"Note" => "备注", "Note" => "备注",
"Web site" => "网站", "Web site" => "网站",
"Delete contact" => "删除联系人",
"Preferred" => "偏好", "Preferred" => "偏好",
"Please specify a valid email address." => "请指定有效的电子邮件地址。", "Please specify a valid email address." => "请指定有效的电子邮件地址。",
"Mail to address" => "向此地址发送邮件", "Mail to address" => "向此地址发送邮件",
@ -169,7 +170,6 @@
"Add notes here." => "在此添加备注。", "Add notes here." => "在此添加备注。",
"Add field" => "添加字段", "Add field" => "添加字段",
"Download contact" => "下载联系人", "Download contact" => "下载联系人",
"Delete contact" => "删除联系人",
"The temporary image has been removed from cache." => "临时相片已从缓存中移除。", "The temporary image has been removed from cache." => "临时相片已从缓存中移除。",
"Edit address" => "编辑地址", "Edit address" => "编辑地址",
"Type" => "类型", "Type" => "类型",

View File

@ -129,7 +129,6 @@
"OK" => "OK", "OK" => "OK",
"(De-)select all" => "反选全部", "(De-)select all" => "反选全部",
"New Contact" => "新建联系人", "New Contact" => "新建联系人",
"Download Contact" => "下载联系人",
"Groups" => "分组", "Groups" => "分组",
"Favorite" => "最爱", "Favorite" => "最爱",
"Delete Contact" => "删除联系人", "Delete Contact" => "删除联系人",
@ -168,6 +167,7 @@
"Address" => "地址", "Address" => "地址",
"Note" => "注释", "Note" => "注释",
"Web site" => "网址", "Web site" => "网址",
"Delete contact" => "删除联系人",
"Preferred" => "偏好", "Preferred" => "偏好",
"Please specify a valid email address." => "请指定合法的电子邮件地址", "Please specify a valid email address." => "请指定合法的电子邮件地址",
"someone@example.com" => "someone@example.com", "someone@example.com" => "someone@example.com",
@ -203,7 +203,6 @@
"Add notes here." => "添加注释。", "Add notes here." => "添加注释。",
"Add field" => "添加字段", "Add field" => "添加字段",
"Download contact" => "下载联系人", "Download contact" => "下载联系人",
"Delete contact" => "删除联系人",
"The temporary image has been removed from cache." => "临时图像文件已从缓存中删除", "The temporary image has been removed from cache." => "临时图像文件已从缓存中删除",
"Edit address" => "编辑地址", "Edit address" => "编辑地址",
"Type" => "类型", "Type" => "类型",

View File

@ -99,6 +99,7 @@
"Email" => "電子郵件", "Email" => "電子郵件",
"Address" => "地址", "Address" => "地址",
"Note" => "註解", "Note" => "註解",
"Delete contact" => "刪除通訊錄",
"Preferred" => "首選", "Preferred" => "首選",
"Please specify a valid email address." => "註填入合法的電子郵件住址", "Please specify a valid email address." => "註填入合法的電子郵件住址",
"Mail to address" => "寄送住址", "Mail to address" => "寄送住址",
@ -126,7 +127,6 @@
"Add notes here." => "在這裡新增註解", "Add notes here." => "在這裡新增註解",
"Add field" => "新增欄位", "Add field" => "新增欄位",
"Download contact" => "下載通訊錄", "Download contact" => "下載通訊錄",
"Delete contact" => "刪除通訊錄",
"Edit address" => "編輯地址", "Edit address" => "編輯地址",
"Type" => "類型", "Type" => "類型",
"PO Box" => "通訊地址", "PO Box" => "通訊地址",

274
lib/addressbookprovider.php Normal file
View File

@ -0,0 +1,274 @@
<?php
/**
* ownCloud - AddressbookProvider
*
* @author Thomas Tanghus
* @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Contacts;
/**
* This class manages our addressbooks.
*/
class AddressbookProvider implements \OCP\IAddressBook {
const CONTACT_TABLE = '*PREFIX*contacts_cards';
const PROPERTY_TABLE = '*PREFIX*contacts_cards_properties';
/**
* Addressbook id
* @var integer
*/
public $id;
/**
* Addressbook info array
* @var array
*/
public $addressbook;
/**
* Constructor
* @param integer $id
*/
public function __construct($id) {
$this->id = $id;
\Sabre\VObject\Property::$classMap['GEO'] = 'Sabre\\VObject\\Property\\Compound';
}
public function getAddressbook() {
if(!$this->addressbook) {
$this->addressbook = Addressbook::find($this->id);
}
return $this->addressbook;
}
/**
* @return string defining the technical unique key
*/
public function getKey() {
$book = $this->getAddressbook();
return $book['uri'];
}
/**
* In comparison to getKey() this function returns a human readable (maybe translated) name
* @return mixed
*/
public function getDisplayName() {
$book = $this->getAddressbook();
return $book['displayname'];
}
/**
* @return mixed
*/
public function getPermissions() {
$book = $this->getAddressbook();
return $book['permissions'];
}
private function getProperty(&$results, $row) {
if(!$row['name'] || !$row['value']) {
return false;
}
$value = null;
switch($row['name']) {
case 'PHOTO':
$value = 'VALUE=uri:' . \OCP\Util::linkToAbsolute('contacts', 'photo.php') . '?id=' . $row['contactid'];
break;
case 'N':
case 'ORG':
case 'ADR':
case 'GEO':
case 'CATEGORIES':
$property = \Sabre\VObject\Property::create($row['name'], $row['value']);
$value = $property->getParts();
break;
default:
$value = $value = strtr($row['value'], array('\,' => ',', '\;' => ';'));
break;
}
if(in_array($row['name'], App::$multi_properties)) {
if(!isset($results[$row['contactid']])) {
$results[$row['contactid']] = array('id' => $row['contactid'], $row['name'] => array($value));
} elseif(!isset($results[$row['contactid']][$row['name']])) {
$results[$row['contactid']][$row['name']] = array($value);
} else {
$results[$row['contactid']][$row['name']][] = $value;
}
} else {
if(!isset($results[$row['contactid']])) {
$results[$row['contactid']] = array('id' => $row['contactid'], $row['name'] => $value);
} elseif(!isset($results[$row['contactid']][$row['name']])) {
$results[$row['contactid']][$row['name']] = $value;
}
}
}
/**
* @param $pattern
* @param $searchProperties
* @param $options
* @return array|false
*/
public function search($pattern, $searchProperties, $options) {
$ids = array();
$results = array();
$query = 'SELECT DISTINCT `contactid` FROM `' . self::PROPERTY_TABLE . '` WHERE 1 AND (';
foreach($searchProperties as $property) {
$query .= '(`name` = "' . $property . '" AND `value` LIKE "%' . $pattern . '%") OR ';
}
$query = substr($query, 0, strlen($query) - 4);
$query .= ')';
$stmt = \OCP\DB::prepare($query);
$result = $stmt->execute();
if (\OC_DB::isError($result)) {
\OC_Log::write('contacts', __METHOD__ . 'DB error: ' . \OC_DB::getErrorMessage($result),
\OCP\Util::ERROR);
return false;
}
while( $row = $result->fetchRow()) {
$ids[] = $row['contactid'];
}
$query = 'SELECT `' . self::CONTACT_TABLE . '`.`addressbookid`, `' . self::PROPERTY_TABLE . '`.`contactid`, `'
. self::PROPERTY_TABLE . '`.`name`, `' . self::PROPERTY_TABLE . '`.`value` FROM `'
. self::PROPERTY_TABLE . '`,`' . self::CONTACT_TABLE . '` WHERE `'
. self::CONTACT_TABLE . '`.`addressbookid` = \'' . $this->id . '\' AND `'
. self::PROPERTY_TABLE . '`.`contactid` = `' . self::CONTACT_TABLE . '`.`id` AND `'
. self::PROPERTY_TABLE . '`.`contactid` IN (' . join(',', array_fill(0, count($ids), '?')) . ')';
//\OC_Log::write('contacts', __METHOD__ . 'DB query: ' . $query, \OCP\Util::DEBUG);
$stmt = \OCP\DB::prepare($query);
$result = $stmt->execute($ids);
while( $row = $result->fetchRow()) {
$this->getProperty($results, $row);
}
return $results;
}
/**
* @param $properties
* @return mixed
*/
public function createOrUpdate($properties) {
$id = null;
$vcard = null;
if(array_key_exists('id', $properties)) {
// TODO: test if $id belongs to this addressbook
$id = $properties['id'];
// TODO: Test $vcard
$vcard = App::getContactVCard($properties['id']);
foreach(array_keys($properties) as $name) {
if(isset($vcard->{$name})) {
unset($vcard->{$name});
}
}
} else {
$vcard = \Sabre\VObject\Component::create('VCARD');
$uid = substr(md5(rand().time()), 0, 10);
$vcard->add('UID', $uid);
try {
$id = VCard::add($this->id, $vcard, null, true);
} catch(Exception $e) {
\OC_Log::write('contacts', __METHOD__ . ' ' . $e->getMessage(), \OCP\Util::ERROR);
return false;
}
}
foreach($properties as $name => $value) {
switch($name) {
case 'ADR':
case 'N':
if(is_array($value)) {
$property = \Sabre\VObject\Property::create($name);
$property->setParts($value);
$vcard->add($property);
} else {
$vcard->{$name} = $value;
}
break;
case 'BDAY':
// TODO: try/catch
$date = New \DateTime($value);
$vcard->BDAY = $date->format('Y-m-d');
$vcard->BDAY->VALUE = 'DATE';
break;
case 'EMAIL':
case 'TEL':
case 'IMPP': // NOTE: We don't know if it's GTalk, Jabber etc. only the protocol
case 'URL':
if(is_array($value)) {
foreach($value as $val) {
$vcard->add($name, strip_tags($val));
}
} else {
$vcard->add($name, strip_tags($value));
}
default:
$vcard->{$name} = $value;
break;
}
}
try {
VCard::edit($id, $vcard);
} catch(Exception $e) {
\OC_Log::write('contacts', __METHOD__ . ' ' . $e->getMessage(), \OCP\Util::ERROR);
return false;
}
$asarray = VCard::structureContact($vcard);
$asarray['id'] = $id;
return $asarray;
}
/**
* @param $id
* @return mixed
*/
public function delete($id) {
try {
$query = 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `id` = ? AND `addressbookid` = ?';
$stmt = \OCP\DB::prepare($query);
$result = $stmt->execute(array($id, $this->id));
if (\OC_DB::isError($result)) {
\OC_Log::write('contacts', __METHOD__ . 'DB error: ' . \OC_DB::getErrorMessage($result),
\OCP\Util::ERROR);
return false;
}
if($result->numRows() === 0) {
\OC_Log::write('contacts', __METHOD__
. 'Contact with id ' . $id . 'doesn\'t belong to addressbook with id ' . $this->id,
\OCP\Util::ERROR);
return false;
}
} catch(\Exception $e) {
\OCP\Util::writeLog('contacts', __METHOD__ . ', exception: ' . $e->getMessage(),
\OCP\Util::ERROR);
return false;
}
return VCard::delete($id);
}
}

View File

@ -92,7 +92,7 @@ class Hooks{
continue; continue;
} }
$birthday = $vcard->BDAY; $birthday = $vcard->BDAY;
if ($birthday) { if ((string)$birthday) {
$date = new \DateTime($birthday); $date = new \DateTime($birthday);
$vevent = VObject\Component::create('VEVENT'); $vevent = VObject\Component::create('VEVENT');
//$vevent->setDateTime('LAST-MODIFIED', new DateTime($vcard->REV)); //$vevent->setDateTime('LAST-MODIFIED', new DateTime($vcard->REV));

View File

@ -153,7 +153,7 @@ class OC_Connector_Sabre_CardDAV extends Sabre_CardDAV_Backend_Abstract {
'id' => $i['id'], 'id' => $i['id'],
//'carddata' => $i['carddata'], //'carddata' => $i['carddata'],
'size' => strlen($i['carddata']), 'size' => strlen($i['carddata']),
'etag' => md5($i['carddata']), 'etag' => '"' . md5($i['carddata']) . '"',
'uri' => $i['uri'], 'uri' => $i['uri'],
'lastmodified' => $i['lastmodified'] ); 'lastmodified' => $i['lastmodified'] );
} }

View File

@ -1,5 +1,4 @@
<div id='notification'></div> <div id='notification'></div>
<div id="appsettings" class="popup topright hidden"></div>
<script type='text/javascript'> <script type='text/javascript'>
var is_indexed = <?php echo $_['is_indexed'] == 'yes' ? 'true' : 'false'; ?>; var is_indexed = <?php echo $_['is_indexed'] == 'yes' ? 'true' : 'false'; ?>;
var totalurl = '<?php echo OCP\Util::linkToRemote('carddav'); ?>addressbooks'; var totalurl = '<?php echo OCP\Util::linkToRemote('carddav'); ?>addressbooks';
@ -59,13 +58,13 @@
<div id="contactsheader"> <div id="contactsheader">
<input type="checkbox" id="toggle_all" title="<?php echo $l->t('(De-)select all'); ?>" /> <input type="checkbox" id="toggle_all" title="<?php echo $l->t('(De-)select all'); ?>" />
<div class="actions"> <div class="actions">
<button class="addcontact"><?php echo $l->t('New Contact'); ?></button> <button class="add svg action text"><?php echo $l->t('New Contact'); ?></button>
<button class="download control" title="<?php echo $l->t('Download Contact'); ?>"></button> <button class="download svg action text"><?php echo $l->t('Download Contact(s)'); ?></button>
<select class="groups control" name="groups"> <select class="groups svg action text button" name="groups">
<option value="-1" disabled="disabled" selected="selected"><?php echo $l->t('Groups'); ?></option> <option value="-1" disabled="disabled" selected="selected"><?php echo $l->t('Groups'); ?></option>
</select> </select>
<button class="favorite inactive control" title="<?php echo $l->t('Favorite'); ?>"></button> <button class="favorite action svg inactive control" title="<?php echo $l->t('Favorite'); ?>"></button>
<button class="delete control" title="<?php echo $l->t('Delete Contact'); ?>"></button> <a class="delete action" title="<?php echo $l->t('Delete Contact'); ?>"></a>
</div> </div>
</div> </div>
<div id="rightcontent" class="loading"> <div id="rightcontent" class="loading">
@ -148,7 +147,7 @@
</td> </td>
<td class="email"> <td class="email">
<a href="mailto:{email}">{email}</a> <a href="mailto:{email}">{email}</a>
<a class="mailto hidden" title="<?php echo $l->t('Compose mail'); ?>"></a> <a class="svg mailto hidden" title="<?php echo $l->t('Compose mail'); ?>"></a>
</td> </td>
<td class="tel">{tel}</td> <td class="tel">{tel}</td>
<td class="adr">{adr}</td> <td class="adr">{adr}</td>
@ -172,10 +171,10 @@
<li> <li>
<div id="photowrapper" class="propertycontainer" data-element="photo"> <div id="photowrapper" class="propertycontainer" data-element="photo">
<ul id="phototools" class="transparent hidden"> <ul id="phototools" class="transparent hidden">
<li><a class="svg delete" title="<?php echo $l->t('Delete current photo'); ?>"></a></li> <li><a class="action delete" title="<?php echo $l->t('Delete current photo'); ?>"></a></li>
<li><a class="svg edit" title="<?php echo $l->t('Edit current photo'); ?>"></a></li> <li><a class="action edit" title="<?php echo $l->t('Edit current photo'); ?>"></a></li>
<li><a class="svg upload" title="<?php echo $l->t('Upload new photo'); ?>"></a></li> <li><a class="action upload" title="<?php echo $l->t('Upload new photo'); ?>"></a></li>
<li><a class="svg cloud" title="<?php echo $l->t('Select photo from ownCloud'); ?>"></a></li> <li><a class="action cloud" title="<?php echo $l->t('Select photo from ownCloud'); ?>"></a></li>
</ul> </ul>
<a class="favorite action {favorite}"></a> <a class="favorite action {favorite}"></a>
</div> </div>
@ -262,9 +261,10 @@
</li> </li>
</ul> </ul>
<footer> <footer>
<button class="close float tooltipped downwards" title="<?php echo $l->t('Close'); ?>"><?php echo $l->t('Close'); ?></button> <button class="cancel action text tooltipped downwards" title="<?php echo $l->t('Cancel'); ?>"><?php echo $l->t('Cancel'); ?></button>
<button class="export float tooltipped downwards" title="<?php echo $l->t('Export as VCF'); ?>"><?php echo $l->t('Download'); ?></button> <button class="close text tooltipped downwards" title="<?php echo $l->t('Close'); ?>"><?php echo $l->t('Close'); ?></button>
<select id="addproperty"> <button class="export action text tooltipped downwards" title="<?php echo $l->t('Export as VCF'); ?>"><?php echo $l->t('Download'); ?></button>
<select class="add action text button" id="addproperty">
<option value=""><?php echo $l->t('Add'); ?></option> <option value=""><?php echo $l->t('Add'); ?></option>
<option value="ORG"><?php echo $l->t('Organization'); ?></option> <option value="ORG"><?php echo $l->t('Organization'); ?></option>
<option value="NICKNAME"><?php echo $l->t('Nickname'); ?></option> <option value="NICKNAME"><?php echo $l->t('Nickname'); ?></option>
@ -277,7 +277,7 @@
<option value="URL"><?php echo $l->t('Web site'); ?></option> <option value="URL"><?php echo $l->t('Web site'); ?></option>
<option value="CATEGORIES"><?php echo $l->t('Groups'); ?></option> <option value="CATEGORIES"><?php echo $l->t('Groups'); ?></option>
</select> </select>
<button class="deletecontact float right tooltipped downwards" title="<?php echo $l->t('Delete contact'); ?>"><?php echo $l->t('Delete'); ?></button> <button class="delete action text float right tooltipped downwards" title="<?php echo $l->t('Delete contact'); ?>"><?php echo $l->t('Delete'); ?></button>
</footer> </footer>
</section> </section>
</form> </form>
@ -382,12 +382,12 @@
<?php echo OCP\html_select_options($_['impp_types'], array()) ?> <?php echo OCP\html_select_options($_['impp_types'], array()) ?>
</select> </select>
<input type="checkbox" class="parameter impp tooltipped downwards" name="parameters[TYPE][]" value="PREF" title="<?php echo $l->t('Preferred'); ?>" /> <input type="checkbox" class="parameter impp tooltipped downwards" name="parameters[TYPE][]" value="PREF" title="<?php echo $l->t('Preferred'); ?>" />
</span>
<div class="select_wrapper"> <div class="select_wrapper">
<select class="rtl parameter label impp" data-parameter="X-SERVICE-TYPE" name="parameters[X-SERVICE-TYPE]"> <select class="ltr parameter label impp" data-parameter="X-SERVICE-TYPE" name="parameters[X-SERVICE-TYPE]">
<?php echo OCP\html_select_options($_['im_protocols'], array()) ?> <?php echo OCP\html_select_options($_['im_protocols'], array()) ?>
</select> </select>
</div> </div>
</span>
<input type="text" class="nonempty value" name="value" value="{value}" <input type="text" class="nonempty value" name="value" value="{value}"
placeholder="<?php echo $l->t('Instant Messenger'); ?>" required /> placeholder="<?php echo $l->t('Instant Messenger'); ?>" required />
<span class="listactions"> <span class="listactions">