diff options
author | Robin Appelman <icewind@owncloud.com> | 2012-01-30 20:29:33 +0100 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2012-01-30 20:29:33 +0100 |
commit | 4522d19b4c214676b8a0d4067c3a2d1bc63618bc (patch) | |
tree | 68725926f48072805e321f3507237df33814472a /apps | |
parent | 355262635838860f5f17b2cf20132adddd7af77e (diff) | |
parent | 45038af948cd07ffc74efc8d4b0282fa11b7de7e (diff) | |
download | nextcloud-server-4522d19b4c214676b8a0d4067c3a2d1bc63618bc.tar.gz nextcloud-server-4522d19b4c214676b8a0d4067c3a2d1bc63618bc.zip |
merge master into filesystem
Diffstat (limited to 'apps')
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"/> + <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 Binary files differnew file mode 100644 index 00000000000..bc0c782882d --- /dev/null +++ b/apps/gallery/img/delete.png diff --git a/apps/gallery/img/rename.png b/apps/gallery/img/rename.png Binary files differnew file mode 100644 index 00000000000..9993a092df1 --- /dev/null +++ b/apps/gallery/img/rename.png diff --git a/apps/gallery/img/share.png b/apps/gallery/img/share.png Binary files differnew file mode 100644 index 00000000000..62c4627f317 --- /dev/null +++ b/apps/gallery/img/share.png 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("&", "&", $name); + $result=str_replace("'", "'", $result); + $result=str_replace("<", "<", $result); + $result=str_replace(">", ">", $result); + $result=str_replace("\"", """, $result); + $result=str_replace("Ä", "Ä", $result); + $result=str_replace("Ö", "Ö", $result); + $result=str_replace("Ü", "Ü", $result); + $result=str_replace("ä", "ä", $result); + $result=str_replace("ö", "ö", $result); + $result=str_replace("ü", "ü", $result); + $result=str_replace("ß", "ß", $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> |