summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/bookmarks/ajax/addBookmark.php7
-rw-r--r--apps/bookmarks/ajax/delBookmark.php5
-rw-r--r--apps/bookmarks/ajax/editBookmark.php5
-rw-r--r--apps/bookmarks/ajax/recordClick.php5
-rw-r--r--apps/bookmarks/ajax/updateList.php5
-rw-r--r--apps/calendar/ajax/calendar/overview.php4
-rw-r--r--apps/calendar/appinfo/app.php1
-rw-r--r--apps/calendar/calendar.php12
-rw-r--r--apps/calendar/css/style.css11
-rw-r--r--apps/calendar/index.php3
-rw-r--r--apps/calendar/js/calendar.js68
-rw-r--r--apps/calendar/js/settings.js7
-rw-r--r--apps/calendar/settings.php2
-rw-r--r--apps/calendar/templates/calendar.php16
-rw-r--r--apps/calendar/templates/part.choosecalendar.php101
-rw-r--r--apps/calendar/templates/settings.php76
-rw-r--r--apps/contacts/ajax/contact/add.php8
-rw-r--r--apps/contacts/ajax/contact/addproperty.php21
-rw-r--r--apps/contacts/ajax/contact/delete.php3
-rw-r--r--apps/contacts/ajax/contact/deleteproperty.php10
-rw-r--r--apps/contacts/ajax/contact/details.php1
-rw-r--r--apps/contacts/ajax/contact/saveproperty.php9
-rw-r--r--apps/contacts/ajax/savecrop.php31
-rw-r--r--apps/contacts/css/contacts.css3
-rw-r--r--apps/contacts/js/contacts.js8
-rw-r--r--apps/contacts/js/settings.js21
-rw-r--r--apps/contacts/l10n/de.php2
-rw-r--r--apps/contacts/l10n/fr.php11
-rw-r--r--apps/contacts/lib/app.php12
-rw-r--r--apps/contacts/lib/vcard.php22
-rw-r--r--apps/contacts/photo.php28
-rw-r--r--apps/contacts/templates/settings.php4
-rw-r--r--apps/contacts/thumbnail.php36
-rw-r--r--apps/files/ajax/mimeicon.php6
-rw-r--r--apps/files/l10n/de.php11
-rw-r--r--apps/files/l10n/fa.php2
-rw-r--r--apps/files/l10n/fr.php5
-rw-r--r--apps/files_sharing/get.php2
-rw-r--r--apps/files_sharing/sharedstorage.php19
-rw-r--r--apps/media/ajax/autoupdate.php5
-rw-r--r--apps/remoteStorage/ajax/revokeToken.php4
-rw-r--r--apps/remoteStorage/auth.php68
-rw-r--r--apps/remoteStorage/templates/auth.php28
-rw-r--r--core/l10n/de.php6
-rw-r--r--files/webdav.php2
-rwxr-xr-xindex.php93
-rw-r--r--l10n/ca/settings.po10
-rw-r--r--l10n/de/contacts.po24
-rw-r--r--l10n/de/core.po36
-rw-r--r--l10n/de/files.po34
-rw-r--r--l10n/de/settings.po12
-rw-r--r--l10n/fa/files.po23
-rw-r--r--l10n/fa/settings.po11
-rw-r--r--l10n/fi/bookmarks.po60
-rw-r--r--l10n/fi/calendar.po814
-rw-r--r--l10n/fi/contacts.po870
-rw-r--r--l10n/fi/core.po268
-rw-r--r--l10n/fi/files.po222
-rw-r--r--l10n/fi/gallery.po58
-rw-r--r--l10n/fi/lib.po112
-rw-r--r--l10n/fi/media.po66
-rw-r--r--l10n/fi/settings.po222
-rw-r--r--l10n/fi_FI/settings.po8
-rw-r--r--l10n/fr/contacts.po41
-rw-r--r--l10n/fr/files.po29
-rw-r--r--l10n/fr/settings.po11
-rw-r--r--l10n/templates/bookmarks.pot2
-rw-r--r--l10n/templates/calendar.pot2
-rw-r--r--l10n/templates/contacts.pot18
-rw-r--r--l10n/templates/core.pot2
-rw-r--r--l10n/templates/files.pot14
-rw-r--r--l10n/templates/gallery.pot2
-rw-r--r--l10n/templates/lib.pot2
-rw-r--r--l10n/templates/media.pot2
-rw-r--r--l10n/templates/settings.pot2
-rw-r--r--lib/base.php121
-rw-r--r--lib/exception.php93
-rw-r--r--lib/filecache.php30
-rw-r--r--lib/filecache/update.php4
-rw-r--r--lib/helper.php61
-rw-r--r--lib/public/util.php4
-rw-r--r--lib/request.php77
-rwxr-xr-xlib/util.php4
-rw-r--r--public.php1
-rw-r--r--remote.php7
-rw-r--r--settings/l10n/ca.php2
-rw-r--r--settings/l10n/de.php4
-rw-r--r--settings/l10n/fa.php2
-rw-r--r--settings/l10n/fi_FI.php1
-rw-r--r--settings/l10n/fr.php2
90 files changed, 3490 insertions, 709 deletions
diff --git a/apps/bookmarks/ajax/addBookmark.php b/apps/bookmarks/ajax/addBookmark.php
index 483716405a1..c8a64d531c9 100644
--- a/apps/bookmarks/ajax/addBookmark.php
+++ b/apps/bookmarks/ajax/addBookmark.php
@@ -21,11 +21,6 @@
*
*/
-//no apps or filesystem
-$RUNTIME_NOSETUPFS=true;
-
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
@@ -34,4 +29,4 @@ OCP\JSON::checkAppEnabled('bookmarks');
require_once(OC_App::getAppPath('bookmarks').'/bookmarksHelper.php');
$id = addBookmark($_POST['url'], $_POST['title'], $_POST['tags']);
-OCP\JSON::success(array('data' => $id)); \ No newline at end of file
+OCP\JSON::success(array('data' => $id));
diff --git a/apps/bookmarks/ajax/delBookmark.php b/apps/bookmarks/ajax/delBookmark.php
index f40f02ebab7..ba1dfff3bed 100644
--- a/apps/bookmarks/ajax/delBookmark.php
+++ b/apps/bookmarks/ajax/delBookmark.php
@@ -21,11 +21,6 @@
*
*/
-//no apps or filesystem
-$RUNTIME_NOSETUPFS=true;
-
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
diff --git a/apps/bookmarks/ajax/editBookmark.php b/apps/bookmarks/ajax/editBookmark.php
index 0b37d161af1..ad43be064f0 100644
--- a/apps/bookmarks/ajax/editBookmark.php
+++ b/apps/bookmarks/ajax/editBookmark.php
@@ -21,11 +21,6 @@
*
*/
-//no apps or filesystem
-$RUNTIME_NOSETUPFS=true;
-
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
diff --git a/apps/bookmarks/ajax/recordClick.php b/apps/bookmarks/ajax/recordClick.php
index 1eee1718d13..0283f09f60d 100644
--- a/apps/bookmarks/ajax/recordClick.php
+++ b/apps/bookmarks/ajax/recordClick.php
@@ -21,11 +21,6 @@
*
*/
-//no apps or filesystem
-$RUNTIME_NOSETUPFS=true;
-
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('bookmarks');
diff --git a/apps/bookmarks/ajax/updateList.php b/apps/bookmarks/ajax/updateList.php
index 4de2475d067..cf9a2cf9183 100644
--- a/apps/bookmarks/ajax/updateList.php
+++ b/apps/bookmarks/ajax/updateList.php
@@ -22,11 +22,6 @@
*
*/
-//no apps or filesystem
-$RUNTIME_NOSETUPFS=true;
-
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('bookmarks');
diff --git a/apps/calendar/ajax/calendar/overview.php b/apps/calendar/ajax/calendar/overview.php
index 9d43364ffbf..1d8e49ea5f2 100644
--- a/apps/calendar/ajax/calendar/overview.php
+++ b/apps/calendar/ajax/calendar/overview.php
@@ -4,9 +4,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
- */
-
-
+ */
$l10n = OC_L10N::get('calendar');
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('calendar');
diff --git a/apps/calendar/appinfo/app.php b/apps/calendar/appinfo/app.php
index 72ddde60152..9ae255853d5 100644
--- a/apps/calendar/appinfo/app.php
+++ b/apps/calendar/appinfo/app.php
@@ -35,7 +35,6 @@ OCP\App::addNavigationEntry( array(
'href' => OCP\Util::linkTo( 'calendar', 'index.php' ),
'icon' => OCP\Util::imagePath( 'calendar', 'icon.svg' ),
'name' => $l->t('Calendar')));
-OCP\App::registerPersonal('calendar', 'settings');
OC_Search::registerProvider('OC_Search_Provider_Calendar');
OCP\Share::registerBackend('calendar', 'OC_Share_Backend_Calendar');
OCP\Share::registerBackend('event', 'OC_Share_Backend_Event');
diff --git a/apps/calendar/calendar.php b/apps/calendar/calendar.php
new file mode 100644
index 00000000000..2c0bee9d233
--- /dev/null
+++ b/apps/calendar/calendar.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Copyright (c) 2012 Georg Ehrke <ownClouddev at georgswebsite.de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+$l10n = OC_L10N::get('calendar');
+OCP\JSON::checkLoggedIn();
+OCP\JSON::checkAppEnabled('calendar');
+$tmpl = new OCP\Template('calendar', 'part.choosecalendar');
+$tmpl->printpage(); \ No newline at end of file
diff --git a/apps/calendar/css/style.css b/apps/calendar/css/style.css
index 373a4565638..5cda4b1beff 100644
--- a/apps/calendar/css/style.css
+++ b/apps/calendar/css/style.css
@@ -19,7 +19,7 @@
#loading { display: none;margin: 0;padding:0;margin-top:5px;}
-#calendar_holder {position: relative;bottom: 0; right: 0; left: 0; top: 3em;}
+#fullcalendar {position: relative;bottom: 0; right: 0; left: 0; top: 3em;}
.fc-content{padding:2px 4px;}
#listview {margin: 0; padding: 10px; background: #EEEEEE;}
#listview #more_before, #listview #more_after {border: 1px solid #1a1a1a; width:25em;padding: 3px;text-align: center;}
@@ -133,3 +133,12 @@ padding:0 8px 2px;
line-height:1.2;
margin-bottom:4px;
}
+
+#choosecalendar a.settings{
+ margin-top: 25px;
+ margin-right: 10px;
+}
+
+#fullcalendar{
+ overflow: scroll;
+} \ No newline at end of file
diff --git a/apps/calendar/index.php b/apps/calendar/index.php
index cbfe0027b7b..352c295c437 100644
--- a/apps/calendar/index.php
+++ b/apps/calendar/index.php
@@ -5,8 +5,7 @@
* later.
* See the COPYING-README file.
*/
-
-
+DEFINE('DEBUG', TRUE);
OCP\User::checkLoggedIn();
OCP\App::checkAppEnabled('calendar');
diff --git a/apps/calendar/js/calendar.js b/apps/calendar/js/calendar.js
index 25311fa0df4..23846c89b84 100644
--- a/apps/calendar/js/calendar.js
+++ b/apps/calendar/js/calendar.js
@@ -18,7 +18,7 @@ Calendar={
startEventDialog:function(){
Calendar.UI.loading(false);
$('.tipsy').remove();
- $('#calendar_holder').fullCalendar('unselect');
+ $('#fullcalendar').fullCalendar('unselect');
Calendar.UI.lockTime();
$( "#from" ).datepicker({
dateFormat : 'dd-mm-yy'
@@ -88,7 +88,7 @@ Calendar={
$.post(url, post, function(data){
Calendar.UI.loading(false);
if(data.status == 'success'){
- $('#calendar_holder').fullCalendar('removeEvents', $('#event_form input[name=id]').val());
+ $('#fullcalendar').fullCalendar('removeEvents', $('#event_form input[name=id]').val());
$('#event').dialog('destroy').remove();
} else {
$('#errorbox').html(t('calendar', 'Deletion failed'));
@@ -133,7 +133,7 @@ Calendar={
} else
if(data.status == 'success'){
$('#event').dialog('destroy').remove();
- $('#calendar_holder').fullCalendar('refetchEvents');
+ $('#fullcalendar').fullCalendar('refetchEvents');
}
},"json");
},
@@ -148,7 +148,7 @@ Calendar={
console.log("Event moved successfully");
}else{
revertFunc();
- $('#calendar_holder').fullCalendar('refetchEvents');
+ $('#fullcalendar').fullCalendar('refetchEvents');
}
});
},
@@ -163,7 +163,7 @@ Calendar={
console.log("Event resized successfully");
}else{
revertFunc();
- $('#calendar_holder').fullCalendar('refetchEvents');
+ $('#fullcalendar').fullCalendar('refetchEvents');
}
});
},
@@ -239,11 +239,11 @@ Calendar={
doc_height = $(document).height(),
win_height = $(window).height();
if(direction == 'down' && win_height == (doc_height - scroll)){
- $('#calendar_holder').fullCalendar('next');
+ $('#fullcalendar').fullCalendar('next');
$(document).scrollTop(0);
event.preventDefault();
}else if (direction == 'top' && scroll == 0) {
- $('#calendar_holder').fullCalendar('prev');
+ $('#fullcalendar').fullCalendar('prev');
$(document).scrollTop(win_height);
event.preventDefault();
}
@@ -398,9 +398,9 @@ Calendar={
if (data.status == 'success'){
checkbox.checked = data.active == 1;
if (data.active == 1){
- $('#calendar_holder').fullCalendar('addEventSource', data.eventSource);
+ $('#fullcalendar').fullCalendar('addEventSource', data.eventSource);
}else{
- $('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url);
+ $('#fullcalendar').fullCalendar('removeEventSource', data.eventSource.url);
}
}
});
@@ -426,10 +426,10 @@ Calendar={
function(data) {
if (data.status == 'success'){
var url = 'ajax/events.php?calendar_id='+calid;
- $('#calendar_holder').fullCalendar('removeEventSource', url);
+ $('#fullcalendar').fullCalendar('removeEventSource', url);
$('#choosecalendar_dialog').dialog('destroy').remove();
Calendar.UI.Calendar.overview();
- $('#calendar_holder').fullCalendar('refetchEvents');
+ $('#fullcalendar').fullCalendar('refetchEvents');
}
});
}
@@ -456,8 +456,8 @@ Calendar={
function(data){
if(data.status == 'success'){
$(button).closest('tr').prev().html(data.page).show().next().remove();
- $('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url);
- $('#calendar_holder').fullCalendar('addEventSource', data.eventSource);
+ $('#fullcalendar').fullCalendar('removeEventSource', data.eventSource.url);
+ $('#fullcalendar').fullCalendar('addEventSource', data.eventSource);
if (calendarid == 'new'){
$('#choosecalendar_dialog > table:first').append('<tr><td colspan="6"><a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="' + newcalendar + '"></a></td></tr>');
}
@@ -504,7 +504,7 @@ Calendar={
idtype: '',
activation:function(object,owner,id){
$.post(OC.filePath('calendar', 'ajax/share', 'activation.php'),{id:id, idtype:'calendar', activation:object.checked?1:0});
- $('#calendar_holder').fullCalendar('refetchEvents');
+ $('#fullcalendar').fullCalendar('refetchEvents');
},
dropdown:function(userid, calid){
$('.calendar_share_dropdown').remove();
@@ -612,7 +612,7 @@ Calendar={
console.log('The drop-import feature is not supported in your browser :(');
return false;
}
- droparea = document.getElementById('calendar_holder');
+ droparea = document.getElementById('fullcalendar');
droparea.ondrop = function(e){
e.preventDefault();
Calendar.UI.Drop.drop(e);
@@ -626,7 +626,7 @@ Calendar={
reader = new FileReader();
reader.onload = function(event){
Calendar.UI.Drop.import(event.target.result);
- $('#calendar_holder').fullCalendar('refetchEvents');
+ $('#fullcalendar').fullCalendar('refetchEvents');
}
reader.readAsDataURL(file);
}
@@ -634,7 +634,7 @@ Calendar={
import:function(data){
$.post(OC.filePath('calendar', 'ajax/import', 'dropimport.php'), {'data':data},function(result) {
if(result.status == 'success'){
- $('#calendar_holder').fullCalendar('addEventSource', result.eventSource);
+ $('#fullcalendar').fullCalendar('addEventSource', result.eventSource);
$('#notification').html(result.message);
$('#notification').slideDown();
window.setTimeout(function(){$('#notification').slideUp();}, 5000);
@@ -647,7 +647,11 @@ Calendar={
});
}
}
- }
+ },
+ Settings:{
+ //
+ },
+
}
$.fullCalendar.views.list = ListView;
function ListView(element, calendar) {
@@ -815,7 +819,7 @@ function ListView(element, calendar) {
}
$(document).ready(function(){
Calendar.UI.initScroll();
- $('#calendar_holder').fullCalendar({
+ $('#fullcalendar').fullCalendar({
header: false,
firstDay: firstDay,
editable: true,
@@ -851,10 +855,10 @@ $(document).ready(function(){
}
Calendar.UI.setViewActive(view.name);
if (view.name == 'agendaWeek') {
- $('#calendar_holder').fullCalendar('option', 'aspectRatio', 0.1);
+ $('#fullcalendar').fullCalendar('option', 'aspectRatio', 0.1);
}
else {
- $('#calendar_holder').fullCalendar('option', 'aspectRatio', 1.35);
+ $('#fullcalendar').fullCalendar('option', 'aspectRatio', 1.35);
}
},
columnFormat: {
@@ -888,7 +892,7 @@ $(document).ready(function(){
changeYear: true,
showButtonPanel: true,
beforeShow: function(input, inst) {
- var calendar_holder = $('#calendar_holder');
+ var calendar_holder = $('#fullcalendar');
var date = calendar_holder.fullCalendar('getDate');
inst.input.datepicker('setDate', date);
inst.input.val(calendar_holder.fullCalendar('getView').title);
@@ -896,30 +900,36 @@ $(document).ready(function(){
},
onSelect: function(value, inst) {
var date = inst.input.datepicker('getDate');
- $('#calendar_holder').fullCalendar('gotoDate', date);
+ $('#fullcalendar').fullCalendar('gotoDate', date);
}
});
fillWindow($('#content'));
OCCategories.changed = Calendar.UI.categoriesChanged;
OCCategories.app = 'calendar';
$('#oneweekview_radio').click(function(){
- $('#calendar_holder').fullCalendar('changeView', 'agendaWeek');
+ $('#fullcalendar').fullCalendar('changeView', 'agendaWeek');
});
$('#onemonthview_radio').click(function(){
- $('#calendar_holder').fullCalendar('changeView', 'month');
+ $('#fullcalendar').fullCalendar('changeView', 'month');
});
$('#listview_radio').click(function(){
- $('#calendar_holder').fullCalendar('changeView', 'list');
+ $('#fullcalendar').fullCalendar('changeView', 'list');
});
$('#today_input').click(function(){
- $('#calendar_holder').fullCalendar('today');
+ $('#fullcalendar').fullCalendar('today');
});
$('#datecontrol_left').click(function(){
- $('#calendar_holder').fullCalendar('prev');
+ $('#fullcalendar').fullCalendar('prev');
});
$('#datecontrol_right').click(function(){
- $('#calendar_holder').fullCalendar('next');
+ $('#fullcalendar').fullCalendar('next');
});
Calendar.UI.Share.init();
Calendar.UI.Drop.init();
+ $('#choosecalendar .generalsettings').on('click keydown', function() {
+ OC.appSettings({appid:'calendar', loadJS:true, cache:false});
+ });
+ $('#choosecalendar .calendarsettings').on('click keydown', function() {
+ OC.appSettings({appid:'calendar', loadJS:true, cache:false, scriptName:'calendar.php'});
+ });
});
diff --git a/apps/calendar/js/settings.js b/apps/calendar/js/settings.js
index 60741f2b6fc..20753a7b8fe 100644
--- a/apps/calendar/js/settings.js
+++ b/apps/calendar/js/settings.js
@@ -1,11 +1,7 @@
$(document).ready(function(){
$('#timezone').change( function(){
- OC.msg.startSaving('#calendar .msg')
- // Serialize the data
var post = $( '#timezone' ).serialize();
- $.post( OC.filePath('calendar', 'ajax/settings', 'settimezone.php'), post, function(data){
- //OC.msg.finishedSaving('#calendar .msg', data);
- });
+ $.post( OC.filePath('calendar', 'ajax/settings', 'settimezone.php'), post, function(data){return;});
return false;
});
$('#timezone').chosen();
@@ -52,6 +48,7 @@ $(document).ready(function(){
});
});
calendarcachecheck();
+
});
function calendarcachecheck(){
$.getJSON(OC.filePath('calendar', 'ajax/cache', 'status.php'), function(jsondata, status) {
diff --git a/apps/calendar/settings.php b/apps/calendar/settings.php
index eaa20c6c9b4..f563518046d 100644
--- a/apps/calendar/settings.php
+++ b/apps/calendar/settings.php
@@ -14,4 +14,4 @@ $tmpl->assign('calendars', OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(
OCP\Util::addscript('calendar','settings');
-return $tmpl->fetchPage();
+$tmpl->printPage(); \ No newline at end of file
diff --git a/apps/calendar/templates/calendar.php b/apps/calendar/templates/calendar.php
index 29b9bf6bc54..c94cc755ab3 100644
--- a/apps/calendar/templates/calendar.php
+++ b/apps/calendar/templates/calendar.php
@@ -33,6 +33,7 @@
?>
});
</script>
+ <div id="notification" style="display:none;"></div>
<div id="controls">
<form id="view">
<input type="button" value="<?php echo $l->t('Week');?>" id="oneweekview_radio"/>
@@ -41,8 +42,9 @@
<img id="loading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" />
</form>
<form id="choosecalendar">
- <input type="button" id="today_input" value="<?php echo $l->t("Today");?>"/>
- <input type="button" id="choosecalendar_input" value="<?php echo $l->t("Calendars");?>" onclick="Calendar.UI.Calendar.overview();" />
+ <!--<input type="button" id="today_input" value="<?php echo $l->t("Today");?>"/>-->
+ <a class="settings calendarsettings" title="<?php echo $l->t('Settings'); ?>"><img class="svg" src="<?php echo OCP\Util::imagePath('calendar', 'icon.svg'); ?>" alt="<?php echo $l->t('Settings'); ?>" /></a>
+ <a class="settings generalsettings" title="<?php echo $l->t('Settings'); ?>"><img class="svg" src="core/img/actions/settings.svg" alt="<?php echo $l->t('Settings'); ?>" /></a>
</form>
<form id="datecontrol">
<input type="button" value="&nbsp;&lt;&nbsp;" id="datecontrol_left"/>
@@ -50,12 +52,6 @@
<input type="button" value="&nbsp;&gt;&nbsp;" id="datecontrol_right"/>
</form>
</div>
- <div id="notification" style="display:none;"></div>
- <div id="calendar_holder">
- </div>
- <!-- Dialogs -->
+ <div id="fullcalendar"></div>
<div id="dialog_holder"></div>
- <div id="parsingfail_dialog" title="Parsing Fail">
- <?php echo $l->t("There was a fail, while parsing the file."); ?>
- </div>
- <!-- End of Dialogs -->
+ <div id="appsettings" class="popup topright hidden"></div> \ No newline at end of file
diff --git a/apps/calendar/templates/part.choosecalendar.php b/apps/calendar/templates/part.choosecalendar.php
index 8d621cc3630..ad2f9e753f2 100644
--- a/apps/calendar/templates/part.choosecalendar.php
+++ b/apps/calendar/templates/part.choosecalendar.php
@@ -1,51 +1,52 @@
-<div id="choosecalendar_dialog" title="<?php echo $l->t("Choose active calendars"); ?>">
-<p><b><?php echo $l->t('Your calendars'); ?>:</b></p>
-<table width="100%" style="border: 0;">
-<?php
-$option_calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser());
-for($i = 0; $i < count($option_calendars); $i++){
- echo "<tr>";
- $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields');
- $tmpl->assign('calendar', $option_calendars[$i]);
- if(OC_Calendar_Share::allUsersSharedwith($option_calendars[$i]['id'], OC_Calendar_Share::CALENDAR) == array()){
- $shared = false;
- }else{
- $shared = true;
+<form id="calendar">
+ <p><b><?php echo $l->t('Your calendars'); ?>:</b></p>
+ <table width="100%" style="border: 0;">
+ <?php
+ $option_calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser());
+ for($i = 0; $i < count($option_calendars); $i++){
+ echo "<tr>";
+ $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields');
+ $tmpl->assign('calendar', $option_calendars[$i]);
+ if(OC_Calendar_Share::allUsersSharedwith($option_calendars[$i]['id'], OC_Calendar_Share::CALENDAR) == array()){
+ $shared = false;
+ }else{
+ $shared = true;
+ }
+ $tmpl->assign('shared', $shared);
+ $tmpl->printpage();
+ echo "</tr>";
}
- $tmpl->assign('shared', $shared);
- $tmpl->printpage();
- echo "</tr>";
-}
-?>
-<tr>
- <td colspan="6">
- <a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="<?php echo $l->t('New Calendar') ?>"></a>
- </td>
-</tr>
-<tr>
- <td colspan="6">
- <p style="margin: 0 auto;width: 90%;"><input style="display:none;width: 90%;float: left;" type="text" id="caldav_url" onmouseover="$('#caldav_url').select();" title="<?php echo $l->t("CalDav Link"); ?>"><img id="caldav_url_close" style="height: 20px;vertical-align: middle;display: none;" src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg') ?>" alt="close" onclick="$('#caldav_url').hide();$('#caldav_url_close').hide();"/></p>
- </td>
-</tr>
-</table><br>
-<p><b><?php echo $l->t('Shared calendars'); ?>: </b></p>
-<table width="100%" style="border: 0;">
-<?php
-$share = OC_Calendar_Share::allSharedwithuser(OCP\USER::getUser(), OC_Calendar_Share::CALENDAR);
-$count = count($share);
-for($i = 0; $i < $count; $i++){
- $share[$i]['calendar'] = OC_Calendar_App::getCalendar($share[$i]['calendarid'], false, false);
- echo '<tr>';
- $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields.shared');
- $tmpl->assign('share', $share[$i]);
- $tmpl->printpage();
- echo '</tr>';
-}
-?>
-</table>
-<?php
-if($count == 0){
- echo '<p style="text-align:center;"><b>' . $l->t('No shared calendars') . '</b></p>';
-}
-?>
-</div> \ No newline at end of file
+ ?>
+ <tr>
+ <td colspan="6">
+ <a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="<?php echo $l->t('New Calendar') ?>"></a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="6">
+ <p style="margin: 0 auto;width: 90%;"><input style="display:none;width: 90%;float: left;" type="text" id="caldav_url" onmouseover="$('#caldav_url').select();" title="<?php echo $l->t("CalDav Link"); ?>"><img id="caldav_url_close" style="height: 20px;vertical-align: middle;display: none;" src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg') ?>" alt="close" onclick="$('#caldav_url').hide();$('#caldav_url_close').hide();"/></p>
+ </td>
+ </tr>
+ </table><br>
+ <p><b><?php echo $l->t('Shared calendars'); ?>: </b></p>
+ <table width="100%" style="border: 0;">
+ <?php
+ $share = OC_Calendar_Share::allSharedwithuser(OCP\USER::getUser(), OC_Calendar_Share::CALENDAR);
+ $count = count($share);
+ for($i = 0; $i < $count; $i++){
+ $share[$i]['calendar'] = OC_Calendar_App::getCalendar($share[$i]['calendarid'], false, false);
+ echo '<tr>';
+ $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields.shared');
+ $tmpl->assign('share', $share[$i]);
+ $tmpl->printpage();
+ echo '</tr>';
+ }
+ ?>
+ </table>
+ <?php
+ if($count == 0){
+ echo '<p style="text-align:center;"><b>' . $l->t('No shared calendars') . '</b></p>';
+ }
+ ?>
+ </fieldset>
+</form> \ No newline at end of file
diff --git a/apps/calendar/templates/settings.php b/apps/calendar/templates/settings.php
index 28c357621a8..56a6a42ee0e 100644
--- a/apps/calendar/templates/settings.php
+++ b/apps/calendar/templates/settings.php
@@ -7,11 +7,16 @@
* See the COPYING-README file.
*/
?>
-<form id="calendar">
- <fieldset class="personalblock">
- <legend><?php echo $l->t('Calendar'); ?></legend>
- <table class="nostyle">
- <tr><td><label for="timezone" class="bold"><?php echo $l->t('Timezone');?></label></td><td><select style="display: none;" id="timezone" name="timezone">
+<h2 id="title_general"><?php echo $l->t('General'); ?></h2>
+<div id="general">
+ <table class="nostyle">
+ <tr>
+ <td>
+ <label for="timezone" class="bold"><?php echo $l->t('Timezone');?></label>
+ &nbsp;&nbsp;
+ </td>
+ <td>
+ <select style="display: none;" id="timezone" name="timezone">
<?php
$continent = '';
foreach($_['timezones'] as $timezone):
@@ -27,29 +32,58 @@
$city=strtr($ex[1], '_', ' ');
$continent=$ex[0];
echo '<option value="'.$timezone.'"'.($_['timezone'] == $timezone?' selected="selected"':'').'>'.$city.'</option>';
+ var_dump($_['timezone']);
endforeach;?>
- </select><input type="checkbox" name="timezonedetection" id="timezonedetection"><label for="timezonedetection"><?php echo $l->t('Check always for changes of the timezone'); ?></label></td></tr>
-
- <tr><td><label for="timeformat" class="bold"><?php echo $l->t('Timeformat');?></label></td><td>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ &nbsp;&nbsp;
+ </td>
+ <td>
+ <input type="checkbox" name="timezonedetection" id="timezonedetection">
+ &nbsp;
+ <label for="timezonedetection"><?php echo $l->t('Update timezone automatically'); ?></label>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <label for="timeformat" class="bold"><?php echo $l->t('Time format');?></label>
+ &nbsp;&nbsp;
+ </td>
+ <td>
<select style="display: none; width: 60px;" id="timeformat" title="<?php echo "timeformat"; ?>" name="timeformat">
<option value="24" id="24h"><?php echo $l->t("24h"); ?></option>
<option value="ampm" id="ampm"><?php echo $l->t("12h"); ?></option>
</select>
- </td></tr>
-
- <tr><td><label for="firstday" class="bold"><?php echo $l->t('First day of the week');?></label></td><td>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <label for="firstday" class="bold"><?php echo $l->t('Start week on');?></label>
+ &nbsp;&nbsp;
+ </td>
+ <td>
<select style="display: none;" id="firstday" title="<?php echo "First day"; ?>" name="firstday">
<option value="mo" id="mo"><?php echo $l->t("Monday"); ?></option>
<option value="su" id="su"><?php echo $l->t("Sunday"); ?></option>
</select>
- </td></tr>
-
- <tr><td><label for="" class="bold"><?php echo $l->t('Cache');?></label></td><td>
- <input id="cleancalendarcache" type="button" class="button" value="<?php echo $l->t('Clear cache for repeating events');?>">
- </td></tr>
-
- </table>
-
+ </td>
+ </tr>
+ <tr class="advancedsettings">
+ <td>
+ <label for="" class="bold"><?php echo $l->t('Cache');?></label>
+ &nbsp;&nbsp;
+ </td>
+ <td>
+ <input id="cleancalendarcache" type="button" class="button" value="<?php echo $l->t('Clear cache for repeating events');?>">
+ </td>
+ </tr>
+ </table>
+</div>
+<h2 id="title_urls"><?php echo $l->t('URLs'); ?></h2>
+<div id="urls">
<?php echo $l->t('Calendar CalDAV syncing addresses'); ?> (<a href="http://owncloud.org/synchronisation/" target="_blank"><?php echo $l->t('more info'); ?></a>)
<dl>
<dt><?php echo $l->t('Primary address (Kontact et al)'); ?></dt>
@@ -63,5 +97,5 @@
<?php } ?>
</dd>
</dl>
- </fieldset>
-</form>
+ </div>
+</div> \ No newline at end of file
diff --git a/apps/contacts/ajax/contact/add.php b/apps/contacts/ajax/contact/add.php
index 6aaf5a9df35..043e947dc4b 100644
--- a/apps/contacts/ajax/contact/add.php
+++ b/apps/contacts/ajax/contact/add.php
@@ -49,4 +49,10 @@ if(!$id) {
exit();
}
-OCP\JSON::success(array('data' => array( 'id' => $id, 'aid' => $aid )));
+OCP\JSON::success(array(
+ 'data' => array(
+ 'id' => $id,
+ 'aid' => $aid,
+ 'lastmodified' => OC_Contacts_VCard::lastModified($vcard)->format('U')
+ )
+));
diff --git a/apps/contacts/ajax/contact/addproperty.php b/apps/contacts/ajax/contact/addproperty.php
index 58b857547fb..df064367ef1 100644
--- a/apps/contacts/ajax/contact/addproperty.php
+++ b/apps/contacts/ajax/contact/addproperty.php
@@ -25,7 +25,7 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
-require_once 'loghandler.php';
+require_once __DIR__.'/../loghandler.php';
$id = isset($_POST['id'])?$_POST['id']:null;
$name = isset($_POST['name'])?$_POST['name']:null;
@@ -48,9 +48,9 @@ if(!$vcard) {
if(!is_array($value)) {
$value = trim($value);
- if(!$value
+ if(!$value
&& in_array(
- $name,
+ $name,
array('TEL', 'EMAIL', 'ORG', 'BDAY', 'URL', 'NICKNAME', 'NOTE'))
) {
bailOut($l10n->t('Cannot add empty property.'));
@@ -78,9 +78,9 @@ foreach($current as $item) {
}
if(is_array($value)) {
- // NOTE: Important, otherwise the compound value will
+ // NOTE: Important, otherwise the compound value will
// be set in the order the fields appear in the form!
- ksort($value);
+ ksort($value);
$value = array_map('strip_tags', $value);
} else {
$value = strip_tags($value);
@@ -123,10 +123,10 @@ switch($name) {
$line = count($vcard->children) - 1;
-// Apparently Sabre_VObject_Parameter doesn't do well with
+// Apparently Sabre_VObject_Parameter doesn't do well with
// multiple values or I don't know how to do it. Tanghus.
foreach ($parameters as $key=>$element) {
- if(is_array($element) && strtoupper($key) == 'TYPE') {
+ if(is_array($element) && strtoupper($key) == 'TYPE') {
// NOTE: Maybe this doesn't only apply for TYPE?
// And it probably shouldn't be done here anyways :-/
foreach($element as $e) {
@@ -144,4 +144,9 @@ if(!OC_Contacts_VCard::edit($id, $vcard)) {
bailOut($l10n->t('Error adding contact property: '.$name));
}
-OCP\JSON::success(array('data' => array( 'checksum' => $checksum )));
+OCP\JSON::success(array(
+ 'data' => array(
+ 'checksum' => $checksum,
+ 'lastmodified' => OC_Contacts_VCard::lastModified($vcard)->format('U'))
+ )
+);
diff --git a/apps/contacts/ajax/contact/delete.php b/apps/contacts/ajax/contact/delete.php
index 9777046fc82..def98b36705 100644
--- a/apps/contacts/ajax/contact/delete.php
+++ b/apps/contacts/ajax/contact/delete.php
@@ -23,7 +23,8 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
-require_once 'loghandler.php';
+
+require_once __DIR__.'/../loghandler.php';
$id = isset($_POST['id'])?$_POST['id']:null;
if(!$id) {
diff --git a/apps/contacts/ajax/contact/deleteproperty.php b/apps/contacts/ajax/contact/deleteproperty.php
index 205df8bc184..d7545ff1fbf 100644
--- a/apps/contacts/ajax/contact/deleteproperty.php
+++ b/apps/contacts/ajax/contact/deleteproperty.php
@@ -24,7 +24,8 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
-require_once 'loghandler.php';
+
+require_once __DIR__.'/../loghandler.php';
$id = $_POST['id'];
$checksum = $_POST['checksum'];
@@ -43,4 +44,9 @@ if(!OC_Contacts_VCard::edit($id, $vcard)) {
bailOut($l10n->t('Error deleting contact property.'));
}
-OCP\JSON::success(array('data' => array( 'id' => $id )));
+OCP\JSON::success(array(
+ 'data' => array(
+ 'id' => $id,
+ 'lastmodified' => OC_Contacts_VCard::lastModified($vcard)->format('U'),
+ )
+));
diff --git a/apps/contacts/ajax/contact/details.php b/apps/contacts/ajax/contact/details.php
index 0e07f9ec3d8..c22f18937d7 100644
--- a/apps/contacts/ajax/contact/details.php
+++ b/apps/contacts/ajax/contact/details.php
@@ -53,5 +53,6 @@ if(isset($details['PHOTO'])) {
$details['id'] = $id;
$details['displayname'] = $card['fullname'];
$details['addressbookid'] = $card['addressbookid'];
+$details['lastmodified'] = OC_Contacts_App::lastModified($vcard)->format('U');
OC_Contacts_App::setLastModifiedHeader($vcard);
OCP\JSON::success(array('data' => $details));
diff --git a/apps/contacts/ajax/contact/saveproperty.php b/apps/contacts/ajax/contact/saveproperty.php
index ef4d1b26c5b..799038b6f1d 100644
--- a/apps/contacts/ajax/contact/saveproperty.php
+++ b/apps/contacts/ajax/contact/saveproperty.php
@@ -19,7 +19,9 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
-require_once 'loghandler.php';
+
+require_once __DIR__.'/../loghandler.php';
+
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
@@ -146,5 +148,6 @@ if(!OC_Contacts_VCard::edit($id, $vcard)) {
OCP\JSON::success(array('data' => array(
'line' => $line,
'checksum' => $checksum,
- 'oldchecksum' => $_POST['checksum']))
-);
+ 'oldchecksum' => $_POST['checksum']
+ 'lastmodified' => OC_Contacts_VCard::lastModified($vcard)->format('U')
+));
diff --git a/apps/contacts/ajax/savecrop.php b/apps/contacts/ajax/savecrop.php
index 1df5299c7a6..2483d0f7128 100644
--- a/apps/contacts/ajax/savecrop.php
+++ b/apps/contacts/ajax/savecrop.php
@@ -62,17 +62,17 @@ if($data) {
if($image->crop($x1, $y1, $w, $h)) {
if(($image->width() <= 200 && $image->height() <= 200)
|| $image->resize(200)) {
- $card = OC_Contacts_App::getContactVCard($id);
- if(!$card) {
+ $vcard = OC_Contacts_App::getContactVCard($id);
+ if(!$vcard) {
OC_Cache::remove($tmpkey);
bailOut(OC_Contacts_App::$l10n
->t('Error getting contact object.'));
}
- if($card->__isset('PHOTO')) {
+ if($vcard->__isset('PHOTO')) {
OCP\Util::writeLog('contacts',
'savecrop.php: PHOTO property exists.',
OCP\Util::DEBUG);
- $property = $card->__get('PHOTO');
+ $property = $vcard->__get('PHOTO');
if(!$property) {
OC_Cache::remove($tmpkey);
bailOut(OC_Contacts_App::$l10n
@@ -83,27 +83,28 @@ if($data) {
= new Sabre_VObject_Parameter('ENCODING', 'b');
$property->parameters[]
= new Sabre_VObject_Parameter('TYPE', $image->mimeType());
- $card->__set('PHOTO', $property);
+ $vcard->__set('PHOTO', $property);
} else {
OCP\Util::writeLog('contacts',
'savecrop.php: files: Adding PHOTO property.',
OCP\Util::DEBUG);
- $card->addProperty('PHOTO',
+ $vcard->addProperty('PHOTO',
$image->__toString(), array('ENCODING' => 'b',
'TYPE' => $image->mimeType()));
}
$now = new DateTime;
- $card->setString('REV', $now->format(DateTime::W3C));
- if(!OC_Contacts_VCard::edit($id, $card)) {
+ $vcard->setString('REV', $now->format(DateTime::W3C));
+ if(!OC_Contacts_VCard::edit($id, $vcard)) {
bailOut(OC_Contacts_App::$l10n->t('Error saving contact.'));
}
- $tmpl = new OCP\Template("contacts", "part.contactphoto");
- $tmpl->assign('id', $id);
- $tmpl->assign('refresh', true);
- $tmpl->assign('width', $image->width());
- $tmpl->assign('height', $image->height());
- $page = $tmpl->fetchPage();
- OCP\JSON::success(array('data' => array('page'=>$page)));
+ OCP\JSON::success(array(
+ 'data' => array(
+ 'id' => $id,
+ 'width' => $image->width(),
+ 'height' => $image->height(),
+ 'lastmodified' => OC_Contacts_App::lastModified($vcard)->format('U')
+ )
+ ));
} else {
bailOut(OC_Contacts_App::$l10n->t('Error resizing image'));
}
diff --git a/apps/contacts/css/contacts.css b/apps/contacts/css/contacts.css
index df9bba2dd3e..ad8762167b5 100644
--- a/apps/contacts/css/contacts.css
+++ b/apps/contacts/css/contacts.css
@@ -141,4 +141,7 @@ input[type="checkbox"] { width: 20px; height: 20px; vertical-align: bottom; }
.addressbooks-settings .actions * { float: left; }
.addressbooks-settings .actions input.name { width: 5em; }
.addressbooks-settings .actions input.name { width: 7em; }
+.addressbooks-settings a.action { opacity: 0.2; }
+.addressbooks-settings a.action:hover { opacity: 1; }
+.addressbooks-settings td.active, .addressbooks-settings td.action { width: 20px; }
diff --git a/apps/contacts/js/contacts.js b/apps/contacts/js/contacts.js
index 9aec02557fc..67bfa9847ee 100644
--- a/apps/contacts/js/contacts.js
+++ b/apps/contacts/js/contacts.js
@@ -835,7 +835,7 @@ OC.Contacts={
OC.Contacts.propertyContainerFor(obj).data('checksum', '');
if(proptype == 'PHOTO') {
OC.Contacts.Contacts.refreshThumbnail(OC.Contacts.Card.id);
- OC.Contacts.Card.loadPhoto(true);
+ OC.Contacts.Card.loadPhoto();
} else if(proptype == 'NOTE') {
$('#note').find('textarea').val('');
OC.Contacts.propertyContainerFor(obj).hide();
@@ -1218,9 +1218,9 @@ OC.Contacts={
}
});
},
- loadPhoto:function(refresh){
+ loadPhoto:function(){
var self = this;
- var refreshstr = (refresh?'&refresh=1'+Math.random():'')
+ var refreshstr = ''; //'&refresh='+Math.random();
$('#phototools li a').tipsy('hide');
var wrapper = $('#contacts_details_photo_wrapper');
wrapper.addClass('loading').addClass('wait');
@@ -1278,7 +1278,7 @@ OC.Contacts={
var response=jQuery.parseJSON(target.contents().text());
if(response != undefined && response.status == 'success'){
// load cropped photo.
- self.loadPhoto(true);
+ self.loadPhoto();
OC.Contacts.Card.data.PHOTO = true;
}else{
OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
diff --git a/apps/contacts/js/settings.js b/apps/contacts/js/settings.js
index ee8d889d722..69cf473e06a 100644
--- a/apps/contacts/js/settings.js
+++ b/apps/contacts/js/settings.js
@@ -90,8 +90,7 @@ OC.Contacts.Settings = OC.Contacts.Settings || {
+ '<td class="action"><a class="svg action globe" title="'+t('contacts', 'Show CardDav link')+'"></a></td>'
+ '<td class="action"><a class="svg action cloud" title="'+t('contacts', 'Show read-only VCF link')+'"></a></td>'
+ '<td class="action"><a class="svg action download" title="'+t('contacts', 'Download')+'" '
- + 'href="'+totalurl+'/'+encodeURIComponent(oc_current_user)+'/'
- + encodeURIComponent(jsondata.data.addressbook.uri)+'?export"></a></td>'
+ + 'href="'+OC.linkTo('contacts', 'export.php')+'?bookid='+jsondata.data.addressbook.id+'"></a></td>'
+ '<td class="action"><a class="svg action edit" title="'+t('contacts', 'Edit')+'"></a></td>'
+ '<td class="action"><a class="svg action delete" title="'+t('contacts', 'Delete')+'"></a></td>'
+ '</tr>');
@@ -107,17 +106,27 @@ OC.Contacts.Settings = OC.Contacts.Settings || {
}
});
},
+ showLink:function(id, row, link) {
+ console.log('row:', row.length);
+ row.next('tr.link').remove();
+ var linkrow = $('<tr class="link"><td colspan="5"><input style="width: 95%;" type="text" value="'+link+'" /></td>'
+ + '<td colspan="3"><button>'+t('contacts', 'Cancel')+'</button></td></tr>').insertAfter(row);
+ linkrow.find('input').focus().select();
+ linkrow.find('button').click(function() {
+ $(this).parents('tr').first().remove();
+ });
+ },
showCardDAV:function(id) {
console.log('showCardDAV: ', id);
var row = this.adrsettings.find('tr[data-id="'+id+'"]');
- this.adractions.find('.link').val(totalurl+'/'+encodeURIComponent(oc_current_user)+'/');
- this.showActions(['link','cancel']);
+ this.showLink(id, row, totalurl+'/'+encodeURIComponent(oc_current_user));
},
showVCF:function(id) {
console.log('showVCF: ', id);
var row = this.adrsettings.find('tr[data-id="'+id+'"]');
- this.adractions.find('.link').val(totalurl+'/'+encodeURIComponent(oc_current_user)+'/'+encodeURIComponent(row.data('uri'))+'?export');
- this.showActions(['link','cancel']);
+ var link = totalurl+'/'+encodeURIComponent(oc_current_user)+'/'+encodeURIComponent(row.data('uri'))+'?export';
+ console.log(link);
+ this.showLink(id, row, link);
}
}
};
diff --git a/apps/contacts/l10n/de.php b/apps/contacts/l10n/de.php
index 08e28f3fd0d..5fa5bb4f9dd 100644
--- a/apps/contacts/l10n/de.php
+++ b/apps/contacts/l10n/de.php
@@ -108,6 +108,8 @@
"Next contact in list" => "Nächster Kontakt aus der Liste",
"Previous contact in list" => "Vorheriger Kontakt aus der Liste",
"Expand/collapse current addressbook" => "Ausklappen/Einklappen des Adressbuches",
+"Next addressbook" => "Nächstes Adressbuch",
+"Previous addressbook" => "Vorheriges Adressbuch",
"Actions" => "Aktionen",
"Refresh contacts list" => "Kontaktliste neu laden",
"Add new contact" => "Neuen Kontakt hinzufügen",
diff --git a/apps/contacts/l10n/fr.php b/apps/contacts/l10n/fr.php
index 88521f84e88..9b4822bd976 100644
--- a/apps/contacts/l10n/fr.php
+++ b/apps/contacts/l10n/fr.php
@@ -63,6 +63,8 @@
"Result: " => "Résultat :",
" imported, " => "importé,",
" failed." => "échoué.",
+"Displayname cannot be empty." => "Le nom d'affichage ne peut pas être vide.",
+"Addressbook not found: " => "Carnet d'adresse introuvable : ",
"This is not your addressbook." => "Ce n'est pas votre carnet d'adresses.",
"Contact could not be found." => "Ce contact n'a pu être trouvé.",
"Address" => "Adresse",
@@ -97,6 +99,7 @@
"Contact" => "Contact",
"Add Contact" => "Ajouter un Contact",
"Import" => "Importer",
+"Settings" => "Paramètres",
"Addressbooks" => "Carnets d'adresses",
"Close" => "Fermer",
"Keyboard shortcuts" => "Raccourcis clavier",
@@ -104,6 +107,8 @@
"Next contact in list" => "Contact suivant dans la liste",
"Previous contact in list" => "Contact précédent dans la liste",
"Expand/collapse current addressbook" => "Dé/Replier le carnet d'adresses courant",
+"Next addressbook" => "Carnet d'adresses suivant",
+"Previous addressbook" => "Carnet d'adresses précédent",
"Actions" => "Actions",
"Refresh contacts list" => "Actualiser la liste des contacts",
"Add new contact" => "Ajouter un nouveau contact",
@@ -190,9 +195,13 @@
"more info" => "Plus d'infos",
"Primary address (Kontact et al)" => "Adresse principale",
"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Afficher le lien CardDav",
"Download" => "Télécharger",
"Edit" => "Modifier",
"New Address Book" => "Nouveau Carnet d'adresses",
+"Name" => "Nom",
+"Description" => "Description",
"Save" => "Sauvegarder",
-"Cancel" => "Annuler"
+"Cancel" => "Annuler",
+"More..." => "Plus…"
);
diff --git a/apps/contacts/lib/app.php b/apps/contacts/lib/app.php
index e8d9abac417..f6ce213c49b 100644
--- a/apps/contacts/lib/app.php
+++ b/apps/contacts/lib/app.php
@@ -243,6 +243,18 @@ class OC_Contacts_App {
self::getVCategories()->loadFromVObject($contact, true);
}
+ /**
+ * @brief Get the last modification time.
+ * @param $vcard OC_VObject
+ * $return DateTime | null
+ */
+ public static function lastModified($vcard) {
+ $rev = $vcard->getAsString('REV');
+ if ($rev) {
+ return DateTime::createFromFormat(DateTime::W3C, $rev);
+ }
+ }
+
public static function setLastModifiedHeader($contact) {
$rev = $contact->getAsString('REV');
if ($rev) {
diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php
index a93ca399d3a..4cc18027acf 100644
--- a/apps/contacts/lib/vcard.php
+++ b/apps/contacts/lib/vcard.php
@@ -282,12 +282,13 @@ class OC_Contacts_VCard{
/**
* @brief Adds a card
- * @param integer $aid Addressbook id
- * @param OC_VObject $card vCard file
- * @param string $uri the uri of the card, default based on the UID
+ * @param $aid integer Addressbook id
+ * @param $card OC_VObject vCard file
+ * @param $uri string the uri of the card, default based on the UID
+ * @param $isChecked boolean If the vCard should be checked for validity and version.
* @return insertid on success or false.
*/
- public static function add($aid, OC_VObject $card, $uri=null, $isnew=false){
+ public static function add($aid, OC_VObject $card, $uri=null, $isChecked=false){
if(is_null($card)) {
OCP\Util::writeLog('contacts', 'OC_Contacts_VCard::add. No vCard supplied', OCP\Util::ERROR);
return null;
@@ -295,22 +296,13 @@ class OC_Contacts_VCard{
$addressbook = OC_Contacts_Addressbook::find($aid);
if ($addressbook['userid'] != OCP\User::getUser()) {
$sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $aid);
- if (!$sharedAddressbook) {
+ if (!$sharedAddressbook || !($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_CREATE)) {
return false;
}
- } else {
- $sharedAddressbook = false;
}
- if(!$isnew) {
- if ($sharedAddressbook && !($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
- return false;
- }
+ if(!$isChecked) {
OC_Contacts_App::loadCategoriesFromVCard($card);
self::updateValuesFromAdd($aid, $card);
- } else {
- if ($sharedAddressbook && !($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_CREATE)) {
- return false;
- }
}
$card->setString('VERSION', '3.0');
// Add product ID is missing.
diff --git a/apps/contacts/photo.php b/apps/contacts/photo.php
index efdf157cd95..f5c8e6fe4bd 100644
--- a/apps/contacts/photo.php
+++ b/apps/contacts/photo.php
@@ -20,14 +20,15 @@ function getStandardImage() {
}
$id = isset($_GET['id']) ? $_GET['id'] : null;
-$caching = isset($_GET['refresh']) ? 0 : null;
+$etag = null;
+$caching = null;
if(is_null($id)) {
getStandardImage();
}
if(!extension_loaded('gd') || !function_exists('gd_info')) {
- OCP\Util::writeLog('contacts',
+ OCP\Util::writeLog('contacts',
'photo.php. GD module not installed', OCP\Util::DEBUG);
getStandardImage();
}
@@ -39,25 +40,34 @@ if (!$image) {
}
// invalid vcard
if (is_null($contact)) {
- OCP\Util::writeLog('contacts',
- 'photo.php. The VCard for ID ' . $id . ' is not RFC compatible',
+ OCP\Util::writeLog('contacts',
+ 'photo.php. The VCard for ID ' . $id . ' is not RFC compatible',
OCP\Util::ERROR);
} else {
- OCP\Response::enableCaching($caching);
- OC_Contacts_App::setLastModifiedHeader($contact);
-
// Photo :-)
if ($image->loadFromBase64($contact->getAsString('PHOTO'))) {
// OK
- OCP\Response::setETagHeader(md5($contact->getAsString('PHOTO')));
+ $etag = md5($contact->getAsString('PHOTO'));
}
else
// Logo :-/
if ($image->loadFromBase64($contact->getAsString('LOGO'))) {
// OK
- OCP\Response::setETagHeader(md5($contact->getAsString('LOGO')));
+ $etag = md5($contact->getAsString('LOGO'));
}
if ($image->valid()) {
+ $modified = OC_Contacts_App::lastModified($contact);
+ // Force refresh if modified within the last minute.
+ if(!is_null($modified)) {
+ $caching = (time() - $modified->format('U') > 60) ? null : 0;
+ }
+ OCP\Response::enableCaching($caching);
+ if(!is_null($modified)) {
+ OCP\Response::setLastModifiedHeader($modified);
+ }
+ if($etag) {
+ OCP\Response::setETagHeader($etag);
+ }
$max_size = 200;
if ($image->width() > $max_size || $image->height() > $max_size) {
$image->resize($max_size);
diff --git a/apps/contacts/templates/settings.php b/apps/contacts/templates/settings.php
index c9713451c8a..e3536c7b461 100644
--- a/apps/contacts/templates/settings.php
+++ b/apps/contacts/templates/settings.php
@@ -27,8 +27,7 @@
</td>
<td class="action">
<a class="svg action download" title="<?php echo $l->t('Download'); ?>"
- href="<?php echo OCP\Util::linkToRemote('carddav').'addressbooks/'.OCP\USER::getUser().'/'
- .rawurlencode($addressbook['uri']) ?>?export"></a>
+ href="<?php echo OCP\Util::linkToAbsolute('contacts', 'export.php'); ?>?bookid=<?php echo $addressbook['id'] ?>"></a>
</td>
<td class="action">
<a class="svg action edit" title="<?php echo $l->t("Edit"); ?>"></a>
@@ -44,7 +43,6 @@
<button class="new"><?php echo $l->t('New Address Book') ?></button>
<input class="name hidden" type="text" autofocus="autofocus" placeholder="<?php echo $l->t('Name'); ?>" />
<input class="description hidden" type="text" placeholder="<?php echo $l->t('Description'); ?>" />
- <input class="link hidden" style="width: 80%" type="text" autofocus="autofocus" />
<button class="save hidden"><?php echo $l->t('Save') ?></button>
<button class="cancel hidden"><?php echo $l->t('Cancel') ?></button>
</div>
diff --git a/apps/contacts/thumbnail.php b/apps/contacts/thumbnail.php
index 6deb5ca379e..1e3714ae6c6 100644
--- a/apps/contacts/thumbnail.php
+++ b/apps/contacts/thumbnail.php
@@ -26,27 +26,26 @@ OCP\App::checkAppEnabled('contacts');
session_write_close();
function getStandardImage() {
- //OCP\Response::setExpiresHeader('P10D');
OCP\Response::enableCaching();
OCP\Response::redirect(OCP\Util::imagePath('contacts', 'person.png'));
}
if(!extension_loaded('gd') || !function_exists('gd_info')) {
- OCP\Util::writeLog('contacts',
+ OCP\Util::writeLog('contacts',
'thumbnail.php. GD module not installed', OCP\Util::DEBUG);
getStandardImage();
exit();
}
$id = $_GET['id'];
-$caching = isset($_GET['refresh']) ? 0 : null;
+$caching = null;
$contact = OC_Contacts_App::getContactVCard($id);
// invalid vcard
if(is_null($contact)) {
- OCP\Util::writeLog('contacts',
- 'thumbnail.php. The VCard for ID ' . $id . ' is not RFC compatible',
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. The VCard for ID ' . $id . ' is not RFC compatible',
OCP\Util::ERROR);
getStandardImage();
exit();
@@ -60,30 +59,39 @@ $thumbnail_size = 23;
$image = new OC_Image();
$photo = $contact->getAsString('PHOTO');
if($photo) {
- OCP\Response::setETagHeader(md5($photo));
if($image->loadFromBase64($photo)) {
if($image->centerCrop()) {
if($image->resize($thumbnail_size)) {
+ $modified = OC_Contacts_App::lastModified($contact);
+ // Force refresh if modified within the last minute.
+ if(!is_null($modified)) {
+ $caching = (time() - $modified->format('U') > 60) ? null : 0;
+ }
+ OCP\Response::enableCaching($caching);
+ if(!is_null($modified)) {
+ OCP\Response::setLastModifiedHeader($modified);
+ }
+ OCP\Response::setETagHeader(md5($photo));
if($image->show()) {
exit();
} else {
- OCP\Util::writeLog('contacts',
- 'thumbnail.php. Couldn\'t display thumbnail for ID ' . $id,
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. Couldn\'t display thumbnail for ID ' . $id,
OCP\Util::ERROR);
}
} else {
- OCP\Util::writeLog('contacts',
- 'thumbnail.php. Couldn\'t resize thumbnail for ID ' . $id,
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. Couldn\'t resize thumbnail for ID ' . $id,
OCP\Util::ERROR);
}
}else{
- OCP\Util::writeLog('contacts',
- 'thumbnail.php. Couldn\'t crop thumbnail for ID ' . $id,
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. Couldn\'t crop thumbnail for ID ' . $id,
OCP\Util::ERROR);
}
} else {
- OCP\Util::writeLog('contacts',
- 'thumbnail.php. Couldn\'t load image string for ID ' . $id,
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. Couldn\'t load image string for ID ' . $id,
OCP\Util::ERROR);
}
}
diff --git a/apps/files/ajax/mimeicon.php b/apps/files/ajax/mimeicon.php
index 80d50f84528..dbb8b60112a 100644
--- a/apps/files/ajax/mimeicon.php
+++ b/apps/files/ajax/mimeicon.php
@@ -1,9 +1,3 @@
<?php
-// no need for apps
-$RUNTIME_NOAPPS=false;
-
-// Init owncloud
-
-
print OC_Helper::mimetypeIcon($_GET['mime']);
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index 1f4b076ee47..9569735d54c 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -9,12 +9,17 @@
"Files" => "Dateien",
"Unshare" => "Nicht mehr teilen",
"Delete" => "Löschen",
+"already exists" => "ist bereits vorhanden",
+"replace" => "Ersetzen",
+"cancel" => "Abbrechen",
+"replaced" => "Ersetzt",
+"with" => "mit",
"undo" => "rückgängig machen",
"deleted" => "gelöscht",
"generating ZIP-file, it may take some time." => "Erstelle ZIP-Datei. Dies kann eine Weile dauern.",
-"Unable to upload your file as it is a directory or has 0 bytes" => "Datei kann nicht hochgeladen werden da sie ein Verzeichniss ist oder 0 bytes hat.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Datei kann nicht hochgeladen werden da sie ein Verzeichnis ist oder 0 Bytes hat.",
"Upload Error" => "Fehler beim Hochladen",
-"Pending" => "Anstehend",
+"Pending" => "Ausstehend",
"Upload cancelled." => "Hochladen abgebrochen.",
"Invalid name, '/' is not allowed." => "Ungültiger Name, \"/\" ist nicht erlaubt.",
"Size" => "Größe",
@@ -36,7 +41,7 @@
"From url" => "Von der URL",
"Upload" => "Hochladen",
"Cancel upload" => "Upload abbrechen",
-"Nothing in here. Upload something!" => "Alles leer. Lad’ was hoch!",
+"Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!",
"Name" => "Name",
"Share" => "Teilen",
"Download" => "Herunterladen",
diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php
index 77173d28364..aa6559022f7 100644
--- a/apps/files/l10n/fa.php
+++ b/apps/files/l10n/fa.php
@@ -8,6 +8,8 @@
"Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموفق بود",
"Files" => "فایل ها",
"Delete" => "پاک کردن",
+"already exists" => "وجود دارد",
+"deleted" => "حذف شده",
"generating ZIP-file, it may take some time." => "در حال ساخت فایل فشرده ممکن است زمان زیادی به طول بیانجامد",
"Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا فایل یک پوشه است یا 0بایت دارد",
"Upload Error" => "خطا در بار گذاری",
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index e037c7a2f4b..70af377b170 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -9,6 +9,11 @@
"Files" => "Fichiers",
"Unshare" => "Ne plus partager",
"Delete" => "Supprimer",
+"already exists" => "existe déjà",
+"replace" => "remplacer",
+"cancel" => "annuler",
+"replaced" => "remplacé",
+"with" => "avec",
"undo" => "annuler",
"deleted" => "supprimé",
"generating ZIP-file, it may take some time." => "Générer un fichier ZIP, cela peut prendre du temps",
diff --git a/apps/files_sharing/get.php b/apps/files_sharing/get.php
index 70a5162d382..1d219719b2d 100644
--- a/apps/files_sharing/get.php
+++ b/apps/files_sharing/get.php
@@ -1,6 +1,4 @@
<?php
-$RUNTIME_NOSETUPFS=true; //don't setup the fs yet
-
// only need authentication apps
$RUNTIME_APPTYPES=array('authentication');
OC_App::loadApps($RUNTIME_APPTYPES);
diff --git a/apps/files_sharing/sharedstorage.php b/apps/files_sharing/sharedstorage.php
index ca811a16fef..fc2e6e32c7c 100644
--- a/apps/files_sharing/sharedstorage.php
+++ b/apps/files_sharing/sharedstorage.php
@@ -343,6 +343,25 @@ class OC_Filestorage_Shared extends OC_Filestorage_Common {
public function fopen($path, $mode) {
if ($source = $this->getSourcePath($path)) {
+ switch ($mode) {
+ case 'r+':
+ case 'rb+':
+ case 'w+':
+ case 'wb+':
+ case 'x+':
+ case 'xb+':
+ case 'a+':
+ case 'ab+':
+ case 'w':
+ case 'wb':
+ case 'x':
+ case 'xb':
+ case 'a':
+ case 'ab':
+ if (!$this->isUpdatable($path)) {
+ return false;
+ }
+ }
$info = array(
'target' => $this->sharedFolder.$path,
'source' => $source,
diff --git a/apps/media/ajax/autoupdate.php b/apps/media/ajax/autoupdate.php
index c2dbf27a004..a5801f1a0e0 100644
--- a/apps/media/ajax/autoupdate.php
+++ b/apps/media/ajax/autoupdate.php
@@ -23,11 +23,6 @@
header('Content-type: text/html; charset=UTF-8') ;
-//no apps or filesystem
-$RUNTIME_NOAPPS=true;
-$RUNTIME_NOSETUPFS=true;
-
-
OCP\JSON::checkAppEnabled('media');
$autoUpdate=(isset($_GET['autoupdate']) and $_GET['autoupdate']=='true');
diff --git a/apps/remoteStorage/ajax/revokeToken.php b/apps/remoteStorage/ajax/revokeToken.php
index 322d9ed7279..e6a68189945 100644
--- a/apps/remoteStorage/ajax/revokeToken.php
+++ b/apps/remoteStorage/ajax/revokeToken.php
@@ -25,10 +25,6 @@
*
*/
-
-// Do not load FS ...
-$RUNTIME_NOSETUPFS = true;
-
OCP\App::checkAppEnabled('remoteStorage');
require_once('remoteStorage/lib_remoteStorage.php');
diff --git a/apps/remoteStorage/auth.php b/apps/remoteStorage/auth.php
index 99e2272d3ab..91ca43ea076 100644
--- a/apps/remoteStorage/auth.php
+++ b/apps/remoteStorage/auth.php
@@ -27,9 +27,6 @@
header("X-Frame-Options: Sameorigin");
-// Do not load FS ...
-$RUNTIME_NOSETUPFS = true;
-
OCP\App::checkAppEnabled('remoteStorage');
require_once('Sabre/autoload.php');
require_once('lib_remoteStorage.php');
@@ -60,64 +57,23 @@ if($userId && $appUrl && $categories) {
header('Location: '.$_GET['redirect_uri'].'#access_token='.$existingToken.'&token_type=bearer');
} else {
//params ok, logged in ok, but need to click Allow still:
-?>
-<!DOCTYPE html>
-<html>
- <head>
- <title>ownCloud</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" href="../../../core/img/favicon.png" /><link rel="apple-touch-icon-precomposed" href="../../../core/img/favicon-touch.png" />
- <link rel="stylesheet" href="../../../core/css/styles.css" type="text/css" media="screen" />
- <link rel="stylesheet" href="../../../core/css/auth.css" type="text/css" media="screen" />
- </head>
- <body id="body-login">
- <div id="login">
- <header>
- <div id="header">
- <img src="../../../core/img/logo.png" alt="ownCloud" />
- </div>
- </header>
- <section id="main">
- <div id="oauth">
- <h2><img src="../../../core/img/remoteStorage-big.png" alt="remoteStorage" /></h2>
- <p><strong><?php $appUrlParts = explode('/', $_GET['redirect_uri']); echo htmlentities($appUrlParts[2]); ?></strong>
- requests read &amp; write access to your
- <?php
- $categories = explode(',', htmlentities($_GET['scope']));
- if(!count($categories)) {
- echo htmlentities($_GET['scope']);
- } else {
- echo '<em>'.$categories[0].'</em>';
- if(count($categories)==2) {
- echo ' and <em>'.$categories[1].'</em>';
- } else if(count($categories)>2) {
- for($i=1; $i<count($categories)-1; $i++) {
- echo ', <em>'.$categories[$i].'</em>';
- }
- echo ', and <em>'.$categories[$i].'</em>';
- }
- }
- ?>.
- </p>
- <form accept-charset="UTF-8" method="post">
- <input id="allow-auth" name="allow" type="submit" value="Allow" />
- <input id="deny-auth" name="deny" type="submit" value="Deny" />
- </form>
- </div>
- </section>
- </div>
- <footer><p class="info"><a href="http://owncloud.org/">ownCloud</a> &ndash; web services under your control</p></footer>
- </body>
-</html>
-<?php
- }//end 'need to click Allow still'
+ $appUrlParts = explode('/', $_GET['redirect_uri']);
+ $host = $appUrlParts[2];
+ $categories = explode(',', $_GET['scope']);
+ OCP\Util::addStyle('', 'auth');
+ OCP\Template::printGuestPage('remoteStorage', 'auth', array(
+ 'host' => $host,
+ 'categories' => $categories,
+ ));
+ }//end 'need to click Allow still'
} else {//login not ok
if($currUser) {
die('You are logged in as '.$currUser.' instead of '.htmlentities($userId));
} else {
- header('Location: /?redirect_url='.urlencode('/apps/remoteStorage/auth.php'.$_SERVER['PATH_INFO'].'?'.$_SERVER['QUERY_STRING']));
+ // this will display the login page for us
+ OCP\Util::checkLoggedIn();
}
}
} else {//params not ok
- die('please use e.g. /?app=remoteStorage&getfile=auth.php&userid=admin&redirect_uri=http://host/path&scope=...');
+ die('please use e.g. '.OCP\Util::linkTo('remoteStorage', 'auth.php').'?userid=admin&redirect_uri=http://host/path&scope=...');
}
diff --git a/apps/remoteStorage/templates/auth.php b/apps/remoteStorage/templates/auth.php
new file mode 100644
index 00000000000..6a7054eabb0
--- /dev/null
+++ b/apps/remoteStorage/templates/auth.php
@@ -0,0 +1,28 @@
+ <section id="main">
+ <div id="oauth">
+ <h2><img src="<?php echo image_path('', 'remoteStorage-big.png'); ?>" alt="remoteStorage" /></h2>
+ <p><strong><?php echo $_['host'] ?></strong>
+ requests read &amp; write access to your
+ <?php
+ $categories = $_['categories'];
+ if(!count($categories)) {
+ echo $categories[0];
+ } else {
+ echo '<em>'.$categories[0].'</em>';
+ if(count($categories)==2) {
+ echo ' and <em>'.$categories[1].'</em>';
+ } else if(count($categories)>2) {
+ for($i=1; $i<count($categories)-1; $i++) {
+ echo ', <em>'.$categories[$i].'</em>';
+ }
+ echo ', and <em>'.$categories[$i].'</em>';
+ }
+ }
+ ?>.
+ </p>
+ <form accept-charset="UTF-8" method="post">
+ <input id="allow-auth" name="allow" type="submit" value="Allow" />
+ <input id="deny-auth" name="deny" type="submit" value="Deny" />
+ </form>
+ </div>
+ </section>
diff --git a/core/l10n/de.php b/core/l10n/de.php
index 121d17f6a8b..b0959a5412b 100644
--- a/core/l10n/de.php
+++ b/core/l10n/de.php
@@ -39,8 +39,8 @@
"Admin" => "Admin",
"Help" => "Hilfe",
"Access forbidden" => "Zugang verboten",
-"Cloud not found" => "Cloud nicht verfügbar",
-"Edit categories" => "Kategorien ändern",
+"Cloud not found" => "Cloud nicht gefunden",
+"Edit categories" => "Kategorien editieren",
"Add" => "Hinzufügen",
"Create an <strong>admin account</strong>" => "<strong>Administrator-Konto</strong> anlegen",
"Password" => "Passwort",
@@ -53,7 +53,7 @@
"Database name" => "Datenbank-Name",
"Database host" => "Datenbank-Host",
"Finish setup" => "Installation abschließen",
-"web services under your control" => "web services under your control",
+"web services under your control" => "Web Services unter ihrer Kontrolle",
"Log out" => "Abmelden",
"Lost your password?" => "Passwort vergessen?",
"remember" => "merken",
diff --git a/files/webdav.php b/files/webdav.php
index 53673dbeca2..c19c4c6b72f 100644
--- a/files/webdav.php
+++ b/files/webdav.php
@@ -23,8 +23,6 @@
*
*/
-// Do not load FS ...
-$RUNTIME_NOSETUPFS = true;
// only need filesystem apps
$RUNTIME_APPTYPES=array('filesystem','authentication');
require_once('../lib/base.php');
diff --git a/index.php b/index.php
index e3c94adf66f..4ffd013aa86 100755
--- a/index.php
+++ b/index.php
@@ -26,98 +26,21 @@ $RUNTIME_NOAPPS = TRUE; //no apps, yet
require_once('lib/base.php');
-// Setup required :
-$not_installed = !OC_Config::getValue('installed', false);
-if($not_installed) {
- // Check for autosetup:
- $autosetup_file = OC::$SERVERROOT."/config/autoconfig.php";
- if( file_exists( $autosetup_file )){
- OC_Log::write('core','Autoconfig file found, setting up owncloud...',OC_Log::INFO);
- include( $autosetup_file );
- $_POST['install'] = 'true';
- $_POST = array_merge ($_POST, $AUTOCONFIG);
- unlink($autosetup_file);
- }
- OC_Util::addScript('setup');
- require_once('setup.php');
- exit();
-}
-
-// Handle WebDAV
-if($_SERVER['REQUEST_METHOD']=='PROPFIND'){
- header('location: '.OC_Helper::linkToRemote('webdav'));
- exit();
-}
-elseif(!OC_User::isLoggedIn() && substr(OC::$REQUESTEDFILE,-3) == 'css'){
- OC_App::loadApps();
- OC::loadfile();
-}
-// Someone is logged in :
-elseif(OC_User::isLoggedIn()) {
- OC_App::loadApps();
- if(isset($_GET["logout"]) and ($_GET["logout"])) {
- OC_User::logout();
- header("Location: ".OC::$WEBROOT.'/');
- exit();
- }else{
- if(is_null(OC::$REQUESTEDFILE)){
- OC::loadapp();
- }else{
- OC::loadfile();
- }
- }
-
-// For all others cases, we display the guest page :
-} else {
+if (!OC::handleRequest()) {
+// Not handled -> we display the login page:
OC_App::loadApps(array('prelogin'));
$error = false;
// remember was checked after last login
- if(isset($_COOKIE["oc_remember_login"]) && isset($_COOKIE["oc_token"]) && isset($_COOKIE["oc_username"]) && $_COOKIE["oc_remember_login"]) {
- OC_App::loadApps(array('authentication'));
- if(defined("DEBUG") && DEBUG) {
- OC_Log::write('core','Trying to login from cookie',OC_Log::DEBUG);
- }
- // confirm credentials in cookie
- if(isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username']) &&
- OC_Preferences::getValue($_COOKIE['oc_username'], "login", "token") == $_COOKIE['oc_token']) {
- OC_User::setUserId($_COOKIE['oc_username']);
- OC_Util::redirectToDefaultPage();
- }
- else {
- OC_User::unsetMagicInCookie();
- }
+ if (OC::tryRememberLogin()) {
+ // nothing more to do
// Someone wants to log in :
- } elseif(isset($_POST["user"]) and isset($_POST['password']) and isset($_SESSION['sectoken']) and isset($_POST['sectoken']) and ($_SESSION['sectoken']==$_POST['sectoken']) ) {
- OC_App::loadApps();
- if(OC_User::login($_POST["user"], $_POST["password"])) {
- if(!empty($_POST["remember_login"])){
- if(defined("DEBUG") && DEBUG) {
- OC_Log::write('core','Setting remember login to cookie',OC_Log::DEBUG);
- }
- $token = md5($_POST["user"].time().$_POST['password']);
- OC_Preferences::setValue($_POST['user'], 'login', 'token', $token);
- OC_User::setMagicInCookie($_POST["user"], $token);
- }
- else {
- OC_User::unsetMagicInCookie();
- }
- OC_Util::redirectToDefaultPage();
- } else {
- $error = true;
- }
+ } elseif (OC::tryFormLogin()) {
+ $error = true;
// The user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP
- } elseif(isset($_SERVER["PHP_AUTH_USER"]) && isset($_SERVER["PHP_AUTH_PW"])){
- OC_App::loadApps(array('authentication'));
- if (OC_User::login($_SERVER["PHP_AUTH_USER"],$_SERVER["PHP_AUTH_PW"])) {
- //OC_Log::write('core',"Logged in with HTTP Authentication",OC_Log::DEBUG);
- OC_User::unsetMagicInCookie();
- $_REQUEST['redirect_url'] = (isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:'');
- OC_Util::redirectToDefaultPage();
- }else{
- $error = true;
- }
+ } elseif(OC::tryBasicAuthLogin()) {
+ $error = true;
}
if(!array_key_exists('sectoken', $_SESSION) || (array_key_exists('sectoken', $_SESSION) && is_null(OC::$REQUESTEDFILE)) || substr(OC::$REQUESTEDFILE, -3) == 'php'){
$sectoken=rand(1000000,9999999);
diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po
index 0909e05d48e..4157d36cb19 100644
--- a/l10n/ca/settings.po
+++ b/l10n/ca/settings.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-05 19:00+0200\n"
-"PO-Revision-Date: 2012-08-05 17:01+0000\n"
-"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2012-08-07 02:05+0200\n"
+"PO-Revision-Date: 2012-08-06 07:32+0000\n"
+"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,7 +21,7 @@ msgstr ""
#: ajax/apps/ocs.php:23
msgid "Unable to load list from App Store"
-msgstr ""
+msgstr "No s'ha pogut carregar la llista des de l'App Store"
#: ajax/lostpassword.php:14
msgid "Email saved"
@@ -49,7 +49,7 @@ msgstr "S'ha canviat l'idioma"
#: js/apps.js:18
msgid "Error"
-msgstr ""
+msgstr "Error"
#: js/apps.js:39 js/apps.js:73
msgid "Disable"
diff --git a/l10n/de/contacts.po b/l10n/de/contacts.po
index e41c0bc864d..05b7ba69ed5 100644
--- a/l10n/de/contacts.po
+++ b/l10n/de/contacts.po
@@ -22,8 +22,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-04 02:02+0200\n"
-"PO-Revision-Date: 2012-08-04 00:02+0000\n"
+"POT-Creation-Date: 2012-08-07 02:04+0200\n"
+"PO-Revision-Date: 2012-08-06 16:13+0000\n"
"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
@@ -489,11 +489,11 @@ msgstr "Ausklappen/Einklappen des Adressbuches"
#: templates/index.php:48
msgid "Next addressbook"
-msgstr ""
+msgstr "Nächstes Adressbuch"
#: templates/index.php:50
msgid "Previous addressbook"
-msgstr ""
+msgstr "Vorheriges Adressbuch"
#: templates/index.php:54
msgid "Actions"
@@ -545,7 +545,7 @@ msgstr "Name ändern"
#: templates/part.contact.php:40 templates/part.contact.php:42
#: templates/part.contact.php:44 templates/part.contact.php:46
-#: templates/part.contact.php:50 templates/settings.php:34
+#: templates/part.contact.php:50 templates/settings.php:33
msgid "Delete"
msgstr "Löschen"
@@ -856,30 +856,30 @@ msgstr "Schreibgeschützten VCF-Link anzeigen"
msgid "Download"
msgstr "Herunterladen"
-#: templates/settings.php:31
+#: templates/settings.php:30
msgid "Edit"
msgstr "Bearbeiten"
-#: templates/settings.php:41
+#: templates/settings.php:40
msgid "New Address Book"
msgstr "Neues Adressbuch"
-#: templates/settings.php:42
+#: templates/settings.php:41
msgid "Name"
msgstr "Name"
-#: templates/settings.php:43
+#: templates/settings.php:42
msgid "Description"
msgstr "Beschreibung"
-#: templates/settings.php:45
+#: templates/settings.php:43
msgid "Save"
msgstr "Speichern"
-#: templates/settings.php:46
+#: templates/settings.php:44
msgid "Cancel"
msgstr "Abbrechen"
-#: templates/settings.php:51
+#: templates/settings.php:49
msgid "More..."
msgstr "Mehr..."
diff --git a/l10n/de/core.po b/l10n/de/core.po
index bee17cb2809..2360a0297ae 100644
--- a/l10n/de/core.po
+++ b/l10n/de/core.po
@@ -15,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-02 02:02+0200\n"
-"PO-Revision-Date: 2012-08-02 00:03+0000\n"
-"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2012-08-07 02:04+0200\n"
+"PO-Revision-Date: 2012-08-06 19:45+0000\n"
+"Last-Translator: designpoint <info@designpoint.ch>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -45,51 +45,51 @@ msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgid "Settings"
msgstr "Einstellungen"
-#: js/js.js:573
+#: js/js.js:572
msgid "January"
msgstr "Januar"
-#: js/js.js:573
+#: js/js.js:572
msgid "February"
msgstr "Februar"
-#: js/js.js:573
+#: js/js.js:572
msgid "March"
msgstr "März"
-#: js/js.js:573
+#: js/js.js:572
msgid "April"
msgstr "April"
-#: js/js.js:573
+#: js/js.js:572
msgid "May"
msgstr "Mai"
-#: js/js.js:573
+#: js/js.js:572
msgid "June"
msgstr "Juni"
-#: js/js.js:574
+#: js/js.js:573
msgid "July"
msgstr "Juli"
-#: js/js.js:574
+#: js/js.js:573
msgid "August"
msgstr "August"
-#: js/js.js:574
+#: js/js.js:573
msgid "September"
msgstr "September"
-#: js/js.js:574
+#: js/js.js:573
msgid "October"
msgstr "Oktober"
-#: js/js.js:574
+#: js/js.js:573
msgid "November"
msgstr "November"
-#: js/js.js:574
+#: js/js.js:573
msgid "December"
msgstr "Dezember"
@@ -188,11 +188,11 @@ msgstr "Zugang verboten"
#: templates/404.php:12
msgid "Cloud not found"
-msgstr "Cloud nicht verfügbar"
+msgstr "Cloud nicht gefunden"
#: templates/edit_categories_dialog.php:4
msgid "Edit categories"
-msgstr "Kategorien ändern"
+msgstr "Kategorien editieren"
#: templates/edit_categories_dialog.php:14
msgid "Add"
@@ -245,7 +245,7 @@ msgstr "Installation abschließen"
#: templates/layout.guest.php:42
msgid "web services under your control"
-msgstr "web services under your control"
+msgstr "Web Services unter ihrer Kontrolle"
#: templates/layout.user.php:49
msgid "Log out"
diff --git a/l10n/de/files.po b/l10n/de/files.po
index e79d129b345..f495a374d08 100644
--- a/l10n/de/files.po
+++ b/l10n/de/files.po
@@ -15,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-07-31 22:53+0200\n"
-"PO-Revision-Date: 2012-07-31 20:54+0000\n"
-"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2012-08-07 02:04+0200\n"
+"PO-Revision-Date: 2012-08-06 20:04+0000\n"
+"Last-Translator: designpoint <info@designpoint.ch>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -69,23 +69,23 @@ msgstr "Löschen"
#: js/filelist.js:141
msgid "already exists"
-msgstr ""
+msgstr "ist bereits vorhanden"
#: js/filelist.js:141
msgid "replace"
-msgstr ""
+msgstr "Ersetzen"
#: js/filelist.js:141
msgid "cancel"
-msgstr ""
+msgstr "Abbrechen"
#: js/filelist.js:195
msgid "replaced"
-msgstr ""
+msgstr "Ersetzt"
#: js/filelist.js:195
msgid "with"
-msgstr ""
+msgstr "mit"
#: js/filelist.js:195 js/filelist.js:256
msgid "undo"
@@ -101,7 +101,7 @@ msgstr "Erstelle ZIP-Datei. Dies kann eine Weile dauern."
#: js/files.js:199
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr "Datei kann nicht hochgeladen werden da sie ein Verzeichniss ist oder 0 bytes hat."
+msgstr "Datei kann nicht hochgeladen werden da sie ein Verzeichnis ist oder 0 Bytes hat."
#: js/files.js:199
msgid "Upload Error"
@@ -109,7 +109,7 @@ msgstr "Fehler beim Hochladen"
#: js/files.js:227 js/files.js:318 js/files.js:347
msgid "Pending"
-msgstr "Anstehend"
+msgstr "Ausstehend"
#: js/files.js:332
msgid "Upload cancelled."
@@ -119,27 +119,27 @@ msgstr "Hochladen abgebrochen."
msgid "Invalid name, '/' is not allowed."
msgstr "Ungültiger Name, \"/\" ist nicht erlaubt."
-#: js/files.js:631 templates/index.php:55
+#: js/files.js:694 templates/index.php:55
msgid "Size"
msgstr "Größe"
-#: js/files.js:632 templates/index.php:56
+#: js/files.js:695 templates/index.php:56
msgid "Modified"
msgstr "Bearbeitet"
-#: js/files.js:659
+#: js/files.js:722
msgid "folder"
msgstr "Ordner"
-#: js/files.js:661
+#: js/files.js:724
msgid "folders"
msgstr "Ordner"
-#: js/files.js:669
+#: js/files.js:732
msgid "file"
msgstr "Datei"
-#: js/files.js:671
+#: js/files.js:734
msgid "files"
msgstr "Dateien"
@@ -197,7 +197,7 @@ msgstr "Upload abbrechen"
#: templates/index.php:39
msgid "Nothing in here. Upload something!"
-msgstr "Alles leer. Lad’ was hoch!"
+msgstr "Alles leer. Lade etwas hoch!"
#: templates/index.php:47
msgid "Name"
diff --git a/l10n/de/settings.po b/l10n/de/settings.po
index 4525a95c34c..30f4a024dde 100644
--- a/l10n/de/settings.po
+++ b/l10n/de/settings.po
@@ -15,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-05 19:00+0200\n"
-"PO-Revision-Date: 2012-08-05 17:01+0000\n"
-"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2012-08-07 02:05+0200\n"
+"PO-Revision-Date: 2012-08-06 19:52+0000\n"
+"Last-Translator: designpoint <info@designpoint.ch>\n"
"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -27,7 +27,7 @@ msgstr ""
#: ajax/apps/ocs.php:23
msgid "Unable to load list from App Store"
-msgstr ""
+msgstr "Liste der Apps im Store konnte nicht geladen werden."
#: ajax/lostpassword.php:14
msgid "Email saved"
@@ -55,7 +55,7 @@ msgstr "Sprache geändert"
#: js/apps.js:18
msgid "Error"
-msgstr ""
+msgstr "Fehler"
#: js/apps.js:39 js/apps.js:73
msgid "Disable"
@@ -115,7 +115,7 @@ msgstr "Große Dateien verwalten"
#: templates/help.php:10
msgid "Ask a question"
-msgstr "Stell' eine Frage"
+msgstr "Stell eine Frage"
#: templates/help.php:22
msgid "Problems connecting to help database."
diff --git a/l10n/fa/files.po b/l10n/fa/files.po
index 636f1077ab5..d83a2a2427f 100644
--- a/l10n/fa/files.po
+++ b/l10n/fa/files.po
@@ -4,13 +4,14 @@
#
# Translators:
# Hossein nag <h.sname@yahoo.com>, 2012.
+# vahid chakoshy <vchakoshy@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-07-31 22:53+0200\n"
-"PO-Revision-Date: 2012-07-31 20:54+0000\n"
-"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2012-08-07 02:04+0200\n"
+"PO-Revision-Date: 2012-08-06 01:10+0000\n"
+"Last-Translator: vahid chakoshy <vchakoshy@gmail.com>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -62,7 +63,7 @@ msgstr "پاک کردن"
#: js/filelist.js:141
msgid "already exists"
-msgstr ""
+msgstr "وجود دارد"
#: js/filelist.js:141
msgid "replace"
@@ -86,7 +87,7 @@ msgstr ""
#: js/filelist.js:256
msgid "deleted"
-msgstr ""
+msgstr "حذف شده"
#: js/files.js:170
msgid "generating ZIP-file, it may take some time."
@@ -112,27 +113,27 @@ msgstr "بار گذاری لغو شد"
msgid "Invalid name, '/' is not allowed."
msgstr "نام نامناسب '/' غیرفعال است"
-#: js/files.js:631 templates/index.php:55
+#: js/files.js:694 templates/index.php:55
msgid "Size"
msgstr "اندازه"
-#: js/files.js:632 templates/index.php:56
+#: js/files.js:695 templates/index.php:56
msgid "Modified"
msgstr "تغییر یافته"
-#: js/files.js:659
+#: js/files.js:722
msgid "folder"
msgstr "پوشه"
-#: js/files.js:661
+#: js/files.js:724
msgid "folders"
msgstr "پوشه ها"
-#: js/files.js:669
+#: js/files.js:732
msgid "file"
msgstr "پرونده"
-#: js/files.js:671
+#: js/files.js:734
msgid "files"
msgstr "پرونده ها"
diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po
index a1f86934a11..1959264ab44 100644
--- a/l10n/fa/settings.po
+++ b/l10n/fa/settings.po
@@ -4,13 +4,14 @@
#
# Translators:
# Hossein nag <h.sname@yahoo.com>, 2012.
+# vahid chakoshy <vchakoshy@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-05 19:00+0200\n"
-"PO-Revision-Date: 2012-08-05 17:01+0000\n"
-"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2012-08-07 02:05+0200\n"
+"PO-Revision-Date: 2012-08-06 01:13+0000\n"
+"Last-Translator: vahid chakoshy <vchakoshy@gmail.com>\n"
"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -48,7 +49,7 @@ msgstr "زبان تغییر کرد"
#: js/apps.js:18
msgid "Error"
-msgstr ""
+msgstr "خطا"
#: js/apps.js:39 js/apps.js:73
msgid "Disable"
@@ -68,7 +69,7 @@ msgstr "__language_name__"
#: templates/admin.php:14
msgid "Security Warning"
-msgstr ""
+msgstr "اخطار امنیتی"
#: templates/admin.php:28
msgid "Log"
diff --git a/l10n/fi/bookmarks.po b/l10n/fi/bookmarks.po
new file mode 100644
index 00000000000..eb0373eb8ac
--- /dev/null
+++ b/l10n/fi/bookmarks.po
@@ -0,0 +1,60 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/fi/calendar.po b/l10n/fi/calendar.po
new file mode 100644
index 00000000000..8bf64c073a3
--- /dev/null
+++ b/l10n/fi/calendar.po
@@ -0,0 +1,814 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2011-09-03 16:52+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr ""
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr ""
+
+#: ajax/event/edit.form.php:20
+msgid "Wrong calendar"
+msgstr ""
+
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
+#: ajax/settings/guesstimezone.php:25
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settings/settimezone.php:23
+msgid "Timezone changed"
+msgstr ""
+
+#: ajax/settings/settimezone.php:25
+msgid "Invalid request"
+msgstr ""
+
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
+#: templates/settings.php:12
+msgid "Calendar"
+msgstr ""
+
+#: js/calendar.js:828
+msgid "ddd"
+msgstr ""
+
+#: js/calendar.js:829
+msgid "ddd M/d"
+msgstr ""
+
+#: js/calendar.js:830
+msgid "dddd M/d"
+msgstr ""
+
+#: js/calendar.js:833
+msgid "MMMM yyyy"
+msgstr ""
+
+#: js/calendar.js:835
+msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr ""
+
+#: js/calendar.js:837
+msgid "dddd, MMM d, yyyy"
+msgstr ""
+
+#: lib/app.php:121
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:122
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:123
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:124
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:125
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:126
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:127
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:128
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:129
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:130
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:132
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:133
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:134
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:135
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
+msgid "unnamed"
+msgstr ""
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
+msgid "Does not repeat"
+msgstr ""
+
+#: lib/object.php:373
+msgid "Daily"
+msgstr ""
+
+#: lib/object.php:374
+msgid "Weekly"
+msgstr ""
+
+#: lib/object.php:375
+msgid "Every Weekday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "Bi-Weekly"
+msgstr ""
+
+#: lib/object.php:377
+msgid "Monthly"
+msgstr ""
+
+#: lib/object.php:378
+msgid "Yearly"
+msgstr ""
+
+#: lib/object.php:388
+msgid "never"
+msgstr ""
+
+#: lib/object.php:389
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:390
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:400
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:401
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:42
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:412 templates/calendar.php:5
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:413 templates/calendar.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:414 templates/calendar.php:5
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:415 templates/calendar.php:5
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:416 templates/calendar.php:5
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:43
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:427
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:428
+msgid "first"
+msgstr ""
+
+#: lib/object.php:429
+msgid "second"
+msgstr ""
+
+#: lib/object.php:430
+msgid "third"
+msgstr ""
+
+#: lib/object.php:431
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:432
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:433
+msgid "last"
+msgstr ""
+
+#: lib/object.php:467 templates/calendar.php:7
+msgid "January"
+msgstr ""
+
+#: lib/object.php:468 templates/calendar.php:7
+msgid "February"
+msgstr ""
+
+#: lib/object.php:469 templates/calendar.php:7
+msgid "March"
+msgstr ""
+
+#: lib/object.php:470 templates/calendar.php:7
+msgid "April"
+msgstr ""
+
+#: lib/object.php:471 templates/calendar.php:7
+msgid "May"
+msgstr ""
+
+#: lib/object.php:472 templates/calendar.php:7
+msgid "June"
+msgstr ""
+
+#: lib/object.php:473 templates/calendar.php:7
+msgid "July"
+msgstr ""
+
+#: lib/object.php:474 templates/calendar.php:7
+msgid "August"
+msgstr ""
+
+#: lib/object.php:475 templates/calendar.php:7
+msgid "September"
+msgstr ""
+
+#: lib/object.php:476 templates/calendar.php:7
+msgid "October"
+msgstr ""
+
+#: lib/object.php:477 templates/calendar.php:7
+msgid "November"
+msgstr ""
+
+#: lib/object.php:478 templates/calendar.php:7
+msgid "December"
+msgstr ""
+
+#: lib/object.php:488
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:489
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:490
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:491
+msgid "by day and month"
+msgstr ""
+
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:43
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
+msgstr ""
+
+#: templates/calendar.php:13
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:14 templates/part.eventform.php:19
+#: templates/part.showevent.php:11
+msgid "Title"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:20
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:21
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:38
+msgid "Week"
+msgstr ""
+
+#: templates/calendar.php:39
+msgid "Month"
+msgstr ""
+
+#: templates/calendar.php:40
+msgid "List"
+msgstr ""
+
+#: templates/calendar.php:44
+msgid "Today"
+msgstr ""
+
+#: templates/calendar.php:45
+msgid "Calendars"
+msgstr ""
+
+#: templates/calendar.php:59
+msgid "There was a fail, while parsing the file."
+msgstr ""
+
+#: templates/part.choosecalendar.php:1
+msgid "Choose active calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:2
+msgid "Your calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:27
+#: templates/part.choosecalendar.rowfields.php:11
+msgid "CalDav Link"
+msgstr ""
+
+#: templates/part.choosecalendar.php:31
+msgid "Shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:48
+msgid "No shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:8
+msgid "Share Calendar"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:14
+msgid "Download"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:17
+msgid "Edit"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:20
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.shared.php:4
+msgid "shared with you by"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr ""
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr ""
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr ""
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:8 templates/part.showevent.php:3
+msgid "Eventinfo"
+msgstr ""
+
+#: templates/part.eventform.php:9 templates/part.showevent.php:4
+msgid "Repeating"
+msgstr ""
+
+#: templates/part.eventform.php:10 templates/part.showevent.php:5
+msgid "Alarm"
+msgstr ""
+
+#: templates/part.eventform.php:11 templates/part.showevent.php:6
+msgid "Attendees"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Share"
+msgstr ""
+
+#: templates/part.eventform.php:21
+msgid "Title of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:27 templates/part.showevent.php:19
+msgid "Category"
+msgstr ""
+
+#: templates/part.eventform.php:29
+msgid "Separate categories with commas"
+msgstr ""
+
+#: templates/part.eventform.php:30
+msgid "Edit categories"
+msgstr ""
+
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
+msgid "All Day Event"
+msgstr ""
+
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
+msgid "From"
+msgstr ""
+
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
+msgid "To"
+msgstr ""
+
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:83
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
+msgid "Description"
+msgstr ""
+
+#: templates/part.eventform.php:91
+msgid "Description of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
+msgid "Repeat"
+msgstr ""
+
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:164 templates/part.eventform.php:177
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
+
+#: templates/part.import.php:36
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
+
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
+
+#: templates/part.import.php:47
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:56
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr ""
+
+#: templates/part.showevent.php:1
+msgid "View an event"
+msgstr ""
+
+#: templates/part.showevent.php:23
+msgid "No categories selected"
+msgstr ""
+
+#: templates/part.showevent.php:37
+msgid "of"
+msgstr ""
+
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
+msgid "at"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Timezone"
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Check always for changes of the timezone"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Timeformat"
+msgstr ""
+
+#: templates/settings.php:35
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:36
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:40
+msgid "First day of the week"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:48
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:53
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:55
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:57
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:59
+msgid "Read only iCalendar link(s)"
+msgstr ""
+
+#: templates/share.dropdown.php:20
+msgid "Users"
+msgstr ""
+
+#: templates/share.dropdown.php:21
+msgid "select users"
+msgstr ""
+
+#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
+msgid "Editable"
+msgstr ""
+
+#: templates/share.dropdown.php:48
+msgid "Groups"
+msgstr ""
+
+#: templates/share.dropdown.php:49
+msgid "select groups"
+msgstr ""
+
+#: templates/share.dropdown.php:75
+msgid "make public"
+msgstr ""
diff --git a/l10n/fi/contacts.po b/l10n/fi/contacts.po
new file mode 100644
index 00000000000..d981913ecce
--- /dev/null
+++ b/l10n/fi/contacts.po
@@ -0,0 +1,870 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2011-09-23 17:10+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:30
+#: ajax/contact/saveproperty.php:37
+msgid "id is not set."
+msgstr ""
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr ""
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr ""
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr ""
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr ""
+
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:34
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:144
+msgid "Error adding contact property: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:36
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:43
+msgid "Error deleting contact property."
+msgstr ""
+
+#: ajax/contact/details.php:31
+msgid "Missing ID"
+msgstr ""
+
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
+msgstr ""
+
+#: ajax/contact/saveproperty.php:40
+msgid "checksum is not set."
+msgstr ""
+
+#: ajax/contact/saveproperty.php:60
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
+
+#: ajax/contact/saveproperty.php:67
+msgid "Something went FUBAR. "
+msgstr ""
+
+#: ajax/contact/saveproperty.php:142
+msgid "Error updating contact property."
+msgstr ""
+
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
+msgstr ""
+
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
+msgstr ""
+
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
+msgstr ""
+
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
+msgstr ""
+
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
+msgstr ""
+
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
+msgstr ""
+
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
+msgstr ""
+
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
+msgstr ""
+
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
+msgstr ""
+
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
+msgstr ""
+
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
+msgstr ""
+
+#: ajax/savecrop.php:108
+msgid "Error resizing image"
+msgstr ""
+
+#: ajax/savecrop.php:111
+msgid "Error cropping image"
+msgstr ""
+
+#: ajax/savecrop.php:114
+msgid "Error creating temporary image"
+msgstr ""
+
+#: ajax/savecrop.php:117
+msgid "Error finding image: "
+msgstr ""
+
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
+msgid "Error uploading contacts to storage."
+msgstr ""
+
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
+msgid "Couldn't save temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
+msgid "Couldn't load temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:71
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: appinfo/app.php:19
+msgid "Contacts"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Sorry, this functionality has not been implemented yet"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Not implemented"
+msgstr ""
+
+#: js/contacts.js:76
+msgid "Couldn't get a valid address."
+msgstr ""
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:675 js/contacts.js:715 js/contacts.js:741 js/contacts.js:850
+#: js/contacts.js:856 js/contacts.js:868 js/contacts.js:902
+#: js/contacts.js:1165 js/contacts.js:1173 js/contacts.js:1182
+#: js/contacts.js:1217 js/contacts.js:1249 js/contacts.js:1261
+#: js/contacts.js:1284 js/contacts.js:1421 js/contacts.js:1452
+#: js/settings.js:25 js/settings.js:42 js/settings.js:67
+msgid "Error"
+msgstr ""
+
+#: js/contacts.js:715
+msgid "This property has to be non-empty."
+msgstr ""
+
+#: js/contacts.js:741
+msgid "Couldn't serialize elements."
+msgstr ""
+
+#: js/contacts.js:850 js/contacts.js:868
+msgid ""
+"'deleteProperty' called without type argument. Please report at "
+"bugs.owncloud.org"
+msgstr ""
+
+#: js/contacts.js:884
+msgid "Edit name"
+msgstr ""
+
+#: js/contacts.js:1165
+msgid "No files selected for upload."
+msgstr ""
+
+#: js/contacts.js:1173
+msgid ""
+"The file you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: js/contacts.js:1337 js/contacts.js:1371
+msgid "Select type"
+msgstr ""
+
+#: js/contacts.js:1390
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
+
+#: js/loader.js:49
+msgid "Result: "
+msgstr ""
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:67
+msgid "Displayname cannot be empty."
+msgstr ""
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr ""
+
+#: lib/app.php:49
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:68
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:112 templates/part.contact.php:117
+msgid "Address"
+msgstr ""
+
+#: lib/app.php:113
+msgid "Telephone"
+msgstr ""
+
+#: lib/app.php:114 templates/part.contact.php:116
+msgid "Email"
+msgstr ""
+
+#: lib/app.php:115 templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:112
+msgid "Organization"
+msgstr ""
+
+#: lib/app.php:127 lib/app.php:134 lib/app.php:144 lib/app.php:197
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:128 lib/app.php:132 lib/app.php:145
+msgid "Home"
+msgstr ""
+
+#: lib/app.php:133
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:135
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:136
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:137
+msgid "Message"
+msgstr ""
+
+#: lib/app.php:138
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:139
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:140
+msgid "Pager"
+msgstr ""
+
+#: lib/app.php:146
+msgid "Internet"
+msgstr ""
+
+#: lib/app.php:183 templates/part.contact.php:45
+#: templates/part.contact.php:114
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:184
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:185
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:186
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:187
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:188
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:189
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:190
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:191
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:192
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:193
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:194
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:195
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:196
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr ""
+
+#: lib/search.php:15
+msgid "Contact"
+msgstr ""
+
+#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
+
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
+
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
+
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
+
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
+
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr ""
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr ""
+
+#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:33
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:113
+msgid "Nickname"
+msgstr ""
+
+#: templates/part.contact.php:42
+msgid "Enter nickname"
+msgstr ""
+
+#: templates/part.contact.php:43 templates/part.contact.php:119
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr ""
+
+#: templates/part.contact.php:47 templates/part.contact.php:120
+msgid "Groups"
+msgstr ""
+
+#: templates/part.contact.php:49
+msgid "Separate groups with commas"
+msgstr ""
+
+#: templates/part.contact.php:50
+msgid "Edit groups"
+msgstr ""
+
+#: templates/part.contact.php:63 templates/part.contact.php:77
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.contact.php:64
+msgid "Please specify a valid email address."
+msgstr ""
+
+#: templates/part.contact.php:64
+msgid "Enter email address"
+msgstr ""
+
+#: templates/part.contact.php:68
+msgid "Mail to address"
+msgstr ""
+
+#: templates/part.contact.php:69
+msgid "Delete email address"
+msgstr ""
+
+#: templates/part.contact.php:78
+msgid "Enter phone number"
+msgstr ""
+
+#: templates/part.contact.php:82
+msgid "Delete phone number"
+msgstr ""
+
+#: templates/part.contact.php:92
+msgid "View on map"
+msgstr ""
+
+#: templates/part.contact.php:92
+msgid "Edit address details"
+msgstr ""
+
+#: templates/part.contact.php:103
+msgid "Add notes here."
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "Add field"
+msgstr ""
+
+#: templates/part.contact.php:115
+msgid "Phone"
+msgstr ""
+
+#: templates/part.contact.php:118
+msgid "Note"
+msgstr ""
+
+#: templates/part.contact.php:123
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.contact.php:124
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.cropphoto.php:65
+msgid "The temporary image has been removed from cache."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:6
+msgid "Edit address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:10
+msgid "Type"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
+msgid "PO Box"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
+msgid "Extended"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
+msgid "City"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:42
+msgid "Region"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:16
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:23
+msgid "Hon. prefixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:27
+msgid "Miss"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:28
+msgid "Ms"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:29
+msgid "Mr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:30
+msgid "Sir"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:31
+msgid "Mrs"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:32
+msgid "Dr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:35
+msgid "Given name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:37
+msgid "Additional names"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:39
+msgid "Family name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:41
+msgid "Hon. suffixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:45
+msgid "J.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:46
+msgid "M.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:47
+msgid "D.O."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:48
+msgid "D.C."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:49
+msgid "Ph.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:50
+msgid "Esq."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:51
+msgid "Jr."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:52
+msgid "Sn."
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a contacts file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new addressbook"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing contacts"
+msgstr ""
+
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr ""
+
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr ""
+
+#: templates/part.no_contacts.php:6
+msgid "Configure addressbooks"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:20
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:22
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Download"
+msgstr ""
+
+#: templates/settings.php:30
+msgid "Edit"
+msgstr ""
+
+#: templates/settings.php:40
+msgid "New Address Book"
+msgstr ""
+
+#: templates/settings.php:41
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:42
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:43
+msgid "Save"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:49
+msgid "More..."
+msgstr ""
diff --git a/l10n/fi/core.po b/l10n/fi/core.po
new file mode 100644
index 00000000000..53b71a432ff
--- /dev/null
+++ b/l10n/fi/core.po
@@ -0,0 +1,268 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2011-07-25 16:05+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
+msgid "Application name not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:29
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:36
+msgid "This category already exists: "
+msgstr ""
+
+#: js/jquery-ui-1.8.16.custom.min.js:511
+msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+msgstr ""
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:572
+msgid "January"
+msgstr ""
+
+#: js/js.js:572
+msgid "February"
+msgstr ""
+
+#: js/js.js:572
+msgid "March"
+msgstr ""
+
+#: js/js.js:572
+msgid "April"
+msgstr ""
+
+#: js/js.js:572
+msgid "May"
+msgstr ""
+
+#: js/js.js:572
+msgid "June"
+msgstr ""
+
+#: js/js.js:573
+msgid "July"
+msgstr ""
+
+#: js/js.js:573
+msgid "August"
+msgstr ""
+
+#: js/js.js:573
+msgid "September"
+msgstr ""
+
+#: js/js.js:573
+msgid "October"
+msgstr ""
+
+#: js/js.js:573
+msgid "November"
+msgstr ""
+
+#: js/js.js:573
+msgid "December"
+msgstr ""
+
+#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:159
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:160
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:177
+msgid "Ok"
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "Error"
+msgstr ""
+
+#: lostpassword/index.php:26
+msgid "ownCloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
+#: templates/login.php:9
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:15
+msgid "Request reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr ""
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr ""
+
+#: strings.php:5
+msgid "Personal"
+msgstr ""
+
+#: strings.php:6
+msgid "Users"
+msgstr ""
+
+#: strings.php:7
+msgid "Apps"
+msgstr ""
+
+#: strings.php:8
+msgid "Admin"
+msgstr ""
+
+#: strings.php:9
+msgid "Help"
+msgstr ""
+
+#: templates/403.php:12
+msgid "Access forbidden"
+msgstr ""
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr ""
+
+#: templates/edit_categories_dialog.php:4
+msgid "Edit categories"
+msgstr ""
+
+#: templates/edit_categories_dialog.php:14
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:23
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:29 templates/login.php:13
+msgid "Password"
+msgstr ""
+
+#: templates/installation.php:35
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:37
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:44
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:49 templates/installation.php:60
+#: templates/installation.php:70
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:82
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:86
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:90
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:96
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:101
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:42
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:49
+msgid "Log out"
+msgstr ""
+
+#: templates/login.php:6
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:17
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:18
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr ""
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr ""
diff --git a/l10n/fi/files.po b/l10n/fi/files.po
new file mode 100644
index 00000000000..63aaeba9a9f
--- /dev/null
+++ b/l10n/fi/files.po
@@ -0,0 +1,222 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2011-08-13 02:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:20
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:23
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:24
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:25
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "Failed to write to disk"
+msgstr ""
+
+#: appinfo/app.php:6
+msgid "Files"
+msgstr ""
+
+#: js/fileactions.js:95
+msgid "Unshare"
+msgstr ""
+
+#: js/fileactions.js:97 templates/index.php:56
+msgid "Delete"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:256
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:256
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:170
+msgid "generating ZIP-file, it may take some time."
+msgstr ""
+
+#: js/files.js:199
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:199
+msgid "Upload Error"
+msgstr ""
+
+#: js/files.js:227 js/files.js:318 js/files.js:347
+msgid "Pending"
+msgstr ""
+
+#: js/files.js:332
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/files.js:456
+msgid "Invalid name, '/' is not allowed."
+msgstr ""
+
+#: js/files.js:694 templates/index.php:55
+msgid "Size"
+msgstr ""
+
+#: js/files.js:695 templates/index.php:56
+msgid "Modified"
+msgstr ""
+
+#: js/files.js:722
+msgid "folder"
+msgstr ""
+
+#: js/files.js:724
+msgid "folders"
+msgstr ""
+
+#: js/files.js:732
+msgid "file"
+msgstr ""
+
+#: js/files.js:734
+msgid "files"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:11
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:12
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:11
+msgid "From url"
+msgstr ""
+
+#: templates/index.php:21
+msgid "Upload"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:47
+msgid "Name"
+msgstr ""
+
+#: templates/index.php:49
+msgid "Share"
+msgstr ""
+
+#: templates/index.php:51
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:64
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:66
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:71
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:74
+msgid "Current scanning"
+msgstr ""
diff --git a/l10n/fi/gallery.po b/l10n/fi/gallery.po
new file mode 100644
index 00000000000..786216a0af1
--- /dev/null
+++ b/l10n/fi/gallery.po
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:39
+msgid "Pictures"
+msgstr ""
+
+#: js/pictures.js:12
+msgid "Share gallery"
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Error: "
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Internal error"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+#: templates/view_album.php:36
+msgid "Remove confirmation"
+msgstr ""
+
+#: templates/view_album.php:37
+msgid "Do you want to remove album"
+msgstr ""
+
+#: templates/view_album.php:40
+msgid "Change album name"
+msgstr ""
+
+#: templates/view_album.php:43
+msgid "New album name"
+msgstr ""
diff --git a/l10n/fi/lib.po b/l10n/fi/lib.po
new file mode 100644
index 00000000000..eee9ac5f9e5
--- /dev/null
+++ b/l10n/fi/lib.po
@@ -0,0 +1,112 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: app.php:288
+msgid "Help"
+msgstr ""
+
+#: app.php:295
+msgid "Personal"
+msgstr ""
+
+#: app.php:300
+msgid "Settings"
+msgstr ""
+
+#: app.php:305
+msgid "Users"
+msgstr ""
+
+#: app.php:312
+msgid "Apps"
+msgstr ""
+
+#: app.php:314
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/fi/media.po b/l10n/fi/media.po
new file mode 100644
index 00000000000..d0e3eab9bde
--- /dev/null
+++ b/l10n/fi/media.po
@@ -0,0 +1,66 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2011-08-13 02:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:45 templates/player.php:8
+msgid "Music"
+msgstr ""
+
+#: js/music.js:18
+msgid "Add album to playlist"
+msgstr ""
+
+#: templates/music.php:3 templates/player.php:12
+msgid "Play"
+msgstr ""
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:13
+msgid "Pause"
+msgstr ""
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr ""
+
+#: templates/music.php:6 templates/player.php:14
+msgid "Next"
+msgstr ""
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr ""
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr ""
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr ""
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr ""
+
+#: templates/music.php:38
+msgid "Album"
+msgstr ""
+
+#: templates/music.php:39
+msgid "Title"
+msgstr ""
diff --git a/l10n/fi/settings.po b/l10n/fi/settings.po
new file mode 100644
index 00000000000..940a5cbc09c
--- /dev/null
+++ b/l10n/fi/settings.po
@@ -0,0 +1,222 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2011-07-25 16:05+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:16
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/openid.php:16
+msgid "OpenID Changed"
+msgstr ""
+
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
+msgid "Language changed"
+msgstr ""
+
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:62
+msgid "Enable"
+msgstr ""
+
+#: js/personal.js:69
+msgid "Saving..."
+msgstr ""
+
+#: personal.php:46 personal.php:47
+msgid "__language_name__"
+msgstr ""
+
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:28
+msgid "Log"
+msgstr ""
+
+#: templates/admin.php:56
+msgid "More"
+msgstr ""
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:26
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:29
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "-licensed"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "by"
+msgstr ""
+
+#: templates/help.php:8
+msgid "Documentation"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Managing Big Files"
+msgstr ""
+
+#: templates/help.php:10
+msgid "Ask a question"
+msgstr ""
+
+#: templates/help.php:22
+msgid "Problems connecting to help database."
+msgstr ""
+
+#: templates/help.php:23
+msgid "Go there manually."
+msgstr ""
+
+#: templates/help.php:31
+msgid "Answer"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr ""
+
+#: templates/personal.php:12
+msgid "Desktop and Mobile Syncing Clients"
+msgstr ""
+
+#: templates/personal.php:13
+msgid "Download"
+msgstr ""
+
+#: templates/personal.php:19
+msgid "Your password got changed"
+msgstr ""
+
+#: templates/personal.php:20
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:21
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:22
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:23
+msgid "show"
+msgstr ""
+
+#: templates/personal.php:24
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:30
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:31
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:32
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:38 templates/personal.php:39
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:44
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:51
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/users.php:21 templates/users.php:76
+msgid "Name"
+msgstr ""
+
+#: templates/users.php:23 templates/users.php:77
+msgid "Password"
+msgstr ""
+
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:32
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:35
+msgid "Default Quota"
+msgstr ""
+
+#: templates/users.php:55 templates/users.php:138
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:80 templates/users.php:112
+msgid "SubAdmin"
+msgstr ""
+
+#: templates/users.php:82
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:146
+msgid "Delete"
+msgstr ""
diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po
index 5707523ef2e..25c546781eb 100644
--- a/l10n/fi_FI/settings.po
+++ b/l10n/fi_FI/settings.po
@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-05 19:00+0200\n"
-"PO-Revision-Date: 2012-08-05 17:01+0000\n"
-"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2012-08-07 02:05+0200\n"
+"PO-Revision-Date: 2012-08-06 10:15+0000\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -49,7 +49,7 @@ msgstr "Kieli on vaihdettu"
#: js/apps.js:18
msgid "Error"
-msgstr ""
+msgstr "Virhe"
#: js/apps.js:39 js/apps.js:73
msgid "Disable"
diff --git a/l10n/fr/contacts.po b/l10n/fr/contacts.po
index c7086e02eaf..6d0c2315d9d 100644
--- a/l10n/fr/contacts.po
+++ b/l10n/fr/contacts.po
@@ -4,6 +4,7 @@
#
# Translators:
# Borjan Tchakaloff <borjan@tchaka.fr>, 2012.
+# Cyril Glapa <kyriog@gmail.com>, 2012.
# <fboulogne@april.org>, 2011.
# <gp4004@arghh.org>, 2011.
# <guiguidu31300@gmail.com>, 2012.
@@ -17,9 +18,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-04 02:02+0200\n"
-"PO-Revision-Date: 2012-08-04 00:02+0000\n"
-"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2012-08-07 02:04+0200\n"
+"PO-Revision-Date: 2012-08-06 20:28+0000\n"
+"Last-Translator: Cyril Glapa <kyriog@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -306,11 +307,11 @@ msgstr "échoué."
#: js/settings.js:67
msgid "Displayname cannot be empty."
-msgstr ""
+msgstr "Le nom d'affichage ne peut pas être vide."
#: lib/app.php:36
msgid "Addressbook not found: "
-msgstr ""
+msgstr "Carnet d'adresse introuvable : "
#: lib/app.php:49
msgid "This is not your addressbook."
@@ -452,7 +453,7 @@ msgstr "Importer"
#: templates/index.php:18
msgid "Settings"
-msgstr ""
+msgstr "Paramètres"
#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
@@ -484,11 +485,11 @@ msgstr "Dé/Replier le carnet d'adresses courant"
#: templates/index.php:48
msgid "Next addressbook"
-msgstr ""
+msgstr "Carnet d'adresses suivant"
#: templates/index.php:50
msgid "Previous addressbook"
-msgstr ""
+msgstr "Carnet d'adresses précédent"
#: templates/index.php:54
msgid "Actions"
@@ -540,7 +541,7 @@ msgstr "Editer les noms"
#: templates/part.contact.php:40 templates/part.contact.php:42
#: templates/part.contact.php:44 templates/part.contact.php:46
-#: templates/part.contact.php:50 templates/settings.php:34
+#: templates/part.contact.php:50 templates/settings.php:33
msgid "Delete"
msgstr "Supprimer"
@@ -841,7 +842,7 @@ msgstr "iOS/OS X"
#: templates/settings.php:20
msgid "Show CardDav link"
-msgstr ""
+msgstr "Afficher le lien CardDav"
#: templates/settings.php:23
msgid "Show read-only VCF link"
@@ -851,30 +852,30 @@ msgstr ""
msgid "Download"
msgstr "Télécharger"
-#: templates/settings.php:31
+#: templates/settings.php:30
msgid "Edit"
msgstr "Modifier"
-#: templates/settings.php:41
+#: templates/settings.php:40
msgid "New Address Book"
msgstr "Nouveau Carnet d'adresses"
-#: templates/settings.php:42
+#: templates/settings.php:41
msgid "Name"
-msgstr ""
+msgstr "Nom"
-#: templates/settings.php:43
+#: templates/settings.php:42
msgid "Description"
-msgstr ""
+msgstr "Description"
-#: templates/settings.php:45
+#: templates/settings.php:43
msgid "Save"
msgstr "Sauvegarder"
-#: templates/settings.php:46
+#: templates/settings.php:44
msgid "Cancel"
msgstr "Annuler"
-#: templates/settings.php:51
+#: templates/settings.php:49
msgid "More..."
-msgstr ""
+msgstr "Plus…"
diff --git a/l10n/fr/files.po b/l10n/fr/files.po
index 23e5b17852b..1cc50dacf8a 100644
--- a/l10n/fr/files.po
+++ b/l10n/fr/files.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Cyril Glapa <kyriog@gmail.com>, 2012.
# Geoffrey Guerrier <geoffrey.guerrier@gmail.com>, 2012.
# <guiguidu31300@gmail.com>, 2012.
# Nahir Mohamed <nahirmoha@gmail.com>, 2012.
@@ -12,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-07-31 22:53+0200\n"
-"PO-Revision-Date: 2012-07-31 20:54+0000\n"
-"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2012-08-07 02:04+0200\n"
+"PO-Revision-Date: 2012-08-06 20:30+0000\n"
+"Last-Translator: Cyril Glapa <kyriog@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -66,23 +67,23 @@ msgstr "Supprimer"
#: js/filelist.js:141
msgid "already exists"
-msgstr ""
+msgstr "existe déjà"
#: js/filelist.js:141
msgid "replace"
-msgstr ""
+msgstr "remplacer"
#: js/filelist.js:141
msgid "cancel"
-msgstr ""
+msgstr "annuler"
#: js/filelist.js:195
msgid "replaced"
-msgstr ""
+msgstr "remplacé"
#: js/filelist.js:195
msgid "with"
-msgstr ""
+msgstr "avec"
#: js/filelist.js:195 js/filelist.js:256
msgid "undo"
@@ -116,27 +117,27 @@ msgstr "Chargement annulé"
msgid "Invalid name, '/' is not allowed."
msgstr "Nom invalide, '/' n'est pas autorisé."
-#: js/files.js:631 templates/index.php:55
+#: js/files.js:694 templates/index.php:55
msgid "Size"
msgstr "Taille"
-#: js/files.js:632 templates/index.php:56
+#: js/files.js:695 templates/index.php:56
msgid "Modified"
msgstr "Modifié"
-#: js/files.js:659
+#: js/files.js:722
msgid "folder"
msgstr "dossier"
-#: js/files.js:661
+#: js/files.js:724
msgid "folders"
msgstr "dossiers"
-#: js/files.js:669
+#: js/files.js:732
msgid "file"
msgstr "fichier"
-#: js/files.js:671
+#: js/files.js:734
msgid "files"
msgstr "fichiers"
diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po
index 83d634ef529..5904706ab71 100644
--- a/l10n/fr/settings.po
+++ b/l10n/fr/settings.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Cyril Glapa <kyriog@gmail.com>, 2012.
# <fboulogne@april.org>, 2011.
# <guiguidu31300@gmail.com>, 2012.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
@@ -14,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-08-05 19:00+0200\n"
-"PO-Revision-Date: 2012-08-05 17:01+0000\n"
-"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"POT-Creation-Date: 2012-08-07 02:05+0200\n"
+"PO-Revision-Date: 2012-08-06 20:25+0000\n"
+"Last-Translator: Cyril Glapa <kyriog@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -26,7 +27,7 @@ msgstr ""
#: ajax/apps/ocs.php:23
msgid "Unable to load list from App Store"
-msgstr ""
+msgstr "Impossible de charger la liste depuis l'App Store"
#: ajax/lostpassword.php:14
msgid "Email saved"
@@ -54,7 +55,7 @@ msgstr "Langue changée"
#: js/apps.js:18
msgid "Error"
-msgstr ""
+msgstr "Erreur"
#: js/apps.js:39 js/apps.js:73
msgid "Disable"
diff --git a/l10n/templates/bookmarks.pot b/l10n/templates/bookmarks.pot
index d1f10931862..0923b3560e8 100644
--- a/l10n/templates/bookmarks.pot
+++ b/l10n/templates/bookmarks.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-06 02:01+0200\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/calendar.pot b/l10n/templates/calendar.pot
index cd99214bfa6..9afce66a0cc 100644
--- a/l10n/templates/calendar.pot
+++ b/l10n/templates/calendar.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-06 02:01+0200\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/contacts.pot b/l10n/templates/contacts.pot
index 27b06ccd622..45d062ecbc6 100644
--- a/l10n/templates/contacts.pot
+++ b/l10n/templates/contacts.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-06 02:01+0200\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -530,7 +530,7 @@ msgstr ""
#: templates/part.contact.php:40 templates/part.contact.php:42
#: templates/part.contact.php:44 templates/part.contact.php:46
-#: templates/part.contact.php:50 templates/settings.php:34
+#: templates/part.contact.php:50 templates/settings.php:33
msgid "Delete"
msgstr ""
@@ -841,30 +841,30 @@ msgstr ""
msgid "Download"
msgstr ""
-#: templates/settings.php:31
+#: templates/settings.php:30
msgid "Edit"
msgstr ""
-#: templates/settings.php:41
+#: templates/settings.php:40
msgid "New Address Book"
msgstr ""
-#: templates/settings.php:42
+#: templates/settings.php:41
msgid "Name"
msgstr ""
-#: templates/settings.php:43
+#: templates/settings.php:42
msgid "Description"
msgstr ""
-#: templates/settings.php:45
+#: templates/settings.php:43
msgid "Save"
msgstr ""
-#: templates/settings.php:46
+#: templates/settings.php:44
msgid "Cancel"
msgstr ""
-#: templates/settings.php:51
+#: templates/settings.php:49
msgid "More..."
msgstr ""
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 8701abad983..e078d4ab05c 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-06 02:02+0200\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 6c139feef7f..43eeb2aba40 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-06 02:01+0200\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -111,27 +111,27 @@ msgstr ""
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:690 templates/index.php:55
+#: js/files.js:694 templates/index.php:55
msgid "Size"
msgstr ""
-#: js/files.js:691 templates/index.php:56
+#: js/files.js:695 templates/index.php:56
msgid "Modified"
msgstr ""
-#: js/files.js:718
+#: js/files.js:722
msgid "folder"
msgstr ""
-#: js/files.js:720
+#: js/files.js:724
msgid "folders"
msgstr ""
-#: js/files.js:728
+#: js/files.js:732
msgid "file"
msgstr ""
-#: js/files.js:730
+#: js/files.js:734
msgid "files"
msgstr ""
diff --git a/l10n/templates/gallery.pot b/l10n/templates/gallery.pot
index d36f787991f..740cbaedeab 100644
--- a/l10n/templates/gallery.pot
+++ b/l10n/templates/gallery.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-06 02:02+0200\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index 8debc498479..bc1291279c4 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-06 02:02+0200\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/media.pot b/l10n/templates/media.pot
index 801986935ab..568fa545787 100644
--- a/l10n/templates/media.pot
+++ b/l10n/templates/media.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-06 02:02+0200\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index b848a4b9f66..a53e2109977 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-06 02:02+0200\n"
+"POT-Creation-Date: 2012-08-09 02:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/lib/base.php b/lib/base.php
index 888dc265d64..6514a0c0b0c 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -185,8 +185,8 @@ class OC{
// redirect to https site if configured
if( OC_Config::getValue( "forcessl", false )){
ini_set("session.cookie_secure", "on");
- if(OC_Helper::serverProtocol()<>'https' and !OC::$CLI) {
- $url = "https://". OC_Helper::serverHost() . $_SERVER['REQUEST_URI'];
+ if(OC_Request::serverProtocol()<>'https' and !OC::$CLI) {
+ $url = "https://". OC_Request::serverHost() . $_SERVER['REQUEST_URI'];
header("Location: $url");
exit();
}
@@ -373,7 +373,7 @@ class OC{
self::$REQUESTEDAPP = (isset($_GET['app']) && trim($_GET['app']) != '' && !is_null($_GET['app'])?str_replace(array('\0', '/', '\\', '..'), '', strip_tags($_GET['app'])):OC_Config::getValue('defaultapp', 'files'));
if(substr_count(self::$REQUESTEDAPP, '?') != 0){
$app = substr(self::$REQUESTEDAPP, 0, strpos(self::$REQUESTEDAPP, '?'));
- $param = substr(self::$REQUESTEDAPP, strpos(self::$REQUESTEDAPP, '?') + 1);
+ $param = substr($_GET['app'], strpos($_GET['app'], '?') + 1);
parse_str($param, $get);
$_GET = array_merge($_GET, $get);
self::$REQUESTEDAPP = $app;
@@ -398,12 +398,121 @@ class OC{
}
}
}
+
+ /**
+ * @brief Try to handle request
+ * @return true when the request is handled here
+ */
+ public static function handleRequest() {
+ if (!OC_Config::getValue('installed', false)) {
+ // Check for autosetup:
+ $autosetup_file = OC::$SERVERROOT."/config/autoconfig.php";
+ if( file_exists( $autosetup_file )){
+ OC_Log::write('core','Autoconfig file found, setting up owncloud...',OC_Log::INFO);
+ include( $autosetup_file );
+ $_POST['install'] = 'true';
+ $_POST = array_merge ($_POST, $AUTOCONFIG);
+ unlink($autosetup_file);
+ }
+ OC_Util::addScript('setup');
+ require_once('setup.php');
+ exit();
+ }
+ // Handle WebDAV
+ if($_SERVER['REQUEST_METHOD']=='PROPFIND'){
+ header('location: '.OC_Helper::linkToRemote('webdav'));
+ return true;
+ }
+ if(!OC_User::isLoggedIn() && substr(OC::$REQUESTEDFILE,-3) == 'css') {
+ OC_App::loadApps();
+ OC::loadfile();
+ return true;
+ }
+ // Someone is logged in :
+ if(OC_User::isLoggedIn()) {
+ OC_App::loadApps();
+ if(isset($_GET["logout"]) and ($_GET["logout"])) {
+ OC_User::logout();
+ header("Location: ".OC::$WEBROOT.'/');
+ }else{
+ if(is_null(OC::$REQUESTEDFILE)) {
+ OC::loadapp();
+ }else{
+ OC::loadfile();
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public static function tryRememberLogin() {
+ if(!isset($_COOKIE["oc_remember_login"])
+ || !isset($_COOKIE["oc_token"])
+ || !isset($_COOKIE["oc_username"])
+ || !$_COOKIE["oc_remember_login"]) {
+ return false;
+ }
+ OC_App::loadApps(array('authentication'));
+ if(defined("DEBUG") && DEBUG) {
+ OC_Log::write('core','Trying to login from cookie',OC_Log::DEBUG);
+ }
+ // confirm credentials in cookie
+ if(isset($_COOKIE['oc_token']) && OC_User::userExists($_COOKIE['oc_username']) &&
+ OC_Preferences::getValue($_COOKIE['oc_username'], "login", "token") == $_COOKIE['oc_token']) {
+ OC_User::setUserId($_COOKIE['oc_username']);
+ OC_Util::redirectToDefaultPage();
+ }
+ else {
+ OC_User::unsetMagicInCookie();
+ }
+ return true;
+ }
+
+ public static function tryFormLogin() {
+ if(!isset($_POST["user"])
+ || !isset($_POST['password'])
+ || !isset($_SESSION['sectoken'])
+ || !isset($_POST['sectoken'])
+ || ($_SESSION['sectoken']!=$_POST['sectoken']) ) {
+ return false;
+ }
+ OC_App::loadApps();
+ if(OC_User::login($_POST["user"], $_POST["password"])) {
+ if(!empty($_POST["remember_login"])){
+ if(defined("DEBUG") && DEBUG) {
+ OC_Log::write('core','Setting remember login to cookie', OC_Log::DEBUG);
+ }
+ $token = md5($_POST["user"].time().$_POST['password']);
+ OC_Preferences::setValue($_POST['user'], 'login', 'token', $token);
+ OC_User::setMagicInCookie($_POST["user"], $token);
+ }
+ else {
+ OC_User::unsetMagicInCookie();
+ }
+ OC_Util::redirectToDefaultPage();
+ }
+ return true;
+ }
+
+ public static function tryBasicAuthLogin() {
+ if (!isset($_SERVER["PHP_AUTH_USER"])
+ || !isset($_SERVER["PHP_AUTH_PW"])){
+ return false;
+ }
+ OC_App::loadApps(array('authentication'));
+ if (OC_User::login($_SERVER["PHP_AUTH_USER"],$_SERVER["PHP_AUTH_PW"])) {
+ //OC_Log::write('core',"Logged in with HTTP Authentication",OC_Log::DEBUG);
+ OC_User::unsetMagicInCookie();
+ $_REQUEST['redirect_url'] = (isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:'');
+ OC_Util::redirectToDefaultPage();
+ }
+ return true;
+ }
+
}
// define runtime variables - unless this already has been done
-if( !isset( $RUNTIME_NOSETUPFS )){
- $RUNTIME_NOSETUPFS = false;
-}
if( !isset( $RUNTIME_NOAPPS )){
$RUNTIME_NOAPPS = false;
}
diff --git a/lib/exception.php b/lib/exception.php
deleted file mode 100644
index db516fc12d2..00000000000
--- a/lib/exception.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Georg Ehrke
- * @copyright 2012 georg@owncloud.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-class OC_Exception extends Exception{
-
- function __construct($message = null, $code = 0, $file = null, $line = null){
- parent::__construct($message, $code);
- if(!is_null($file)){
- $this->file = $file;
- }
- if(!is_null($line)){
- $this->line = $line;
- }
- $this->writelog();
- }
-
- private function writelog(){
- @OC_Log::write(OC_App::getCurrentApp(), $this->getMessage() . '-' . $this->getFile() . '-' . $this->getLine(), OC_Log::FATAL);
- }
-
- private function generatesysinfo(){
- return array('phpversion' => PHP_VERSION,
- 'os' => php_uname('s'),
- 'osrelease' => php_uname('r'),
- 'osarchitecture' => php_uname('m'),
- 'phpserverinterface' => php_sapi_name(),
- 'serverprotocol' => $_SERVER['SERVER_PROTOCOL'],
- 'requestmethod' => $_SERVER['REQUEST_METHOD'],
- 'https' => ($_SERVER['HTTPS']==''?'false':'true'),
- 'database'=>(@OC_Config::getValue('dbtype')!=''?@OC_Config::getValue('dbtype'):'')
- );
- }
-
- function __toString(){
- $tmpl = new OC_Template('core', 'exception', 'guest');
- $tmpl->assign('showsysinfo', true);
- $tmpl->assign('message', $this->getMessage());
- $tmpl->assign('code', $this->getCode());
- $tmpl->assign('file', $this->getFile());
- $tmpl->assign('line', $this->getLine());
- $tmpl->assign('sysinfo', $this->generatesysinfo());
- $tmpl->printPage();
- }
-}
-
-function oc_exceptionhandler($exception){
- switch($exception->getCode()){
- case E_NOTICE:
- case E_DEPRECATED:
- case E_USER_NOTICE:
- case E_USER_DEPRECATED:
- break;
- default:
- throw new OC_Exception($exception->getMessage(), $exception->getCode(), $exception->getFile(), $exception->getLine());
- break;
- }
- return true;
-}
-
-function oc_errorhandler($errno , $errstr , $errfile , $errline){
- switch($errno){
- case E_NOTICE:
- case E_DEPRECATED:
- case E_USER_NOTICE:
- case E_USER_DEPRECATED:
- break;
- default:
- throw new OC_Exception($errstr, $errno, $errfile, $errline);
- break;
- }
- return true;
-}
-set_exception_handler('oc_exceptionhandler');
-set_error_handler('oc_errorhandler');
-error_reporting(E_ERROR | E_WARNING | E_PARSE); \ No newline at end of file
diff --git a/lib/filecache.php b/lib/filecache.php
index 8211637d141..352fc695f30 100644
--- a/lib/filecache.php
+++ b/lib/filecache.php
@@ -65,19 +65,27 @@ class OC_FileCache{
if($root===false){
$root=OC_Filesystem::getRoot();
}
- $path=$root.$path;
- $parent=self::getParentId($path);
- $id=self::getId($path,'');
- if(isset(OC_FileCache_Cached::$savedData[$path])){
- $data=array_merge(OC_FileCache_Cached::$savedData[$path],$data);
- unset(OC_FileCache_Cached::$savedData[$path]);
+ $fullpath=$root.$path;
+ $parent=self::getParentId($fullpath);
+ $id=self::getId($fullpath,'');
+ if(isset(OC_FileCache_Cached::$savedData[$fullpath])){
+ $data=array_merge(OC_FileCache_Cached::$savedData[$fullpath],$data);
+ unset(OC_FileCache_Cached::$savedData[$fullpath]);
}
if($id!=-1){
self::update($id,$data);
return;
}
+
+ // add parent directory to the file cache if it does not exist yet.
+ if ($parent == -1 && $fullpath != $root) {
+ $parentDir = substr(dirname($path), 0, strrpos(dirname($path), DIRECTORY_SEPARATOR));
+ self::scanFile($parentDir);
+ $parent = self::getParentId($fullpath);
+ }
+
if(!isset($data['size']) or !isset($data['mtime'])){//save incomplete data for the next time we write it
- OC_FileCache_Cached::$savedData[$path]=$data;
+ OC_FileCache_Cached::$savedData[$fullpath]=$data;
return;
}
if(!isset($data['encrypted'])){
@@ -94,13 +102,13 @@ class OC_FileCache{
$data['versioned']=(int)$data['versioned'];
$user=OC_User::getUser();
$query=OC_DB::prepare('INSERT INTO *PREFIX*fscache(parent, name, path, path_hash, size, mtime, ctime, mimetype, mimepart,`user`,writable,encrypted,versioned) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)');
- $result=$query->execute(array($parent,basename($path),$path,md5($path),$data['size'],$data['mtime'],$data['ctime'],$data['mimetype'],$mimePart,$user,$data['writable'],$data['encrypted'],$data['versioned']));
+ $result=$query->execute(array($parent,basename($fullpath),$fullpath,md5($fullpath),$data['size'],$data['mtime'],$data['ctime'],$data['mimetype'],$mimePart,$user,$data['writable'],$data['encrypted'],$data['versioned']));
if(OC_DB::isError($result)){
- OC_Log::write('files','error while writing file('.$path.') to cache',OC_Log::ERROR);
+ OC_Log::write('files','error while writing file('.$fullpath.') to cache',OC_Log::ERROR);
}
if($cache=OC_Cache::getUserCache(true)){
- $cache->remove('fileid/'.$path);//ensure we don't have -1 cached
+ $cache->remove('fileid/'.$fullpath);//ensure we don't have -1 cached
}
}
@@ -343,7 +351,7 @@ class OC_FileCache{
* @param string $path
* @param OC_EventSource $enventSource (optional)
* @param int count (optional)
- * @param string root (optionak)
+ * @param string root (optional)
*/
public static function scan($path,$eventSource=false,&$count=0,$root=false){
if($eventSource){
diff --git a/lib/filecache/update.php b/lib/filecache/update.php
index 93b632acb4e..0b5ff8e2446 100644
--- a/lib/filecache/update.php
+++ b/lib/filecache/update.php
@@ -152,8 +152,8 @@ class OC_FileCache_Update{
$size=0;
$cached=OC_FileCache_Cached::get($path,$root);
$cachedSize=isset($cached['size'])?$cached['size']:0;
-
- if($mimetype=='httpd/unix-directory'){
+
+ if($view->is_dir($path.'/')){
if(OC_FileCache::inCache($path,$root)){
$cachedContent=OC_FileCache_Cached::getFolderContent($path,$root);
foreach($cachedContent as $file){
diff --git a/lib/helper.php b/lib/helper.php
index 666bc6badfc..8c362747a27 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -65,52 +65,6 @@ class OC_Helper {
}
/**
- * @brief Returns the server host
- * @returns the server host
- *
- * Returns the server host, even if the website uses one or more
- * reverse proxies
- */
- public static function serverHost() {
- if(OC::$CLI){
- return 'localhost';
- }
- if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
- if (strpos($_SERVER['HTTP_X_FORWARDED_HOST'], ",") !== false) {
- $host = trim(array_pop(explode(",", $_SERVER['HTTP_X_FORWARDED_HOST'])));
- }
- else{
- $host=$_SERVER['HTTP_X_FORWARDED_HOST'];
- }
- }
- else{
- $host = $_SERVER['HTTP_HOST'];
- }
- return $host;
- }
-
-
- /**
- * @brief Returns the server protocol
- * @returns the server protocol
- *
- * Returns the server protocol. It respects reverse proxy servers and load balancers
- */
- public static function serverProtocol() {
- if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
- $proto = strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']);
- }else{
- if(isset($_SERVER['HTTPS']) and !empty($_SERVER['HTTPS']) and ($_SERVER['HTTPS']!='off')) {
- $proto = 'https';
- }else{
- $proto = 'http';
- }
- }
- return($proto);
- }
-
-
- /**
* @brief Creates an absolute url
* @param $app app
* @param $file file
@@ -120,8 +74,19 @@ class OC_Helper {
*/
public static function linkToAbsolute( $app, $file ) {
$urlLinkTo = self::linkTo( $app, $file );
- $urlLinkTo = self::serverProtocol(). '://' . self::serverHost() . $urlLinkTo;
- return $urlLinkTo;
+ return self::makeURLAbsolute($urlLinkTo);
+ }
+
+ /**
+ * @brief Makes an $url absolute
+ * @param $url the url
+ * @returns the absolute url
+ *
+ * Returns a absolute url to the given app and file.
+ */
+ public static function makeURLAbsolute( $url )
+ {
+ return OC_Request::serverProtocol(). '://' . OC_Request::serverHost() . $url;
}
/**
diff --git a/lib/public/util.php b/lib/public/util.php
index 75ca29f7129..9f6f6f32e1e 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -165,7 +165,7 @@ class Util {
* reverse proxies
*/
public static function getServerHost() {
- return(\OC_Helper::serverHost());
+ return(\OC_Request::serverHost());
}
/**
@@ -175,7 +175,7 @@ class Util {
* Returns the server protocol. It respects reverse proxy servers and load balancers
*/
public static function getServerProtocol() {
- return(\OC_Helper::serverProtocol());
+ return(\OC_Request::serverProtocol());
}
/**
diff --git a/lib/request.php b/lib/request.php
index 0b5aaf8ef30..3fe61fbddcd 100644
--- a/lib/request.php
+++ b/lib/request.php
@@ -7,6 +7,79 @@
*/
class OC_Request {
+ /**
+ * @brief Returns the server host
+ * @returns the server host
+ *
+ * Returns the server host, even if the website uses one or more
+ * reverse proxies
+ */
+ public static function serverHost() {
+ if(OC::$CLI){
+ return 'localhost';
+ }
+ if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
+ if (strpos($_SERVER['HTTP_X_FORWARDED_HOST'], ",") !== false) {
+ $host = trim(array_pop(explode(",", $_SERVER['HTTP_X_FORWARDED_HOST'])));
+ }
+ else{
+ $host=$_SERVER['HTTP_X_FORWARDED_HOST'];
+ }
+ }
+ else{
+ $host = $_SERVER['HTTP_HOST'];
+ }
+ return $host;
+ }
+
+
+ /**
+ * @brief Returns the server protocol
+ * @returns the server protocol
+ *
+ * Returns the server protocol. It respects reverse proxy servers and load balancers
+ */
+ public static function serverProtocol() {
+ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
+ $proto = strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']);
+ }else{
+ if(isset($_SERVER['HTTPS']) and !empty($_SERVER['HTTPS']) and ($_SERVER['HTTPS']!='off')) {
+ $proto = 'https';
+ }else{
+ $proto = 'http';
+ }
+ }
+ return($proto);
+ }
+
+ /**
+ * @brief get Path info from request
+ * @returns string Path info or false when not found
+ */
+ public static function getPathInfo() {
+ if (array_key_exists('PATH_INFO', $_SERVER)){
+ $path_info = $_SERVER['PATH_INFO'];
+ }else{
+ $path_info = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME']));
+ // following is taken from Sabre_DAV_URLUtil::decodePathSegment
+ $path_info = rawurldecode($path_info);
+ $encoding = mb_detect_encoding($path_info, array('UTF-8','ISO-8859-1'));
+
+ switch($encoding) {
+
+ case 'ISO-8859-1' :
+ $path_info = utf8_encode($path_info);
+
+ }
+ // end copy
+ }
+ return $path_info;
+ }
+
+ /**
+ * @brief Check if this is a no-cache request
+ * @returns true for no-cache
+ */
static public function isNoCache() {
if (!isset($_SERVER['HTTP_CACHE_CONTROL'])) {
return false;
@@ -14,6 +87,10 @@ class OC_Request {
return $_SERVER['HTTP_CACHE_CONTROL'] == 'no-cache';
}
+ /**
+ * @brief Check if the requestor understands gzip
+ * @returns true for gzip encoding supported
+ */
static public function acceptGZip() {
if (!isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {
return false;
diff --git a/lib/util.php b/lib/util.php
index f26fa63e446..4c5d416f9f2 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -348,7 +348,7 @@ class OC_Util {
else {
$defaultpage = OC_Appconfig::getValue('core', 'defaultpage');
if ($defaultpage) {
- $location = OC_Helper::serverProtocol().'://'.OC_Helper::serverHost().OC::$WEBROOT.'/'.$defaultpage;
+ $location = OC_Helper::makeURLAbsolute(OC::$WEBROOT.'/'.$defaultpage);
}
else {
$location = OC_Helper::linkToAbsolute( 'files', 'index.php' );
@@ -476,7 +476,7 @@ class OC_Util {
@fclose($fp);
// accessing the file via http
- $url = OC_Helper::serverProtocol(). '://' . OC_Helper::serverHost() . OC::$WEBROOT.'/data'.$filename;
+ $url = OC_Helper::makeURLAbsolute(OC::$WEBROOT.'/data'.$filename);
$fp = @fopen($url, 'r');
$content=@fread($fp, 2048);
@fclose($fp);
diff --git a/public.php b/public.php
index 8383f36a246..0581631f41f 100644
--- a/public.php
+++ b/public.php
@@ -1,5 +1,4 @@
<?php
-$RUNTIME_NOSETUPFS = true;
$RUNTIME_NOAPPS = TRUE;
require_once('lib/base.php');
$file = OCP\CONFIG::getAppValue('core', 'public_' . strip_tags($_GET['service']));
diff --git a/remote.php b/remote.php
index 8dc4df1bd23..41d2a7ab349 100644
--- a/remote.php
+++ b/remote.php
@@ -1,12 +1,7 @@
<?php
-$RUNTIME_NOSETUPFS = true;
$RUNTIME_NOAPPS = TRUE;
require_once('lib/base.php');
-if (array_key_exists('PATH_INFO', $_SERVER)){
- $path_info = $_SERVER['PATH_INFO'];
-}else{
- $path_info = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME']));
-}
+$path_info = OC_Request::getPathInfo();
if ($path_info === false) {
OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
exit;
diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php
index 2917f8a84c4..c868bc278c3 100644
--- a/settings/l10n/ca.php
+++ b/settings/l10n/ca.php
@@ -1,10 +1,12 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "No s'ha pogut carregar la llista des de l'App Store",
"Email saved" => "S'ha desat el correu electrònic",
"Invalid email" => "El correu electrònic no és vàlid",
"OpenID Changed" => "OpenID ha canviat",
"Invalid request" => "Sol.licitud no vàlida",
"Authentication error" => "Error d'autenticació",
"Language changed" => "S'ha canviat l'idioma",
+"Error" => "Error",
"Disable" => "Desactiva",
"Enable" => "Activa",
"Saving..." => "S'està desant...",
diff --git a/settings/l10n/de.php b/settings/l10n/de.php
index 5610a4ec03a..e0cb1259537 100644
--- a/settings/l10n/de.php
+++ b/settings/l10n/de.php
@@ -1,10 +1,12 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Liste der Apps im Store konnte nicht geladen werden.",
"Email saved" => "E-Mail gespeichert",
"Invalid email" => "Ungültige E-Mail",
"OpenID Changed" => "OpenID geändert",
"Invalid request" => "Ungültige Anfrage",
"Authentication error" => "Anmeldungsfehler",
"Language changed" => "Sprache geändert",
+"Error" => "Fehler",
"Disable" => "Deaktivieren",
"Enable" => "Aktivieren",
"Saving..." => "Speichern...",
@@ -19,7 +21,7 @@
"by" => "von",
"Documentation" => "Dokumentation",
"Managing Big Files" => "Große Dateien verwalten",
-"Ask a question" => "Stell' eine Frage",
+"Ask a question" => "Stell eine Frage",
"Problems connecting to help database." => "Probleme bei der Verbindung zur Hilfe-Datenbank.",
"Go there manually." => "Datenbank direkt besuchen.",
"Answer" => "Antwort",
diff --git a/settings/l10n/fa.php b/settings/l10n/fa.php
index b5345972acc..5fe6df4d9d9 100644
--- a/settings/l10n/fa.php
+++ b/settings/l10n/fa.php
@@ -4,10 +4,12 @@
"OpenID Changed" => "OpenID تغییر کرد",
"Invalid request" => "درخواست غیر قابل قبول",
"Language changed" => "زبان تغییر کرد",
+"Error" => "خطا",
"Disable" => "غیرفعال",
"Enable" => "فعال",
"Saving..." => "درحال ذخیره ...",
"__language_name__" => "__language_name__",
+"Security Warning" => "اخطار امنیتی",
"Log" => "کارنامه",
"More" => "بیشتر",
"Add your App" => "برنامه خود را بیافزایید",
diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php
index 4fbdca8024a..81d1b9d0e61 100644
--- a/settings/l10n/fi_FI.php
+++ b/settings/l10n/fi_FI.php
@@ -5,6 +5,7 @@
"Invalid request" => "Virheellinen pyyntö",
"Authentication error" => "Todennusvirhe",
"Language changed" => "Kieli on vaihdettu",
+"Error" => "Virhe",
"Disable" => "Poista käytöstä",
"Enable" => "Käytä",
"Saving..." => "Tallennetaan...",
diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php
index 8ddfcc7f97a..1c2f94620ff 100644
--- a/settings/l10n/fr.php
+++ b/settings/l10n/fr.php
@@ -1,10 +1,12 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Impossible de charger la liste depuis l'App Store",
"Email saved" => "E-mail sauvegardé",
"Invalid email" => "E-mail invalide",
"OpenID Changed" => "Identifiant OpenID changé",
"Invalid request" => "Requête invalide",
"Authentication error" => "Erreur d'authentification",
"Language changed" => "Langue changée",
+"Error" => "Erreur",
"Disable" => "Désactiver",
"Enable" => "Activer",
"Saving..." => "Sauvegarde...",