summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2012-01-30 20:29:33 +0100
committerRobin Appelman <icewind@owncloud.com>2012-01-30 20:29:33 +0100
commit4522d19b4c214676b8a0d4067c3a2d1bc63618bc (patch)
tree68725926f48072805e321f3507237df33814472a /apps
parent355262635838860f5f17b2cf20132adddd7af77e (diff)
parent45038af948cd07ffc74efc8d4b0282fa11b7de7e (diff)
downloadnextcloud-server-4522d19b4c214676b8a0d4067c3a2d1bc63618bc.tar.gz
nextcloud-server-4522d19b4c214676b8a0d4067c3a2d1bc63618bc.zip
merge master into filesystem
Diffstat (limited to 'apps')
-rw-r--r--apps/calendar/ajax/createcalendar.php12
-rw-r--r--apps/calendar/ajax/editeventform.php31
-rw-r--r--apps/calendar/ajax/updatecalendar.php12
-rw-r--r--apps/calendar/appinfo/app.php6
-rw-r--r--apps/calendar/css/style.css4
-rwxr-xr-xapps/calendar/img/icon.svg68
-rw-r--r--apps/calendar/index.php2
-rw-r--r--apps/calendar/js/calendar.js59
-rw-r--r--apps/calendar/l10n/ar.php75
-rw-r--r--apps/calendar/l10n/ca.php8
-rw-r--r--apps/calendar/l10n/cs_CZ.php8
-rw-r--r--apps/calendar/l10n/da.php13
-rw-r--r--apps/calendar/l10n/de.php12
-rw-r--r--apps/calendar/l10n/el.php8
-rw-r--r--apps/calendar/l10n/es.php8
-rw-r--r--apps/calendar/l10n/et_EE.php77
-rw-r--r--apps/calendar/l10n/gl.php3
-rw-r--r--apps/calendar/l10n/ja_JP.php75
-rw-r--r--apps/calendar/l10n/nl.php1
-rw-r--r--apps/calendar/l10n/ro.php8
-rw-r--r--apps/calendar/l10n/ru.php77
-rw-r--r--apps/calendar/l10n/sk_SK.php66
-rw-r--r--apps/calendar/l10n/th_TH.php155
-rw-r--r--apps/calendar/l10n/zh_CN.php77
-rwxr-xr-xapps/calendar/templates/calendar.php39
-rw-r--r--apps/calendar/templates/lAfix.php39
-rw-r--r--apps/calendar/templates/part.choosecalendar.php2
-rw-r--r--apps/contacts/ajax/addproperty.php5
-rw-r--r--apps/contacts/ajax/getdetails.php3
-rw-r--r--apps/contacts/ajax/setproperty.php2
-rw-r--r--apps/contacts/appinfo/app.php2
-rw-r--r--apps/contacts/l10n/ar.php36
-rw-r--r--apps/contacts/l10n/ca.php4
-rw-r--r--apps/contacts/l10n/cs_CZ.php22
-rw-r--r--apps/contacts/l10n/da.php22
-rw-r--r--apps/contacts/l10n/de.php22
-rw-r--r--apps/contacts/l10n/el.php2
-rw-r--r--apps/contacts/l10n/eo.php2
-rw-r--r--apps/contacts/l10n/es.php24
-rw-r--r--apps/contacts/l10n/et_EE.php36
-rw-r--r--apps/contacts/l10n/eu.php2
-rw-r--r--apps/contacts/l10n/fr.php2
-rw-r--r--apps/contacts/l10n/gl.php2
-rw-r--r--apps/contacts/l10n/he.php2
-rw-r--r--apps/contacts/l10n/hr.php2
-rw-r--r--apps/contacts/l10n/hu_HU.php2
-rw-r--r--apps/contacts/l10n/ia.php1
-rw-r--r--apps/contacts/l10n/it.php2
-rw-r--r--apps/contacts/l10n/ja_JP.php36
-rw-r--r--apps/contacts/l10n/lb.php2
-rw-r--r--apps/contacts/l10n/nl.php2
-rw-r--r--apps/contacts/l10n/nn_NO.php2
-rw-r--r--apps/contacts/l10n/pl.php2
-rw-r--r--apps/contacts/l10n/pt_BR.php2
-rw-r--r--apps/contacts/l10n/pt_PT.php2
-rw-r--r--apps/contacts/l10n/ro.php2
-rw-r--r--apps/contacts/l10n/ru.php36
-rw-r--r--apps/contacts/l10n/sk_SK.php30
-rw-r--r--apps/contacts/l10n/sl.php2
-rw-r--r--apps/contacts/l10n/sr.php2
-rw-r--r--apps/contacts/l10n/sr@latin.php2
-rw-r--r--apps/contacts/l10n/sv.php2
-rw-r--r--apps/contacts/l10n/th_TH.php64
-rw-r--r--apps/contacts/l10n/tr.php2
-rw-r--r--apps/contacts/l10n/zh_CN.php36
-rw-r--r--apps/contacts/lib/app.php14
-rw-r--r--apps/contacts/lib/vcard.php16
-rw-r--r--apps/contacts/photo.php55
-rw-r--r--apps/contacts/templates/part.addcardform.php2
-rw-r--r--apps/contacts/templates/part.chooseaddressbook.php4
-rw-r--r--apps/contacts/templates/part.contacts.php13
-rw-r--r--apps/contacts/thumbnail.php38
-rw-r--r--apps/files_sharing/appinfo/app.php1
-rw-r--r--apps/files_sharing/lib_share.php32
-rw-r--r--apps/files_texteditor/js/editor.js3
-rw-r--r--apps/gallery/ajax/cover.php6
-rw-r--r--apps/gallery/ajax/galleryOp.php4
-rw-r--r--apps/gallery/appinfo/info.xml2
-rw-r--r--apps/gallery/css/styles.css25
-rw-r--r--apps/gallery/img/delete.pngbin0 -> 275 bytes
-rw-r--r--apps/gallery/img/rename.pngbin0 -> 310 bytes
-rw-r--r--apps/gallery/img/share.pngbin0 -> 377 bytes
-rw-r--r--apps/gallery/js/album_cover.js108
-rw-r--r--apps/gallery/js/albums.js39
-rw-r--r--apps/gallery/l10n/ar.php10
-rw-r--r--apps/gallery/l10n/ca.php5
-rw-r--r--apps/gallery/l10n/cs_CZ.php10
-rw-r--r--apps/gallery/l10n/da.php10
-rw-r--r--apps/gallery/l10n/de.php5
-rw-r--r--apps/gallery/l10n/es.php10
-rw-r--r--apps/gallery/l10n/et_EE.php5
-rw-r--r--apps/gallery/l10n/fr.php4
-rw-r--r--apps/gallery/l10n/ia.php3
-rw-r--r--apps/gallery/l10n/it.php5
-rw-r--r--apps/gallery/l10n/ja_JP.php10
-rw-r--r--apps/gallery/l10n/pl.php12
-rw-r--r--apps/gallery/l10n/ru.php9
-rw-r--r--apps/gallery/l10n/sk_SK.php5
-rw-r--r--apps/gallery/l10n/th_TH.php10
-rw-r--r--apps/gallery/l10n/zh_CN.php6
-rw-r--r--apps/gallery/lib/album.php6
-rw-r--r--apps/gallery/lib/hooks_handlers.php22
-rw-r--r--apps/gallery/lib/images_utils.php6
-rw-r--r--apps/gallery/lib/photo.php2
-rw-r--r--apps/gallery/lib/scanner.php13
-rw-r--r--apps/gallery/templates/index.php20
-rw-r--r--apps/gallery/templates/view_album.php13
-rw-r--r--apps/media/ajax/api.php3
-rw-r--r--apps/media/css/music.css10
-rw-r--r--apps/media/js/collection.js75
-rw-r--r--apps/media/js/scanner.js22
-rw-r--r--apps/media/l10n/th_TH.php13
-rw-r--r--apps/media/lib_ampache.php71
-rw-r--r--apps/media/lib_collection.php2
-rw-r--r--apps/media/lib_media.php2
-rw-r--r--apps/media/lib_scanner.php2
-rw-r--r--apps/media/server/xml.server.php3
-rw-r--r--apps/media/templates/music.php2
118 files changed, 1717 insertions, 419 deletions
diff --git a/apps/calendar/ajax/createcalendar.php b/apps/calendar/ajax/createcalendar.php
index f8b5974f54c..b719b207c74 100644
--- a/apps/calendar/ajax/createcalendar.php
+++ b/apps/calendar/ajax/createcalendar.php
@@ -12,6 +12,18 @@ require_once('../../../lib/base.php');
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar');
+if(trim($_POST['name']) == ''){
+ OC_JSON::error(array('message'=>'empty'));
+ exit;
+}
+$calendars = OC_Calendar_Calendar::allCalendars(OC_User::getUser());
+foreach($calendars as $cal){
+ if($cal['displayname'] == $_POST['name']){
+ OC_JSON::error(array('message'=>'namenotavailable'));
+ exit;
+ }
+}
+
$userid = OC_User::getUser();
$calendarid = OC_Calendar_Calendar::addCalendar($userid, $_POST['name'], 'VEVENT,VTODO,VJOURNAL', null, 0, $_POST['color']);
OC_Calendar_Calendar::setCalendarActive($calendarid, 1);
diff --git a/apps/calendar/ajax/editeventform.php b/apps/calendar/ajax/editeventform.php
index 95cae39c1c2..9ae3ffa8d94 100644
--- a/apps/calendar/ajax/editeventform.php
+++ b/apps/calendar/ajax/editeventform.php
@@ -184,6 +184,8 @@ if($data['repeating'] == 1){
}
$repeat['weekdays'] = $repeat_weekdays_;
}
+}else{
+ $repeat['repeat'] = 'doesnotrepeat';
}
$calendar_options = OC_Calendar_Calendar::allCalendars(OC_User::getUser());
@@ -227,19 +229,20 @@ $tmpl->assign('endtime', $endtime);
$tmpl->assign('description', $description);
$tmpl->assign('repeat', $repeat['repeat']);
-$tmpl->assign('repeat_month', $repeat['month']);
-$tmpl->assign('repeat_weekdays', $repeat['weekdays']);
-$tmpl->assign('repeat_interval', $repeat['interval']);
-$tmpl->assign('repeat_end', $repeat['end']);
-$tmpl->assign('repeat_count', $repeat['count']);
-$tmpl->assign('repeat_weekofmonth', $repeat['weekofmonth']);
-$tmpl->assign('repeat_date', $repeat['date']);
-$tmpl->assign('repeat_year', $repeat['year']);
-$tmpl->assign('repeat_byyearday', $repeat['byyearday']);
-$tmpl->assign('repeat_bymonthday', $repeat['bymonthday']);
-$tmpl->assign('repeat_bymonth', $repeat['bymonth']);
-$tmpl->assign('repeat_byweekno', $repeat['byweekno']);
+if($repeat['repeat'] != 'doesnotrepeat'){
+ $tmpl->assign('repeat_month', $repeat['month']);
+ $tmpl->assign('repeat_weekdays', $repeat['weekdays']);
+ $tmpl->assign('repeat_interval', $repeat['interval']);
+ $tmpl->assign('repeat_end', $repeat['end']);
+ $tmpl->assign('repeat_count', $repeat['count']);
+ $tmpl->assign('repeat_weekofmonth', $repeat['weekofmonth']);
+ $tmpl->assign('repeat_date', $repeat['date']);
+ $tmpl->assign('repeat_year', $repeat['year']);
+ $tmpl->assign('repeat_byyearday', $repeat['byyearday']);
+ $tmpl->assign('repeat_bymonthday', $repeat['bymonthday']);
+ $tmpl->assign('repeat_bymonth', $repeat['bymonth']);
+ $tmpl->assign('repeat_byweekno', $repeat['byweekno']);
+}
$tmpl->printpage();
-?>
-
+?> \ No newline at end of file
diff --git a/apps/calendar/ajax/updatecalendar.php b/apps/calendar/ajax/updatecalendar.php
index 14f560da5a3..269b7b7ca06 100644
--- a/apps/calendar/ajax/updatecalendar.php
+++ b/apps/calendar/ajax/updatecalendar.php
@@ -12,6 +12,18 @@ require_once('../../../lib/base.php');
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar');
+if(trim($_POST['name']) == ''){
+ OC_JSON::error(array('message'=>'empty'));
+ exit;
+}
+$calendars = OC_Calendar_Calendar::allCalendars(OC_User::getUser());
+foreach($calendars as $cal){
+ if($cal['displayname'] == $_POST['name'] && $cal['id'] != $_POST['id']){
+ OC_JSON::error(array('message'=>'namenotavailable'));
+ exit;
+ }
+}
+
$calendarid = $_POST['id'];
$calendar = OC_Calendar_App::getCalendar($calendarid);//access check
OC_Calendar_Calendar::editCalendar($calendarid, $_POST['name'], null, null, null, $_POST['color']);
diff --git a/apps/calendar/appinfo/app.php b/apps/calendar/appinfo/app.php
index 267a74bf29a..9c95768895f 100644
--- a/apps/calendar/appinfo/app.php
+++ b/apps/calendar/appinfo/app.php
@@ -1,12 +1,12 @@
<?php
-if(version_compare(PHP_VERSION, '5.3.0', '>')){
+if(version_compare(PHP_VERSION, '5.3.0', '>=')){
$l=new OC_L10N('calendar');
OC::$CLASSPATH['OC_Calendar_App'] = 'apps/calendar/lib/app.php';
OC::$CLASSPATH['OC_Calendar_Calendar'] = 'apps/calendar/lib/calendar.php';
OC::$CLASSPATH['OC_Calendar_Object'] = 'apps/calendar/lib/object.php';
OC::$CLASSPATH['OC_Calendar_Hooks'] = 'apps/calendar/lib/hooks.php';
OC::$CLASSPATH['OC_Connector_Sabre_CalDAV'] = 'apps/calendar/lib/connector_sabre.php';
- OC_HOOK::connect('OC_User', 'post_createUser', 'OC_Calendar_Hooks', 'deleteUser');
+ OC_HOOK::connect('OC_User', 'post_deleteUser', 'OC_Calendar_Hooks', 'deleteUser');
OC_Util::addScript('calendar','loader');
OC_App::register( array(
'order' => 10,
@@ -16,7 +16,7 @@ if(version_compare(PHP_VERSION, '5.3.0', '>')){
'id' => 'calendar_index',
'order' => 10,
'href' => OC_Helper::linkTo( 'calendar', 'index.php' ),
- 'icon' => OC_Helper::imagePath( 'calendar', 'icon.png' ),
+ 'icon' => OC_Helper::imagePath( 'calendar', 'icon.svg' ),
'name' => $l->t('Calendar')));
OC_App::registerPersonal('calendar', 'settings');
require_once('apps/calendar/lib/search.php');
diff --git a/apps/calendar/css/style.css b/apps/calendar/css/style.css
index 6555c25a767..cffaf356402 100644
--- a/apps/calendar/css/style.css
+++ b/apps/calendar/css/style.css
@@ -17,7 +17,7 @@
#editentry_dialog {display: none;}
#parsingfail_dialog{display: none;}
-#loading { display: none; left: 40%; position: fixed; top: 4.4em; z-index: 100; }
+#loading { display: none;margin: 0;padding:0;margin-top:5px;}
#calendar_holder {position: relative;bottom: 0; right: 0; left: 0; top: 3em;}
.fc-content{padding:2px 4px;}
@@ -43,7 +43,7 @@
.popup {display: none; position: absolute; z-index: 1000; background: #eeeeee; color: #000000; border: 1px solid #1a1a1a; font-size: 90%;}
.event_popup {width: 280px; height: 40px; padding: 10px;}
-input[type="button"].active {color: #0098E4}
+input[type="button"].active {color: #6193CF}
#fromtime, #totime {
color:#333;
}
diff --git a/apps/calendar/img/icon.svg b/apps/calendar/img/icon.svg
index a624db3a487..211f74df066 100755
--- a/apps/calendar/img/icon.svg
+++ b/apps/calendar/img/icon.svg
@@ -1,14 +1,54 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="88px" height="100px" viewBox="0 0 88 100" enable-background="new 0 0 88 100" xml:space="preserve">
-<path d="M0,32v59.906C0,96.377,3.582,100,8,100h72c4.418,0,8-3.623,8-8.094V32H0z M22,94H6V78h16V94z M22,74H6V58h16V74z M22,54H6
- V38h16V54z M42,94H26V78h16V94z M42,74H26V58h16V74z M42,54H26V38h16V54z M62,94H46V78h16V94z M62,74H46V58h16V74z M62,54H46V38h16
- V54z M82,94H66V78h16V94z M82,74H66V58h16V74z M82,54H66V38h16V54z"/>
-<path d="M80,12H67V3c0-1.657-1.344-3-3-3c-1.657,0-3,1.343-3,3v9H27V3c0-1.657-1.344-3-3-3c-1.657,0-3,1.343-3,3v9H8
- c-4.418,0-8,3.623-8,8.093V27v0v1h88v-1v0v-6.907C88,15.623,84.418,12,80,12z M24,26c-3.313,0-6-2.687-6-6
- c0-2.219,1.209-4.152,3-5.19V20c0,1.657,1.343,3,3,3c1.656,0,3-1.343,3-3v-5.191c1.792,1.038,3,2.972,3,5.191
- C30,23.313,27.314,26,24,26z M64,26c-3.313,0-6-2.687-6-6c0-2.219,1.209-4.152,3-5.19V20c0,1.657,1.343,3,3,3c1.656,0,3-1.343,3-3
- v-5.191c1.792,1.038,3,2.972,3,5.191C70,23.313,67.314,26,64,26z"/>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<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"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="14px"
+ height="16px"
+ viewBox="0 0 88 100"
+ enable-background="new 0 0 88 100"
+ xml:space="preserve"
+ inkscape:version="0.48.1 r9760"
+ sodipodi:docname="icon.svg"><metadata
+ id="metadata11"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs9" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1680"
+ inkscape:window-height="1004"
+ id="namedview7"
+ showgrid="false"
+ inkscape:zoom="19.125"
+ inkscape:cx="7"
+ inkscape:cy="8"
+ inkscape:window-x="-2"
+ inkscape:window-y="23"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<path
+ d="M0,32v59.906C0,96.377,3.582,100,8,100h72c4.418,0,8-3.623,8-8.094V32H0z M22,94H6V78h16V94z M22,74H6V58h16V74z M22,54H6 V38h16V54z M42,94H26V78h16V94z M42,74H26V58h16V74z M42,54H26V38h16V54z M62,94H46V78h16V94z M62,74H46V58h16V74z M62,54H46V38h16 V54z M82,94H66V78h16V94z M82,74H66V58h16V74z M82,54H66V38h16V54z"
+ id="path3"
+ style="fill:#4d4d4d" />
+<path
+ d="M80,12H67V3c0-1.657-1.344-3-3-3c-1.657,0-3,1.343-3,3v9H27V3c0-1.657-1.344-3-3-3c-1.657,0-3,1.343-3,3v9H8 c-4.418,0-8,3.623-8,8.093V27v0v1h88v-1v0v-6.907C88,15.623,84.418,12,80,12z M24,26c-3.313,0-6-2.687-6-6 c0-2.219,1.209-4.152,3-5.19V20c0,1.657,1.343,3,3,3c1.656,0,3-1.343,3-3v-5.191c1.792,1.038,3,2.972,3,5.191 C30,23.313,27.314,26,24,26z M64,26c-3.313,0-6-2.687-6-6c0-2.219,1.209-4.152,3-5.19V20c0,1.657,1.343,3,3,3c1.656,0,3-1.343,3-3 v-5.191c1.792,1.038,3,2.972,3,5.191C70,23.313,67.314,26,64,26z"
+ id="path5"
+ style="fill:#4d4d4d" />
+</svg> \ No newline at end of file
diff --git a/apps/calendar/index.php b/apps/calendar/index.php
index e8e214c0b75..12b51f564b4 100644
--- a/apps/calendar/index.php
+++ b/apps/calendar/index.php
@@ -32,6 +32,8 @@ if(OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'currentview', 'mont
OC_Util::addScript('3rdparty/fullcalendar', 'fullcalendar');
OC_Util::addStyle('3rdparty/fullcalendar', 'fullcalendar');
+OC_Util::addScript('3rdparty/timepicker', 'jquery.ui.timepicker');
+OC_Util::addStyle('3rdparty/timepicker', 'jquery.ui.timepicker');
if(OC_Preferences::getValue(OC_USER::getUser(), "calendar", "timezone") == null || OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'timezonedetection') == 'true'){
OC_UTIL::addScript('calendar', 'geo');
}
diff --git a/apps/calendar/js/calendar.js b/apps/calendar/js/calendar.js
index 33a78b3e322..afd1b692dd4 100644
--- a/apps/calendar/js/calendar.js
+++ b/apps/calendar/js/calendar.js
@@ -26,6 +26,12 @@ Calendar={
$( "#to" ).datepicker({
dateFormat : 'dd-mm-yy'
});
+ $('#fromtime').timepicker({
+ showPeriodLabels: false
+ });
+ $('#totime').timepicker({
+ showPeriodLabels: false
+ });
$('#category').multiselect({
header: false,
noneSelectedText: $('#category').attr('title'),
@@ -345,10 +351,21 @@ Calendar={
}
},
- reseticonhighlight: function(){
- $('#oneweekview_radio').css('color', '#000000');
- $('#onemonthview_radio').css('color', '#000000');
- $('#listview_radio').css('color', '#000000');
+ setViewActive: function(view){
+ $('#view input[type="button"]').removeClass('active');
+ var id;
+ switch (view) {
+ case 'agendaWeek':
+ id = 'oneweekview_radio';
+ break;
+ case 'month':
+ id = 'onemonthview_radio';
+ break;
+ case 'list':
+ id = 'listview_radio';
+ break;
+ }
+ $('#'+id).addClass('active');
},
Calendar:{
overview:function(){
@@ -412,11 +429,17 @@ Calendar={
}
},
submit:function(button, calendarid){
- var displayname = $("#displayname_"+calendarid).val();
+ var displayname = $.trim($("#displayname_"+calendarid).val());
var active = $("#edit_active_"+calendarid+":checked").length;
var description = $("#description_"+calendarid).val();
var calendarcolor = $("#calendarcolor_"+calendarid).val();
-
+ if(displayname == ''){
+ $("#displayname_"+calendarid).css('background-color', '#FF2626');
+ $("#displayname_"+calendarid).focus(function(){
+ $("#displayname_"+calendarid).css('background-color', '#F8F8F8');
+ });
+ }
+
var url;
if (calendarid == 'new'){
url = OC.filePath('calendar', 'ajax', 'createcalendar.php');
@@ -429,6 +452,14 @@ Calendar={
$(button).closest('tr').prev().html(data.page).show().next().remove();
$('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url);
$('#calendar_holder').fullCalendar('addEventSource', data.eventSource);
+ if (calendarid == 'new'){
+ $('#choosecalendar_dialog > table').append('<tr><td colspan="6"><a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="' + newcalendar + '"></a></td></tr>');
+ }
+ }else{
+ $("#displayname_"+calendarid).css('background-color', '#FF2626');
+ $("#displayname_"+calendarid).focus(function(){
+ $("#displayname_"+calendarid).css('background-color', '#F8F8F8');
+ });
}
}, 'json');
},
@@ -649,6 +680,16 @@ $(document).ready(function(){
viewDisplay: function(view) {
$('#datecontrol_date').html(view.title);
$.get(OC.filePath('calendar', 'ajax', 'changeview.php') + "?v="+view.name);
+ Calendar.UI.setViewActive(view.name);
+ if (view.name == 'agendaWeek') {
+ $('#calendar_holder').fullCalendar('option', 'aspectRatio', 0.1);
+ }
+ else {
+ $('#calendar_holder').fullCalendar('option', 'aspectRatio', 1.35);
+ }
+ },
+ columnFormat: {
+ week: 'ddd d. MMM'
},
selectable: true,
selectHelper: true,
@@ -674,18 +715,12 @@ $(document).ready(function(){
});
$('#oneweekview_radio').click(function(){
$('#calendar_holder').fullCalendar('changeView', 'agendaWeek');
- Calendar.UI.reseticonhighlight();
- $('#oneweekview_radio').css('color', '#6193CF');
});
$('#onemonthview_radio').click(function(){
$('#calendar_holder').fullCalendar('changeView', 'month');
- Calendar.UI.reseticonhighlight();
- $('#onemonthview_radio').css('color', '#6193CF');
});
$('#listview_radio').click(function(){
$('#calendar_holder').fullCalendar('changeView', 'list');
- Calendar.UI.reseticonhighlight();
- $('#listview_radio').css('color', '#6193CF');
});
$('#today_input').click(function(){
$('#calendar_holder').fullCalendar('today');
diff --git a/apps/calendar/l10n/ar.php b/apps/calendar/l10n/ar.php
index 7dc30ced856..13df7c7b5fd 100644
--- a/apps/calendar/l10n/ar.php
+++ b/apps/calendar/l10n/ar.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"New Timezone:" => "التوقيت الجديد",
"Timezone changed" => "تم تغيير المنطقة الزمنية",
"Invalid request" => "طلب غير مفهوم",
"Calendar" => "الجدول الزمني",
@@ -25,7 +26,44 @@
"Bi-Weekly" => "كل اسبوعين",
"Monthly" => "شهري",
"Yearly" => "سنوي",
+"never" => "بتاتا",
+"by occurrences" => "حسب تسلسل الحدوث",
+"by date" => "حسب التاريخ",
+"by monthday" => "حسب يوم الشهر",
+"by weekday" => "حسب يوم الاسبوع",
+"Monday" => "الأثنين",
+"Tuesday" => "الثلاثاء",
+"Wednesday" => "الاربعاء",
+"Thursday" => "الخميس",
+"Friday" => "الجمعه",
+"Saturday" => "السبت",
+"Sunday" => "الاحد",
+"events week of month" => "الاحداث باسبوع الشهر",
+"first" => "أول",
+"second" => "ثاني",
+"third" => "ثالث",
+"fourth" => "رابع",
+"fifth" => "خامس",
+"last" => "أخير",
+"January" => "كانون الثاني",
+"February" => "شباط",
+"March" => "آذار",
+"April" => "نيسان",
+"May" => "أيار",
+"June" => "حزيران",
+"July" => "تموز",
+"August" => "آب",
+"September" => "أيلول",
+"October" => "تشرين الاول",
+"November" => "تشرين الثاني",
+"December" => "كانون الاول",
+"by events date" => "حسب تاريخ الحدث",
+"by yearday(s)" => "حسب يوم السنه",
+"by weeknumber(s)" => "حسب رقم الاسبوع",
+"by day and month" => "حسب اليوم و الشهر",
"Not an array" => "ليس صفيف",
+"Date" => "تاريخ",
+"Cal." => "تقويم",
"All day" => "كل النهار",
"Missing fields" => "خانات خالية من المعلومات",
"Title" => "عنوان",
@@ -41,6 +79,25 @@
"Today" => "اليوم",
"Calendars" => "الجداول الزمنية",
"There was a fail, while parsing the file." => "لم يتم قراءة الملف بنجاح.",
+"Sun." => "أحد",
+"Mon." => "أثن.",
+"Tue." => "ثلا.",
+"Wed." => "أرب.",
+"Thu." => "خمي.",
+"Fri." => "جمع.",
+"Sat." => "سبت",
+"Jan." => "ك2",
+"Feb." => "شبا.",
+"Mar." => "اذار",
+"Apr." => "نيس.",
+"May." => "أيا.",
+"Jun." => "حزي.",
+"Jul." => "تمو.",
+"Aug." => "آب",
+"Sep." => "أيل.",
+"Oct." => "ت1",
+"Nov." => "ت2",
+"Dec." => "ك1",
"Choose active calendars" => "إختر الجدول الزمني الرئيسي",
"New Calendar" => "جدول زمني جديد",
"CalDav Link" => "وصلة CalDav",
@@ -65,14 +122,32 @@
"To" => "إلى",
"Advanced options" => "خيارات متقدمة",
"Repeat" => "إعادة",
+"Advanced" => "تعديلات متقدمه",
+"Select weekdays" => "اختر ايام الاسبوع",
+"Select days" => "اختر الايام",
+"and the events day of year." => "و التواريخ حسب يوم السنه.",
+"and the events day of month." => "و الاحداث حسب يوم الشهر.",
+"Select months" => "اختر الاشهر",
+"Select weeks" => "اختر الاسابيع",
+"and the events week of year." => "و الاحداث حسب اسبوع السنه",
+"Interval" => "المده الفاصله",
+"End" => "نهايه",
+"occurrences" => "الاحداث",
"Location" => "مكان",
"Location of the Event" => "مكان الحدث",
"Description" => "مواصفات",
"Description of the Event" => "وصف الحدث",
+"Import a calendar file" => "أدخل ملف التقويم",
"Please choose the calendar" => "الرجاء إختر الجدول الزمني",
+"create a new calendar" => "انشاء جدول زمني جديد",
+"Name of new calendar" => "أسم الجدول الزمني الجديد",
"Import" => "إدخال",
+"Importing calendar" => "يتم ادخال الجدول الزمني",
+"Calendar imported successfully" => "تم ادخال الجدول الزمني بنجاح",
+"Close Dialog" => "أغلق الحوار",
"Create a new event" => "إضافة حدث جديد",
"Timezone" => "المنطقة الزمنية",
+"Check always for changes of the timezone" => "راقب دائما تغير التقويم الزمني",
"Timeformat" => "شكل الوقت",
"24h" => "24 ساعة",
"12h" => "12 ساعة",
diff --git a/apps/calendar/l10n/ca.php b/apps/calendar/l10n/ca.php
index 19934baa0bd..3b74e3da64c 100644
--- a/apps/calendar/l10n/ca.php
+++ b/apps/calendar/l10n/ca.php
@@ -65,6 +65,7 @@
"Date" => "Data",
"Cal." => "Cal.",
"All day" => "Tot el dia",
+"New Calendar" => "Calendari nou",
"Missing fields" => "Els camps que falten",
"Title" => "Títol",
"From Date" => "Des de la data",
@@ -99,7 +100,6 @@
"Nov." => "nov.",
"Dec." => "des.",
"Choose active calendars" => "Seleccioneu calendaris actius",
-"New Calendar" => "Calendari nou",
"CalDav Link" => "Enllaç CalDav",
"Download" => "Baixa",
"Edit" => "Edita",
@@ -137,8 +137,14 @@
"Location of the Event" => "Ubicació de l'esdeveniment",
"Description" => "Descripció",
"Description of the Event" => "Descripció de l'esdeveniment",
+"Import a calendar file" => "Importa un fitxer de calendari",
"Please choose the calendar" => "Escolliu el calendari",
+"create a new calendar" => "crea un nou calendari",
+"Name of new calendar" => "Nom del nou calendari",
"Import" => "Importa",
+"Importing calendar" => "S'està important el calendari",
+"Calendar imported successfully" => "El calendari s'ha importat amb èxit",
+"Close Dialog" => "Tanca el diàleg",
"Create a new event" => "Crea un nou esdeveniment",
"Timezone" => "Zona horària",
"Check always for changes of the timezone" => "Comprova sempre en els canvis de zona horària",
diff --git a/apps/calendar/l10n/cs_CZ.php b/apps/calendar/l10n/cs_CZ.php
index f55cd0f01ae..a5d7bfcddff 100644
--- a/apps/calendar/l10n/cs_CZ.php
+++ b/apps/calendar/l10n/cs_CZ.php
@@ -65,6 +65,7 @@
"Date" => "Datum",
"Cal." => "Kal.",
"All day" => "Celý den",
+"New Calendar" => "Nový kalendář",
"Missing fields" => "Chybějící pole",
"Title" => "Název",
"From Date" => "Od data",
@@ -99,7 +100,6 @@
"Nov." => "Lis.",
"Dec." => "Pro.",
"Choose active calendars" => "Vybrat aktivní kalendář",
-"New Calendar" => "Nový kalendář",
"CalDav Link" => "Odkaz CalDav",
"Download" => "Stáhnout",
"Edit" => "Editovat",
@@ -137,8 +137,14 @@
"Location of the Event" => "Místo konání události",
"Description" => "Popis",
"Description of the Event" => "Popis události",
+"Import a calendar file" => "Importovat soubor kalendáře",
"Please choose the calendar" => "Zvolte prosím kalendář",
+"create a new calendar" => "vytvořit nový kalendář",
+"Name of new calendar" => "Název nového kalendáře",
"Import" => "Import",
+"Importing calendar" => "Kalendář se importuje",
+"Calendar imported successfully" => "Kalendář byl importován úspěšně",
+"Close Dialog" => "Zavřít dialog",
"Create a new event" => "Vytvořit novou událost",
"Timezone" => "Časové pásmo",
"Check always for changes of the timezone" => "Zkontrolujte vždy změny časového pásma",
diff --git a/apps/calendar/l10n/da.php b/apps/calendar/l10n/da.php
index b43c89a6dd3..c50a1db1d57 100644
--- a/apps/calendar/l10n/da.php
+++ b/apps/calendar/l10n/da.php
@@ -38,6 +38,7 @@
"Friday" => "Fredag",
"Saturday" => "Lørdag",
"Sunday" => "øndag",
+"events week of month" => "begivenhedens uge i måneden",
"first" => "første",
"second" => "anden",
"third" => "tredje",
@@ -57,12 +58,14 @@
"November" => "November",
"December" => "December",
"by events date" => "efter begivenheders dato",
+"by yearday(s)" => "efter dag(e) i året",
"by weeknumber(s)" => "efter ugenummer/-numre",
"by day and month" => "efter dag og måned",
"Not an array" => "Ikke en array",
"Date" => "Dato",
"Cal." => "Kal.",
"All day" => "Hele dagen",
+"New Calendar" => "Ny Kalender",
"Missing fields" => "Manglende felter",
"Title" => "Titel",
"From Date" => "Fra dato",
@@ -97,7 +100,6 @@
"Nov." => "Nov.",
"Dec." => "Dec.",
"Choose active calendars" => "Vælg aktive kalendere",
-"New Calendar" => "Ny Kalender",
"CalDav Link" => "CalDav-link",
"Download" => "Hent",
"Edit" => "Rediger",
@@ -123,8 +125,11 @@
"Advanced" => "Avanceret",
"Select weekdays" => "Vælg ugedage",
"Select days" => "Vælg dage",
+"and the events day of year." => "og begivenhedens dag i året.",
+"and the events day of month." => "og begivenhedens sag på måneden",
"Select months" => "Vælg måneder",
"Select weeks" => "Vælg uger",
+"and the events week of year." => "og begivenhedens uge i året.",
"Interval" => "Interval",
"End" => "Afslutning",
"occurrences" => "forekomster",
@@ -132,8 +137,14 @@
"Location of the Event" => "Placering af begivenheden",
"Description" => "Beskrivelse",
"Description of the Event" => "Beskrivelse af begivenheden",
+"Import a calendar file" => "Importer en kalenderfil",
"Please choose the calendar" => "Vælg venligst kalender",
+"create a new calendar" => "opret en ny kalender",
+"Name of new calendar" => "Navn på ny kalender",
"Import" => "Importer",
+"Importing calendar" => "Importerer kalender",
+"Calendar imported successfully" => "Kalender importeret korrekt",
+"Close Dialog" => "Luk dialog",
"Create a new event" => "Opret en ny begivenhed",
"Timezone" => "Tidszone",
"Check always for changes of the timezone" => "Check altid efter ændringer i tidszone",
diff --git a/apps/calendar/l10n/de.php b/apps/calendar/l10n/de.php
index aae6f235fc4..736294e0f05 100644
--- a/apps/calendar/l10n/de.php
+++ b/apps/calendar/l10n/de.php
@@ -65,6 +65,7 @@
"Date" => "Datum",
"Cal." => "Kal.",
"All day" => "Ganztags",
+"New Calendar" => "Neuer Kalender",
"Missing fields" => "fehlende Felder",
"Title" => "Titel",
"From Date" => "Startdatum",
@@ -81,14 +82,14 @@
"There was a fail, while parsing the file." => "Fehler beim Einlesen der Datei.",
"Sun." => "So",
"Mon." => "Mo",
-"Tue." => "Die",
+"Tue." => "Di",
"Wed." => "Mi",
"Thu." => "Do",
"Fri." => "Fr",
"Sat." => "Sa",
"Jan." => "Jan",
"Feb." => "Feb",
-"Mar." => "Mär",
+"Mar." => "März",
"Apr." => "Apr",
"May." => "Mai",
"Jun." => "Juni",
@@ -99,7 +100,6 @@
"Nov." => "Nov",
"Dec." => "Dez",
"Choose active calendars" => "Aktive Kalender wählen",
-"New Calendar" => "Neuer Kalender",
"CalDav Link" => "CalDAV-Link",
"Download" => "Herunterladen",
"Edit" => "Bearbeiten",
@@ -137,8 +137,14 @@
"Location of the Event" => "Ort",
"Description" => "Beschreibung",
"Description of the Event" => "Beschreibung",
+"Import a calendar file" => "Kalender Datei Importieren",
"Please choose the calendar" => "Bitte wählen Sie den Kalender.",
+"create a new calendar" => "Neuen Kalender anlegen",
+"Name of new calendar" => "Kalendername",
"Import" => "Importieren",
+"Importing calendar" => "Kalender wird importiert.",
+"Calendar imported successfully" => "Kalender erfolgreich importiert",
+"Close Dialog" => "Dialog schließen",
"Create a new event" => "Neues Ereignis",
"Timezone" => "Zeitzone",
"Check always for changes of the timezone" => "immer die Zeitzone überprüfen",
diff --git a/apps/calendar/l10n/el.php b/apps/calendar/l10n/el.php
index edc2635b8c7..af465beeed6 100644
--- a/apps/calendar/l10n/el.php
+++ b/apps/calendar/l10n/el.php
@@ -65,6 +65,7 @@
"Date" => "Ημερομηνία",
"Cal." => "Ημερ.",
"All day" => "Ολοήμερο",
+"New Calendar" => "Νέα Ημερολόγιο",
"Missing fields" => "Πεδία που λείπουν",
"Title" => "Τίτλος",
"From Date" => "Από Ημερομηνία",
@@ -99,7 +100,6 @@
"Nov." => "Νοε.",
"Dec." => "Δεκ.",
"Choose active calendars" => "Επιλέξτε τα ενεργά ημερολόγια",
-"New Calendar" => "Νέα Ημερολόγιο",
"CalDav Link" => "Σύνδεση CalDAV",
"Download" => "Λήψη",
"Edit" => "Επεξεργασία",
@@ -137,8 +137,14 @@
"Location of the Event" => "Τοποθεσία συμβάντος",
"Description" => "Περιγραφή",
"Description of the Event" => "Περιγραφή του συμβάντος",
+"Import a calendar file" => "Εισαγωγή αρχείου ημερολογίου",
"Please choose the calendar" => "Παρακαλώ επιλέξτε το ημερολόγιο",
+"create a new calendar" => "δημιουργία νέου ημερολογίου",
+"Name of new calendar" => "Όνομα νέου ημερολογίου",
"Import" => "Εισαγωγή",
+"Importing calendar" => "Εισαγωγή ημερολογίου",
+"Calendar imported successfully" => "Το ημερολόγιο εισήχθει επιτυχώς",
+"Close Dialog" => "Κλείσιμο Διαλόγου",
"Create a new event" => "Δημιουργήστε ένα νέο συμβάν",
"Timezone" => "Ζώνη ώρας",
"Check always for changes of the timezone" => "Έλεγοχς πάντα για τις αλλαγές της ζώνης ώρας",
diff --git a/apps/calendar/l10n/es.php b/apps/calendar/l10n/es.php
index 5f4097709da..100ffc4b220 100644
--- a/apps/calendar/l10n/es.php
+++ b/apps/calendar/l10n/es.php
@@ -65,6 +65,7 @@
"Date" => "Fecha",
"Cal." => "Cal.",
"All day" => "Todo el día",
+"New Calendar" => "Nuevo calendario",
"Missing fields" => "Los campos que faltan",
"Title" => "Título",
"From Date" => "Desde la fecha",
@@ -99,7 +100,6 @@
"Nov." => "Nov.",
"Dec." => "Dic.",
"Choose active calendars" => "Elige los calendarios activos",
-"New Calendar" => "Nuevo calendario",
"CalDav Link" => "Enlace a CalDav",
"Download" => "Descargar",
"Edit" => "Editar",
@@ -137,8 +137,14 @@
"Location of the Event" => "Lugar del Evento",
"Description" => "Descripción",
"Description of the Event" => "Descripción del evento",
+"Import a calendar file" => "Importar un archivo de calendario",
"Please choose the calendar" => "Elija el calendario",
+"create a new calendar" => "Crear un nuevo calendario",
+"Name of new calendar" => "Nombre del nuevo calendario",
"Import" => "Importar",
+"Importing calendar" => "Importando calendario",
+"Calendar imported successfully" => "Calendario importado exitosamente",
+"Close Dialog" => "Cerrar diálogo",
"Create a new event" => "Crear un nuevo evento",
"Timezone" => "Zona horaria",
"Check always for changes of the timezone" => "Comprobar siempre por cambios en la zona horaria",
diff --git a/apps/calendar/l10n/et_EE.php b/apps/calendar/l10n/et_EE.php
index 7144ea763c4..7bff7bf42e7 100644
--- a/apps/calendar/l10n/et_EE.php
+++ b/apps/calendar/l10n/et_EE.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"New Timezone:" => "Uus ajavöönd:",
"Timezone changed" => "Ajavöönd on muudetud",
"Invalid request" => "Vigane päring",
"Calendar" => "Kalender",
@@ -25,8 +26,46 @@
"Bi-Weekly" => "Üle nädala",
"Monthly" => "Igal kuul",
"Yearly" => "Igal aastal",
+"never" => "mitte kunagi",
+"by occurrences" => "toimumiskordade järgi",
+"by date" => "kuupäeva järgi",
+"by monthday" => "kuu päeva järgi",
+"by weekday" => "nädalapäeva järgi",
+"Monday" => "Esmaspäev",
+"Tuesday" => "Teisipäev",
+"Wednesday" => "Kolmapäev",
+"Thursday" => "Neljapäev",
+"Friday" => "Reede",
+"Saturday" => "Laupäev",
+"Sunday" => "Pühapäev",
+"events week of month" => "ürituse kuu nädal",
+"first" => "esimene",
+"second" => "teine",
+"third" => "kolmas",
+"fourth" => "neljas",
+"fifth" => "viies",
+"last" => "viimane",
+"January" => "Jaanuar",
+"February" => "Veebruar",
+"March" => "Märts",
+"April" => "Aprill",
+"May" => "Mai",
+"June" => "Juuni",
+"July" => "Juuli",
+"August" => "August",
+"September" => "September",
+"October" => "Oktoober",
+"November" => "November",
+"December" => "Detsember",
+"by events date" => "ürituste kuupäeva järgi",
+"by yearday(s)" => "aasta päeva(de) järgi",
+"by weeknumber(s)" => "nädala numbri(te) järgi",
+"by day and month" => "kuu ja päeva järgi",
"Not an array" => "Pole andmemassiiv",
+"Date" => "Kuupäev",
+"Cal." => "Kal.",
"All day" => "Kogu päev",
+"New Calendar" => "Uus kalender",
"Missing fields" => "Puuduvad väljad",
"Title" => "Pealkiri",
"From Date" => "Alates kuupäevast",
@@ -41,8 +80,26 @@
"Today" => "Täna",
"Calendars" => "Kalendrid",
"There was a fail, while parsing the file." => "Faili parsimisel tekkis viga.",
+"Sun." => "Püh.",
+"Mon." => "Esm.",
+"Tue." => "Teisip.",
+"Wed." => "Kolmap.",
+"Thu." => "Meljap.",
+"Fri." => "Reede",
+"Sat." => "Laup.",
+"Jan." => "Jan.",
+"Feb." => "Veebr.",
+"Mar." => "Mär.",
+"Apr." => "Apr.",
+"May." => "Mai",
+"Jun." => "Jun.",
+"Jul." => "Jul.",
+"Aug." => "Aug.",
+"Sep." => "Sept.",
+"Oct." => "Okt.",
+"Nov." => "Nov.",
+"Dec." => "Dets.",
"Choose active calendars" => "Vali aktiivsed kalendrid",
-"New Calendar" => "Uus kalender",
"CalDav Link" => "CalDav Link",
"Download" => "Lae alla",
"Edit" => "Muuda",
@@ -65,14 +122,32 @@
"To" => "Kuni",
"Advanced options" => "Lisavalikud",
"Repeat" => "Korda",
+"Advanced" => "Täpsem",
+"Select weekdays" => "Vali nädalapäevad",
+"Select days" => "Vali päevad",
+"and the events day of year." => "ja ürituse päev aastas.",
+"and the events day of month." => "ja ürituse päev kuus.",
+"Select months" => "Vali kuud",
+"Select weeks" => "Vali nädalad",
+"and the events week of year." => "ja ürituse nädal aastas.",
+"Interval" => "Intervall",
+"End" => "Lõpp",
+"occurrences" => "toimumiskordi",
"Location" => "Asukoht",
"Location of the Event" => "Sündmuse toimumiskoht",
"Description" => "Kirjeldus",
"Description of the Event" => "Sündmuse kirjeldus",
+"Import a calendar file" => "Impordi kalendrifail",
"Please choose the calendar" => "Palun vali kalender",
+"create a new calendar" => "loo uus kalender",
+"Name of new calendar" => "Uue kalendri nimi",
"Import" => "Impordi",
+"Importing calendar" => "Kalendri importimine",
+"Calendar imported successfully" => "Kalender on imporditud",
+"Close Dialog" => "Sulge dialoogiaken",
"Create a new event" => "Loo sündmus",
"Timezone" => "Ajavöönd",
+"Check always for changes of the timezone" => "Kontrolli alati muudatusi ajavööndis",
"Timeformat" => "Aja vorming",
"24h" => "24h",
"12h" => "12h",
diff --git a/apps/calendar/l10n/gl.php b/apps/calendar/l10n/gl.php
index 6cdaa98e96b..6b74a04f923 100644
--- a/apps/calendar/l10n/gl.php
+++ b/apps/calendar/l10n/gl.php
@@ -8,6 +8,7 @@
"Business" => "Traballo",
"Call" => "Chamada",
"Clients" => "Clientes",
+"Deliverer" => "Remitente",
"Holidays" => "Vacacións",
"Ideas" => "Ideas",
"Journey" => "Viaxe",
@@ -64,6 +65,7 @@
"Date" => "Data",
"Cal." => "Cal.",
"All day" => "Todo o dia",
+"New Calendar" => "Novo calendario",
"Missing fields" => "Faltan campos",
"Title" => "Título",
"From Date" => "Desde Data",
@@ -98,7 +100,6 @@
"Nov." => "Nov.",
"Dec." => "Nad.",
"Choose active calendars" => "Escolla os calendarios activos",
-"New Calendar" => "Novo calendario",
"CalDav Link" => "Ligazón CalDav",
"Download" => "Baixar",
"Edit" => "Editar",
diff --git a/apps/calendar/l10n/ja_JP.php b/apps/calendar/l10n/ja_JP.php
index ef83f5d5a65..0645f6a2a2c 100644
--- a/apps/calendar/l10n/ja_JP.php
+++ b/apps/calendar/l10n/ja_JP.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"New Timezone:" => "新しいタイムゾーン:",
"Timezone changed" => "タイムゾーンが変更されました",
"Invalid request" => "無効なリクエストです",
"Calendar" => "カレンダー",
@@ -25,7 +26,44 @@
"Bi-Weekly" => "2週間ごと",
"Monthly" => "毎月",
"Yearly" => "毎年",
+"never" => "無し",
+"by occurrences" => "回数で指定",
+"by date" => "日付で指定",
+"by monthday" => "日にちで指定",
+"by weekday" => "曜日で指定",
+"Monday" => "月曜日",
+"Tuesday" => "火曜日",
+"Wednesday" => "水曜日",
+"Thursday" => "木曜日",
+"Friday" => "金曜日",
+"Saturday" => "土曜日",
+"Sunday" => "日曜日",
+"events week of month" => "予定のある週を指定",
+"first" => "1週目",
+"second" => "2週目",
+"third" => "3週目",
+"fourth" => "4週目",
+"fifth" => "5週目",
+"last" => "最終週",
+"January" => "1月",
+"February" => "2月",
+"March" => "3月",
+"April" => "4月",
+"May" => "5月",
+"June" => "6月",
+"July" => "7月",
+"August" => "8月",
+"September" => "9月",
+"October" => "10月",
+"November" => "11月",
+"December" => "12月",
+"by events date" => "日付で指定",
+"by yearday(s)" => "日番号で指定",
+"by weeknumber(s)" => "週番号で指定",
+"by day and month" => "月と日で指定",
"Not an array" => "配列ではありません",
+"Date" => "日付",
+"Cal." => "カレンダー",
"All day" => "終日",
"Missing fields" => "項目がありません",
"Title" => "タイトル",
@@ -41,6 +79,25 @@
"Today" => "今日",
"Calendars" => "カレンダー",
"There was a fail, while parsing the file." => "ファイルを構文解析する際に失敗しました",
+"Sun." => "日",
+"Mon." => "月",
+"Tue." => "火",
+"Wed." => "水",
+"Thu." => "木",
+"Fri." => "金",
+"Sat." => "土",
+"Jan." => "1月",
+"Feb." => "2月",
+"Mar." => "3月",
+"Apr." => "4月",
+"May." => "5月",
+"Jun." => "6月",
+"Jul." => "7月",
+"Aug." => "8月",
+"Sep." => "9月",
+"Oct." => "10月",
+"Nov." => "11月",
+"Dec." => "12月",
"Choose active calendars" => "アクティブなカレンダーを選択してください",
"New Calendar" => "新しくカレンダーを作成する",
"CalDav Link" => "CalDavへのリンク",
@@ -65,14 +122,32 @@
"To" => "終了",
"Advanced options" => "詳細設定",
"Repeat" => "繰り返す",
+"Advanced" => "詳細設定",
+"Select weekdays" => "曜日を指定",
+"Select days" => "日付を指定",
+"and the events day of year." => "対象の年を選択する。",
+"and the events day of month." => "対象の月を選択する。",
+"Select months" => "月を指定する",
+"Select weeks" => "週を指定する",
+"and the events week of year." => "対象の週を選択する。",
+"Interval" => "周期",
+"End" => "繰り返す期間",
+"occurrences" => "回繰り返す",
"Location" => "場所",
"Location of the Event" => "イベントの場所",
"Description" => "メモ",
"Description of the Event" => "イベントのメモ",
+"Import a calendar file" => "カレンダーファイルをインポート",
"Please choose the calendar" => "カレンダーを選択してください",
+"create a new calendar" => "新規カレンダーの作成",
+"Name of new calendar" => "新規カレンダーの名称",
"Import" => "インポート",
+"Importing calendar" => "カレンダーを取り込み中",
+"Calendar imported successfully" => "カレンダーの取り込みに成功しました",
+"Close Dialog" => "閉じる",
"Create a new event" => "新しいイベントを作成する",
"Timezone" => "タイムゾーン",
+"Check always for changes of the timezone" => "タイムゾーン変更を常に確認する",
"Timeformat" => "時刻のフォーマット",
"24h" => "24時間制",
"12h" => "12時間制",
diff --git a/apps/calendar/l10n/nl.php b/apps/calendar/l10n/nl.php
index 3efb869042d..e80694d610e 100644
--- a/apps/calendar/l10n/nl.php
+++ b/apps/calendar/l10n/nl.php
@@ -29,6 +29,7 @@
"never" => "nooit meer",
"by occurrences" => "volgens gebeurtenissen",
"by date" => "op datum",
+"by monthday" => "per dag van de maand",
"by weekday" => "op weekdag",
"Monday" => "Maandag",
"Tuesday" => "Dinsdag",
diff --git a/apps/calendar/l10n/ro.php b/apps/calendar/l10n/ro.php
index 5e16c344eef..026c251e53c 100644
--- a/apps/calendar/l10n/ro.php
+++ b/apps/calendar/l10n/ro.php
@@ -65,6 +65,7 @@
"Date" => "Data",
"Cal." => "Cal.",
"All day" => "Toată ziua",
+"New Calendar" => "Calendar nou",
"Missing fields" => "Câmpuri lipsă",
"Title" => "Titlu",
"From Date" => "Începând cu",
@@ -99,7 +100,6 @@
"Nov." => "Nov.",
"Dec." => "Dec.",
"Choose active calendars" => "Alege activitățile din calendar",
-"New Calendar" => "Calendar nou",
"CalDav Link" => "Link CalDav",
"Download" => "Descarcă",
"Edit" => "Modifică",
@@ -137,8 +137,14 @@
"Location of the Event" => "Localizarea evenimentului",
"Description" => "Descriere",
"Description of the Event" => "Descrierea evenimentului",
+"Import a calendar file" => "Importă un calendar",
"Please choose the calendar" => "Alegeți calendarul",
+"create a new calendar" => "crează un calendar nou",
+"Name of new calendar" => "Numele noului calendar",
"Import" => "Importă",
+"Importing calendar" => "Importă calendar",
+"Calendar imported successfully" => "Calendarul a fost importat cu succes",
+"Close Dialog" => "Închide",
"Create a new event" => "Crează un evenimetn nou",
"Timezone" => "Fus orar",
"Check always for changes of the timezone" => "Verifică mereu pentru schimbări ale fusului orar",
diff --git a/apps/calendar/l10n/ru.php b/apps/calendar/l10n/ru.php
index 87366771867..675fcecf18c 100644
--- a/apps/calendar/l10n/ru.php
+++ b/apps/calendar/l10n/ru.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"New Timezone:" => "Новый часовой пояс:",
"Timezone changed" => "Часовой пояс изменён",
"Invalid request" => "Неверный запрос",
"Calendar" => "Календарь",
@@ -25,8 +26,46 @@
"Bi-Weekly" => "Каждые две недели",
"Monthly" => "Каждый месяц",
"Yearly" => "Каждый год",
+"never" => "никогда",
+"by occurrences" => "по числу повторений",
+"by date" => "по дате",
+"by monthday" => "по дню месяца",
+"by weekday" => "по дню недели",
+"Monday" => "Понедельник",
+"Tuesday" => "Вторник",
+"Wednesday" => "Среда",
+"Thursday" => "Четверг",
+"Friday" => "Пятница",
+"Saturday" => "Суббота",
+"Sunday" => "Воскресенье",
+"events week of month" => "неделя месяца",
+"first" => "первая",
+"second" => "вторая",
+"third" => "третья",
+"fourth" => "червётрая",
+"fifth" => "пятая",
+"last" => "последняя",
+"January" => "Январь",
+"February" => "Февраль",
+"March" => "Март",
+"April" => "Апрель",
+"May" => "Май",
+"June" => "Июнь",
+"July" => "Июль",
+"August" => "Август",
+"September" => "Сентябрь",
+"October" => "Октябрь",
+"November" => "Ноябрь",
+"December" => "Декабрь",
+"by events date" => "по дате событий",
+"by yearday(s)" => "по дням недели",
+"by weeknumber(s)" => "по номерам недели",
+"by day and month" => "по дню и месяцу",
"Not an array" => "Не массив",
+"Date" => "Дата",
+"Cal." => "Кал.",
"All day" => "Весь день",
+"New Calendar" => "Новый Календарь",
"Missing fields" => "Незаполненные поля",
"Title" => "Название",
"From Date" => "Дата начала",
@@ -41,8 +80,26 @@
"Today" => "Сегодня",
"Calendars" => "Календари",
"There was a fail, while parsing the file." => "Не удалось обработать файл.",
+"Sun." => "Вс.",
+"Mon." => "Пн.",
+"Tue." => "Вт.",
+"Wed." => "Ср.",
+"Thu." => "Чт.",
+"Fri." => "Пт.",
+"Sat." => "Сб.",
+"Jan." => "Янв.",
+"Feb." => "Фев.",
+"Mar." => "Мар.",
+"Apr." => "Сен.",
+"May." => "Май.",
+"Jun." => "Июн.",
+"Jul." => "Июл.",
+"Aug." => "Авг.",
+"Sep." => "Сен.",
+"Oct." => "Окт.",
+"Nov." => "Ноя.",
+"Dec." => "Дек.",
"Choose active calendars" => "Выберите активные календари",
-"New Calendar" => "Новый Календарь",
"CalDav Link" => "Ссылка для CalDav",
"Download" => "Скачать",
"Edit" => "Редактировать",
@@ -65,14 +122,32 @@
"To" => "До",
"Advanced options" => "Дополнительные параметры",
"Repeat" => "Повтор",
+"Advanced" => "Дополнительно",
+"Select weekdays" => "Выбрать дни недели",
+"Select days" => "Выбрать дни",
+"and the events day of year." => "и день года события",
+"and the events day of month." => "и день месяца события",
+"Select months" => "Выбрать месяцы",
+"Select weeks" => "Выбрать недели",
+"and the events week of year." => "и номер недели события",
+"Interval" => "Интервал",
+"End" => "Окончание",
+"occurrences" => "повторений",
"Location" => "Место",
"Location of the Event" => "Место события",
"Description" => "Описание",
"Description of the Event" => "Описание события",
+"Import a calendar file" => "Импортировать календарь из файла",
"Please choose the calendar" => "Пожалуйста, выберите календарь",
+"create a new calendar" => "Создать новый календарь",
+"Name of new calendar" => "Название нового календаря",
"Import" => "Импортировать",
+"Importing calendar" => "Импортируется календарь",
+"Calendar imported successfully" => "Календарь успешно импортирован",
+"Close Dialog" => "Закрыть Сообщение",
"Create a new event" => "Создать новое событие",
"Timezone" => "Часовой пояс",
+"Check always for changes of the timezone" => "Всегда проверяйте изменение часового пояса",
"Timeformat" => "Формат времени",
"24h" => "24ч",
"12h" => "12ч",
diff --git a/apps/calendar/l10n/sk_SK.php b/apps/calendar/l10n/sk_SK.php
index ec0485bfc9a..6023a7af139 100644
--- a/apps/calendar/l10n/sk_SK.php
+++ b/apps/calendar/l10n/sk_SK.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"New Timezone:" => "Nová časová zóna:",
"Timezone changed" => "Časové pásmo zmenené",
"Invalid request" => "Neplatná požiadavka",
"Calendar" => "Kalendár",
@@ -25,8 +26,40 @@
"Bi-Weekly" => "Každý druhý týždeň",
"Monthly" => "Mesačne",
"Yearly" => "Ročne",
+"never" => "nikdy",
+"by occurrences" => "podľa výskytu",
+"by date" => "podľa dátumu",
+"Monday" => "Pondelok",
+"Tuesday" => "Utorok",
+"Wednesday" => "Streda",
+"Thursday" => "Štvrtok",
+"Friday" => "Piatok",
+"Saturday" => "Sobota",
+"Sunday" => "Nedeľa",
+"first" => "prvý",
+"second" => "druhý",
+"third" => "tretí",
+"fourth" => "štvrtý",
+"fifth" => "piaty",
+"last" => "posledný",
+"January" => "Január",
+"February" => "Február",
+"March" => "Marec",
+"April" => "Apríl",
+"May" => "Máj",
+"June" => "Jún",
+"July" => "Júl",
+"August" => "August",
+"September" => "September",
+"October" => "Október",
+"November" => "November",
+"December" => "December",
+"by events date" => "podľa dátumu udalosti",
+"by day and month" => "podľa dňa a mesiaca",
"Not an array" => "Nie je pole",
+"Date" => "Dátum",
"All day" => "Celý deň",
+"New Calendar" => "Nový kalendár",
"Missing fields" => "Nevyplnené položky",
"Title" => "Nadpis",
"From Date" => "Od Dátumu",
@@ -41,8 +74,26 @@
"Today" => "Dnes",
"Calendars" => "Kalendáre",
"There was a fail, while parsing the file." => "Nastala chyba počas parsovania súboru.",
+"Sun." => "Ned.",
+"Mon." => "Pon.",
+"Tue." => "Ut.",
+"Wed." => "Str.",
+"Thu." => "Štv.",
+"Fri." => "Pia.",
+"Sat." => "So.",
+"Jan." => "Jan.",
+"Feb." => "Feb.",
+"Mar." => "Mar.",
+"Apr." => "Apr.",
+"May." => "Máj",
+"Jun." => "Jún",
+"Jul." => "Júl",
+"Aug." => "Aug.",
+"Sep." => "Sep.",
+"Oct." => "Okt.",
+"Nov." => "Nov.",
+"Dec." => "Dec.",
"Choose active calendars" => "Zvoľte aktívne kalendáre",
-"New Calendar" => "Nový kalendár",
"CalDav Link" => "CalDav odkaz",
"Download" => "Stiahnuť",
"Edit" => "Upraviť",
@@ -65,12 +116,25 @@
"To" => "Do",
"Advanced options" => "Pokročilé možnosti",
"Repeat" => "Opakovať",
+"Advanced" => "Pokročilé",
+"Select days" => "Vybrať dni",
+"Select months" => "Vybrať mesiace",
+"Select weeks" => "Vybrať týždne",
+"Interval" => "Interval",
+"End" => "Koniec",
+"occurrences" => "výskyty",
"Location" => "Poloha",
"Location of the Event" => "Poloha Udalosti",
"Description" => "Popis",
"Description of the Event" => "Popis Udalosti",
+"Import a calendar file" => "Importovať súbor kalendára",
"Please choose the calendar" => "Prosím zvoľte kalendár",
+"create a new calendar" => "vytvoriť nový kalendár",
+"Name of new calendar" => "Meno nového kalendára",
"Import" => "Importovať",
+"Importing calendar" => "Importujem kalendár",
+"Calendar imported successfully" => "Kalendár úspešne importovaný",
+"Close Dialog" => "Zatvoriť Dialóg",
"Create a new event" => "Vytvoriť udalosť",
"Timezone" => "Časová zóna",
"Timeformat" => "Formát času",
diff --git a/apps/calendar/l10n/th_TH.php b/apps/calendar/l10n/th_TH.php
new file mode 100644
index 00000000000..60f4701211f
--- /dev/null
+++ b/apps/calendar/l10n/th_TH.php
@@ -0,0 +1,155 @@
+<?php $TRANSLATIONS = array(
+"New Timezone:" => "สร้างโซนเวลาใหม่:",
+"Timezone changed" => "โซนเวลาถูกเปลี่ยนแล้ว",
+"Invalid request" => "คำร้องขอไม่ถูกต้อง",
+"Calendar" => "ปฏิทิน",
+"Wrong calendar" => "ปฏิทินไม่ถูกต้อง",
+"Birthday" => "วันเกิด",
+"Business" => "ธุรกิจ",
+"Call" => "โทรติดต่อ",
+"Clients" => "ลูกค้า",
+"Deliverer" => "จัดส่ง",
+"Holidays" => "วันหยุด",
+"Ideas" => "ไอเดีย",
+"Journey" => "การเดินทาง",
+"Jubilee" => "งานเลี้ยง",
+"Meeting" => "นัดประชุม",
+"Other" => "อื่นๆ",
+"Personal" => "ส่วนตัว",
+"Projects" => "โครงการ",
+"Questions" => "คำถาม",
+"Work" => "งาน",
+"Does not repeat" => "ไม่ต้องทำซ้ำ",
+"Daily" => "รายวัน",
+"Weekly" => "รายสัปดาห์",
+"Every Weekday" => "ทุกวันหยุด",
+"Bi-Weekly" => "รายปักษ์",
+"Monthly" => "รายเดือน",
+"Yearly" => "รายปี",
+"never" => "ไม่ต้องเลย",
+"by occurrences" => "ตามจำนวนที่ปรากฏ",
+"by date" => "ตามวันที่",
+"by monthday" => "จากเดือน",
+"by weekday" => "จากสัปดาห์",
+"Monday" => "วันจันทร์",
+"Tuesday" => "วันอังคาร",
+"Wednesday" => "วันพุธ",
+"Thursday" => "วันพฤหัสบดี",
+"Friday" => "วันศุกร์",
+"Saturday" => "วันเสาร์",
+"Sunday" => "วันอาทิตย์",
+"events week of month" => "สัปดาห์ที่มีกิจกรรมของเดือน",
+"first" => "ลำดับแรก",
+"second" => "ลำดับที่สอง",
+"third" => "ลำดับที่สาม",
+"fourth" => "ลำดับที่สี่",
+"fifth" => "ลำดับที่ห้า",
+"last" => "ลำดับสุดท้าย",
+"January" => "มกราคม",
+"February" => "กุมภาพันธ์",
+"March" => "มีนาคม",
+"April" => "เมษายน",
+"May" => "พฤษภาคม",
+"June" => "มิถุนายน",
+"July" => "กรกฏาคม",
+"August" => "สิงหาคม",
+"September" => "กันยายน",
+"October" => "ตุลาคม",
+"November" => "พฤศจิกายน",
+"December" => "ธันวาคม",
+"by events date" => "ตามวันที่จัดกิจกรรม",
+"by yearday(s)" => "ของเมื่อวานนี้",
+"by weeknumber(s)" => "จากหมายเลขของสัปดาห์",
+"by day and month" => "ตามวันและเดือน",
+"Not an array" => "ไม่ใช่อาเรย์",
+"Date" => "วันที่",
+"Cal." => "คำนวณ",
+"All day" => "ทั้งวัน",
+"Missing fields" => "ช่องฟิลด์เกิดการสูญหาย",
+"Title" => "ชื่อกิจกรรม",
+"From Date" => "จากวันที่",
+"From Time" => "ตั้งแต่เวลา",
+"To Date" => "ถึงวันที่",
+"To Time" => "ถึงเวลา",
+"The event ends before it starts" => "วันที่สิ้นสุดกิจกรรมดังกล่าวอยู่ก่อนวันเริ่มต้น",
+"There was a database fail" => "เกิดความล้มเหลวกับฐานข้อมูล",
+"Week" => "สัปดาห์",
+"Month" => "เดือน",
+"List" => "รายการ",
+"Today" => "วันนี้",
+"Calendars" => "ปฏิทิน",
+"There was a fail, while parsing the file." => "เกิดความล้มเหลวในการแยกไฟล์",
+"Sun." => "อา.",
+"Mon." => "จ.",
+"Tue." => "อ.",
+"Wed." => "พ.",
+"Thu." => "พฤ.",
+"Fri." => "ศ.",
+"Sat." => "ส.",
+"Jan." => "ม.ค.",
+"Feb." => "ก.พ.",
+"Mar." => "มี.ค.",
+"Apr." => "เม.ย.",
+"May." => "พ.ค.",
+"Jun." => "มิ.ย.",
+"Jul." => "ก.ค.",
+"Aug." => "ส.ค.",
+"Sep." => "ก.ย.",
+"Oct." => "ต.ค.",
+"Nov." => "พ.ย.",
+"Dec." => "ธ.ค.",
+"Choose active calendars" => "เลือกปฏิทินที่ต้องการใช้งาน",
+"New Calendar" => "สร้างปฏิทินใหม่",
+"CalDav Link" => "ลิงค์ CalDav",
+"Download" => "ดาวน์โหลด",
+"Edit" => "แก้ไข",
+"Delete" => "ลบ",
+"New calendar" => "สร้างปฏิทินใหม่",
+"Edit calendar" => "แก้ไขปฏิทิน",
+"Displayname" => "ชื่อที่ต้องการให้แสดง",
+"Active" => "ใช้งาน",
+"Calendar color" => "สีของปฏิทิน",
+"Save" => "บันทึก",
+"Submit" => "ส่งข้อมูล",
+"Cancel" => "ยกเลิก",
+"Edit an event" => "แก้ไขกิจกรรม",
+"Export" => "ส่งออกข้อมูล",
+"Title of the Event" => "ชื่อของกิจกรรม",
+"Category" => "หมวดหมู่",
+"Select category" => "เลือกหมวดหมู่",
+"All Day Event" => "เป็นกิจกรรมตลอดทั้งวัน",
+"From" => "จาก",
+"To" => "ถึง",
+"Advanced options" => "ตัวเลือกขั้นสูง",
+"Repeat" => "ทำซ้ำ",
+"Advanced" => "ขั้นสูง",
+"Select weekdays" => "เลือกสัปดาห์",
+"Select days" => "เลือกวัน",
+"and the events day of year." => "และวันที่มีเหตุการณ์เกิดขึ้นในปี",
+"and the events day of month." => "และวันที่มีเหตุการณ์เกิดขึ้นในเดือน",
+"Select months" => "เลือกเดือน",
+"Select weeks" => "เลือกสัปดาห์",
+"and the events week of year." => "และสัปดาห์ที่มีเหตุการณ์เกิดขึ้นในปี",
+"Interval" => "ช่วงเวลา",
+"End" => "สิ้นสุด",
+"occurrences" => "จำนวนที่ปรากฏ",
+"Location" => "สถานที่",
+"Location of the Event" => "สถานที่จัดกิจกรรม",
+"Description" => "คำอธิบาย",
+"Description of the Event" => "คำอธิบายเกี่ยวกับกิจกรรม",
+"Import a calendar file" => "นำเข้าไฟล์ปฏิทิน",
+"Please choose the calendar" => "กรณาเลือกปฏิทิน",
+"create a new calendar" => "สร้างปฏิทินใหม่",
+"Name of new calendar" => "ชื่อของปฏิทิน",
+"Import" => "นำเข้าข้อมูล",
+"Importing calendar" => "นำเข้าข้อมูลปฏิทิน",
+"Calendar imported successfully" => "ปฏิทินถูกนำเข้าข้อมูลเรียบร้อยแล้ว",
+"Close Dialog" => "ปิดกล่องข้อความโต้ตอบ",
+"Create a new event" => "สร้างกิจกรรมใหม่",
+"Timezone" => "โซนเวลา",
+"Check always for changes of the timezone" => "ตรวจสอบการเปลี่ยนแปลงโซนเวลาอยู่เสมอ",
+"Timeformat" => "รูปแบบการแสดงเวลา",
+"24h" => "24 ช.ม.",
+"12h" => "12 ช.ม.",
+"Calendar CalDAV syncing address:" => "ที่อยู่ในการเชื่อมข้อมูลกับปฏิทิน CalDav:"
+);
diff --git a/apps/calendar/l10n/zh_CN.php b/apps/calendar/l10n/zh_CN.php
index 480b4530299..bed47610b90 100644
--- a/apps/calendar/l10n/zh_CN.php
+++ b/apps/calendar/l10n/zh_CN.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"New Timezone:" => "新时区:",
"Timezone changed" => "时区已修改",
"Invalid request" => "非法请求",
"Calendar" => "日历",
@@ -25,8 +26,46 @@
"Bi-Weekly" => "每两周",
"Monthly" => "每月",
"Yearly" => "每年",
+"never" => "从不",
+"by occurrences" => "按发生次数",
+"by date" => "按日期",
+"by monthday" => "按月的某天",
+"by weekday" => "按星期的某天",
+"Monday" => "星期一",
+"Tuesday" => "星期二",
+"Wednesday" => "星期三",
+"Thursday" => "星期四",
+"Friday" => "星期五",
+"Saturday" => "星期六",
+"Sunday" => "星期日",
+"events week of month" => "事件在每月的第几个星期",
+"first" => "第一",
+"second" => "第二",
+"third" => "第三",
+"fourth" => "第四",
+"fifth" => "第五",
+"last" => "最后",
+"January" => "一月",
+"February" => "二月",
+"March" => "三月",
+"April" => "四月",
+"May" => "五月",
+"June" => "六月",
+"July" => "七月",
+"August" => "八月",
+"September" => "九月",
+"October" => "十月",
+"November" => "十一月",
+"December" => "十二月",
+"by events date" => "按事件日期",
+"by yearday(s)" => "按每年的某天",
+"by weeknumber(s)" => "按星期数",
+"by day and month" => "按天和月份",
"Not an array" => "不是一个数组",
+"Date" => "日期",
+"Cal." => "日历",
"All day" => "全天",
+"New Calendar" => "新日历",
"Missing fields" => "缺少字段",
"Title" => "标题",
"From Date" => "从",
@@ -41,8 +80,26 @@
"Today" => "今天",
"Calendars" => "日历",
"There was a fail, while parsing the file." => "解析文件失败",
+"Sun." => "周日",
+"Mon." => "周一",
+"Tue." => "周二",
+"Wed." => "周三",
+"Thu." => "周四",
+"Fri." => "周五",
+"Sat." => "周六",
+"Jan." => "1月",
+"Feb." => "2月",
+"Mar." => "3月",
+"Apr." => "4月",
+"May." => "5月",
+"Jun." => "6月",
+"Jul." => "7月",
+"Aug." => "8月",
+"Sep." => "9月",
+"Oct." => "10月",
+"Nov." => "11月",
+"Dec." => "12月",
"Choose active calendars" => "选择活动日历",
-"New Calendar" => "新日历",
"CalDav Link" => "CalDav 链接",
"Download" => "下载",
"Edit" => "编辑",
@@ -65,14 +122,32 @@
"To" => "至",
"Advanced options" => "高级选项",
"Repeat" => "重复",
+"Advanced" => "高级",
+"Select weekdays" => "选择星期中的某天",
+"Select days" => "选择某天",
+"and the events day of year." => "选择每年事件发生的日子",
+"and the events day of month." => "选择每月事件发生的日子",
+"Select months" => "选择月份",
+"Select weeks" => "选择星期",
+"and the events week of year." => "选择每年的事件发生的星期",
+"Interval" => "间隔",
+"End" => "结束",
+"occurrences" => "次",
"Location" => "地点",
"Location of the Event" => "事件地点",
"Description" => "描述",
"Description of the Event" => "事件描述",
+"Import a calendar file" => "导入日历文件",
"Please choose the calendar" => "请选择日历",
+"create a new calendar" => "创建新日历",
+"Name of new calendar" => "新日历名称",
"Import" => "导入",
+"Importing calendar" => "导入日历",
+"Calendar imported successfully" => "导入日历成功",
+"Close Dialog" => "关闭对话框",
"Create a new event" => "创建新事件",
"Timezone" => "时区",
+"Check always for changes of the timezone" => "选中则总是按照时区变化",
"Timeformat" => "时间格式",
"24h" => "24小时",
"12h" => "12小时",
diff --git a/apps/calendar/templates/calendar.php b/apps/calendar/templates/calendar.php
index 6b2cd68c6fb..2d5cdea4d74 100755
--- a/apps/calendar/templates/calendar.php
+++ b/apps/calendar/templates/calendar.php
@@ -7,16 +7,17 @@
var monthNamesShort = <?php echo json_encode($l->tA(array('Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.'))) ?>;
var agendatime = '<?php echo ((int) OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'timeformat', '24') == 24 ? 'HH:mm' : 'hh:mm tt'); ?>{ - <?php echo ((int) OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'timeformat', '24') == 24 ? 'HH:mm' : 'hh:mm tt'); ?>}';
var defaulttime = '<?php echo ((int) OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'timeformat', '24') == 24 ? 'HH:mm' : 'hh:mm tt'); ?>';
- var allDayText = '<?php echo $l->t('All day') ?>';
- var missing_field = '<?php echo $l->t('Missing fields') ?>';
- var missing_field_title = '<?php echo $l->t('Title') ?>';
- var missing_field_calendar = '<?php echo $l->t('Calendar') ?>';
- var missing_field_fromdate = '<?php echo $l->t('From Date') ?>';
- var missing_field_fromtime = '<?php echo $l->t('From Time') ?>';
- var missing_field_todate = '<?php echo $l->t('To Date') ?>';
- var missing_field_totime = '<?php echo $l->t('To Time') ?>';
- var missing_field_startsbeforeends = '<?php echo $l->t('The event ends before it starts') ?>';
- var missing_field_dberror = '<?php echo $l->t('There was a database fail') ?>';
+ var allDayText = '<?php echo addslashes($l->t('All day')) ?>';
+ var newcalendar = '<?php echo addslashes($l->t('New Calendar')) ?>';
+ var missing_field = '<?php echo addslashes($l->t('Missing fields')) ?>';
+ var missing_field_title = '<?php echo addslashes($l->t('Title')) ?>';
+ var missing_field_calendar = '<?php echo addslashes($l->t('Calendar')) ?>';
+ var missing_field_fromdate = '<?php echo addslashes($l->t('From Date')) ?>';
+ var missing_field_fromtime = '<?php echo addslashes($l->t('From Time')) ?>';
+ var missing_field_todate = '<?php echo addslashes($l->t('To Date')) ?>';
+ var missing_field_totime = '<?php echo addslashes($l->t('To Time')) ?>';
+ var missing_field_startsbeforeends = '<?php echo addslashes($l->t('The event ends before it starts')) ?>';
+ var missing_field_dberror = '<?php echo addslashes($l->t('There was a database fail')) ?>';
var totalurl = '<?php echo OC_Helper::linkTo('apps/calendar', 'caldav.php', null, true); ?>/calendars';
$(document).ready(function() {
<?php
@@ -27,31 +28,17 @@
echo '$(\'#calendar_holder\').fullCalendar(\'gotoDate\', ' . $year . ', ' . --$month . ', ' . $day . ');';
echo '$(\'#dialog_holder\').load(OC.filePath(\'calendar\', \'ajax\', \'editeventform.php\') + \'?id=\' + ' . $_['showevent'] . ' , Calendar.UI.startEventDialog);';
}
-
- switch(OC_Preferences::getValue(OC_USER::getUser(), 'calendar', 'currentview', 'month')){
- case 'agendaWeek':
- echo '$(\'#oneweekview_radio\').css(\'color\', \'#6193CF\');';
- break;
- case 'month':
- echo '$(\'#onemonthview_radio\').css(\'color\', \'#6193CF\');';
- break;
- case 'list':
- echo '$(\'#listview_radio\').css(\'color\', \'#6193CF\');';
- break;
- default:
- break;
- }
?>
});
</script>
- <div id="loading"><img src="<?php echo OC_Helper::imagePath('core', 'loading.gif'); ?>" /></div>
<div id="controls">
<div>
<form>
<div id="view">
<input type="button" value="<?php echo $l->t('Week');?>" id="oneweekview_radio"/>
<input type="button" value="<?php echo $l->t('Month');?>" id="onemonthview_radio"/>
- <input type="button" value="<?php echo $l->t('List');?>" id="listview_radio"/>
+ <input type="button" value="<?php echo $l->t('List');?>" id="listview_radio"/>&nbsp;&nbsp;
+ <img id="loading" src="<?php echo OC_Helper::imagePath('core', 'loading.gif'); ?>" />
</div>
</form>
<form>
diff --git a/apps/calendar/templates/lAfix.php b/apps/calendar/templates/lAfix.php
deleted file mode 100644
index 61025ae6dea..00000000000
--- a/apps/calendar/templates/lAfix.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-$l->t('Sunday');
-$l->t('Monday');
-$l->t('Tuesday');
-$l->t('Wednesday');
-$l->t('Thursday');
-$l->t('Friday');
-$l->t('Saturday');
-$l->t('Sun.');
-$l->t('Mon.');
-$l->t('Tue.');
-$l->t('Wed.');
-$l->t('Thu.');
-$l->t('Fri.');
-$l->t('Sat.');
-$l->t('January');
-$l->t('February');
-$l->t('March');
-$l->t('April');
-$l->t('May');
-$l->t('June');
-$l->t('July');
-$l->t('August');
-$l->t('September');
-$l->t('October');
-$l->t('November');
-$l->t('December');
-$l->t('Jan.');
-$l->t('Feb.');
-$l->t('Mar.');
-$l->t('Apr.');
-$l->t('May.');
-$l->t('Jun.');
-$l->t('Jul.');
-$l->t('Aug.');
-$l->t('Sep.');
-$l->t('Oct.');
-$l->t('Nov.');
-$l->t('Dec.'); \ No newline at end of file
diff --git a/apps/calendar/templates/part.choosecalendar.php b/apps/calendar/templates/part.choosecalendar.php
index 65eb39cbfdf..86f09d62076 100644
--- a/apps/calendar/templates/part.choosecalendar.php
+++ b/apps/calendar/templates/part.choosecalendar.php
@@ -12,7 +12,7 @@ for($i = 0; $i < count($option_calendars); $i++){
?>
<tr>
<td colspan="6">
- <a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><?php echo $l->t('New Calendar') ?></a>
+ <a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="<?php echo $l->t('New Calendar') ?>"></a>
</td>
</tr>
<tr>
diff --git a/apps/contacts/ajax/addproperty.php b/apps/contacts/ajax/addproperty.php
index 0050f5f49aa..f016820ce5f 100644
--- a/apps/contacts/ajax/addproperty.php
+++ b/apps/contacts/ajax/addproperty.php
@@ -35,7 +35,7 @@ $name = $_POST['name'];
$value = $_POST['value'];
if(!is_array($value)){
$value = trim($value);
- if(!$value && in_array($name, array('TEL', 'EMAIL', 'ORG'))) {
+ if(!$value && in_array($name, array('TEL', 'EMAIL', 'ORG', 'BDAY', 'NICKNAME'))) {
OC_JSON::error(array('data' => array('message' => $l->t('Cannot add empty property.'))));
exit();
}
@@ -72,6 +72,7 @@ foreach ($parameters as $key=>$element) {
$vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$element);
}
}
+$checksum = md5($vcard->children[$line]->serialize());
if(!OC_Contacts_VCard::edit($id,$vcard->serialize())) {
OC_JSON::error(array('data' => array('message' => $l->t('Error adding contact property.'))));
@@ -88,4 +89,4 @@ $tmpl->assign('phone_types',$phone_types);
$tmpl->assign('property',OC_Contacts_VCard::structureProperty($property,$line));
$page = $tmpl->fetchPage();
-OC_JSON::success(array('data' => array( 'page' => $page )));
+OC_JSON::success(array('data' => array( 'checksum' => $checksum, 'page' => $page )));
diff --git a/apps/contacts/ajax/getdetails.php b/apps/contacts/ajax/getdetails.php
index 8cc0f9cbb0f..4819916f4c3 100644
--- a/apps/contacts/ajax/getdetails.php
+++ b/apps/contacts/ajax/getdetails.php
@@ -28,6 +28,7 @@ OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('contacts');
$id = $_GET['id'];
+$new = isset($_GET['new']) ? true : false;
$vcard = OC_Contacts_App::getContactVCard( $id );
-OC_Contacts_App::renderDetails($id, $vcard);
+OC_Contacts_App::renderDetails($id, $vcard, $new);
diff --git a/apps/contacts/ajax/setproperty.php b/apps/contacts/ajax/setproperty.php
index e0cd70236c8..cdc6d34c524 100644
--- a/apps/contacts/ajax/setproperty.php
+++ b/apps/contacts/ajax/setproperty.php
@@ -95,4 +95,4 @@ $tmpl->assign('phone_types',$phone_types);
$tmpl->assign('property',OC_Contacts_VCard::structureProperty($vcard->children[$line],$line));
$page = $tmpl->fetchPage();
-OC_JSON::success(array('data' => array( 'page' => $page, 'line' => $line, 'oldchecksum' => $_POST['checksum'] )));
+OC_JSON::success(array('data' => array( 'page' => $page, 'line' => $line, 'checksum' => $checksum, 'oldchecksum' => $_POST['checksum'] )));
diff --git a/apps/contacts/appinfo/app.php b/apps/contacts/appinfo/app.php
index df7e8cec6e0..a5b31006247 100644
--- a/apps/contacts/appinfo/app.php
+++ b/apps/contacts/appinfo/app.php
@@ -6,7 +6,7 @@ OC::$CLASSPATH['OC_Contacts_Addressbook'] = 'apps/contacts/lib/addressbook.php';
OC::$CLASSPATH['OC_Contacts_VCard'] = 'apps/contacts/lib/vcard.php';
OC::$CLASSPATH['OC_Contacts_Hooks'] = 'apps/contacts/lib/hooks.php';
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV'] = 'apps/contacts/lib/connector_sabre.php';
-OC_HOOK::connect('OC_User', 'post_createUser', 'OC_Contacts_Hooks', 'deleteUser');
+OC_HOOK::connect('OC_User', 'post_deleteUser', 'OC_Contacts_Hooks', 'deleteUser');
OC_App::register( array(
'order' => 10,
diff --git a/apps/contacts/l10n/ar.php b/apps/contacts/l10n/ar.php
index 935ac27dd0d..88671f600ef 100644
--- a/apps/contacts/l10n/ar.php
+++ b/apps/contacts/l10n/ar.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "خطء خلال توقيف كتاب العناوين.",
+"There was an error adding the contact." => "خطء خلال اضافة معرفه جديده.",
+"Cannot add empty property." => "لا يمكنك اضافه صفه خاليه.",
+"At least one of the address fields has to be filled out." => "يجب ملء على الاقل خانه واحده من العنوان.",
+"Error adding contact property." => "خطء خلال اضافة صفة المعرفه.",
+"Error adding addressbook." => "خطء خلال اضافة كتاب عناوين.",
+"Error activating addressbook." => "خطء خلال تفعيل كتاب العناوين.",
+"Error deleting contact property." => "خطء خلال محي الصفه.",
+"Error updating contact property." => "خطء خلال تعديل الصفه.",
+"Error updating addressbook." => "خطء خلال تعديل كتاب العناوين",
+"Contacts" => "المعارف",
"This is not your addressbook." => "هذا ليس دفتر عناوينك.",
"Contact could not be found." => "لم يتم العثور على الشخص.",
"Information about vCard is incorrect. Please reload the page." => "المعلومات الموجودة في ال vCard غير صحيحة. الرجاء إعادة تحديث الصفحة.",
@@ -14,11 +25,13 @@
"Fax" => "الفاكس",
"Video" => "الفيديو",
"Pager" => "الرنان",
+"Contact" => "معرفه",
"This is not your contact." => ".هذا ليس من معارفي",
-"This card is not RFC compatible." => "هذا الكرت ليس متلائم مع نظام ال RFC.",
-"This card does not contain a photo." => "لا يحتوي هذا الكرت على صورة.",
"Add Contact" => "أضف شخص ",
+"Addressbooks" => "كتب العناوين",
+"Addressbook" => "كتاب العناوين",
"Name" => "الاسم",
+"Type" => "نوع",
"PO Box" => "العنوان البريدي",
"Extended" => "إضافة",
"Street" => "شارع",
@@ -27,8 +40,25 @@
"Zipcode" => "رقم المنطقة",
"Country" => "البلد",
"Create Contact" => "أضف شخص ",
+"Choose active Address Books" => "أختر كتاب العناوين الفعال",
+"New Address Book" => "كتاب عناوين جديد",
+"CardDav Link" => "وصلة CardDav",
+"Download" => "انزال",
"Edit" => "تعديل",
"Delete" => "حذف",
+"Download contact" => "انزال المعرفه",
+"Delete contact" => "امحي المعرفه",
+"Add" => "أدخل",
+"New Addressbook" => "كتاب عناوين جديد",
+"Edit Addressbook" => "عدل كتاب العناوين",
+"Displayname" => "الاسم المعروض",
+"Active" => "فعال",
+"Save" => "حفظ",
+"Submit" => "ارسال",
+"Cancel" => "الغاء",
"Birthday" => "تاريخ الميلاد",
-"Phone" => "الهاتف"
+"Preferred" => "مفضل",
+"Phone" => "الهاتف",
+"Update" => "تعديل",
+"CardDAV syncing address:" => "CardDAV مزامنه العناوين:"
);
diff --git a/apps/contacts/l10n/ca.php b/apps/contacts/l10n/ca.php
index f421651671d..72338cf40d4 100644
--- a/apps/contacts/l10n/ca.php
+++ b/apps/contacts/l10n/ca.php
@@ -27,9 +27,7 @@
"Pager" => "Paginador",
"Contact" => "Contacte",
"This is not your contact." => "Aquest contacte no és vostre.",
-"This card is not RFC compatible." => "Aquesta targeta no és compatible amb RFC.",
-"This card does not contain a photo." => "Aquesta targeta no conté foto.",
-"Add Contact" => "Afegiu un contacte",
+"Add Contact" => "Afegir un contacte",
"Addressbooks" => "Llibretes d'adreces",
"Addressbook" => "Llibreta d'adreces",
"Name" => "Nom",
diff --git a/apps/contacts/l10n/cs_CZ.php b/apps/contacts/l10n/cs_CZ.php
index 0ccf9de8d0e..0831a91abcb 100644
--- a/apps/contacts/l10n/cs_CZ.php
+++ b/apps/contacts/l10n/cs_CZ.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "Chyba při (de)aktivaci adresáře.",
+"There was an error adding the contact." => "Během přidávání kontaktu nastala chyba.",
+"Cannot add empty property." => "Nelze přidat prazdný údaj.",
+"At least one of the address fields has to be filled out." => "Musí být uveden nejméně jeden z adresních údajů",
+"Error adding contact property." => "Chyba během přdávání údaje kontaktu.",
+"Error adding addressbook." => "Chyba při přidávání adresáře.",
+"Error activating addressbook." => "Chyba při aktivaci adresáře.",
+"Error deleting contact property." => "Chyba při odstraňování údaje kontaktu.",
+"Error updating contact property." => "Chyba při aktualizaci údaje kontaktu.",
+"Error updating addressbook." => "Chyba při aktualizaci adresáře.",
+"Contacts" => "Kontakty",
"This is not your addressbook." => "Toto není Váš adresář.",
"Contact could not be found." => "Kontakt nebyl nalezen.",
"Information about vCard is incorrect. Please reload the page." => "Informace o vCard je nesprávná. Obnovte stránku, prosím.",
@@ -14,10 +25,11 @@
"Fax" => "Fax",
"Video" => "Video",
"Pager" => "Pager",
+"Contact" => "Kontakt",
"This is not your contact." => "Toto není Váš kontakt.",
-"This card is not RFC compatible." => "Tato karta není kompatibilní s RFC.",
-"This card does not contain a photo." => "Tato karta neobsahuje foto",
"Add Contact" => "Přidat kontakt",
+"Addressbooks" => "Adresáře",
+"Addressbook" => "Adresář",
"Name" => "Jméno",
"Type" => "Typ",
"PO Box" => "PO box",
@@ -34,8 +46,11 @@
"Download" => "Stažení",
"Edit" => "Editovat",
"Delete" => "Odstranit",
+"Download contact" => "Stáhnout kontakt",
"Delete contact" => "Odstranit kontakt",
"Add" => "Přidat",
+"New Addressbook" => "Nový adresář",
+"Edit Addressbook" => "Editace adresáře",
"Displayname" => "Zobrazené jméno",
"Active" => "Aktivní",
"Save" => "Uložit",
@@ -44,5 +59,6 @@
"Birthday" => "Narozeniny",
"Preferred" => "Preferovaný",
"Phone" => "Telefon",
-"Update" => "Aktualizovat"
+"Update" => "Aktualizovat",
+"CardDAV syncing address:" => "CardDAV synchronizuje adresu:"
);
diff --git a/apps/contacts/l10n/da.php b/apps/contacts/l10n/da.php
index 2c597d1993b..a0a3760d013 100644
--- a/apps/contacts/l10n/da.php
+++ b/apps/contacts/l10n/da.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "Fejl ved (de)aktivering af adressebogen",
+"There was an error adding the contact." => "Der opstod en fejl ved tilføjelse af kontaktpersonen.",
+"Cannot add empty property." => "Kan ikke tilføje en egenskab uden indhold.",
+"At least one of the address fields has to be filled out." => "Der skal udfyldes mindst et adressefelt.",
+"Error adding contact property." => "Fejl ved tilføjelse af egenskab.",
+"Error adding addressbook." => "Fejl ved tilføjelse af adressebog.",
+"Error activating addressbook." => "Fejl ved aktivering af adressebog.",
+"Error deleting contact property." => "Fejl ved sletning af egenskab for kontaktperson.",
+"Error updating contact property." => "Fejl ved opdatering af egenskab for kontaktperson.",
+"Error updating addressbook." => "Fejl ved opdatering af adressebog",
+"Contacts" => "Kontaktpersoner",
"This is not your addressbook." => "Dette er ikke din adressebog.",
"Contact could not be found." => "Kontaktperson kunne ikke findes.",
"Information about vCard is incorrect. Please reload the page." => "Informationen om vCard er forkert. Genindlæs siden.",
@@ -14,10 +25,11 @@
"Fax" => "Fax",
"Video" => "Video",
"Pager" => "Personsøger",
+"Contact" => "Kontaktperson",
"This is not your contact." => "Dette er ikke din kontaktperson.",
-"This card is not RFC compatible." => "Dette kort er ikke RFC-kompatibelt.",
-"This card does not contain a photo." => "Dette kort indeholder ikke et foto.",
"Add Contact" => "Tilføj kontaktperson",
+"Addressbooks" => "Adressebøger",
+"Addressbook" => "Adressebog",
"Name" => "Navn",
"Type" => "Type",
"PO Box" => "Postboks",
@@ -34,8 +46,11 @@
"Download" => "Download",
"Edit" => "Rediger",
"Delete" => "Slet",
+"Download contact" => "Download kontaktperson",
"Delete contact" => "Slet kontaktperson",
"Add" => "Tilføj",
+"New Addressbook" => "Ny adressebog",
+"Edit Addressbook" => "Rediger adressebog",
"Displayname" => "Vist navn",
"Active" => "Aktiv",
"Save" => "Gem",
@@ -44,5 +59,6 @@
"Birthday" => "Fødselsdag",
"Preferred" => "Foretrukken",
"Phone" => "Telefon",
-"Update" => "Opdater"
+"Update" => "Opdater",
+"CardDAV syncing address:" => "Synkroniseringsadresse for CardDAV:"
);
diff --git a/apps/contacts/l10n/de.php b/apps/contacts/l10n/de.php
index 53f8a9e6648..278009092c1 100644
--- a/apps/contacts/l10n/de.php
+++ b/apps/contacts/l10n/de.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "(De-)Aktivierung des Adressbuches fehlgeschlagen",
+"There was an error adding the contact." => "Erstellen des Kontakts fehlgeschlagen",
+"Cannot add empty property." => "Feld darf nicht leer sein.",
+"At least one of the address fields has to be filled out." => "Mindestens eines der Adressfelder muss ausgefüllt werden.",
+"Error adding contact property." => "Kontakt ändern fehlgeschlagen",
+"Error adding addressbook." => "Adressbuch hinzufügen fehlgeschlagen",
+"Error activating addressbook." => "Adressbuchaktivierung fehlgeschlagen",
+"Error deleting contact property." => "Kontakteigenschaft löschen fehlgeschlagen",
+"Error updating contact property." => "Kontakteigenschaft aktualisieren fehlgeschlagen",
+"Error updating addressbook." => "Adressbuch aktualisieren fehlgeschlagen",
+"Contacts" => "Kontakte",
"This is not your addressbook." => "Dies ist nicht dein Adressbuch.",
"Contact could not be found." => "Kontakt konnte nicht gefunden werden.",
"Information about vCard is incorrect. Please reload the page." => "Die Information der vCard ist fehlerhaft. Bitte aktualisiere die Seite.",
@@ -14,10 +25,11 @@
"Fax" => "Fax",
"Video" => "Video",
"Pager" => "Pager",
+"Contact" => "Kontakt",
"This is not your contact." => "Dies ist nicht dein Kontakt.",
-"This card is not RFC compatible." => "Diese Karte ist nicht RFC-kompatibel.",
-"This card does not contain a photo." => "Diese Karte enthält kein Foto.",
"Add Contact" => "Kontakt hinzufügen",
+"Addressbooks" => "Adressbücher",
+"Addressbook" => "Adressbuch",
"Name" => "Name",
"Type" => "Typ",
"PO Box" => "Postfach",
@@ -34,8 +46,11 @@
"Download" => "Herunterladen",
"Edit" => "Bearbeiten",
"Delete" => "Löschen",
+"Download contact" => "Kontakt herunterladen",
"Delete contact" => "Kontakt löschen",
"Add" => "Hinzufügen",
+"New Addressbook" => "Neues Adressbuch",
+"Edit Addressbook" => "Adressbuch editieren",
"Displayname" => "Anzeigename",
"Active" => "Aktiv",
"Save" => "Speichern",
@@ -44,5 +59,6 @@
"Birthday" => "Geburtstag",
"Preferred" => "Bevorzugt",
"Phone" => "Telefon",
-"Update" => "Aktualisieren"
+"Update" => "Aktualisieren",
+"CardDAV syncing address:" => "CardDAV Sync-Adresse:"
);
diff --git a/apps/contacts/l10n/el.php b/apps/contacts/l10n/el.php
index 8f2b1e30464..d58b199b674 100644
--- a/apps/contacts/l10n/el.php
+++ b/apps/contacts/l10n/el.php
@@ -15,8 +15,6 @@
"Video" => "Βίντεο",
"Pager" => "Βομβητής",
"This is not your contact." => "Αυτή δεν είναι επαφή σας.",
-"This card is not RFC compatible." => "Αυτή η κάρτα δεν είναι RFC συμβατή.",
-"This card does not contain a photo." => "Αυτή η κάρτα δεν περιέχει φωτογραφία.",
"Add Contact" => "Προσθήκη επαφής",
"Name" => "Όνομα",
"Type" => "Τύπος",
diff --git a/apps/contacts/l10n/eo.php b/apps/contacts/l10n/eo.php
index ef55bbebbb9..121186499b3 100644
--- a/apps/contacts/l10n/eo.php
+++ b/apps/contacts/l10n/eo.php
@@ -15,8 +15,6 @@
"Video" => "Videaĵo",
"Pager" => "Televokilo",
"This is not your contact." => "Tiu ĉi ne estas via kontakto.",
-"This card is not RFC compatible." => "Ĉi tiu karto ne kongruas kun RFC.",
-"This card does not contain a photo." => "Ĉi tiu karto ne havas foton.",
"Add Contact" => "Aldoni kontakton",
"Name" => "Nomo",
"PO Box" => "Abonkesto",
diff --git a/apps/contacts/l10n/es.php b/apps/contacts/l10n/es.php
index 260fe2ac976..b94c53e90d0 100644
--- a/apps/contacts/l10n/es.php
+++ b/apps/contacts/l10n/es.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "Error al (des)activar libreta de direcciones.",
+"There was an error adding the contact." => "Ocurrió un error al agregar el contacto.",
+"Cannot add empty property." => "No se puede agregar una propiedad vacía.",
+"At least one of the address fields has to be filled out." => "Al menos uno de los campos de direcciones tiene que ser llenado.",
+"Error adding contact property." => "Error al agregar una propiedad del contacto.",
+"Error adding addressbook." => "Error al agregar la libreta de direcciones.",
+"Error activating addressbook." => "Error al activar la libreta de direcciones.",
+"Error deleting contact property." => "Error al borrar una propiedad del contacto.",
+"Error updating contact property." => "Error al actualizar una propiedad del contacto.",
+"Error updating addressbook." => "Error al actualizar la libreta de direcciones.",
+"Contacts" => "Contactos",
"This is not your addressbook." => "Esta no es tu agenda de contactos.",
"Contact could not be found." => "No se pudo encontrar el contacto.",
"Information about vCard is incorrect. Please reload the page." => "La información sobre el vCard es incorrecta. Por favor vuelve a cargar la página.",
@@ -14,10 +25,11 @@
"Fax" => "Fax",
"Video" => "Video",
"Pager" => "Localizador",
+"Contact" => "Contacto",
"This is not your contact." => "Este no es tu contacto.",
-"This card is not RFC compatible." => "Esta tarjeta no es compatible con RFC.",
-"This card does not contain a photo." => "Esta tarjeta no contiene ninguna foto.",
"Add Contact" => "Agregar contacto",
+"Addressbooks" => "Libretas de direcciones",
+"Addressbook" => "Libreta de direcciones",
"Name" => "Nombre",
"Type" => "Tipo",
"PO Box" => "Código postal",
@@ -28,13 +40,18 @@
"Zipcode" => "Código Postal",
"Country" => "País",
"Create Contact" => "Crear contacto",
+"Choose active Address Books" => "Elige libreta de direcciones activa",
"New Address Book" => "Nueva libreta de direcciones",
"CardDav Link" => "Link Card Dav",
"Download" => "Descargar",
"Edit" => "Editar",
"Delete" => "Borrar",
+"Download contact" => "Descargar contacto",
"Delete contact" => "Eliminar contacto",
"Add" => "Añadir",
+"New Addressbook" => "Nueva libreta de direcciones",
+"Edit Addressbook" => "Editar libreta de direcciones",
+"Displayname" => "Nombre a mostrar",
"Active" => "Activo",
"Save" => "Guardar",
"Submit" => "Aceptar",
@@ -42,5 +59,6 @@
"Birthday" => "Cumpleaños",
"Preferred" => "Preferido",
"Phone" => "Teléfono",
-"Update" => "Actualizar"
+"Update" => "Actualizar",
+"CardDAV syncing address:" => "Dirección de sincronización CardDAV:"
);
diff --git a/apps/contacts/l10n/et_EE.php b/apps/contacts/l10n/et_EE.php
index f57190bddcc..5054cbfc447 100644
--- a/apps/contacts/l10n/et_EE.php
+++ b/apps/contacts/l10n/et_EE.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "Viga aadressiraamatu (de)aktiveerimisel.",
+"There was an error adding the contact." => "Konktakti lisamisel tekkis viga.",
+"Cannot add empty property." => "Tühja omadust ei saa lisada.",
+"At least one of the address fields has to be filled out." => "Vähemalt üks aadressiväljadest peab olema täidetud.",
+"Error adding contact property." => "Viga konktakti korralikul lisamisel.",
+"Error adding addressbook." => "Viga aadressiraamatu lisamisel.",
+"Error activating addressbook." => "Viga aadressiraamatu aktiveerimisel.",
+"Error deleting contact property." => "Viga konktaki korralikul kustutamisel.",
+"Error updating contact property." => "Viga konktaki korralikul uuendamisel.",
+"Error updating addressbook." => "Viga aadressiraamatu uuendamisel.",
+"Contacts" => "Kontaktid",
"This is not your addressbook." => "See pole sinu aadressiraamat.",
"Contact could not be found." => "Kontakti ei leitud.",
"Information about vCard is incorrect. Please reload the page." => "Visiitkaardi info pole korrektne. Palun lae leht uuesti.",
@@ -14,11 +25,13 @@
"Fax" => "Faks",
"Video" => "Video",
"Pager" => "Piipar",
+"Contact" => "Kontakt",
"This is not your contact." => "See pole sinu kontakt.",
-"This card is not RFC compatible." => "See kaart ei ühildu RFC-ga.",
-"This card does not contain a photo." => "Sellel kaardil pole fotot.",
"Add Contact" => "Lisa kontakt",
+"Addressbooks" => "Aadressiraamatud",
+"Addressbook" => "Aadressiraamat",
"Name" => "Nimi",
+"Type" => "Tüüp",
"PO Box" => "Postkontori postkast",
"Extended" => "Laiendatud",
"Street" => "Tänav",
@@ -27,8 +40,25 @@
"Zipcode" => "Postiindeks",
"Country" => "Riik",
"Create Contact" => "Lisa kontakt",
+"Choose active Address Books" => "Vali aktiivsed aadressiraamatud",
+"New Address Book" => "Uus aadressiraamat",
+"CardDav Link" => "CardDav link",
+"Download" => "Lae alla",
"Edit" => "Muuda",
"Delete" => "Kustuta",
+"Download contact" => "Lae kontakt alla",
+"Delete contact" => "Kustuta kontakt",
+"Add" => "Lisa",
+"New Addressbook" => "Uus aadressiraamat",
+"Edit Addressbook" => "Muuda aadressiraamatut",
+"Displayname" => "Näidatav nimi",
+"Active" => "Aktiivne",
+"Save" => "Salvesta",
+"Submit" => "Saada",
+"Cancel" => "Loobu",
"Birthday" => "Sünnipäev",
-"Phone" => "Telefon"
+"Preferred" => "Eelistatud",
+"Phone" => "Telefon",
+"Update" => "Uuenda",
+"CardDAV syncing address:" => "CardDAV sünkroniseerimise aadress:"
);
diff --git a/apps/contacts/l10n/eu.php b/apps/contacts/l10n/eu.php
index c37b6f2762f..9b3501270ba 100644
--- a/apps/contacts/l10n/eu.php
+++ b/apps/contacts/l10n/eu.php
@@ -15,8 +15,6 @@
"Video" => "Bideoa",
"Pager" => "Bilagailua",
"This is not your contact." => "Hau ez da zure kontaktua.",
-"This card is not RFC compatible." => "Txartel hau ez da RFC bateragarria.",
-"This card does not contain a photo." => "Txartel honek ez dauka argazkirik.",
"Add Contact" => "Gehitu Kontaktua",
"Name" => "Izena",
"PO Box" => "Posta kutxa",
diff --git a/apps/contacts/l10n/fr.php b/apps/contacts/l10n/fr.php
index 8970d716b0e..d14d56d951f 100644
--- a/apps/contacts/l10n/fr.php
+++ b/apps/contacts/l10n/fr.php
@@ -27,8 +27,6 @@
"Pager" => "Bipeur",
"Contact" => "Contact",
"This is not your contact." => "Ce n'est pas votre contact.",
-"This card is not RFC compatible." => "Cette fiche n'est pas compatible RFC.",
-"This card does not contain a photo." => "Cette fiche ne contient pas de photo.",
"Add Contact" => "Ajouter un Contact",
"Addressbooks" => "Carnets d'adresses",
"Addressbook" => "Carnet d'adresses",
diff --git a/apps/contacts/l10n/gl.php b/apps/contacts/l10n/gl.php
index 0fd88ead191..8333697fb60 100644
--- a/apps/contacts/l10n/gl.php
+++ b/apps/contacts/l10n/gl.php
@@ -27,8 +27,6 @@
"Pager" => "Paxinador",
"Contact" => "Contacto",
"This is not your contact." => "Este non é un dos seus contactos",
-"This card is not RFC compatible." => "Esta tarxeta non é compatible con RFC",
-"This card does not contain a photo." => "Esta tarxeta non ten fotografía",
"Add Contact" => "Engadir contacto",
"Addressbooks" => "Directorios",
"Addressbook" => "Directorio",
diff --git a/apps/contacts/l10n/he.php b/apps/contacts/l10n/he.php
index b16eeac2ba8..5818cab2074 100644
--- a/apps/contacts/l10n/he.php
+++ b/apps/contacts/l10n/he.php
@@ -15,8 +15,6 @@
"Video" => "וידאו",
"Pager" => "זימונית",
"This is not your contact." => "זהו אינו איש קשר שלך",
-"This card is not RFC compatible." => "כרטיס זה אינו תואם ל־RFC",
-"This card does not contain a photo." => "כרטיס זה אינו כולל תמונה",
"Add Contact" => "הוספת איש קשר",
"Name" => "שם",
"PO Box" => "תא דואר",
diff --git a/apps/contacts/l10n/hr.php b/apps/contacts/l10n/hr.php
index dfeab8bdea9..4937c0bcb2c 100644
--- a/apps/contacts/l10n/hr.php
+++ b/apps/contacts/l10n/hr.php
@@ -15,8 +15,6 @@
"Video" => "Video",
"Pager" => "Pager",
"This is not your contact." => "Ovo nije vaš kontakt.",
-"This card is not RFC compatible." => "Ova kartica nije sukladna prema RFC direktivama.",
-"This card does not contain a photo." => "Ova kartica ne sadrži fotografiju.",
"Add Contact" => "Dodaj kontakt",
"Name" => "Naziv",
"PO Box" => "Poštanski Pretinac",
diff --git a/apps/contacts/l10n/hu_HU.php b/apps/contacts/l10n/hu_HU.php
index 74d66e9f7d3..fa81831f965 100644
--- a/apps/contacts/l10n/hu_HU.php
+++ b/apps/contacts/l10n/hu_HU.php
@@ -15,8 +15,6 @@
"Video" => "Video",
"Pager" => "Lapozó",
"This is not your contact." => "Nem a te kapcsolatod.",
-"This card is not RFC compatible." => "A kártya nem RFC kompatibilis.",
-"This card does not contain a photo." => "A kártya nem tartlmaz fényképet.",
"Add Contact" => "Kontakt hozzáadása",
"Name" => "Név",
"PO Box" => "Postafiók",
diff --git a/apps/contacts/l10n/ia.php b/apps/contacts/l10n/ia.php
index d4203ce8f04..0c1dd6e9632 100644
--- a/apps/contacts/l10n/ia.php
+++ b/apps/contacts/l10n/ia.php
@@ -13,7 +13,6 @@
"Video" => "Video",
"Pager" => "Pager",
"This is not your contact." => "Iste non es tu contacto",
-"This card is not RFC compatible." => "Iste carta non es compatibile con RFC",
"Add Contact" => "Adder contacto",
"Name" => "Nomine",
"PO Box" => "Cassa postal",
diff --git a/apps/contacts/l10n/it.php b/apps/contacts/l10n/it.php
index 6ac1677e3c0..b7f30bc034a 100644
--- a/apps/contacts/l10n/it.php
+++ b/apps/contacts/l10n/it.php
@@ -27,8 +27,6 @@
"Pager" => "Cercapersone",
"Contact" => "Contatto",
"This is not your contact." => "Questo non è un tuo contatto.",
-"This card is not RFC compatible." => "Questa card non è compatibile con il protocollo RFC.",
-"This card does not contain a photo." => "Questa card non contiene una foto.",
"Add Contact" => "Aggiungi contatto",
"Addressbooks" => "Rubriche",
"Addressbook" => "Rubrica",
diff --git a/apps/contacts/l10n/ja_JP.php b/apps/contacts/l10n/ja_JP.php
index c8711e963f3..e8417562b86 100644
--- a/apps/contacts/l10n/ja_JP.php
+++ b/apps/contacts/l10n/ja_JP.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "電話帳の有効/無効化に失敗しました。",
+"There was an error adding the contact." => "連絡先の追加でエラーが発生しました。",
+"Cannot add empty property." => "項目の新規追加に失敗しました。",
+"At least one of the address fields has to be filled out." => "アドレス項目の1つは記入して下さい。",
+"Error adding contact property." => "連絡先の追加に失敗しました。",
+"Error adding addressbook." => "電話帳の追加に失敗しました。",
+"Error activating addressbook." => "電話帳の有効化に失敗しました。",
+"Error deleting contact property." => "連絡先の削除に失敗しました。",
+"Error updating contact property." => "連絡先の更新に失敗しました。",
+"Error updating addressbook." => "電話帳の更新に失敗しました。",
+"Contacts" => "連絡先",
"This is not your addressbook." => "これはあなたの電話帳ではありません。",
"Contact could not be found." => "連絡先を見つける事ができません。",
"Information about vCard is incorrect. Please reload the page." => "vCardの情報に誤りがあります。ページをリロードして下さい。",
@@ -14,11 +25,13 @@
"Fax" => "FAX",
"Video" => "テレビ電話",
"Pager" => "ポケベル",
+"Contact" => "連絡先",
"This is not your contact." => "あなたの連絡先ではありません。",
-"This card is not RFC compatible." => "このカードはRFCに準拠していません。",
-"This card does not contain a photo." => "このカードは写真を含んでおりません。",
"Add Contact" => "連絡先の追加",
+"Addressbooks" => "電話帳",
+"Addressbook" => "電話帳",
"Name" => "氏名",
+"Type" => "種類",
"PO Box" => "私書箱",
"Extended" => "拡張番地",
"Street" => "街路番地",
@@ -27,8 +40,25 @@
"Zipcode" => "郵便番号",
"Country" => "国名",
"Create Contact" => "追加",
+"Choose active Address Books" => "有効な電話帳の選択",
+"New Address Book" => "新規電話帳",
+"CardDav Link" => "CardDAV リンク",
+"Download" => "ダウンロード",
"Edit" => "編集",
"Delete" => "削除",
+"Download contact" => "連絡先のダウンロード",
+"Delete contact" => "連絡先の削除",
+"Add" => "追加",
+"New Addressbook" => "電話帳の新規作成",
+"Edit Addressbook" => "電話帳の編集",
+"Displayname" => "表示名",
+"Active" => "アクティブ",
+"Save" => "保存",
+"Submit" => "送信",
+"Cancel" => "取り消し",
"Birthday" => "生年月日",
-"Phone" => "電話番号"
+"Preferred" => "推奨",
+"Phone" => "電話番号",
+"Update" => "更新",
+"CardDAV syncing address:" => "CardDAV 同期アドレス:"
);
diff --git a/apps/contacts/l10n/lb.php b/apps/contacts/l10n/lb.php
index 4190072171a..e8f17a6fa58 100644
--- a/apps/contacts/l10n/lb.php
+++ b/apps/contacts/l10n/lb.php
@@ -15,8 +15,6 @@
"Video" => "Video",
"Pager" => "Pager",
"This is not your contact." => "Dat do ass net däin Kontakt.",
-"This card is not RFC compatible." => "Déi do Kaart ass net RFC kompatibel.",
-"This card does not contain a photo." => "Déi do Kaart huet keng Foto.",
"Add Contact" => "Kontakt bäisetzen",
"Name" => "Numm",
"PO Box" => "Postleetzuel",
diff --git a/apps/contacts/l10n/nl.php b/apps/contacts/l10n/nl.php
index 0bfa86c8c44..5719330ba3b 100644
--- a/apps/contacts/l10n/nl.php
+++ b/apps/contacts/l10n/nl.php
@@ -15,8 +15,6 @@
"Video" => "Video",
"Pager" => "Pieper",
"This is not your contact." => "Dit is niet uw contactpersoon.",
-"This card is not RFC compatible." => "Deze kaart is niet RFC compatibel.",
-"This card does not contain a photo." => "Deze contact bevat geen foto.",
"Add Contact" => "Contact toevoegen",
"Name" => "Naam",
"Type" => "Type",
diff --git a/apps/contacts/l10n/nn_NO.php b/apps/contacts/l10n/nn_NO.php
index 12d914a805c..d0e3041d245 100644
--- a/apps/contacts/l10n/nn_NO.php
+++ b/apps/contacts/l10n/nn_NO.php
@@ -15,8 +15,6 @@
"Video" => "Video",
"Pager" => "Personsøkjar",
"This is not your contact." => "Dette er ikkje din kontakt.",
-"This card is not RFC compatible." => "Dette kortet er ikkje RFC-kompatibelt",
-"This card does not contain a photo." => "Dette kortet har ingen bilete.",
"Add Contact" => "Legg til kontakt",
"Name" => "Namn",
"PO Box" => "Postboks",
diff --git a/apps/contacts/l10n/pl.php b/apps/contacts/l10n/pl.php
index 72bdf967a4e..ad1e8c7baa4 100644
--- a/apps/contacts/l10n/pl.php
+++ b/apps/contacts/l10n/pl.php
@@ -27,8 +27,6 @@
"Pager" => "Pager",
"Contact" => "Kontakt",
"This is not your contact." => "To nie jest twój kontakt.",
-"This card is not RFC compatible." => "Ta karta nie jest zgodna ze specyfikacją RFC.",
-"This card does not contain a photo." => "Ta karta nie zawiera zdjęć.",
"Add Contact" => "Dodaj kontakt",
"Addressbooks" => "Książki adresowe",
"Addressbook" => "Książka adresowa",
diff --git a/apps/contacts/l10n/pt_BR.php b/apps/contacts/l10n/pt_BR.php
index db9e98d6fe0..9f68e50cf9d 100644
--- a/apps/contacts/l10n/pt_BR.php
+++ b/apps/contacts/l10n/pt_BR.php
@@ -15,8 +15,6 @@
"Video" => "Vídeo",
"Pager" => "Pager",
"This is not your contact." => "Este não é o seu contato.",
-"This card is not RFC compatible." => "Este cartão não é compatível com RFC.",
-"This card does not contain a photo." => "Este cartão não contém uma foto.",
"Add Contact" => "Adicionar Contato",
"Name" => "Nome",
"PO Box" => "Caixa Postal",
diff --git a/apps/contacts/l10n/pt_PT.php b/apps/contacts/l10n/pt_PT.php
index d5916838dbe..68c83f02c51 100644
--- a/apps/contacts/l10n/pt_PT.php
+++ b/apps/contacts/l10n/pt_PT.php
@@ -15,8 +15,6 @@
"Video" => "Vídeo",
"Pager" => "Pager",
"This is not your contact." => "Este não é o seu contacto",
-"This card is not RFC compatible." => "Este cartão não é compativel com RFC",
-"This card does not contain a photo." => "Este cartão não possui foto",
"Add Contact" => "Adicionar Contacto",
"Name" => "Nome",
"PO Box" => "Apartado",
diff --git a/apps/contacts/l10n/ro.php b/apps/contacts/l10n/ro.php
index 4fc10abddb0..47a8b59599c 100644
--- a/apps/contacts/l10n/ro.php
+++ b/apps/contacts/l10n/ro.php
@@ -15,8 +15,6 @@
"Video" => "Video",
"Pager" => "Pager",
"This is not your contact." => "Nu este contactul tău",
-"This card is not RFC compatible." => "Nu este compatibil RFC",
-"This card does not contain a photo." => "Nu conține o fotografie",
"Add Contact" => "Adaugă contact",
"Name" => "Nume",
"Type" => "Tip",
diff --git a/apps/contacts/l10n/ru.php b/apps/contacts/l10n/ru.php
index 5eb765f222e..5e48d5776a3 100644
--- a/apps/contacts/l10n/ru.php
+++ b/apps/contacts/l10n/ru.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "Ошибка (де)активации адресной книги.",
+"There was an error adding the contact." => "Произошла ошибка при добавлении контакта.",
+"Cannot add empty property." => "Невозможно добавить пустой параметр.",
+"At least one of the address fields has to be filled out." => "Как минимум одно поле адреса должно быть заполнено.",
+"Error adding contact property." => "Ошибка добавления информации к контакту.",
+"Error adding addressbook." => "Ошибка добавления адресной книги.",
+"Error activating addressbook." => "Ошибка активации адресной книги.",
+"Error deleting contact property." => "Ошибка удаления информации из контакта.",
+"Error updating contact property." => "Ошибка обновления информации контакта.",
+"Error updating addressbook." => "Ошибка обновления адресной книги.",
+"Contacts" => "Контакты",
"This is not your addressbook." => "Это не ваша адресная книга.",
"Contact could not be found." => "Контакт не найден.",
"Information about vCard is incorrect. Please reload the page." => "Информация о vCard некорректна. Пожалуйста, обновите страницу.",
@@ -14,11 +25,13 @@
"Fax" => "Факс",
"Video" => "Видео",
"Pager" => "Пейджер",
+"Contact" => "Контакт",
"This is not your contact." => "Это не контакт.",
-"This card is not RFC compatible." => "Эта карточка не соответствует RFC.",
-"This card does not contain a photo." => "Эта карточка не содержит фотографии.",
"Add Contact" => "Добавить Контакт",
+"Addressbooks" => "Адресные книги",
+"Addressbook" => "Адресная книга",
"Name" => "Имя",
+"Type" => "Тип",
"PO Box" => "АО",
"Extended" => "Расширенный",
"Street" => "Улица",
@@ -27,8 +40,25 @@
"Zipcode" => "Почтовый индекс",
"Country" => "Страна",
"Create Contact" => "Создать Контакт",
+"Choose active Address Books" => "Выберите активные адресные книги",
+"New Address Book" => "Новая адресная книга",
+"CardDav Link" => "Ссылка CardDAV",
+"Download" => "Скачать",
"Edit" => "Редактировать",
"Delete" => "Удалить",
+"Download contact" => "Скачать контакт",
+"Delete contact" => "Удалить контакт",
+"Add" => "Добавить",
+"New Addressbook" => "Новая адресная книга",
+"Edit Addressbook" => "Править адресную книгу",
+"Displayname" => "Отображаемое имя",
+"Active" => "Активно",
+"Save" => "Сохранить",
+"Submit" => "Отправить",
+"Cancel" => "Отменить",
"Birthday" => "День рождения",
-"Phone" => "Телефон"
+"Preferred" => "Предпочитаемый",
+"Phone" => "Телефон",
+"Update" => "Обновить",
+"CardDAV syncing address:" => "Адрес синхронизации CardDAV:"
);
diff --git a/apps/contacts/l10n/sk_SK.php b/apps/contacts/l10n/sk_SK.php
index 16876cc59b2..a28907aac8a 100644
--- a/apps/contacts/l10n/sk_SK.php
+++ b/apps/contacts/l10n/sk_SK.php
@@ -1,4 +1,9 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "Chyba (de)aktivácie adresára.",
+"There was an error adding the contact." => "Vyskytla sa chyba pri pridávaní kontaktu.",
+"Error activating addressbook." => "Chyba aktivovania adresára.",
+"Error updating addressbook." => "Chyba aktualizácie adresára.",
+"Contacts" => "Kontakty",
"This is not your addressbook." => "Toto nie je váš adresár.",
"Contact could not be found." => "Kontakt nebol nájdený.",
"Information about vCard is incorrect. Please reload the page." => "Informácie o vCard sú neplatné. Prosím obnovte stránku.",
@@ -14,11 +19,13 @@
"Fax" => "Fax",
"Video" => "Video",
"Pager" => "Pager",
+"Contact" => "Kontakt",
"This is not your contact." => "Toto nie je váš kontakt.",
-"This card is not RFC compatible." => "Táto karta nie je kompatibilná s RFC.",
-"This card does not contain a photo." => "Táto karta neobsahuje fotografiu.",
"Add Contact" => "Pridať Kontakt.",
+"Addressbooks" => "Adresáre",
+"Addressbook" => "Adresár",
"Name" => "Meno",
+"Type" => "Typ",
"PO Box" => "PO Box",
"Extended" => "Rozšírené",
"Street" => "Ulica",
@@ -27,8 +34,25 @@
"Zipcode" => "PSČ",
"Country" => "Krajina",
"Create Contact" => "Vytvoriť Kontakt.",
+"Choose active Address Books" => "Zvoliť aktívny adresár",
+"New Address Book" => "Nový adresár",
+"CardDav Link" => "CardDav odkaz",
+"Download" => "Stiahnuť",
"Edit" => "Upraviť",
"Delete" => "Odstrániť",
+"Download contact" => "Stiahnuť kontakt",
+"Delete contact" => "Odstrániť kontakt",
+"Add" => "Pridať",
+"New Addressbook" => "Nový Adresár",
+"Edit Addressbook" => "Upraviť Adresár",
+"Displayname" => "Zobrazené meno",
+"Active" => "Aktívny",
+"Save" => "Uložiť",
+"Submit" => "Odoslať",
+"Cancel" => "Zrušiť",
"Birthday" => "Narodeniny",
-"Phone" => "Telefón"
+"Preferred" => "Uprednostňované",
+"Phone" => "Telefón",
+"Update" => "Aktualizovať",
+"CardDAV syncing address:" => "Synchronizačná adresa CardDAV:"
);
diff --git a/apps/contacts/l10n/sl.php b/apps/contacts/l10n/sl.php
index 2c81567eae0..79039c36d63 100644
--- a/apps/contacts/l10n/sl.php
+++ b/apps/contacts/l10n/sl.php
@@ -15,8 +15,6 @@
"Video" => "Video",
"Pager" => "Pager",
"This is not your contact." => "To ni vaš kontakt",
-"This card is not RFC compatible." => "Ta karta ni RFC kopatibilna.",
-"This card does not contain a photo." => "Ta karta ne vsebuje slike.",
"Add Contact" => "Dodaj Kontakt",
"Name" => "Ime",
"PO Box" => "PO Box",
diff --git a/apps/contacts/l10n/sr.php b/apps/contacts/l10n/sr.php
index d09bac430f2..6404fb44b18 100644
--- a/apps/contacts/l10n/sr.php
+++ b/apps/contacts/l10n/sr.php
@@ -17,8 +17,6 @@
"Pager" => "Пејџер",
"Contact" => "Контакт",
"This is not your contact." => "Ово није ваш контакт.",
-"This card is not RFC compatible." => "Ова карта није сагласна са РФЦ-ом.",
-"This card does not contain a photo." => "Ова карта не садржи фотографију.",
"Add Contact" => "Додај контакт",
"Addressbooks" => "Адресар",
"Addressbook" => "Адресар",
diff --git a/apps/contacts/l10n/sr@latin.php b/apps/contacts/l10n/sr@latin.php
index 1ae38e32922..bfd43896455 100644
--- a/apps/contacts/l10n/sr@latin.php
+++ b/apps/contacts/l10n/sr@latin.php
@@ -15,8 +15,6 @@
"Video" => "Video",
"Pager" => "Pejdžer",
"This is not your contact." => "Ovo nije vaš kontakt.",
-"This card is not RFC compatible." => "Ova karta nije saglasna sa RFC-om.",
-"This card does not contain a photo." => "Ova karta ne sadrži fotografiju.",
"Add Contact" => "Dodaj kontakt",
"Name" => "Ime",
"PO Box" => "Poštanski broj",
diff --git a/apps/contacts/l10n/sv.php b/apps/contacts/l10n/sv.php
index f62ca30b5f2..c4935983f22 100644
--- a/apps/contacts/l10n/sv.php
+++ b/apps/contacts/l10n/sv.php
@@ -15,8 +15,6 @@
"Video" => "Video",
"Pager" => "Personsökare",
"This is not your contact." => "Det här är inte din kontakt.",
-"This card is not RFC compatible." => "Detta kort är inte RFC-kompatibelt.",
-"This card does not contain a photo." => "Detta kort innehåller inte något foto.",
"Add Contact" => "Lägg till kontakt",
"Name" => "Namn",
"PO Box" => "Postbox",
diff --git a/apps/contacts/l10n/th_TH.php b/apps/contacts/l10n/th_TH.php
new file mode 100644
index 00000000000..06e103bc320
--- /dev/null
+++ b/apps/contacts/l10n/th_TH.php
@@ -0,0 +1,64 @@
+<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "เกิดข้อผิดพลาดใน (ยกเลิก)การเปิดใช้งานสมุดบันทึกที่อยู่",
+"There was an error adding the contact." => "เกิดข้อผิดพลาดในการเพิ่มรายชื่อผู้ติดต่อใหม่",
+"Cannot add empty property." => "ไม่สามารถเพิ่มรายละเอียดที่ไม่มีข้อมูลได้",
+"At least one of the address fields has to be filled out." => "อย่างน้อยที่สุดช่องข้อมูลที่อยู่จะต้องถูกกรอกลงไป",
+"Error adding contact property." => "เกิดข้อผิดพลาดในการเพิ่มรายละเอียดการติดต่อ",
+"Error adding addressbook." => "เกิดข้อผิดพลาดในการเพิ่มสมุดบันทึกที่อยู่ใหม่",
+"Error activating addressbook." => "เกิดข้อผิดพลาดในการเปิดใช้งานสมุดบันทึกที่อยู่",
+"Error deleting contact property." => "เกิดข้อผิดพลาดในการลบรายละเอียดการติดต่อ",
+"Error updating contact property." => "เกิดข้อผิดพลาดในการอัพเดทข้อมูลการติดต่อ",
+"Error updating addressbook." => "เกิดข้อผิดพลาดในการอัพเดทสมุดบันทึกที่อยู่",
+"Contacts" => "ข้อมูลการติดต่อ",
+"This is not your addressbook." => "นี่ไม่ใช่สมุดบันทึกที่อยู่ของคุณ",
+"Contact could not be found." => "ไม่พบข้อมูลการติดต่อ",
+"Information about vCard is incorrect. Please reload the page." => "ข้อมูลเกี่ยวกับ vCard ไม่ถูกต้อง กรุณาโหลดหน้าเวปใหม่อีกครั้ง",
+"Address" => "ที่อยู่",
+"Telephone" => "โทรศัพท์",
+"Email" => "อีเมล์",
+"Organization" => "หน่วยงาน",
+"Work" => "ที่ทำงาน",
+"Home" => "บ้าน",
+"Mobile" => "มือถือ",
+"Text" => "ข้อความ",
+"Voice" => "เสียงพูด",
+"Fax" => "โทรสาร",
+"Video" => "วีดีโอ",
+"Pager" => "เพจเจอร์",
+"Contact" => "ข้อมูลการติดต่อ",
+"This is not your contact." => "นี่ไม่ใช่ข้อมูลการติดต่อของคุณ",
+"Add Contact" => "เพิ่มรายชื่อผู้ติดต่อใหม่",
+"Addressbooks" => "สมุดบันทึกที่อยู่",
+"Addressbook" => "สมุดบันทึกที่อยู่",
+"Name" => "ชื่อ",
+"Type" => "ประเภท",
+"PO Box" => "ตู้ ปณ.",
+"Extended" => "เพิ่ม",
+"Street" => "ถนน",
+"City" => "เมือง",
+"Region" => "ภูมิภาค",
+"Zipcode" => "รหัสไปรษณีย์",
+"Country" => "ประเทศ",
+"Create Contact" => "สร้างข้อมูลการติดต่อใหม่",
+"Choose active Address Books" => "เลือกสมุดบันทึกข้อมูลติดต่อที่ต้องการใช้งาน",
+"New Address Book" => "สร้างสมุดบันทึกข้อมูลการติดต่อใหม่",
+"CardDav Link" => "ลิงค์ CardDav",
+"Download" => "ดาวน์โหลด",
+"Edit" => "แก้ไข",
+"Delete" => "ลบ",
+"Download contact" => "ดาวน์โหลดข้อมูลการติดต่อ",
+"Delete contact" => "ลบข้อมูลการติดต่อ",
+"Add" => "เพิ่ม",
+"New Addressbook" => "สร้างสมุดบันทึกที่อยู่ใหม่",
+"Edit Addressbook" => "แก้ไขสมุดบันทึกที่อยู่",
+"Displayname" => "ชื่อที่ต้องการให้แสดง",
+"Active" => "เปิดใช้",
+"Save" => "บันทึก",
+"Submit" => "ส่งข้อมูล",
+"Cancel" => "ยกเลิก",
+"Birthday" => "วันเกิด",
+"Preferred" => "พิเศษ",
+"Phone" => "โทรศัพท์",
+"Update" => "อัพเดท",
+"CardDAV syncing address:" => "ที่อยู่ในการเชื่อมข้อมูลกับระบบบันทึกที่อยู่ CardDAV:"
+);
diff --git a/apps/contacts/l10n/tr.php b/apps/contacts/l10n/tr.php
index 285adac8d6a..75a48180bdb 100644
--- a/apps/contacts/l10n/tr.php
+++ b/apps/contacts/l10n/tr.php
@@ -15,8 +15,6 @@
"Video" => "Video",
"Pager" => "Sayfalayıcı",
"This is not your contact." => "Bu sizin kişiniz değil.",
-"This card is not RFC compatible." => "Bu kart RFC uyumlu değil.",
-"This card does not contain a photo." => "Bu kart resim içermiyor.",
"Add Contact" => "Kişi Ekle",
"Name" => "Ad",
"PO Box" => "Posta Kutusu",
diff --git a/apps/contacts/l10n/zh_CN.php b/apps/contacts/l10n/zh_CN.php
index 829f1b0e073..1904eff65c3 100644
--- a/apps/contacts/l10n/zh_CN.php
+++ b/apps/contacts/l10n/zh_CN.php
@@ -1,4 +1,15 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "(取消)激活地址簿错误。",
+"There was an error adding the contact." => "添加联系人时出错。",
+"Cannot add empty property." => "无法添加空属性。",
+"At least one of the address fields has to be filled out." => "至少需要填写一项地址。",
+"Error adding contact property." => "添加联系人属性错误。",
+"Error adding addressbook." => "添加地址簿错误。",
+"Error activating addressbook." => "激活地址簿错误。",
+"Error deleting contact property." => "删除联系人属性错误。",
+"Error updating contact property." => "更新联系人属性错误。",
+"Error updating addressbook." => "更新地址簿错误",
+"Contacts" => "联系人",
"This is not your addressbook." => "这不是您的地址簿。",
"Contact could not be found." => "无法找到联系人。",
"Information about vCard is incorrect. Please reload the page." => "vCard 的信息不正确。请重新加载页面。",
@@ -14,11 +25,13 @@
"Fax" => "传真",
"Video" => "视频",
"Pager" => "传呼机",
+"Contact" => "联系人",
"This is not your contact." => "这不是您的联系人。",
-"This card is not RFC compatible." => "这张名片和RFC 标准不兼容。",
-"This card does not contain a photo." => "这张名片不包含照片。",
"Add Contact" => "添加联系人",
+"Addressbooks" => "地址簿",
+"Addressbook" => "地址簿",
"Name" => "名称",
+"Type" => "类型",
"PO Box" => "邮箱",
"Extended" => "扩展",
"Street" => "街道",
@@ -27,8 +40,25 @@
"Zipcode" => "邮编",
"Country" => "国家",
"Create Contact" => "创建联系人",
+"Choose active Address Books" => "选择激活地址簿",
+"New Address Book" => "新建地址簿",
+"CardDav Link" => "CardDav 链接",
+"Download" => "下载",
"Edit" => "编辑",
"Delete" => "删除",
+"Download contact" => "下载联系人",
+"Delete contact" => "删除联系人",
+"Add" => "添加",
+"New Addressbook" => "新建地址簿",
+"Edit Addressbook" => "编辑地址簿",
+"Displayname" => "显示名称",
+"Active" => "激活",
+"Save" => "保存",
+"Submit" => "提交",
+"Cancel" => "取消",
"Birthday" => "生日",
-"Phone" => "电话"
+"Preferred" => "偏好",
+"Phone" => "电话",
+"Update" => "更新",
+"CardDAV syncing address:" => "CardDAV 同步地址:"
);
diff --git a/apps/contacts/lib/app.php b/apps/contacts/lib/app.php
index 00a830d5e5f..bc1e4974b30 100644
--- a/apps/contacts/lib/app.php
+++ b/apps/contacts/lib/app.php
@@ -18,16 +18,26 @@ class OC_Contacts_App{
* @param int $id of contact
* @param Sabre_VObject_Component $vcard to render
*/
- public static function renderDetails($id, $vcard){
+ public static function renderDetails($id, $vcard, $new=false){
$property_types = self::getAddPropertyOptions();
$adr_types = self::getTypesOfProperty('ADR');
$phone_types = self::getTypesOfProperty('TEL');
+ $upload_max_filesize = OC_Helper::computerFileSize(ini_get('upload_max_filesize'));
+ $post_max_size = OC_Helper::computerFileSize(ini_get('post_max_size'));
+ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
+
+ $freeSpace=OC_Filesystem::free_space('/');
+ $freeSpace=max($freeSpace,0);
+ $maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);
$details = OC_Contacts_VCard::structureContact($vcard);
$name = $details['FN'][0]['value'];
- $tmpl = new OC_Template('contacts','part.details');
+ $t = $new ? 'part.contact' : 'part.details';
+ $tmpl = new OC_Template('contacts',$t);
$tmpl->assign('details',$details);
$tmpl->assign('id',$id);
+ $tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize);
+ $tmpl->assign( 'uploadMaxHumanFilesize', OC_Helper::humanFileSize($maxUploadFilesize));
$tmpl->assign('property_types',$property_types);
$tmpl->assign('adr_types',$adr_types);
$tmpl->assign('phone_types',$phone_types);
diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php
index 04b59a040fb..ceac2dcfad2 100644
--- a/apps/contacts/lib/vcard.php
+++ b/apps/contacts/lib/vcard.php
@@ -159,15 +159,27 @@ class OC_Contacts_VCard{
*/
public static function addFromDAVData($id,$uri,$data){
$fn = null;
+ $email = null;
$card = OC_VObject::parse($data);
if(!is_null($card)){
foreach($card->children as $property){
if($property->name == 'FN'){
$fn = $property->value;
- break;
+ }
+ if($property->name == 'EMAIL' && is_null($email)){
+ $email = $property->value;
}
}
}
+ if(!$fn) {
+ if($email) {
+ $fn = $email;
+ } else {
+ $fn = 'Unknown';
+ }
+ $card->addProperty('EMAIL', $email);
+ $data = $card->serialize();
+ }
$stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*contacts_cards (addressbookid,fullname,carddata,uri,lastmodified) VALUES(?,?,?,?,?)' );
$result = $stmt->execute(array($id,$fn,$data,$uri,time()));
@@ -311,7 +323,7 @@ class OC_Contacts_VCard{
*/
public static function structureProperty($property){
$value = $property->value;
- $value = htmlspecialchars($value);
+ //$value = htmlspecialchars($value);
if($property->name == 'ADR' || $property->name == 'N'){
$value = OC_VObject::unescapeSemicolons($value);
}
diff --git a/apps/contacts/photo.php b/apps/contacts/photo.php
index 60dd81140bf..478ef829cae 100644
--- a/apps/contacts/photo.php
+++ b/apps/contacts/photo.php
@@ -26,7 +26,9 @@ OC_Util::checkLoggedIn();
OC_Util::checkAppEnabled('contacts');
$id = $_GET['id'];
-
+if(isset($GET['refresh'])) {
+ header("Cache-Control: no-cache, no-store, must-revalidate");
+}
$l10n = new OC_L10N('contacts');
$card = OC_Contacts_VCard::find( $id );
@@ -42,28 +44,45 @@ if( $addressbook === false || $addressbook['userid'] != OC_USER::getUser()){
}
$content = OC_VObject::parse($card['carddata']);
-
+$image = new OC_Image();
// invalid vcard
if( is_null($content)){
- echo $l10n->t('This card is not RFC compatible.');
+ $image->loadFromFile('img/person_large.png');
+ header('Content-Type: '.$image->mimeType());
+ $image();
+ //echo $l10n->t('This card is not RFC compatible.');
exit();
-}
-// Photo :-)
-foreach($content->children as $child){
- if($child->name == 'PHOTO'){
- $mime = 'image/jpeg';
- foreach($child->parameters as $parameter){
- if( $parameter->name == 'TYPE' ){
- $mime = $parameter->value;
+} else {
+ // Photo :-)
+ foreach($content->children as $child){
+ if($child->name == 'PHOTO'){
+ $mime = 'image/jpeg';
+ foreach($child->parameters as $parameter){
+ if( $parameter->name == 'TYPE' ){
+ $mime = $parameter->value;
+ }
+ }
+ if($image->loadFromBase64($child->value)) {
+ header('Content-Type: '.$mime);
+ $image();
+ exit();
+ } else {
+ $image->loadFromFile('img/person_large.png');
+ header('Content-Type: '.$image->mimeType());
+ $image();
}
+ //$photo = base64_decode($child->value);
+ //header('Content-Type: '.$mime);
+ //header('Content-Length: ' . strlen($photo));
+ //echo $photo;
+ //exit();
}
- $photo = base64_decode($child->value);
- header('Content-Type: '.$mime);
- header('Content-Length: ' . strlen($photo));
- echo $photo;
- exit();
}
}
+$image->loadFromFile('img/person_large.png');
+header('Content-Type: '.$image->mimeType());
+$image();
+/*
// Logo :-/
foreach($content->children as $child){
if($child->name == 'PHOTO'){
@@ -80,6 +99,6 @@ foreach($content->children as $child){
exit();
}
}
-
+*/
// Not found :-(
-echo $l10n->t('This card does not contain a photo.');
+//echo $l10n->t('This card does not contain a photo.');
diff --git a/apps/contacts/templates/part.addcardform.php b/apps/contacts/templates/part.addcardform.php
index 53b32188ddf..11457ff2697 100644
--- a/apps/contacts/templates/part.addcardform.php
+++ b/apps/contacts/templates/part.addcardform.php
@@ -94,7 +94,7 @@
</dd>
<dt>
<label class="label" for="adr_zipcode"><?php echo $l->t('Zipcode'); ?></label>
- </dtl>
+ </dt>
<dd>
<input type="text" id="adr_zipcode" name="value[ADR][5]" value="">
</dd>
diff --git a/apps/contacts/templates/part.chooseaddressbook.php b/apps/contacts/templates/part.chooseaddressbook.php
index ba008837f0e..90894220ef8 100644
--- a/apps/contacts/templates/part.chooseaddressbook.php
+++ b/apps/contacts/templates/part.chooseaddressbook.php
@@ -12,8 +12,8 @@ for($i = 0; $i < count($option_addressbooks); $i++){
}
?>
<tr>
- <td colspan="5">
- <a href="#" onclick="Contacts.UI.Addressbooks.newAddressbook(this);"><?php echo $l->t('New Address Book') ?></a>
+ <td colspan="5" style="padding: 0.5em;">
+ <a class="button" href="#" onclick="Contacts.UI.Addressbooks.newAddressbook(this);"><?php echo $l->t('New Address Book') ?></a>
</td>
</tr>
<tr>
diff --git a/apps/contacts/templates/part.contacts.php b/apps/contacts/templates/part.contacts.php
index 8d89e9c7ad1..a6ac0f1096a 100644
--- a/apps/contacts/templates/part.contacts.php
+++ b/apps/contacts/templates/part.contacts.php
@@ -1,3 +1,12 @@
-<?php foreach( $_['contacts'] as $contact ): ?>
- <li book-id="<?php echo $contact['addressbookid']; ?>" data-id="<?php echo $contact['id']; ?>"><a href="index.php?id=<?php echo $contact['id']; ?>"><?php echo $contact['fullname']; ?></a> </li>
+<?php foreach( $_['contacts'] as $contact ):
+ $display = trim($contact['fullname']);
+ if(!$display) {
+ $vcard = OC_Contacts_App::getContactVCard($contact['id']);
+ if(!is_null($vcard)) {
+ $struct = OC_Contacts_VCard::structureContact($vcard);
+ $display = isset($struct['EMAIL'][0])?$struct['EMAIL'][0]['value']:'[UNKNOWN]';
+ }
+ }
+?>
+ <li book-id="<?php echo $contact['addressbookid']; ?>" data-id="<?php echo $contact['id']; ?>"><a href="index.php?id=<?php echo $contact['id']; ?>"><?php echo $display; ?></a></li>
<?php endforeach; ?>
diff --git a/apps/contacts/thumbnail.php b/apps/contacts/thumbnail.php
index e49098ce820..36d395171a9 100644
--- a/apps/contacts/thumbnail.php
+++ b/apps/contacts/thumbnail.php
@@ -22,23 +22,29 @@
// Init owncloud
require_once('../../lib/base.php');
-OC_Util::checkLoggedIn();
+OC_JSON::checkLoggedIn();
+//OC_Util::checkLoggedIn();
OC_Util::checkAppEnabled('contacts');
-if(!function_exists('imagecreatefromjpeg')) {
- OC_Log::write('contacts','thumbnail.php. GD module not installed',OC_Log::DEBUG);
- header('Content-Type: image/png');
- // TODO: Check if it works to read the file and echo the content.
- return 'img/person.png';
-}
-
function getStandardImage(){
- $src_img = imagecreatefrompng('img/person.png');
- header('Content-Type: image/png');
- imagepng($src_img);
- imagedestroy($src_img);
+ $date = new DateTime('now');
+ $date->add(new DateInterval('P10D'));
+ header('Expires: '.$date->format(DateTime::RFC850));
+ header('Cache-Control: cache');
+ header('Pragma: cache');
+ header('Location: '.OC_Helper::imagePath('contacts', 'person.png'));
+ exit();
+// $src_img = imagecreatefrompng('img/person.png');
+// header('Content-Type: image/png');
+// imagepng($src_img);
+// imagedestroy($src_img);
}
+if(!function_exists('imagecreatefromjpeg')) {
+ OC_Log::write('contacts','thumbnail.php. GD module not installed',OC_Log::DEBUG);
+ getStandardImage();
+ exit();
+}
$id = $_GET['id'];
@@ -69,18 +75,14 @@ if( is_null($content)){
$thumbnail_size = 23;
-// Finf the photo from VCard.
+// Find the photo from VCard.
foreach($content->children as $child){
if($child->name == 'PHOTO'){
- foreach($child->parameters as $parameter){
- if( $parameter->name == 'TYPE' ){
- $mime = $parameter->value;
- }
- }
$image = new OC_Image();
if($image->loadFromBase64($child->value)) {
if($image->centerCrop()) {
if($image->resize($thumbnail_size)) {
+ header('ETag: '.md5($child->value));
if(!$image()) {
OC_Log::write('contacts','thumbnail.php. Couldn\'t display thumbnail for ID '.$id,OC_Log::ERROR);
getStandardImage();
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index a675175a8be..8049e9b0ae3 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -5,6 +5,7 @@ require_once('apps/files_sharing/sharedstorage.php');
OC::$CLASSPATH['OC_Share'] = "apps/files_sharing/lib_share.php";
OC_Hook::connect("OC_Filesystem", "post_delete", "OC_Share", "deleteItem");
OC_Hook::connect("OC_Filesystem", "post_rename", "OC_Share", "renameItem");
+OC_Hook::connect("OC_Filesystem", "post_write", "OC_Share", "updateItem");
OC_Util::addScript("files_sharing", "share");
OC_Util::addScript("3rdparty", "chosen/chosen.jquery.min");
OC_Util::addStyle( 'files_sharing', 'sharing' );
diff --git a/apps/files_sharing/lib_share.php b/apps/files_sharing/lib_share.php
index c1957d7b6c4..049a74278b3 100644
--- a/apps/files_sharing/lib_share.php
+++ b/apps/files_sharing/lib_share.php
@@ -91,6 +91,9 @@ class OC_Share {
// Clear the folder size cache for the 'Shared' folder
// $clearFolderSize = OC_DB::prepare("DELETE FROM *PREFIX*foldersize WHERE path = ?");
// $clearFolderSize->execute(array($sharedFolder));
+ // Emit post_create and post_write hooks to notify of a new file in the user's filesystem
+ OC_Hook::emit("OC_Filesystem", "post_create", array('path' => $target));
+ OC_Hook::emit("OC_Filesystem", "post_write", array('path' => $target));
}
}
}
@@ -263,6 +266,18 @@ class OC_Share {
}
}
+ public static function getTarget($source) {
+ $source = self::cleanPath($source);
+ $query = OC_DB::prepare("SELECT target FROM *PREFIX*sharing WHERE source = ? AND uid_owner = ? LIMIT 1");
+ $result = $query->execute(array($source, OC_User::getUser()))->fetchAll();
+ if (count($result) > 0) {
+ return $result[0]['target'];
+ } else {
+ // TODO Check in folders
+ return false;
+ }
+ }
+
/**
* Get the user's permissions for the item at the specified target location
* @param $target The target location of the item
@@ -380,8 +395,13 @@ class OC_Share {
*/
public static function deleteItem($arguments) {
$source = "/".OC_User::getUser()."/files".self::cleanPath($arguments['path']);
- $query = OC_DB::prepare("DELETE FROM *PREFIX*sharing WHERE SUBSTR(source, 1, ?) = ? AND uid_owner = ?");
- $query->execute(array(strlen($source), $source, OC_User::getUser()));
+ if ($target = self::getTarget($source)) {
+ // Forward hook to notify of changes to target file
+ OC_Hook::emit("OC_Filesystem", "post_delete", array('path' => $target));
+ $query = OC_DB::prepare("DELETE FROM *PREFIX*sharing WHERE SUBSTR(source, 1, ?) = ? AND uid_owner = ?");
+ $query->execute(array(strlen($source), $source, OC_User::getUser()));
+ }
+
}
/**
@@ -395,6 +415,14 @@ class OC_Share {
$query->execute(array($oldSource, $newSource, OC_User::getUser()));
}
+ public static function updateItem($arguments) {
+ $source = "/".OC_User::getUser()."/files".self::cleanPath($arguments['path']);
+ if ($target = self::getTarget($source)) {
+ // Forward hook to notify of changes to target file
+ OC_Hook::emit("OC_Filesystem", "post_write", array('path' => $target));
+ }
+ }
+
}
?>
diff --git a/apps/files_texteditor/js/editor.js b/apps/files_texteditor/js/editor.js
index cb1af3dd6db..6e154bedb9c 100644
--- a/apps/files_texteditor/js/editor.js
+++ b/apps/files_texteditor/js/editor.js
@@ -234,6 +234,7 @@ function hideFileEditor(){
// Keyboard Shortcuts
var ctrlBtn = false;
+// TODO fix detection of ctrl keyup
// returns true if ctrl+s or cmd+s is being pressed
function checkForSaveKeyPress(e){
if(e.which == 17 || e.which == 91) ctrlBtn=true;
@@ -276,5 +277,5 @@ $(document).ready(function(){
bindControlEvents();
// Binds the save keyboard shortcut events
- $(document).unbind('keydown').bind('keydown',checkForSaveKeyPress);
+ //$(document).unbind('keydown').bind('keydown',checkForSaveKeyPress);
});
diff --git a/apps/gallery/ajax/cover.php b/apps/gallery/ajax/cover.php
index 181a919375d..068a6e9c4ec 100644
--- a/apps/gallery/ajax/cover.php
+++ b/apps/gallery/ajax/cover.php
@@ -70,11 +70,11 @@ $x = min((int)($x/($box_size/$result->numRows())), $result->numRows()-1); // get
$result->seek($x); // never throws
$path = $result->fetchRow();
$path = $path['file_path'];
-$tmp = OC::$CONFIG_DATADIRECTORY . $path;
-$imagesize = getimagesize($tmp);
+$imagePath = OC_Filesystem::getLocalFile($img);
+$imagesize = getimagesize($imagePath);
header('Content-Type: image/png');
-$image = CroppedThumbnail($tmp, $box_size, $box_size);
+$image = CroppedThumbnail($imagePath, $box_size, $box_size);
imagepng($image);
imagedestroy($image);
diff --git a/apps/gallery/ajax/galleryOp.php b/apps/gallery/ajax/galleryOp.php
index f162fe2bc46..0c2674f8859 100644
--- a/apps/gallery/ajax/galleryOp.php
+++ b/apps/gallery/ajax/galleryOp.php
@@ -34,7 +34,11 @@ function handleRename($oldname, $newname) {
function handleRemove($name) {
OC_JSON::checkLoggedIn();
+ $album_id = OC_Gallery_Album::find(OC_User::getUser(), $name);
+ $album_id = $album_id->fetchRow();
+ $album_id = $album_id['album_id'];
OC_Gallery_Album::remove(OC_User::getUser(), $name);
+ OC_Gallery_Photo::removeByAlbumId($album_id);
}
function handleGetThumbnails($albumname) {
diff --git a/apps/gallery/appinfo/info.xml b/apps/gallery/appinfo/info.xml
index c275f39bb25..9aecb0c781d 100644
--- a/apps/gallery/appinfo/info.xml
+++ b/apps/gallery/appinfo/info.xml
@@ -2,7 +2,7 @@
<info>
<id>gallery</id>
<name>Gallery</name>
- <version>0.2</version>
+ <version>0.3</version>
<licence>AGPL</licence>
<author>Bartek Przybylski</author>
<require>2</require>
diff --git a/apps/gallery/css/styles.css b/apps/gallery/css/styles.css
index 4ada23b0b06..7872b6445ca 100644
--- a/apps/gallery/css/styles.css
+++ b/apps/gallery/css/styles.css
@@ -1,11 +1,14 @@
-div#gallery_list { margin: 90pt 20pt; }
-div#gallery_list.leftcontent { padding-top: 15pt; margin: 0; position: absolute; bottom:0px; text-align: center; overflow: scroll; }
-div#gallery_album_box { width: 200px; text-align: center; border: 0; display: inline-block; margin: 5pt; vertical-align: top; padding: 10px; position: relative; overflow: hidden; color: #999; }
-div#gallery_album_box:hover { color: black; }
-.leftcontent div#gallery_album_box { margin: 5px; }
-div#gallery_album_box h1 { font-size: 9pt; font-family: Verdana; }
-div#gallery_album_cover { width: 199px; height: 199px; border: solid 1pt #999; padding: 0; }
-div#gallery_control_overlay { border: 0; position:absolute; right: 10pt; background-color: #333; opacity: 0.5; visibility:hidden; padding: 0 5pt; }
-div#gallery_control_overlay a { color:white; }
-#gallery_images.rightcontent { padding:10px 5px; position:absolute; bottom: 0px; overflow: scroll; }
-
+div#gallery_list { margin: 70pt 20pt 0 20pt; }
+div#gallery_list.leftcontent { padding-top: 15pt; margin: 0; position: absolute; bottom:0px; text-align: center; overflow: auto; }
+div.gallery_album_box { width: 200px; position:relative; text-align: center; border: 0; display: inline-block; margin: 5pt; vertical-align: top; padding: 20px 5px 5px 5px; position: relative; -webkit-transition: color 0.5s ease-in-out; -o-transition: color 0.5s ease-in-out; -moz-transition: color 0.5s ease-in-out;color: #BBB;}
+div.gallery_album_box h1 { font-size: 9pt; font-family: Verdana; }
+div.gallery_album_decoration { width: 200px; position: absolute; border: 0; height: 20px; top: 20px; text-align:right; vertical-align:middle; background-color: #eee; opacity: 0; -webkit-transition: opacity 0.5s ease-in-out; -moz-transition: opacity 0.5s ease-in-out; -o-transition: opacity 0.5s ease-in-out; border-bottom-right-radius: 7px; border-bottom-left-radius: 7px; -moz-border-radius-bottomright: 7px; -moz-border-radius-bottomleft:7px;}
+div.gallery_album_box:hover { color: black; }
+div.gallery_album_box:hover div.gallery_album_decoration { opacity: 0.7;}
+div.gallery_album_decoration a {padding: 0 4pt; cursor: pointer;}
+div.gallery_album_cover { width: 200px; height: 200px; border: 0; padding: 0; position:relative;}
+div.gallery_album_box:hover div.gallery_control_overlay { opacity:0.5 }
+div.gallery_control_overlay a { color:white; }
+#gallery_images.rightcontent { padding:10px 5px; bottom: 0px; overflow: auto; right:0px}
+#scan { position:absolute; right:13.5em; top:0em; }
+#scan #scanprogressbar { position:relative; display:inline-block; width:10em; height:1.5em; top:.4em; }
diff --git a/apps/gallery/img/delete.png b/apps/gallery/img/delete.png
new file mode 100644
index 00000000000..bc0c782882d
--- /dev/null
+++ b/apps/gallery/img/delete.png
Binary files differ
diff --git a/apps/gallery/img/rename.png b/apps/gallery/img/rename.png
new file mode 100644
index 00000000000..9993a092df1
--- /dev/null
+++ b/apps/gallery/img/rename.png
Binary files differ
diff --git a/apps/gallery/img/share.png b/apps/gallery/img/share.png
new file mode 100644
index 00000000000..62c4627f317
--- /dev/null
+++ b/apps/gallery/img/share.png
Binary files differ
diff --git a/apps/gallery/js/album_cover.js b/apps/gallery/js/album_cover.js
index e50593c0087..e78db221cff 100644
--- a/apps/gallery/js/album_cover.js
+++ b/apps/gallery/js/album_cover.js
@@ -10,6 +10,10 @@ $(document).ready(function() {
if (targetDiv) {
$(targetDiv).html('');
Albums.display(targetDiv);
+ $('#gallery_list').sortable({revert:true});
+ $('.gallery_album_box').each(function(i, e) {
+ $(e).draggable({connectToSortable: '#gallery_list', handle: '.dummy'})
+ });
} else {
alert('Error occured: no such layer `gallery_list`');
}
@@ -37,14 +41,15 @@ var totalAlbums = 0;
function scanForAlbums() {
var albumCounter = 0;
var totalAlbums = 0;
- $('#notification').text("Scanning directories");
- $("#notification").fadeIn();
- $("#notification").slideDown();
$.getJSON('ajax/galleryOp.php?operation=filescan', function(r) {
if (r.status == 'success') {
totalAlbums = r.paths.length;
- $('#notification').text("Creating thumbnails ... " + Math.floor((albumCounter/totalAlbums)*100) + "%");
+ if (totalAlbums == 0) {
+ $('#notification').text(t('gallery', "No photos found")).fadeIn().slideDown().delay(3000).fadeOut().slideUp();
+ return;
+ }
+ $('#scanprogressbar').progressbar({ value: (albumCounter/totalAlbums)*100 }).fadeIn();
for(var a in r.paths) {
$.getJSON('ajax/galleryOp.php?operation=partial_create&path='+r.paths[a], function(r) {
@@ -53,10 +58,9 @@ function scanForAlbums() {
}
albumCounter++;
- $('#notification').text("Creating thumbnails ... " + Math.floor((albumCounter/totalAlbums)*100) + "%");
+ $('#scanprogressbar').progressbar({ value: (albumCounter/totalAlbums)*100 });
if (albumCounter == totalAlbums) {
- $("#notification").fadeOut();
- $("#notification").slideUp();
+ $('#scanprogressbar').fadeOut();
var targetDiv = document.getElementById('gallery_list');
if (targetDiv) {
targetDiv.innerHTML = '';
@@ -74,35 +78,71 @@ function scanForAlbums() {
}
function galleryRemove(albumName) {
- if (confirm("Do you wan't to remove album " + albumName + "?")) {
- $.getJSON("ajax/galleryOp.php", {operation: "remove", name: albumName}, function(r) {
- if (r.status == "success") {
- $("#gallery_album_box[title='"+albumName+"']").remove();
- Albums.remove(albumName);
- } else {
- alert("Error: " + r.cause);
- }
- });
- }
+ // a workaround for a flaw in the demo system (http://dev.jqueryui.com/ticket/4375), ignore!
+ $( "#dialog:ui-dialog" ).dialog( "destroy" );
+ $('#albumName', $("#dialog-confirm")).text(albumName);
+
+ $( '#dialog-confirm' ).dialog({
+ resizable: false,
+ height:150,
+ buttons: [{
+ text: t('gallery', 'OK'),
+ click: function() {
+ $.getJSON("ajax/galleryOp.php", {operation: "remove", name: albumName}, function(r) {
+ if (r.status == "success") {
+ $(".gallery_album_box").filterAttr('data-album',albumName).remove();
+ Albums.remove(albumName);
+ } else {
+ alert("Error: " + r.cause);
+ }
+ $('#dialog-confirm').dialog('close');
+ });
+ }},
+ {
+ text: t('gallery', 'Cancel'),
+ click: function() {
+ $( this ).dialog( 'close' );
+ }}]
+ });
}
function galleryRename(name) {
- var result = window.prompt("Input new gallery name", name);
- if (result) {
- if (Albums.find(result)) {
- alert("Album named '" + result + "' already exists");
- return;
- }
- $.getJSON("ajax/galleryOp.php", {operation: "rename", oldname: name, newname: result}, function(r) {
- if (r.status == "success") {
- Albums.rename($("#gallery_album_box[title='"+name+"']"), result);
- } else {
- alert("Error: " + r.cause);
- }
- });
-
- } else {
- alert("Album name can't be empty")
- }
+ $('#name', $('#dialog-form')).val(name);
+ $( "#dialog-form" ).dialog({
+ height: 140,
+ width: 350,
+ modal: false,
+ buttons: [{
+ text: t('gallery', 'Change name'),
+ click: function() {
+ var newname = $('#name', $('#dialog-form')).val();
+ if (newname == name || newname == '') {
+ $(this).dialog("close");
+ return;
+ }
+ if (Albums.find(newname)) {
+ alert("Album ", newname, " exists");
+ $(this).dialog("close");
+ return;
+ }
+ $.getJSON("ajax/galleryOp.php", {operation: "rename", oldname: name, newname: newname}, function(r) {
+ if (r.status == "success") {
+ Albums.rename($(".gallery_album_box").filterAttr('data-album',name), newname);
+ } else {
+ alert("Error: " + r.cause);
+ }
+ $('#dialog-form').dialog("close");
+ });
+
+ }
+ },
+ {
+ text: t('gallery', 'Cancel'),
+ click: function() {
+ $( this ).dialog( "close" );
+ }
+ }
+ ],
+ });
}
diff --git a/apps/gallery/js/albums.js b/apps/gallery/js/albums.js
index 546aadba49f..59efb5b5659 100644
--- a/apps/gallery/js/albums.js
+++ b/apps/gallery/js/albums.js
@@ -41,27 +41,34 @@ Albums={
// displays gallery in linear representation
// on given element, and apply default styles for gallery
display: function(element) {
- var displayTemplate = '<div id="gallery_album_box" title="*NAME*"><div id="gallery_control_overlay"><a href="#" onclick="galleryRename(\'*NAME*\');return false;">rename</a> | <a href="#" onclick="galleryRemove(\'*NAME*\');">remove</a></div><a href="?view=*NAME*"><div id="gallery_album_cover" title="*NAME*"></div></a><h1>*NAME*</h1></div></div>';
+ var displayTemplate = '<div class="gallery_album_box"><div class="dummy"></div><a class="view"><div class="gallery_album_cover"></div></a><h1></h1><div class="gallery_album_decoration"><a><img src="img/share.png" title="Share"></a><a class="rename"><img src="img/rename.png" title="Rename"></a><a class="remove"><img src="img/delete.png" title="Delete"></a></div></div>';
for (var i in Albums.albums) {
var a = Albums.albums[i];
- var local = $(displayTemplate.replace(/\*NAME\*/g, a.name));
- $("#gallery_album_cover", local).css('background-repeat', 'no-repeat');
- $("#gallery_album_cover", local).css('background-position', '0');
- $("#gallery_album_cover", local).css('background-image','url("ajax/galleryOp.php?operation=get_covers&albumname='+a.name+'")');
- local.mouseover(function(e) {
- $("#gallery_control_overlay", this).css('visibility','visible');
- });
- local.mouseout(function(e) {
- $("#gallery_control_overlay", this).css('visibility','hidden');
- });
- $("#gallery_album_cover", local).mousemove(function(e) {
+ var local=$(displayTemplate);
+ local.attr('data-album',a.name);
+ $(".gallery_album_decoration a.rename", local).click(function(name,event){
+ event.preventDefault();
+ galleryRename(name);
+ }.bind(null,a.name));
+ $(".gallery_album_decoration a.remove", local).click(function(name,event){
+ event.preventDefault();
+ galleryRemove(name);
+ }.bind(null,a.name));
+ $("a.view", local).attr('href','?view='+a.name);
+ $('h1',local).text(a.name);
+ $(".gallery_album_cover", local).attr('title',a.name);
+ $(".gallery_album_cover", local).css('background-repeat', 'no-repeat');
+ $(".gallery_album_cover", local).css('background-position', '0');
+ $(".gallery_album_cover", local).css('background-image','url("ajax/galleryOp.php?operation=get_covers&albumname='+a.name+'")');
+ $(".gallery_album_cover", local).mousemove(function(e) {
var albumMetadata = Albums.find(this.title);
if (albumMetadata == undefined) {
return;
}
- var x = Math.min(Math.floor((e.layerX - this.offsetLeft)/(this.offsetWidth/albumMetadata.numOfCovers)), albumMetadata.numOfCovers-1);
- x *= this.offsetWidth-1;
+ var x = Math.floor((e.layerX - this.offsetLeft)/(this.offsetWidth/albumMetadata.numOfCovers));
+ x *= this.offsetWidth;
+ if (x < 0) x=0;
$(this).css('background-position', -x+'px 0');
});
$(element).append(local);
@@ -69,8 +76,8 @@ Albums={
},
rename: function(element, new_name) {
if (new_name) {
- $(element).attr("title", new_name);
- $("a", element).attr("href", "?view="+new_name);
+ $(element).attr("data-album", new_name);
+ $("a.view", element).attr("href", "?view="+new_name);
$("h1", element).text(new_name);
}
}
diff --git a/apps/gallery/l10n/ar.php b/apps/gallery/l10n/ar.php
new file mode 100644
index 00000000000..64eec0f735d
--- /dev/null
+++ b/apps/gallery/l10n/ar.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Gallery" => "معرض صور",
+"Scanning directories" => "بحث في المجلدات",
+"No photos found" => "لم يتم العثور على صور",
+"Creating thumbnails" => "صناعة مصغرات",
+"Do you wan't to remove album" => "هل تريد محي الالبوم",
+"Input new gallery name" => "أدخل اسم معرض جديد",
+"Rescan" => "اعادة البحث",
+"Back" => "رجوع"
+);
diff --git a/apps/gallery/l10n/ca.php b/apps/gallery/l10n/ca.php
index f3eb40df553..39463a055e4 100644
--- a/apps/gallery/l10n/ca.php
+++ b/apps/gallery/l10n/ca.php
@@ -1,5 +1,10 @@
<?php $TRANSLATIONS = array(
"Gallery" => "Galeria",
+"Scanning directories" => "S'estan escanejant carpetes",
+"No photos found" => "No s'han trobat fotos",
+"Creating thumbnails" => "S'estan creant miniatures",
+"Do you wan't to remove album" => "Voleu eliminar l'àlbum",
+"Input new gallery name" => "Escriviu el nom nou de la galeria",
"Rescan" => "Escaneja de nou",
"Back" => "Enrera"
);
diff --git a/apps/gallery/l10n/cs_CZ.php b/apps/gallery/l10n/cs_CZ.php
new file mode 100644
index 00000000000..446374389ad
--- /dev/null
+++ b/apps/gallery/l10n/cs_CZ.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Gallery" => "Galerie",
+"Scanning directories" => "Prohledávám adresáře",
+"No photos found" => "Nenalezeny žádné fotky",
+"Creating thumbnails" => "Vytvářím náhledy",
+"Do you wan't to remove album" => "Chcete odstranit album?",
+"Input new gallery name" => "Zadejte nový název galerie",
+"Rescan" => "Opakované prohledání",
+"Back" => "Zpět"
+);
diff --git a/apps/gallery/l10n/da.php b/apps/gallery/l10n/da.php
new file mode 100644
index 00000000000..713ffdbadc9
--- /dev/null
+++ b/apps/gallery/l10n/da.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Gallery" => "Galleri",
+"Scanning directories" => "Gennemgår mapper",
+"No photos found" => "Ingen billeder fundet",
+"Creating thumbnails" => "Danner miniaturer",
+"Do you wan't to remove album" => "Ønsker du at fjerne albummet",
+"Input new gallery name" => "Indtast navn på nyt galleri",
+"Rescan" => "Genindlæs",
+"Back" => "Tilbage"
+);
diff --git a/apps/gallery/l10n/de.php b/apps/gallery/l10n/de.php
index b7f1934189a..e72df4e5cb0 100644
--- a/apps/gallery/l10n/de.php
+++ b/apps/gallery/l10n/de.php
@@ -1,5 +1,10 @@
<?php $TRANSLATIONS = array(
"Gallery" => "Galerie",
+"Scanning directories" => "Ordner werden durchsucht.",
+"No photos found" => "Keine Fotos gefunden",
+"Creating thumbnails" => "Thumbnails werden erstellt.",
+"Do you wan't to remove album" => "Soll das Album entfernt werden?",
+"Input new gallery name" => "Gib den Albumnamen ein.",
"Rescan" => "Rescan",
"Back" => "Zurück"
);
diff --git a/apps/gallery/l10n/es.php b/apps/gallery/l10n/es.php
new file mode 100644
index 00000000000..96cee7b1d8b
--- /dev/null
+++ b/apps/gallery/l10n/es.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Gallery" => "Galería",
+"Scanning directories" => "Escaneando directorios",
+"No photos found" => "No se encontraron fotos",
+"Creating thumbnails" => "Creando miniaturas",
+"Do you wan't to remove album" => "Quieres eliminar el álbum",
+"Input new gallery name" => "Introduce el nuevo nombre de la galería",
+"Rescan" => "Refrescar",
+"Back" => "Atrás"
+);
diff --git a/apps/gallery/l10n/et_EE.php b/apps/gallery/l10n/et_EE.php
new file mode 100644
index 00000000000..1a862db78f7
--- /dev/null
+++ b/apps/gallery/l10n/et_EE.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Gallery" => "Galerii",
+"Rescan" => "Skänni uuesti",
+"Back" => "Tagasi"
+);
diff --git a/apps/gallery/l10n/fr.php b/apps/gallery/l10n/fr.php
index 17902bd70c9..6668ec6da6b 100644
--- a/apps/gallery/l10n/fr.php
+++ b/apps/gallery/l10n/fr.php
@@ -1,5 +1,9 @@
<?php $TRANSLATIONS = array(
"Gallery" => "Galerie",
+"Scanning directories" => "Analyse des répertoires",
+"Creating thumbnails" => "Création des miniatures",
+"Do you wan't to remove album" => "Voulez-vous supprimer l'album",
+"Input new gallery name" => "Entrez le nom de l'album",
"Rescan" => "Analyser à nouveau",
"Back" => "Retour"
);
diff --git a/apps/gallery/l10n/ia.php b/apps/gallery/l10n/ia.php
new file mode 100644
index 00000000000..6c65a396d99
--- /dev/null
+++ b/apps/gallery/l10n/ia.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Back" => "Retro"
+);
diff --git a/apps/gallery/l10n/it.php b/apps/gallery/l10n/it.php
index 0f95cc3af66..789940f0e78 100644
--- a/apps/gallery/l10n/it.php
+++ b/apps/gallery/l10n/it.php
@@ -1,5 +1,10 @@
<?php $TRANSLATIONS = array(
"Gallery" => "Galleria",
+"Scanning directories" => "Analisi cartelle in corso",
+"No photos found" => "Nessuna foto trovata",
+"Creating thumbnails" => "Creazione anteprime in corso",
+"Do you wan't to remove album" => "Vuoi rimuovere l'album",
+"Input new gallery name" => "Inserisci il nome della nuova galleria",
"Rescan" => "Rileggi",
"Back" => "Indietro"
);
diff --git a/apps/gallery/l10n/ja_JP.php b/apps/gallery/l10n/ja_JP.php
new file mode 100644
index 00000000000..20916cca85a
--- /dev/null
+++ b/apps/gallery/l10n/ja_JP.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Gallery" => "ギャラリー",
+"Scanning directories" => "ディレクトリをスキャン中",
+"No photos found" => "写真が見つかりませんでした",
+"Creating thumbnails" => "サムネイルを作成中",
+"Do you wan't to remove album" => "アルバムを削除しますか",
+"Input new gallery name" => "新しいギャラリー名を作る",
+"Rescan" => "再スキャン",
+"Back" => "戻る"
+);
diff --git a/apps/gallery/l10n/pl.php b/apps/gallery/l10n/pl.php
index d0c51c0f814..20baaf713ab 100644
--- a/apps/gallery/l10n/pl.php
+++ b/apps/gallery/l10n/pl.php
@@ -1,6 +1,10 @@
<?php $TRANSLATIONS = array(
- "Gallery" => "Galeria",
- "Rescan" => "Przeskanuj",
- "Back" => "Wróć"
+"Gallery" => "Galeria",
+"Scanning directories" => "Skanuje katalogi",
+"No photos found" => "Nie znaleziono zdjęć",
+"Creating thumbnails" => "Tworzenie miniatur",
+"Do you wan't to remove album" => "Czy chcesz usunąć album",
+"Input new gallery name" => "Wprowadź nową nazwę galerii",
+"Rescan" => "Przeskanuj",
+"Back" => "Wróć"
);
-?>
diff --git a/apps/gallery/l10n/ru.php b/apps/gallery/l10n/ru.php
new file mode 100644
index 00000000000..cc211f6c1e2
--- /dev/null
+++ b/apps/gallery/l10n/ru.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Gallery" => "Галерея",
+"Scanning directories" => "Сканирование папок",
+"Creating thumbnails" => "Создание миниатюр",
+"Do you wan't to remove album" => "Вы желаете удалить альбом",
+"Input new gallery name" => "Введите название галереи",
+"Rescan" => "Пересканировать",
+"Back" => "Назад"
+);
diff --git a/apps/gallery/l10n/sk_SK.php b/apps/gallery/l10n/sk_SK.php
index d8ae41af96e..26301562cfd 100644
--- a/apps/gallery/l10n/sk_SK.php
+++ b/apps/gallery/l10n/sk_SK.php
@@ -1,5 +1,10 @@
<?php $TRANSLATIONS = array(
"Gallery" => "Galéria",
+"Scanning directories" => "Prehľadávam priečinky",
+"No photos found" => "Neboli nájdené žiadne fotografie",
+"Creating thumbnails" => "Vytváram náhľady",
+"Do you wan't to remove album" => "Chcete odstrániť album",
+"Input new gallery name" => "Vložte meno novej galérie",
"Rescan" => "Znovu oskenovať",
"Back" => "Späť"
);
diff --git a/apps/gallery/l10n/th_TH.php b/apps/gallery/l10n/th_TH.php
new file mode 100644
index 00000000000..fa6c84f03dc
--- /dev/null
+++ b/apps/gallery/l10n/th_TH.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Gallery" => "แกลอรี่",
+"Scanning directories" => "กำลังสแกนไดเร็กทอรี่",
+"No photos found" => "ไม่พบรูปภาพที่ต้องการ",
+"Creating thumbnails" => "การสร้างรูปขนาดย่อ",
+"Do you wan't to remove album" => "คุณต้องการลบอัลบั้มนี้ออกหรือไม่",
+"Input new gallery name" => "กรอกชื่อแกลอรี่ใหม่",
+"Rescan" => "ตรวจสอบอีกครั้ง",
+"Back" => "ย้อนกลับ"
+);
diff --git a/apps/gallery/l10n/zh_CN.php b/apps/gallery/l10n/zh_CN.php
index c506600c4c0..c7d37692ae0 100644
--- a/apps/gallery/l10n/zh_CN.php
+++ b/apps/gallery/l10n/zh_CN.php
@@ -1,5 +1,9 @@
<?php $TRANSLATIONS = array(
-"Gallery" => "画廊",
+"Gallery" => "图库",
+"Scanning directories" => "扫描目录",
+"Creating thumbnails" => "创建缩略图",
+"Do you wan't to remove album" => "您是否想要移除相册",
+"Input new gallery name" => "输入新图库名称",
"Rescan" => "重新扫描",
"Back" => "返回"
);
diff --git a/apps/gallery/lib/album.php b/apps/gallery/lib/album.php
index 72653c8de15..4eb12cc0b81 100644
--- a/apps/gallery/lib/album.php
+++ b/apps/gallery/lib/album.php
@@ -28,7 +28,7 @@ class OC_Gallery_Album {
}
public static function rename($oldname, $newname, $owner) {
- $stmt = OC_DB::prepare('UPDATE OR IGNORE *PREFIX*gallery_albums SET album_name=? WHERE uid_owner=? AND album_name=?');
+ $stmt = OC_DB::prepare('UPDATE *PREFIX*gallery_albums SET album_name=? WHERE uid_owner=? AND album_name=?');
$stmt->execute(array($newname, $owner, $oldname));
}
@@ -69,12 +69,14 @@ class OC_Gallery_Album {
$sql .= ' AND album_path = ?';
$args[] = $path;
}
+ $sql .= ' ORDER BY album_name ASC';
+
$stmt = OC_DB::prepare($sql);
return $stmt->execute($args);
}
public static function changePath($oldname, $newname, $owner) {
- $stmt = OC_DB::prepare('UPDATE OR IGNORE *PREFIX*gallery_albums SET album_path=? WHERE uid_owner=? AND album_path=?');
+ $stmt = OC_DB::prepare('UPDATE *PREFIX*gallery_albums SET album_path=? WHERE uid_owner=? AND album_path=?');
$stmt->execute(array($newname, $owner, $oldname));
}
diff --git a/apps/gallery/lib/hooks_handlers.php b/apps/gallery/lib/hooks_handlers.php
index 7248e67f0a2..236a4b96a07 100644
--- a/apps/gallery/lib/hooks_handlers.php
+++ b/apps/gallery/lib/hooks_handlers.php
@@ -32,10 +32,8 @@ class OC_Gallery_Hooks_Handlers {
private static $APP_TAG = "Gallery";
private static function isPhoto($filename) {
- OC_Log::write(self::$APP_TAG, "Checking file ".$filename." with mimetype ".OC_Filesystem::getMimeType($filename), OC_Log::DEBUG);
- if (substr(OC_Filesystem::getMimeType($filename), 0, 6) == "image/")
- return true;
- return false;
+ $ext = strtolower(substr($filename, strrpos($filename, '.')+1));
+ return $ext=='png' || $ext=='jpeg' || $ext=='jpg' || $ext=='gif';
}
private static function directoryContainsPhotos($dirpath) {
@@ -65,21 +63,8 @@ class OC_Gallery_Hooks_Handlers {
if (!self::isPhoto($fullpath)) return;
- OC_Log::write(self::$APP_TAG, 'Adding file with path '. $fullpath, OC_Log::DEBUG);
$path = substr($fullpath, 0, strrpos($fullpath, '/'));
- if ($path == '') $path = '/';
- $album = OC_Gallery_Album::find(OC_User::getUser(), null, $path);
-
- if ($album->numRows() == 0) {
- $album = self::createAlbum($path);
- }
- $album = $album->fetchRow();
- $albumId = $album['album_id'];
- $photo = OC_Gallery_Photo::find($albumId, $fullpath);
- if ($photo->numRows() == 0) { // don't duplicate photo entries
- OC_Log::write(self::$APP_TAG, 'Adding new photo to album', OC_Log::DEBUG);
- OC_Gallery_Photo::create($albumId, $fullpath);
- }
+ OC_Gallery_Scanner::scanDir($path, $albums);
}
@@ -87,6 +72,7 @@ class OC_Gallery_Hooks_Handlers {
$path = $params[OC_Filesystem::signal_param_path];
if (OC_Filesystem::is_dir($path) && self::directoryContainsPhotos($path)) {
OC_Gallery_Album::removeByPath($path, OC_User::getUser());
+ OC_Gallery_Photo::removeByPath($path.'/%');
} elseif (self::isPhoto($path)) {
OC_Gallery_Photo::removeByPath($path);
}
diff --git a/apps/gallery/lib/images_utils.php b/apps/gallery/lib/images_utils.php
index 0cfa52eb564..126298913be 100644
--- a/apps/gallery/lib/images_utils.php
+++ b/apps/gallery/lib/images_utils.php
@@ -21,7 +21,11 @@
*
*/
-require_once('../../../lib/base.php');
+if (file_exists('../../../lib/base.php'))
+ require_once('../../../lib/base.php');
+elseif (file_exists('lib/base.php'))
+ require_once('lib/base.php');
+
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('gallery');
diff --git a/apps/gallery/lib/photo.php b/apps/gallery/lib/photo.php
index 14b0c4b2a07..d1fb166aee9 100644
--- a/apps/gallery/lib/photo.php
+++ b/apps/gallery/lib/photo.php
@@ -47,7 +47,7 @@ class OC_Gallery_Photo{
}
public static function removeByPath($path) {
- $stmt = OC_DB::prepare('DELETE FROM *PREFIX*gallery_photos WHERE file_path = ?');
+ $stmt = OC_DB::prepare('DELETE FROM *PREFIX*gallery_photos WHERE file_path LIKE ?');
$stmt->execute(array($path));
}
diff --git a/apps/gallery/lib/scanner.php b/apps/gallery/lib/scanner.php
index 4ce38a99531..dfb9edebfea 100644
--- a/apps/gallery/lib/scanner.php
+++ b/apps/gallery/lib/scanner.php
@@ -59,9 +59,10 @@ class OC_Gallery_Scanner {
$albums['imagesCount'] = $current_album['imagesCount'];
$albums['albumName'] = $current_album['name'];
- $result = OC_Gallery_Album::find(OC_User::getUser(), $current_album['name']);
+ $result = OC_Gallery_Album::find(OC_User::getUser(), /*$current_album['name']*/ null, $path);
+ // don't duplicate galleries with same path (bug oc-33)
if ($result->numRows() == 0 && count($current_album['images'])) {
- OC_Gallery_Album::create(OC_User::getUser(), $current_album['name'], $path);
+ OC_Gallery_Album::create(OC_User::getUser(), $current_album['name'], $path);
$result = OC_Gallery_Album::find(OC_User::getUser(), $current_album['name']);
}
$albumId = $result->fetchRow();
@@ -81,15 +82,15 @@ class OC_Gallery_Scanner {
$file_count = min(count($files), 10);
$thumbnail = imagecreatetruecolor($file_count*200, 200);
for ($i = 0; $i < $file_count; $i++) {
- CroppedThumbnail(OC_Config::getValue("datadirectory").'/'. OC_User::getUser() .'/files/'.$files[$i], 200, 200, $thumbnail, $i*200);
+ $imagePath = OC_Filesystem::getLocalFile($files[$i]);
+ CroppedThumbnail($imagePath, 200, 200, $thumbnail, $i*200);
}
imagepng($thumbnail, OC_Config::getValue("datadirectory").'/'. OC_User::getUser() .'/gallery/' . $albumName.'.png');
}
public static function isPhoto($filename) {
- if (substr(OC_Filesystem::getMimeType($filename), 0, 6) == "image/")
- return 1;
- return 0;
+ $ext = strtolower(substr($filename, strrpos($filename, '.')+1));
+ return $ext=='png' || $ext=='jpeg' || $ext=='jpg' || $ext=='gif';
}
public static function find_paths($path) {
diff --git a/apps/gallery/templates/index.php b/apps/gallery/templates/index.php
index eb6ebd1bb7b..4c2fbcfe6c6 100644
--- a/apps/gallery/templates/index.php
+++ b/apps/gallery/templates/index.php
@@ -7,8 +7,24 @@ $l = new OC_L10N('gallery');
<div id="notification"><div id="gallery_notification_text">Creating thumbnails</div></div>
<div id="controls">
- <input type="button" value="<?php echo $l->t('Rescan');?>" onclick="javascript:scanForAlbums();" />
- <br/>
+ <div id="scan">
+ <div id="scanprogressbar"></div>
+ <input type="button" value="<?php echo $l->t('Rescan');?>" onclick="javascript:scanForAlbums();" />
+ </div>
</div>
<div id="gallery_list">
</div>
+
+<div id="dialog-confirm" title="<?php echo $l->t('Remove confirmation');?>" style="display: none">
+ <p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span><?php echo $l->t('Do you want to remove album');?> <span id="albumName"></span>?</p>
+</div>
+
+<div id="dialog-form" title="<?php echo $l->t('Change album name');?>" style="display:none">
+ <form>
+ <fieldset>
+ <label for="name"><?php echo $l->t('New album name');?></label>
+ <input type="text" name="name" id="name" class="text ui-widget-content ui-corner-all" />
+ </fieldset>
+ </form>
+</div>
+
diff --git a/apps/gallery/templates/view_album.php b/apps/gallery/templates/view_album.php
index 55a2ee09e4a..6b513a672d5 100644
--- a/apps/gallery/templates/view_album.php
+++ b/apps/gallery/templates/view_album.php
@@ -32,3 +32,16 @@ foreach ($_['photos'] as $a) {
}
?>
</div>
+
+<div id="dialog-confirm" title="<?php echo $l->t('Remove confirmation');?>" style="display: none">
+ <p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span><?php echo $l->t('Do you want to remove album');?> <span id="albumName"></span>?</p>
+</div>
+
+<div id="dialog-form" title="<?php echo $l->t('Change album name');?>" style="display:none">
+ <form>
+ <fieldset>
+ <label for="name"><?php echo $l->t('New album name');?></label>
+ <input type="text" name="name" id="name" class="text ui-widget-content ui-corner-all" />
+ </fieldset>
+ </form>
+</div>
diff --git a/apps/media/ajax/api.php b/apps/media/ajax/api.php
index 93298c82c55..4a93e84910e 100644
--- a/apps/media/ajax/api.php
+++ b/apps/media/ajax/api.php
@@ -23,9 +23,6 @@
header('Content-type: text/html; charset=UTF-8') ;
-//no apps
-$RUNTIME_NOAPPS=true;
-
require_once('../../../lib/base.php');
OC_JSON::checkAppEnabled('media');
require_once('../lib_collection.php');
diff --git a/apps/media/css/music.css b/apps/media/css/music.css
index bcd8cf9178b..91da9ec40e7 100644
--- a/apps/media/css/music.css
+++ b/apps/media/css/music.css
@@ -17,20 +17,18 @@ a.jp-mute,a.jp-unmute { left:24em; }
div.jp-volume-bar { position:absolute; overflow:hidden; background:#eee; width:4em; height:0.4em; cursor:pointer; top:1.3em; left:27em; }
div.jp-volume-bar-value { background:#ccc; width:0; height:0.4em; }
-#collection { padding-top:1em; position:relative; width:100%; float:left; }
-#collection li.album,#collection li.song { margin-left:3em; }
+#collection { padding-top:1em; position:relative; width:100%; float:left; table-layout:fixed; }
+#collection td { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
#leftcontent img.remove { display:none; float:right; cursor:pointer; opacity: 0; }
#leftcontent li:hover img.remove { display:inline; opacity: .3; }
#leftcontent li div.label { float: left; width: 200px; overflow: hidden; text-overflow: ellipsis; }
-#collection li button { float:right; }
-#collection li,#playlist li { list-style-type:none; }
+#playlist li { list-style-type:none; }
.template { display:none; }
.collection_playing { background:#eee; font-weight: bold; }
-#collection li { padding-right:10px; }
#searchresults input.play, #searchresults input.add { float:left; height:1em; width:1em; }
#collection tr.collapsed td.album, #collection tr.collapsed td.title { color:#ddd; }
-td.artist img, td.artist a, td.album img, td.album a { float: left; }
+#collection td.artist-expander, #collection td.album-expander { width:2em; text-align:center; }
td.artist a.expander, td.album a.expander { float:right; padding:0 1em; }
tr.active td { background-color:#eee; font-weight:bold; }
tr td { border-top:1px solid #eee; height:2.2em; }
diff --git a/apps/media/js/collection.js b/apps/media/js/collection.js
index 6525df55c71..2249acf3cc4 100644
--- a/apps/media/js/collection.js
+++ b/apps/media/js/collection.js
@@ -69,7 +69,6 @@ Collection={
Collection.loadedListeners[i]();
}
if(data.songs.length==0){
- $('#scan input.start').val(t('media','Scan Collection'));
$('#scan input.start').click();
}
@@ -122,7 +121,7 @@ Collection={
}
tr.find('td.artist').addClass('buttons');
Collection.addButtons(tr,artist);
- tr.children('td.artist').append(expander);
+ tr.children('td.artist-expander').append(expander);
tr.attr('data-artist',artist.name);
Collection.parent.find('tbody').append(tr);
}
@@ -144,7 +143,7 @@ Collection={
newRow.find('td.artist').text('');
newRow.find('.expander').remove();
}
- newRow.find('td.album .expander').remove();
+ newRow.find('td.album-expander .expander').remove();
if(i==0){
newRow.find('td.album a').text(album.name);
newRow.find('td.album a').click(function(event){
@@ -165,7 +164,7 @@ Collection={
Collection.showAlbum(tr.data('artist'),tr.data('album'));
}
});
- newRow.children('td.album').append(expander);
+ newRow.children('td.album-expander').append(expander);
}
Collection.addButtons(newRow,album);
} else {
@@ -192,15 +191,15 @@ Collection={
});
});
tr.removeClass('collapsed');
- tr.find('td.artist a.expander').data('expanded',true);
- tr.find('td.artist a.expander').addClass('expanded');
- tr.find('td.artist a.expander').text('v');
+ tr.find('td.artist-expander a.expander').data('expanded',true);
+ tr.find('td.artist-expander a.expander').addClass('expanded');
+ tr.find('td.artist-expander a.expander').text('v');
},
hideArtist:function(artist){
var tr=Collection.parent.find('tr[data-artist="'+artist+'"]');
var artist=tr.first().data('artistData');
tr.first().find('td.album a').first().text(artist.albums.length+' '+t('media','albums'));
- tr.first().find('td.album a.expander').remove();
+ tr.first().find('td.album-expander a.expander').remove();
tr.first().find('td.title a').text(artist.songs.length+' '+t('media','songs'));
tr.first().find('td.album a').unbind('click');
tr.first().find('td.title a').unbind('click');
@@ -209,18 +208,18 @@ Collection={
$(row).remove();
}
});
- tr.find('td.artist a.expander').data('expanded',false);
- tr.find('td.artist a.expander').removeClass('expanded');
- tr.find('td.artist a.expander').text('>');
+ tr.find('td.artist-expander a.expander').data('expanded',false);
+ tr.find('td.artist-expander a.expander').removeClass('expanded');
+ tr.find('td.artist-expander a.expander').text('>');
Collection.addButtons(tr,artist);
},
showAlbum:function(artist,album){
var tr = Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]');
var lastRow=tr;
var albumData=tr.data('albumData');
- tr.find('td.album a.expander').data('expanded',true);
- tr.find('td.album a.expander').addClass('expanded');
- tr.find('td.album a.expander').text('v');
+ tr.find('td.album-expander a.expander').data('expanded',true);
+ tr.find('td.album-expander a.expander').addClass('expanded');
+ tr.find('td.album-expander a.expander').text('v');
$.each(albumData.songs,function(i,song){
if(i>0){
var newRow=tr.clone();
@@ -248,9 +247,9 @@ Collection={
var tr = Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]');
var albumData=tr.data('albumData');
tr.first().find('td.title a').text(albumData.songs.length+' '+t('media','songs'));
- tr.find('td.album a.expander').data('expanded',false);
- tr.find('td.album a.expander').removeClass('expanded');
- tr.find('td.album a.expander').text('> ');
+ tr.find('td.album-expander a.expander').data('expanded',false);
+ tr.find('td.album-expander a.expander').removeClass('expanded');
+ tr.find('td.album-expander a.expander').text('> ');
tr.each(function(i,row){
if(i>0){
$(row).remove();
@@ -318,33 +317,31 @@ Collection={
}
},
addSong:function(song){
- var artist=false
- var album=false;
- for(var i=0;i<Collection.artists.length;i++){
- if(Collection.artists[i].artist_id==song.song_artist){
- artist=Collection.artists[i];
- for(var j=0;j<artist.albums.length;j++){
- if(artist.albums[j].album_id==song.song_album){
- album=artist.albums[j];
- break;
- }
- }
- break;
- }
- }
+ var artist=Collection.findArtist(song.artist);
if(!artist){
- artist={artist_id:song.song_artist,artist_name:song.artist,albums:[]};
+ artist={name:song.artist,albums:[],songs:[]};
Collection.artists.push(artist);
- if(!Collection.parent || Collection.parent.is(":visible")){
- Collection.display();
- }
-
+ Collection.artistsById[song.song_artist]=artist;
}
+ var album=Collection.findAlbum(song.artist,song.album);
if(!album){
- album={album_id:song.song_album,album_name:song.album,album_artist:song.song_artist,songs:[]};
- artist.albums.push(album)
+ album={name:song.album,artist:song.song_artist,songs:[]};
+ artist.albums.push(album);
+ Collection.albums.push(album);
+ Collection.albumsById[song.song_album]=album;
}
- album.songs.push(song)
+ var songData={
+ name:song.song_name,
+ artist:Collection.artistsById[song.song_artist].name,
+ album:Collection.albumsById[song.song_album].name,
+ lastPlayed:song.song_lastplayed,
+ length:song.song_length,
+ path:song.song_path,
+ playCount:song.song_playcount,
+ };
+ album.songs.push(songData)
+ artist.songs.push(songData);
+ Collection.songs.push(songData);
}
}
diff --git a/apps/media/js/scanner.js b/apps/media/js/scanner.js
index 0ebf408e702..ed2046dd7a6 100644
--- a/apps/media/js/scanner.js
+++ b/apps/media/js/scanner.js
@@ -5,13 +5,14 @@ Scanner={
startTime:null,
endTime:null,
stopScanning:false,
- currentIndex:-1,
+ currentIndex:0,
songs:[],
findSongs:function(ready){
$.getJSON(OC.linkTo('media','ajax/api.php')+'?action=find_music',function(songs){
Scanner.songsFound=songs.length;
Scanner.currentIndex=-1
if(ready){
+
ready(songs)
}
});
@@ -37,12 +38,22 @@ Scanner={
$('#scanprogressbar').progressbar({
value:0,
});
+ $('#scanprogressbar').show();
Scanner.songsChecked=0;
+ Scanner.currentIndex=0;
Scanner.songsScanned=0;
Scanner.startTime=new Date().getTime()/1000;
Scanner.findSongs(function(songs){
Scanner.songs=songs;
- Scanner.start();
+ Scanner.start(function(){
+ $('#scan input.start').show();
+ $('#scan input.stop').hide();
+ $('#scanprogressbar').hide();
+ Collection.display();
+ if(ready){
+ ready();
+ }
+ });
});
},
stop:function(){
@@ -52,15 +63,16 @@ Scanner={
Scanner.stopScanning=false;
$('#scancount').show();
var scanSong=function(){
- Scanner.currentIndex++;
- if(!Scanner.stopScanning && Scanner.currentIndex<Scanner.songs.length){
+ if(!Scanner.stopScanning && Scanner.currentIndex<=Scanner.songs.length){
Scanner.scanFile(Scanner.songs[Scanner.currentIndex],scanSong)
- }else{
+ }else if(!Scanner.stopScanning){
Scanner.endTime=new Date().getTime()/1000;
if(ready){
ready();
+ ready=null;//only call ready once
}
}
+ Scanner.currentIndex++;
}
scanSong();
scanSong();
diff --git a/apps/media/l10n/th_TH.php b/apps/media/l10n/th_TH.php
new file mode 100644
index 00000000000..dc448b32681
--- /dev/null
+++ b/apps/media/l10n/th_TH.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"Music" => "เพลง",
+"Play" => "เล่น",
+"Pause" => "หยุดชั่วคราว",
+"Previous" => "ก่อนหน้า",
+"Next" => "ถัดไป",
+"Mute" => "ปิดเสียง",
+"Unmute" => "เปิดเสียง",
+"Rescan Collection" => "ตรวจสอบไฟล์ที่เก็บไว้อีกครั้ง",
+"Artist" => "ศิลปิน",
+"Album" => "อัลบั้ม",
+"Title" => "ชื่อ"
+);
diff --git a/apps/media/lib_ampache.php b/apps/media/lib_ampache.php
index bc1f853047f..138b65d1fd7 100644
--- a/apps/media/lib_ampache.php
+++ b/apps/media/lib_ampache.php
@@ -25,6 +25,31 @@
class OC_MEDIA_AMPACHE{
/**
+ * fix the string to be XML compatible
+ * @param string name
+ * @return string
+ */
+
+ /* this is an ugly hack(tm), this should be: */
+ /* htmlentities($name, ENT_XML1, 'UTF-8'); */
+ /* with PHP 5.4 and later */
+ public static function fixXmlString($name){
+ $result=str_replace("&", "&amp;", $name);
+ $result=str_replace("'", "&apos;", $result);
+ $result=str_replace("<", "&lt;", $result);
+ $result=str_replace(">", "&gt;", $result);
+ $result=str_replace("\"", "&quot;", $result);
+ $result=str_replace("Ä", "&#196;", $result);
+ $result=str_replace("Ö", "&#214;", $result);
+ $result=str_replace("Ü", "&#220;", $result);
+ $result=str_replace("ä", "&#228;", $result);
+ $result=str_replace("ö", "&#246;", $result);
+ $result=str_replace("ü", "&#252;", $result);
+ $result=str_replace("ß", "&#223;", $result);
+ return $result;
+ }
+
+ /**
* do the initial handshake
* @param array params
*/
@@ -34,6 +59,7 @@ class OC_MEDIA_AMPACHE{
$time=(isset($params['timestamp']))?$params['timestamp']:false;
$now=time();
if($now-$time>(10*60)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>timestamp is more then 10 minutes old</error>
</root>");
@@ -54,6 +80,7 @@ class OC_MEDIA_AMPACHE{
$query=OC_DB::prepare("INSERT INTO *PREFIX*media_sessions (`session_id`, `token`, `user_id`, `start`) VALUES (NULL, ?, ?, now());");
$query->execute(array($token,$user));
$expire=date('c',time()+600);
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<auth>$token</auth>
<version>350001</version>
@@ -71,10 +98,12 @@ class OC_MEDIA_AMPACHE{
return;
}
}
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
}else{
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Missing arguments</error>
</root>");
@@ -86,12 +115,14 @@ class OC_MEDIA_AMPACHE{
if(self::checkAuth($params['auth'])){
self::updateAuth($params['auth']);
}else{
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
return;
}
}
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo('<root>');
echo('<version>350001</version>');
echo('</root>');
@@ -128,7 +159,7 @@ class OC_MEDIA_AMPACHE{
$albums=count(OC_MEDIA_COLLECTION::getAlbums($artist['artist_id']));
$songs=count(OC_MEDIA_COLLECTION::getSongs($artist['artist_id']));
$id=$artist['artist_id'];
- $name=htmlentities($artist['artist_name'], ENT_COMPAT, 'UTF-8');
+ $name=self::fixXmlString($artist['artist_name']);
echo("\t<artist id='$id'>\n");
echo("\t\t<name>$name</name>\n");
echo("\t\t<albums>$albums</albums>\n");
@@ -142,16 +173,19 @@ class OC_MEDIA_AMPACHE{
if(!$artistName){
$artistName=OC_MEDIA_COLLECTION::getArtistName($album['album_artist']);
}
- $artistName=htmlentities($artistName, ENT_COMPAT, 'UTF-8');
+ $artistName=self::fixXmlString($artistName);
$songs=count(OC_MEDIA_COLLECTION::getSongs($album['album_artist'],$album['album_id']));
$id=$album['album_id'];
- $name=htmlentities($album['album_name'], ENT_COMPAT, 'UTF-8');
+ $name=self::fixXmlString($album['album_name']);
$artist=$album['album_artist'];
echo("\t<album id='$id'>\n");
echo("\t\t<name>$name</name>\n");
echo("\t\t<artist id='$artist'>$artistName</artist>\n");
echo("\t\t<tracks>$songs</tracks>\n");
echo("\t\t<rating>0</rating>\n");
+ echo("\t\t<year>0</year>\n"); /* make Viridian happy */
+ echo("\t\t<disk>1</disk>\n"); /* make Viridian happy */
+ echo("\t\t<art> </art>\n"); /* single space to make quickplay happy enough */
echo("\t\t<preciserating>0</preciserating>\n");
echo("\t</album>\n");
}
@@ -163,10 +197,10 @@ class OC_MEDIA_AMPACHE{
if(!$albumName){
$albumName=OC_MEDIA_COLLECTION::getAlbumName($song['song_album']);
}
- $artistName=htmlentities($artistName, ENT_COMPAT, 'UTF-8');
- $albumName=htmlentities($albumName, ENT_COMPAT, 'UTF-8');
+ $artistName=self::fixXmlString($artistName);
+ $albumName=self::fixXmlString($albumName);
$id=$song['song_id'];
- $name=htmlentities($song['song_name'], ENT_COMPAT, 'UTF-8');
+ $name=self::fixXmlString($song['song_name']);
$artist=$song['song_artist'];
$album=$song['song_album'];
echo("\t<song id='$id'>\n");
@@ -174,12 +208,12 @@ class OC_MEDIA_AMPACHE{
echo("\t\t<artist id='$artist'>$artistName</artist>\n");
echo("\t\t<album id='$album'>$albumName</album>\n");
$url=OC_Helper::linkTo('media', 'server/xml.server.php', null, true)."?action=play&song=$id&auth={$_GET['auth']}";
- $url=htmlentities($url);
+ $url=self::fixXmlString($url);
echo("\t\t<url>$url</url>\n");
echo("\t\t<time>{$song['song_length']}</time>\n");
echo("\t\t<track>{$song['song_track']}</track>\n");
echo("\t\t<size>{$song['song_size']}</size>\n");
- echo("\t\t<art></art>\n");
+ echo("\t\t<art> </art>\n"); /* single space to make Viridian happy enough */
echo("\t\t<rating>0</rating>\n");
echo("\t\t<preciserating>0</preciserating>\n");
echo("\t</song>\n");
@@ -187,6 +221,7 @@ class OC_MEDIA_AMPACHE{
public static function artists($params){
if(!self::checkAuth($params)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
@@ -195,6 +230,7 @@ class OC_MEDIA_AMPACHE{
$filter=isset($params['filter'])?$params['filter']:'';
$exact=isset($params['exact'])?($params['exact']=='true'):false;
$artists=OC_MEDIA_COLLECTION::getArtists($filter,$exact);
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo('<root>');
foreach($artists as $artist){
self::printArtist($artist);
@@ -204,6 +240,7 @@ class OC_MEDIA_AMPACHE{
public static function artist_songs($params){
if(!self::checkAuth($params)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
@@ -212,6 +249,7 @@ class OC_MEDIA_AMPACHE{
$filter=isset($params['filter'])?$params['filter']:'';
$songs=OC_MEDIA_COLLECTION::getSongs($filter);
$artist=OC_MEDIA_COLLECTION::getArtistName($filter);
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo('<root>');
foreach($songs as $song){
self::printSong($song,$artist);
@@ -221,6 +259,7 @@ class OC_MEDIA_AMPACHE{
public static function artist_albums($params){
if(!self::checkAuth($params)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
@@ -230,6 +269,7 @@ class OC_MEDIA_AMPACHE{
$filter=$params['filter'];
$albums=OC_MEDIA_COLLECTION::getAlbums($filter);
$artist=OC_MEDIA_COLLECTION::getArtistName($filter);
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo('<root>');
foreach($albums as $album){
self::printAlbum($album,$artist);
@@ -239,6 +279,7 @@ class OC_MEDIA_AMPACHE{
public static function albums($params){
if(!self::checkAuth($params)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
@@ -247,15 +288,17 @@ class OC_MEDIA_AMPACHE{
$filter=isset($params['filter'])?$params['filter']:'';
$exact=isset($params['exact'])?($params['exact']=='true'):false;
$albums=OC_MEDIA_COLLECTION::getAlbums(0,$filter,$exact);
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo('<root>');
foreach($albums as $album){
- self::printAlbum($album,$artist);
+ self::printAlbum($album,false);
}
echo('</root>');
}
public static function album_songs($params){
if(!self::checkAuth($params)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
@@ -265,6 +308,7 @@ class OC_MEDIA_AMPACHE{
if(count($songs)>0){
$artist=OC_MEDIA_COLLECTION::getArtistName($songs[0]['song_artist']);
}
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo('<root>');
foreach($songs as $song){
self::printSong($song,$artist);
@@ -274,6 +318,7 @@ class OC_MEDIA_AMPACHE{
public static function songs($params){
if(!self::checkAuth($params)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
@@ -282,6 +327,7 @@ class OC_MEDIA_AMPACHE{
$filter=isset($params['filter'])?$params['filter']:'';
$exact=isset($params['exact'])?($params['exact']=='true'):false;
$songs=OC_MEDIA_COLLECTION::getSongs(0,0,$filter,$exact);
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo('<root>');
foreach($songs as $song){
self::printSong($song);
@@ -291,12 +337,14 @@ class OC_MEDIA_AMPACHE{
public static function song($params){
if(!self::checkAuth($params)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
return;
}
if($song=OC_MEDIA_COLLECTION::getSong($params['filter'])){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo('<root>');
self::printSong($song);
echo('</root>');
@@ -306,6 +354,7 @@ class OC_MEDIA_AMPACHE{
public static function play($params){
$username=!self::checkAuth($params);
if($username){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
@@ -322,6 +371,7 @@ class OC_MEDIA_AMPACHE{
public static function url_to_song($params){
if(!self::checkAuth($params)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
@@ -330,6 +380,7 @@ class OC_MEDIA_AMPACHE{
$url=$params['url'];
$songId=substr($url,strrpos($url,'song=')+5);
if($song=OC_MEDIA_COLLECTION::getSong($songId)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo('<root>');
self::printSong($song);
echo('</root>');
@@ -338,6 +389,7 @@ class OC_MEDIA_AMPACHE{
public static function search_songs($params){
if(!self::checkAuth($params)){
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo("<root>
<error code='400'>Invalid login</error>
</root>");
@@ -353,6 +405,7 @@ class OC_MEDIA_AMPACHE{
foreach($albums as $album){
$songs=array_merge($songs,OC_MEDIA_COLLECTION::getSongs($album['album_artist'],$album['album_id']));
}
+ echo('<?xml version="1.0" encoding="UTF-8"?>');
echo('<root>');
foreach($songs as $song){
self::printSong($song);
diff --git a/apps/media/lib_collection.php b/apps/media/lib_collection.php
index d8dda1212e4..411acd97506 100644
--- a/apps/media/lib_collection.php
+++ b/apps/media/lib_collection.php
@@ -243,7 +243,7 @@ class OC_MEDIA_COLLECTION{
}else{
$searchString='';
}
- $query=OC_DB::prepare("SELECT * FROM *PREFIX*media_songs WHERE song_user=? $artistString $albumString $searchString ORDER BY song_track, song_name");
+ $query=OC_DB::prepare("SELECT * FROM *PREFIX*media_songs WHERE song_user=? $artistString $albumString $searchString ORDER BY song_track, song_name, song_path");
return $query->execute($params)->fetchAll();
}
diff --git a/apps/media/lib_media.php b/apps/media/lib_media.php
index 485d616e1aa..0ade0e593dc 100644
--- a/apps/media/lib_media.php
+++ b/apps/media/lib_media.php
@@ -28,7 +28,7 @@ OC_Hook::connect('OC_User','post_login','OC_MEDIA','loginListener');
OC_Hook::connect('OC_Filesystem','post_write','OC_MEDIA','updateFile');
//listen for file deletions to clean the database if a song is deleted
-OC_Hook::connect('OC_Filesystem','delete','OC_MEDIA','deleteFile');
+OC_Hook::connect('OC_Filesystem','post_delete','OC_MEDIA','deleteFile');
//list for file moves to update the database
OC_Hook::connect('OC_Filesystem','post_rename','OC_MEDIA','moveFile');
diff --git a/apps/media/lib_scanner.php b/apps/media/lib_scanner.php
index 4039cce09ee..8b659c73b6e 100644
--- a/apps/media/lib_scanner.php
+++ b/apps/media/lib_scanner.php
@@ -140,7 +140,7 @@ class OC_MEDIA_SCANNER{
* @return bool
*/
public static function isMusic($filename){
- $ext=substr($filename,strrpos($filename,'.')+1);
+ $ext=strtolower(substr($filename,strrpos($filename,'.')+1));
return $ext=='mp3' || $ext=='flac' || $ext=='m4a' || $ext=='ogg' || $ext=='oga';
}
}
diff --git a/apps/media/server/xml.server.php b/apps/media/server/xml.server.php
index 7e320a7f595..cb9b68fc422 100644
--- a/apps/media/server/xml.server.php
+++ b/apps/media/server/xml.server.php
@@ -69,6 +69,9 @@ if(isset($arguments['action'])){
case 'search_songs':
OC_MEDIA_AMPACHE::search_songs($arguments);
break;
+ case 'song':
+ OC_MEDIA_AMPACHE::song($arguments);
+ break;
}
}
diff --git a/apps/media/templates/music.php b/apps/media/templates/music.php
index 7764a315a8f..3959d989472 100644
--- a/apps/media/templates/music.php
+++ b/apps/media/templates/music.php
@@ -42,7 +42,9 @@
<tbody>
<tr class="template">
<td class="artist"><a></a></td>
+ <td class="artist-expander"><a></a></td>
<td class="album"><a></a></td>
+ <td class="album-expander"><a></a></td>
<td class="title"><a></a></td>
</tr>
</tbody>