Merge branch 'master' into fix_3728_with_file_exists_dialog

Conflicts:
	apps/files/css/files.css
	apps/files/js/file-upload.js
	apps/files/js/filelist.js
	apps/files/js/files.js
	apps/files_sharing/js/public.js
	core/js/jquery.ocdialog.js
	core/js/oc-dialogs.js
This commit is contained in:
Jörn Friedrich Dreyer 2013-09-17 19:10:46 +02:00
commit b59ce403d8
546 changed files with 22446 additions and 8757 deletions

View File

@ -10,35 +10,38 @@ OCP\JSON::checkLoggedIn();
// Load the files
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
if (!\OC\Files\Filesystem::is_dir($dir . '/')) {
header("HTTP/1.0 404 Not Found");
exit();
}
$doBreadcrumb = isset($_GET['breadcrumb']);
$data = array();
$baseUrl = OCP\Util::linkTo('files', 'index.php') . '?dir=';
$permissions = \OCA\files\lib\Helper::getDirPermissions($dir);
// Make breadcrumb
if($doBreadcrumb) {
$breadcrumb = array();
$pathtohere = "/";
foreach( explode( "/", $dir ) as $i ) {
if( $i != "" ) {
$pathtohere .= "$i/";
$breadcrumb[] = array( "dir" => $pathtohere, "name" => $i );
}
}
$breadcrumb = \OCA\files\lib\Helper::makeBreadcrumb($dir);
$breadcrumbNav = new OCP\Template( "files", "part.breadcrumb", "" );
$breadcrumbNav->assign( "breadcrumb", $breadcrumb, false );
$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
$breadcrumbNav->assign('baseURL', $baseUrl);
$data['breadcrumb'] = $breadcrumbNav->fetchPage();
}
// make filelist
$files = array();
foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $i ) {
$i["date"] = OCP\Util::formatDate($i["mtime"] );
$files[] = $i;
}
$files = \OCA\files\lib\Helper::getFiles($dir);
$list = new OCP\Template( "files", "part.list", "" );
$list->assign( "files", $files, false );
$data = array('files' => $list->fetchPage());
$list = new OCP\Template("files", "part.list", "");
$list->assign('files', $files, false);
$list->assign('baseURL', $baseUrl, false);
$list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/')));
$list->assign('isPublic', false);
$data['files'] = $list->fetchPage();
$data['permissions'] = $permissions;
OCP\JSON::success(array('data' => $data));

View File

@ -11,22 +11,54 @@ OCP\JSON::checkLoggedIn();
// Load the files
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
$mimetype = isset($_GET['mimetype']) ? $_GET['mimetype'] : '';
$mimetypes = isset($_GET['mimetypes']) ? json_decode($_GET['mimetypes'], true) : '';
// Clean up duplicates from array and deal with non-array requests
if (is_array($mimetypes)) {
$mimetypes = array_unique($mimetypes);
} elseif (is_null($mimetypes)) {
$mimetypes = array($_GET['mimetypes']);
}
// make filelist
$files = array();
// If a type other than directory is requested first load them.
if($mimetype && strpos($mimetype, 'httpd/unix-directory') === false) {
foreach( \OC\Files\Filesystem::getDirectoryContent( $dir, 'httpd/unix-directory' ) as $i ) {
$i["date"] = OCP\Util::formatDate($i["mtime"] );
$i['mimetype_icon'] = $i['type'] == 'dir' ? \mimetype_icon('dir'): \mimetype_icon($i['mimetype']);
$files[] = $i;
if($mimetypes && !in_array('httpd/unix-directory', $mimetypes)) {
foreach( \OC\Files\Filesystem::getDirectoryContent( $dir, 'httpd/unix-directory' ) as $file ) {
$file['directory'] = $dir;
$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
$file["date"] = OCP\Util::formatDate($file["mtime"]);
$file['mimetype_icon'] = \OCA\files\lib\Helper::determineIcon($file);
$files[] = $file;
}
}
foreach( \OC\Files\Filesystem::getDirectoryContent( $dir, $mimetype ) as $i ) {
$i["date"] = OCP\Util::formatDate($i["mtime"] );
$i['mimetype_icon'] = $i['type'] == 'dir' ? \mimetype_icon('dir'): \mimetype_icon($i['mimetype']);
$files[] = $i;
if (is_array($mimetypes) && count($mimetypes)) {
foreach ($mimetypes as $mimetype) {
foreach( \OC\Files\Filesystem::getDirectoryContent( $dir, $mimetype ) as $file ) {
$file['directory'] = $dir;
$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
$file["date"] = OCP\Util::formatDate($file["mtime"]);
$file['mimetype_icon'] = \OCA\files\lib\Helper::determineIcon($file);
$files[] = $file;
}
}
} else {
foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $file ) {
$file['directory'] = $dir;
$file['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($file['mimetype']);
$file["date"] = OCP\Util::formatDate($file["mtime"]);
$file['mimetype_icon'] = \OCA\files\lib\Helper::determineIcon($file);
$files[] = $file;
}
}
OCP\JSON::success(array('data' => $files));
// Sort by name
usort($files, function ($a, $b) {
if ($a['name'] === $b['name']) {
return 0;
}
return ($a['name'] < $b['name']) ? -1 : 1;
});
OC_JSON::success(array('data' => $files));

View File

@ -336,6 +336,27 @@ table.dragshadow td.size {
text-align: center;
margin-left: -200px;
}
.mask {
z-index: 50;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: white;
background-repeat: no-repeat no-repeat;
background-position: 50%;
opacity: 0.7;
filter: alpha(opacity=70);
transition: opacity 100ms;
-moz-transition: opacity 100ms;
-o-transition: opacity 100ms;
-ms-transition: opacity 100ms;
-webkit-transition: opacity 100ms;
}
.mask.transparent{
opacity: 0;
}
.oc-dialog .fileexists table {
width: 100%;

View File

@ -41,79 +41,58 @@ if (!\OC\Files\Filesystem::is_dir($dir . '/')) {
exit();
}
function fileCmp($a, $b) {
if ($a['type'] == 'dir' and $b['type'] != 'dir') {
return -1;
} elseif ($a['type'] != 'dir' and $b['type'] == 'dir') {
return 1;
} else {
return strnatcasecmp($a['name'], $b['name']);
}
$isIE8 = false;
preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
if (count($matches) > 0 && $matches[1] <= 8){
$isIE8 = true;
}
// if IE8 and "?dir=path" was specified, reformat the URL to use a hash like "#?dir=path"
if ($isIE8 && isset($_GET['dir'])){
if ($dir === ''){
$dir = '/';
}
header('Location: ' . OCP\Util::linkTo('files', 'index.php') . '#?dir=' . \OCP\Util::encodePath($dir));
exit();
}
$ajaxLoad = false;
$files = array();
$user = OC_User::getUser();
if (\OC\Files\Cache\Upgrade::needUpgrade($user)) { //dont load anything if we need to upgrade the cache
$content = array();
$needUpgrade = true;
$freeSpace = 0;
} else {
$content = \OC\Files\Filesystem::getDirectoryContent($dir);
if ($isIE8){
// after the redirect above, the URL will have a format
// like "files#?dir=path" which means that no path was given
// (dir is not set). In that specific case, we don't return any
// files because the client will take care of switching the dir
// to the one from the hash, then ajax-load the initial file list
$files = array();
$ajaxLoad = true;
}
else{
$files = \OCA\files\lib\Helper::getFiles($dir);
}
$freeSpace = \OC\Files\Filesystem::free_space($dir);
$needUpgrade = false;
}
foreach ($content as $i) {
$i['date'] = OCP\Util::formatDate($i['mtime']);
if ($i['type'] == 'file') {
$fileinfo = pathinfo($i['name']);
$i['basename'] = $fileinfo['filename'];
if (!empty($fileinfo['extension'])) {
$i['extension'] = '.' . $fileinfo['extension'];
} else {
$i['extension'] = '';
}
}
$i['directory'] = $dir;
$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($i['mimetype']);
$files[] = $i;
}
usort($files, "fileCmp");
// Make breadcrumb
$breadcrumb = array();
$pathtohere = '';
foreach (explode('/', $dir) as $i) {
if ($i != '') {
$pathtohere .= '/' . $i;
$breadcrumb[] = array('dir' => $pathtohere, 'name' => $i);
}
}
$breadcrumb = \OCA\files\lib\Helper::makeBreadcrumb($dir);
// make breadcrumb und filelist markup
$list = new OCP\Template('files', 'part.list', '');
$list->assign('files', $files);
$list->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
$list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/')));
$list->assign('disableSharing', false);
$list->assign('isPublic', false);
$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb);
$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
$permissions = OCP\PERMISSION_READ;
if (\OC\Files\Filesystem::isCreatable($dir . '/')) {
$permissions |= OCP\PERMISSION_CREATE;
}
if (\OC\Files\Filesystem::isUpdatable($dir . '/')) {
$permissions |= OCP\PERMISSION_UPDATE;
}
if (\OC\Files\Filesystem::isDeletable($dir . '/')) {
$permissions |= OCP\PERMISSION_DELETE;
}
if (\OC\Files\Filesystem::isSharable($dir . '/')) {
$permissions |= OCP\PERMISSION_SHARE;
}
$permissions = \OCA\files\lib\Helper::getDirPermissions($dir);
if ($needUpgrade) {
OCP\Util::addscript('files', 'upgrade');
@ -153,5 +132,7 @@ if ($needUpgrade) {
$tmpl->assign('isPublic', false);
$tmpl->assign('publicUploadEnabled', $publicUploadEnabled);
$tmpl->assign("encryptedFiles", \OCP\Util::encryptedFiles());
$tmpl->assign('disableSharing', false);
$tmpl->assign('ajaxLoad', $ajaxLoad);
$tmpl->printPage();
}

View File

@ -298,8 +298,15 @@ $(document).ready(function() {
start: function(e) {
OC.Upload.logStatus('start', e, null);
},
submit: function (e, data) {
submit: function(e, data) {
OC.Upload.rememberUpload(data);
if ( ! data.formData ) {
// noone set update parameters, we set the minimum
data.formData = {
requesttoken: oc_requesttoken,
dir: $('#dir').val()
};
}
},
fail: function(e, data) {
OC.Upload.logStatus('fail', e, data);
@ -421,9 +428,7 @@ $(document).ready(function() {
// http://stackoverflow.com/a/6700/11236
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
size++;
}
if (obj.hasOwnProperty(key)) size++;
}
return size;
};

View File

@ -196,13 +196,12 @@ FileActions.register('all', 'Rename', OC.PERMISSION_UPDATE, function () {
FileList.rename(filename);
});
FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename) {
var dir = $('#dir').val();
var dir = $('#dir').val() || '/';
if (dir !== '/') {
dir = dir + '/';
}
window.location = OC.linkTo('files', 'index.php') + '?dir=' + encodeURIComponent(dir + filename);
FileList.changeDirectory(dir + filename);
});
FileActions.setDefault('dir', 'Open');

View File

@ -1,7 +1,28 @@
var FileList={
useUndo:true,
postProcessList: function(){
$('#fileList tr').each(function(){
//little hack to set unescape filenames in attribute
$(this).attr('data-file',decodeURIComponent($(this).attr('data-file')));
});
},
update:function(fileListHtml) {
$('#fileList').empty().html(fileListHtml);
var $fileList = $('#fileList'),
permissions = $('#permissions').val(),
isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0;
$fileList.empty().html(fileListHtml);
$('#emptycontent').toggleClass('hidden', !isCreatable || $fileList.find('tr').length > 0);
$fileList.find('tr').each(function () {
FileActions.display($(this).children('td.filename'));
});
$fileList.trigger(jQuery.Event("fileActionsReady"));
FileList.postProcessList();
// "Files" might not be loaded in extending apps
if (window.Files){
Files.setupDragAndDrop();
}
FileList.updateFileSummary();
$fileList.trigger(jQuery.Event("updated"));
},
createRow:function(type, name, iconurl, linktarget, size, lastModified, permissions){
var td, simpleSize, basename, extension;
@ -24,20 +45,20 @@ var FileList={
"href": linktarget
});
//split extension from filename for non dirs
if (type !== 'dir' && name.indexOf('.')!==-1) {
basename = name.substr(0,name.lastIndexOf('.'));
extension = name.substr(name.lastIndexOf('.'));
if (type != 'dir' && name.indexOf('.')!=-1) {
basename=name.substr(0,name.lastIndexOf('.'));
extension=name.substr(name.lastIndexOf('.'));
} else {
basename = name;
extension = false;
basename=name;
extension=false;
}
var name_span = $('<span></span>').addClass('nametext').text(basename);
var name_span=$('<span></span>').addClass('nametext').text(basename);
link_elem.append(name_span);
if(extension){
name_span.append($('<span></span>').addClass('extension').text(extension));
}
//dirs can show the number of uploaded files
if (type === 'dir') {
if (type == 'dir') {
link_elem.append($('<span></span>').attr({
'class': 'uploadtext',
'currentUploads': 0
@ -47,10 +68,10 @@ var FileList={
tr.append(td);
//size column
if (size!==t('files', 'Pending')) {
if(size!=t('files', 'Pending')){
simpleSize = humanFileSize(size);
} else {
simpleSize = t('files', 'Pending');
}else{
simpleSize=t('files', 'Pending');
}
var sizeColor = Math.round(160-Math.pow((size/(1024*1024)),2));
var lastModifiedTime = Math.round(lastModified.getTime() / 1000);
@ -101,9 +122,9 @@ var FileList={
);
FileList.insertElement(name, 'file', tr);
if (loading) {
if(loading){
tr.data('loading',true);
} else {
}else{
tr.find('td.filename').draggable(dragOptions);
}
if (hidden) {
@ -134,20 +155,109 @@ var FileList={
FileActions.display(tr.find('td.filename'));
return tr;
},
refresh:function(data) {
var result = jQuery.parseJSON(data.responseText);
if(typeof(result.data.breadcrumb) !== 'undefined'){
updateBreadcrumb(result.data.breadcrumb);
/**
* @brief Changes the current directory and reload the file list.
* @param targetDir target directory (non URL encoded)
* @param changeUrl false if the URL must not be changed (defaults to true)
*/
changeDirectory: function(targetDir, changeUrl, force){
var $dir = $('#dir'),
url,
currentDir = $dir.val() || '/';
targetDir = targetDir || '/';
if (!force && currentDir === targetDir){
return;
}
FileList.setCurrentDir(targetDir, changeUrl);
FileList.reload();
},
linkTo: function(dir){
return OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/');
},
setCurrentDir: function(targetDir, changeUrl){
$('#dir').val(targetDir);
if (changeUrl !== false){
if (window.history.pushState && changeUrl !== false){
url = FileList.linkTo(targetDir);
window.history.pushState({dir: targetDir}, '', url);
}
// use URL hash for IE8
else{
window.location.hash = '?dir='+ encodeURIComponent(targetDir).replace(/%2F/g, '/');
}
}
},
/**
* @brief Reloads the file list using ajax call
*/
reload: function(){
FileList.showMask();
if (FileList._reloadCall){
FileList._reloadCall.abort();
}
FileList._reloadCall = $.ajax({
url: OC.filePath('files','ajax','list.php'),
data: {
dir : $('#dir').val(),
breadcrumb: true
},
error: function(result){
FileList.reloadCallback(result);
},
success: function(result) {
FileList.reloadCallback(result);
}
});
},
reloadCallback: function(result){
var $controls = $('#controls');
delete FileList._reloadCall;
FileList.hideMask();
if (!result || result.status === 'error') {
OC.Notification.show(result.data.message);
return;
}
if (result.status === 404){
// go back home
FileList.changeDirectory('/');
return;
}
if (result.data.permissions){
FileList.setDirectoryPermissions(result.data.permissions);
}
if(typeof(result.data.breadcrumb) != 'undefined'){
$controls.find('.crumb').remove();
$controls.prepend(result.data.breadcrumb);
var width = $(window).width();
Files.initBreadCrumbs();
Files.resizeBreadcrumbs(width, true);
// in case svg is not supported by the browser we need to execute the fallback mechanism
if(!SVGSupport()) {
replaceSVG();
}
}
FileList.update(result.data.files);
resetFileActionPanel();
},
setDirectoryPermissions: function(permissions){
var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0;
$('#permissions').val(permissions);
$('.creatable').toggleClass('hidden', !isCreatable);
$('.notCreatable').toggleClass('hidden', isCreatable);
},
remove:function(name){
$('tr').filterAttr('data-file',name).find('td.filename').draggable('destroy');
$('tr').filterAttr('data-file',name).remove();
FileList.updateFileSummary();
if($('tr[data-file]').length===0){
$('#emptycontent').show();
if($('tr[data-file]').length==0){
$('#emptycontent').removeClass('hidden');
}
},
insertElement:function(name,type,element){
@ -165,19 +275,19 @@ var FileList={
}
}
if(fileElements.length){
if(pos===-1){
if(pos==-1){
$(fileElements[0]).before(element);
}else{
$(fileElements[pos]).after(element);
}
}else if(type==='dir' && $('tr[data-file]').length>0){
}else if(type=='dir' && $('tr[data-file]').length>0){
$('tr[data-file]').first().before(element);
} else if(type==='file' && $('tr[data-file]').length>0) {
} else if(type=='file' && $('tr[data-file]').length>0) {
$('tr[data-file]').last().before(element);
}else{
$('#fileList').append(element);
}
$('#emptycontent').hide();
$('#emptycontent').addClass('hidden');
FileList.updateFileSummary();
},
loadingDone:function(name, id){
@ -185,7 +295,7 @@ var FileList={
tr.data('loading',false);
mime=tr.data('mime');
tr.attr('data-mime',mime);
if (id) {
if (id != null) {
tr.attr('data-id', id);
}
var path = getPathForPreview(name);
@ -221,7 +331,7 @@ var FileList={
var newname=input.val();
if (!Files.isFileNameValid(newname)) {
return false;
} else if (newname !== name) {
} else if (newname != name) {
if (FileList.checkName(name, newname, false)) {
newname = name;
} else {
@ -269,14 +379,14 @@ var FileList={
tr.attr('data-file', newname);
var path = td.children('a.name').attr('href');
td.children('a.name').attr('href', path.replace(encodeURIComponent(name), encodeURIComponent(newname)));
if (newname.indexOf('.') > 0 && tr.data('type') !== 'dir') {
if (newname.indexOf('.') > 0 && tr.data('type') != 'dir') {
var basename=newname.substr(0,newname.lastIndexOf('.'));
} else {
var basename=newname;
}
td.find('a.name span.nametext').text(basename);
if (newname.indexOf('.') > 0 && tr.data('type') !== 'dir') {
if (td.find('a.name span.extension').length === 0 ) {
if (newname.indexOf('.') > 0 && tr.data('type') != 'dir') {
if (td.find('a.name span.extension').length == 0 ) {
td.find('a.name span.nametext').append('<span class="extension"></span>');
}
td.find('a.name span.extension').text(newname.substr(newname.lastIndexOf('.')));
@ -286,7 +396,7 @@ var FileList={
return false;
});
input.keyup(function(event){
if (event.keyCode === 27) {
if (event.keyCode == 27) {
tr.data('renaming',false);
form.remove();
td.children('a.name').show();
@ -312,7 +422,7 @@ var FileList={
html.attr('data-oldName', oldName);
html.attr('data-newName', newName);
html.attr('data-isNewFile', isNewFile);
OC.Notification.showHtml(html);
OC.Notification.showHtml(html);
return true;
} else {
return false;
@ -351,13 +461,13 @@ var FileList={
FileList.finishReplace();
};
if (!isNewFile) {
OC.Notification.showHtml(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+'<span class="undo">'+t('files', 'undo')+'</span>');
OC.Notification.showHtml(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+'<span class="undo">'+t('files', 'undo')+'</span>');
}
},
finishReplace:function() {
if (!FileList.replaceCanceled && FileList.replaceOldName && FileList.replaceNewName) {
$.ajax({url: OC.filePath('files', 'ajax', 'rename.php'), async: false, data: { dir: $('#dir').val(), newname: FileList.replaceNewName, file: FileList.replaceOldName }, success: function(result) {
if (result && result.status === 'success') {
if (result && result.status == 'success') {
$('tr').filterAttr('data-replace', 'true').removeAttr('data-replace');
} else {
OC.dialogs.alert(result.data.message, 'Error moving file');
@ -386,7 +496,7 @@ var FileList={
$.post(OC.filePath('files', 'ajax', 'delete.php'),
{dir:$('#dir').val(),files:fileNames},
function(result){
if (result.status === 'success') {
if (result.status == 'success') {
$.each(files,function(index,file){
var files = $('tr').filterAttr('data-file',file);
files.remove();
@ -427,7 +537,7 @@ var FileList={
var infoVars = {
dirs: '<span class="dirinfo">'+directoryInfo+'</span><span class="connector">',
files: '</span><span class="fileinfo">'+fileInfo+'</span>'
};
}
var info = t('files', '{dirs} and {files}', infoVars);
@ -508,6 +618,31 @@ var FileList={
$connector.show();
}
}
},
showMask: function(){
// in case one was shown before
var $mask = $('#content .mask');
if ($mask.length){
return;
}
$mask = $('<div class="mask transparent"></div>');
$mask.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
$mask.css('background-repeat', 'no-repeat');
$('#content').append($mask);
// block UI, but only make visible in case loading takes longer
FileList._maskTimeout = window.setTimeout(function(){
// reset opacity
$mask.removeClass('transparent');
}, 250);
},
hideMask: function(){
var $mask = $('#content .mask').remove();
if (FileList._maskTimeout){
window.clearTimeout(FileList._maskTimeout);
}
}
};
@ -696,16 +831,16 @@ $(document).ready(function(){
FileList.replaceIsNewFile = null;
}
FileList.lastAction = null;
OC.Notification.hide();
OC.Notification.hide();
});
$('#notification:first-child').on('click', '.replace', function() {
OC.Notification.hide(function() {
FileList.replace($('#notification > span').attr('data-oldName'), $('#notification > span').attr('data-newName'), $('#notification > span').attr('data-isNewFile'));
});
OC.Notification.hide(function() {
FileList.replace($('#notification > span').attr('data-oldName'), $('#notification > span').attr('data-newName'), $('#notification > span').attr('data-isNewFile'));
});
});
$('#notification:first-child').on('click', '.suggest', function() {
$('tr').filterAttr('data-file', $('#notification > span').attr('data-oldName')).show();
OC.Notification.hide();
OC.Notification.hide();
});
$('#notification:first-child').on('click', '.cancel', function() {
if ($('#notification > span').attr('data-isNewFile')) {
@ -723,5 +858,55 @@ $(document).ready(function(){
$(window).trigger('beforeunload');
});
function parseHashQuery(){
var hash = window.location.hash,
pos = hash.indexOf('?'),
query;
if (pos >= 0){
return hash.substr(pos + 1);
}
return '';
}
function parseCurrentDirFromUrl(){
var query = parseHashQuery(),
params,
dir = '/';
// try and parse from URL hash first
if (query){
params = OC.parseQueryString(query);
}
// else read from query attributes
if (!params){
params = OC.parseQueryString(location.search);
}
return (params && params.dir) || '/';
}
// fallback to hashchange when no history support
if (!window.history.pushState){
$(window).on('hashchange', function(){
FileList.changeDirectory(parseCurrentDirFromUrl(), false);
});
}
window.onpopstate = function(e){
var targetDir;
if (e.state && e.state.dir){
targetDir = e.state.dir;
}
else{
// read from URL
targetDir = parseCurrentDirFromUrl();
}
if (targetDir){
FileList.changeDirectory(targetDir, false);
}
}
if (parseInt($('#ajaxLoad').val(), 10) === 1){
// need to initially switch the dir to the one from the hash (IE8)
FileList.changeDirectory(parseCurrentDirFromUrl(), false, true);
}
FileList.createFileSummary();
});

View File

@ -1,6 +1,6 @@
Files={
updateMaxUploadFilesize:function(response) {
if(response === undefined) {
if(response == undefined) {
return;
}
if(response.data !== undefined && response.data.uploadMaxFilesize !== undefined) {
@ -9,7 +9,7 @@ Files={
$('#usedSpacePercent').val(response.data.usedSpacePercent);
Files.displayStorageWarnings();
}
if(response[0] === undefined) {
if(response[0] == undefined) {
return;
}
if(response[0].uploadMaxFilesize !== undefined) {
@ -25,7 +25,7 @@ Files={
OC.Notification.show(t('files', '\'.\' is an invalid file name.'));
return false;
}
if (name.length === 0) {
if (name.length == 0) {
OC.Notification.show(t('files', 'File name cannot be empty.'));
return false;
}
@ -33,7 +33,7 @@ Files={
// check for invalid characters
var invalid_characters = ['\\', '/', '<', '>', ':', '"', '|', '?', '*'];
for (var i = 0; i < invalid_characters.length; i++) {
if (name.indexOf(invalid_characters[i]) !== -1) {
if (name.indexOf(invalid_characters[i]) != -1) {
OC.Notification.show(t('files', "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed."));
return false;
}
@ -67,29 +67,106 @@ Files={
OC.Notification.show(t('files_encryption', 'Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.'));
return;
}
},
setupDragAndDrop: function(){
var $fileList = $('#fileList');
//drag/drop of files
$fileList.find('tr td.filename').each(function(i,e){
if ($(e).parent().data('permissions') & OC.PERMISSION_DELETE) {
$(e).draggable(dragOptions);
}
});
$fileList.find('tr[data-type="dir"] td.filename').each(function(i,e){
if ($(e).parent().data('permissions') & OC.PERMISSION_CREATE){
$(e).droppable(folderDropOptions);
}
});
},
lastWidth: 0,
initBreadCrumbs: function () {
Files.lastWidth = 0;
Files.breadcrumbs = [];
// initialize with some extra space
Files.breadcrumbsWidth = 64;
if ( document.getElementById("navigation") ) {
Files.breadcrumbsWidth += $('#navigation').get(0).offsetWidth;
}
Files.hiddenBreadcrumbs = 0;
$.each($('.crumb'), function(index, breadcrumb) {
Files.breadcrumbs[index] = breadcrumb;
Files.breadcrumbsWidth += $(breadcrumb).get(0).offsetWidth;
});
$.each($('#controls .actions>div'), function(index, action) {
Files.breadcrumbsWidth += $(action).get(0).offsetWidth;
});
// event handlers for breadcrumb items
$('#controls .crumb a').on('click', onClickBreadcrumb);
},
resizeBreadcrumbs: function (width, firstRun) {
if (width != Files.lastWidth) {
if ((width < Files.lastWidth || firstRun) && width < Files.breadcrumbsWidth) {
if (Files.hiddenBreadcrumbs == 0) {
Files.breadcrumbsWidth -= $(Files.breadcrumbs[1]).get(0).offsetWidth;
$(Files.breadcrumbs[1]).find('a').hide();
$(Files.breadcrumbs[1]).append('<span>...</span>');
Files.breadcrumbsWidth += $(Files.breadcrumbs[1]).get(0).offsetWidth;
Files.hiddenBreadcrumbs = 2;
}
var i = Files.hiddenBreadcrumbs;
while (width < Files.breadcrumbsWidth && i > 1 && i < Files.breadcrumbs.length - 1) {
Files.breadcrumbsWidth -= $(Files.breadcrumbs[i]).get(0).offsetWidth;
$(Files.breadcrumbs[i]).hide();
Files.hiddenBreadcrumbs = i;
i++
}
} else if (width > Files.lastWidth && Files.hiddenBreadcrumbs > 0) {
var i = Files.hiddenBreadcrumbs;
while (width > Files.breadcrumbsWidth && i > 0) {
if (Files.hiddenBreadcrumbs == 1) {
Files.breadcrumbsWidth -= $(Files.breadcrumbs[1]).get(0).offsetWidth;
$(Files.breadcrumbs[1]).find('span').remove();
$(Files.breadcrumbs[1]).find('a').show();
Files.breadcrumbsWidth += $(Files.breadcrumbs[1]).get(0).offsetWidth;
} else {
$(Files.breadcrumbs[i]).show();
Files.breadcrumbsWidth += $(Files.breadcrumbs[i]).get(0).offsetWidth;
if (Files.breadcrumbsWidth > width) {
Files.breadcrumbsWidth -= $(Files.breadcrumbs[i]).get(0).offsetWidth;
$(Files.breadcrumbs[i]).hide();
break;
}
}
i--;
Files.hiddenBreadcrumbs = i;
}
}
Files.lastWidth = width;
}
}
};
$(document).ready(function() {
// FIXME: workaround for trashbin app
if (window.trashBinApp){
return;
}
Files.displayEncryptionWarning();
Files.bindKeyboardShortcuts(document, jQuery);
$('#fileList tr').each(function(){
//little hack to set unescape filenames in attribute
$(this).attr('data-file',decodeURIComponent($(this).attr('data-file')));
});
FileList.postProcessList();
Files.setupDragAndDrop();
$('#file_action_panel').attr('activeAction', false);
//drag/drop of files
$('#fileList tr td.filename').each(function(i,e){
if ($(e).parent().data('permissions') & OC.PERMISSION_DELETE) {
$(e).draggable(dragOptions);
}
});
$('#fileList tr[data-type="dir"] td.filename').each(function(i,e){
if ($(e).parent().data('permissions') & OC.PERMISSION_CREATE){
$(e).droppable(folderDropOptions);
}
});
$('div.crumb:not(.last)').droppable(crumbDropOptions);
$('ul#apps>li:first-child').data('dir','');
if($('div.crumb').length){
@ -127,7 +204,7 @@ $(document).ready(function() {
var rows = $(this).parent().parent().parent().children('tr');
for (var i = start; i < end; i++) {
$(rows).each(function(index) {
if (index === i) {
if (index == i) {
var checkbox = $(this).children().children('input:checkbox');
$(checkbox).attr('checked', 'checked');
$(checkbox).parent().parent().addClass('selected');
@ -145,7 +222,7 @@ $(document).ready(function() {
$(checkbox).attr('checked', 'checked');
$(checkbox).parent().parent().toggleClass('selected');
var selectedCount=$('td.filename input:checkbox:checked').length;
if (selectedCount === $('td.filename input:checkbox').length) {
if (selectedCount == $('td.filename input:checkbox').length) {
$('#select_all').attr('checked', 'checked');
}
}
@ -192,7 +269,7 @@ $(document).ready(function() {
var rows = $(this).parent().parent().parent().children('tr');
for (var i = start; i < end; i++) {
$(rows).each(function(index) {
if (index === i) {
if (index == i) {
var checkbox = $(this).children().children('input:checkbox');
$(checkbox).attr('checked', 'checked');
$(checkbox).parent().parent().addClass('selected');
@ -205,7 +282,7 @@ $(document).ready(function() {
if(!$(this).attr('checked')){
$('#select_all').attr('checked',false);
}else{
if(selectedCount === $('td.filename input:checkbox').length){
if(selectedCount==$('td.filename input:checkbox').length){
$('#select_all').attr('checked',true);
}
}
@ -242,72 +319,15 @@ $(document).ready(function() {
//do a background scan if needed
scanFiles();
var lastWidth = 0;
var breadcrumbs = [];
var breadcrumbsWidth = 0;
if ( document.getElementById("navigation") ) {
breadcrumbsWidth = $('#navigation').get(0).offsetWidth;
}
var hiddenBreadcrumbs = 0;
$.each($('.crumb'), function(index, breadcrumb) {
breadcrumbs[index] = breadcrumb;
breadcrumbsWidth += $(breadcrumb).get(0).offsetWidth;
});
$.each($('#controls .actions>div'), function(index, action) {
breadcrumbsWidth += $(action).get(0).offsetWidth;
});
function resizeBreadcrumbs(firstRun) {
var width = $(this).width();
if (width !== lastWidth) {
if ((width < lastWidth || firstRun) && width < breadcrumbsWidth) {
if (hiddenBreadcrumbs === 0) {
breadcrumbsWidth -= $(breadcrumbs[1]).get(0).offsetWidth;
$(breadcrumbs[1]).find('a').hide();
$(breadcrumbs[1]).append('<span>...</span>');
breadcrumbsWidth += $(breadcrumbs[1]).get(0).offsetWidth;
hiddenBreadcrumbs = 2;
}
var i = hiddenBreadcrumbs;
while (width < breadcrumbsWidth && i > 1 && i < breadcrumbs.length - 1) {
breadcrumbsWidth -= $(breadcrumbs[i]).get(0).offsetWidth;
$(breadcrumbs[i]).hide();
hiddenBreadcrumbs = i;
i++;
}
} else if (width > lastWidth && hiddenBreadcrumbs > 0) {
var i = hiddenBreadcrumbs;
while (width > breadcrumbsWidth && i > 0) {
if (hiddenBreadcrumbs === 1) {
breadcrumbsWidth -= $(breadcrumbs[1]).get(0).offsetWidth;
$(breadcrumbs[1]).find('span').remove();
$(breadcrumbs[1]).find('a').show();
breadcrumbsWidth += $(breadcrumbs[1]).get(0).offsetWidth;
} else {
$(breadcrumbs[i]).show();
breadcrumbsWidth += $(breadcrumbs[i]).get(0).offsetWidth;
if (breadcrumbsWidth > width) {
breadcrumbsWidth -= $(breadcrumbs[i]).get(0).offsetWidth;
$(breadcrumbs[i]).hide();
break;
}
}
i--;
hiddenBreadcrumbs = i;
}
}
lastWidth = width;
}
}
Files.initBreadCrumbs();
$(window).resize(function() {
resizeBreadcrumbs(false);
var width = $(this).width();
Files.resizeBreadcrumbs(width, false);
});
resizeBreadcrumbs(true);
var width = $(this).width();
Files.resizeBreadcrumbs(width, true);
// display storage warnings
setTimeout ( "Files.displayStorageWarnings()", 100 );
@ -382,17 +402,13 @@ scanFiles.scanning=false;
function boolOperationFinished(data, callback) {
result = jQuery.parseJSON(data.responseText);
Files.updateMaxUploadFilesize(result);
if(result.status === 'success'){
if(result.status == 'success'){
callback.call();
} else {
alert(result.data.message);
}
}
function updateBreadcrumb(breadcrumbHtml) {
$('p.nav').empty().html(breadcrumbHtml);
}
var createDragShadow = function(event){
//select dragged file
var isDragSelected = $(event.target).parents('tr').find('td input:first').prop('checked');
@ -436,7 +452,7 @@ var createDragShadow = function(event){
});
return dragshadow;
};
}
//options for file drag/drop
var dragOptions={
@ -446,7 +462,7 @@ var dragOptions={
stop: function(event, ui) {
$('#fileList tr td.filename').addClass('ui-draggable');
}
};
}
// sane browsers support using the distance option
if ( $('html.ie').length === 0) {
dragOptions['distance'] = 20;
@ -489,7 +505,7 @@ var folderDropOptions={
});
},
tolerance: 'pointer'
};
}
var crumbDropOptions={
drop: function( event, ui ) {
@ -655,3 +671,9 @@ function checkTrashStatus() {
}
});
}
function onClickBreadcrumb(e){
var $el = $(e.target).closest('.crumb');
e.preventDefault();
FileList.changeDirectory(decodeURIComponent($el.data('dir')));
}

View File

@ -2,6 +2,7 @@
$TRANSLATIONS = array(
"URL cannot be empty." => "ناونیشانی به‌سته‌ر نابێت به‌تاڵ بێت.",
"Error" => "هه‌ڵه",
"Share" => "هاوبەشی کردن",
"_%n folder_::_%n folders_" => array("",""),
"_%n file_::_%n files_" => array("",""),
"_Uploading %n file_::_Uploading %n files_" => array("",""),

View File

@ -2,6 +2,8 @@
$TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Nepavyko perkelti %s - failas su tokiu pavadinimu jau egzistuoja",
"Could not move %s" => "Nepavyko perkelti %s",
"Unable to set upload directory." => "Nepavyksta nustatyti įkėlimų katalogo.",
"Invalid Token" => "Netinkamas ženklas",
"No file was uploaded. Unknown error" => "Failai nebuvo įkelti dėl nežinomos priežasties",
"There is no error, the file uploaded with success" => "Failas įkeltas sėkmingai, be klaidų",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Įkeliamas failas yra didesnis nei leidžia upload_max_filesize php.ini faile:",
@ -31,19 +33,22 @@ $TRANSLATIONS = array(
"cancel" => "atšaukti",
"replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}",
"undo" => "anuliuoti",
"_%n folder_::_%n folders_" => array("","",""),
"_%n file_::_%n files_" => array("","",""),
"_Uploading %n file_::_Uploading %n files_" => array("","",""),
"_%n folder_::_%n folders_" => array("%n aplankas","%n aplankai","%n aplankų"),
"_%n file_::_%n files_" => array("%n failas","%n failai","%n failų"),
"{dirs} and {files}" => "{dirs} ir {files}",
"_Uploading %n file_::_Uploading %n files_" => array("Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"),
"files uploading" => "įkeliami failai",
"'.' is an invalid file name." => "'.' yra neleidžiamas failo pavadinime.",
"File name cannot be empty." => "Failo pavadinimas negali būti tuščias.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Neleistinas pavadinimas, '\\', '/', '<', '>', ':', '\"', '|', '?' ir '*' yra neleidžiami.",
"Your storage is full, files can not be updated or synced anymore!" => "Jūsų visa vieta serveryje užimta",
"Your storage is almost full ({usedSpacePercent}%)" => "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)",
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifravimas buvo išjungtas, bet Jūsų failai vis dar užšifruoti. Prašome eiti į asmeninius nustatymus ir iššifruoti savo failus.",
"Your download is being prepared. This might take some time if the files are big." => "Jūsų atsisiuntimas yra paruošiamas. tai gali užtrukti jei atsisiunčiamas didelis failas.",
"Name" => "Pavadinimas",
"Size" => "Dydis",
"Modified" => "Pakeista",
"%s could not be renamed" => "%s negali būti pervadintas",
"Upload" => "Įkelti",
"File handling" => "Failų tvarkymas",
"Maximum upload size" => "Maksimalus įkeliamo failo dydis",

View File

@ -17,4 +17,120 @@ class Helper
'maxHumanFilesize' => $maxHumanFilesize,
'usedSpacePercent' => (int)$storageInfo['relative']);
}
public static function determineIcon($file) {
if($file['type'] === 'dir') {
$dir = $file['directory'];
$absPath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir.'/'.$file['name']);
$mount = \OC\Files\Filesystem::getMountManager()->find($absPath);
if (!is_null($mount)) {
$sid = $mount->getStorageId();
if (!is_null($sid)) {
$sid = explode(':', $sid);
if ($sid[0] === 'shared') {
return \OC_Helper::mimetypeIcon('dir-shared');
}
if ($sid[0] !== 'local') {
return \OC_Helper::mimetypeIcon('dir-external');
}
}
}
return \OC_Helper::mimetypeIcon('dir');
}
if($file['isPreviewAvailable']) {
$relativePath = substr($file['path'], 6);
return \OC_Helper::previewIcon($relativePath);
}
return \OC_Helper::mimetypeIcon($file['mimetype']);
}
/**
* Comparator function to sort files alphabetically and have
* the directories appear first
* @param array $a file
* @param array $b file
* @return -1 if $a must come before $b, 1 otherwise
*/
public static function fileCmp($a, $b) {
if ($a['type'] === 'dir' and $b['type'] !== 'dir') {
return -1;
} elseif ($a['type'] !== 'dir' and $b['type'] === 'dir') {
return 1;
} else {
return strnatcasecmp($a['name'], $b['name']);
}
}
/**
* Retrieves the contents of the given directory and
* returns it as a sorted array.
* @param string $dir path to the directory
* @return array of files
*/
public static function getFiles($dir) {
$content = \OC\Files\Filesystem::getDirectoryContent($dir);
$files = array();
foreach ($content as $i) {
$i['date'] = \OCP\Util::formatDate($i['mtime']);
if ($i['type'] === 'file') {
$fileinfo = pathinfo($i['name']);
$i['basename'] = $fileinfo['filename'];
if (!empty($fileinfo['extension'])) {
$i['extension'] = '.' . $fileinfo['extension'];
} else {
$i['extension'] = '';
}
}
$i['directory'] = $dir;
$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($i['mimetype']);
$i['icon'] = \OCA\files\lib\Helper::determineIcon($i);
$files[] = $i;
}
usort($files, array('\OCA\files\lib\Helper', 'fileCmp'));
return $files;
}
/**
* Splits the given path into a breadcrumb structure.
* @param string $dir path to process
* @return array where each entry is a hash of the absolute
* directory path and its name
*/
public static function makeBreadcrumb($dir){
$breadcrumb = array();
$pathtohere = '';
foreach (explode('/', $dir) as $i) {
if ($i !== '') {
$pathtohere .= '/' . $i;
$breadcrumb[] = array('dir' => $pathtohere, 'name' => $i);
}
}
return $breadcrumb;
}
/**
* Returns the numeric permissions for the given directory.
* @param string $dir directory without trailing slash
* @return numeric permissions
*/
public static function getDirPermissions($dir){
$permissions = \OCP\PERMISSION_READ;
if (\OC\Files\Filesystem::isCreatable($dir . '/')) {
$permissions |= \OCP\PERMISSION_CREATE;
}
if (\OC\Files\Filesystem::isUpdatable($dir . '/')) {
$permissions |= \OCP\PERMISSION_UPDATE;
}
if (\OC\Files\Filesystem::isDeletable($dir . '/')) {
$permissions |= \OCP\PERMISSION_DELETE;
}
if (\OC\Files\Filesystem::isSharable($dir . '/')) {
$permissions |= \OCP\PERMISSION_SHARE;
}
return $permissions;
}
}

View File

@ -1,8 +1,7 @@
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}table td{position:static !important;}</style><![endif]-->
<div id="controls">
<?php print_unescaped($_['breadcrumb']); ?>
<?php if ($_['isCreatable']):?>
<div class="actions <?php if (isset($_['files']) and count($_['files'])==0):?>emptyfolder<?php endif; ?>">
<div class="actions creatable <?php if (!$_['isCreatable']):?>hidden<?php endif; ?> <?php if (isset($_['files']) and count($_['files'])==0):?>emptycontent<?php endif; ?>">
<div id="new" class="button">
<a><?php p($l->t('New'));?></a>
<ul>
@ -16,29 +15,23 @@
</div>
<div id="upload" class="button"
title="<?php p($l->t('Upload') . ' max. '.$_['uploadMaxHumanFilesize']) ?>">
<form data-upload-id='1'
id="data-upload-form"
class="file_upload_form"
action="<?php print_unescaped(OCP\Util::linkTo('files', 'ajax/upload.php')); ?>"
method="post"
enctype="multipart/form-data"
target="file_upload_target_1">
<?php if($_['uploadMaxFilesize'] >= 0):?>
<input type="hidden" name="MAX_FILE_SIZE" id="max_upload"
value="<?php p($_['uploadMaxFilesize']) ?>">
<?php endif;?>
<!-- Send the requesttoken, this is needed for older IE versions
because they don't send the CSRF token via HTTP header in this case -->
<input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>" id="requesttoken">
<input type="hidden" class="max_human_file_size"
value="(max <?php p($_['uploadMaxHumanFilesize']); ?>)">
<input type="hidden" name="dir" value="<?php p($_['dir']) ?>" id="dir">
<input type="file" id="file_upload_start" name='files[]'/>
<input type="file" id="file_upload_start" name='files[]'
data-url="<?php print_unescaped(OCP\Util::linkTo('files', 'ajax/upload.php')); ?>" />
<a href="#" class="svg"></a>
</form>
</div>
<?php if ($_['trash'] ): ?>
<input id="trash" type="button" value="<?php p($l->t('Deleted files'));?>" class="button" <?php $_['trashEmpty'] ? p('disabled') : '' ?>></input>
<div id="trash" class="button" <?php $_['trashEmpty'] ? p('disabled') : '' ?>>
<a><?php p($l->t('Deleted files'));?></a>
</div>
<?php endif; ?>
<div id="uploadprogresswrapper">
<div id="uploadprogressbar"></div>
@ -48,16 +41,15 @@
</div>
</div>
<div id="file_action_panel"></div>
<?php elseif( !$_['isPublic'] ):?>
<div class="actions"><input type="button" disabled value="<?php p($l->t('You dont have write permissions here.'))?>"></div>
<input type="hidden" name="dir" value="<?php p($_['dir']) ?>" id="dir">
<?php endif;?>
<div class="notCreatable notPublic <?php if ($_['isCreatable'] or $_['isPublic'] ):?>hidden<?php endif; ?>">
<div class="actions"><input type="button" disabled value="<?php p($l->t('You dont have write permissions here.'))?>"></div>
</div>
<input type="hidden" name="permissions" value="<?php p($_['permissions']); ?>" id="permissions">
</div>
<?php if (isset($_['files']) and $_['isCreatable'] and count($_['files'])==0):?>
<div id="emptycontent"><?php p($l->t('Nothing in here. Upload something!'))?></div>
<?php endif; ?>
<div id="emptycontent" <?php if (!isset($_['files']) or !$_['isCreatable'] or count($_['files']) > 0 or !$_['ajaxLoad']):?>class="hidden"<?php endif; ?>><?php p($l->t('Nothing in here. Upload something!'))?></div>
<input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>"></input>
<table id="filestable" data-allow-public-upload="<?php p($_['publicUploadEnabled'])?>" data-preview-x="36" data-preview-y="36">
<thead>
@ -82,7 +74,7 @@
<th id="headerDate">
<span id="modified"><?php p($l->t( 'Modified' )); ?></span>
<?php if ($_['permissions'] & OCP\PERMISSION_DELETE): ?>
<!-- NOTE: Temporary fix to allow unsharing of files in root of Shared folder -->
<!-- NOTE: Temporary fix to allow unsharing of files in root of Shared folder -->
<?php if ($_['dir'] == '/Shared'): ?>
<span class="selectedActions"><a href="" class="delete-selected">
<?php p($l->t('Unshare'))?>
@ -120,6 +112,7 @@
</div>
<!-- config hints for javascript -->
<input type="hidden" name="ajaxLoad" id="ajaxLoad" value="<?php p($_['ajaxLoad']); ?>" />
<input type="hidden" name="allowZipDownload" id="allowZipDownload" value="<?php p($_['allowZipDownload']); ?>" />
<input type="hidden" name="usedSpacePercent" id="usedSpacePercent" value="<?php p($_['usedSpacePercent']); ?>" />
<input type="hidden" name="encryptedFiles" id="encryptedFiles" value="<?php $_['encryptedFiles'] ? p('1') : p('0'); ?>" />

View File

@ -1,7 +1,7 @@
<input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>">
<?php $totalfiles = 0;
$totaldirs = 0;
$totalsize = 0; ?>
<?php foreach($_['files'] as $file):
//strlen('files/') => 6
$relativePath = substr($file['path'], 6);
// the bigger the file, the darker the shade of grey; megabytes*2
$simple_size_color = intval(160-$file['size']/(1024*1024)*2);
if($simple_size_color<0) $simple_size_color = 0;
@ -22,26 +22,7 @@
<?php else: ?>
<td class="filename svg"
<?php endif; ?>
<?php if($file['type'] == 'dir'): ?>
style="background-image:url(<?php print_unescaped(OCP\mimetype_icon('dir')); ?>)"
<?php else: ?>
<?php if($_['isPublic']): ?>
<?php
$relativePath = substr($relativePath, strlen($_['sharingroot']));
?>
<?php if($file['isPreviewAvailable']): ?>
style="background-image:url(<?php print_unescaped(OCP\publicPreview_icon($relativePath, $_['sharingtoken'])); ?>)"
<?php else: ?>
style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
<?php endif; ?>
<?php else: ?>
<?php if($file['isPreviewAvailable']): ?>
style="background-image:url(<?php print_unescaped(OCP\preview_icon($relativePath)); ?>)"
<?php else: ?>
style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
style="background-image:url(<?php print_unescaped($file['icon']); ?>)"
>
<?php if(!isset($_['readonly']) || !$_['readonly']): ?>
<input id="select-<?php p($file['fileid']); ?>" type="checkbox" />

View File

@ -6,12 +6,34 @@ $TRANSLATIONS = array(
"Could not disable recovery key. Please check your recovery key password!" => "Neišėjo išjungti jūsų atkūrimo rakto. Prašome jį patikrinti!",
"Password successfully changed." => "Slaptažodis sėkmingai pakeistas",
"Could not change the password. Maybe the old password was not correct." => "Slaptažodis nebuvo pakeistas. Gali būti, kad buvo neteisingai suvestas senasis.",
"Private key password successfully updated." => "Privataus rakto slaptažodis buvo sėkmingai atnaujintas.",
"Could not update the private key password. Maybe the old password was not correct." => "Nepavyko atnaujinti privataus rakto slaptažodžio. Gali būti, kad buvo neteisingai suvestas senasis.",
"Your private key is not valid! Likely your password was changed outside the ownCloud system (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Jūsų privatus raktas yra netinkamas! Panašu, kad Jūsų slaptažodis buvo pakeistas išorėje ownCloud sistemos (pvz. Jūsų organizacijos kataloge). Galite atnaujinti savo privataus rakto slaptažodį savo asmeniniuose nustatymuose, kad atkurti prieigą prie savo šifruotų failų.",
"Missing requirements." => "Trūkstami laukai.",
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Prašome įsitikinti, kad PHP 5.3.3 ar naujesnė yra įdiegta ir kad OpenSSL kartu su PHP plėtiniu yra šjungti ir teisingai sukonfigūruoti. Kol kas šifravimo programa bus išjungta.",
"Following users are not set up for encryption:" => "Sekantys naudotojai nenustatyti šifravimui:",
"Saving..." => "Saugoma...",
"Your private key is not valid! Maybe the your password was changed from outside." => "Jūsų privatus raktas yra netinkamas! Galbūt Jūsų slaptažodis buvo pakeistas iš išorės?",
"You can unlock your private key in your " => "Galite atrakinti savo privatų raktą savo",
"personal settings" => "asmeniniai nustatymai",
"Encryption" => "Šifravimas",
"Enable recovery key (allow to recover users files in case of password loss):" => "Įjunkite atkūrimo raktą, (leisti atkurti naudotojų failus praradus slaptažodį):",
"Recovery key password" => "Atkūrimo rakto slaptažodis",
"Enabled" => "Įjungta",
"Disabled" => "Išjungta",
"Change recovery key password:" => "Pakeisti atkūrimo rakto slaptažodį:",
"Old Recovery key password" => "Senas atkūrimo rakto slaptažodis",
"New Recovery key password" => "Naujas atkūrimo rakto slaptažodis",
"Change Password" => "Pakeisti slaptažodį",
"File recovery settings updated" => "Failų atstatymo nustatymai pakeisti",
"Your private key password no longer match your log-in password:" => "Privatus rakto slaptažodis daugiau neatitinka Jūsų prisijungimo slaptažodžio:",
"Set your old private key password to your current log-in password." => "Nustatyti Jūsų privataus rakto slaptažodį į Jūsų dabartinį prisijungimo.",
" If you don't remember your old password you can ask your administrator to recover your files." => "Jei nepamenate savo seno slaptažodžio, galite paprašyti administratoriaus atkurti Jūsų failus.",
"Old log-in password" => "Senas prisijungimo slaptažodis",
"Current log-in password" => "Dabartinis prisijungimo slaptažodis",
"Update Private Key Password" => "Atnaujinti privataus rakto slaptažodį",
"Enable password recovery:" => "Įjungti slaptažodžio atkūrimą:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" => "Įjungus šią funkciją jums bus suteiktas pakartotinis priėjimas prie Jūsų šifruotų failų pamiršus slaptažodį.",
"File recovery settings updated" => "Failų atkūrimo nustatymai pakeisti",
"Could not update file recovery" => "Neišėjo atnaujinti failų atkūrimo"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);";

View File

@ -1,6 +1,7 @@
<?php
$TRANSLATIONS = array(
"Saving..." => "Зберігаю...",
"Encryption" => "Шифрування"
"Encryption" => "Шифрування",
"Change Password" => "Змінити Пароль"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";

View File

@ -329,72 +329,73 @@ class Util {
$this->view->is_dir($directory)
&& $handle = $this->view->opendir($directory)
) {
if(is_resource($handle)) {
while (false !== ($file = readdir($handle))) {
while (false !== ($file = readdir($handle))) {
if (
$file !== "."
&& $file !== ".."
) {
if (
$file !== "."
&& $file !== ".."
) {
$filePath = $directory . '/' . $this->view->getRelativePath('/' . $file);
$relPath = \OCA\Encryption\Helper::stripUserFilesPath($filePath);
$filePath = $directory . '/' . $this->view->getRelativePath('/' . $file);
$relPath = \OCA\Encryption\Helper::stripUserFilesPath($filePath);
// If the path is a directory, search
// its contents
if ($this->view->is_dir($filePath)) {
// If the path is a directory, search
// its contents
if ($this->view->is_dir($filePath)) {
$this->findEncFiles($filePath, $found);
$this->findEncFiles($filePath, $found);
// If the path is a file, determine
// its encryption status
} elseif ($this->view->is_file($filePath)) {
// If the path is a file, determine
// its encryption status
} elseif ($this->view->is_file($filePath)) {
// Disable proxies again, some-
// where they got re-enabled :/
\OC_FileProxy::$enabled = false;
// Disable proxies again, some-
// where they got re-enabled :/
\OC_FileProxy::$enabled = false;
$isEncryptedPath = $this->isEncryptedPath($filePath);
// If the file is encrypted
// NOTE: If the userId is
// empty or not set, file will
// detected as plain
// NOTE: This is inefficient;
// scanning every file like this
// will eat server resources :(
if (
Keymanager::getFileKey($this->view, $this->userId, $relPath)
&& $isEncryptedPath
) {
$isEncryptedPath = $this->isEncryptedPath($filePath);
// If the file is encrypted
// NOTE: If the userId is
// empty or not set, file will
// detected as plain
// NOTE: This is inefficient;
// scanning every file like this
// will eat server resources :(
if (
Keymanager::getFileKey($this->view, $this->userId, $relPath)
&& $isEncryptedPath
) {
$found['encrypted'][] = array(
'name' => $file,
'path' => $filePath
);
$found['encrypted'][] = array(
'name' => $file,
'path' => $filePath
);
// If the file uses old
// encryption system
} elseif (Crypt::isLegacyEncryptedContent($isEncryptedPath, $relPath)) {
// If the file uses old
// encryption system
} elseif (Crypt::isLegacyEncryptedContent($isEncryptedPath, $relPath)) {
$found['legacy'][] = array(
'name' => $file,
'path' => $filePath
);
$found['legacy'][] = array(
'name' => $file,
'path' => $filePath
);
// If the file is not encrypted
} else {
// If the file is not encrypted
} else {
$found['plain'][] = array(
'name' => $file,
'path' => $relPath
);
$found['plain'][] = array(
'name' => $file,
'path' => $relPath
);
}
}
}
}
}
\OC_FileProxy::$enabled = true;

View File

@ -183,17 +183,20 @@ class AmazonS3 extends \OC\Files\Storage\Common {
}
$dh = $this->opendir($path);
while (($file = readdir($dh)) !== false) {
if ($file === '.' || $file === '..') {
continue;
}
if ($this->is_dir($path . '/' . $file)) {
$this->rmdir($path . '/' . $file);
} else {
$this->unlink($path . '/' . $file);
if(is_resource($dh)) {
while (($file = readdir($dh)) !== false) {
if ($file === '.' || $file === '..') {
continue;
}
if ($this->is_dir($path . '/' . $file)) {
$this->rmdir($path . '/' . $file);
} else {
$this->unlink($path . '/' . $file);
}
}
}
}
try {
$result = $this->connection->deleteObject(array(
@ -464,15 +467,17 @@ class AmazonS3 extends \OC\Files\Storage\Common {
}
$dh = $this->opendir($path1);
while (($file = readdir($dh)) !== false) {
if ($file === '.' || $file === '..') {
continue;
}
if(is_resource($dh)) {
while (($file = readdir($dh)) !== false) {
if ($file === '.' || $file === '..') {
continue;
}
$source = $path1 . '/' . $file;
$target = $path2 . '/' . $file;
$this->copy($source, $target);
}
$source = $path1 . '/' . $file;
$target = $path2 . '/' . $file;
$this->copy($source, $target);
}
}
}
return true;

View File

@ -378,7 +378,7 @@ class OC_Mount_Config {
}
$result = array();
$handle = opendir($path);
if ( ! $handle) {
if(!is_resource($handle)) {
return array();
}
while (false !== ($file = readdir($handle))) {

View File

@ -206,14 +206,16 @@ class Google extends \OC\Files\Storage\Common {
public function rmdir($path) {
if (trim($path, '/') === '') {
$dir = $this->opendir($path);
while (($file = readdir($dh)) !== false) {
if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
if (!$this->unlink($path.'/'.$file)) {
return false;
if(is_resource($dir)) {
while (($file = readdir($dir)) !== false) {
if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
if (!$this->unlink($path.'/'.$file)) {
return false;
}
}
}
closedir($dir);
}
closedir($dir);
$this->driveFiles = array();
return true;
} else {

View File

@ -27,12 +27,12 @@ class iRODS extends \OC\Files\Storage\StreamWrapper{
private $auth_mode;
public function __construct($params) {
if (isset($params['host']) && isset($params['user']) && isset($params['password'])) {
if (isset($params['host'])) {
$this->host = $params['host'];
$this->port = $params['port'];
$this->user = $params['user'];
$this->password = $params['password'];
$this->use_logon_credentials = $params['use_logon_credentials'];
$this->port = isset($params['port']) ? $params['port'] : 1247;
$this->user = isset($params['user']) ? $params['user'] : '';
$this->password = isset($params['password']) ? $params['password'] : '';
$this->use_logon_credentials = ($params['use_logon_credentials'] === 'true');
$this->zone = $params['zone'];
$this->auth_mode = isset($params['auth_mode']) ? $params['auth_mode'] : '';
@ -42,10 +42,11 @@ class iRODS extends \OC\Files\Storage\StreamWrapper{
}
// take user and password from the session
if ($this->use_logon_credentials && isset($_SESSION['irods-credentials']) )
if ($this->use_logon_credentials && \OC::$session->exists('irods-credentials'))
{
$this->user = $_SESSION['irods-credentials']['uid'];
$this->password = $_SESSION['irods-credentials']['password'];
$params = \OC::$session->get('irods-credentials');
$this->user = $params['uid'];
$this->password = $params['password'];
}
//create the root folder if necessary
@ -55,11 +56,11 @@ class iRODS extends \OC\Files\Storage\StreamWrapper{
} else {
throw new \Exception();
}
}
public static function login( $params ) {
$_SESSION['irods-credentials'] = $params;
\OC::$session->set('irods-credentials', $params);
}
public function getId(){
@ -137,11 +138,13 @@ class iRODS extends \OC\Files\Storage\StreamWrapper{
private function collectionMTime($path) {
$dh = $this->opendir($path);
$lastCTime = $this->filemtime($path);
while (($file = readdir($dh)) !== false) {
if ($file != '.' and $file != '..') {
$time = $this->filemtime($file);
if ($time > $lastCTime) {
$lastCTime = $time;
if(is_resource($dh)) {
while (($file = readdir($dh)) !== false) {
if ($file != '.' and $file != '..') {
$time = $this->filemtime($file);
if ($time > $lastCTime) {
$lastCTime = $time;
}
}
}
}

View File

@ -99,11 +99,13 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
private function shareMTime() {
$dh=$this->opendir('');
$lastCtime=0;
while (($file = readdir($dh)) !== false) {
if ($file!='.' and $file!='..') {
$ctime=$this->filemtime($file);
if ($ctime>$lastCtime) {
$lastCtime=$ctime;
if(is_resource($dh)) {
while (($file = readdir($dh)) !== false) {
if ($file!='.' and $file!='..') {
$ctime=$this->filemtime($file);
if ($ctime>$lastCtime) {
$lastCtime=$ctime;
}
}
}
}

View File

@ -7,8 +7,6 @@ function fileDownloadPath(dir, file) {
return url;
}
var form_data;
$(document).ready(function() {
$('#data-upload-form').tipsy({gravity:'ne', fade:true});
@ -50,17 +48,18 @@ $(document).ready(function() {
});
}
// Add some form data to the upload handler
file_upload_param.formData = {
MAX_FILE_SIZE: $('#uploadMaxFilesize').val(),
requesttoken: $('#publicUploadRequestToken').val(),
dirToken: $('#dirToken').val(),
appname: 'files_sharing',
subdir: $('input#dir').val()
};
var file_upload_start = $('#file_upload_start');
file_upload_start.on('fileuploadadd', function(e, data) {
// Add custom data to the upload handler
data.formData = {
requesttoken: $('#publicUploadRequestToken').val(),
dirToken: $('#dirToken').val(),
subdir: $('input#dir').val()
};
});
// Add Uploadprogress Wrapper to controls bar
$('#controls').append($('#additional_controls div#uploadprogresswrapper'));
// Add Uploadprogress Wrapper to controls bar
$('#controls').append($('#additional_controls div#uploadprogresswrapper'));
// Cancel upload trigger
$('#cancel_upload_button').click(function() {

View File

@ -4,7 +4,7 @@ $(document).ready(function() {
if (typeof OC.Share !== 'undefined' && typeof FileActions !== 'undefined' && !disableSharing) {
$('#fileList').one('fileActionsReady',function(){
$('#fileList').on('fileActionsReady',function(){
OC.Share.loadIcons('file');
});

View File

@ -3,6 +3,12 @@ $TRANSLATIONS = array(
"The password is wrong. Try again." => "La contraseña no es correcta. Probá de nuevo.",
"Password" => "Contraseña",
"Submit" => "Enviar",
"Sorry, this link doesnt seem to work anymore." => "Perdón, este enlace parece no funcionar más.",
"Reasons might be:" => "Las causas podrían ser:",
"the item was removed" => "el elemento fue borrado",
"the link expired" => "el enlace expiró",
"sharing is disabled" => "compartir está desactivado",
"For more info, please ask the person who sent this link." => "Para mayor información, contactá a la persona que te mandó el enlace.",
"%s shared the folder %s with you" => "%s compartió la carpeta %s con vos",
"%s shared the file %s with you" => "%s compartió el archivo %s con vos",
"Download" => "Descargar",

View File

@ -1,7 +1,14 @@
<?php
$TRANSLATIONS = array(
"The password is wrong. Try again." => "Netinka slaptažodis: Bandykite dar kartą.",
"Password" => "Slaptažodis",
"Submit" => "Išsaugoti",
"Sorry, this link doesnt seem to work anymore." => "Atleiskite, panašu, kad nuoroda yra neveiksni.",
"Reasons might be:" => "Galimos priežastys:",
"the item was removed" => "elementas buvo pašalintas",
"the link expired" => "baigėsi nuorodos galiojimo laikas",
"sharing is disabled" => "dalinimasis yra išjungtas",
"For more info, please ask the person who sent this link." => "Dėl tikslesnės informacijos susisiekite su asmeniu atsiuntusiu nuorodą.",
"%s shared the folder %s with you" => "%s pasidalino su jumis %s aplanku",
"%s shared the file %s with you" => "%s pasidalino su jumis %s failu",
"Download" => "Atsisiųsti",

View File

@ -221,7 +221,8 @@ class Shared extends \OC\Files\Storage\Common {
public function filemtime($path) {
if ($path == '' || $path == '/') {
$mtime = 0;
if ($dh = $this->opendir($path)) {
$dh = $this->opendir($path);
if(is_resource($dh)) {
while (($filename = readdir($dh)) !== false) {
$tempmtime = $this->filemtime($filename);
if ($tempmtime > $mtime) {

View File

@ -19,6 +19,20 @@ function fileCmp($a, $b) {
}
}
function determineIcon($file, $sharingRoot, $sharingToken) {
// for folders we simply reuse the files logic
if($file['type'] == 'dir') {
return \OCA\files\lib\Helper::determineIcon($file);
}
$relativePath = substr($file['path'], 6);
$relativePath = substr($relativePath, strlen($sharingRoot));
if($file['isPreviewAvailable']) {
return OCP\publicPreview_icon($relativePath, $sharingToken);
}
return OCP\mimetype_icon($file['mimetype']);
}
if (isset($_GET['t'])) {
$token = $_GET['t'];
$linkItem = OCP\Share::getShareByToken($token);
@ -133,6 +147,7 @@ if (isset($path)) {
$tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path));
$tmpl->assign('fileTarget', basename($linkItem['file_target']));
$tmpl->assign('dirToken', $linkItem['token']);
$tmpl->assign('disableSharing', true);
$allowPublicUploadEnabled = (bool) ($linkItem['permissions'] & OCP\PERMISSION_CREATE);
if (\OCP\App::isEnabled('files_encryption')) {
$allowPublicUploadEnabled = false;
@ -176,6 +191,7 @@ if (isset($path)) {
}
$i['directory'] = $getPath;
$i['permissions'] = OCP\PERMISSION_READ;
$i['icon'] = determineIcon($i, $basePath, $token);
$files[] = $i;
}
usort($files, "fileCmp");
@ -191,7 +207,6 @@ if (isset($path)) {
}
$list = new OCP\Template('files', 'part.list', '');
$list->assign('files', $files);
$list->assign('disableSharing', true);
$list->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=');
$list->assign('downloadURL',
OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=');

View File

@ -0,0 +1,51 @@
<?php
// only need filesystem apps
$RUNTIME_APPTYPES=array('filesystem');
// Init owncloud
OCP\JSON::checkLoggedIn();
// Load the files
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
$doBreadcrumb = isset( $_GET['breadcrumb'] ) ? true : false;
$data = array();
// Make breadcrumb
if($doBreadcrumb) {
$breadcrumb = \OCA\files_trashbin\lib\Helper::makeBreadcrumb($dir);
$breadcrumbNav = new OCP\Template('files_trashbin', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php') . '?dir=');
$breadcrumbNav->assign('home', OCP\Util::linkTo('files', 'index.php'));
$data['breadcrumb'] = $breadcrumbNav->fetchPage();
}
// make filelist
$files = \OCA\files_trashbin\lib\Helper::getTrashFiles($dir);
if ($files === null){
header("HTTP/1.0 404 Not Found");
exit();
}
$dirlisting = false;
if ($dir && $dir !== '/') {
$dirlisting = true;
}
$encodedDir = \OCP\Util::encodePath($dir);
$list = new OCP\Template('files_trashbin', 'part.list', '');
$list->assign('files', $files, false);
$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$encodedDir);
$list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/')));
$list->assign('dirlisting', $dirlisting);
$list->assign('disableDownloadActions', true);
$data['files'] = $list->fetchPage();
OCP\JSON::success(array('data' => $data));

View File

@ -10,91 +10,52 @@ OCP\Util::addScript('files_trashbin', 'disableDefaultActions');
OCP\Util::addScript('files', 'fileactions');
$tmpl = new OCP\Template('files_trashbin', 'index', 'user');
$user = \OCP\User::getUser();
$view = new OC_Filesystemview('/'.$user.'/files_trashbin/files');
OCP\Util::addStyle('files', 'files');
OCP\Util::addScript('files', 'filelist');
// filelist overrides
OCP\Util::addScript('files_trashbin', 'filelist');
OCP\Util::addscript('files', 'files');
$dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : '';
$result = array();
if ($dir) {
$dirlisting = true;
$dirContent = $view->opendir($dir);
$i = 0;
while(($entryName = readdir($dirContent)) !== false) {
if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) {
$pos = strpos($dir.'/', '/', 1);
$tmp = substr($dir, 0, $pos);
$pos = strrpos($tmp, '.d');
$timestamp = substr($tmp, $pos+2);
$result[] = array(
'id' => $entryName,
'timestamp' => $timestamp,
'mime' => $view->getMimeType($dir.'/'.$entryName),
'type' => $view->is_dir($dir.'/'.$entryName) ? 'dir' : 'file',
'location' => $dir,
);
}
}
closedir($dirContent);
} else {
$dirlisting = false;
$query = \OC_DB::prepare('SELECT `id`,`location`,`timestamp`,`type`,`mime` FROM `*PREFIX*files_trash` WHERE `user` = ?');
$result = $query->execute(array($user))->fetchAll();
$isIE8 = false;
preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
if (count($matches) > 0 && $matches[1] <= 8){
$isIE8 = true;
}
$files = array();
foreach ($result as $r) {
$i = array();
$i['name'] = $r['id'];
$i['date'] = OCP\Util::formatDate($r['timestamp']);
$i['timestamp'] = $r['timestamp'];
$i['mimetype'] = $r['mime'];
$i['type'] = $r['type'];
if ($i['type'] === 'file') {
$fileinfo = pathinfo($r['id']);
$i['basename'] = $fileinfo['filename'];
$i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : '';
// if IE8 and "?dir=path" was specified, reformat the URL to use a hash like "#?dir=path"
if ($isIE8 && isset($_GET['dir'])){
if ($dir === ''){
$dir = '/';
}
$i['directory'] = $r['location'];
if ($i['directory'] === '/') {
$i['directory'] = '';
}
$i['permissions'] = OCP\PERMISSION_READ;
$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($r['mime']);
$files[] = $i;
header('Location: ' . OCP\Util::linkTo('files_trashbin', 'index.php') . '#?dir=' . \OCP\Util::encodePath($dir));
exit();
}
function fileCmp($a, $b) {
if ($a['type'] === 'dir' and $b['type'] !== 'dir') {
return -1;
} elseif ($a['type'] !== 'dir' and $b['type'] === 'dir') {
return 1;
} else {
return strnatcasecmp($a['name'], $b['name']);
}
$ajaxLoad = false;
if (!$isIE8){
$files = \OCA\files_trashbin\lib\Helper::getTrashFiles($dir);
}
else{
$files = array();
$ajaxLoad = true;
}
usort($files, "fileCmp");
// Make breadcrumb
$pathtohere = '';
$breadcrumb = array();
foreach (explode('/', $dir) as $i) {
if ($i !== '') {
if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) {
$name = $match[1];
} else {
$name = $i;
}
$pathtohere .= '/' . $i;
$breadcrumb[] = array('dir' => $pathtohere, 'name' => $name);
}
// Redirect if directory does not exist
if ($files === null){
header('Location: ' . OCP\Util::linkTo('files_trashbin', 'index.php'));
exit();
}
$dirlisting = false;
if ($dir && $dir !== '/') {
$dirlisting = true;
}
$breadcrumb = \OCA\files_trashbin\lib\Helper::makeBreadcrumb($dir);
$breadcrumbNav = new OCP\Template('files_trashbin', 'part.breadcrumb', '');
$breadcrumbNav->assign('breadcrumb', $breadcrumb);
$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php') . '?dir=');
@ -106,7 +67,6 @@ $list->assign('files', $files);
$encodedDir = \OCP\Util::encodePath($dir);
$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$encodedDir);
$list->assign('downloadURL', OCP\Util::linkTo('files_trashbin', 'download.php') . '?file='.$encodedDir);
$list->assign('disableSharing', true);
$list->assign('dirlisting', $dirlisting);
$list->assign('disableDownloadActions', true);
@ -114,6 +74,8 @@ $tmpl->assign('dirlisting', $dirlisting);
$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage());
$tmpl->assign('fileList', $list->fetchPage());
$tmpl->assign('files', $files);
$tmpl->assign('dir', \OC\Files\Filesystem::normalizePath($view->getAbsolutePath()));
$tmpl->assign('dir', $dir);
$tmpl->assign('disableSharing', true);
$tmpl->assign('ajaxLoad', true);
$tmpl->printPage();

View File

@ -0,0 +1,24 @@
// override reload with own ajax call
FileList.reload = function(){
FileList.showMask();
if (FileList._reloadCall){
FileList._reloadCall.abort();
}
$.ajax({
url: OC.filePath('files_trashbin','ajax','list.php'),
data: {
dir : $('#dir').val(),
breadcrumb: true
},
error: function(result) {
FileList.reloadCallback(result);
},
success: function(result) {
FileList.reloadCallback(result);
}
});
}
FileList.linkTo = function(dir){
return OC.linkTo('files_trashbin', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/');
}

View File

@ -171,9 +171,15 @@ $(document).ready(function() {
action(filename);
}
}
// event handlers for breadcrumb items
$('#controls').delegate('.crumb:not(.home) a', 'click', onClickBreadcrumb);
});
FileActions.actions.dir = {};
FileActions.actions.dir = {
// only keep 'Open' action for navigation
'Open': FileActions.actions.dir.Open
};
});
function processSelection(){
@ -246,3 +252,9 @@ function disableActions() {
$(".action").css("display", "none");
$(":input:checkbox").css("display", "none");
}
function onClickBreadcrumb(e){
var $el = $(e.target).closest('.crumb');
e.preventDefault();
FileList.changeDirectory(decodeURIComponent($el.data('dir')));
}

View File

@ -8,8 +8,9 @@ $TRANSLATIONS = array(
"Delete permanently" => "Ištrinti negrįžtamai",
"Name" => "Pavadinimas",
"Deleted" => "Ištrinti",
"_%n folder_::_%n folders_" => array("","",""),
"_%n file_::_%n files_" => array("","",""),
"_%n folder_::_%n folders_" => array("","","%n aplankų"),
"_%n file_::_%n files_" => array("","","%n failų"),
"restored" => "atstatyta",
"Nothing in here. Your trash bin is empty!" => "Nieko nėra. Jūsų šiukšliadėžė tuščia!",
"Restore" => "Atstatyti",
"Delete" => "Ištrinti",

View File

@ -0,0 +1,97 @@
<?php
namespace OCA\files_trashbin\lib;
class Helper
{
/**
* Retrieves the contents of a trash bin directory.
* @param string $dir path to the directory inside the trashbin
* or empty to retrieve the root of the trashbin
* @return array of files
*/
public static function getTrashFiles($dir){
$result = array();
$user = \OCP\User::getUser();
if ($dir && $dir !== '/') {
$view = new \OC_Filesystemview('/'.$user.'/files_trashbin/files');
$dirContent = $view->opendir($dir);
if ($dirContent === false){
return null;
}
if(is_resource($dirContent)){
while(($entryName = readdir($dirContent)) !== false) {
if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) {
$pos = strpos($dir.'/', '/', 1);
$tmp = substr($dir, 0, $pos);
$pos = strrpos($tmp, '.d');
$timestamp = substr($tmp, $pos+2);
$result[] = array(
'id' => $entryName,
'timestamp' => $timestamp,
'mime' => $view->getMimeType($dir.'/'.$entryName),
'type' => $view->is_dir($dir.'/'.$entryName) ? 'dir' : 'file',
'location' => $dir,
);
}
}
closedir($dirContent);
}
} else {
$query = \OC_DB::prepare('SELECT `id`,`location`,`timestamp`,`type`,`mime` FROM `*PREFIX*files_trash` WHERE `user` = ?');
$result = $query->execute(array($user))->fetchAll();
}
$files = array();
foreach ($result as $r) {
$i = array();
$i['name'] = $r['id'];
$i['date'] = \OCP\Util::formatDate($r['timestamp']);
$i['timestamp'] = $r['timestamp'];
$i['mimetype'] = $r['mime'];
$i['type'] = $r['type'];
if ($i['type'] === 'file') {
$fileinfo = pathinfo($r['id']);
$i['basename'] = $fileinfo['filename'];
$i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : '';
}
$i['directory'] = $r['location'];
if ($i['directory'] === '/') {
$i['directory'] = '';
}
$i['permissions'] = \OCP\PERMISSION_READ;
$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($r['mime']);
$i['icon'] = \OCA\files\lib\Helper::determineIcon($i);
$files[] = $i;
}
usort($files, array('\OCA\files\lib\Helper', 'fileCmp'));
return $files;
}
/**
* Splits the given path into a breadcrumb structure.
* @param string $dir path to process
* @return array where each entry is a hash of the absolute
* directory path and its name
*/
public static function makeBreadcrumb($dir){
// Make breadcrumb
$pathtohere = '';
$breadcrumb = array();
foreach (explode('/', $dir) as $i) {
if ($i !== '') {
if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) {
$name = $match[1];
} else {
$name = $i;
}
$pathtohere .= '/' . $i;
$breadcrumb[] = array('dir' => $pathtohere, 'name' => $name);
}
}
return $breadcrumb;
}
}

View File

@ -5,10 +5,14 @@
</div>
<div id='notification'></div>
<?php if (isset($_['files']) && count($_['files']) === 0 && $_['dirlisting'] === false):?>
<?php if (isset($_['files']) && count($_['files']) === 0 && $_['dirlisting'] === false && !$_['ajaxLoad']):?>
<div id="emptycontent"><?php p($l->t('Nothing in here. Your trash bin is empty!'))?></div>
<?php endif; ?>
<input type="hidden" name="ajaxLoad" id="ajaxLoad" value="<?php p($_['ajaxLoad']); ?>" />
<input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>"></input>
<input type="hidden" name="dir" value="<?php p($_['dir']) ?>" id="dir">
<table id="filestable">
<thead>
<tr>

View File

@ -1,11 +1,11 @@
<div class="crumb">
<div class="crumb home">
<a href="<?php print_unescaped($_['home']); ?>">
<img src="<?php print_unescaped(OCP\image_path('core', 'places/home.svg'));?>" class="svg" />
</a>
</div>
<?php if(count($_["breadcrumb"])):?>
<div class="crumb svg"
data-dir='<?php print_unescaped($_['baseURL']); ?>'>
data-dir='/'>
<a href="<?php p($_['baseURL']); ?>"><?php p($l->t("Deleted Files")); ?></a>
</div>
<?php endif;?>

View File

@ -1,4 +1,3 @@
<input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>">
<?php foreach($_['files'] as $file):
$relative_deleted_date = OCP\relative_modified_date($file['timestamp']);
// the older the file, the brighter the shade of grey; days*14
@ -12,7 +11,7 @@
data-permissions='<?php p($file['permissions']); ?>'
<?php if ( $_['dirlisting'] ): ?>
id="<?php p($file['directory'].'/'.$file['name']);?>"
data-file="<?php p($file['directory'].'/'.$file['name']);?>"
data-file="<?php p($name);?>"
data-timestamp=''
data-dirlisting=1
<?php else: ?>

View File

@ -2,6 +2,9 @@
$TRANSLATIONS = array(
"Could not revert: %s" => "Nepavyko atstatyti: %s",
"Versions" => "Versijos",
"Failed to revert {file} to revision {timestamp}." => "Nepavyko atstatyti {file} į būseną {timestamp}.",
"More versions..." => "Daugiau versijų...",
"No other versions available" => "Nėra daugiau versijų",
"Restore" => "Atstatyti"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);";

View File

@ -16,6 +16,7 @@ $TRANSLATIONS = array(
"Connection test failed" => "Falló es test de conexión",
"Do you really want to delete the current Server Configuration?" => "¿Realmente desea borrar la configuración actual del servidor?",
"Confirm Deletion" => "Confirmar borrado",
"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Advertencia:</b> Las apps user_ldap y user_webdavauth son incompatibles. Puede ser que experimentes comportamientos inesperados. Pedile al administrador que desactive uno de ellos.",
"<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Atención:</b> El módulo PHP LDAP no está instalado, este elemento no va a funcionar. Por favor, pedile al administrador que lo instale.",
"Server configuration" => "Configuración del Servidor",
"Add Server Configuration" => "Añadir Configuración del Servidor",
@ -29,8 +30,11 @@ $TRANSLATIONS = array(
"Password" => "Contraseña",
"For anonymous access, leave DN and Password empty." => "Para acceso anónimo, dejá DN y contraseña vacíos.",
"User Login Filter" => "Filtro de inicio de sesión de usuario",
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Define el filtro a aplicar cuando se intenta ingresar. %%uid remplaza el nombre de usuario en el proceso de identificación. Por ejemplo: \"uid=%%uid\"",
"User List Filter" => "Lista de filtros de usuario",
"Defines the filter to apply, when retrieving users (no placeholders). Example: \"objectClass=person\"" => "Define el filtro a aplicar al obtener usuarios (sin comodines). Por ejemplo: \"objectClass=person\"",
"Group Filter" => "Filtro de grupo",
"Defines the filter to apply, when retrieving groups (no placeholders). Example: \"objectClass=posixGroup\"" => "Define el filtro a aplicar al obtener grupos (sin comodines). Por ejemplo: \"objectClass=posixGroup\"",
"Connection Settings" => "Configuración de Conección",
"Configuration Active" => "Configuración activa",
"When unchecked, this configuration will be skipped." => "Si no está seleccionada, esta configuración será omitida.",
@ -39,19 +43,23 @@ $TRANSLATIONS = array(
"Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Dar un servidor de copia de seguridad opcional. Debe ser una réplica del servidor principal LDAP/AD.",
"Backup (Replica) Port" => "Puerto para copia de seguridad (réplica)",
"Disable Main Server" => "Deshabilitar el Servidor Principal",
"Only connect to the replica server." => "Conectarse únicamente al servidor de réplica.",
"Use TLS" => "Usar TLS",
"Do not use it additionally for LDAPS connections, it will fail." => "No usar adicionalmente para conexiones LDAPS, las mismas fallarán",
"Case insensitve LDAP server (Windows)" => "Servidor de LDAP sensible a mayúsculas/minúsculas (Windows)",
"Turn off SSL certificate validation." => "Desactivar la validación por certificado SSL.",
"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "No es recomendado, ¡Usalo solamente para pruebas! Si la conexión únicamente funciona con esta opción, importá el certificado SSL del servidor LDAP en tu servidor %s.",
"Cache Time-To-Live" => "Tiempo de vida del caché",
"in seconds. A change empties the cache." => "en segundos. Cambiarlo vacía la cache.",
"Directory Settings" => "Configuración de Directorio",
"User Display Name Field" => "Campo de nombre de usuario a mostrar",
"The LDAP attribute to use to generate the user's display name." => "El atributo LDAP a usar para generar el nombre de usuario mostrado.",
"Base User Tree" => "Árbol base de usuario",
"One User Base DN per line" => "Una DN base de usuario por línea",
"User Search Attributes" => "Atributos de la búsqueda de usuario",
"Optional; one attribute per line" => "Opcional; un atributo por linea",
"Group Display Name Field" => "Campo de nombre de grupo a mostrar",
"The LDAP attribute to use to generate the groups's display name." => "El atributo LDAP a usar para generar el nombre de grupo mostrado.",
"Base Group Tree" => "Árbol base de grupo",
"One Group Base DN per line" => "Una DN base de grupo por línea",
"Group Search Attributes" => "Atributos de búsqueda de grupo",
@ -64,10 +72,13 @@ $TRANSLATIONS = array(
"User Home Folder Naming Rule" => "Regla de nombre de los directorios de usuario",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Vacío para el nombre de usuario (por defecto). En otro caso, especificá un atributo LDAP/AD.",
"Internal Username" => "Nombre interno de usuario",
"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "Por defecto, el nombre de usuario interno es creado a partir del atributo UUID. Esto asegura que el nombre de usuario es único y no es necesaria una conversión de caracteres. El nombre de usuario interno sólo se pueden usar estos caracteres: [ a-zA-Z0-9_.@- ]. El resto de caracteres son sustituidos por su correspondiente en ASCII o simplemente omitidos. En caso colisiones, se agregará o incrementará un número. El nombre de usuario interno es usado para identificar un usuario. Es también el nombre predeterminado para el directorio personal del usuario en ownCloud. También es parte de las URLs remotas, por ejemplo, para los servicios *DAV. Con esta opción, se puede cambiar el comportamiento por defecto. Para conseguir un comportamiento similar a versiones anteriores a ownCloud 5, ingresá el atributo del nombre mostrado en el campo siguiente. Dejalo vacío para el comportamiento por defecto. Los cambios solo tendrán efecto en los nuevos usuarios LDAP mapeados (agregados).",
"Internal Username Attribute:" => "Atributo Nombre Interno de usuario:",
"Override UUID detection" => "Sobrescribir la detección UUID",
"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "Por defecto, el atributo UUID es detectado automáticamente. Este atributo es usado para identificar de manera certera usuarios y grupos LDAP. Además, el nombre de usuario interno será creado en base al UUID, si no fue especificado otro comportamiento más arriba. Podés sobrescribir la configuración y pasar un atributo de tu elección. Tenés que asegurarte que el atributo de tu elección sea accesible por los usuarios y grupos y que sea único. Dejalo en blanco para usar el comportamiento por defecto. Los cambios tendrán efecto sólo en los nuevos usuarios y grupos de LDAP mapeados (agregados).",
"UUID Attribute:" => "Atributo UUID:",
"Username-LDAP User Mapping" => "Asignación del Nombre de usuario de un usuario LDAP",
"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "Los usuarios son usados para almacenar y asignar datos (metadatos). Con el fin de identificar de forma precisa y reconocer usuarios, a cada usuario de LDAP se será asignado un nombre de usuario interno. Esto requiere un mapeo entre el nombre de usuario y el usuario del LDAP. El nombre de usuario creado es mapeado respecto al UUID del usuario en el LDAP. De forma adicional, el DN es dejado en caché para reducir la interacción entre el LDAP, pero no es usado para la identificación. Si el DN cambia, los cambios van a ser aplicados. El nombre de usuario interno es usado en todos los lugares. Vaciar los mapeos, deja restos por todas partes. Vaciar los mapeos, no es sensible a configuración, ¡afecta a todas las configuraciones del LDAP! Nunca limpies los mapeos en un entorno de producción, solamente en fase de desarrollo o experimental.",
"Clear Username-LDAP User Mapping" => "Borrar la asignación de los Nombres de usuario de los usuarios LDAP",
"Clear Groupname-LDAP Group Mapping" => "Borrar la asignación de los Nombres de grupo de los grupos de LDAP",
"Test Configuration" => "Probar configuración",

View File

@ -2,6 +2,7 @@
$TRANSLATIONS = array(
"Deletion failed" => "Ištrinti nepavyko",
"Error" => "Klaida",
"Host" => "Mazgas",
"Password" => "Slaptažodis",
"Group Filter" => "Grupės filtras",
"Port" => "Prievadas",

View File

@ -1,5 +1,7 @@
<?php
$TRANSLATIONS = array(
"WebDAV Authentication" => "WebDAV autorizavimas"
"WebDAV Authentication" => "WebDAV autentikacija",
"Address: " => "Adresas:",
"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Naudotojo duomenys bus nusiųsti šiuo adresu. Šis įskiepis patikrins gautą atsakymą ir interpretuos HTTP būsenos kodą 401 ir 403 kaip negaliojančius duomenis, ir visus kitus gautus atsakymus kaip galiojančius duomenis. "
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);";

View File

@ -1,5 +1,6 @@
<?php
$TRANSLATIONS = array(
"WebDAV Authentication" => "Аутентифікація WebDAV"
"WebDAV Authentication" => "Аутентифікація WebDAV",
"Address: " => "Адреса:"
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";

View File

@ -212,6 +212,9 @@ $CONFIG = array(
/* cl parameters for libreoffice / openoffice */
'preview_office_cl_parameters' => '',
/* whether avatars should be enabled */
'enable_avatars' => true,
// Extra SSL options to be used for configuration
'openssl' => array(
//'config' => '/absolute/location/of/openssl.cnf',

158
core/avatar/controller.php Normal file
View File

@ -0,0 +1,158 @@
<?php
/**
* Copyright (c) 2013 Christopher Schäpers <christopher@schaepers.it>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
namespace OC\Core\Avatar;
class Controller {
public static function getAvatar($args) {
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
$user = stripslashes($args['user']);
$size = (int)$args['size'];
if ($size > 2048) {
$size = 2048;
}
// Undefined size
elseif ($size === 0) {
$size = 64;
}
$avatar = new \OC_Avatar($user);
$image = $avatar->get($size);
\OC_Response::disableCaching();
\OC_Response::setLastModifiedHeader(time());
if ($image instanceof \OC_Image) {
\OC_Response::setETagHeader(crc32($image->data()));
$image->show();
} else {
// Signalizes $.avatar() to display a defaultavatar
\OC_JSON::success();
}
}
public static function postAvatar($args) {
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
$user = \OC_User::getUser();
if (isset($_POST['path'])) {
$path = stripslashes($_POST['path']);
$view = new \OC\Files\View('/'.$user.'/files');
$newAvatar = $view->file_get_contents($path);
} elseif (!empty($_FILES)) {
$files = $_FILES['files'];
if (
$files['error'][0] === 0 &&
is_uploaded_file($files['tmp_name'][0]) &&
!\OC\Files\Filesystem::isFileBlacklisted($files['tmp_name'][0])
) {
$newAvatar = file_get_contents($files['tmp_name'][0]);
unlink($files['tmp_name'][0]);
}
} else {
$l = new \OC_L10n('core');
\OC_JSON::error(array("data" => array("message" => $l->t("No image or file provided")) ));
return;
}
try {
$avatar = new \OC_Avatar($user);
$avatar->set($newAvatar);
\OC_JSON::success();
} catch (\OC\NotSquareException $e) {
$image = new \OC_Image($newAvatar);
if ($image->valid()) {
\OC_Cache::set('tmpavatar', $image->data(), 7200);
\OC_JSON::error(array("data" => "notsquare"));
} else {
$l = new \OC_L10n('core');
$mimeType = $image->mimeType();
if ($mimeType !== 'image/jpeg' && $mimeType !== 'image/png') {
\OC_JSON::error(array("data" => array("message" => $l->t("Unknown filetype")) ));
}
if (!$image->valid()) {
\OC_JSON::error(array("data" => array("message" => $l->t("Invalid image")) ));
}
}
} catch (\Exception $e) {
\OC_JSON::error(array("data" => array("message" => $e->getMessage()) ));
}
}
public static function deleteAvatar($args) {
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
$user = \OC_User::getUser();
try {
$avatar = new \OC_Avatar($user);
$avatar->remove();
\OC_JSON::success();
} catch (\Exception $e) {
\OC_JSON::error(array("data" => array("message" => $e->getMessage()) ));
}
}
public static function getTmpAvatar($args) {
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
$tmpavatar = \OC_Cache::get('tmpavatar');
if (is_null($tmpavatar)) {
$l = new \OC_L10n('core');
\OC_JSON::error(array("data" => array("message" => $l->t("No temporary profile picture available, try again")) ));
return;
}
$image = new \OC_Image($tmpavatar);
\OC_Response::disableCaching();
\OC_Response::setLastModifiedHeader(time());
\OC_Response::setETagHeader(crc32($image->data()));
$image->show();
}
public static function postCroppedAvatar($args) {
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
$user = \OC_User::getUser();
if (isset($_POST['crop'])) {
$crop = $_POST['crop'];
} else {
$l = new \OC_L10n('core');
\OC_JSON::error(array("data" => array("message" => $l->t("No crop data provided")) ));
return;
}
$tmpavatar = \OC_Cache::get('tmpavatar');
if (is_null($tmpavatar)) {
$l = new \OC_L10n('core');
\OC_JSON::error(array("data" => array("message" => $l->t("No temporary profile picture available, try again")) ));
return;
}
$image = new \OC_Image($tmpavatar);
$image->crop($crop['x'], $crop['y'], $crop['w'], $crop['h']);
try {
$avatar = new \OC_Avatar($user);
$avatar->set($image->data());
// Clean up
\OC_Cache::remove('tmpavatar');
\OC_JSON::success();
} catch (\Exception $e) {
\OC_JSON::error(array("data" => array("message" => $e->getMessage()) ));
}
}
}

View File

@ -50,8 +50,8 @@
#app-navigation li > a {
display: block;
width: 100%;
height: 44px;
padding: 12px;
line-height: 44px;
padding: 0 12px;
overflow: hidden;
-moz-box-sizing: border-box; box-sizing: border-box;
white-space: nowrap;

View File

@ -40,6 +40,11 @@ body { background:#fefefe; font:normal .8em/1.6em "Helvetica Neue",Helvetica,Ari
.header-right { float:right; vertical-align:middle; padding:0.5em; }
.header-right > * { vertical-align:middle; }
#header .avatardiv {
text-shadow: none;
float: left;
display: inline-block;
}
/* INPUTS */
input[type="text"], input[type="password"], input[type="search"], input[type="number"], input[type="email"], input[type="url"],
@ -583,8 +588,18 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; }
/* USER MENU */
#settings { float:right; margin-top:7px; color:#bbb; text-shadow:0 -1px 0 #000; }
#expand { padding:15px; cursor:pointer; font-weight:bold; }
#settings {
float: right;
margin-top: 7px;
margin-left: 10px;
color: #bbb;
text-shadow: 0 -1px 0 #000;
}
#expand {
padding: 15px 15px 15px 5px;
cursor: pointer;
font-weight: bold;
}
#expand:hover, #expand:focus, #expand:active { color:#fff; }
#expand img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; margin-bottom:-2px; }
#expand:hover img, #expand:focus img, #expand:active img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
@ -624,6 +639,7 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; }
.hidden { display:none; }
.bold { font-weight:bold; }
.center { text-align:center; }
.inlineblock { display: inline-block; }
#notification-container { position: fixed; top: 0px; width: 100%; text-align: center; z-index: 101; line-height: 1.2;}
#notification, #update-notification { z-index:101; background-color:#fc4; border:0; padding:0 .7em .3em; display:none; position: relative; top:0; -moz-border-radius-bottomleft:1em; -webkit-border-bottom-left-radius:1em; border-bottom-left-radius:1em; -moz-border-radius-bottomright:1em; -webkit-border-bottom-right-radius:1em; border-bottom-right-radius:1em; }

9
core/js/avatar.js Normal file
View File

@ -0,0 +1,9 @@
$(document).ready(function(){
$('#header .avatardiv').avatar(OC.currentUser, 32);
// Personal settings
$('#avatar .avatardiv').avatar(OC.currentUser, 128);
// User settings
$.each($('td.avatar .avatardiv'), function(i, element) {
$(element).avatar($(element).parent().parent().data('uid'), 32);
});
});

83
core/js/jquery.avatar.js Normal file
View File

@ -0,0 +1,83 @@
/**
* Copyright (c) 2013 Christopher Schäpers <christopher@schaepers.it>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
/**
* This plugin inserts the right avatar for the user, depending on, whether a
* custom avatar is uploaded - which it uses then - or not, and display a
* placeholder with the first letter of the users name instead.
* For this it queries the core_avatar_get route, thus this plugin is fit very
* tightly for owncloud, and it may not work anywhere else.
*
* You may use this on any <div></div>
* Here I'm using <div class="avatardiv"></div> as an example.
*
* There are 4 ways to call this:
*
* 1. $('.avatardiv').avatar('jdoe', 128);
* This will make the div to jdoe's fitting avatar, with a size of 128px.
*
* 2. $('.avatardiv').avatar('jdoe');
* This will make the div to jdoe's fitting avatar. If the div aready has a
* height, it will be used for the avatars size. Otherwise this plugin will
* search for 'size' DOM data, to use for avatar size. If neither are available
* it will default to 64px.
*
* 3. $('.avatardiv').avatar();
* This will search the DOM for 'user' data, to use as the username. If there
* is no username available it will default to a placeholder with the value of
* "x". The size will be determined the same way, as the second example.
*
* 4. $('.avatardiv').avatar('jdoe', 128, true);
* This will behave like the first example, except it will also append random
* hashes to the custom avatar images, to force image reloading in IE8.
*/
(function ($) {
$.fn.avatar = function(user, size, ie8fix) {
if (typeof(size) === 'undefined') {
if (this.height() > 0) {
size = this.height();
} else if (this.data('size') > 0) {
size = this.data('size');
} else {
size = 64;
}
}
this.height(size);
this.width(size);
if (typeof(user) === 'undefined') {
if (typeof(this.data('user')) !== 'undefined') {
user = this.data('user');
} else {
this.placeholder('x');
return;
}
}
// sanitize
user = user.replace(/\//g,'');
var $div = this;
OC.Router.registerLoadedCallback(function() {
var url = OC.Router.generate('core_avatar_get', {user: user, size: size})+'?requesttoken='+oc_requesttoken;
$.get(url, function(result) {
if (typeof(result) === 'object') {
$div.placeholder(user);
} else {
if (ie8fix === true) {
$div.html('<img src="'+url+'#'+Math.floor(Math.random()*1000)+'">');
} else {
$div.html('<img src="'+url+'">');
}
}
});
});
};
}(jQuery));

View File

@ -39,10 +39,8 @@
return;
}
// Escape
if(event.keyCode === 27 && self.options.closeOnEscape) {
if (self.closeCB) {
self.closeCB();
}
if(event.keyCode === 27 && event.type === 'keydown' && self.options.closeOnEscape) {
event.stopImmediatePropagation();
self.close();
return false;
}
@ -86,27 +84,25 @@
var self = this;
switch(key) {
case 'title':
var $title = $('<h3 class="oc-dialog-title">' + this.options.title
+ '</h3>'); //<hr class="oc-dialog-separator" />');
if(this.$title) {
this.$title.replaceWith($title);
this.$title.text(value);
} else {
var $title = $('<h3 class="oc-dialog-title">'
+ value
+ '</h3>');
this.$title = $title.prependTo(this.$dialog);
}
this._setSizes();
break;
case 'buttons':
var $buttonrow = $('<div class="oc-dialog-buttonrow" />');
if(this.$buttonrow) {
this.$buttonrow.replaceWith($buttonrow);
this.$buttonrow.empty();
} else {
var $buttonrow = $('<div class="oc-dialog-buttonrow" />');
this.$buttonrow = $buttonrow.appendTo(this.$dialog);
}
$.each(value, function(idx, val) {
var $button = $('<button>').text(val.text);
if (val.classes) {
$button.addClass(val.classes);
}
if(val.defaultButton) {
$button.addClass('primary');
self.$defaultButton = $button;
@ -130,6 +126,8 @@
$closeButton.on('click', function() {
self.close();
});
} else {
this.$dialog.find('.oc-dialog-close').remove();
}
break;
case 'width':

View File

@ -321,6 +321,38 @@ var OC={
var date = new Date(1000*mtime);
return date.getDate()+'.'+(date.getMonth()+1)+'.'+date.getFullYear()+', '+date.getHours()+':'+date.getMinutes();
},
/**
* Parses a URL query string into a JS map
* @param queryString query string in the format param1=1234&param2=abcde&param3=xyz
* @return map containing key/values matching the URL parameters
*/
parseQueryString:function(queryString){
var parts,
components,
result = {},
key,
value;
if (!queryString){
return null;
}
if (queryString[0] === '?'){
queryString = queryString.substr(1);
}
parts = queryString.split('&');
for (var i = 0; i < parts.length; i++){
components = parts[i].split('=');
if (!components.length){
continue;
}
key = decodeURIComponent(components[0]);
if (!key){
continue;
}
value = components[1];
result[key] = value && decodeURIComponent(value);
}
return result;
},
/**
* Opens a popup with the setting for an app.
* @param appid String. The ID of the app e.g. 'calendar', 'contacts' or 'files'.

View File

@ -139,8 +139,12 @@ var OCdialogs = {
}
});
})
.fail(function() {
alert(t('core', 'Error loading file picker template'));
.fail(function(status, error) {
// If the method is called while navigating away
// from the page, it is probably not needed ;)
if(status !== 0) {
alert(t('core', 'Error loading file picker template: {error}', {error: error}));
}
});
},
/**
@ -206,8 +210,14 @@ var OCdialogs = {
});
OCdialogs.dialogs_counter++;
})
.fail(function() {
alert(t('core', 'Error loading message template'));
.fail(function(status, error) {
// If the method is called while navigating away from
// the page, we still want to deliver the message.
if(status === 0) {
alert(title + ': ' + content);
} else {
alert(t('core', 'Error loading message template: {error}', {error: error}));
}
});
},
_fileexistsshown: false,
@ -454,8 +464,8 @@ var OCdialogs = {
self.$listTmpl = self.$filePickerTemplate.find('.filelist li:first-child').detach();
defer.resolve(self.$filePickerTemplate);
})
.fail(function() {
defer.reject();
.fail(function(jqXHR, textStatus, errorThrown) {
defer.reject(jqXHR.status, errorThrown);
});
} else {
defer.resolve(this.$filePickerTemplate);
@ -470,8 +480,8 @@ var OCdialogs = {
self.$messageTemplate = $(tmpl);
defer.resolve(self.$messageTemplate);
})
.fail(function() {
defer.reject();
.fail(function(jqXHR, textStatus, errorThrown) {
defer.reject(jqXHR.status, errorThrown);
});
} else {
defer.resolve(this.$messageTemplate);
@ -495,9 +505,16 @@ var OCdialogs = {
return defer.promise();
},
_getFileList: function(dir, mimeType) {
if (typeof(mimeType) === "string") {
mimeType = [mimeType];
}
return $.getJSON(
OC.filePath('files', 'ajax', 'rawlist.php'),
{dir: dir, mimetype: mimeType}
{
dir: dir,
mimetypes: JSON.stringify(mimeType)
}
);
},
_determineValue: function(element) {
@ -536,11 +553,7 @@ var OCdialogs = {
filename: entry.name,
date: OC.mtime2date(entry.mtime)
});
if (entry.mimetype === "httpd/unix-directory") {
$li.find('img').attr('src', OC.imagePath('core', 'filetypes/folder.png'));
} else {
$li.find('img').attr('src', OC.Router.generate('core_ajax_preview', {x:32, y:32, file:escapeHTML(dir+'/'+entry.name)}) );
}
$li.find('img').attr('src', entry.mimetype_icon);
self.$filelist.append($li);
});

View File

@ -233,6 +233,7 @@ OC.Share={
// } else {
$.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term, itemShares: OC.Share.itemShares }, function(result) {
if (result.status == 'success' && result.data.length > 0) {
$( "#shareWith" ).autocomplete( "option", "autoFocus", true );
response(result.data);
} else {
// Suggest sharing via email if valid email address
@ -240,6 +241,7 @@ OC.Share={
// if (pattern.test(search.term)) {
// response([{label: t('core', 'Share via email:')+' '+search.term, value: {shareType: OC.Share.SHARE_TYPE_EMAIL, shareWith: search.term}}]);
// } else {
$( "#shareWith" ).autocomplete( "option", "autoFocus", false );
response([t('core', 'No people found')]);
// }
}
@ -423,7 +425,7 @@ OC.Share={
dateFormat : 'dd-mm-yy'
});
}
}
};
$(document).ready(function() {
@ -512,7 +514,7 @@ $(document).ready(function() {
$(document).on('change', '#dropdown .permissions', function() {
if ($(this).attr('name') == 'edit') {
var li = $(this).parent().parent()
var li = $(this).parent().parent();
var checkboxes = $('.permissions', li);
var checked = $(this).is(':checked');
// Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "l'any passat",
"years ago" => "anys enrere",
"Choose" => "Escull",
"Error loading file picker template" => "Error en carregar la plantilla del seleccionador de fitxers",
"Yes" => "",
"No" => "No",
"Ok" => "D'acord",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "minulý rok",
"years ago" => "před lety",
"Choose" => "Vybrat",
"Error loading file picker template" => "Chyba při načítání šablony výběru souborů",
"Yes" => "Ano",
"No" => "Ne",
"Ok" => "Ok",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "sidste år",
"years ago" => "år siden",
"Choose" => "Vælg",
"Error loading file picker template" => "Fejl ved indlæsning af filvælger skabelon",
"Yes" => "Ja",
"No" => "Nej",
"Ok" => "OK",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "Letztes Jahr",
"years ago" => "Vor Jahren",
"Choose" => "Auswählen",
"Error loading file picker template" => "Dateiauswahltemplate konnte nicht geladen werden",
"Yes" => "Ja",
"No" => "Nein",
"Ok" => "OK",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "Letztes Jahr",
"years ago" => "Vor Jahren",
"Choose" => "Auswählen",
"Error loading file picker template" => "Es ist ein Fehler in der Vorlage des Datei-Auswählers aufgetreten.",
"Yes" => "Ja",
"No" => "Nein",
"Ok" => "OK",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "Letztes Jahr",
"years ago" => "Vor Jahren",
"Choose" => "Auswählen",
"Error loading file picker template" => "Es ist ein Fehler in der Vorlage des Datei-Auswählers aufgetreten.",
"Yes" => "Ja",
"No" => "Nein",
"Ok" => "OK",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "τελευταίο χρόνο",
"years ago" => "χρόνια πριν",
"Choose" => "Επιλέξτε",
"Error loading file picker template" => "Σφάλμα φόρτωσης αρχείου επιλογέα προτύπου",
"Yes" => "Ναι",
"No" => "Όχι",
"Ok" => "Οκ",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "last year",
"years ago" => "years ago",
"Choose" => "Choose",
"Error loading file picker template" => "Error loading file picker template",
"Yes" => "Yes",
"No" => "No",
"Ok" => "OK",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "el año pasado",
"years ago" => "años antes",
"Choose" => "Seleccionar",
"Error loading file picker template" => "Error cargando la plantilla del seleccionador de archivos",
"Yes" => "",
"No" => "No",
"Ok" => "Aceptar",

View File

@ -2,6 +2,12 @@
$TRANSLATIONS = array(
"%s shared »%s« with you" => "%s compartió \"%s\" con vos",
"group" => "grupo",
"Turned on maintenance mode" => "Modo de mantenimiento activado",
"Turned off maintenance mode" => "Modo de mantenimiento desactivado",
"Updated database" => "Base de datos actualizada",
"Updating filecache, this may take really long..." => "Actualizando caché de archivos, esto puede tardar mucho tiempo...",
"Updated filecache" => "Caché de archivos actualizada",
"... %d%% done ..." => "... %d%% hecho ...",
"Category type not provided." => "Tipo de categoría no provisto. ",
"No category to add?" => "¿Ninguna categoría para añadir?",
"This category already exists: %s" => "Esta categoría ya existe: %s",
@ -31,18 +37,17 @@ $TRANSLATIONS = array(
"December" => "diciembre",
"Settings" => "Configuración",
"seconds ago" => "segundos atrás",
"_%n minute ago_::_%n minutes ago_" => array("",""),
"_%n hour ago_::_%n hours ago_" => array("",""),
"_%n minute ago_::_%n minutes ago_" => array("Hace %n minuto","Hace %n minutos"),
"_%n hour ago_::_%n hours ago_" => array("Hace %n hora","Hace %n horas"),
"today" => "hoy",
"yesterday" => "ayer",
"_%n day ago_::_%n days ago_" => array("",""),
"_%n day ago_::_%n days ago_" => array("Hace %n día","Hace %n días"),
"last month" => "el mes pasado",
"_%n month ago_::_%n months ago_" => array("",""),
"_%n month ago_::_%n months ago_" => array("Hace %n mes","Hace %n meses"),
"months ago" => "meses atrás",
"last year" => "el año pasado",
"years ago" => "años atrás",
"Choose" => "Elegir",
"Error loading file picker template" => "Error al cargar la plantilla del seleccionador de archivos",
"Yes" => "",
"No" => "No",
"Ok" => "Aceptar",
@ -84,6 +89,7 @@ $TRANSLATIONS = array(
"Email sent" => "e-mail mandado",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "La actualización no pudo ser completada. Por favor, reportá el inconveniente a la comunidad <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud</a>.",
"The update was successful. Redirecting you to ownCloud now." => "La actualización fue exitosa. Estás siendo redirigido a ownCloud.",
"%s password reset" => "%s restablecer contraseña",
"Use the following link to reset your password: {link}" => "Usá este enlace para restablecer tu contraseña: {link}",
"The link to reset your password has been sent to your email.<br>If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator ." => "El enlace para restablecer la contraseña fue enviada a tu e-mail. <br> Si no lo recibís en un plazo de tiempo razonable, revisá tu carpeta de spam / correo no deseado. <br> Si no está ahí, preguntale a tu administrador.",
"Request failed!<br>Did you make sure your email/username was right?" => "¡Error en el pedido! <br> ¿Estás seguro de que tu dirección de correo electrónico o nombre de usuario son correcto?",
@ -108,9 +114,11 @@ $TRANSLATIONS = array(
"Add" => "Agregar",
"Security Warning" => "Advertencia de seguridad",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "La versión de PHP que tenés, es vulnerable al ataque de byte NULL (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." => "Por favor, actualizá tu instalación PHP para poder usar %s de manera segura.",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "No hay disponible ningún generador de números aleatorios seguro. Por favor, habilitá la extensión OpenSSL de PHP.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sin un generador de números aleatorios seguro un atacante podría predecir las pruebas de reinicio de tu contraseña y tomar control de tu cuenta.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Tu directorio de datos y tus archivos probablemente son accesibles a través de internet, ya que el archivo .htaccess no está funcionando.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Para información sobre cómo configurar apropiadamente tu servidor, por favor mirá la <a href=\"%s\" target=\"_blank\">documentación</a>.",
"Create an <strong>admin account</strong>" => "Crear una <strong>cuenta de administrador</strong>",
"Advanced" => "Avanzado",
"Data folder" => "Directorio de almacenamiento",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "viimasel aastal",
"years ago" => "aastat tagasi",
"Choose" => "Vali",
"Error loading file picker template" => "Viga failivalija malli laadimisel",
"Yes" => "Jah",
"No" => "Ei",
"Ok" => "Ok",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "joan den urtean",
"years ago" => "urte",
"Choose" => "Aukeratu",
"Error loading file picker template" => "Errorea fitxategi hautatzaile txantiloiak kargatzerakoan",
"Yes" => "Bai",
"No" => "Ez",
"Ok" => "Ados",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "سال قبل",
"years ago" => "سال‌های قبل",
"Choose" => "انتخاب کردن",
"Error loading file picker template" => "خطا در بارگذاری قالب انتخاب کننده فایل",
"Yes" => "بله",
"No" => "نه",
"Ok" => "قبول",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "l'année dernière",
"years ago" => "il y a plusieurs années",
"Choose" => "Choisir",
"Error loading file picker template" => "Erreur de chargement du modèle du sélecteur de fichier",
"Yes" => "Oui",
"No" => "Non",
"Ok" => "Ok",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "último ano",
"years ago" => "anos atrás",
"Choose" => "Escoller",
"Error loading file picker template" => "Produciuse un erro ao cargar o modelo do selector de ficheiros",
"Yes" => "Si",
"No" => "Non",
"Ok" => "Aceptar",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "שנה שעברה",
"years ago" => "שנים",
"Choose" => "בחירה",
"Error loading file picker template" => "שגיאה בטעינת תבנית בחירת הקבצים",
"Yes" => "כן",
"No" => "לא",
"Ok" => "בסדר",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "tavaly",
"years ago" => "több éve",
"Choose" => "Válasszon",
"Error loading file picker template" => "Nem sikerült betölteni a fájlkiválasztó sablont",
"Yes" => "Igen",
"No" => "Nem",
"Ok" => "Ok",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "anno scorso",
"years ago" => "anni fa",
"Choose" => "Scegli",
"Error loading file picker template" => "Errore durante il caricamento del modello del selezionatore di file",
"Yes" => "",
"No" => "No",
"Ok" => "Ok",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "一年前",
"years ago" => "年前",
"Choose" => "選択",
"Error loading file picker template" => "ファイルピッカーのテンプレートの読み込みエラー",
"Yes" => "はい",
"No" => "いいえ",
"Ok" => "OK",

8
core/l10n/km.php Normal file
View File

@ -0,0 +1,8 @@
<?php
$TRANSLATIONS = array(
"_%n minute ago_::_%n minutes ago_" => array(""),
"_%n hour ago_::_%n hours ago_" => array(""),
"_%n day ago_::_%n days ago_" => array(""),
"_%n month ago_::_%n months ago_" => array("")
);
$PLURAL_FORMS = "nplurals=1; plural=0;";

View File

@ -6,6 +6,7 @@ $TRANSLATIONS = array(
"_%n day ago_::_%n days ago_" => array("",""),
"_%n month ago_::_%n months ago_" => array("",""),
"Error" => "هه‌ڵه",
"Share" => "هاوبەشی کردن",
"Password" => "وشەی تێپەربو",
"Username" => "ناوی به‌کارهێنه‌ر",
"New password" => "وشەی نهێنی نوێ",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "Lescht Joer",
"years ago" => "Joren hir",
"Choose" => "Auswielen",
"Error loading file picker template" => "Feeler beim Luede vun der Virlag fir d'Fichiers-Selektioun",
"Yes" => "Jo",
"No" => "Nee",
"Ok" => "OK",

View File

@ -2,6 +2,12 @@
$TRANSLATIONS = array(
"%s shared »%s« with you" => "%s pasidalino »%s« su tavimi",
"group" => "grupė",
"Turned on maintenance mode" => "Įjungta priežiūros veiksena",
"Turned off maintenance mode" => "Išjungta priežiūros veiksena",
"Updated database" => "Atnaujinta duomenų bazė",
"Updating filecache, this may take really long..." => "Atnaujinama failų talpykla, tai gali užtrukti labai ilgai...",
"Updated filecache" => "Atnaujinta failų talpykla",
"... %d%% done ..." => "... %d%% atlikta ...",
"Category type not provided." => "Kategorija nenurodyta.",
"No category to add?" => "Nepridėsite jokios kategorijos?",
"This category already exists: %s" => "Ši kategorija jau egzistuoja: %s",
@ -35,14 +41,13 @@ $TRANSLATIONS = array(
"_%n hour ago_::_%n hours ago_" => array("prieš %n valandą","prieš %n valandų","prieš %n valandų"),
"today" => "šiandien",
"yesterday" => "vakar",
"_%n day ago_::_%n days ago_" => array("","",""),
"_%n day ago_::_%n days ago_" => array("prieš %n dieną","prieš %n dienas","prieš %n dienų"),
"last month" => "praeitą mėnesį",
"_%n month ago_::_%n months ago_" => array("prieš %n mėnesį","prieš %n mėnesius","prieš %n mėnesių"),
"months ago" => "prieš mėnesį",
"last year" => "praeitais metais",
"years ago" => "prieš metus",
"Choose" => "Pasirinkite",
"Error loading file picker template" => "Klaida pakraunant failų naršyklę",
"Yes" => "Taip",
"No" => "Ne",
"Ok" => "Gerai",
@ -61,6 +66,7 @@ $TRANSLATIONS = array(
"Share with link" => "Dalintis nuoroda",
"Password protect" => "Apsaugotas slaptažodžiu",
"Password" => "Slaptažodis",
"Allow Public Upload" => "Leisti viešą įkėlimą",
"Email link to person" => "Nusiųsti nuorodą paštu",
"Send" => "Siųsti",
"Set expiration date" => "Nustatykite galiojimo laiką",
@ -89,6 +95,7 @@ $TRANSLATIONS = array(
"Request failed!<br>Did you make sure your email/username was right?" => "Klaida!<br>Ar tikrai jūsų el paštas/vartotojo vardas buvo teisingi?",
"You will receive a link to reset your password via Email." => "Elektroniniu paštu gausite nuorodą, su kuria galėsite iš naujo nustatyti slaptažodį.",
"Username" => "Prisijungimo vardas",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?" => "Jūsų failai yra užšifruoti. Jei neįjungėte atstatymo rakto, nebus galimybės atstatyti duomenų po slaptažodžio atstatymo. Jei nesate tikri ką daryti, prašome susisiekti su administratoriumi prie tęsiant. Ar tikrai tęsti?",
"Yes, I really want to reset my password now" => "Taip, aš tikrai noriu atnaujinti slaptažodį",
"Request reset" => "Prašyti nustatymo iš najo",
"Your password was reset" => "Jūsų slaptažodis buvo nustatytas iš naujo",
@ -102,13 +109,16 @@ $TRANSLATIONS = array(
"Help" => "Pagalba",
"Access forbidden" => "Priėjimas draudžiamas",
"Cloud not found" => "Negalima rasti",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\nCheers!" => "Labas,\n\nInformuojame, kad %s pasidalino su Jumis %s.\nPažiūrėkite: %s\n\nLinkėjimai!",
"Edit categories" => "Redaguoti kategorijas",
"Add" => "Pridėti",
"Security Warning" => "Saugumo pranešimas",
"Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" => "Jūsų PHP versija yra pažeidžiama prieš NULL Byte ataką (CVE-2006-7243)",
"Please update your PHP installation to use %s securely." => "Prašome atnaujinti savo PHP, kad saugiai naudoti %s.",
"No secure random number generator is available, please enable the PHP OpenSSL extension." => "Saugaus atsitiktinių skaičių generatoriaus nėra, prašome įjungti PHP OpenSSL modulį.",
"Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Be saugaus atsitiktinių skaičių generatoriaus, piktavaliai gali atspėti Jūsų slaptažodį ir pasisavinti paskyrą.",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Jūsų failai yra tikriausiai prieinami per internetą nes .htaccess failas neveikia.",
"For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." => "Kad gauti informaciją apie tai kaip tinkamai sukonfigūruoti savo serverį, prašome skaityti <a href=\"%s\" target=\"_blank\">dokumentaciją</a>.",
"Create an <strong>admin account</strong>" => "Sukurti <strong>administratoriaus paskyrą</strong>",
"Advanced" => "Išplėstiniai",
"Data folder" => "Duomenų katalogas",
@ -129,6 +139,7 @@ $TRANSLATIONS = array(
"remember" => "prisiminti",
"Log in" => "Prisijungti",
"Alternative Logins" => "Alternatyvūs prisijungimai",
"Hey there,<br><br>just letting you know that %s shared »%s« with you.<br><a href=\"%s\">View it!</a><br><br>Cheers!" => "Labas,<br><br>tik informuojame, kad %s pasidalino su Jumis »%s«.<br><a href=\"%s\">Peržiūrėk!</a><br><br>Linkėjimai!",
"Updating ownCloud to version %s, this may take a while." => "Atnaujinama ownCloud į %s versiją. tai gali šiek tiek užtrukti."
);
$PLURAL_FORMS = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);";

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "gājušajā gadā",
"years ago" => "gadus atpakaļ",
"Choose" => "Izvēlieties",
"Error loading file picker template" => "Kļūda ielādējot datņu ņēmēja veidni",
"Yes" => "",
"No" => "",
"Ok" => "Labi",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "vorig jaar",
"years ago" => "jaar geleden",
"Choose" => "Kies",
"Error loading file picker template" => "Fout bij laden van bestandsselectie sjabloon",
"Yes" => "Ja",
"No" => "Nee",
"Ok" => "Ok",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "i fjor",
"years ago" => "år sidan",
"Choose" => "Vel",
"Error loading file picker template" => "Klarte ikkje å lasta filveljarmalen",
"Yes" => "Ja",
"No" => "Nei",
"Ok" => "Greitt",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "w zeszłym roku",
"years ago" => "lat temu",
"Choose" => "Wybierz",
"Error loading file picker template" => "Błąd podczas ładowania pliku wybranego szablonu",
"Yes" => "Tak",
"No" => "Nie",
"Ok" => "OK",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "último ano",
"years ago" => "anos atrás",
"Choose" => "Escolha",
"Error loading file picker template" => "Template selecionador Erro ao carregar arquivo",
"Yes" => "Sim",
"No" => "Não",
"Ok" => "Ok",

View File

@ -5,6 +5,8 @@ $TRANSLATIONS = array(
"Turned on maintenance mode" => "Activado o modo de manutenção",
"Turned off maintenance mode" => "Desactivado o modo de manutenção",
"Updated database" => "Base de dados actualizada",
"Updating filecache, this may take really long..." => "A actualizar o cache dos ficheiros, poderá demorar algum tempo...",
"Updated filecache" => "Actualizado o cache dos ficheiros",
"... %d%% done ..." => "... %d%% feito ...",
"Category type not provided." => "Tipo de categoria não fornecido",
"No category to add?" => "Nenhuma categoria para adicionar?",
@ -46,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "ano passado",
"years ago" => "anos atrás",
"Choose" => "Escolha",
"Error loading file picker template" => "Erro ao carregar arquivo do separador modelo",
"Yes" => "Sim",
"No" => "Não",
"Ok" => "Ok",
@ -88,6 +89,7 @@ $TRANSLATIONS = array(
"Email sent" => "E-mail enviado",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "A actualização falhou. Por favor reporte este incidente seguindo este link <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>.",
"The update was successful. Redirecting you to ownCloud now." => "A actualização foi concluída com sucesso. Vai ser redireccionado para o ownCloud agora.",
"%s password reset" => "%s reposição da password",
"Use the following link to reset your password: {link}" => "Use o seguinte endereço para repor a sua password: {link}",
"The link to reset your password has been sent to your email.<br>If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator ." => "O link para fazer reset à sua password foi enviado para o seu e-mail. <br> Se não o recebeu dentro um espaço de tempo aceitável, por favor verifique a sua pasta de SPAM.<br> Se não o encontrar, por favor contacte o seu administrador.",
"Request failed!<br>Did you make sure your email/username was right?" => "O pedido falhou! <br> Tem a certeza que introduziu o seu email/username correcto?",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "ultimul an",
"years ago" => "ani în urmă",
"Choose" => "Alege",
"Error loading file picker template" => "Eroare la încărcarea șablonului selectorului de fișiere",
"Yes" => "Da",
"No" => "Nu",
"Ok" => "Ok",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "в прошлом году",
"years ago" => "несколько лет назад",
"Choose" => "Выбрать",
"Error loading file picker template" => "Ошибка при загрузке файла выбора шаблона",
"Yes" => "Да",
"No" => "Нет",
"Ok" => "Ок",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "minulý rok",
"years ago" => "pred rokmi",
"Choose" => "Výber",
"Error loading file picker template" => "Chyba pri načítaní šablóny výberu súborov",
"Yes" => "Áno",
"No" => "Nie",
"Ok" => "Ok",

View File

@ -42,7 +42,6 @@ $TRANSLATIONS = array(
"last year" => "lansko leto",
"years ago" => "let nazaj",
"Choose" => "Izbor",
"Error loading file picker template" => "Napaka pri nalaganju predloge za izbor dokumenta",
"Yes" => "Da",
"No" => "Ne",
"Ok" => "V redu",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "vitin e shkuar",
"years ago" => "vite më parë",
"Choose" => "Zgjidh",
"Error loading file picker template" => "Veprim i gabuar gjatë ngarkimit të modelit të zgjedhësit të skedarëve",
"Yes" => "Po",
"No" => "Jo",
"Ok" => "Në rregull",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "förra året",
"years ago" => "år sedan",
"Choose" => "Välj",
"Error loading file picker template" => "Fel vid inläsning av filväljarens mall",
"Yes" => "Ja",
"No" => "Nej",
"Ok" => "Ok",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "geçen yıl",
"years ago" => "yıl önce",
"Choose" => "seç",
"Error loading file picker template" => "Seçici şablon dosya yüklemesinde hata",
"Yes" => "Evet",
"No" => "Hayır",
"Ok" => "Tamam",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "去年",
"years ago" => "年前",
"Choose" => "选择(&C)...",
"Error loading file picker template" => "加载文件选择器模板出错",
"Yes" => "",
"No" => "",
"Ok" => "",

View File

@ -48,7 +48,6 @@ $TRANSLATIONS = array(
"last year" => "去年",
"years ago" => "幾年前",
"Choose" => "選擇",
"Error loading file picker template" => "載入檔案選擇器樣板發生錯誤",
"Yes" => "",
"No" => "",
"Ok" => "",

View File

@ -57,6 +57,23 @@ $this->create('core_lostpassword_reset_password', '/lostpassword/reset/{token}/{
->post()
->action('OC\Core\LostPassword\Controller', 'resetPassword');
// Avatar routes
$this->create('core_avatar_get_tmp', '/avatar/tmp')
->get()
->action('OC\Core\Avatar\Controller', 'getTmpAvatar');
$this->create('core_avatar_get', '/avatar/{user}/{size}')
->get()
->action('OC\Core\Avatar\Controller', 'getAvatar');
$this->create('core_avatar_post', '/avatar/')
->post()
->action('OC\Core\Avatar\Controller', 'postAvatar');
$this->create('core_avatar_delete', '/avatar/')
->delete()
->action('OC\Core\Avatar\Controller', 'deleteAvatar');
$this->create('core_avatar_post_cropped', '/avatar/cropped')
->post()
->action('OC\Core\Avatar\Controller', 'postCroppedAvatar');
// Not specifically routed
$this->create('app_css', '/apps/{app}/{file}')
->requirements(array('file' => '.*.css'))

View File

@ -49,6 +49,9 @@
<span id="expand" tabindex="0" role="link">
<span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span>
<img class="svg" src="<?php print_unescaped(image_path('', 'actions/caret.svg')); ?>" />
<?php if ($_['enableAvatars']): ?>
<div class="avatardiv"></div>
<?php endif; ?>
</span>
<div id="expanddiv">
<?php foreach($_['settingsnavigation'] as $entry):?>

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-09-07 04:40-0400\n"
"PO-Revision-Date: 2013-09-07 07:27+0000\n"
"POT-Creation-Date: 2013-09-16 11:33-0400\n"
"PO-Revision-Date: 2013-09-16 15:34+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Acoli (http://www.transifex.com/projects/p/owncloud/language/ach/)\n"
"MIME-Version: 1.0\n"
@ -90,6 +90,26 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
#: avatar/controller.php:62
msgid "No image or file provided"
msgstr ""
#: avatar/controller.php:81
msgid "Unknown filetype"
msgstr ""
#: avatar/controller.php:85
msgid "Invalid image"
msgstr ""
#: avatar/controller.php:115 avatar/controller.php:142
msgid "No temporary profile picture available, try again"
msgstr ""
#: avatar/controller.php:135
msgid "No crop data provided"
msgstr ""
#: js/config.php:32
msgid "Sunday"
msgstr ""
@ -166,59 +186,59 @@ msgstr ""
msgid "December"
msgstr ""
#: js/js.js:355
#: js/js.js:387
msgid "Settings"
msgstr ""
#: js/js.js:821
#: js/js.js:853
msgid "seconds ago"
msgstr ""
#: js/js.js:822
#: js/js.js:854
msgid "%n minute ago"
msgid_plural "%n minutes ago"
msgstr[0] ""
msgstr[1] ""
#: js/js.js:823
#: js/js.js:855
msgid "%n hour ago"
msgid_plural "%n hours ago"
msgstr[0] ""
msgstr[1] ""
#: js/js.js:824
#: js/js.js:856
msgid "today"
msgstr ""
#: js/js.js:825
#: js/js.js:857
msgid "yesterday"
msgstr ""
#: js/js.js:826
#: js/js.js:858
msgid "%n day ago"
msgid_plural "%n days ago"
msgstr[0] ""
msgstr[1] ""
#: js/js.js:827
#: js/js.js:859
msgid "last month"
msgstr ""
#: js/js.js:828
#: js/js.js:860
msgid "%n month ago"
msgid_plural "%n months ago"
msgstr[0] ""
msgstr[1] ""
#: js/js.js:829
#: js/js.js:861
msgid "months ago"
msgstr ""
#: js/js.js:830
#: js/js.js:862
msgid "last year"
msgstr ""
#: js/js.js:831
#: js/js.js:863
msgid "years ago"
msgstr ""
@ -226,22 +246,26 @@ msgstr ""
msgid "Choose"
msgstr ""
#: js/oc-dialogs.js:143 js/oc-dialogs.js:210
msgid "Error loading file picker template"
#: js/oc-dialogs.js:146
msgid "Error loading file picker template: {error}"
msgstr ""
#: js/oc-dialogs.js:168
#: js/oc-dialogs.js:172
msgid "Yes"
msgstr ""
#: js/oc-dialogs.js:178
#: js/oc-dialogs.js:182
msgid "No"
msgstr ""
#: js/oc-dialogs.js:195
#: js/oc-dialogs.js:199
msgid "Ok"
msgstr ""
#: js/oc-dialogs.js:219
msgid "Error loading message template: {error}"
msgstr ""
#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
msgid "The object type is not specified."
@ -251,7 +275,7 @@ msgstr ""
#: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
#: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
#: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
#: js/share.js:643 js/share.js:655
#: js/share.js:645 js/share.js:657
msgid "Error"
msgstr ""
@ -271,7 +295,7 @@ msgstr ""
msgid "Share"
msgstr ""
#: js/share.js:131 js/share.js:683
#: js/share.js:131 js/share.js:685
msgid "Error while sharing"
msgstr ""
@ -327,67 +351,67 @@ msgstr ""
msgid "Expiration date"
msgstr ""
#: js/share.js:241
#: js/share.js:242
msgid "Share via email:"
msgstr ""
#: js/share.js:243
#: js/share.js:245
msgid "No people found"
msgstr ""
#: js/share.js:281
#: js/share.js:283
msgid "Resharing is not allowed"
msgstr ""
#: js/share.js:317
#: js/share.js:319
msgid "Shared in {item} with {user}"
msgstr ""
#: js/share.js:338
#: js/share.js:340
msgid "Unshare"
msgstr ""
#: js/share.js:350
#: js/share.js:352
msgid "can edit"
msgstr ""
#: js/share.js:352
#: js/share.js:354
msgid "access control"
msgstr ""
#: js/share.js:355
#: js/share.js:357
msgid "create"
msgstr ""
#: js/share.js:358
#: js/share.js:360
msgid "update"
msgstr ""
#: js/share.js:361
#: js/share.js:363
msgid "delete"
msgstr ""
#: js/share.js:364
#: js/share.js:366
msgid "share"
msgstr ""
#: js/share.js:398 js/share.js:630
#: js/share.js:400 js/share.js:632
msgid "Password protected"
msgstr ""
#: js/share.js:643
#: js/share.js:645
msgid "Error unsetting expiration date"
msgstr ""
#: js/share.js:655
#: js/share.js:657
msgid "Error setting expiration date"
msgstr ""
#: js/share.js:670
#: js/share.js:672
msgid "Sending ..."
msgstr ""
#: js/share.js:681
#: js/share.js:683
msgid "Email sent"
msgstr ""
@ -471,7 +495,7 @@ msgstr ""
msgid "Users"
msgstr ""
#: strings.php:7 templates/layout.user.php:105
#: strings.php:7 templates/layout.user.php:108
msgid "Apps"
msgstr ""
@ -600,7 +624,7 @@ msgstr ""
msgid "%s is available. Get more information on how to update."
msgstr ""
#: templates/layout.user.php:66
#: templates/layout.user.php:69
msgid "Log out"
msgstr ""

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-09-07 04:40-0400\n"
"PO-Revision-Date: 2013-09-07 07:27+0000\n"
"POT-Creation-Date: 2013-09-16 11:33-0400\n"
"PO-Revision-Date: 2013-09-16 15:34+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Acoli (http://www.transifex.com/projects/p/owncloud/language/ach/)\n"
"MIME-Version: 1.0\n"
@ -48,11 +48,23 @@ msgstr ""
msgid "Admin"
msgstr ""
#: app.php:837
#: app.php:839
#, php-format
msgid "Failed to upgrade \"%s\"."
msgstr ""
#: avatar.php:56
msgid "Custom profile pictures don't work with encryption yet"
msgstr ""
#: avatar.php:64
msgid "Unknown filetype"
msgstr ""
#: avatar.php:69
msgid "Invalid image"
msgstr ""
#: defaults.php:35
msgid "web services under your control"
msgstr ""
@ -105,37 +117,37 @@ msgstr ""
msgid "Failed to open archive when installing app"
msgstr ""
#: installer.php:123
#: installer.php:125
msgid "App does not provide an info.xml file"
msgstr ""
#: installer.php:129
#: installer.php:131
msgid "App can't be installed because of not allowed code in the App"
msgstr ""
#: installer.php:138
#: installer.php:140
msgid ""
"App can't be installed because it is not compatible with this version of "
"ownCloud"
msgstr ""
#: installer.php:144
#: installer.php:146
msgid ""
"App can't be installed because it contains the <shipped>true</shipped> tag "
"which is not allowed for non shipped apps"
msgstr ""
#: installer.php:150
#: installer.php:152
msgid ""
"App can't be installed because the version in info.xml/version is not the "
"same as the version reported from the app store"
msgstr ""
#: installer.php:160
#: installer.php:162
msgid "App directory already exists"
msgstr ""
#: installer.php:173
#: installer.php:175
#, php-format
msgid "Can't create app folder. Please fix permissions. %s"
msgstr ""

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-09-07 04:40-0400\n"
"PO-Revision-Date: 2013-09-07 07:27+0000\n"
"POT-Creation-Date: 2013-09-16 11:33-0400\n"
"PO-Revision-Date: 2013-09-16 15:34+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Acoli (http://www.transifex.com/projects/p/owncloud/language/ach/)\n"
"MIME-Version: 1.0\n"
@ -128,11 +128,15 @@ msgstr ""
msgid "Updated"
msgstr ""
#: js/personal.js:150
#: js/personal.js:217
msgid "Select a profile picture"
msgstr ""
#: js/personal.js:262
msgid "Decrypting files... Please wait, this can take some time."
msgstr ""
#: js/personal.js:172
#: js/personal.js:284
msgid "Saving..."
msgstr ""
@ -148,16 +152,16 @@ msgstr ""
msgid "Unable to remove user"
msgstr ""
#: js/users.js:92 templates/users.php:26 templates/users.php:87
#: templates/users.php:112
#: js/users.js:92 templates/users.php:26 templates/users.php:90
#: templates/users.php:118
msgid "Groups"
msgstr ""
#: js/users.js:97 templates/users.php:89 templates/users.php:124
#: js/users.js:97 templates/users.php:92 templates/users.php:130
msgid "Group Admin"
msgstr ""
#: js/users.js:120 templates/users.php:164
#: js/users.js:120 templates/users.php:170
msgid "Delete"
msgstr ""
@ -177,7 +181,7 @@ msgstr ""
msgid "A valid password must be provided"
msgstr ""
#: personal.php:40 personal.php:41
#: personal.php:45 personal.php:46
msgid "__language_name__"
msgstr ""
@ -343,11 +347,11 @@ msgstr ""
msgid "Less"
msgstr ""
#: templates/admin.php:242 templates/personal.php:140
#: templates/admin.php:242 templates/personal.php:161
msgid "Version"
msgstr ""
#: templates/admin.php:246 templates/personal.php:143
#: templates/admin.php:246 templates/personal.php:164
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@ -414,7 +418,7 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
#: templates/personal.php:39 templates/users.php:23 templates/users.php:86
#: templates/personal.php:39 templates/users.php:23 templates/users.php:89
msgid "Password"
msgstr ""
@ -438,7 +442,7 @@ msgstr ""
msgid "Change password"
msgstr ""
#: templates/personal.php:58 templates/users.php:85
#: templates/personal.php:58 templates/users.php:88
msgid "Display Name"
msgstr ""
@ -454,38 +458,66 @@ msgstr ""
msgid "Fill in an email address to enable password recovery"
msgstr ""
#: templates/personal.php:85 templates/personal.php:86
msgid "Language"
#: templates/personal.php:86
msgid "Profile picture"
msgstr ""
#: templates/personal.php:90
msgid "Upload new"
msgstr ""
#: templates/personal.php:92
msgid "Select new from Files"
msgstr ""
#: templates/personal.php:93
msgid "Remove image"
msgstr ""
#: templates/personal.php:94
msgid "Either png or jpg. Ideally square but you will be able to crop it."
msgstr ""
#: templates/personal.php:97
msgid "Abort"
msgstr ""
#: templates/personal.php:98
msgid "Choose as profile image"
msgstr ""
#: templates/personal.php:106 templates/personal.php:107
msgid "Language"
msgstr ""
#: templates/personal.php:119
msgid "Help translate"
msgstr ""
#: templates/personal.php:104
#: templates/personal.php:125
msgid "WebDAV"
msgstr ""
#: templates/personal.php:106
#: templates/personal.php:127
#, php-format
msgid ""
"Use this address to <a href=\"%s/server/5.0/user_manual/files/files.html\" "
"target=\"_blank\">access your Files via WebDAV</a>"
msgstr ""
#: templates/personal.php:117
#: templates/personal.php:138
msgid "Encryption"
msgstr ""
#: templates/personal.php:119
#: templates/personal.php:140
msgid "The encryption app is no longer enabled, decrypt all your file"
msgstr ""
#: templates/personal.php:125
#: templates/personal.php:146
msgid "Log-in password"
msgstr ""
#: templates/personal.php:130
#: templates/personal.php:151
msgid "Decrypt all Files"
msgstr ""
@ -511,30 +543,30 @@ msgstr ""
msgid "Default Storage"
msgstr ""
#: templates/users.php:48 templates/users.php:142
#: templates/users.php:48 templates/users.php:148
msgid "Unlimited"
msgstr ""
#: templates/users.php:66 templates/users.php:157
#: templates/users.php:66 templates/users.php:163
msgid "Other"
msgstr ""
#: templates/users.php:84
#: templates/users.php:87
msgid "Username"
msgstr ""
#: templates/users.php:91
#: templates/users.php:94
msgid "Storage"
msgstr ""
#: templates/users.php:102
#: templates/users.php:108
msgid "change display name"
msgstr ""
#: templates/users.php:106
#: templates/users.php:112
msgid "set new password"
msgstr ""
#: templates/users.php:137
#: templates/users.php:143
msgid "Default"
msgstr ""

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-09-07 04:40-0400\n"
"PO-Revision-Date: 2013-09-05 11:50+0000\n"
"POT-Creation-Date: 2013-09-16 11:33-0400\n"
"PO-Revision-Date: 2013-09-16 15:33+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
"MIME-Version: 1.0\n"
@ -90,6 +90,26 @@ msgstr ""
msgid "Error removing %s from favorites."
msgstr ""
#: avatar/controller.php:62
msgid "No image or file provided"
msgstr ""
#: avatar/controller.php:81
msgid "Unknown filetype"
msgstr ""
#: avatar/controller.php:85
msgid "Invalid image"
msgstr ""
#: avatar/controller.php:115 avatar/controller.php:142
msgid "No temporary profile picture available, try again"
msgstr ""
#: avatar/controller.php:135
msgid "No crop data provided"
msgstr ""
#: js/config.php:32
msgid "Sunday"
msgstr ""
@ -166,59 +186,59 @@ msgstr ""
msgid "December"
msgstr ""
#: js/js.js:355
#: js/js.js:387
msgid "Settings"
msgstr "Instellings"
#: js/js.js:821
#: js/js.js:853
msgid "seconds ago"
msgstr ""
#: js/js.js:822
#: js/js.js:854
msgid "%n minute ago"
msgid_plural "%n minutes ago"
msgstr[0] ""
msgstr[1] ""
#: js/js.js:823
#: js/js.js:855
msgid "%n hour ago"
msgid_plural "%n hours ago"
msgstr[0] ""
msgstr[1] ""
#: js/js.js:824
#: js/js.js:856
msgid "today"
msgstr ""
#: js/js.js:825
#: js/js.js:857
msgid "yesterday"
msgstr ""
#: js/js.js:826
#: js/js.js:858
msgid "%n day ago"
msgid_plural "%n days ago"
msgstr[0] ""
msgstr[1] ""
#: js/js.js:827
#: js/js.js:859
msgid "last month"
msgstr ""
#: js/js.js:828
#: js/js.js:860
msgid "%n month ago"
msgid_plural "%n months ago"
msgstr[0] ""
msgstr[1] ""
#: js/js.js:829
#: js/js.js:861
msgid "months ago"
msgstr ""
#: js/js.js:830
#: js/js.js:862
msgid "last year"
msgstr ""
#: js/js.js:831
#: js/js.js:863
msgid "years ago"
msgstr ""
@ -226,22 +246,26 @@ msgstr ""
msgid "Choose"
msgstr ""
#: js/oc-dialogs.js:143 js/oc-dialogs.js:210
msgid "Error loading file picker template"
#: js/oc-dialogs.js:146
msgid "Error loading file picker template: {error}"
msgstr ""
#: js/oc-dialogs.js:168
#: js/oc-dialogs.js:172
msgid "Yes"
msgstr ""
#: js/oc-dialogs.js:178
#: js/oc-dialogs.js:182
msgid "No"
msgstr ""
#: js/oc-dialogs.js:195
#: js/oc-dialogs.js:199
msgid "Ok"
msgstr ""
#: js/oc-dialogs.js:219
msgid "Error loading message template: {error}"
msgstr ""
#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
msgid "The object type is not specified."
@ -251,7 +275,7 @@ msgstr ""
#: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
#: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
#: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
#: js/share.js:643 js/share.js:655
#: js/share.js:645 js/share.js:657
msgid "Error"
msgstr ""
@ -271,7 +295,7 @@ msgstr ""
msgid "Share"
msgstr ""
#: js/share.js:131 js/share.js:683
#: js/share.js:131 js/share.js:685
msgid "Error while sharing"
msgstr ""
@ -327,67 +351,67 @@ msgstr ""
msgid "Expiration date"
msgstr ""
#: js/share.js:241
#: js/share.js:242
msgid "Share via email:"
msgstr ""
#: js/share.js:243
#: js/share.js:245
msgid "No people found"
msgstr ""
#: js/share.js:281
#: js/share.js:283
msgid "Resharing is not allowed"
msgstr ""
#: js/share.js:317
#: js/share.js:319
msgid "Shared in {item} with {user}"
msgstr ""
#: js/share.js:338
#: js/share.js:340
msgid "Unshare"
msgstr ""
#: js/share.js:350
#: js/share.js:352
msgid "can edit"
msgstr ""
#: js/share.js:352
#: js/share.js:354
msgid "access control"
msgstr ""
#: js/share.js:355
#: js/share.js:357
msgid "create"
msgstr ""
#: js/share.js:358
#: js/share.js:360
msgid "update"
msgstr ""
#: js/share.js:361
#: js/share.js:363
msgid "delete"
msgstr ""
#: js/share.js:364
#: js/share.js:366
msgid "share"
msgstr ""
#: js/share.js:398 js/share.js:630
#: js/share.js:400 js/share.js:632
msgid "Password protected"
msgstr ""
#: js/share.js:643
#: js/share.js:645
msgid "Error unsetting expiration date"
msgstr ""
#: js/share.js:655
#: js/share.js:657
msgid "Error setting expiration date"
msgstr ""
#: js/share.js:670
#: js/share.js:672
msgid "Sending ..."
msgstr ""
#: js/share.js:681
#: js/share.js:683
msgid "Email sent"
msgstr ""
@ -471,7 +495,7 @@ msgstr "Persoonlik"
msgid "Users"
msgstr "Gebruikers"
#: strings.php:7 templates/layout.user.php:105
#: strings.php:7 templates/layout.user.php:108
msgid "Apps"
msgstr "Toepassings"
@ -600,7 +624,7 @@ msgstr "Maak opstelling klaar"
msgid "%s is available. Get more information on how to update."
msgstr ""
#: templates/layout.user.php:66
#: templates/layout.user.php:69
msgid "Log out"
msgstr "Teken uit"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-08-25 19:18-0400\n"
"PO-Revision-Date: 2013-08-25 23:18+0000\n"
"POT-Creation-Date: 2013-09-16 11:33-0400\n"
"PO-Revision-Date: 2013-09-16 15:34+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
"MIME-Version: 1.0\n"
@ -48,11 +48,23 @@ msgstr "Gebruikers"
msgid "Admin"
msgstr "Admin"
#: app.php:837
#: app.php:839
#, php-format
msgid "Failed to upgrade \"%s\"."
msgstr ""
#: avatar.php:56
msgid "Custom profile pictures don't work with encryption yet"
msgstr ""
#: avatar.php:64
msgid "Unknown filetype"
msgstr ""
#: avatar.php:69
msgid "Invalid image"
msgstr ""
#: defaults.php:35
msgid "web services under your control"
msgstr "webdienste onder jou beheer"
@ -105,37 +117,37 @@ msgstr ""
msgid "Failed to open archive when installing app"
msgstr ""
#: installer.php:123
#: installer.php:125
msgid "App does not provide an info.xml file"
msgstr ""
#: installer.php:129
#: installer.php:131
msgid "App can't be installed because of not allowed code in the App"
msgstr ""
#: installer.php:138
#: installer.php:140
msgid ""
"App can't be installed because it is not compatible with this version of "
"ownCloud"
msgstr ""
#: installer.php:144
#: installer.php:146
msgid ""
"App can't be installed because it contains the <shipped>true</shipped> tag "
"which is not allowed for non shipped apps"
msgstr ""
#: installer.php:150
#: installer.php:152
msgid ""
"App can't be installed because the version in info.xml/version is not the "
"same as the version reported from the app store"
msgstr ""
#: installer.php:160
#: installer.php:162
msgid "App directory already exists"
msgstr ""
#: installer.php:173
#: installer.php:175
#, php-format
msgid "Can't create app folder. Please fix permissions. %s"
msgstr ""
@ -264,51 +276,51 @@ msgstr ""
msgid "Please double check the <a href='%s'>installation guides</a>."
msgstr ""
#: template/functions.php:80
#: template/functions.php:96
msgid "seconds ago"
msgstr ""
#: template/functions.php:81
#: template/functions.php:97
msgid "%n minute ago"
msgid_plural "%n minutes ago"
msgstr[0] ""
msgstr[1] ""
#: template/functions.php:82
#: template/functions.php:98
msgid "%n hour ago"
msgid_plural "%n hours ago"
msgstr[0] ""
msgstr[1] ""
#: template/functions.php:83
#: template/functions.php:99
msgid "today"
msgstr ""
#: template/functions.php:84
#: template/functions.php:100
msgid "yesterday"
msgstr ""
#: template/functions.php:85
#: template/functions.php:101
msgid "%n day go"
msgid_plural "%n days ago"
msgstr[0] ""
msgstr[1] ""
#: template/functions.php:86
#: template/functions.php:102
msgid "last month"
msgstr ""
#: template/functions.php:87
#: template/functions.php:103
msgid "%n month ago"
msgid_plural "%n months ago"
msgstr[0] ""
msgstr[1] ""
#: template/functions.php:88
#: template/functions.php:104
msgid "last year"
msgstr ""
#: template/functions.php:89
#: template/functions.php:105
msgid "years ago"
msgstr ""

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-09-07 04:40-0400\n"
"PO-Revision-Date: 2013-09-05 11:51+0000\n"
"POT-Creation-Date: 2013-09-16 11:33-0400\n"
"PO-Revision-Date: 2013-09-16 15:34+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
"MIME-Version: 1.0\n"
@ -128,11 +128,15 @@ msgstr ""
msgid "Updated"
msgstr ""
#: js/personal.js:150
#: js/personal.js:217
msgid "Select a profile picture"
msgstr ""
#: js/personal.js:262
msgid "Decrypting files... Please wait, this can take some time."
msgstr ""
#: js/personal.js:172
#: js/personal.js:284
msgid "Saving..."
msgstr ""
@ -148,16 +152,16 @@ msgstr ""
msgid "Unable to remove user"
msgstr ""
#: js/users.js:92 templates/users.php:26 templates/users.php:87
#: templates/users.php:112
#: js/users.js:92 templates/users.php:26 templates/users.php:90
#: templates/users.php:118
msgid "Groups"
msgstr ""
#: js/users.js:97 templates/users.php:89 templates/users.php:124
#: js/users.js:97 templates/users.php:92 templates/users.php:130
msgid "Group Admin"
msgstr ""
#: js/users.js:120 templates/users.php:164
#: js/users.js:120 templates/users.php:170
msgid "Delete"
msgstr ""
@ -177,7 +181,7 @@ msgstr ""
msgid "A valid password must be provided"
msgstr ""
#: personal.php:40 personal.php:41
#: personal.php:45 personal.php:46
msgid "__language_name__"
msgstr ""
@ -343,11 +347,11 @@ msgstr ""
msgid "Less"
msgstr ""
#: templates/admin.php:242 templates/personal.php:140
#: templates/admin.php:242 templates/personal.php:161
msgid "Version"
msgstr ""
#: templates/admin.php:246 templates/personal.php:143
#: templates/admin.php:246 templates/personal.php:164
msgid ""
"Developed by the <a href=\"http://ownCloud.org/contact\" "
"target=\"_blank\">ownCloud community</a>, the <a "
@ -414,7 +418,7 @@ msgstr ""
msgid "You have used <strong>%s</strong> of the available <strong>%s</strong>"
msgstr ""
#: templates/personal.php:39 templates/users.php:23 templates/users.php:86
#: templates/personal.php:39 templates/users.php:23 templates/users.php:89
msgid "Password"
msgstr "Wagwoord"
@ -438,7 +442,7 @@ msgstr "Nuwe wagwoord"
msgid "Change password"
msgstr ""
#: templates/personal.php:58 templates/users.php:85
#: templates/personal.php:58 templates/users.php:88
msgid "Display Name"
msgstr ""
@ -454,38 +458,66 @@ msgstr ""
msgid "Fill in an email address to enable password recovery"
msgstr ""
#: templates/personal.php:85 templates/personal.php:86
msgid "Language"
#: templates/personal.php:86
msgid "Profile picture"
msgstr ""
#: templates/personal.php:90
msgid "Upload new"
msgstr ""
#: templates/personal.php:92
msgid "Select new from Files"
msgstr ""
#: templates/personal.php:93
msgid "Remove image"
msgstr ""
#: templates/personal.php:94
msgid "Either png or jpg. Ideally square but you will be able to crop it."
msgstr ""
#: templates/personal.php:97
msgid "Abort"
msgstr ""
#: templates/personal.php:98
msgid "Choose as profile image"
msgstr ""
#: templates/personal.php:106 templates/personal.php:107
msgid "Language"
msgstr ""
#: templates/personal.php:119
msgid "Help translate"
msgstr ""
#: templates/personal.php:104
#: templates/personal.php:125
msgid "WebDAV"
msgstr ""
#: templates/personal.php:106
#: templates/personal.php:127
#, php-format
msgid ""
"Use this address to <a href=\"%s/server/5.0/user_manual/files/files.html\" "
"target=\"_blank\">access your Files via WebDAV</a>"
msgstr ""
#: templates/personal.php:117
#: templates/personal.php:138
msgid "Encryption"
msgstr ""
#: templates/personal.php:119
#: templates/personal.php:140
msgid "The encryption app is no longer enabled, decrypt all your file"
msgstr ""
#: templates/personal.php:125
#: templates/personal.php:146
msgid "Log-in password"
msgstr ""
#: templates/personal.php:130
#: templates/personal.php:151
msgid "Decrypt all Files"
msgstr ""
@ -511,30 +543,30 @@ msgstr ""
msgid "Default Storage"
msgstr ""
#: templates/users.php:48 templates/users.php:142
#: templates/users.php:48 templates/users.php:148
msgid "Unlimited"
msgstr ""
#: templates/users.php:66 templates/users.php:157
#: templates/users.php:66 templates/users.php:163
msgid "Other"
msgstr ""
#: templates/users.php:84
#: templates/users.php:87
msgid "Username"
msgstr "Gebruikersnaam"
#: templates/users.php:91
#: templates/users.php:94
msgid "Storage"
msgstr ""
#: templates/users.php:102
#: templates/users.php:108
msgid "change display name"
msgstr ""
#: templates/users.php:106
#: templates/users.php:112
msgid "set new password"
msgstr ""
#: templates/users.php:137
#: templates/users.php:143
msgid "Default"
msgstr ""

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-09-07 04:40-0400\n"
"PO-Revision-Date: 2013-09-05 11:50+0000\n"
"POT-Creation-Date: 2013-09-16 11:33-0400\n"
"PO-Revision-Date: 2013-09-16 15:33+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"
@ -90,6 +90,26 @@ msgstr "لم يتم اختيار فئة للحذف"
msgid "Error removing %s from favorites."
msgstr "خطأ في حذف %s من المفضلة"
#: avatar/controller.php:62
msgid "No image or file provided"
msgstr ""
#: avatar/controller.php:81
msgid "Unknown filetype"
msgstr ""
#: avatar/controller.php:85
msgid "Invalid image"
msgstr ""
#: avatar/controller.php:115 avatar/controller.php:142
msgid "No temporary profile picture available, try again"
msgstr ""
#: avatar/controller.php:135
msgid "No crop data provided"
msgstr ""
#: js/config.php:32
msgid "Sunday"
msgstr "الاحد"
@ -166,15 +186,15 @@ msgstr "تشرين الثاني"
msgid "December"
msgstr "كانون الاول"
#: js/js.js:355
#: js/js.js:387
msgid "Settings"
msgstr "إعدادات"
#: js/js.js:821
#: js/js.js:853
msgid "seconds ago"
msgstr "منذ ثواني"
#: js/js.js:822
#: js/js.js:854
msgid "%n minute ago"
msgid_plural "%n minutes ago"
msgstr[0] ""
@ -184,7 +204,7 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
#: js/js.js:823
#: js/js.js:855
msgid "%n hour ago"
msgid_plural "%n hours ago"
msgstr[0] ""
@ -194,15 +214,15 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
#: js/js.js:824
#: js/js.js:856
msgid "today"
msgstr "اليوم"
#: js/js.js:825
#: js/js.js:857
msgid "yesterday"
msgstr "يوم أمس"
#: js/js.js:826
#: js/js.js:858
msgid "%n day ago"
msgid_plural "%n days ago"
msgstr[0] ""
@ -212,11 +232,11 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
#: js/js.js:827
#: js/js.js:859
msgid "last month"
msgstr "الشهر الماضي"
#: js/js.js:828
#: js/js.js:860
msgid "%n month ago"
msgid_plural "%n months ago"
msgstr[0] ""
@ -226,15 +246,15 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
#: js/js.js:829
#: js/js.js:861
msgid "months ago"
msgstr "شهر مضى"
#: js/js.js:830
#: js/js.js:862
msgid "last year"
msgstr "السنةالماضية"
#: js/js.js:831
#: js/js.js:863
msgid "years ago"
msgstr "سنة مضت"
@ -242,22 +262,26 @@ msgstr "سنة مضت"
msgid "Choose"
msgstr "اختيار"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:210
msgid "Error loading file picker template"
#: js/oc-dialogs.js:146
msgid "Error loading file picker template: {error}"
msgstr ""
#: js/oc-dialogs.js:168
#: js/oc-dialogs.js:172
msgid "Yes"
msgstr "نعم"
#: js/oc-dialogs.js:178
#: js/oc-dialogs.js:182
msgid "No"
msgstr "لا"
#: js/oc-dialogs.js:195
#: js/oc-dialogs.js:199
msgid "Ok"
msgstr "موافق"
#: js/oc-dialogs.js:219
msgid "Error loading message template: {error}"
msgstr ""
#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102
#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162
msgid "The object type is not specified."
@ -267,7 +291,7 @@ msgstr "نوع العنصر غير محدد."
#: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136
#: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195
#: js/oc-vcategories.js:199 js/share.js:129 js/share.js:142 js/share.js:149
#: js/share.js:643 js/share.js:655
#: js/share.js:645 js/share.js:657
msgid "Error"
msgstr "خطأ"
@ -287,7 +311,7 @@ msgstr "مشارك"
msgid "Share"
msgstr "شارك"
#: js/share.js:131 js/share.js:683
#: js/share.js:131 js/share.js:685
msgid "Error while sharing"
msgstr "حصل خطأ عند عملية المشاركة"
@ -343,67 +367,67 @@ msgstr "تعيين تاريخ إنتهاء الصلاحية"
msgid "Expiration date"
msgstr "تاريخ إنتهاء الصلاحية"
#: js/share.js:241
#: js/share.js:242
msgid "Share via email:"
msgstr "مشاركة عبر البريد الإلكتروني:"
#: js/share.js:243
#: js/share.js:245
msgid "No people found"
msgstr "لم يتم العثور على أي شخص"
#: js/share.js:281
#: js/share.js:283
msgid "Resharing is not allowed"
msgstr "لا يسمح بعملية إعادة المشاركة"
#: js/share.js:317
#: js/share.js:319
msgid "Shared in {item} with {user}"
msgstr "شورك في {item} مع {user}"
#: js/share.js:338
#: js/share.js:340
msgid "Unshare"
msgstr "إلغاء مشاركة"
#: js/share.js:350
#: js/share.js:352
msgid "can edit"
msgstr "التحرير مسموح"
#: js/share.js:352
#: js/share.js:354
msgid "access control"
msgstr "ضبط الوصول"
#: js/share.js:355
#: js/share.js:357
msgid "create"
msgstr "إنشاء"
#: js/share.js:358
#: js/share.js:360
msgid "update"
msgstr "تحديث"
#: js/share.js:361
#: js/share.js:363
msgid "delete"
msgstr "حذف"
#: js/share.js:364
#: js/share.js:366
msgid "share"
msgstr "مشاركة"
#: js/share.js:398 js/share.js:630
#: js/share.js:400 js/share.js:632
msgid "Password protected"
msgstr "محمي بكلمة السر"
#: js/share.js:643
#: js/share.js:645
msgid "Error unsetting expiration date"
msgstr "حصل خطأ عند عملية إزالة تاريخ إنتهاء الصلاحية"
#: js/share.js:655
#: js/share.js:657
msgid "Error setting expiration date"
msgstr "حصل خطأ عند عملية تعيين تاريخ إنتهاء الصلاحية"
#: js/share.js:670
#: js/share.js:672
msgid "Sending ..."
msgstr "جاري الارسال ..."
#: js/share.js:681
#: js/share.js:683
msgid "Email sent"
msgstr "تم ارسال البريد الالكتروني"
@ -487,7 +511,7 @@ msgstr "شخصي"
msgid "Users"
msgstr "المستخدمين"
#: strings.php:7 templates/layout.user.php:105
#: strings.php:7 templates/layout.user.php:108
msgid "Apps"
msgstr "التطبيقات"
@ -616,7 +640,7 @@ msgstr "انهاء التعديلات"
msgid "%s is available. Get more information on how to update."
msgstr ""
#: templates/layout.user.php:66
#: templates/layout.user.php:69
msgid "Log out"
msgstr "الخروج"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-09-01 13:27-0400\n"
"PO-Revision-Date: 2013-09-01 13:30+0000\n"
"POT-Creation-Date: 2013-09-13 21:46-0400\n"
"PO-Revision-Date: 2013-09-14 00:00+0000\n"
"Last-Translator: ibrahim_9090 <ibrahim9090@gmail.com>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
"POT-Creation-Date: 2013-09-07 04:40-0400\n"
"PO-Revision-Date: 2013-09-05 11:51+0000\n"
"POT-Creation-Date: 2013-09-13 21:46-0400\n"
"PO-Revision-Date: 2013-09-14 00:01+0000\n"
"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
"MIME-Version: 1.0\n"

Some files were not shown because too many files have changed in this diff Show More