From 51ec68a6231c577baa0890dbf8b4b91fe9c10ed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Mon, 9 Sep 2013 21:06:48 +0200 Subject: [PATCH 01/24] Concatenate string in SQL instead of PHP --- apps/files/appinfo/update.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php index 3503678e7c..d8886328d8 100644 --- a/apps/files/appinfo/update.php +++ b/apps/files/appinfo/update.php @@ -3,17 +3,17 @@ // fix webdav properties,add namespace in front of the property, update for OC4.5 $installedVersion=OCP\Config::getAppValue('files', 'installed_version'); if (version_compare($installedVersion, '1.1.6', '<')) { - $query = OC_DB::prepare( 'SELECT `propertyname`, `propertypath`, `userid` FROM `*PREFIX*properties`' ); - $result = $query->execute(); - $updateQuery = OC_DB::prepare('UPDATE `*PREFIX*properties`' - .' SET `propertyname` = ?' - .' WHERE `userid` = ?' - .' AND `propertypath` = ?'); - while( $row = $result->fetchRow()) { - if ( $row['propertyname'][0] != '{' ) { - $updateQuery->execute(array('{DAV:}' + $row['propertyname'], $row['userid'], $row['propertypath'])); - } + // SQL92 string concatenation is ||, some of the DBMS don't know that + if (OC_Config::getValue('dbtype') === 'mysql') { + $concat = "concat('{DAV:}', `propertyname`)"; + } else if (OC_Config::getValue('dbtype') === 'mssql') { + $concat = "'{DAV:}' + `propertyname`"; + } else { + $concat = "'{DAV:}' || `propertyname`"; } + $query = OC_DB::prepare( "UPDATE `*PREFIX*properties` + SET `propertyname` = $concat + WHERE `propertyname` LIKE '{%'" ); } //update from OC 3 From 72ca0a482b2b998c8f75f4dd3710c9635d8d6ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Thu, 12 Sep 2013 12:11:36 +0200 Subject: [PATCH 02/24] use doctrine to construct concat expression --- apps/files/appinfo/update.php | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php index d8886328d8..7ae0911465 100644 --- a/apps/files/appinfo/update.php +++ b/apps/files/appinfo/update.php @@ -3,14 +3,7 @@ // fix webdav properties,add namespace in front of the property, update for OC4.5 $installedVersion=OCP\Config::getAppValue('files', 'installed_version'); if (version_compare($installedVersion, '1.1.6', '<')) { - // SQL92 string concatenation is ||, some of the DBMS don't know that - if (OC_Config::getValue('dbtype') === 'mysql') { - $concat = "concat('{DAV:}', `propertyname`)"; - } else if (OC_Config::getValue('dbtype') === 'mssql') { - $concat = "'{DAV:}' + `propertyname`"; - } else { - $concat = "'{DAV:}' || `propertyname`"; - } + $concat = OC_DB::getConnection()->getDatabasePlatform()->getConcatExpression( "'{DAV:}'", "`propertyname`" ); $query = OC_DB::prepare( "UPDATE `*PREFIX*properties` SET `propertyname` = $concat WHERE `propertyname` LIKE '{%'" ); From 9ae829497a3e3a4ef535e9ed18f59233c0a4aa35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Fri, 1 Nov 2013 15:45:33 +0100 Subject: [PATCH 03/24] cleanup and actually execute the query --- apps/files/appinfo/update.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php index 7ae0911465..f920f84216 100644 --- a/apps/files/appinfo/update.php +++ b/apps/files/appinfo/update.php @@ -3,10 +3,14 @@ // fix webdav properties,add namespace in front of the property, update for OC4.5 $installedVersion=OCP\Config::getAppValue('files', 'installed_version'); if (version_compare($installedVersion, '1.1.6', '<')) { - $concat = OC_DB::getConnection()->getDatabasePlatform()->getConcatExpression( "'{DAV:}'", "`propertyname`" ); - $query = OC_DB::prepare( "UPDATE `*PREFIX*properties` - SET `propertyname` = $concat - WHERE `propertyname` LIKE '{%'" ); + $concat = OC_DB::getConnection()->getDatabasePlatform()-> + getConcatExpression( '\'{DAV:}\'', '`propertyname`' ); + $query = OC_DB::prepare(' + UPDATE `*PREFIX*properties` + SET `propertyname` = ' . $concat . ' + WHERE `propertyname` NOT LIKE \'{%\' + '); + $query->execute(); } //update from OC 3 From d5397d813cd731b5bf8ac4b7c193ac39d704af6e Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Thu, 13 Feb 2014 20:20:00 +0100 Subject: [PATCH 04/24] Do not send file list for select all on Download/delete - When all files are selected, do not send the whole file list - Download will trigger download for the parent folder, also works with root - Delete will send "allfiles" to the server that will find the file list or the passed directory by itself --- apps/files/ajax/delete.php | 15 +++++- apps/files/js/filelist.js | 74 +++++++++++++++++++------- apps/files/js/files.js | 23 ++++---- apps/files/tests/js/fileactionsSpec.js | 2 +- apps/files/tests/js/filelistSpec.js | 13 +++-- apps/files_sharing/js/public.js | 30 +++++++++-- lib/private/files.php | 9 +++- 7 files changed, 126 insertions(+), 40 deletions(-) diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php index c69f5a8860..69f859daa9 100644 --- a/apps/files/ajax/delete.php +++ b/apps/files/ajax/delete.php @@ -9,8 +9,21 @@ OCP\JSON::callCheck(); // Get data $dir = stripslashes($_POST["dir"]); $files = isset($_POST["file"]) ? $_POST["file"] : $_POST["files"]; +$allFiles = isset($_POST["allfiles"]) ? $_POST["allfiles"] : $_POST["allfiles"]; +if ($allFiles === 'true') { + $allFiles = true; +} -$files = json_decode($files); +// delete all files in dir ? +if ($allFiles) { + $files = array(); + $fileList = \OC\Files\Filesystem::getDirectoryContent($dir); + foreach ($fileList as $fileInfo) { + $files[] = $fileInfo['name']; + } +} else { + $files = json_decode($files); +} $filesWithError = ''; $success = true; diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index a855d6cbe5..d6cffde05d 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -582,30 +582,49 @@ window.FileList={ }}); } }, - do_delete:function(files) { - if (files.substr) { + do_delete:function(files, dir) { + var params; + if (files && files.substr) { files=[files]; } - for (var i=0; i 0) { - return $(tr).find('a.name').attr('href') + '&download'; + if ($.isArray(filename)) { + filename = JSON.stringify(filename); } - return null; + var path = dir || FileList.getCurrentDirectory(); + var params = { + service: 'files', + t: $('#sharingToken').val(), + path: path, + download: null + }; + if (filename) { + params.files = filename; + } + return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params); }; } diff --git a/lib/private/files.php b/lib/private/files.php index 24fca4a5df..5bbc2e960d 100644 --- a/lib/private/files.php +++ b/lib/private/files.php @@ -103,7 +103,12 @@ class OC_Files { if ($xsendfile) { $filename = OC_Helper::moveToNoClean($filename); } - $name = $files . '.zip'; + // downloading root ? + if ($files === '') { + $name = 'download.zip'; + } else { + $name = $files . '.zip'; + } set_time_limit($executionTime); } else { $zip = false; @@ -198,6 +203,8 @@ class OC_Files { $dirname=basename($dir); $zip->addEmptyDir($internalDir.$dirname); $internalDir.=$dirname.='/'; + // prevent absolute dirs + $internalDir = ltrim($internalDir, '/'); $files=OC_Files::getDirectoryContent($dir); foreach($files as $file) { $filename=$file['name']; From 94b3296a71c5950f70919836bc12f0066016b705 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Mon, 17 Feb 2014 18:26:29 +0100 Subject: [PATCH 05/24] Trashbin select all now doesn't send file list - Fixed "delete" and "restore" actions to not send the file list when all files are selected - When some files are selected, sends the current dir - Removed "dirListing" attribute as the backend is able to compute the value based on the current dir --- apps/files_trashbin/ajax/delete.php | 16 ++- apps/files_trashbin/ajax/undelete.php | 31 +++++- apps/files_trashbin/js/trash.js | 141 ++++++++++++++------------ 3 files changed, 109 insertions(+), 79 deletions(-) diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php index 75d481768a..ebabc5bc7a 100644 --- a/apps/files_trashbin/ajax/delete.php +++ b/apps/files_trashbin/ajax/delete.php @@ -2,42 +2,38 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); +$folder = isset($_POST['dir']) ? $_POST['dir'] : '/'; // "empty trash" command if (isset($_POST['allfiles']) and $_POST['allfiles'] === 'true'){ $deleteAll = true; - $folder = isset($_POST['dir']) ? $_POST['dir'] : '/'; if ($folder === '/' || $folder === '') { OCA\Files_Trashbin\Trashbin::deleteAll(); $list = array(); } else { - $dirname = dirname($folder); - if ( $dirname !== '/' && $dirname !== '.' ) { - $dirlisting = '1'; - } else { - $dirlisting = '0'; - } $list[] = $folder; + $folder = dirname($folder); } } else { $deleteAll = false; $files = $_POST['files']; - $dirlisting = $_POST['dirlisting']; $list = json_decode($files); } + +$folder = rtrim($folder, '/') . '/'; $error = array(); $success = array(); $i = 0; foreach ($list as $file) { - if ( $dirlisting === '0') { + if ($folder === '/') { $file = ltrim($file, '/'); $delimiter = strrpos($file, '.d'); $filename = substr($file, 0, $delimiter); $timestamp = substr($file, $delimiter+2); } else { - $filename = $file; + $filename = $folder . '/' . $file; $timestamp = null; } diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php index 876ad269a7..9c3ccba7ed 100644 --- a/apps/files_trashbin/ajax/undelete.php +++ b/apps/files_trashbin/ajax/undelete.php @@ -4,15 +4,36 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); $files = $_POST['files']; -$dirlisting = $_POST['dirlisting']; -$list = json_decode($files); +$dir = '/'; +if (isset($_POST['dir'])) { + $dir = rtrim($_POST['dir'], '/'). '/'; +} +$allFiles = false; +if (isset($_POST['allfiles']) and $_POST['allfiles'] === 'true') { + $allFiles = true; + $list = array(); + $dirListing = true; + if ($dir === '' || $dir === '/') { + $dirListing = false; + } + foreach (OCA\Files_Trashbin\Helper::getTrashFiles($dir) as $file) { + $fileName = $file['name']; + if (!$dirListing) { + $fileName .= '.d' . $file['timestamp']; + } + $list[] = $fileName; + } +} else { + $list = json_decode($files); +} $error = array(); $success = array(); $i = 0; foreach ($list as $file) { - if ( $dirlisting === '0') { + $path = $dir . '/' . $file; + if ($dir === '/') { $file = ltrim($file, '/'); $delimiter = strrpos($file, '.d'); $filename = substr($file, 0, $delimiter); @@ -23,9 +44,9 @@ foreach ($list as $file) { $timestamp = null; } - if ( !OCA\Files_Trashbin\Trashbin::restore($file, $filename, $timestamp) ) { + if ( !OCA\Files_Trashbin\Trashbin::restore($path, $filename, $timestamp) ) { $error[] = $filename; - OC_Log::write('trashbin','can\'t restore ' . $filename, OC_Log::ERROR); + OC_Log::write('trashbin', 'can\'t restore ' . $filename, OC_Log::ERROR); } else { $success[$i]['filename'] = $file; $success[$i]['timestamp'] = $timestamp; diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index 46d8b56308..6aade21050 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -1,5 +1,29 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +/* global OC, t, FileList, FileActions */ $(document).ready(function() { + function removeCallback(result) { + if (result.status !== 'success') { + OC.dialogs.alert(result.data.message, t('core', 'Error')); + } + + var files = result.data.success; + for (var i = 0; i < files.length; i++) { + FileList.findFileEl(OC.basename(files[i].filename)).remove(); + } + FileList.updateFileSummary(); + FileList.updateEmptyContent(); + enableActions(); + } if (typeof FileActions !== 'undefined') { FileActions.register('all', 'Restore', OC.PERMISSION_READ, OC.imagePath('core', 'actions/history'), function(filename) { @@ -7,22 +31,12 @@ $(document).ready(function() { var deleteAction = tr.children("td.date").children(".action.delete"); deleteAction.removeClass('delete-icon').addClass('progress-icon'); disableActions(); - $.post(OC.filePath('files_trashbin', 'ajax', 'undelete.php'), - {files: JSON.stringify([$('#dir').val() + '/' + filename]), dirlisting: tr.attr('data-dirlisting')}, - function(result) { - for (var i = 0; i < result.data.success.length; i++) { - var row = document.getElementById(result.data.success[i].filename); - row.parentNode.removeChild(row); - } - if (result.status !== 'success') { - OC.dialogs.alert(result.data.message, t('core', 'Error')); - } - enableActions(); - FileList.updateFileSummary(); - FileList.updateEmptyContent(); - } + $.post(OC.filePath('files_trashbin', 'ajax', 'undelete.php'), { + files: JSON.stringify([filename]), + dir: FileList.getCurrentDirectory() + }, + removeCallback ); - }); }; @@ -34,22 +48,12 @@ $(document).ready(function() { var deleteAction = tr.children("td.date").children(".action.delete"); deleteAction.removeClass('delete-icon').addClass('progress-icon'); disableActions(); - $.post(OC.filePath('files_trashbin', 'ajax', 'delete.php'), - {files: JSON.stringify([$('#dir').val() + '/' +filename]), dirlisting: tr.attr('data-dirlisting')}, - function(result) { - for (var i = 0; i < result.data.success.length; i++) { - var row = document.getElementById(result.data.success[i].filename); - row.parentNode.removeChild(row); - } - if (result.status !== 'success') { - OC.dialogs.alert(result.data.message, t('core', 'Error')); - } - enableActions(); - FileList.updateFileSummary(); - FileList.updateEmptyContent(); - } + $.post(OC.filePath('files_trashbin', 'ajax', 'delete.php'), { + files: JSON.stringify([filename]), + dir: FileList.getCurrentDirectory() + }, + removeCallback ); - }); // Sets the select_all checkbox behaviour : @@ -68,29 +72,45 @@ $(document).ready(function() { $('.undelete').click('click', function(event) { event.preventDefault(); - var files = getSelectedFiles('file'); - var fileslist = JSON.stringify(files); - var dirlisting = getSelectedFiles('dirlisting')[0]; + var allFiles = $('#select_all').is(':checked'); + var files = []; + var params = {}; disableActions(); - for (var i = 0; i < files.length; i++) { - var deleteAction = FileList.findFileEl(files[i]).children("td.date").children(".action.delete"); - deleteAction.removeClass('delete-icon').addClass('progress-icon'); + if (allFiles) { + FileList.showMask(); + params = { + allfiles: true, + dir: FileList.getCurrentDirectory() + }; + } + else { + files = getSelectedFiles('name'); + for (var i = 0; i < files.length; i++) { + var deleteAction = FileList.findFileEl(files[i]).children("td.date").children(".action.delete"); + deleteAction.removeClass('delete-icon').addClass('progress-icon'); + } + params = { + files: JSON.stringify(files), + dir: FileList.getCurrentDirectory() + }; } $.post(OC.filePath('files_trashbin', 'ajax', 'undelete.php'), - {files: fileslist, dirlisting: dirlisting}, - function(result) { - for (var i = 0; i < result.data.success.length; i++) { - var row = document.getElementById(result.data.success[i].filename); - row.parentNode.removeChild(row); - } + params, + function(result) { + if (allFiles) { if (result.status !== 'success') { OC.dialogs.alert(result.data.message, t('core', 'Error')); } + FileList.hideMask(); + // simply remove all files + FileList.update(''); enableActions(); - FileList.updateFileSummary(); - FileList.updateEmptyContent(); } + else { + removeCallback(result); + } + } ); }); @@ -101,17 +121,17 @@ $(document).ready(function() { var params = {}; if (allFiles) { params = { - allfiles: true, - dir: $('#dir').val() + allfiles: true, + dir: FileList.getCurrentDirectory() }; } else { - files = getSelectedFiles('file'); + files = getSelectedFiles('name'); params = { files: JSON.stringify(files), - dirlisting: getSelectedFiles('dirlisting')[0] + dir: FileList.getCurrentDirectory() }; - }; + } disableActions(); if (allFiles) { @@ -128,22 +148,17 @@ $(document).ready(function() { params, function(result) { if (allFiles) { + if (result.status !== 'success') { + OC.dialogs.alert(result.data.message, t('core', 'Error')); + } FileList.hideMask(); // simply remove all files - $('#fileList').empty(); + FileList.update(''); + enableActions(); } else { - for (var i = 0; i < result.data.success.length; i++) { - var row = document.getElementById(result.data.success[i].filename); - row.parentNode.removeChild(row); - } + removeCallback(result); } - if (result.status !== 'success') { - OC.dialogs.alert(result.data.message, t('core', 'Error')); - } - enableActions(); - FileList.updateFileSummary(); - FileList.updateEmptyContent(); } ); @@ -208,11 +223,9 @@ function getSelectedFiles(property){ var files=[]; elements.each(function(i,element){ var file={ - name:$(element).attr('data-filename'), - file:$('#dir').val() + "/" + $(element).attr('data-file'), + name:$(element).attr('data-file'), timestamp:$(element).attr('data-timestamp'), - type:$(element).attr('data-type'), - dirlisting:$(element).attr('data-dirlisting') + type:$(element).attr('data-type') }; if(property){ files.push(file[property]); From dc6f1d875d7c6f86b07aba8b6f1119083279cd30 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 18 Feb 2014 12:32:57 +0100 Subject: [PATCH 06/24] An admin should not be able to add remote and public services on its own. This should only be possible programmatically. This change is due the fact that an admin may not be expected to execute arbitrary code in every environment. --- core/ajax/appconfig.php | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/core/ajax/appconfig.php b/core/ajax/appconfig.php index 4f26dedc79..6629d8a664 100644 --- a/core/ajax/appconfig.php +++ b/core/ajax/appconfig.php @@ -9,28 +9,40 @@ OC_Util::checkAdminUser(); OCP\JSON::callCheck(); $action=isset($_POST['action'])?$_POST['action']:$_GET['action']; +$app=OC_App::cleanAppId(isset($_POST['app'])?$_POST['app']:$_GET['app']); + +// An admin should not be able to add remote and public services +// on its own. This should only be possible programmatically. +// This change is due the fact that an admin may not be expected +// to execute arbitrary code in every environment. +if($app === 'core' && (substr($_POST['key'],0,7) === 'remote_' || substr($_POST['key'],0,7) === 'public_')) { + OC_JSON::error(array('data' => array('message' => 'Unexpected error!'))); + return; +} + $result=false; switch($action) { case 'getValue': - $result=OC_Appconfig::getValue($_GET['app'], $_GET['key'], $_GET['defaultValue']); + $result=OC_Appconfig::getValue($app, $_GET['key'], $_GET['defaultValue']); break; case 'setValue': - $result=OC_Appconfig::setValue($_POST['app'], $_POST['key'], $_POST['value']); + $result=OC_Appconfig::setValue($app, $_POST['key'], $_POST['value']); break; case 'getApps': $result=OC_Appconfig::getApps(); break; case 'getKeys': - $result=OC_Appconfig::getKeys($_GET['app']); + $result=OC_Appconfig::getKeys($app); break; case 'hasKey': - $result=OC_Appconfig::hasKey($_GET['app'], $_GET['key']); + $result=OC_Appconfig::hasKey($app, $_GET['key']); break; case 'deleteKey': - $result=OC_Appconfig::deleteKey($_POST['app'], $_POST['key']); + $result=OC_Appconfig::deleteKey($app, $_POST['key']); break; case 'deleteApp': - $result=OC_Appconfig::deleteApp($_POST['app']); + $result=OC_Appconfig::deleteApp($app); break; } OC_JSON::success(array('data'=>$result)); + From 1352c63dca25b04594cbdfeb8c832351997a1d14 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 18 Feb 2014 12:47:05 +0100 Subject: [PATCH 07/24] Check whether the Key is set --- core/ajax/appconfig.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ajax/appconfig.php b/core/ajax/appconfig.php index 6629d8a664..1d066d9169 100644 --- a/core/ajax/appconfig.php +++ b/core/ajax/appconfig.php @@ -15,7 +15,7 @@ $app=OC_App::cleanAppId(isset($_POST['app'])?$_POST['app']:$_GET['app']); // on its own. This should only be possible programmatically. // This change is due the fact that an admin may not be expected // to execute arbitrary code in every environment. -if($app === 'core' && (substr($_POST['key'],0,7) === 'remote_' || substr($_POST['key'],0,7) === 'public_')) { +if($app === 'core' && isset($_POST['key']) &&(substr($_POST['key'],0,7) === 'remote_' || substr($_POST['key'],0,7) === 'public_')) { OC_JSON::error(array('data' => array('message' => 'Unexpected error!'))); return; } From c19cacb29f263558f052ccd8d78033d63326589e Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 18 Feb 2014 14:12:49 +0100 Subject: [PATCH 08/24] Check whether the app is set --- core/ajax/appconfig.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/ajax/appconfig.php b/core/ajax/appconfig.php index 1d066d9169..05b7572c6d 100644 --- a/core/ajax/appconfig.php +++ b/core/ajax/appconfig.php @@ -9,7 +9,10 @@ OC_Util::checkAdminUser(); OCP\JSON::callCheck(); $action=isset($_POST['action'])?$_POST['action']:$_GET['action']; -$app=OC_App::cleanAppId(isset($_POST['app'])?$_POST['app']:$_GET['app']); + +if(isset($_POST['app']) || isset($_GET['app'])) { + $app=OC_App::cleanAppId(isset($_POST['app'])?$_POST['app']:$_GET['app']); +} // An admin should not be able to add remote and public services // on its own. This should only be possible programmatically. From 2166683e3b5810bfeca2540a038e212fb8ca75ed Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 18 Feb 2014 16:31:40 +0100 Subject: [PATCH 09/24] Allow setting the frequency of which the file watcher checks for updates --- lib/private/files/cache/watcher.php | 46 +++++++++++++++++++++-------- tests/lib/files/view.php | 3 ++ 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/lib/private/files/cache/watcher.php b/lib/private/files/cache/watcher.php index 251ecbe707..48aa6f853c 100644 --- a/lib/private/files/cache/watcher.php +++ b/lib/private/files/cache/watcher.php @@ -12,6 +12,14 @@ namespace OC\Files\Cache; * check the storage backends for updates and change the cache accordingly */ class Watcher { + const CHECK_NEVER = 0; // never check the underlying filesystem for updates + const CHECK_ONCE = 1; // check the underlying filesystem for updates once every request for each file + const CHECK_ALWAYS = 2; // always check the underlying filesystem for updates + + protected $watchPolicy = self::CHECK_ONCE; + + protected $checkedPaths = array(); + /** * @var \OC\Files\Storage\Storage $storage */ @@ -23,7 +31,7 @@ class Watcher { protected $cache; /** - * @var Scanner $scanner; + * @var Scanner $scanner ; */ protected $scanner; @@ -36,6 +44,13 @@ class Watcher { $this->scanner = $storage->getScanner(); } + /** + * @param int $policy either \OC\Files\Cache\Watcher::UPDATE_NEVER, \OC\Files\Cache\Watcher::UPDATE_ONCE, \OC\Files\Cache\Watcher::UPDATE_ALWAYS + */ + public function setPolicy($policy) { + $this->watchPolicy = $policy; + } + /** * check $path for updates * @@ -43,20 +58,25 @@ class Watcher { * @return boolean | array true if path was updated, otherwise the cached data is returned */ public function checkUpdate($path) { - $cachedEntry = $this->cache->get($path); - if ($this->storage->hasUpdated($path, $cachedEntry['storage_mtime'])) { - if ($this->storage->is_dir($path)) { - $this->scanner->scan($path, Scanner::SCAN_SHALLOW); - } else { - $this->scanner->scanFile($path); + if ($this->watchPolicy === self::CHECK_ALWAYS or ($this->watchPolicy === self::CHECK_ONCE and array_search($path, $this->checkedPaths) === false)) { + $cachedEntry = $this->cache->get($path); + $this->checkedPaths[] = $path; + if ($this->storage->hasUpdated($path, $cachedEntry['storage_mtime'])) { + if ($this->storage->is_dir($path)) { + $this->scanner->scan($path, Scanner::SCAN_SHALLOW); + } else { + $this->scanner->scanFile($path); + } + if ($cachedEntry['mimetype'] === 'httpd/unix-directory') { + $this->cleanFolder($path); + } + $this->cache->correctFolderSize($path); + return true; } - if ($cachedEntry['mimetype'] === 'httpd/unix-directory') { - $this->cleanFolder($path); - } - $this->cache->correctFolderSize($path); - return true; + return $cachedEntry; + } else { + return false; } - return $cachedEntry; } /** diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index 72a2f854cb..371d1ed179 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -7,6 +7,8 @@ namespace Test\Files; +use OC\Files\Cache\Watcher; + class TemporaryNoTouch extends \OC\Files\Storage\Temporary { public function touch($path, $mtime = null) { return false; @@ -249,6 +251,7 @@ class View extends \PHPUnit_Framework_TestCase { function testWatcher() { $storage1 = $this->getTestStorage(); \OC\Files\Filesystem::mount($storage1, array(), '/'); + $storage1->getWatcher()->setPolicy(Watcher::CHECK_ALWAYS); $rootView = new \OC\Files\View(''); From 797e0a614cc44e627a54dfd39ce4047d176ebd9b Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 10 Jan 2014 16:14:37 +0100 Subject: [PATCH 10/24] Added extra checks for invalid file chars in newfile.php and newfolder.php - added PHP utility function to check for file name validity - fixes issue where a user can create a file called ".." from the files UI - added extra checks to make sure newfile.php and newfolder.php also check for invalid characters --- apps/files/ajax/newfile.php | 14 +++++++--- apps/files/ajax/newfolder.php | 4 +-- lib/private/util.php | 21 +++++++++++++++ lib/public/constants.php | 3 +++ lib/public/util.php | 9 +++++++ tests/lib/util.php | 48 +++++++++++++++++++++++++++++++++++ 6 files changed, 93 insertions(+), 6 deletions(-) diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php index 1853098c50..0187b20075 100644 --- a/apps/files/ajax/newfile.php +++ b/apps/files/ajax/newfile.php @@ -50,16 +50,22 @@ $l10n = \OC_L10n::get('files'); $result = array( 'success' => false, 'data' => NULL - ); +); +$trimmedFileName = trim($filename); -if(trim($filename) === '') { +if($trimmedFileName === '') { $result['data'] = array('message' => (string)$l10n->t('File name cannot be empty.')); OCP\JSON::error($result); exit(); } +if($trimmedFileName === '.' || $trimmedFileName === '..') { + $result['data'] = array('message' => (string)$l10n->t('"%s" is an invalid file name.', $trimmedFileName)); + OCP\JSON::error($result); + exit(); +} -if(strpos($filename, '/') !== false) { - $result['data'] = array('message' => (string)$l10n->t('File name must not contain "/". Please choose a different name.')); +if(!OCP\Util::isValidFileName($filename)) { + $result['data'] = array('message' => (string)$l10n->t("Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.")); OCP\JSON::error($result); exit(); } diff --git a/apps/files/ajax/newfolder.php b/apps/files/ajax/newfolder.php index 4cfcae3090..b2b4fb27f7 100644 --- a/apps/files/ajax/newfolder.php +++ b/apps/files/ajax/newfolder.php @@ -23,8 +23,8 @@ if(trim($foldername) === '') { exit(); } -if(strpos($foldername, '/') !== false) { - $result['data'] = array('message' => $l10n->t('Folder name must not contain "/". Please choose a different name.')); +if(!OCP\Util::isValidFileName($foldername)) { + $result['data'] = array('message' => (string)$l10n->t("Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed.")); OCP\JSON::error($result); exit(); } diff --git a/lib/private/util.php b/lib/private/util.php index 0585749d61..bdc762d4be 100755 --- a/lib/private/util.php +++ b/lib/private/util.php @@ -1149,4 +1149,25 @@ class OC_Util { } return $version; } + + /** + * Returns whether the given file name is valid + * @param $file string file name to check + * @return bool true if the file name is valid, false otherwise + */ + public static function isValidFileName($file) { + $trimmed = trim($file); + if ($trimmed === '') { + return false; + } + if ($trimmed === '.' || $trimmed === '..') { + return false; + } + foreach (str_split($trimmed) as $char) { + if (strpos(\OCP\FILENAME_INVALID_CHARS, $char) !== false) { + return false; + } + } + return true; + } } diff --git a/lib/public/constants.php b/lib/public/constants.php index 1495c620dc..350646a0ac 100644 --- a/lib/public/constants.php +++ b/lib/public/constants.php @@ -35,3 +35,6 @@ const PERMISSION_UPDATE = 2; const PERMISSION_DELETE = 8; const PERMISSION_SHARE = 16; const PERMISSION_ALL = 31; + +const FILENAME_INVALID_CHARS = "\\/<>:\"|?*\n"; + diff --git a/lib/public/util.php b/lib/public/util.php index 570283e2a8..585c5d2263 100644 --- a/lib/public/util.php +++ b/lib/public/util.php @@ -486,4 +486,13 @@ class Util { public static function uploadLimit() { return \OC_Helper::uploadLimit(); } + + /** + * Returns whether the given file name is valid + * @param $file string file name to check + * @return bool true if the file name is valid, false otherwise + */ + public static function isValidFileName($file) { + return \OC_Util::isValidFileName($file); + } } diff --git a/tests/lib/util.php b/tests/lib/util.php index bfe68f5f68..ee336aa111 100644 --- a/tests/lib/util.php +++ b/tests/lib/util.php @@ -170,4 +170,52 @@ class Test_Util extends PHPUnit_Framework_TestCase { array('442aa682de2a64db1e010f50e60fd9c9', 'local::C:\Users\ADMINI~1\AppData\Local\Temp\2/442aa682de2a64db1e010f50e60fd9c9/') ); } + + /** + * @dataProvider filenameValidationProvider + */ + public function testFilenameValidation($file, $valid) { + // private API + $this->assertEquals($valid, \OC_Util::isValidFileName($file)); + // public API + $this->assertEquals($valid, \OCP\Util::isValidFileName($file)); + } + + public function filenameValidationProvider() { + return array( + // valid names + array('boringname', true), + array('something.with.extension', true), + array('now with spaces', true), + array('.a', true), + array('..a', true), + array('.dotfile', true), + array('single\'quote', true), + array(' spaces before', true), + array('spaces after ', true), + array('allowed chars including the crazy ones $%&_-^@!,()[]{}=;#', true), + array('汉字也能用', true), + array('und Ümläüte sind auch willkommen', true), + // disallowed names + array('', false), + array(' ', false), + array('.', false), + array('..', false), + array('back\\slash', false), + array('sl/ash', false), + array('ltgt', false), + array('col:on', false), + array('double"quote', false), + array('pi|pe', false), + array('dont?ask?questions?', false), + array('super*star', false), + array('new\nline', false), + // better disallow these to avoid unexpected trimming to have side effects + array(' ..', false), + array('.. ', false), + array('. ', false), + array(' .', false), + ); + } } From bd71a1b7b66f02b3630da44e24b48e29f3d02f17 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Mon, 13 Jan 2014 13:14:05 +0100 Subject: [PATCH 11/24] Added file name check in webdav connector - added file name check for the put, rename and setNames() methods which throw a "Bad Request" whenever invalid characters are used - replaced \OC\Filesystem usage with $this->getFS() to be able to write unit tests --- lib/private/connector/sabre/file.php | 10 ++++-- lib/private/connector/sabre/node.php | 9 +++-- lib/private/connector/sabre/objecttree.php | 5 +++ tests/lib/connector/sabre/file.php | 40 ++++++++++++++++++++++ tests/lib/connector/sabre/objecttree.php | 16 +++++++++ 5 files changed, 76 insertions(+), 4 deletions(-) diff --git a/lib/private/connector/sabre/file.php b/lib/private/connector/sabre/file.php index ed27cef440..db0726e135 100644 --- a/lib/private/connector/sabre/file.php +++ b/lib/private/connector/sabre/file.php @@ -58,6 +58,11 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D throw new \Sabre_DAV_Exception_ServiceUnavailable(); } + $fileName = basename($this->path); + if (!\OCP\Util::isValidFileName($fileName)) { + throw new \Sabre_DAV_Exception_BadRequest(); + } + // chunked handling if (isset($_SERVER['HTTP_OC_CHUNKED'])) { return $this->createFileChunked($data); @@ -142,15 +147,16 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D * @throws Sabre_DAV_Exception_Forbidden */ public function delete() { + $fs = $this->getFS(); if ($this->path === 'Shared') { throw new \Sabre_DAV_Exception_Forbidden(); } - if (!\OC\Files\Filesystem::isDeletable($this->path)) { + if (!$fs->isDeletable($this->path)) { throw new \Sabre_DAV_Exception_Forbidden(); } - \OC\Files\Filesystem::unlink($this->path); + $fs->unlink($this->path); // remove properties $this->removeProperties(); diff --git a/lib/private/connector/sabre/node.php b/lib/private/connector/sabre/node.php index 993aa73fae..bf7a04f5b1 100644 --- a/lib/private/connector/sabre/node.php +++ b/lib/private/connector/sabre/node.php @@ -85,19 +85,24 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr * @return void */ public function setName($name) { + $fs = $this->getFS(); // rename is only allowed if the update privilege is granted - if (!\OC\Files\Filesystem::isUpdatable($this->path)) { + if (!$fs->isUpdatable($this->path)) { throw new \Sabre_DAV_Exception_Forbidden(); } list($parentPath, ) = Sabre_DAV_URLUtil::splitPath($this->path); list(, $newName) = Sabre_DAV_URLUtil::splitPath($name); + if (!\OCP\Util::isValidFileName($newName)) { + throw new \Sabre_DAV_Exception_BadRequest(); + } + $newPath = $parentPath . '/' . $newName; $oldPath = $this->path; - \OC\Files\Filesystem::rename($this->path, $newPath); + $fs->rename($this->path, $newPath); $this->path = $newPath; diff --git a/lib/private/connector/sabre/objecttree.php b/lib/private/connector/sabre/objecttree.php index d1e179af2e..d2fa425b22 100644 --- a/lib/private/connector/sabre/objecttree.php +++ b/lib/private/connector/sabre/objecttree.php @@ -105,6 +105,11 @@ class ObjectTree extends \Sabre_DAV_ObjectTree { } } + $fileName = basename($destinationPath); + if (!\OCP\Util::isValidFileName($fileName)) { + throw new \Sabre_DAV_Exception_BadRequest(); + } + $renameOkay = $fs->rename($sourcePath, $destinationPath); if (!$renameOkay) { throw new \Sabre_DAV_Exception_Forbidden(''); diff --git a/tests/lib/connector/sabre/file.php b/tests/lib/connector/sabre/file.php index e1fed0384c..50b8711a90 100644 --- a/tests/lib/connector/sabre/file.php +++ b/tests/lib/connector/sabre/file.php @@ -35,6 +35,46 @@ class Test_OC_Connector_Sabre_File extends PHPUnit_Framework_TestCase { $etag = $file->put('test data'); } + /** + * @expectedException Sabre_DAV_Exception_BadRequest + */ + public function testSimplePutInvalidChars() { + // setup + $file = new OC_Connector_Sabre_File('/super*star.txt'); + $file->fileView = $this->getMock('\OC\Files\View', array('file_put_contents'), array(), '', FALSE); + $file->fileView->expects($this->any())->method('file_put_contents')->withAnyParameters()->will($this->returnValue(false)); + + // action + $etag = $file->put('test data'); + } + + /** + * Test setting name with setName() + */ + public function testSetName() { + // setup + $file = new OC_Connector_Sabre_File('/test.txt'); + $file->fileView = $this->getMock('\OC\Files\View', array('isUpdatable'), array(), '', FALSE); + $file->fileView->expects($this->any())->method('isUpdatable')->withAnyParameters()->will($this->returnValue(true)); + $etag = $file->put('test data'); + $file->setName('/renamed.txt'); + $this->assertTrue($file->fileView->file_exists('/renamed.txt')); + // clean up + $file->delete(); + } + + /** + * Test setting name with setName() with invalid chars + * @expectedException Sabre_DAV_Exception_BadRequest + */ + public function testSetNameInvalidChars() { + // setup + $file = new OC_Connector_Sabre_File('/test.txt'); + $file->fileView = $this->getMock('\OC\Files\View', array('isUpdatable'), array(), '', FALSE); + $file->fileView->expects($this->any())->method('isUpdatable')->withAnyParameters()->will($this->returnValue(true)); + $file->setName('/super*star.txt'); + } + /** * @expectedException Sabre_DAV_Exception_Forbidden */ diff --git a/tests/lib/connector/sabre/objecttree.php b/tests/lib/connector/sabre/objecttree.php index e32f2365f9..fb50c736ed 100644 --- a/tests/lib/connector/sabre/objecttree.php +++ b/tests/lib/connector/sabre/objecttree.php @@ -52,6 +52,20 @@ class ObjectTree extends PHPUnit_Framework_TestCase { $this->assertTrue(true); } + /** + * @dataProvider moveFailedInvalidCharsProvider + * @expectedException Sabre_DAV_Exception_BadRequest + */ + public function testMoveFailedInvalidChars($source, $dest, $updatables, $deletables) { + $this->moveTest($source, $dest, $updatables, $deletables); + } + + function moveFailedInvalidCharsProvider() { + return array( + array('a/b', 'a/c*', array('a' => false, 'a/b' => true, 'a/c*' => false), array()), + ); + } + function moveFailedProvider() { return array( array('a/b', 'a/c', array('a' => false, 'a/b' => false, 'a/c' => false), array()), @@ -66,6 +80,8 @@ class ObjectTree extends PHPUnit_Framework_TestCase { return array( array('a/b', 'a/c', array('a' => false, 'a/b' => true, 'a/c' => false), array()), array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => true, 'b/b' => false), array('a/b' => true)), + // older files with special chars can still be renamed to valid names + array('a/b*', 'b/b', array('a' => true, 'a/b*' => true, 'b' => true, 'b/b' => false), array('a/b*' => true)), ); } From adaee6a5a19a4b0050d189736bd4e6183fee9cf0 Mon Sep 17 00:00:00 2001 From: Scrutinizer Auto-Fixer Date: Wed, 19 Feb 2014 09:31:54 +0100 Subject: [PATCH 12/24] Scrutinizer Auto-Fixes This patch was automatically generated as part of the following inspection: https://scrutinizer-ci.com/g/owncloud/core/inspections/cdfecc4e-a37e-4233-8025-f0d7252a8720 Enabled analysis tools: - PHP Analyzer - JSHint - PHP Copy/Paste Detector - PHP PDepend --- apps/files_encryption/lib/helper.php | 2 +- apps/files_external/lib/google.php | 2 +- apps/files_external/lib/streamwrapper.php | 1 + apps/files_external/lib/webdav.php | 3 +++ apps/files_sharing/lib/cache.php | 2 +- apps/files_sharing/lib/sharedstorage.php | 1 + apps/files_versions/lib/versions.php | 4 +-- apps/user_ldap/lib/access.php | 12 +++++++-- apps/user_ldap/lib/connection.php | 3 +++ apps/user_ldap/lib/proxy.php | 8 ++++++ apps/user_ldap/lib/wizard.php | 8 +++--- apps/user_ldap/user_ldap.php | 3 +-- core/command/db/generatechangescript.php | 1 - core/command/status.php | 2 -- core/command/upgrade.php | 2 -- core/command/user/report.php | 2 -- lib/private/app.php | 2 ++ lib/private/appconfig.php | 7 +++-- lib/private/appframework/app.php | 1 - .../dependencyinjection/dicontainer.php | 1 - .../appframework/http/redirectresponse.php | 4 +-- .../middleware/middlewaredispatcher.php | 1 - .../security/securitymiddleware.php | 2 +- lib/private/archive.php | 1 - lib/private/archive/tar.php | 6 +++++ lib/private/archive/zip.php | 4 ++- lib/private/arrayparser.php | 3 +++ lib/private/backgroundjob.php | 2 +- lib/private/backgroundjob/joblist.php | 2 +- lib/private/cache/usercache.php | 2 +- lib/private/config.php | 4 +-- .../sabre/aborteduploaddetectionplugin.php | 2 +- lib/private/connector/sabre/quotaplugin.php | 1 + lib/private/db.php | 3 ++- lib/private/db/mdb2schemawriter.php | 6 +++++ lib/private/filechunking.php | 2 +- lib/private/fileproxy.php | 1 + lib/private/files.php | 3 +++ lib/private/files/cache/updater.php | 2 -- lib/private/files/fileinfo.php | 4 +++ lib/private/files/filesystem.php | 3 +++ lib/private/files/node/folder.php | 1 - lib/private/files/node/node.php | 2 -- lib/private/files/node/root.php | 1 - lib/private/files/storage/loader.php | 3 +++ lib/private/files/storage/mappedlocal.php | 6 +++++ lib/private/files/utils/scanner.php | 3 +++ lib/private/geo.php | 4 +++ lib/private/group.php | 2 +- lib/private/group/dummy.php | 2 +- lib/private/image.php | 9 ++++--- lib/private/installer.php | 27 +------------------ lib/private/l10n.php | 3 +++ lib/private/legacy/appconfig.php | 2 ++ lib/private/legacy/preferences.php | 2 +- lib/private/migrate.php | 3 ++- lib/private/migration/content.php | 8 +++--- lib/private/migration/provider.php | 2 +- lib/private/ocs.php | 5 +--- lib/private/preferences.php | 2 +- lib/private/request.php | 2 +- lib/private/share/searchresultsorter.php | 4 +-- lib/private/template/base.php | 4 +++ lib/private/template/templatefilelocator.php | 1 + lib/private/user.php | 2 ++ lib/private/user/database.php | 2 +- lib/private/util.php | 5 ++-- lib/public/appframework/controller.php | 4 +-- lib/public/backgroundjob.php | 4 +-- lib/public/backgroundjob/ijob.php | 1 + lib/public/backgroundjob/ijoblist.php | 7 ++++- lib/public/contacts/imanager.php | 4 +-- lib/public/files.php | 1 - lib/public/iappconfig.php | 2 ++ lib/public/iconfig.php | 2 +- lib/public/itags.php | 4 +-- lib/public/share.php | 13 +++++++++ tests/lib/api.php | 8 ++++++ .../lib/appframework/http/DispatcherTest.php | 5 +++- tests/lib/appframework/http/ResponseTest.php | 4 +-- .../middleware/MiddlewareDispatcherTest.php | 3 +++ .../security/SecurityMiddlewareTest.php | 11 ++++++++ .../lib/appframework/routing/RoutingTest.php | 13 +++++++++ tests/lib/dbschema.php | 6 +++++ tests/lib/errorHandler.php | 4 +++ tests/lib/files/cache/homecache.php | 4 +++ tests/lib/files/etagtest.php | 3 +++ tests/lib/files/node/integration.php | 3 --- tests/lib/files/node/root.php | 1 - tests/lib/files/storage/home.php | 4 +++ tests/lib/files/storage/wrapper/quota.php | 3 +++ tests/lib/files/stream/quota.php | 4 +++ tests/lib/group/backend.php | 4 +-- tests/lib/group/database.php | 4 +-- tests/lib/group/group.php | 2 +- tests/lib/migrate.php | 1 + tests/lib/ocs/privatedata.php | 1 + tests/lib/share/share.php | 7 +++++ tests/lib/template/resourcelocator.php | 5 ++++ tests/lib/user.php | 2 -- tests/testcleanuplistener.php | 3 +++ 101 files changed, 260 insertions(+), 119 deletions(-) diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php index 5ec09629d6..ef3775875f 100755 --- a/apps/files_encryption/lib/helper.php +++ b/apps/files_encryption/lib/helper.php @@ -425,7 +425,7 @@ class Helper { /** * @brief glob uses different pattern than regular expressions, escape glob pattern only * @param string $path unescaped path - * @return escaped path + * @return string path */ public static function escapeGlobPattern($path) { return preg_replace('/(\*|\?|\[)/', '[$1]', $path); diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php index 064c1e20a9..35457f6852 100644 --- a/apps/files_external/lib/google.php +++ b/apps/files_external/lib/google.php @@ -67,7 +67,7 @@ class Google extends \OC\Files\Storage\Common { /** * Get the Google_DriveFile object for the specified path * @param string $path - * @return Google_DriveFile|false + * @return string */ private function getDriveFile($path) { // Remove leading and trailing slashes diff --git a/apps/files_external/lib/streamwrapper.php b/apps/files_external/lib/streamwrapper.php index 3e3dc3e3af..44bd9a0161 100644 --- a/apps/files_external/lib/streamwrapper.php +++ b/apps/files_external/lib/streamwrapper.php @@ -11,6 +11,7 @@ namespace OC\Files\Storage; abstract class StreamWrapper extends Common { /** + * @param string $path * @return string|null */ abstract public function constructUrl($path); diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php index c64b2d8b73..7611316a26 100644 --- a/apps/files_external/lib/webdav.php +++ b/apps/files_external/lib/webdav.php @@ -336,6 +336,9 @@ class DAV extends \OC\Files\Storage\Common{ } } + /** + * @param string $path + */ public function cleanPath($path) { $path = \OC\Files\Filesystem::normalizePath($path); // remove leading slash diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php index 7d63e7a4fe..aadc54e4a7 100644 --- a/apps/files_sharing/lib/cache.php +++ b/apps/files_sharing/lib/cache.php @@ -396,7 +396,7 @@ class Shared_Cache extends Cache { * use the one with the highest id gives the best result with the background scanner, since that is most * likely the folder where we stopped scanning previously * - * @return string|bool the path of the folder or false when no folder matched + * @return boolean the path of the folder or false when no folder matched */ public function getIncomplete() { return false; diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index ebd16f081b..b922654e5e 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -41,6 +41,7 @@ class Shared extends \OC\Files\Storage\Common { /** * @brief Get the source file path, permissions, and owner for a shared file * @param string Shared target file path + * @param string $target * @return Returns array with the keys path, permissions, and owner or false if not found */ public function getFile($target) { diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index fc0bf3bfad..2bd9c15bae 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -336,7 +336,7 @@ class Storage { * @brief deletes used space for files versions in db if user was deleted * * @param type $uid id of deleted user - * @return result of db delete operation + * @return \OC_DB_StatementWrapper of db delete operation */ public static function deleteUser($uid) { $query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_versions` WHERE `user`=?'); @@ -420,8 +420,8 @@ class Storage { /** * @brief get list of files we want to expire - * @param integer $currentTime timestamp of current time * @param array $versions list of versions + * @param integer $time * @return array containing the list of to deleted versions and the size of them */ protected static function getExpireList($time, $versions) { diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index 8a8d8aa5e3..6795aecafe 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -164,6 +164,7 @@ class Access extends LDAPUtility { /** * gives back the database table for the query + * @param boolean $isUser */ private function getMapTable($isUser) { if($isUser) { @@ -644,6 +645,8 @@ class Access extends LDAPUtility { * @brief executes an LDAP search, optimized for Users * @param $filter the LDAP filter for the search * @param $attr optional, when a certain attribute shall be filtered out + * @param integer $limit + * @param integer $offset * @returns array with the search result * * Executes an LDAP search @@ -661,8 +664,10 @@ class Access extends LDAPUtility { /** * @brief executes an LDAP search, optimized for Groups - * @param $filter the LDAP filter for the search + * @param string $filter the LDAP filter for the search * @param $attr optional, when a certain attribute shall be filtered out + * @param integer $limit + * @param integer $offset * @returns array with the search result * * Executes an LDAP search @@ -757,7 +762,7 @@ class Access extends LDAPUtility { /** * @brief executes an LDAP search, but counts the results only - * @param $filter the LDAP filter for the search + * @param string $filter the LDAP filter for the search * @param $base an array containing the LDAP subtree(s) that shall be searched * @param $attr optional, array, one or more attributes that shall be * retrieved. Results will according to the order in the array. @@ -1006,6 +1011,9 @@ class Access extends LDAPUtility { return $this->combineFilterWithOr($filter); } + /** + * @param string $password + */ public function areCredentialsValid($name, $password) { $name = $this->DNasBaseParameter($name); $testConnection = clone $this->connection; diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php index 1987055016..b2075748a3 100644 --- a/apps/user_ldap/lib/connection.php +++ b/apps/user_ldap/lib/connection.php @@ -159,6 +159,9 @@ class Connection extends LDAPUtility { return unserialize(base64_decode($this->cache->get($key))); } + /** + * @param string $key + */ public function isCached($key) { if(!$this->configured) { $this->readConfiguration(); diff --git a/apps/user_ldap/lib/proxy.php b/apps/user_ldap/lib/proxy.php index b68910ff97..b27233bcd1 100644 --- a/apps/user_ldap/lib/proxy.php +++ b/apps/user_ldap/lib/proxy.php @@ -56,8 +56,13 @@ abstract class Proxy { /** * @param boolean $passOnWhen + * @param string $method */ abstract protected function callOnLastSeenOn($id, $method, $parameters, $passOnWhen); + + /** + * @param string $method + */ abstract protected function walkBackends($id, $method, $parameters); /** @@ -95,6 +100,9 @@ abstract class Proxy { return unserialize(base64_decode($this->cache->get($key))); } + /** + * @param string $key + */ public function isCached($key) { $key = $this->getCacheKey($key); return $this->cache->hasKey($key); diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php index 5079642d95..e79090febc 100644 --- a/apps/user_ldap/lib/wizard.php +++ b/apps/user_ldap/lib/wizard.php @@ -865,8 +865,8 @@ class Wizard extends LDAPUtility { /** * @brief does a cumulativeSearch on LDAP to get different values of a * specified attribute - * @param $filters array, the filters that shall be used in the search - * @param $attr the attribute of which a list of values shall be returned + * @param string[] $filters array, the filters that shall be used in the search + * @param string $attr the attribute of which a list of values shall be returned * @param $lfw bool, whether the last filter is a wildcard which shall not * be processed if there were already findings, defaults to true * @param string $maxF string. if not null, this variable will have the filter that @@ -933,8 +933,8 @@ class Wizard extends LDAPUtility { * @brief determines if and which $attr are available on the LDAP server * @param string[] $objectclasses the objectclasses to use as search filter * @param string $attr the attribute to look for - * @param $dbkey the dbkey of the setting the feature is connected to - * @param $confkey the confkey counterpart for the $dbkey as used in the + * @param string $dbkey the dbkey of the setting the feature is connected to + * @param string $confkey the confkey counterpart for the $dbkey as used in the * Configuration class * @param $po boolean, whether the objectClass with most result entries * shall be pre-selected via the result diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 1088dafab7..4a147cf988 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -25,7 +25,6 @@ namespace OCA\user_ldap; -use OCA\user_ldap\lib\ILDAPWrapper; use OCA\user_ldap\lib\BackendUtility; class USER_LDAP extends BackendUtility implements \OCP\UserInterface { @@ -139,7 +138,7 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface { * @brief reads the image from LDAP that shall be used as Avatar * @param $uid string, the ownCloud user name * @param $dn string, the user DN - * @return image data (provided by LDAP) | false + * @return string data (provided by LDAP) | false */ private function getAvatarImage($uid, $dn) { $attributes = array('jpegPhoto', 'thumbnailPhoto'); diff --git a/core/command/db/generatechangescript.php b/core/command/db/generatechangescript.php index f971124cfd..a4d710aa97 100644 --- a/core/command/db/generatechangescript.php +++ b/core/command/db/generatechangescript.php @@ -11,7 +11,6 @@ namespace OC\Core\Command\Db; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class GenerateChangeScript extends Command { diff --git a/core/command/status.php b/core/command/status.php index ea9825b0f6..6bc1dba44a 100644 --- a/core/command/status.php +++ b/core/command/status.php @@ -9,9 +9,7 @@ namespace OC\Core\Command; use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class Status extends Command { diff --git a/core/command/upgrade.php b/core/command/upgrade.php index 1d105b67a0..128d27aa3d 100644 --- a/core/command/upgrade.php +++ b/core/command/upgrade.php @@ -10,9 +10,7 @@ namespace OC\Core\Command; use OC\Updater; use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class Upgrade extends Command { diff --git a/core/command/user/report.php b/core/command/user/report.php index f95ba251bc..70c5a8566b 100644 --- a/core/command/user/report.php +++ b/core/command/user/report.php @@ -9,10 +9,8 @@ namespace OC\Core\Command\User; use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Helper\TableHelper; class Report extends Command { protected function configure() { diff --git a/lib/private/app.php b/lib/private/app.php index e60a8a4e0b..47f983cce3 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -640,6 +640,8 @@ class OC_App{ /** * register an admin form to be shown + * @param string $app + * @param string $page */ public static function registerAdmin($app, $page) { self::$adminForms[]= $app.'/'.$page.'.php'; diff --git a/lib/private/appconfig.php b/lib/private/appconfig.php index a32c1126c7..cdaaebb87e 100644 --- a/lib/private/appconfig.php +++ b/lib/private/appconfig.php @@ -69,6 +69,9 @@ class AppConfig implements \OCP\IAppConfig { return $this->cache[$app]; } + /** + * @param string $app + */ private function getAppValues($app) { $appCache = $this->getAppCache($app); if (array_search($app, $this->appsLoaded) === false) { @@ -184,7 +187,7 @@ class AppConfig implements \OCP\IAppConfig { * @brief Deletes a key * @param string $app app * @param string $key key - * @return bool + * @return boolean|null */ public function deleteKey($app, $key) { $where = array( @@ -200,7 +203,7 @@ class AppConfig implements \OCP\IAppConfig { /** * @brief Remove app from appconfig * @param string $app app - * @return bool + * @return boolean|null * * Removes all keys in appconfig belonging to the app. */ diff --git a/lib/private/appframework/app.php b/lib/private/appframework/app.php index b835188661..3b13194862 100644 --- a/lib/private/appframework/app.php +++ b/lib/private/appframework/app.php @@ -25,7 +25,6 @@ namespace OC\AppFramework; use OC\AppFramework\DependencyInjection\DIContainer; -use OCP\AppFramework\IAppContainer; /** diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php index b6ccf60db4..4821ecaf67 100644 --- a/lib/private/appframework/dependencyinjection/dicontainer.php +++ b/lib/private/appframework/dependencyinjection/dicontainer.php @@ -34,7 +34,6 @@ use OC\AppFramework\Utility\SimpleContainer; use OC\AppFramework\Utility\TimeFactory; use OCP\AppFramework\IApi; use OCP\AppFramework\IAppContainer; -use OCP\AppFramework\IMiddleWare; use OCP\AppFramework\Middleware; use OCP\IServerContainer; diff --git a/lib/private/appframework/http/redirectresponse.php b/lib/private/appframework/http/redirectresponse.php index 5c4e1c06dc..0535334906 100644 --- a/lib/private/appframework/http/redirectresponse.php +++ b/lib/private/appframework/http/redirectresponse.php @@ -24,8 +24,8 @@ namespace OC\AppFramework\Http; -use OCP\AppFramework\Http\Response, - OCP\AppFramework\Http; +use OCP\AppFramework\Http\Response; +use OCP\AppFramework\Http; /** diff --git a/lib/private/appframework/middleware/middlewaredispatcher.php b/lib/private/appframework/middleware/middlewaredispatcher.php index 598743e523..2a715598fc 100644 --- a/lib/private/appframework/middleware/middlewaredispatcher.php +++ b/lib/private/appframework/middleware/middlewaredispatcher.php @@ -26,7 +26,6 @@ namespace OC\AppFramework\Middleware; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\Response; -use OCP\AppFramework\MiddleWare; /** * This class is used to store and run all the middleware in correct order diff --git a/lib/private/appframework/middleware/security/securitymiddleware.php b/lib/private/appframework/middleware/security/securitymiddleware.php index c314375482..bb02d565fa 100644 --- a/lib/private/appframework/middleware/security/securitymiddleware.php +++ b/lib/private/appframework/middleware/security/securitymiddleware.php @@ -66,7 +66,7 @@ class SecurityMiddleware extends Middleware { * This runs all the security checks before a method call. The * security checks are determined by inspecting the controller method * annotations - * @param string/Controller $controller the controllername or string + * @param string $controller the controllername or string * @param string $methodName the name of the method * @throws SecurityException when a security check fails */ diff --git a/lib/private/archive.php b/lib/private/archive.php index a18f8d3ffb..6f51066ddf 100644 --- a/lib/private/archive.php +++ b/lib/private/archive.php @@ -88,7 +88,6 @@ abstract class OC_Archive{ abstract function extractFile($path, $dest); /** * extract the archive - * @param string $path * @param string $dest * @return bool */ diff --git a/lib/private/archive/tar.php b/lib/private/archive/tar.php index 5538e027ab..cbdb565ba3 100644 --- a/lib/private/archive/tar.php +++ b/lib/private/archive/tar.php @@ -22,6 +22,9 @@ class OC_Archive_TAR extends OC_Archive{ private $tar=null; private $path; + /** + * @param string $source + */ function __construct($source) { $types=array(null, 'gz', 'bz'); $this->path=$source; @@ -122,6 +125,9 @@ class OC_Archive_TAR extends OC_Archive{ return true; } + /** + * @param string $file + */ private function getHeader($file) { if ( ! $this->cachedHeaders ) { $this->cachedHeaders = $this->tar->listContent(); diff --git a/lib/private/archive/zip.php b/lib/private/archive/zip.php index cd5479299a..fa5630d766 100644 --- a/lib/private/archive/zip.php +++ b/lib/private/archive/zip.php @@ -13,6 +13,9 @@ class OC_Archive_ZIP extends OC_Archive{ private $zip=null; private $path; + /** + * @param string $source + */ function __construct($source) { $this->path=$source; $this->zip=new ZipArchive(); @@ -125,7 +128,6 @@ class OC_Archive_ZIP extends OC_Archive{ } /** * extract the archive - * @param string $path * @param string $dest * @return bool */ diff --git a/lib/private/arrayparser.php b/lib/private/arrayparser.php index c4ad1264fb..d353e48657 100644 --- a/lib/private/arrayparser.php +++ b/lib/private/arrayparser.php @@ -39,6 +39,9 @@ class ArrayParser { return $this->parse($string); } + /** + * @param string $string + */ function stripPHPTags($string) { $string = trim($string); if (substr($string, 0, 5) === 'addChild('name', $column->getName()); switch($column->getType()) { @@ -114,6 +117,9 @@ class OC_DB_MDB2SchemaWriter { } } + /** + * @param SimpleXMLElement $xml + */ private static function saveIndex($index, $xml) { $xml->addChild('name', $index->getName()); if ($index->isPrimary()) { diff --git a/lib/private/filechunking.php b/lib/private/filechunking.php index 09b30af48b..be7f4e14a1 100644 --- a/lib/private/filechunking.php +++ b/lib/private/filechunking.php @@ -41,7 +41,7 @@ class OC_FileChunking { * Stores the given $data under the given $key - the number of stored bytes is returned * * @param string $index - * @param $data + * @param resource $data * @return int */ public function store($index, $data) { diff --git a/lib/private/fileproxy.php b/lib/private/fileproxy.php index 62187e1ec7..88976c1b8e 100644 --- a/lib/private/fileproxy.php +++ b/lib/private/fileproxy.php @@ -110,6 +110,7 @@ class OC_FileProxy{ /** * @param string $operation + * @param string|boolean $path * * @return string */ diff --git a/lib/private/files.php b/lib/private/files.php index 4a6b9d8ca0..6a6916537d 100644 --- a/lib/private/files.php +++ b/lib/private/files.php @@ -32,6 +32,9 @@ class OC_Files { return \OC\Files\Filesystem::getFileInfo($path, $includeMountPoints); } + /** + * @param string $path + */ static public function getDirectoryContent($path){ return \OC\Files\Filesystem::getDirectoryContent($path); } diff --git a/lib/private/files/cache/updater.php b/lib/private/files/cache/updater.php index e4114e572f..7a45b9e9e9 100644 --- a/lib/private/files/cache/updater.php +++ b/lib/private/files/cache/updater.php @@ -8,8 +8,6 @@ namespace OC\Files\Cache; -use OCP\Util; - /** * listen to filesystem hooks and change the cache accordingly */ diff --git a/lib/private/files/fileinfo.php b/lib/private/files/fileinfo.php index c77571cd2a..2dbdd80a26 100644 --- a/lib/private/files/fileinfo.php +++ b/lib/private/files/fileinfo.php @@ -29,6 +29,10 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { */ private $internalPath; + /** + * @param string|boolean $path + * @param Storage\Storage $storage + */ public function __construct($path, $storage, $internalPath, $data) { $this->path = $path; $this->storage = $storage; diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php index d1ebad3490..0face6aa3b 100644 --- a/lib/private/files/filesystem.php +++ b/lib/private/files/filesystem.php @@ -668,6 +668,9 @@ class Filesystem { return self::$defaultInstance->search($query); } + /** + * @param string $query + */ static public function searchByMime($query) { return self::$defaultInstance->searchByMime($query); } diff --git a/lib/private/files/node/folder.php b/lib/private/files/node/folder.php index 923f53821b..d9e0ddc2d6 100644 --- a/lib/private/files/node/folder.php +++ b/lib/private/files/node/folder.php @@ -9,7 +9,6 @@ namespace OC\Files\Node; use OC\Files\Cache\Cache; -use OC\Files\Cache\Scanner; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; diff --git a/lib/private/files/node/node.php b/lib/private/files/node/node.php index 643a587dfc..bc07591174 100644 --- a/lib/private/files/node/node.php +++ b/lib/private/files/node/node.php @@ -8,8 +8,6 @@ namespace OC\Files\Node; -use OC\Files\Cache\Cache; -use OC\Files\Cache\Scanner; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; diff --git a/lib/private/files/node/root.php b/lib/private/files/node/root.php index a22a2aaf4e..70135285b0 100644 --- a/lib/private/files/node/root.php +++ b/lib/private/files/node/root.php @@ -9,7 +9,6 @@ namespace OC\Files\Node; use OC\Files\Cache\Cache; -use OC\Files\Cache\Scanner; use OC\Files\Mount\Manager; use OC\Files\Mount\Mount; use OCP\Files\NotFoundException; diff --git a/lib/private/files/storage/loader.php b/lib/private/files/storage/loader.php index 734131261c..966234cb04 100644 --- a/lib/private/files/storage/loader.php +++ b/lib/private/files/storage/loader.php @@ -33,6 +33,9 @@ class Loader { return $this->wrap($mountPoint, new $class($arguments)); } + /** + * @param string|boolean $mountPoint + */ public function wrap($mountPoint, $storage) { foreach ($this->storageWrappers as $wrapper) { $storage = $wrapper($mountPoint, $storage); diff --git a/lib/private/files/storage/mappedlocal.php b/lib/private/files/storage/mappedlocal.php index c8b22cfb39..1bab3489a2 100644 --- a/lib/private/files/storage/mappedlocal.php +++ b/lib/private/files/storage/mappedlocal.php @@ -326,12 +326,18 @@ class MappedLocal extends \OC\Files\Storage\Common{ return $this->filemtime($path)>$time; } + /** + * @param string $path + */ private function buildPath($path, $create=true) { $path = $this->stripLeading($path); $fullPath = $this->datadir.$path; return $this->mapper->logicToPhysical($fullPath, $create); } + /** + * @param string $path + */ private function cleanMapper($path, $isLogicPath=true, $recursive=true) { $fullPath = $path; if ($isLogicPath) { diff --git a/lib/private/files/utils/scanner.php b/lib/private/files/utils/scanner.php index 558bc60cf0..a802a8fcb8 100644 --- a/lib/private/files/utils/scanner.php +++ b/lib/private/files/utils/scanner.php @@ -69,6 +69,9 @@ class Scanner extends PublicEmitter { }); } + /** + * @param string $dir + */ public function backgroundScan($dir) { $mounts = $this->getMounts($dir); foreach ($mounts as $mount) { diff --git a/lib/private/geo.php b/lib/private/geo.php index ed01ad0b61..7094d885af 100644 --- a/lib/private/geo.php +++ b/lib/private/geo.php @@ -12,6 +12,10 @@ class OC_Geo{ * @param (string) $longitude - Longitude * @return (string) $timezone - closest timezone */ + /** + * @param integer $latitude + * @param integer $longitude + */ public static function timezone($latitude, $longitude) { $alltimezones = DateTimeZone::listIdentifiers(); $variances = array(); diff --git a/lib/private/group.php b/lib/private/group.php index 444788c97f..4c187b538a 100644 --- a/lib/private/group.php +++ b/lib/private/group.php @@ -243,7 +243,7 @@ class OC_Group { /** * @brief get a list of all users in several groups - * @param array $gids + * @param string[] $gids * @param string $search * @param int $limit * @param int $offset diff --git a/lib/private/group/dummy.php b/lib/private/group/dummy.php index 9516fd52ff..da26e1b910 100644 --- a/lib/private/group/dummy.php +++ b/lib/private/group/dummy.php @@ -28,7 +28,7 @@ class OC_Group_Dummy extends OC_Group_Backend { private $groups=array(); /** * @brief Try to create a new group - * @param $gid The name of the group to create + * @param string $gid The name of the group to create * @returns true/false * * Trys to create a new group. If the group name already exists, false will diff --git a/lib/private/image.php b/lib/private/image.php index 42afa35ea5..42685ddab5 100644 --- a/lib/private/image.php +++ b/lib/private/image.php @@ -34,7 +34,7 @@ class OC_Image { /** * @brief Get mime type for an image file. - * @param $filepath The path to a local image file. + * @param string|null $filepath The path to a local image file. * @returns string The mime type if the it could be determined, otherwise an empty string. */ static public function getMimeTypeForFile($filePath) { @@ -163,6 +163,7 @@ class OC_Image { /** * @brief Saves the image. * @returns bool + * @param string $filePath */ public function save($filePath=null) { @@ -704,7 +705,7 @@ class OC_Image { /** * @brief Resizes the image preserving ratio. - * @param integer $maxsize The maximum size of either the width or height. + * @param integer $maxSize The maximum size of either the width or height. * @returns bool */ public function resize($maxSize) { @@ -852,8 +853,8 @@ class OC_Image { /** * @brief Resizes the image to fit within a boundry while preserving ratio. - * @param $maxWidth - * @param $maxHeight + * @param integer $maxWidth + * @param integer $maxHeight * @returns bool */ public function fitIn($maxWidth, $maxHeight) { diff --git a/lib/private/installer.php b/lib/private/installer.php index 1b974c6e5a..fe7417990c 100644 --- a/lib/private/installer.php +++ b/lib/private/installer.php @@ -236,30 +236,6 @@ class OC_Installer{ /** * @brief Update an application - * @param array $data with all information - * - * This function installs an app. All information needed are passed in the - * associative array $data. - * The following keys are required: - * - source: string, can be "path" or "http" - * - * One of the following keys is required: - * - path: path to the file containing the app - * - href: link to the downloadable file containing the app - * - * The following keys are optional: - * - pretend: boolean, if set true the system won't do anything - * - noupgrade: boolean, if true appinfo/upgrade.php won't be loaded - * - * This function works as follows - * -# fetching the file - * -# removing the old files - * -# unzipping new file - * -# including appinfo/upgrade.php - * -# setting the installed version - * - * upgrade.php can determine the current installed version of the app using - * "OC_Appconfig::getValue($appid, 'installed_version')" */ public static function updateApp( $app ) { $ocsid=OC_Appconfig::getValue( $app, 'ocsid'); @@ -270,7 +246,6 @@ class OC_Installer{ /** * @brief Check if an update for the app is available - * @param string $name name of the application * @return string|false false or the version number of the update * * The function will check if an update for a version is available @@ -316,7 +291,7 @@ class OC_Installer{ * @brief Removes an app * @param string $name name of the application to remove * @param $options array with options - * @return boolean + * @return boolean|null * * This function removes an app. $options is an associative array. The * following keys are optional:ja diff --git a/lib/private/l10n.php b/lib/private/l10n.php index 1d8152c584..1ade18ea42 100644 --- a/lib/private/l10n.php +++ b/lib/private/l10n.php @@ -99,6 +99,9 @@ class OC_L10N implements \OCP\IL10N { $this->lang = $lang; } + /** + * @param string $transFile + */ public function load($transFile) { $this->app = true; include $transFile; diff --git a/lib/private/legacy/appconfig.php b/lib/private/legacy/appconfig.php index 46a8068c3b..b6c3542a67 100644 --- a/lib/private/legacy/appconfig.php +++ b/lib/private/legacy/appconfig.php @@ -118,6 +118,8 @@ class OC_Appconfig { * * @param app * @param key + * @param string|false $app + * @param string|false $key * @return array */ public static function getValues($app, $key) { diff --git a/lib/private/legacy/preferences.php b/lib/private/legacy/preferences.php index a663db7598..fcde12796c 100644 --- a/lib/private/legacy/preferences.php +++ b/lib/private/legacy/preferences.php @@ -41,7 +41,7 @@ class OC_Preferences{ /** * @brief Get all apps of a user * @param string $user user - * @return array with app ids + * @return integer[] with app ids * * This function returns a list of all apps of the user that have at least * one entry in the preferences table. diff --git a/lib/private/migrate.php b/lib/private/migrate.php index b930b71928..3fb3e334ea 100644 --- a/lib/private/migrate.php +++ b/lib/private/migrate.php @@ -431,6 +431,7 @@ class OC_Migrate{ /** * @brief connects to migration.db, or creates if not found * @param $db optional path to migration.db, defaults to user data dir + * @param string $path * @return bool whether the operation was successful */ static private function connectDB( $path=null ) { @@ -460,7 +461,7 @@ class OC_Migrate{ /** * @brief creates the tables in migration.db from an apps database.xml - * @param $appid string id of the app + * @param string $appid string id of the app * @return bool whether the operation was successful */ static private function createAppTables( $appid ) { diff --git a/lib/private/migration/content.php b/lib/private/migration/content.php index e7b6543171..43eba89b8d 100644 --- a/lib/private/migration/content.php +++ b/lib/private/migration/content.php @@ -34,9 +34,9 @@ class OC_Migration_Content{ /** * @brief sets up the - * @param $zip ZipArchive object + * @param ZipArchive $zip ZipArchive object * @param $db a database object (required for exporttype user) - * @return bool + * @return boolean|null */ public function __construct( $zip, $db=null ) { @@ -74,7 +74,7 @@ class OC_Migration_Content{ /** * @brief processes the db query - * @param $query the query to process + * @param string $query the query to process * @return string of processed query */ private function processQuery( $query ) { @@ -130,7 +130,7 @@ class OC_Migration_Content{ /** * @brief saves a sql data set into migration.db - * @param $data a sql data set returned from self::prepare()->query() + * @param OC_DB_StatementWrapper $data a sql data set returned from self::prepare()->query() * @param $options array of copyRows options * @return void */ diff --git a/lib/private/migration/provider.php b/lib/private/migration/provider.php index 234ab3351f..2829a97a77 100644 --- a/lib/private/migration/provider.php +++ b/lib/private/migration/provider.php @@ -30,7 +30,7 @@ abstract class OC_Migration_Provider{ /** * @brief sets the OC_Migration_Content object to $this->content - * @param $content a OC_Migration_Content object + * @param OC_Migration_Content $content a OC_Migration_Content object */ public function setData( $uid, $content, $info=null ) { $this->content = $content; diff --git a/lib/private/ocs.php b/lib/private/ocs.php index 2305b3eccf..bbe965ce56 100644 --- a/lib/private/ocs.php +++ b/lib/private/ocs.php @@ -23,9 +23,6 @@ * */ -use Symfony\Component\Routing\Exception\ResourceNotFoundException; -use Symfony\Component\Routing\Exception\MethodNotAllowedException; - /** * Class to handle open collaboration services API requests * @@ -38,7 +35,7 @@ class OC_OCS { * @param string $method HTTP method to read the key from * @param string $key Parameter to read * @param string $type Variable type to format data - * @param mixed $default Default value to return if the key is not found + * @param string $default Default value to return if the key is not found * @return string Data or if the key is not found and no default is set it will exit with a 400 Bad request */ public static function readData($method, $key, $type = 'raw', $default = null) { diff --git a/lib/private/preferences.php b/lib/private/preferences.php index 7ebbf7aa97..d45e6e7708 100644 --- a/lib/private/preferences.php +++ b/lib/private/preferences.php @@ -111,7 +111,7 @@ class Preferences { /** * @brief Get all apps of an user * @param string $user user - * @return array with app ids + * @return integer[] with app ids * * This function returns a list of all apps of the user that have at least * one entry in the preferences table. diff --git a/lib/private/request.php b/lib/private/request.php index a7e7bd0ea1..0fd20b3cc1 100755 --- a/lib/private/request.php +++ b/lib/private/request.php @@ -192,7 +192,7 @@ class OC_Request { /** * @brief Check if the requestor understands gzip - * @return boolean true for gzip encoding supported + * @return false|string true for gzip encoding supported */ static public function acceptGZip() { if (!isset($_SERVER['HTTP_ACCEPT_ENCODING'])) { diff --git a/lib/private/share/searchresultsorter.php b/lib/private/share/searchresultsorter.php index fbf7717909..76abbf3084 100644 --- a/lib/private/share/searchresultsorter.php +++ b/lib/private/share/searchresultsorter.php @@ -15,8 +15,8 @@ class SearchResultSorter { private $log; /** - * @param $search the search term as was given by the user - * @param $key the array key containing the value that should be compared + * @param string $search the search term as was given by the user + * @param string $key the array key containing the value that should be compared * against * @param $encoding optional, encoding to use, defaults to UTF-8 * @param $log optional, an \OC\Log instance diff --git a/lib/private/template/base.php b/lib/private/template/base.php index e698d855a9..232a29939c 100644 --- a/lib/private/template/base.php +++ b/lib/private/template/base.php @@ -30,6 +30,8 @@ class Base { /** * @param string $serverroot * @param string|false $app_dir + * @param string $theme + * @param string $app */ protected function getAppTemplateDirs($theme, $app, $serverroot, $app_dir) { // Check if the app is in the app folder or in the root @@ -47,6 +49,7 @@ class Base { /** * @param string $serverroot + * @param string $theme */ protected function getCoreTemplateDirs($theme, $serverroot) { return array( @@ -119,6 +122,7 @@ class Base { /** * @brief doing the actual work + * @param string $file * @return string content * * Includes the template file, fetches its output diff --git a/lib/private/template/templatefilelocator.php b/lib/private/template/templatefilelocator.php index 05cd752cd4..4676fceb37 100644 --- a/lib/private/template/templatefilelocator.php +++ b/lib/private/template/templatefilelocator.php @@ -15,6 +15,7 @@ class TemplateFileLocator { /** * @param string[] $dirs + * @param string $form_factor */ public function __construct( $form_factor, $dirs ) { $this->form_factor = $form_factor; diff --git a/lib/private/user.php b/lib/private/user.php index a8e7967783..86a01f9625 100644 --- a/lib/private/user.php +++ b/lib/private/user.php @@ -516,6 +516,8 @@ class OC_User { * @returns array with all uids * * Get a list of all users. + * @param integer $limit + * @param integer $offset */ public static function getUsers($search = '', $limit = null, $offset = null) { $users = self::getManager()->search($search, $limit, $offset); diff --git a/lib/private/user/database.php b/lib/private/user/database.php index 094a8f2e2a..15e6643dfb 100644 --- a/lib/private/user/database.php +++ b/lib/private/user/database.php @@ -256,7 +256,7 @@ class OC_User_Database extends OC_User_Backend { /** * counts the users in the database * - * @return int | bool + * @return false|string | bool */ public function countUsers() { $query = OC_DB::prepare('SELECT COUNT(*) FROM `*PREFIX*users`'); diff --git a/lib/private/util.php b/lib/private/util.php index af39d983f6..829eedce04 100755 --- a/lib/private/util.php +++ b/lib/private/util.php @@ -218,7 +218,7 @@ class OC_Util { * @brief add a javascript file * * @param string $application - * @param mixed $file filename + * @param string|null $file filename * @return void */ public static function addScript( $application, $file = null ) { @@ -237,7 +237,7 @@ class OC_Util { * @brief add a css file * * @param string $application - * @param mixed $file filename + * @param string|null $file filename * @return void */ public static function addStyle( $application, $file = null ) { @@ -570,6 +570,7 @@ class OC_Util { /** * @brief Check if the app is enabled, redirects to home if not + * @param string $app * @return void */ public static function checkAppEnabled($app) { diff --git a/lib/public/appframework/controller.php b/lib/public/appframework/controller.php index dc8da96787..7c2219bd04 100644 --- a/lib/public/appframework/controller.php +++ b/lib/public/appframework/controller.php @@ -68,7 +68,7 @@ abstract class Controller { * 1. URL parameters * 2. POST parameters * 3. GET parameters - * @param mixed $default If the key is not found, this value will be returned + * @param string $default If the key is not found, this value will be returned * @return mixed the content of the array */ public function params($key, $default=null){ @@ -131,7 +131,7 @@ abstract class Controller { * @param array $params the template parameters in key => value structure * @param string $renderAs user renders a full page, blank only your template * admin an entry in the admin settings - * @param array $headers set additional headers in name/value pairs + * @param string[] $headers set additional headers in name/value pairs * @return \OCP\AppFramework\Http\TemplateResponse containing the page */ public function render($templateName, array $params=array(), diff --git a/lib/public/backgroundjob.php b/lib/public/backgroundjob.php index bcd27c1d19..03b94403b4 100644 --- a/lib/public/backgroundjob.php +++ b/lib/public/backgroundjob.php @@ -59,7 +59,7 @@ class BackgroundJob { * sets the background jobs execution type * * @param string $type execution type - * @return boolean|null + * @return false|null * * This method sets the execution type of the background jobs. Possible types * are "none", "ajax", "webcron", "cron" @@ -115,7 +115,7 @@ class BackgroundJob { * @deprecated * Gets one queued task * @param int $id ID of the task - * @return \OC\BackgroundJob\Job|null array + * @return BackgroundJob\IJob array */ public static function findQueuedTask($id) { $jobList = \OC::$server->getJobList(); diff --git a/lib/public/backgroundjob/ijob.php b/lib/public/backgroundjob/ijob.php index 5231e9537a..eaf11c4f68 100644 --- a/lib/public/backgroundjob/ijob.php +++ b/lib/public/backgroundjob/ijob.php @@ -14,6 +14,7 @@ interface IJob { * * @param \OCP\BackgroundJob\IJobList $jobList The job list that manages the state of this job * @param \OC\Log $logger + * @return void */ public function execute($jobList, $logger = null); diff --git a/lib/public/backgroundjob/ijoblist.php b/lib/public/backgroundjob/ijoblist.php index 72f3fe863d..c9b546605b 100644 --- a/lib/public/backgroundjob/ijoblist.php +++ b/lib/public/backgroundjob/ijoblist.php @@ -14,14 +14,17 @@ interface IJobList { * * @param \OCP\BackgroundJob\IJob |string $job * @param mixed $argument The argument to be passed to $job->run() when the job is exectured + * @param string $job + * @return void */ public function add($job, $argument = null); /** * Remove a job from the list * - * @param \OCP\BackgroundJob\IJob|string $job + * @param IJob $job * @param mixed $argument + * @return void */ public function remove($job, $argument = null); @@ -58,6 +61,7 @@ interface IJobList { * set the job that was last ran to the current time * * @param \OCP\BackgroundJob\IJob $job + * @return void */ public function setLastJob($job); @@ -72,6 +76,7 @@ interface IJobList { * set the lastRun of $job to now * * @param \OCP\BackgroundJob\IJob $job + * @return void */ public function setLastRun($job); } diff --git a/lib/public/contacts/imanager.php b/lib/public/contacts/imanager.php index da9bca7552..5b9d64ecc4 100644 --- a/lib/public/contacts/imanager.php +++ b/lib/public/contacts/imanager.php @@ -96,7 +96,7 @@ namespace OCP\Contacts { * This function can be used to delete the contact identified by the given id * * @param object $id the unique identifier to a contact - * @param $address_book_key + * @param $address_book_key * @return bool successful or not */ function delete($id, $address_book_key); @@ -106,7 +106,7 @@ namespace OCP\Contacts { * Otherwise the contact will be updated by replacing the entire data set. * * @param array $properties this array if key-value-pairs defines a contact - * @param $address_book_key string to identify the address book in which the contact shall be created or updated + * @param $address_book_key string to identify the address book in which the contact shall be created or updated * @return array representing the contact just created or updated */ function createOrUpdate($properties, $address_book_key); diff --git a/lib/public/files.php b/lib/public/files.php index 75c52b88fc..e2d9c81d44 100644 --- a/lib/public/files.php +++ b/lib/public/files.php @@ -37,7 +37,6 @@ namespace OCP; class Files { /** * Recusive deletion of folders - * @param string $path to the folder * @return bool */ static function rmdirr( $dir ) { diff --git a/lib/public/iappconfig.php b/lib/public/iappconfig.php index 3b6484c09d..1f31898bf2 100644 --- a/lib/public/iappconfig.php +++ b/lib/public/iappconfig.php @@ -57,6 +57,7 @@ interface IAppConfig { * * @param app * @param key + * @param string $key * @return array */ public function getValues($app, $key); @@ -68,6 +69,7 @@ interface IAppConfig { * @param string $value value * * Sets a value. If the key did not exist before it will be created. + * @return void */ public function setValue($app, $key, $value); diff --git a/lib/public/iconfig.php b/lib/public/iconfig.php index 8944e66078..0ebbd9f5a7 100644 --- a/lib/public/iconfig.php +++ b/lib/public/iconfig.php @@ -47,7 +47,7 @@ interface IConfig { * Looks up a system wide defined value * * @param string $key the key of the value, under which it was saved - * @param mixed $default the default value to be returned if the value isn't set + * @param string $default the default value to be returned if the value isn't set * @return string the saved value */ public function getSystemValue($key, $default = ''); diff --git a/lib/public/itags.php b/lib/public/itags.php index 7965d4152f..f8ebaa668f 100644 --- a/lib/public/itags.php +++ b/lib/public/itags.php @@ -147,7 +147,7 @@ interface ITags { * Creates a tag/object relation. * * @param int $objid The id of the object - * @param int|string $tag The id or name of the tag + * @param string $tag The id or name of the tag * @return boolean Returns false on database error. */ public function tagAs($objid, $tag); @@ -156,7 +156,7 @@ interface ITags { * Delete single tag/object relation from the db * * @param int $objid The id of the object - * @param int|string $tag The id or name of the tag + * @param string $tag The id or name of the tag * @return boolean */ public function unTag($objid, $tag); diff --git a/lib/public/share.php b/lib/public/share.php index f6c44a8322..ebc555dba5 100644 --- a/lib/public/share.php +++ b/lib/public/share.php @@ -78,6 +78,9 @@ class Share { * @param string Backend class * @param string (optional) Depends on item type * @param array (optional) List of supported file extensions if this item type depends on files + * @param string $itemType + * @param string $class + * @param string $collectionOf * @return boolean true if backend is registered or false if error */ public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) { @@ -404,6 +407,7 @@ class Share { * @param mixed Parameters * @param int Number of items to return (optional) Returns all by default * @param bool include collections + * @param string $itemType * @return Return depends on format */ public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null, @@ -662,6 +666,8 @@ class Share { * Unshare an item from all users, groups, and remove all links * @param string Item type * @param string Item source + * @param string $itemType + * @param string $itemSource * @return boolean true on success or false on failure */ public static function unshareAll($itemType, $itemSource) { @@ -694,6 +700,8 @@ class Share { * Unshare an item shared with the current user * @param string Item type * @param string Item target + * @param string $itemType + * @param string $itemTarget * @return boolean true on success or false on failure * * Unsharing from self is not allowed for items inside collections @@ -1630,6 +1638,7 @@ class Share { * @param string User that is the owner of shared item * @param string The suggested target originating from a reshare (optional) * @param int The id of the parent group share (optional) + * @param integer $shareType * @return string Item target */ private static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, @@ -1937,6 +1946,8 @@ interface Share_Backend { * Get the source of the item to be stored in the database * @param string Item source * @param string Owner of the item + * @param string $itemSource + * @param string $uidOwner * @return boolean Source * * Return an array if the item is file dependent, the array needs two keys: 'item' and 'file' @@ -1993,6 +2004,8 @@ interface Share_Backend_File_Dependent extends Share_Backend { * Get the file path of the item * @param string Item source * @param string User that is the owner of shared item + * @param string $itemSource + * @param string $uidOwner * @return boolean */ public function getFilePath($itemSource, $uidOwner); diff --git a/tests/lib/api.php b/tests/lib/api.php index 9c4324e63e..233beebd68 100644 --- a/tests/lib/api.php +++ b/tests/lib/api.php @@ -9,6 +9,10 @@ class Test_API extends PHPUnit_Framework_TestCase { // Helps build a response variable + + /** + * @param string $message + */ function buildResponse($shipped, $data, $code, $message=null) { return array( 'shipped' => $shipped, @@ -18,6 +22,10 @@ class Test_API extends PHPUnit_Framework_TestCase { } // Validate details of the result + + /** + * @param OC_OCS_Result $result + */ function checkResult($result, $success) { // Check response is of correct type $this->assertInstanceOf('OC_OCS_Result', $result); diff --git a/tests/lib/appframework/http/DispatcherTest.php b/tests/lib/appframework/http/DispatcherTest.php index 6cf0da879f..9841dcaa1f 100644 --- a/tests/lib/appframework/http/DispatcherTest.php +++ b/tests/lib/appframework/http/DispatcherTest.php @@ -24,7 +24,6 @@ namespace OC\AppFramework\Http; -use OC\AppFramework\Core\API; use OC\AppFramework\Middleware\MiddlewareDispatcher; use OCP\AppFramework\Http; //require_once(__DIR__ . "/../classloader.php"); @@ -78,6 +77,10 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase { } + /** + * @param string $out + * @param string $httpHeaders + */ private function setMiddlewareExpections($out=null, $httpHeaders=null, $responseHeaders=array(), $ex=false, $catchEx=true) { diff --git a/tests/lib/appframework/http/ResponseTest.php b/tests/lib/appframework/http/ResponseTest.php index 1a38c38c1e..4f21d77a17 100644 --- a/tests/lib/appframework/http/ResponseTest.php +++ b/tests/lib/appframework/http/ResponseTest.php @@ -25,8 +25,8 @@ namespace OC\AppFramework\Http; -use OCP\AppFramework\Http\Response, - OCP\AppFramework\Http; +use OCP\AppFramework\Http\Response; +use OCP\AppFramework\Http; class ResponseTest extends \PHPUnit_Framework_TestCase { diff --git a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php index 95d42e4eb8..f16b14150c 100644 --- a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php +++ b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php @@ -50,6 +50,9 @@ class TestMiddleware extends Middleware { private $beforeControllerThrowsEx; + /** + * @param boolean $beforeControllerThrowsEx + */ public function __construct($beforeControllerThrowsEx) { self::$beforeControllerCalled = 0; self::$afterControllerCalled = 0; diff --git a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php index dae6135dc5..63c48a6282 100644 --- a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php +++ b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php @@ -58,6 +58,9 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase { } + /** + * @param string $method + */ private function checkNavEntry($method){ $api = $this->getAPI(); @@ -79,6 +82,10 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase { } + /** + * @param string $method + * @param string $test + */ private function ajaxExceptionStatus($method, $test, $status) { $api = $this->getAPI(); $api->expects($this->any()) @@ -183,6 +190,10 @@ class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase { } + /** + * @param string $method + * @param string $expects + */ private function securityCheck($method, $expects, $shouldFail=false){ $api = $this->getAPI(); $api->expects($this->once()) diff --git a/tests/lib/appframework/routing/RoutingTest.php b/tests/lib/appframework/routing/RoutingTest.php index a7aa922db1..d0244cf251 100644 --- a/tests/lib/appframework/routing/RoutingTest.php +++ b/tests/lib/appframework/routing/RoutingTest.php @@ -78,6 +78,13 @@ class RouteConfigTest extends \PHPUnit_Framework_TestCase $this->assertResource($routes, 'admin_accounts', '/admin/accounts', 'AdminAccountsController', 'adminAccountId'); } + /** + * @param string $name + * @param string $verb + * @param string $url + * @param string $controllerName + * @param string $actionName + */ private function assertSimpleRoute($routes, $name, $verb, $url, $controllerName, $actionName) { // route mocks @@ -100,6 +107,12 @@ class RouteConfigTest extends \PHPUnit_Framework_TestCase $config->register(); } + /** + * @param string $resourceName + * @param string $url + * @param string $controllerName + * @param string $paramName + */ private function assertResource($yaml, $resourceName, $url, $controllerName, $paramName) { // router mock diff --git a/tests/lib/dbschema.php b/tests/lib/dbschema.php index e8a4353800..11e9fcdf4f 100644 --- a/tests/lib/dbschema.php +++ b/tests/lib/dbschema.php @@ -111,10 +111,16 @@ class Test_DBSchema extends PHPUnit_Framework_TestCase { } } + /** + * @param string $table + */ public function assertTableExist($table) { $this->assertTrue($this->tableExist($table), 'Table ' . $table . ' does not exist'); } + /** + * @param string $table + */ public function assertTableNotExist($table) { $type=OC_Config::getValue( "dbtype", "sqlite" ); if( $type == 'sqlite' || $type == 'sqlite3' ) { diff --git a/tests/lib/errorHandler.php b/tests/lib/errorHandler.php index 68b87deccb..32396eafbe 100644 --- a/tests/lib/errorHandler.php +++ b/tests/lib/errorHandler.php @@ -56,6 +56,10 @@ class Test_ErrorHandler extends \PHPUnit_Framework_TestCase { * @brief dummy class to access protected methods of \OC\Log\ErrorHandler */ class TestableErrorHandler extends \OC\Log\ErrorHandler { + + /** + * @param string $msg + */ public static function testRemovePassword($msg) { return self::removePassword($msg); } diff --git a/tests/lib/files/cache/homecache.php b/tests/lib/files/cache/homecache.php index 87fd0dba4c..dbcf6e9caa 100644 --- a/tests/lib/files/cache/homecache.php +++ b/tests/lib/files/cache/homecache.php @@ -19,6 +19,10 @@ class DummyUser extends \OC\User\User { */ private $uid; + /** + * @param string $uid + * @param string $home + */ public function __construct($uid, $home) { $this->home = $home; $this->uid = $uid; diff --git a/tests/lib/files/etagtest.php b/tests/lib/files/etagtest.php index 6c41413c4d..ce05adb188 100644 --- a/tests/lib/files/etagtest.php +++ b/tests/lib/files/etagtest.php @@ -68,6 +68,9 @@ class EtagTest extends \PHPUnit_Framework_TestCase { $this->assertEquals($originalEtags, $this->getEtags($files)); } + /** + * @param string[] $files + */ private function getEtags($files) { $etags = array(); foreach ($files as $file) { diff --git a/tests/lib/files/node/integration.php b/tests/lib/files/node/integration.php index 14e1d05853..319f2f9f5f 100644 --- a/tests/lib/files/node/integration.php +++ b/tests/lib/files/node/integration.php @@ -9,10 +9,7 @@ namespace Test\Files\Node; use OC\Files\Cache\Cache; -use OC\Files\Mount\Manager; use OC\Files\Node\Root; -use OCP\Files\NotFoundException; -use OCP\Files\NotPermittedException; use OC\Files\Storage\Temporary; use OC\Files\View; use OC\User\User; diff --git a/tests/lib/files/node/root.php b/tests/lib/files/node/root.php index 97eaf7f716..27f1a93782 100644 --- a/tests/lib/files/node/root.php +++ b/tests/lib/files/node/root.php @@ -8,7 +8,6 @@ namespace Test\Files\Node; -use OC\Files\Cache\Cache; use OCP\Files\NotPermittedException; use OC\Files\Mount\Manager; diff --git a/tests/lib/files/storage/home.php b/tests/lib/files/storage/home.php index 885291e440..51315a2a55 100644 --- a/tests/lib/files/storage/home.php +++ b/tests/lib/files/storage/home.php @@ -29,6 +29,10 @@ class DummyUser extends User { private $uid; + /** + * @param string $uid + * @param string $home + */ public function __construct($uid, $home) { $this->uid = $uid; $this->home = $home; diff --git a/tests/lib/files/storage/wrapper/quota.php b/tests/lib/files/storage/wrapper/quota.php index 87bafb64d4..e1b880255f 100644 --- a/tests/lib/files/storage/wrapper/quota.php +++ b/tests/lib/files/storage/wrapper/quota.php @@ -27,6 +27,9 @@ class Quota extends \Test\Files\Storage\Storage { \OC_Helper::rmdirr($this->tmpDir); } + /** + * @param integer $limit + */ protected function getLimitedStorage($limit) { $storage = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir)); $storage->getScanner()->scan(''); diff --git a/tests/lib/files/stream/quota.php b/tests/lib/files/stream/quota.php index b11f0ac74c..d5edace544 100644 --- a/tests/lib/files/stream/quota.php +++ b/tests/lib/files/stream/quota.php @@ -13,6 +13,10 @@ class Quota extends \PHPUnit_Framework_TestCase { \OC\Files\Stream\Quota::clear(); } + /** + * @param string $mode + * @param integer $limit + */ protected function getStream($mode, $limit) { $source = fopen('php://temp', $mode); return \OC\Files\Stream\Quota::wrap($source, $limit); diff --git a/tests/lib/group/backend.php b/tests/lib/group/backend.php index d308232a78..2c563ae9ac 100644 --- a/tests/lib/group/backend.php +++ b/tests/lib/group/backend.php @@ -29,7 +29,7 @@ abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase { /** * get a new unique group name * test cases can override this in order to clean up created groups - * @return array + * @return string */ public function getGroupName() { return uniqid('test_'); @@ -38,7 +38,7 @@ abstract class Test_Group_Backend extends PHPUnit_Framework_TestCase { /** * get a new unique user name * test cases can override this in order to clean up created user - * @return array + * @return string */ public function getUserName() { return uniqid('test_'); diff --git a/tests/lib/group/database.php b/tests/lib/group/database.php index 5278c26f4d..3e05c65606 100644 --- a/tests/lib/group/database.php +++ b/tests/lib/group/database.php @@ -26,7 +26,7 @@ class Test_Group_Database extends Test_Group_Backend { /** * get a new unique group name * test cases can override this in order to clean up created groups - * @return array + * @return string */ public function getGroupName() { $name=uniqid('test_'); @@ -37,7 +37,7 @@ class Test_Group_Database extends Test_Group_Backend { /** * get a new unique user name * test cases can override this in order to clean up created user - * @return array + * @return string */ public function getUserName() { return uniqid('test_'); diff --git a/tests/lib/group/group.php b/tests/lib/group/group.php index f1fda3b928..3982c00e45 100644 --- a/tests/lib/group/group.php +++ b/tests/lib/group/group.php @@ -13,7 +13,7 @@ use OC\User\User; class Group extends \PHPUnit_Framework_TestCase { /** - * @return \PHPUnit_Framework_MockObject_MockObject | \OC\User\Manager + * @return \OC\User\Manager | \OC\User\Manager */ protected function getUserManager() { $userManager = $this->getMock('\OC\User\Manager'); diff --git a/tests/lib/migrate.php b/tests/lib/migrate.php index 39a9bfc8d5..d438a7a692 100644 --- a/tests/lib/migrate.php +++ b/tests/lib/migrate.php @@ -31,6 +31,7 @@ class Test_Migrate extends PHPUnit_Framework_TestCase { * @brief checks for existence of export_info.json and file folder * @param string $exportedUser the user that was exported * @param string $path the path to the .zip export + * @param string $exportedBy */ public function validateUserExport($exportedBy, $exportedUser, $path) { $this->assertTrue(file_exists($path)); diff --git a/tests/lib/ocs/privatedata.php b/tests/lib/ocs/privatedata.php index ea8413734f..498ab71862 100644 --- a/tests/lib/ocs/privatedata.php +++ b/tests/lib/ocs/privatedata.php @@ -131,6 +131,7 @@ class Test_OC_OCS_Privatedata extends PHPUnit_Framework_TestCase /** * @param \OC_OCS_Result $result + * @param integer $expectedArraySize */ public function assertOcsResult($expectedArraySize, $result) { $this->assertEquals(100, $result->getStatusCode()); diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php index d6acee6c92..a89f100d97 100644 --- a/tests/lib/share/share.php +++ b/tests/lib/share/share.php @@ -151,6 +151,10 @@ class Test_Share extends PHPUnit_Framework_TestCase { ); } + /** + * @param string $sharer + * @param string $receiver + */ protected function shareUserTestFileWithUser($sharer, $receiver) { OC_User::setUserId($sharer); $this->assertTrue( @@ -558,6 +562,9 @@ class Test_Share extends PHPUnit_Framework_TestCase { ); } + /** + * @param boolean|string $token + */ protected function getShareByValidToken($token) { $row = OCP\Share::getShareByToken($token); $this->assertInternalType( diff --git a/tests/lib/template/resourcelocator.php b/tests/lib/template/resourcelocator.php index d80d222e2c..619560643f 100644 --- a/tests/lib/template/resourcelocator.php +++ b/tests/lib/template/resourcelocator.php @@ -7,6 +7,11 @@ */ class Test_ResourceLocator extends PHPUnit_Framework_TestCase { + + /** + * @param string $theme + * @param string $form_factor + */ public function getResourceLocator( $theme, $form_factor, $core_map, $party_map, $appsroots ) { return $this->getMockForAbstractClass('OC\Template\ResourceLocator', array( $theme, $form_factor, $core_map, $party_map, $appsroots ), diff --git a/tests/lib/user.php b/tests/lib/user.php index fdf9e7a08e..e2c3282a19 100644 --- a/tests/lib/user.php +++ b/tests/lib/user.php @@ -9,8 +9,6 @@ namespace Test; -use OC\Hooks\PublicEmitter; - class User extends \PHPUnit_Framework_TestCase { /** * @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend diff --git a/tests/testcleanuplistener.php b/tests/testcleanuplistener.php index a969ece6dd..299a589ef4 100644 --- a/tests/testcleanuplistener.php +++ b/tests/testcleanuplistener.php @@ -57,6 +57,9 @@ class TestCleanupListener implements PHPUnit_Framework_TestListener { return $this->verbosity === 'detail'; } + /** + * @param string $dir + */ private function unlinkDir($dir) { if ($dh = @opendir($dir)) { while (($file = readdir($dh)) !== false) { From eea1abae2076825789f4b2abd2e476b93004714d Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 19 Feb 2014 09:52:32 +0100 Subject: [PATCH 13/24] add unit tests for watcher policies --- tests/lib/files/cache/watcher.php | 56 ++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/tests/lib/files/cache/watcher.php b/tests/lib/files/cache/watcher.php index 1920c27690..7f4f3c5ee9 100644 --- a/tests/lib/files/cache/watcher.php +++ b/tests/lib/files/cache/watcher.php @@ -11,7 +11,7 @@ namespace Test\Files\Cache; class Watcher extends \PHPUnit_Framework_TestCase { /** - * @var \OC\Files\Storage\Storage[] $storages; + * @var \OC\Files\Storage\Storage[] $storages */ private $storages = array(); @@ -105,6 +105,60 @@ class Watcher extends \PHPUnit_Framework_TestCase { $this->assertTrue($cache->inCache('foo.txt/bar.txt')); } + public function testPolicyNever() { + $storage = $this->getTestStorage(); + $cache = $storage->getCache(); + $updater = $storage->getWatcher(); + + //set the mtime to the past so it can detect an mtime change + $cache->put('foo.txt', array('storage_mtime' => 10)); + + $updater->setPolicy(\OC\Files\Cache\Watcher::CHECK_NEVER); + + $storage->file_put_contents('foo.txt', 'q'); + $this->assertFalse($updater->checkUpdate('foo.txt')); + + $cache->put('foo.txt', array('storage_mtime' => 20)); + $storage->file_put_contents('foo.txt', 'w'); + $this->assertFalse($updater->checkUpdate('foo.txt')); + } + + public function testPolicyOnce() { + $storage = $this->getTestStorage(); + $cache = $storage->getCache(); + $updater = $storage->getWatcher(); + + //set the mtime to the past so it can detect an mtime change + $cache->put('foo.txt', array('storage_mtime' => 10)); + + $updater->setPolicy(\OC\Files\Cache\Watcher::CHECK_ONCE); + + $storage->file_put_contents('foo.txt', 'q'); + $this->assertTrue($updater->checkUpdate('foo.txt')); + + $cache->put('foo.txt', array('storage_mtime' => 20)); + $storage->file_put_contents('foo.txt', 'w'); + $this->assertFalse($updater->checkUpdate('foo.txt')); + } + + public function testPolicyAlways() { + $storage = $this->getTestStorage(); + $cache = $storage->getCache(); + $updater = $storage->getWatcher(); + + //set the mtime to the past so it can detect an mtime change + $cache->put('foo.txt', array('storage_mtime' => 10)); + + $updater->setPolicy(\OC\Files\Cache\Watcher::CHECK_ALWAYS); + + $storage->file_put_contents('foo.txt', 'q'); + $this->assertTrue($updater->checkUpdate('foo.txt')); + + $cache->put('foo.txt', array('storage_mtime' => 20)); + $storage->file_put_contents('foo.txt', 'w'); + $this->assertTrue($updater->checkUpdate('foo.txt')); + } + /** * @param bool $scan * @return \OC\Files\Storage\Storage From 8caf77f7c96846d696a308a6300c128ec08fc97e Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Wed, 19 Feb 2014 10:02:44 +0100 Subject: [PATCH 14/24] fix 3rdparty submodule --- 3rdparty | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty b/3rdparty index 7c2c94c904..c7b4cdbcc1 160000 --- a/3rdparty +++ b/3rdparty @@ -1 +1 @@ -Subproject commit 7c2c94c904c2721763e97d5bafd115f863080a60 +Subproject commit c7b4cdbcc1faa56df2489a5753b457627f460c07 From c196e59e882357948ea8b2877d5153614f5143a1 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 19 Feb 2014 10:25:52 +0100 Subject: [PATCH 15/24] Add event parameter to keyup event Fix issue #7277 --- settings/js/personal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/js/personal.js b/settings/js/personal.js index 3b87646775..ef261b50bb 100644 --- a/settings/js/personal.js +++ b/settings/js/personal.js @@ -163,7 +163,7 @@ $(document).ready(function(){ }); - $('#email').keyup(function(){ + $('#email').keyup(function(event){ if ($('#email').val() !== '' ){ // if this is the enter key changeEmailAddress() is already invoked // so it doesn't need to be triggered again From f944707a15b4819f7a67263e26b41fe4abe942ab Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Wed, 19 Feb 2014 11:50:17 +0100 Subject: [PATCH 16/24] fix wrong removes --- lib/private/installer.php | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/private/installer.php b/lib/private/installer.php index fe7417990c..11633a4d4a 100644 --- a/lib/private/installer.php +++ b/lib/private/installer.php @@ -154,7 +154,7 @@ class OC_Installer{ }else{ $version = trim($info['version']); } - + if($version<>trim($data['appdata']['version'])) { OC_Helper::rmdirr($extractDir); throw new \Exception($l->t("App can't be installed because the version in info.xml/version is not the same as the version reported from the app store")); @@ -236,6 +236,29 @@ class OC_Installer{ /** * @brief Update an application + * + * This function installs an app. All information needed are passed in the + * associative array $data. + * The following keys are required: + * - source: string, can be "path" or "http" + * + * One of the following keys is required: + * - path: path to the file containing the app + * - href: link to the downloadable file containing the app + * + * The following keys are optional: + * - pretend: boolean, if set true the system won't do anything + * - noupgrade: boolean, if true appinfo/upgrade.php won't be loaded + * + * This function works as follows + * -# fetching the file + * -# removing the old files + * -# unzipping new file + * -# including appinfo/upgrade.php + * -# setting the installed version + * + * upgrade.php can determine the current installed version of the app using + * "OC_Appconfig::getValue($appid, 'installed_version')" */ public static function updateApp( $app ) { $ocsid=OC_Appconfig::getValue( $app, 'ocsid'); From c0328b4f0f12f54635e2ea2dccf6c356d8f479cc Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Wed, 19 Feb 2014 13:13:01 +0100 Subject: [PATCH 17/24] LDAP: improve compilation of filters --- apps/user_ldap/lib/access.php | 11 +++++++++++ apps/user_ldap/user_ldap.php | 3 +++ 2 files changed, 14 insertions(+) diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index 6795aecafe..b7e4023dd7 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -921,6 +921,17 @@ class Access extends LDAPUtility { return $name; } + /** + * @brief escapes (user provided) parts for LDAP filter + * @param String $input, the provided value + * @returns the escaped string + */ + public function escapeFilterPart($input) { + $search = array('*', '\\', '(', ')'); + $replace = array('\\*', '\\\\', '\\(', '\\)'); + return str_replace($search, $replace, $input); + } + /** * @brief combines the input filters with AND * @param $filters array, the filters to connect diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 4a147cf988..757de6b60f 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -163,6 +163,8 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface { * Check if the password is correct without logging in the user */ public function checkPassword($uid, $password) { + $uid = $this->access->escapeFilterPart($uid); + //find out dn of the user name $filter = \OCP\Util::mb_str_replace( '%uid', $uid, $this->access->connection->ldapLoginFilter, 'UTF-8'); @@ -203,6 +205,7 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface { * Get a list of all users. */ public function getUsers($search = '', $limit = 10, $offset = 0) { + $search = $this->access->escapeFilterPart($search); $cachekey = 'getUsers-'.$search.'-'.$limit.'-'.$offset; //check if users are cached, if so return From 2d5b3899a68adb496d6e20e93352395ba7b5dd2e Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Wed, 19 Feb 2014 15:38:00 +0100 Subject: [PATCH 18/24] Hardening: Remove dangerous characters + Subdirectory Check If an user is able to create folders in /core/l10n/ he is able to execute arbitrary code. Therefore I've added an `issubdirectory` check and removed all potential dangerous characters from `$lang`. --- lib/private/l10n.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/private/l10n.php b/lib/private/l10n.php index 1ade18ea42..ad979a9287 100644 --- a/lib/private/l10n.php +++ b/lib/private/l10n.php @@ -118,7 +118,7 @@ class OC_L10N implements \OCP\IL10N { return; } $app = OC_App::cleanAppId($this->app); - $lang = $this->lang; + $lang = str_replace(array('\0', '/', '\\', '..'), '', $this->lang); $this->app = true; // Find the right language if(is_null($lang) || $lang == '') { @@ -163,7 +163,7 @@ class OC_L10N implements \OCP\IL10N { } } - if(file_exists(OC::$SERVERROOT.'/core/l10n/l10n-'.$lang.'.php')) { + if(file_exists(OC::$SERVERROOT.'/core/l10n/l10n-'.$lang.'.php') && OC_Helper::issubdirectory(OC::$SERVERROOT.'/core/l10n/l10n-'.$lang.'.php', OC::$SERVERROOT.'/core/l10n/')) { // Include the file, save the data from $CONFIG include OC::$SERVERROOT.'/core/l10n/l10n-'.$lang.'.php'; if(isset($LOCALIZATIONS) && is_array($LOCALIZATIONS)) { From b2b35cd3358113db95651d705251eda290b40ba7 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 31 Jan 2014 16:06:11 +0100 Subject: [PATCH 19/24] Fixed ext storage webdav path encoding - Some WebDAV servers like lighttpd need paths in URLs to be properly encoded - Added error log output when curl connection failed - Added check for 'resourcetype' in case the WebDAV server doesn't support/return it - Fixed touch() to return false if the server doesn't implement PROPPATCH - Added optional delay in WebDAV unit tests to use when testing against lighttpd's WebDAV --- apps/files_external/lib/webdav.php | 63 +++++++++++++++++++++------- apps/files_external/tests/config.php | 6 ++- apps/files_external/tests/webdav.php | 3 ++ tests/lib/files/storage/storage.php | 19 +++++++++ 4 files changed, 74 insertions(+), 17 deletions(-) diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php index 7611316a26..9afe73aebd 100644 --- a/apps/files_external/lib/webdav.php +++ b/apps/files_external/lib/webdav.php @@ -99,7 +99,9 @@ class DAV extends \OC\Files\Storage\Common{ public function rmdir($path) { $this->init(); - $path=$this->cleanPath($path); + $path=$this->cleanPath($path) . '/'; + // FIXME: some WebDAV impl return 403 when trying to DELETE + // a non-empty folder return $this->simpleResponse('DELETE', $path, null, 204); } @@ -107,7 +109,7 @@ class DAV extends \OC\Files\Storage\Common{ $this->init(); $path=$this->cleanPath($path); try { - $response=$this->client->propfind($path, array(), 1); + $response=$this->client->propfind($this->encodePath($path), array(), 1); $id=md5('webdav'.$this->root.$path); $content = array(); $files=array_keys($response); @@ -127,8 +129,11 @@ class DAV extends \OC\Files\Storage\Common{ $this->init(); $path=$this->cleanPath($path); try { - $response=$this->client->propfind($path, array('{DAV:}resourcetype')); - $responseType=$response["{DAV:}resourcetype"]->resourceType; + $response=$this->client->propfind($this->encodePath($path), array('{DAV:}resourcetype')); + $responseType = array(); + if (isset($response["{DAV:}resourcetype"])) { + $responseType=$response["{DAV:}resourcetype"]->resourceType; + } return (count($responseType)>0 and $responseType[0]=="{DAV:}collection")?'dir':'file'; } catch(\Exception $e) { error_log($e->getMessage()); @@ -141,7 +146,7 @@ class DAV extends \OC\Files\Storage\Common{ $this->init(); $path=$this->cleanPath($path); try { - $this->client->propfind($path, array('{DAV:}resourcetype')); + $this->client->propfind($this->encodePath($path), array('{DAV:}resourcetype')); return true;//no 404 exception } catch(\Exception $e) { return false; @@ -166,7 +171,7 @@ class DAV extends \OC\Files\Storage\Common{ $curl = curl_init(); $fp = fopen('php://temp', 'r+'); curl_setopt($curl, CURLOPT_USERPWD, $this->user.':'.$this->password); - curl_setopt($curl, CURLOPT_URL, $this->createBaseUri().str_replace(' ', '%20', $path)); + curl_setopt($curl, CURLOPT_URL, $this->createBaseUri().$this->encodePath($path)); curl_setopt($curl, CURLOPT_FILE, $fp); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); if ($this->secure === true) { @@ -178,6 +183,10 @@ class DAV extends \OC\Files\Storage\Common{ } curl_exec ($curl); + $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); + if ($statusCode !== 200) { + \OCP\Util::writeLog("webdav client", 'curl GET ' . curl_getinfo($curl, CURLINFO_EFFECTIVE_URL) . ' returned status code ' . $statusCode, \OCP\Util::ERROR); + } curl_close ($curl); rewind($fp); return $fp; @@ -220,7 +229,7 @@ class DAV extends \OC\Files\Storage\Common{ $this->init(); $path=$this->cleanPath($path); try { - $response=$this->client->propfind($path, array('{DAV:}quota-available-bytes')); + $response=$this->client->propfind($this->encodePath($path), array('{DAV:}quota-available-bytes')); if (isset($response['{DAV:}quota-available-bytes'])) { return (int)$response['{DAV:}quota-available-bytes']; } else { @@ -240,7 +249,12 @@ class DAV extends \OC\Files\Storage\Common{ // if file exists, update the mtime, else create a new empty file if ($this->file_exists($path)) { - $this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime)); + try { + $this->client->proppatch($this->encodePath($path), array('{DAV:}lastmodified' => $mtime)); + } + catch (\Sabre_DAV_Exception_NotImplemented $e) { + return false; + } } else { $this->file_put_contents($path, ''); } @@ -276,13 +290,17 @@ class DAV extends \OC\Files\Storage\Common{ } } curl_exec ($curl); + $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); + if ($statusCode !== 200) { + \OCP\Util::writeLog("webdav client", 'curl GET ' . curl_getinfo($curl, CURLINFO_EFFECTIVE_URL) . ' returned status code ' . $statusCode, \OCP\Util::ERROR); + } curl_close ($curl); } public function rename($path1, $path2) { $this->init(); - $path1=$this->cleanPath($path1); - $path2=$this->createBaseUri().$this->cleanPath($path2); + $path1 = $this->encodePath($this->cleanPath($path1)); + $path2 = $this->createBaseUri().$this->encodePath($this->cleanPath($path2)); try { $this->client->request('MOVE', $path1, null, array('Destination'=>$path2)); return true; @@ -293,8 +311,8 @@ class DAV extends \OC\Files\Storage\Common{ public function copy($path1, $path2) { $this->init(); - $path1=$this->cleanPath($path1); - $path2=$this->createBaseUri().$this->cleanPath($path2); + $path1 = $this->encodePath($this->cleanPath($path1)); + $path2 = $this->createBaseUri().$this->encodePath($this->cleanPath($path2)); try { $this->client->request('COPY', $path1, null, array('Destination'=>$path2)); return true; @@ -307,7 +325,7 @@ class DAV extends \OC\Files\Storage\Common{ $this->init(); $path=$this->cleanPath($path); try { - $response=$this->client->propfind($path, array('{DAV:}getlastmodified', '{DAV:}getcontentlength')); + $response = $this->client->propfind($this->encodePath($path), array('{DAV:}getlastmodified', '{DAV:}getcontentlength')); return array( 'mtime'=>strtotime($response['{DAV:}getlastmodified']), 'size'=>(int)isset($response['{DAV:}getcontentlength']) ? $response['{DAV:}getcontentlength'] : 0, @@ -321,8 +339,11 @@ class DAV extends \OC\Files\Storage\Common{ $this->init(); $path=$this->cleanPath($path); try { - $response=$this->client->propfind($path, array('{DAV:}getcontenttype', '{DAV:}resourcetype')); - $responseType=$response["{DAV:}resourcetype"]->resourceType; + $response=$this->client->propfind($this->encodePath($path), array('{DAV:}getcontenttype', '{DAV:}resourcetype')); + $responseType = array(); + if (isset($response["{DAV:}resourcetype"])) { + $responseType=$response["{DAV:}resourcetype"]->resourceType; + } $type=(count($responseType)>0 and $responseType[0]=="{DAV:}collection")?'dir':'file'; if ($type=='dir') { return 'httpd/unix-directory'; @@ -345,6 +366,16 @@ class DAV extends \OC\Files\Storage\Common{ return substr($path, 1); } + /** + * URL encodes the given path but keeps the slashes + * @param string $path to encode + * @return string encoded path + */ + private function encodePath($path) { + // slashes need to stay + return str_replace('%2F', '/', rawurlencode($path)); + } + /** * @param string $method * @param string $path @@ -353,7 +384,7 @@ class DAV extends \OC\Files\Storage\Common{ private function simpleResponse($method, $path, $body, $expected) { $path=$this->cleanPath($path); try { - $response=$this->client->request($method, $path, $body); + $response=$this->client->request($method, $this->encodePath($path), $body); return $response['statusCode']==$expected; } catch(\Exception $e) { return false; diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php index e296bfcb5b..767c0adf58 100644 --- a/apps/files_external/tests/config.php +++ b/apps/files_external/tests/config.php @@ -21,7 +21,11 @@ return array( 'host'=>'localhost', 'user'=>'test', 'password'=>'test', - 'root'=>'/owncloud/files/webdav.php', + 'root'=>'', + // wait delay in seconds after write operations + // (only in tests) + // set to higher value for lighttpd webdav + 'wait'=> 0 ), 'owncloud'=>array( 'run'=>true, diff --git a/apps/files_external/tests/webdav.php b/apps/files_external/tests/webdav.php index 1f9b767eca..74e905ccc8 100644 --- a/apps/files_external/tests/webdav.php +++ b/apps/files_external/tests/webdav.php @@ -18,6 +18,9 @@ class DAV extends Storage { if ( ! is_array($this->config) or ! isset($this->config['webdav']) or ! $this->config['webdav']['run']) { $this->markTestSkipped('WebDAV backend not configured'); } + if (isset($this->config['webdav']['wait'])) { + $this->waitDelay = $this->config['webdav']['wait']; + } $this->config['webdav']['root'] .= '/' . $id; //make sure we have an new empty folder to work in $this->instance = new \OC\Files\Storage\DAV($this->config['webdav']); $this->instance->mkdir('/'); diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php index 182c014d99..f929175860 100644 --- a/tests/lib/files/storage/storage.php +++ b/tests/lib/files/storage/storage.php @@ -27,6 +27,17 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { * @var \OC\Files\Storage\Storage instance */ protected $instance; + protected $waitDelay = 0; + + /** + * Sleep for the number of seconds specified in the + * $waitDelay attribute + */ + protected function wait() { + if ($this->waitDelay > 0) { + sleep($this->waitDelay); + } + } /** * the root folder of the storage should always exist, be readable and be recognized as a directory @@ -77,6 +88,7 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { $this->assertFalse($this->instance->mkdir('/'.$directory)); //cant create existing folders $this->assertTrue($this->instance->rmdir('/'.$directory)); + $this->wait(); $this->assertFalse($this->instance->file_exists('/'.$directory)); $this->assertFalse($this->instance->rmdir('/'.$directory)); //cant remove non existing folders @@ -97,6 +109,8 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { array('folder'), array(' folder'), array('folder '), + array('folder with space'), + array('spéciäl földer'), ); } /** @@ -144,6 +158,7 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { $this->assertEquals($this->instance->file_get_contents('/source.txt'), $this->instance->file_get_contents('/target.txt')); $this->instance->rename('/source.txt', '/target2.txt'); + $this->wait(); $this->assertTrue($this->instance->file_exists('/target2.txt')); $this->assertFalse($this->instance->file_exists('/source.txt')); $this->assertEquals(file_get_contents($textFile), $this->instance->file_get_contents('/target2.txt')); @@ -225,6 +240,7 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { $this->assertTrue($this->instance->file_exists('/lorem.txt')); $this->assertTrue($this->instance->unlink('/lorem.txt')); + $this->wait(); $this->assertFalse($this->instance->file_exists('/lorem.txt')); } @@ -259,9 +275,11 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { public function testRecursiveRmdir() { $this->instance->mkdir('folder'); $this->instance->mkdir('folder/bar'); + $this->wait(); $this->instance->file_put_contents('folder/asd.txt', 'foobar'); $this->instance->file_put_contents('folder/bar/foo.txt', 'asd'); $this->assertTrue($this->instance->rmdir('folder')); + $this->wait(); $this->assertFalse($this->instance->file_exists('folder/asd.txt')); $this->assertFalse($this->instance->file_exists('folder/bar/foo.txt')); $this->assertFalse($this->instance->file_exists('folder/bar')); @@ -274,6 +292,7 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { $this->instance->file_put_contents('folder/asd.txt', 'foobar'); $this->instance->file_put_contents('folder/bar/foo.txt', 'asd'); $this->assertTrue($this->instance->unlink('folder')); + $this->wait(); $this->assertFalse($this->instance->file_exists('folder/asd.txt')); $this->assertFalse($this->instance->file_exists('folder/bar/foo.txt')); $this->assertFalse($this->instance->file_exists('folder/bar')); From 9e9a5b9ea1f9b4699cf2d0c621f3f911f3639df9 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 19 Feb 2014 19:08:28 +0100 Subject: [PATCH 20/24] Added extra checks for ext storage class --- apps/files_external/lib/config.php | 8 +++++++- apps/files_external/tests/mountconfig.php | 24 +++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 94dc5fb7ad..cd3e7f3a4a 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -277,15 +277,21 @@ class OC_Mount_Config { $mountType, $applicable, $isPersonal = false) { + $backends = self::getBackends(); $mountPoint = OC\Files\Filesystem::normalizePath($mountPoint); if ($mountPoint === '' || $mountPoint === '/' || $mountPoint == '/Shared') { // can't mount at root or "Shared" folder return false; } + + if (!isset($backends[$class])) { + // invalid backend + return false; + } if ($isPersonal) { // Verify that the mount point applies for the current user // Prevent non-admin users from mounting local storage - if ($applicable != OCP\User::getUser() || $class == '\OC\Files\Storage\Local') { + if ($applicable !== OCP\User::getUser() || strtolower($class) === '\oc\files\storage\local') { return false; } $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/'); diff --git a/apps/files_external/tests/mountconfig.php b/apps/files_external/tests/mountconfig.php index 941aec680b..4c61b8961f 100644 --- a/apps/files_external/tests/mountconfig.php +++ b/apps/files_external/tests/mountconfig.php @@ -48,4 +48,28 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase { $this->assertEquals(false, OC_Mount_Config::addMountPoint('/Shared', $storageClass, array(), $mountType, $applicable, $isPersonal)); } + + public function testAddMountPointSingleUser() { + \OC_User::setUserId('test'); + $mountType = 'user'; + $applicable = 'test'; + $isPersonal = true; + // local + $this->assertEquals(false, OC_Mount_Config::addMountPoint('/ext', '\OC\Files\storage\local', array(), $mountType, $applicable, $isPersonal)); + // non-local + $this->assertEquals(true, OC_Mount_Config::addMountPoint('/ext', '\OC\Files\Storage\SFTP', array(), $mountType, $applicable, $isPersonal)); + + } + + public function testAddMountPointUnexistClass() { + \OC_User::setUserId('test'); + $storageClass = 'Unexist_Storage'; + $mountType = 'user'; + $applicable = 'test'; + $isPersonal = true; + // local + // non-local + $this->assertEquals(false, OC_Mount_Config::addMountPoint('/ext', $storageClass, array(), $mountType, $applicable, $isPersonal)); + + } } From 2fd75d8f1c6de7138f962fa55b6a45d33f8936b2 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Mon, 17 Feb 2014 18:26:52 +0100 Subject: [PATCH 21/24] clean up the sharing ajax calls, add mail notification class --- core/ajax/share.php | 112 ++--------------- lib/private/share/mailnotifications.php | 160 ++++++++++++++++++++++++ 2 files changed, 173 insertions(+), 99 deletions(-) create mode 100644 lib/private/share/mailnotifications.php diff --git a/core/ajax/share.php b/core/ajax/share.php index c251f8e7ba..86ee018e38 100644 --- a/core/ajax/share.php +++ b/core/ajax/share.php @@ -85,93 +85,32 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo } break; case 'informRecipients': - $l = OC_L10N::get('core'); - $shareType = (int) $_POST['shareType']; $itemType = $_POST['itemType']; $itemSource = $_POST['itemSource']; $recipient = $_POST['recipient']; - $ownerDisplayName = \OCP\User::getDisplayName(); - $from = \OCP\Util::getDefaultEmailAddress('sharing-noreply'); - - $noMail = array(); - $recipientList = array(); if($shareType === \OCP\Share::SHARE_TYPE_USER) { $recipientList[] = $recipient; } elseif ($shareType === \OCP\Share::SHARE_TYPE_GROUP) { $recipientList = \OC_Group::usersInGroup($recipient); } - // don't send a mail to the user who shared the file $recipientList = array_diff($recipientList, array(\OCP\User::getUser())); - // send mail to all recipients with an email address - foreach ($recipientList as $recipient) { - //get correct target folder name - $email = OC_Preferences::getValue($recipient, 'settings', 'email', ''); - - if ($email !== '') { - $displayName = \OCP\User::getDisplayName($recipient); - $items = \OCP\Share::getItemSharedWithUser($itemType, $itemSource, $recipient); - $filename = trim($items[0]['file_target'], '/'); - $subject = (string)$l->t('%s shared »%s« with you', array($ownerDisplayName, $filename)); - $expiration = null; - if (isset($items[0]['expiration'])) { - try { - $date = new DateTime($items[0]['expiration']); - $expiration = $l->l('date', $date->getTimestamp()); - } catch (Exception $e) { - \OCP\Util::writeLog('sharing', "Couldn't read date: " . $e->getMessage(), \OCP\Util::ERROR); - } - } - - if ($itemType === 'folder') { - $foldername = "/Shared/" . $filename; - } else { - // if it is a file we can just link to the Shared folder, - // that's the place where the user will find the file - $foldername = "/Shared"; - } - - $link = \OCP\Util::linkToAbsolute('files', 'index.php', array("dir" => $foldername)); - - $content = new OC_Template("core", "mail", ""); - $content->assign('link', $link); - $content->assign('user_displayname', $ownerDisplayName); - $content->assign('filename', $filename); - $content->assign('expiration', $expiration); - $text = $content->fetchPage(); - - $content = new OC_Template("core", "altmail", ""); - $content->assign('link', $link); - $content->assign('user_displayname', $ownerDisplayName); - $content->assign('filename', $filename); - $content->assign('expiration', $expiration); - $alttext = $content->fetchPage(); - - $default_from = OCP\Util::getDefaultEmailAddress('sharing-noreply'); - $from = OCP\Config::getUserValue(\OCP\User::getUser(), 'settings', 'email', $default_from); - - // send it out now - try { - OCP\Util::sendMail($email, $displayName, $subject, $text, $from, $ownerDisplayName, 1, $alttext); - } catch (Exception $exception) { - $noMail[] = \OCP\User::getDisplayName($recipient); - } - } - } + $mailNotification = new OC\Share\MailNotifications(); + $result = $mailNotification->sendInternalShareMail($recipientList, $itemSource, $itemType); \OCP\Share::setSendMailStatus($itemType, $itemSource, $shareType, true); - if (empty($noMail)) { + if (empty($result)) { OCP\JSON::success(); } else { OCP\JSON::error(array( 'data' => array( 'message' => $l->t("Couldn't send mail to following users: %s ", - implode(', ', $noMail) + implode(', ', $result) ) ) )); @@ -187,56 +126,31 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo break; case 'email': - // enable l10n support - $l = OC_L10N::get('core'); // read post variables - $user = OCP\USER::getUser(); - $displayName = OCP\User::getDisplayName(); - $type = $_POST['itemType']; $link = $_POST['link']; $file = $_POST['file']; $to_address = $_POST['toaddress']; + $mailNotification = new \OC\Share\MailNotifications(); + $expiration = null; if (isset($_POST['expiration']) && $_POST['expiration'] !== '') { try { $date = new DateTime($_POST['expiration']); - $expiration = $l->l('date', $date->getTimestamp()); + $expiration = $date->getTimestamp(); } catch (Exception $e) { \OCP\Util::writeLog('sharing', "Couldn't read date: " . $e->getMessage(), \OCP\Util::ERROR); } } - // setup the email - $subject = (string)$l->t('%s shared »%s« with you', array($displayName, $file)); - - $content = new OC_Template("core", "mail", ""); - $content->assign ('link', $link); - $content->assign ('type', $type); - $content->assign ('user_displayname', $displayName); - $content->assign ('filename', $file); - $content->assign('expiration', $expiration); - $text = $content->fetchPage(); - - $content = new OC_Template("core", "altmail", ""); - $content->assign ('link', $link); - $content->assign ('type', $type); - $content->assign ('user_displayname', $displayName); - $content->assign ('filename', $file); - $content->assign('expiration', $expiration); - $alttext = $content->fetchPage(); - - $default_from = OCP\Util::getDefaultEmailAddress('sharing-noreply'); - $from_address = OCP\Config::getUserValue($user, 'settings', 'email', $default_from ); - - // send it out now - try { - OCP\Util::sendMail($to_address, $to_address, $subject, $text, $from_address, $displayName, 1, $alttext); - OCP\JSON::success(); - } catch (Exception $exception) { - OCP\JSON::error(array('data' => array('message' => OC_Util::sanitizeHTML($exception->getMessage())))); + $result = $mailNotification->sendLinkShareMail($to_address, $file, $link, $expiration); + if($result === true) { + \OCP\JSON::success(); + } else { + \OCP\JSON::error(array('data' => array('message' => OC_Util::sanitizeHTML($result)))); } + break; } } else if (isset($_GET['fetch'])) { diff --git a/lib/private/share/mailnotifications.php b/lib/private/share/mailnotifications.php new file mode 100644 index 0000000000..360376294c --- /dev/null +++ b/lib/private/share/mailnotifications.php @@ -0,0 +1,160 @@ + +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +*/ + +namespace OC\Share; + +class MailNotifications { + + private $senderId; // sender userId + private $from; // sender email address + private $senderDisplayName; + private $l; + + /** + * + * @param string $recipient user id + * @param string $sender user id (if nothing is set we use the currently logged-in user) + */ + public function __construct($sender = null) { + $this->l = \OC_L10N::get('core'); + + $this->senderId = $sender; + + $this->from = \OCP\Util::getDefaultEmailAddress('sharing-noreply'); + if ($this->senderId) { + $this->from = \OCP\Config::getUserValue($this->senderId, 'settings', 'email', $this->from); + $this->senderDisplayName = \OCP\User::getDisplayName($this->senderId); + } else { + $this->senderDisplayName = \OCP\User::getDisplayName(); + } + } + + /** + * @brief inform users if a file was shared with them + * + * @param array $recipientList list of recipients + * @param type $itemSource shared item source + * @param type $itemType shared item type + * @return array list of user to whom the mail send operation failed + */ + public function sendInternalShareMail($recipientList, $itemSource, $itemType) { + + $noMail = array(); + + foreach ($recipientList as $recipient) { + $recipientDisplayName = \OCP\User::getDisplayName($recipient); + $to = \OC_Preferences::getValue($recipient, 'settings', 'email', ''); + + if ($to === '') { + $noMail[] = $recipientDisplayName; + continue; + } + + $items = \OCP\Share::getItemSharedWithUser($itemType, $itemSource, $recipient); + $filename = trim($items[0]['file_target'], '/'); + $subject = (string) $this->l->t('%s shared »%s« with you', array($this->senderDisplayName, $filename)); + $expiration = null; + if (isset($items[0]['expiration'])) { + try { + $date = new DateTime($items[0]['expiration']); + $expiration = $date->getTimestamp(); + } catch (\Exception $e) { + \OCP\Util::writeLog('sharing', "Couldn't read date: " . $e->getMessage(), \OCP\Util::ERROR); + } + } + + if ($itemType === 'folder') { + $foldername = "/Shared/" . $filename; + } else { + // if it is a file we can just link to the Shared folder, + // that's the place where the user will find the file + $foldername = "/Shared"; + } + + $link = \OCP\Util::linkToAbsolute('files', 'index.php', array("dir" => $foldername)); + + list($htmlMail, $alttextMail) = $this->createMailBody($filename, $link, $expiration); + + // send it out now + try { + \OCP\Util::sendMail($to, $recipientDisplayName, $subject, $htmlMail, $this->from, $this->senderDisplayName, 1, $alttextMail); + } catch (\Exception $e) { + \OCP\Util::writeLog('sharing', "Can't send mail to inform the user abaut an internal share: " . $e->getMessage() , \OCP\Util::ERROR); + $noMail[] = $recipientDisplayName; + } + } + + return $noMail; + + } + + /** + * @brief inform recipient about public link share + * + * @param string recipient recipient email address + * @param string $filename the shared file + * @param string $link the public link + * @param int $expiration expiration date (timestamp) + * @return mixed $result true or error message + */ + public function sendLinkShareMail($recipient, $filename, $link, $expiration) { + $subject = (string)$this->l->t('%s shared »%s« with you', array($this->senderDisplayName, $filename)); + list($htmlMail, $alttextMail) = $this->createMailBody($filename, $link, $expiration); + try { + \OCP\Util::sendMail($recipient, $recipient, $subject, $htmlMail, $this->from, $this->senderDisplayName, 1, $alttextMail); + } catch (\Exception $e) { + \OCP\Util::writeLog('sharing', "Can't send mail with public link: " . $e->getMessage(), \OCP\Util::ERROR); + return $e->getMessage(); + } + + return true; + } + + /** + * @brief create mail body for plain text and html mail + * + * @param string $filename the shared file + * @param string $link link to the shared file + * @param int $expiration expiration date (timestamp) + * @return array with the html mail body and the plain text mail body + */ + private function createMailBody($filename, $link, $expiration) { + + $formatedDate = $expiration ? $this->l->l('date', $expiration) : null; + + $html = new \OC_Template("core", "mail", ""); + $html->assign ('link', $link); + $html->assign ('user_displayname', $this->senderDisplayName); + $html->assign ('filename', $filename); + $html->assign('expiration', $formatedDate); + $htmlMail = $html->fetchPage(); + + $alttext = new \OC_Template("core", "altmail", ""); + $alttext->assign ('link', $link); + $alttext->assign ('user_displayname', $this->senderDisplayName); + $alttext->assign ('filename', $filename); + $alttext->assign('expiration', $formatedDate); + $alttextMail = $alttext->fetchPage(); + + return array($htmlMail, $alttextMail); + } + +} From 90f351afa2154208dad29d28f980d5cd0e22f6d4 Mon Sep 17 00:00:00 2001 From: kondou Date: Wed, 19 Feb 2014 21:31:50 +0100 Subject: [PATCH 22/24] Optimize some images and strip metadata from png images with optipng in image_optimization.sh --- core/img/actions/add.png | Bin 184 -> 111 bytes core/img/actions/caret-dark.png | Bin 304 -> 199 bytes core/img/actions/caret-dark.svg | 14 +- core/img/actions/caret.png | Bin 269 -> 196 bytes core/img/actions/caret.svg | 6 +- core/img/actions/checkmark-white.png | Bin 286 -> 212 bytes core/img/actions/checkmark-white.svg | 6 +- core/img/actions/checkmark.png | Bin 303 -> 229 bytes core/img/actions/checkmark.svg | 6 +- core/img/actions/clock.png | Bin 367 -> 332 bytes core/img/actions/clock.svg | 2 +- core/img/actions/close.png | Bin 254 -> 181 bytes core/img/actions/delete-hover.png | Bin 295 -> 222 bytes core/img/actions/delete-hover.svg | 12 +- core/img/actions/delete.png | Bin 254 -> 181 bytes core/img/actions/download.png | Bin 236 -> 162 bytes core/img/actions/history.png | Bin 321 -> 249 bytes core/img/actions/info.png | Bin 423 -> 349 bytes core/img/actions/info.svg | 2 +- core/img/actions/lock.png | Bin 295 -> 221 bytes core/img/actions/lock.svg | 2 +- core/img/actions/logout.png | Bin 424 -> 352 bytes core/img/actions/logout.svg | 4 +- core/img/actions/mail.png | Bin 303 -> 229 bytes core/img/actions/more.png | Bin 195 -> 122 bytes core/img/actions/password.png | Bin 248 -> 159 bytes core/img/actions/password.svg | 5 +- core/img/actions/pause-big.png | Bin 166 -> 92 bytes core/img/actions/pause.png | Bin 170 -> 96 bytes core/img/actions/play-add.png | Bin 237 -> 163 bytes core/img/actions/play-add.svg | 6 +- core/img/actions/play-big.png | Bin 210 -> 136 bytes core/img/actions/play-next.png | Bin 224 -> 150 bytes core/img/actions/play-previous.png | Bin 237 -> 163 bytes core/img/actions/play.png | Bin 201 -> 127 bytes core/img/actions/public.png | Bin 412 -> 338 bytes core/img/actions/rename.png | Bin 267 -> 193 bytes core/img/actions/search.png | Bin 420 -> 348 bytes core/img/actions/search.svg | 8 +- core/img/actions/settings.png | Bin 524 -> 452 bytes core/img/actions/settings.svg | 10 +- core/img/actions/share.png | Bin 338 -> 264 bytes core/img/actions/shared.png | Bin 364 -> 290 bytes core/img/actions/shared.svg | 2 +- core/img/actions/sound-off.png | Bin 192 -> 118 bytes core/img/actions/sound.png | Bin 254 -> 180 bytes core/img/actions/star.png | Bin 640 -> 565 bytes core/img/actions/star.svg | 14 +- core/img/actions/starred.png | Bin 566 -> 492 bytes core/img/actions/starred.svg | 14 +- core/img/actions/toggle-filelist.png | Bin 195 -> 122 bytes core/img/actions/toggle-filelist.svg | 14 +- core/img/actions/toggle-pictures.png | Bin 193 -> 120 bytes core/img/actions/toggle-pictures.svg | 10 +- core/img/actions/toggle.png | Bin 391 -> 318 bytes core/img/actions/toggle.svg | 2 +- core/img/actions/triangle-e.png | Bin 174 -> 121 bytes core/img/actions/triangle-n.png | Bin 211 -> 138 bytes core/img/actions/triangle-n.svg | 2 +- core/img/actions/triangle-s.png | Bin 211 -> 138 bytes core/img/actions/triangle-s.svg | 2 +- core/img/actions/upload-white.png | Bin 226 -> 152 bytes core/img/actions/upload.png | Bin 235 -> 161 bytes core/img/actions/user.png | Bin 374 -> 300 bytes core/img/actions/user.svg | 2 +- core/img/actions/view-close.png | Bin 368 -> 295 bytes core/img/actions/view-next.png | Bin 305 -> 232 bytes core/img/actions/view-pause.png | Bin 181 -> 108 bytes core/img/actions/view-pause.svg | 2 +- core/img/actions/view-play.png | Bin 227 -> 154 bytes core/img/actions/view-previous.png | Bin 304 -> 231 bytes core/img/breadcrumb.png | Bin 594 -> 376 bytes core/img/breadcrumb.svg | 12 +- core/img/desktopapp.svg | 7 +- core/img/favicon-touch.png | Bin 3705 -> 3631 bytes core/img/favicon-touch.svg | 4 +- core/img/favicon.png | Bin 875 -> 802 bytes core/img/favicon.svg | 4 +- core/img/filetypes/application-epub+zip.png | Bin 1371 -> 1273 bytes core/img/filetypes/application-epub+zip.svg | 829 ++---------------- core/img/filetypes/application-pdf.png | Bin 1746 -> 1672 bytes core/img/filetypes/application-pdf.svg | 36 +- core/img/filetypes/application-rss+xml.png | Bin 1098 -> 1024 bytes core/img/filetypes/application-rss+xml.svg | 24 +- core/img/filetypes/application-x-cbr.png | Bin 1205 -> 1113 bytes core/img/filetypes/application-x-cbr.svg | 843 ++----------------- core/img/filetypes/application.png | Bin 1018 -> 945 bytes core/img/filetypes/application.svg | 40 +- core/img/filetypes/audio.png | Bin 816 -> 743 bytes core/img/filetypes/audio.svg | 32 +- core/img/filetypes/calendar.png | Bin 1333 -> 1226 bytes core/img/filetypes/calendar.svg | 101 ++- core/img/filetypes/database.png | Bin 1372 -> 1117 bytes core/img/filetypes/database.svg | 63 +- core/img/filetypes/file.png | Bin 374 -> 300 bytes core/img/filetypes/file.svg | 24 +- core/img/filetypes/flash.png | Bin 954 -> 880 bytes core/img/filetypes/flash.svg | 38 +- core/img/filetypes/folder-drag-accept.png | Bin 757 -> 683 bytes core/img/filetypes/folder-drag-accept.svg | 391 ++------- core/img/filetypes/folder-external.png | Bin 1012 -> 938 bytes core/img/filetypes/folder-external.svg | 62 +- core/img/filetypes/folder-public.png | Bin 1397 -> 1278 bytes core/img/filetypes/folder-public.svg | 62 +- core/img/filetypes/folder-shared.png | Bin 1229 -> 1155 bytes core/img/filetypes/folder-shared.svg | 62 +- core/img/filetypes/folder.png | Bin 709 -> 635 bytes core/img/filetypes/folder.svg | 38 +- core/img/filetypes/font.png | Bin 1697 -> 1623 bytes core/img/filetypes/font.svg | 32 +- core/img/filetypes/image-svg+xml.png | Bin 959 -> 885 bytes core/img/filetypes/image-svg+xml.svg | 46 +- core/img/filetypes/image.png | Bin 976 -> 903 bytes core/img/filetypes/image.svg | 44 +- core/img/filetypes/package-x-generic.png | Bin 794 -> 720 bytes core/img/filetypes/package-x-generic.svg | 71 +- core/img/filetypes/text-code.png | Bin 908 -> 834 bytes core/img/filetypes/text-code.svg | 36 +- core/img/filetypes/text-html.png | Bin 654 -> 581 bytes core/img/filetypes/text-html.svg | 34 +- core/img/filetypes/text-vcard.png | Bin 782 -> 668 bytes core/img/filetypes/text-vcard.svg | 75 +- core/img/filetypes/text-x-c.png | Bin 1345 -> 1228 bytes core/img/filetypes/text-x-c.svg | 89 +- core/img/filetypes/text-x-h.png | Bin 1242 -> 1168 bytes core/img/filetypes/text-x-h.svg | 95 +-- core/img/filetypes/text-x-javascript.png | Bin 1340 -> 1243 bytes core/img/filetypes/text-x-javascript.svg | 91 +- core/img/filetypes/text-x-python.png | Bin 1469 -> 1368 bytes core/img/filetypes/text-x-python.svg | 107 ++- core/img/filetypes/text.png | Bin 693 -> 620 bytes core/img/filetypes/text.svg | 30 +- core/img/filetypes/video.png | Bin 1362 -> 1252 bytes core/img/filetypes/video.svg | 141 ++-- core/img/filetypes/web.png | Bin 2254 -> 2136 bytes core/img/filetypes/web.svg | 45 +- core/img/filetypes/x-office-document.png | Bin 930 -> 856 bytes core/img/filetypes/x-office-document.svg | 75 +- core/img/filetypes/x-office-presentation.png | Bin 1102 -> 1028 bytes core/img/filetypes/x-office-presentation.svg | 123 ++- core/img/filetypes/x-office-spreadsheet.png | Bin 789 -> 715 bytes core/img/filetypes/x-office-spreadsheet.svg | 93 +- core/img/image-optimization.sh | 2 +- core/img/logo-wide.png | Bin 2227 -> 2154 bytes core/img/logo-wide.svg | 4 +- core/img/logo.png | Bin 5182 -> 5109 bytes core/img/logo.svg | 4 +- core/img/places/calendar-dark.png | Bin 429 -> 356 bytes core/img/places/contacts-dark.png | Bin 962 -> 888 bytes core/img/places/contacts-dark.svg | 4 +- core/img/places/file.png | Bin 364 -> 290 bytes core/img/places/file.svg | 6 +- core/img/places/files.png | Bin 280 -> 207 bytes core/img/places/files.svg | 2 +- core/img/places/folder.png | Bin 339 -> 265 bytes core/img/places/folder.svg | 8 +- core/img/places/home.png | Bin 342 -> 269 bytes core/img/places/home.svg | 4 +- core/img/places/link.png | Bin 1093 -> 851 bytes core/img/places/link.svg | 12 +- core/img/places/music.png | Bin 708 -> 634 bytes core/img/places/picture.png | Bin 434 -> 360 bytes core/img/places/picture.svg | 2 +- core/img/rating/s1.png | Bin 393 -> 299 bytes core/img/rating/s10.png | Bin 651 -> 557 bytes core/img/rating/s11.png | Bin 561 -> 464 bytes core/img/rating/s2.png | Bin 535 -> 441 bytes core/img/rating/s3.png | Bin 688 -> 594 bytes core/img/rating/s4.png | Bin 714 -> 620 bytes core/img/rating/s5.png | Bin 696 -> 602 bytes core/img/rating/s6.png | Bin 715 -> 621 bytes core/img/rating/s7.png | Bin 697 -> 603 bytes core/img/rating/s8.png | Bin 715 -> 621 bytes core/img/rating/s9.png | Bin 678 -> 584 bytes 174 files changed, 1125 insertions(+), 2969 deletions(-) diff --git a/core/img/actions/add.png b/core/img/actions/add.png index 1aac02b84544ac0e8436d7c8e3b14176cd35fb88..3c051e4d73e64a7e17df89d6e1344643b515d6ea 100644 GIT binary patch delta 8 PcmdnNm_I>fVy-s;4xs}k delta 79 zcmd1b!8k$1jk(y#GlYYK^eP*AeOHKHUqKdq!Z fu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$J?iHd#zvy&NZ diff --git a/core/img/actions/caret-dark.png b/core/img/actions/caret-dark.png index f84e87e0a82ba92d2f0d563c07119e7bac823e1e..215af33ea4b144383908fc30387942f2979092bc 100644 GIT binary patch delta 183 zcmdnMbewU5L_G^L0|Ud`yN`l^ltF+`i0gk;aP8W)nKNhR@TN zvaql)GBN_$9;ycMK#IR4$S;_Ik%fa#QrA7befhR~AOGl>CvO2tnR~i8hHykDCn#{e z0UB;TBk=qG|HTG}U;Y1o)F6TF_TT-S32c}D%;yrgYUsZ3mWtFu9x-;dM+^*ho%|pF T7;K3Jn!(`d>gTe~DWM4fx&BDM delta 289 zcmX@kxPfVcL_G%^0|SHn=l_X7ilx}eGlT;OYB*9lfPBsZkH}&M2Hxu+%;=;sy8hT|5}cn_Ql40p%1~Zju9umYU7Va)kgAtols@~NjTBJPT2B|p5R2ZklN9+58}PWk zJ-I;faq2=wR!gS<{mIoK)=qvGq`zo19$j27yY7p-*oHNM+gNj^=|o@q-~YpyA!}vu zTSWm=;JRub&b%H7L7hqyEb!Uu2WdT(vCstoA%URb#&V l=Wn_TqNMis7a2d`(?0y#`CEk144~5)JYD@<);T3K0RYDHaFhT5 diff --git a/core/img/actions/caret-dark.svg b/core/img/actions/caret-dark.svg index 3a5318e6fa..2d75e4dd8c 100644 --- a/core/img/actions/caret-dark.svg +++ b/core/img/actions/caret-dark.svg @@ -1,13 +1,5 @@ + - - - - image/svg+xml - - - - - - - + + diff --git a/core/img/actions/caret.png b/core/img/actions/caret.png index 00baea9ece604554243a01bed58fbc48369dd584..7066b767a288f9ca47b36b3bf1d8d7e802d63a7e 100644 GIT binary patch delta 9 QcmeBWI>I - + - - + + diff --git a/core/img/actions/checkmark-white.png b/core/img/actions/checkmark-white.png index 08b8783649f2a4cd77c29b96674fe2e78afc53c8..27f17204b1da7c06dfad3325937cc4ac7f2cc01c 100644 GIT binary patch delta 9 QcmbQobcJz(%EY`401_Aj*#H0l delta 81 zcmcb@IFD(9iaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt g#G+J&^73-M%)IR4image/svg+xml - - + + + diff --git a/core/img/actions/checkmark.png b/core/img/actions/checkmark.png index 99a4019c69e1203874fca4a24e4d1697f583663d..8b4c8ddc706d0d7eda7948c0687bd361984e74dc 100644 GIT binary patch delta 9 QcmZ3_^ptUe%EY{b024U`3;+NC delta 81 zcmaFLxSnZ(iaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt g#G+J&^73-M%)IR4image/svg+xml - - + + + diff --git a/core/img/actions/clock.png b/core/img/actions/clock.png index 9c3a284b8baa392ffcaefb8ddc4e6d0a124aa990..5023cf4c3f631352d8c42cc4a3aa2030916bb6cc 100644 GIT binary patch delta 10 RcmaFQbcShy@p42F?PH$YKTtz9S&aI8~cZdZVH?BLD&a3Y-7{ diff --git a/core/img/actions/clock.svg b/core/img/actions/clock.svg index f3fcb19031..6b938deea8 100644 --- a/core/img/actions/clock.svg +++ b/core/img/actions/clock.svg @@ -1,5 +1,5 @@ - + diff --git a/core/img/actions/close.png b/core/img/actions/close.png index 0d8c89a56e2d88463f52bb1901ccf228640ff7a1..3389c66e03b92db38d2ae6ffb41f1971d83c86bb 100644 GIT binary patch delta 9 QcmeyzxRr5&%Ea7>02Fou`2YX_ delta 80 zcmdnW_>XadiW_sWlV=DA2gmJ){tp-!7&r?&B8wRqc&~#nqm#z$3ZS55iEBhjaDG}z hd16s2LwR|*US?i)adKios$PCk`s{Z$QWF)Y007_28bAO5 diff --git a/core/img/actions/delete-hover.png b/core/img/actions/delete-hover.png index 99f549faf9b70be5d0917d601485170bfae526d8..48e6c089c9de1dfb777d052e0f7a54a7c049b3d3 100644 GIT binary patch delta 9 QcmZ3^bdPa@%Ea7V01~$Y^#A|> delta 80 zcmcb|xSVN%iW_sWlV=DA2gmJ){tp-!7&r?&B8wRqc&~#nqm#z$3ZS55iEBhjaDG}z hd16s2LwR|*US?i)adKios$PCk`s{Z$QWF*T0szvG8ax01 diff --git a/core/img/actions/delete-hover.svg b/core/img/actions/delete-hover.svg index 568185c5c7..9e5150359d 100644 --- a/core/img/actions/delete-hover.svg +++ b/core/img/actions/delete-hover.svg @@ -1,12 +1,4 @@ + - - - - image/svg+xml - - - - - - + diff --git a/core/img/actions/delete.png b/core/img/actions/delete.png index 0d8c89a56e2d88463f52bb1901ccf228640ff7a1..3389c66e03b92db38d2ae6ffb41f1971d83c86bb 100644 GIT binary patch delta 9 QcmeyzxRr5&%Ea7>02Fou`2YX_ delta 80 zcmdnW_>XadiW_sWlV=DA2gmJ){tp-!7&r?&B8wRqc&~#nqm#z$3ZS55iEBhjaDG}z hd16s2LwR|*US?i)adKios$PCk`s{Z$QWF)Y007_28bAO5 diff --git a/core/img/actions/download.png b/core/img/actions/download.png index 65954f941bbf9741180e0f6998adc87fc4c2db92..0f71a5a776f1194b6a0a1adf01df4490e0cb2104 100644 GIT binary patch delta 9 QcmaFExQKCr%EY`n024j~!Tsf8K+ diff --git a/core/img/actions/info.png b/core/img/actions/info.png index 37ccb3568309a284ff95ee6bb2433ca6dbf4d302..9ebfe9cbdcc59e6a0e18ded816c5af86b30e6e0a 100644 GIT binary patch delta 10 RcmZ3^e3xm0^2S^%MgSHt1C{^) delta 83 zcmcc1w48Z@vIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6zrFaiLTy%=l& diff --git a/core/img/actions/info.svg b/core/img/actions/info.svg index 55bdb17f2e..7c93fd6a3e 100644 --- a/core/img/actions/info.svg +++ b/core/img/actions/info.svg @@ -1,7 +1,7 @@ - + diff --git a/core/img/actions/lock.png b/core/img/actions/lock.png index f3121811ea69565b897e2806f7d9aa66ac90bd68..2013ebad695abc2030a2e2eaefc368d99c0b3248 100644 GIT binary patch delta 9 QcmZ3^beD00%EY{#01~kS^Z)<= delta 81 zcmcc1xSVN%iaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt g#G+J&^73-M%)IR4 - + diff --git a/core/img/actions/logout.png b/core/img/actions/logout.png index e9c89a15a7a396afe0e597fd8934709ca970ce7d..5b94147732cbc39c90e523f4c4502c79fd5178a3 100644 GIT binary patch delta 10 RcmZ3%{D5hK^2TgiMgSI41DgN< delta 81 zcmaFBw1RnpvKs?av6E*A2S?}|Hx>p42F?PH$YKTt-s>RD=%g{b0w^e1;u=vBoS#-w ho>-L1P+nfHmzkGcoSayYs+V7sKKq@G)J8>nMgWni7 - - + + diff --git a/core/img/actions/mail.png b/core/img/actions/mail.png index be6142444ae8052e6f96c4b8afc3d267704d1507..6d06259cd0882ec5c7cb72eb76245e2f936ffbfa 100644 GIT binary patch delta 9 QcmZ3_^ptUe%EY{b024U`3;+NC delta 81 zcmaFLxSnZ(iaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt g#G+J&^73-M%)IR4^eP*AeOHKHUqKdq!Z fu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$J?iHeZ`x?LHL diff --git a/core/img/actions/password.png b/core/img/actions/password.png index 07365a5775e54ed98591351ca2c4e03909b3bf65..3619fabab9a05d84462949f49f1ed40d05dfe84f 100644 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU{r~?zkckOmk{tH}McGS& z{DK+e&6Xd2_MzT$$77(7zNd?02uE~sf&+uw-~93{!f=hT|5}cn_Ql40p%1~Zju9umYU7Va)kgAtols@~NjTBH(si%u$h(+()i3fQPDDW`X z#hsdhMST=14~Le(;image/svg+xml - + + + diff --git a/core/img/actions/pause-big.png b/core/img/actions/pause-big.png index 1c4cf503b8d643f816d303212d46836a273bc5eb..054281c63143b8779d43cc1bb6b6beaf90c312d0 100644 GIT binary patch delta 8 PcmZ3+7&Ad-Vx9#64UPiu delta 80 zcma!9#yCO6ou$~xGlT;OYB*9l7#J8h3p^r=85nr4gD|6$#_S59pk#?_L`iUdT1k0g eQ7S`udAVL@UUqSEVnM22eo^}DcQ#TJ6|DhJvlqkw diff --git a/core/img/actions/pause.png b/core/img/actions/pause.png index f74ed3a8619c2d4f9f93f532405dfc604e48a040..d4b865e3401856e4c763b2425906eb40e4ec591e 100644 GIT binary patch delta 8 PcmZ3*m@q+QVxA2E4ax%h delta 80 zcmYdT#W+F5ou$~xGlT;OYB*9l7#J8h3p^r=85nr4gD|6$#_S59pk#?_L`iUdT1k0g eQ7S`udAVL@UUqSEVnM22eo^}DcQ#TJ73~31GZ)YR diff --git a/core/img/actions/play-add.png b/core/img/actions/play-add.png index 0097f671aef92a4337938837f7b84f82c2618cc7..ccf77d2a062e93c9854006485437b6f6f9b8ace6 100644 GIT binary patch delta 9 QcmaFMxR`N*%EY{S025CG#Q*>R delta 81 zcmZ3?_?B^kiaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt g#G+J&^73-M%)IR4 - - - - + + diff --git a/core/img/actions/play-big.png b/core/img/actions/play-big.png index 2da2426dcfcbad59b924f21c3c175b15a7911828..7d4916cb204c7d7322beb8a0a0c7852942e8195f 100644 GIT binary patch delta 9 Qcmcb_*ugkKWnx|m01<=(bN~PV delta 81 zcmeBRyu>&`#hsS|Iv5xjI14-?iy0VruY)k7lg8`{prB-lYeY$Kep*R+ fVo@qXd3m{BW?pu2a$-TMUVc&f>~}U&6BW||Yz!Dl diff --git a/core/img/actions/play-next.png b/core/img/actions/play-next.png index 08568b3dc0b117a9ee569c7e42e0144af094d603..50cd91d240ec5c09e0e589b75da72499dcfcd4b7 100644 GIT binary patch delta 9 QcmaFBIE`_F%EY`P01|Qoo&W#< delta 81 zcmbQn_<(VOiaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt g#G+J&^73-M%)IR4R delta 81 zcmZ3?_?B^kiaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt g#G+J&^73-M%)IR43VDvIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6xVG6DdOn;1&~ diff --git a/core/img/actions/rename.png b/core/img/actions/rename.png index 3af6840071b4597458475c9098a79d533b66c2c4..975bd2d7031d55e599dd8b8e788799afac376356 100644 GIT binary patch delta 9 QcmeBXI> delta 81 zcmX@e*v&LS#hsS|Iv5xjI14-?iy0VruY)k7lg8`{prB-lYeY$Kep*R+ gVo@qXd3m{BW?pu2a$-TMUVc&f>~}U&6BQQ#0BExqbpQYW diff --git a/core/img/actions/search.png b/core/img/actions/search.png index 312e4f419e589ad575cce37e27ab3d906d733d74..49b6175435452981fc22d8f6770ff7ec604fa12a 100644 GIT binary patch delta 10 RcmZ3&e1~a*^2TgSMgSH91CIaz delta 81 zcmcb^w1jzrvKs?av6E*A2S?}|Hx>p42F?PH$YKTt-s>RD=%g{b0w^e1;u=vBoS#-w ho>-L1P+nfHmzkGcoSayYs+V7sKKq@G)J8>XMgWf?7;XRn diff --git a/core/img/actions/search.svg b/core/img/actions/search.svg index 4f27369dbb..28e36e2d5b 100644 --- a/core/img/actions/search.svg +++ b/core/img/actions/search.svg @@ -1,14 +1,12 @@ - + - - - - + + diff --git a/core/img/actions/settings.png b/core/img/actions/settings.png index 9ada3087707a6b9c2248aee03a2a42a0773d8a75..f6eb6ce0cc7c71798682f9817ba2acc70734cd4d 100644 GIT binary patch delta 10 RcmeBSIl??ad1LlMMgSEu1IYjY delta 81 zcmX@Y+`}?K*^Pmz*vT`5gCq2f8w&#i180FpWHAE+?{yGnbkdkz0Th%hag8Vm&QB{T hPb^AhC@(M9%goCzPEIUH)ypqRpZ(58YNO&}MgW127^naM diff --git a/core/img/actions/settings.svg b/core/img/actions/settings.svg index bd7ae3b3d7..a3a4c6c51d 100644 --- a/core/img/actions/settings.svg +++ b/core/img/actions/settings.svg @@ -1,17 +1,17 @@ - + - + - + - - + + diff --git a/core/img/actions/share.png b/core/img/actions/share.png index 099e4d6ab350b775ecf46669a7c47950fd0810aa..fdacbbabebcf013a5a80907b3e62cb2e3c0ee26d 100644 GIT binary patch delta 9 Qcmcb_)WI}CWn$hF01^@d_5c6? delta 81 zcmeBRy2La=#hsS|Iv5xjI14-?iy0VruY)k7lg8`{prB-lYeY$Kep*R+ gVo@qXd3m{BW?pu2a$-TMUVc&f>~}U&6BVBW0BtH5%K!iX diff --git a/core/img/actions/shared.png b/core/img/actions/shared.png index 6e112e75b44a5376d8444c4efa08a12e210eedaa..83ec1a0cf15198a4856268fa63e2e244db570116 100644 GIT binary patch delta 9 QcmaFEw1{bf%EY{X029mvL;wH) delta 82 zcmZ3)^oD7IiaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt h#G+J&^73-M%)IR4 - + diff --git a/core/img/actions/sound-off.png b/core/img/actions/sound-off.png index 2eddb00af0f39c175d0ea8d4971e37eb77a52231..0457de8e4d1cbff1c62ca9234a1589467c8ac8e1 100644 GIT binary patch delta 8 PcmX@WST;drVqOpc4-^AE delta 80 zcmXRrz&Jt0ou$~xGlT;OYB*9l7#J8h3p^r=85nr4gD|6$#_S59pk#?_L`iUdT1k0g eQ7S`udAVL@UUqSEVnM22eo^}DcQ#TJ6+;1E^B58U diff --git a/core/img/actions/sound.png b/core/img/actions/sound.png index 9349c94e7a411cd860499c927ac447086becbab7..e849b4d248b3590426420336af60951413a89c2f 100644 GIT binary patch delta 9 QcmeyzxP@_o%EY`002FWo_y7O^ delta 81 zcmdnO_>XadiaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt g#G+J&^73-M%)IR4V!Z diff --git a/core/img/actions/star.png b/core/img/actions/star.png index 124ce495af6da4d852987bd272b8432a671b0332..6a04282f3faa01e8ea5bc772925cf1496e8715b1 100644 GIT binary patch literal 565 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H3?x5i&EW)6&jWlyT>rzss#UA5UcGwz_U(%o zF9I1yjvP62=FFu_mrk5Gaqir?lP6D}hJmwZ&jLkGojL_n0B6G_p)^n&2!I@95~v;s zfPxSPgoJQ`%79#C600&~jU=(tuWUL2^s-M$kY6wZBNHM?tjv*3~r3X91nj9EdFNjYIYU%Wx9ldB#$g-un&*C)I-v8f! z+)_q@>qVT)IlT$b3L8XjuHV|F(!FKE7stMd1-=VgcBFIFwoIA4r?U9=p4&k`_HCDb z>K)5!B`3T`FQ8m<^Gc^3Q6Ksv1@~R%tgpN-U{SaDO9{)%3#kXrDkKFM31$Xw5|j)q zu-Dw<5EP~oUz+PtRM~LB(sI4y3ZIiqPT$Tu^X<#YzwUIxP+=zDzwPYbWlVBc`|R2d PbUcHntDnm{r-UW|Mg>Ck delta 626 zcmV-&0*(E(1b_vQ8Gi-<006|aY&!q|00eVFNmK|32nc)#WQYI&010qNS#tmY4c7nw z4c7reD4Tcy000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs0005~Nkl4e-6vu!6ITKhk2}vW^SR`O17;~E?7AtB%8w(prA%9}2MH)fD+Fry$@CyVB z5fm))6$EcC;zh4aA=+IL2;uIyy?r)`oO_EmF+Ny!=KtRN&0}UBBQqn!y!YoSmC8i5 zTJ<6ECxWPer1d<{BOnN@kcu0P#>rl<_Y0TVi z?|r=p6 z;6?~k(#GWEt{7%q}EJ^7XG3OIigo;CU29=ZjE)BuO^M#>N&T zy#V@>hW2^rX_7Q9X*rJLM$tEDi;Ii$)B0eY>(O(BcN?f?J) M07*qoM6N<$f-Yko;s5{u diff --git a/core/img/actions/star.svg b/core/img/actions/star.svg index 7bcd8dc059..c2b3b60a2b 100644 --- a/core/img/actions/star.svg +++ b/core/img/actions/star.svg @@ -1,14 +1,6 @@ + - - - - image/svg+xml - - - - - - - + + diff --git a/core/img/actions/starred.png b/core/img/actions/starred.png index 5185d0f53819d869d83587d29ea889fcd0bd1a1a..22e68c757e79535d4378a7e7539b5f6e99dfb401 100644 GIT binary patch delta 10 RcmdnS@`ibW^2Xegi~tyH1VsP< delta 83 zcmaFEyp3govIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6y^W&{AC85tV@ diff --git a/core/img/actions/starred.svg b/core/img/actions/starred.svg index c7a5a7dac1..130bab366a 100644 --- a/core/img/actions/starred.svg +++ b/core/img/actions/starred.svg @@ -1,14 +1,6 @@ + - - - - image/svg+xml - - - - - - - + + diff --git a/core/img/actions/toggle-filelist.png b/core/img/actions/toggle-filelist.png index 45d363f1934f7a40e6a43644be8a4bd2b3f73a17..0926a726d53e1cbf6ad2646f5a84a9ff1ef33201 100644 GIT binary patch delta 8 PcmX@iST#XqVs01!4@Lt= delta 79 zcmb^eP*AeOHKHUqKdq!Z fu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$J?iHeZ`x?LHL diff --git a/core/img/actions/toggle-filelist.svg b/core/img/actions/toggle-filelist.svg index 940f6a49e6..57f4c67fb3 100644 --- a/core/img/actions/toggle-filelist.svg +++ b/core/img/actions/toggle-filelist.svg @@ -1,11 +1,9 @@ - - - - - - - - + + + + + + diff --git a/core/img/actions/toggle-pictures.png b/core/img/actions/toggle-pictures.png index 8068d17e30d95532ff0923c9848ebd5cc3c8d8ef..7499d5b7809884da195be32975d5e71c26ae0e0b 100644 GIT binary patch delta 8 PcmX@eSTR9mVr~ck4=4jc delta 79 zcmb<8$T&g8jk(y#GlYYK^eP*AeOHKHUqKdq!Z fu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$J?iHhL>xgi;d diff --git a/core/img/actions/toggle-pictures.svg b/core/img/actions/toggle-pictures.svg index 5205c0226d..f25695537f 100644 --- a/core/img/actions/toggle-pictures.svg +++ b/core/img/actions/toggle-pictures.svg @@ -1,9 +1,7 @@ - - - - - - + + + + diff --git a/core/img/actions/toggle.png b/core/img/actions/toggle.png index d06e5cb32b5a7c5d3ae69bf421ef0e21f7cfd318..45f9407a1abc1f23c48f4ba060b5f8e984d65c87 100644 GIT binary patch delta 10 RcmZo?-p4dSWn-=sBLEY<12_Nx delta 81 zcmdnT)XqFX#f`bx$uoq5gX8u?{|5{V44efXk;M!QBELYG(V}tMT%e$2iEBhjaDG}z hd16s2LwR|*US?i)adKios$PCk`s{Z$QX3Uz83Fr}8bSa7 diff --git a/core/img/actions/toggle.svg b/core/img/actions/toggle.svg index 1b774a19b1..774daa4fdf 100644 --- a/core/img/actions/toggle.svg +++ b/core/img/actions/toggle.svg @@ -1,5 +1,5 @@ - + diff --git a/core/img/actions/triangle-e.png b/core/img/actions/triangle-e.png index 09d398f602e7985787925f20826dc839cde6f7df..8abe23a628090fe9450f867d864aaff86a1e8e3f 100644 GIT binary patch delta 8 PcmZ3-SUJIMVzn^<4;ceK delta 59 zcmbzW@LL diff --git a/core/img/actions/triangle-n.svg b/core/img/actions/triangle-n.svg index 4f866978f4..49d1ac99a7 100644 --- a/core/img/actions/triangle-n.svg +++ b/core/img/actions/triangle-n.svg @@ -1,4 +1,4 @@ - + diff --git a/core/img/actions/triangle-s.png b/core/img/actions/triangle-s.png index 0f533b142eba0be5834b67ac57ad78f3de822661..81f623eac17be425d358d4cf7fd20422ce836798 100644 GIT binary patch delta 9 Qcmcc2*u^+OWnyj`01=x5cmMzZ delta 80 zcmeBTyv#U3#f`bx$uoq5gX8u?{|5{V44efXk;M!Qyw^dP(Me-=1yE43#5JNMI6tkV gJh3R1p}f3YFEcN@I61K(RWH9NefB#Wsfmi20L2#>zW@LL diff --git a/core/img/actions/triangle-s.svg b/core/img/actions/triangle-s.svg index b178b20a20..4f35c38f68 100644 --- a/core/img/actions/triangle-s.svg +++ b/core/img/actions/triangle-s.svg @@ -1,4 +1,4 @@ - + diff --git a/core/img/actions/upload-white.png b/core/img/actions/upload-white.png index fd9bdccc240ad5b6c6f658778097ad6eb0f4ac54..a3b233e8aa68790c731bc989f6db0c1b7fdc1673 100644 GIT binary patch delta 9 QcmaFFID>J5%EY`901}h~qyPW_ delta 81 zcmbQi_=s_WiaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt g#G+J&^73-M%)IR4n+a diff --git a/core/img/actions/upload.png b/core/img/actions/upload.png index 1d90165a552a812e67f8e62b46a9b1c01b6788b2..f6a0c4cfa835dec886379ef770aff694e9d3a1b3 100644 GIT binary patch delta 9 QcmaFOxR7yz%EY`{023_(zW@LL delta 81 zcmZ3;_?mHoiaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt g#G+J&^73-M%)IR4 - + diff --git a/core/img/actions/view-close.png b/core/img/actions/view-close.png index 330ae09ea73057a29f05e2288787a31300cbb7aa..8422b733466565267ab8be1627ebc1c988f3c12f 100644 GIT binary patch delta 10 Rcmeysw47;z%Enw~MgSJ*19AWW delta 81 zcmZ3^^nq!DiW_sWlV=DA2gmJ){tp-!7&r?&B8wRqc&~#nqm#z$3ZS55iEBhjaDG}z hd16s2LwR|*US?i)adKios$PCk`s{Z$QX3W77y^eP*AeOHKHUqKdq!Z fu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$J?iHhC;vAG#! diff --git a/core/img/actions/view-pause.svg b/core/img/actions/view-pause.svg index d901a4d789..f5fdc03047 100644 --- a/core/img/actions/view-pause.svg +++ b/core/img/actions/view-pause.svg @@ -1,6 +1,6 @@ - + diff --git a/core/img/actions/view-play.png b/core/img/actions/view-play.png index 721787d9c44eb9e84b055eecdffd260d47b87c86..c506815c0cfb13f1a0fee40a5bdb97910fbac03c 100644 GIT binary patch delta 9 QcmaFNIE!(D%Ea6<01~SMr~m)} delta 80 zcmbQm_?U5miW_sWlV=DA2gmJ){tp-!7&r?&B8wRqc&~#nqm#z$3ZS55iEBhjaDG}z gd16s2LwR|*US?i)adKios$PCk`s{Z$QWF&`0nY~+?*IS* diff --git a/core/img/actions/view-previous.png b/core/img/actions/view-previous.png index 97b41a195ff97cc7122b27f9b0245e7c3d3dca43..79dcb2301df943a25671a2d0a5698962b7ba0c90 100644 GIT binary patch delta 9 QcmdnM^qg^m%Ea8m025FI5C8xG delta 80 zcmaFPxPfVciW_sWlV=DA2gmJ){tp-!7&r?&B8wRqc&~#nqm#z$3ZS55iEBhjaDG}z hd16s2LwR|*US?i)adKios$PCk`s{Z$QWF)A0RY%18dm@S diff --git a/core/img/breadcrumb.png b/core/img/breadcrumb.png index 7e9593a36bf9a2fc123ee6237fdfc88c022df0a6..5556920aa73b4b7778c6e89e5c6caa5d3abde86d 100644 GIT binary patch literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^d_b(j!3-pmK2_cWQq=)IA+G=b|Gz#!z~lYpV4yQJ zOM?7@8JJnQc?6`S74-BC&D=e`15?xU8k@W3&R@QL=k7g+FJHa&{KcEkU%q~`I?Q+k zsHxf0#W6%9IChe|P_uym%R#eaPv-Ed9sVExVs%x?YptnQb{mJqM?C8+W4F2D@cviB zY`!0MP6d{X^Rv0mO>6J`)~~m5N6pJe_e(NgKAKmu^2MiHFD7-L_L=SyXMDR(f zovM7Gvx;RC&xwzzmNBy8+S%zELXyl=cSN$SOV delta 580 zcmV-K0=xbA0@4JK8Gi-<0031iiR=IX00eVFNmK|32nc)#WQYI&010qNS#tmY4c7nw z4c7reD4Tcy000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs0005cNklU8RP`keQ-=kqyVy_7e88nn!s2}%Co*$mCt*ZCG6yu0+8T+e3F;*B6-*HbxD4K{ck4@!JGzuf)7p^LWq74xq!oWiht#7!@<_X%v@=3J6s$7W^Ipp z43l^?Y&32)GuL7Xvk~!f*l$C;h_9m}7`vRz+<-IKS)Mf!Z{Sr#ye|)GiJ7?-hcR6> zA4j~cFuQ74Ni43%862wn>M~-L*=>({6swJxT~+@DAT!q(n0>tLTNCjDmYPJ2EGIM9 z<1BVHi9O21>v&ydb}cb8x8Mjiw-JpJ7x1vo>`G#0?#6b5c(twxoYr7=Rs91!3BT)4 S$QPFY0000 - - - - image/svg+xml - - - - - - + diff --git a/core/img/desktopapp.svg b/core/img/desktopapp.svg index c2cfb01629..d63cfef084 100644 --- a/core/img/desktopapp.svg +++ b/core/img/desktopapp.svg @@ -1,4 +1,5 @@ -image/svg+xml -Desktop app -Windows, OS X, Linux + + +Desktop app +Windows, OS X, Linux diff --git a/core/img/favicon-touch.png b/core/img/favicon-touch.png index 24770fb634f028fbff8c0625e987ead5bb0471c9..27019a4ddefbbfc1748ceb07a216933dc89d0653 100644 GIT binary patch delta 10 Rcmew4nJ@Lm96Mu8k#cA%hSiEBhjaDG}z hd16s2LwR|*US?i)adKios$PCk`s{Z$QX3Wd_yCT67uNs) diff --git a/core/img/favicon-touch.svg b/core/img/favicon-touch.svg index 68f36a8a9a..8d548ef035 100644 --- a/core/img/favicon-touch.svg +++ b/core/img/favicon-touch.svg @@ -1,4 +1,4 @@ - - + + diff --git a/core/img/favicon.png b/core/img/favicon.png index 02936243cb13d8e7bfa816f2b577f748a4615e36..8067350ef47c3296ec5929d99d2d912ecfc385a6 100644 GIT binary patch delta 10 RcmaFOwuo(l^2VJ1OaK_a1Zw~Q delta 82 zcmZ3)_L^;ivO5EFv6E*A2M5RPhyD*37#KJUJR*x37(yEr+qAXP8FD1G)j8>x+ojLZPh78vOO diff --git a/core/img/favicon.svg b/core/img/favicon.svg index 39cb174268..319fd434dc 100644 --- a/core/img/favicon.svg +++ b/core/img/favicon.svg @@ -1,4 +1,4 @@ - - + + diff --git a/core/img/filetypes/application-epub+zip.png b/core/img/filetypes/application-epub+zip.png index b3e3b28b4d51b91305d967d445879de4cf25fcbe..2399088b28adc460fd1009343cfee2eebfae4a17 100644 GIT binary patch delta 1254 zcmVpZ)bLWh3T^HstF)=Zp%YWsbp`m!>coO#yufVBF zIF79K=J-y1$hCysb>+f`nUslVqv6PAvlFwk7lduwsLBE?5koyk*Z8GgHm=|{o%5W3 z^Z(%dXHOq#oZUpAy}jK!efniJPILlKy;{P(IvzVYd~Hhte2k5aA(2R+TrOku-~+HM ziifa3Us8lmsDHNv_`_dzn*4;6Y5++tv)3;DNUyI{3-~?#_2DfEa86`08LY0ZBA?G= zxQOzQ&{+kkuwCta&CnnzL+o8rz>P+L7k{WD!BT?bPbBCg7})bZurpLp z^SxfJ7ZBKv0=$?-pi(Cvg9;t|MgbHJZ37Qf1|$@bs07T$F%`;t@?Gf6SDt(5-H8F^ z{YG&`E5K`*p8I3S=n9xB@FEs_B(&$k_2j4Xy*o#7bnm2^``cfi;^xM$wJ-#C29qEq z1S=3R2Y>3C^gI_@azFX@C&vi<46069*)b88{?GNLAQ?>+rPV?X)Ei3=Tm;GY(5^>u zbl(};T#C4OWvYkvjY$>}wlX&i;hCAKnH(gG#XshKC*} z@P8>qXkqDN$PPnIAwxqDAqR9k9ct^PtC+d;7RA4a@dIZu*n1p#v4VoNqQJ)=o>u?O zEWC+Z<*QA(a94K$XMabRjojukX1;p^FP!{*Smq2OyBoi=&Bj4!`^9i_@`j31n)Hh-nYU(mHYmeFyat>!!CBbn_(av+p|<2Vg@ z;07LWzeAC@j?ce&4aIU!H69n}+71Hu=lOPi2)7jiCrCmqwSEqONW_reyn&BqpI3IB zyDFqkoAT7J8vPwn)dJQw2?RO7@P4mPsAi18idEIMc)~Wo>z}HMfFoPmh|C=DpMQS7 z_r4Ztfi~T1a1Y)!>I2mFmdFa!?FDQk5EP)k_s!*Zuz&}y3stjVZK)!vDPR!ru_18h z!wude0s@>%Rtq6$+zoa0;?nm^TO&q1 zT*qEyjJ373jX=f5w__sEMGAD25;1P~0+`+<9B%Zgw@xp=o92H_1pe>iKj%r##08!1 Q%>V!Z07*qoM6N<$f~Xc|Qvd(} delta 1353 zcmV-P1-AP63EK*gBYyw{b3#c}2nYxWd6RtnS_v{>lB#@h@K3TD!XrKx=EO+qdrx05a|H{9A?EEe|}N z*)w=;NdN%D!^31U8GPSo`=-Zm4n!Q{z=;C^=LA7O00YBNH84<9Oum1cV#wWz}(_Y$N*GFUS6ZkGmvCK&2S1TVdP>F{bKY!vYnycaR7e( z^K)*_{ZdIo{A3uWiix4kYM|=UC~^rYFN<$|=P*OP`zZxJ07Jdwn8F`-uf$?ZvZ!tu z8mKnb$hpMgdt%ko46WNwv9!q9%O4;JFO42&+kd)oRN=;*pBkJKGz8$524GbMWkcr< zwrv>4FXj3A(t9j=*Li%+8d9kiN`cSZd^X-&v5mz1unhFC-o^Hf;}raRoW6LBApIAc zH;gj8@lA?BfioB1C+DWw+_wwQWthrds+=Q@Mc9ymWFd*850rt`&mjm`em_g8{n z3nK#u@QXPnCXbSLGqiW46KsaeF6${M8><>YlnPa)t=%Ih(|mRQ2!-N3Mm8N}WYYl( z#d~~t{s=jyXJ8ov#f)Ij+uXcT>YOV)seXrXEZ&2+`8N;;ip?b@~E^LaWl-BkQm z_ks5tRuMrg#$w2$hFRa2^(`Y#+i=K|+k;QRjFY&JWe{H+ea|2_T%=Sj}Q#aQO_00000 LNkvXXu0mjfUqp$> diff --git a/core/img/filetypes/application-epub+zip.svg b/core/img/filetypes/application-epub+zip.svg index 041f9f15e6..7de28f4f21 100644 --- a/core/img/filetypes/application-epub+zip.svg +++ b/core/img/filetypes/application-epub+zip.svg @@ -1,761 +1,74 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/img/filetypes/application-pdf.png b/core/img/filetypes/application-pdf.png index a9ab6d279b6147ad8d0f6319ecdde08a637c8e70..74676372671865506deb906403a7056324b81f12 100644 GIT binary patch delta 10 Rcmcb_+rc|Qd1G!W8vqtK1F--A delta 83 zcmeC+y~H~~*@J57= diff --git a/core/img/filetypes/application-pdf.svg b/core/img/filetypes/application-pdf.svg index 47c2caabda..b671e98725 100644 --- a/core/img/filetypes/application-pdf.svg +++ b/core/img/filetypes/application-pdf.svg @@ -1,52 +1,48 @@ - + - + - + - + - + - + - + - - - + + + - - - - - - - - - - + + + + + + diff --git a/core/img/filetypes/application-rss+xml.png b/core/img/filetypes/application-rss+xml.png index e5bb322c5733e7d2961fd27e049e4249a0d2a5c1..5b18ee2cd4fd647d820fc8dac732b7a53fdcc490 100644 GIT binary patch delta 10 RcmX@b(ZDf5d1LNfW&jpN1PlNG delta 83 zcmZqRIK?qR*@J - + - + - + - + - - + + - - - - - - - + + + + + diff --git a/core/img/filetypes/application-x-cbr.png b/core/img/filetypes/application-x-cbr.png index c61130cda313b1ee3858f8337e0cf0257bf6c6d2..c0d374a459658d2d19ae4a077152f47d6133c19c 100644 GIT binary patch delta 1093 zcmV-L1iJgR3E2pcBYy-SNkl-Ej8t&5V&?(?9=+2>Y&90~wnV`GCtp+KwEVtu8Gb0Fdn2TmLaI41}K z5{xzsRRaSx#eWpc6ph#RL6d8>k53N;U}kJ@Z?m(r!~Xt0Prvdo&N-ZuWECekafkpS zV1^}%0}xeBtxDu(@xISrg8`)X-5H)$!2v1?A_x||9-mXS9=X5@26`|CfZmswfvV!1 zLls0USl<;)fz$!=hW9oa09DO`P(uMHpeQ1eSf7dg^ndwyHH-IVRmAU#zL0h}l*A@YST{gTdn3-OS#yt79~XCTdjn&A{wg5{HP zjOFrKs>fF;MpX*A8Jg`~{%+mo_r^7D{`n=U?QYzdVXBxII%*7LrpA_wur#;9lMAmh zIWd)yDSt-u6r*{n$DiP_%8Ok6-0Zg32^;VuYyJYQO4ed+Z+<-Mbjo8g(| zH!0;86WLIZ{9yrv`N-TkMBGRvcXDEiQ?q9hS=Bh04;O?X?dFQhW7YlX{HaVmP|?vD z$Oy*ebo_V=lB9Oj@x)CVA|Tv4y6H-D~P|B!!Ldm|~o+qlIyKYfIHi{&*0 z^HGAZ>29)h`7Qp~tqle6$(47JLL-swGH`?#$W1z0`Cs|q(>GXpXpKh~*C|ggP&#&k z=KThRsK{dVaR8Q=R=82GrPvJ2js>72tZE>JAWTNW$)zHV<_}!C{vGXhXt%-zWfY@% zPJgeQV{Z0jpglASNf{ow5P9!2KtkOQ!XiSHcSQL-seS|u4%+wly0(QsP|DS*%>Cd+ z59b2!g9}3G@7x2O(~{}^+yqR|MpzQeB>jLoJz5NOtWVTR<{HXeM!mNxMv@JOih<7U zm$qIq)^|9tq&cwk?HIprWCk*|z-#PlNq>Ak(E45$;zl*yu#VLcbs0zj=;$6`eTD~1 zF%rjtcVoDqw;HCiAiEz(K*CNp3qZX;Tpj3S!657VTe1Nx#2Zz^kJ1&ZDp3@%u&_Y0 z*`!n`)76{p1BbGZ3dXi?4KGCHa(Sjwsa&enYA*xi^2+7UzT!a*^SRH<lMu{AMcXL8SRap(P;d0{50c;U{y@6A1PzVqGho_j{jjBHz9U%#}w zyZaI#E6+}HV)+{z~+;X0y4zv2jsKr4swv!pR7E zjF$NX)81dOzJF&^_-pSDZ@>S-Q@yME0F=vRcmDiq092~*{Du3yOOD*mKDYeiKmY)1 zYim?07254Kt4lLD2OT_2s1;61(5Bkh5$|!m7shf zrC-RLe18ji$VDE{(cu}$vY=)-1(gu_s2pRlc9xmr%T%KoDy2zUoo)VZ-{$w7YuxJCs*D@Dm#g7 z%74HEXrMIeXqSKGgHPXJ;h_~ConNIkF~|6^6SVH{P>HI{&pZym;=&R)nvD#bf!RX= zh>cYZ#1MqhNI1DrWvBH6SFV3YrxVJpa6uW>XqMAU=a`;48E6lMLXw7uPDI}O9FUOr zgRzJZl^s#JOr{H&2}1Q2T=jy`cKxoapkPK(vdeS(pkhM@suH4xu^+2|z~eawNyle9h{%`HPS zkjn*LyL&Cko)<>n%R;wM%@(YOs)$ksG5})V1<~htNQg*Jfp>@4g5GSHJq7uBA%6iR ze_oPP0P2fx!+{!zPeD=i{Uuoe3*CvT;fJY;Rh1};n46oU)oL+bsge54*MSE$OGS`~ zvE$o=6H%>Jo2=LCml}=6%K)Xaa{05b274T`nJ;}_tJNmAx3}-b@1*zNalKw2kD_Qw zRYz2HHk-|z>>GD|0RHdxFGi9=`n=7%_5c6?07*qoM6N<$f}Q - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/img/filetypes/application.png b/core/img/filetypes/application.png index 9152cc1b744f1c06d0d5ae87c2965311f117fc1c..b6b1bbce2f0249f7382bc50805372130089759a3 100644 GIT binary patch delta 10 RcmeyxzL9-`^2VG#W&jxc1RDSV delta 82 zcmdnU{)>HrvO5EFv6E*A2M5RPhyD*37#KJUJR*x37oc5!lIL8@MUQTpt6Hc}fECols5{%#s$ diff --git a/core/img/filetypes/application.svg b/core/img/filetypes/application.svg index 870a4ac246..edce49e3e4 100644 --- a/core/img/filetypes/application.svg +++ b/core/img/filetypes/application.svg @@ -1,59 +1,57 @@ - + - - + + - + - + - + - + - + - + - + - - - + + + - - - - - - - - + + + + + + diff --git a/core/img/filetypes/audio.png b/core/img/filetypes/audio.png index 3f56a7e2a9a976c91965495dfe7bc76667df5f75..3c78bcfd173c380ee4c8ccfb418ae5ef54954f1a 100644 GIT binary patch delta 10 RcmdnM_MCNs^2VGaOaK@h1UUcz delta 82 zcmaFPx`AzivO5EFv6E*A2M5RPhyD*37#KJUJR*x37oc5!lIL8@MUQTpt6Hc}fEk1+uN_!Js} diff --git a/core/img/filetypes/audio.svg b/core/img/filetypes/audio.svg index d5eda38e8a..1b37a1e6ea 100644 --- a/core/img/filetypes/audio.svg +++ b/core/img/filetypes/audio.svg @@ -1,49 +1,47 @@ - + - + - + - + - + - + - + - - - + + + - + - - - - - - + + + + diff --git a/core/img/filetypes/calendar.png b/core/img/filetypes/calendar.png index d85b1db651c258b22d7707dbdf57a19bc92f832a..d5c666a7695a0fa157806dff11aa3113bc0e1f13 100644 GIT binary patch delta 1217 zcmV;y1U~z<3d#wP8Gi!+002a!ipBr{0zFVnR7L;)|Nj60%ri5;ARxa$AQu-Gzbh*e z5)$D&Eff?K**PW{7#J277B@FHtgNitIwyU7ecL-H*f}ZLIVXRAe{gVcbaZsvJ1M@t zzSTZ2+&d|Me}8*>d&9%S+&U-MIw_^4rPMks+&U-RJ12d8eShO=U3qzV+&U+Dd3k+( zeSUs^fPjF4f`WvEgocKOh=_=aii(Sii;Rqnjg5_tj*gI!kdcv*l9G~?l$4c~m6n#4 zn3$NGn3$WHn46oMoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5(rl+T;s;a81 ztE;oAsI;`SxqrF2y*W0$y}iCSGrqpQz%MJnz`()5!NbGD#4#$wG%du$#KnDg#eI0i z#l^=(LdY^I$TTd=%gf9(Da~0*VotB*x1`nM%!9e+uPgRIw#!R z+}%+~-DzOm-QC_(N#0;u-e+RoYhm8r-rrVB-)Upt-+$lWS4`k!T;Sl~;aN=KYh>Z! z;o@3N;#*GQTu$O#PvU4_;%i>wY-Zx(;^SRU<6ckWUQpw1W8-dS<8Noq8n=4V&tc5UY7=I3cx=jZ3>Yg*`RTIlHL>2F=> z>FMfoV1MfB>g#r5>ywP@>+9@zW9)fk?Ck9A?d|S;XYQSq?wywI?(Xk_YVYsw@Puse zq?_>Y@bQLj@u!~g@$vHV^7XZ-_PDF}yRG@Yulc~R`uh65qU?qM001a-QchC<0R;#M z3k(hs8XF)ZIC7SwrLV8Ixyan#;^^`9_V@Vt`G5TU{r&#_)ZRki0006MNklaVN;ZsA>F>A_Wy*0>brh0!B@#>}J5fz3jUWv|M3H!6tQI%PUmB zqyDDgYVe8A9PII~>p3pS#1!rMUk~K1huIlyZ$Nf2tO>_)lL=(Z;{IHJpxEU{b_8f3 zh>lf`4w&mCz>r-i2YscPVHpsD^qC|5AAihud?=&rQqcWEnvr8hK#Hp8cOy3IvEiLi zjeDUARB0fc^bDf+6Gc^(l!DI}Duuw^&cOVdEd;EE?3$o^(V^wiUC(B~#5y{~z8~l9 zlWrcgG|YGc#VEr%94@z>pN0@S`2=IJ4ccMUW~PlaVAkXlw3@$;jis~CS9l)zQhyK4`r+C$moyXy#T{@Kk`TE+40?>NZO#zpz;S_+rA})tOnmA$wz$U*z fx`oyS%j5b73{oMzCV_|S*E^l&Yo9;Xs000ECNklIY?2b;s7VVfh*C%&5)BwqoR@v)(S?04Hsoal>PRDhcYMx#-<)%1 z=3e2PDF}L1L zr=%303&+Pm0)HU!<#%*;cCxUrkeqw(z_#+Wfsb+UjW7LAU(f&gFtmLl1>!4#>_-p_ zM@pp|t?n zk&j;T5K1AGL@EhVR2{9u8jCX)XAD0))RE7Js)92HTYnB%F8pklW(vW9@tcW|vmphp zQrRbCah9?_A*4Y19;?R&C>D#fB;u^zC?GwB@Tww&tOn588o4%DZCHKdSk)&UXQ?oP zt!SKeh_;udL5X_K1_9cFU8`UNgH!^G^gOt%AMaSFMk+Ztwzum?If$aii&jwI4~8B>U^zQ z15#khnzh+mRl@eph`gbaA6GQaIZU~NnZ1RxpgK}m>k!sqN=s-2+}jcHHV7yuc5?sT zeabg(@FH6Ll~<`KAF*82>k1eh_<)lqPhu;T7b3v(eXwRHugQYq5uG%xCc z5`RLFN~Ib_)jwEkf$IHm{`~o-PQT4sJRaxFnKK9>B909OguPTM(cRsR5Q3SR8Pe%A zi9~`zp+Hwx7fPvZVSvfW$%uGM0pTqL5R1j4hQh1(+bB$p-?D9;kAWHK3~l-t7ATE@o4o-GAo4nrJ1E2WUNi)bq>YKK-+DF}ZrUc4Cnm&@fMJUl$y z6jn+#p8|k^fdK%<#>VLB=^-AEGcqzlUtb?mN`{Ar85|sp2-m|}YjU|3$wVpW?d`?)eMUw`$Ye4&=eTs~QUgA5;zR=uqct%x(flr`due&< zFbP)@+H8dD37bxV5Tc=yM@L5^+<)vYXl-qcgl#H72=S;?Dzzq)Nsb>s&hu=}Im+cS z&bbB!-V=5c)6>&^Jv}|X@B7bH!1D4kQ&UqF;QRXV=(}L=-o35+_wPU0+uQqDGMOCY z@tf9jX;R9Sa=H9lKA-<&c6Rn=u~>Z6AON7Fqhp6LX1C{gzO`0uINP%cFeX~-ic;#| jyLay{hvN+b{*U$_B!A_$K<>YO00000NkvXXu0mjfF@9=) diff --git a/core/img/filetypes/calendar.svg b/core/img/filetypes/calendar.svg index 0016749b93..7d62bb8fa1 100644 --- a/core/img/filetypes/calendar.svg +++ b/core/img/filetypes/calendar.svg @@ -1,94 +1,89 @@ - + - + - + - + - - - + + + - + - - - + + + - + - - + + - + - - - + + + - + - + - + - + - + - + - + - - - - image/svg+xml - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/core/img/filetypes/database.png b/core/img/filetypes/database.png index 24788b2a37f04a4d44d09fabc5ef8c062015fa42..49b2b861757e7bddee8bc56f61886c8514015f04 100644 GIT binary patch literal 1117 zcmaKqX;9Nw5WxQ-NCAOD(c0FLqg9zw7^NelgQEhCN~A+0$b@4=2r@y!F+w;xEdj5z z7z8Otjv^+SKq4W5gj^C52uTnK&=e5DP14e!0jaGZL`q-y+L``l-@cul-M4Sw+cH$t zc~|F8oFNEuMMfZ^!R}*Qj&Pt6%)43$f>}{tUpl+Jy$wA7k60}JZ-7uJ3fJw06_ zk$^~rLQz;)2m(kX($LUQW@aXdR8FB#fq!5?*VCic>2#n+M1f0 z+FEj*4GOpzC`6&qs8k?7(`Z2IAJ}MUXrMoS%wjTGELKxvBfF`I!)8C>a5yb3yp|R| zkH_b?3R+tQZEZq<07$z)C~9vPi9`~SSSl7vB@&rb`cx+Ccnav~ly@pR6-tFdsqE_R z>H;sPQmH^^8ns5N(P*{WUTtr0UtfQJ{{U!t05oZ1a0l=tfZ-i}*+H+@|GL8nV03hJ z%*J!T`1r)cgu!5#oSdARnws8WW^QhNVZmrJnHCopmzI_+7Rw=jPusVK5Sy^3u{ny`X>oztv zHmz3c*4EZPZGYa{1BPlCi3q!NVn9>fmhBnlPQ(@zyvk0qTHFmV`@6S8eKdppk6n*SQV5m%lks_1LdG{~ zY{CXkV83GdL36I~;>L^JPy|%!F;oO^U5J9;4$0dOxjNQCeu;;h6Nbake$x>CwD+v` z82@rs81knFfkWD{C#tuw!C3x2I}YUk(g!7!2~7@Nza_Zb$BxLKF+B5)JcpxLJ17)_ zT+HU9SrUqum%bpzcltZ*X+m^yN~D8n*>ETA?po6E(lf>HOt_2R6a{4*{CH;O)SE9z z2fde#!=5-UJUZdBQe%){291jTv>d;+FJ0*VIL7Y*If=-;Ib*j;df;(NrO`TDC>Cg0Tw=3`$~HzFB(*zOd_ z;Z=P0J-a?N^iwO9#OdSWFh}5cx32HYv!nQ3zgm^38t%a%oC- delta 1364 zcmV-a1*`hq2;2&g8Gi-<0047(dh`GQ00eVFNmK|32nc)#WQYI&010qNS#tmY4c7nw z4c7reD4Tcy000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs000EpNkl zrGCG0&s(Nxf^$9y04Svf3BwSM<8<5Y zHYG{Y)>{80rCh##{kn5vfP44ueW|tnHkZqr1@?t=4#pUy zlxVeDf$KUU5q-6^wDiNV0Qc|T|Ace?OFn}`#|VPpR1+U;LI{}Vh#iK(_vr1R!vVC$`yjyYc5zk@sYptg zW(Hd8nIX7?9gRj^T)K1#p0@|3)R_Qq&S8&cQEfDav>yWSJP)0YgLC;Df-r>V`H)hc zYGT7MV1L_LjF=`m9S5H04UHKBAR_8?9Qb}0#o{EUr%E6Ke7_5CZx6AIp_D?LYS+I) zk!mRn0ef^5*{lVvfhY>mXzV~r2_m9n0m3kB#<85@oWu9KV2s1EESP2jA$r3Z>#5fN z9LGJVzAe4)40O9)_!#;3QCMgI5V5A^C4NF6506?cn(x^0XdesRIX-5Ja0z}6E=%Xe)*!}^I WMmcxN+me(30000 + - + - + - - + + - - + + - - - - - + + + + + - - - + + + - - - + + + - - - - image/svg+xml - - - - - - - - - - - - - + + + + + + + + + + diff --git a/core/img/filetypes/file.png b/core/img/filetypes/file.png index c20f13c2e13af5bccf96b77dd66a6a0df0508c90..54a242d9d29e80a41d437dca7eb598108eebf4f5 100644 GIT binary patch delta 10 Rcmeyyw1#Pd%EmknMgSLC1A_nn delta 82 zcmZ3(^o?nPiaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt h#G+J&^73-M%)IR4 - + - + - - - + + + - - - - - - - - - + + + + + diff --git a/core/img/filetypes/flash.png b/core/img/filetypes/flash.png index bcde641da3ca196a8212a5b6d91a62013f1430ab..75424f81d68477d9b2744b14a3b36d05d6787538 100644 GIT binary patch delta 10 RcmdnR{()_R^2S_WW&juN1K9uo delta 83 zcmeyswu^m&vIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6!0GXnsmnHaAC diff --git a/core/img/filetypes/flash.svg b/core/img/filetypes/flash.svg index cb823703d9..b373fd6512 100644 --- a/core/img/filetypes/flash.svg +++ b/core/img/filetypes/flash.svg @@ -5,56 +5,52 @@ - + - + - - - + + + - + - + - + - + - - - - - - - - - + + + + + - - - + + + diff --git a/core/img/filetypes/folder-drag-accept.png b/core/img/filetypes/folder-drag-accept.png index 19c2d2eebd41e50454157f035df9c69dbcfc5717..086f38afd83f2ac128064baf4f655e0f198acc56 100644 GIT binary patch delta 10 Rcmey$x|(%@^2Xc_CIA?41O@;A delta 83 zcmZ3@`jvHpvIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6ycF#!OeXc*i8 diff --git a/core/img/filetypes/folder-drag-accept.svg b/core/img/filetypes/folder-drag-accept.svg index a7885c80be..5ee8f0e5ff 100644 --- a/core/img/filetypes/folder-drag-accept.svg +++ b/core/img/filetypes/folder-drag-accept.svg @@ -1,335 +1,60 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/img/filetypes/folder-external.png b/core/img/filetypes/folder-external.png index 997f07b2bacc1ae5bb09b5addb1539254fffb6c6..7da0a42fc24f503156c0cd26db2848302c778805 100644 GIT binary patch delta 10 RcmeyuzKVT<^2XeDW&jv{1PA~C delta 83 zcmZ3*{)K&lvIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6ycG6Mji2N>P} diff --git a/core/img/filetypes/folder-external.svg b/core/img/filetypes/folder-external.svg index 89ec9a8eca..bf07bdd79c 100644 --- a/core/img/filetypes/folder-external.svg +++ b/core/img/filetypes/folder-external.svg @@ -1,68 +1,60 @@ + - - - - image/svg+xml - - - - - - + - - + + - + - + - + - + - + - + - + - - + + - + - + - - - + + + - - - + + + - - - - - - + + + + + + diff --git a/core/img/filetypes/folder-public.png b/core/img/filetypes/folder-public.png index c716607e26e3c2cf8f82dd754e820d475cb99f70..4758fb254089711d4a9f8121659369b29a4a8df9 100644 GIT binary patch delta 1259 zcmV2#6G{B8lYSRm9D=1Mc$`V-z27;^| z7+}~eb}CHSTNz{#sDLbyMV5ew0x}?rY(k4{f`gSpuu97!!&Z%LL()Kd(caJy-k$R# zzZ2#Mp@DkipFGLTci!)N-*e8)WOf1A^(J|v=5GVM4WJT$Jb!uwlTD(v69G)H$>*hZ z`vQ>1kPcm5UdH0$;)YPo7EX!_U9JG8OG`_jye`11?!Q94I0Gy!EMRVKZbzXWDgn&- z&H_(yXm@r|DJ~b3>?qWOdf5s*&aeUe!(z(EUd%)B+n@gnPk;Rb{$bG-YyhudX~CUG zvuGH4_F8HlDt{o&xC);jDR_=<;C~{5H+fBKbZs*;S|2}yPe{}?Hh@Q91f`hjVPB$2sn0D(9> zxl%rk%Kll%9&(dj*?|-0Hpr=HM)MCZkYCe|%+fk!m4DU4kkn2o)Gb$8!kAvqdLg~aYFgAtxm z0BZ+V_(mi$+WLVRkP~HkxMndPJ)>|r6PmyVu=9~b6y1G-68SWW?@y^9NiKk)g$-)H zUs=D=H-C+ras_P2{U0~8h7nnF@(p0tuF0oxrM8Rd;hIG~uC@=u(N7{}16T>gfjKQh zDD0g={=G>Rgn{Rn00liO@6#Fw!E^J60XceFr`UV?Be!dUSx=I6z~hT3&RNvsO6w!= zMFGKV05fNw)9DQZ$nBm)cBeuGa|a<~7E{^|VSm`yFyK3ro%5O6D)jS_+Bn4M3wx*G z=qurzMLjZ_24OBZ{pxqXz)mPks{IaG9SUUJolwET(Va2yi_V0#+oz2AiI=9U@Q5Z; zso%jnfO8hrB-i!B(81G_4RF-b-u^qZm;TX@^i4CBoZ*D0i%~X)sGOmIoxd{4X*A!QA zILiBciIdpoF8hR!x&^4-|+V$p84}Wo9 z%M$fe4sgIPtKqM&ZjT_i`p0#NBD>0NABXs2AuN2tq0bk<*v<_upPxe@xpTTkH5<*K z9>nW!>Zu$+%RRMbK9mRoWKUSmau8TKjJW1;TxwGwr+b>=QriTnjgd8~dHjkBRYGnJ z!#%Bfe)Ui7YJd-fiDkbhG>>Ad#AG*Z9qP6A1omoM3S_#c{Cafle0#Tx!*;&+*FrtC z`J!6lxlcL3yBZoAd)3s`J|t*wGdgSdhMbM{`CI}091SL4_4wRgjfmue*i*=r2yW0wATOVluRZs z`mDIhc?Z4sCx0#h08+-71J1cCdOPPZ##9uka+XLWR+Y|2KFDM;D5b7ew<1fWQkPr{ z?>+Z5uUR{@v2o+FC5xJ^wbv9N3`2hSxn<8lx_9gD9os%i0L)#m@bOKXUT#i=;WeH7 zqCL81UGwJ6o4bJv0MeRVTW<#AuiO^2k{mwp4c%u>(tq7?iZGF6+N_&tXuO5Rs~#Yk z8h1sFR0!I+7>bR^8edS#V4O$Wu}6DbD<8kTnM5e?Rw46QWPXS#lk2IesbS~V4`^>| z{YMSsJW?5~aRn$Ap*A{}+5id0TAjPv|7837Z}QZ08);g&m|3$Mxo6o*gb4U#%X_@= z+FLAHv45IRw{F2$PeapfWp#uAV-4Ebs1yNXZ9!^_v6Q8b3NgF3ZDIL+4={7yBF=R8 z(AnL?!F}J+(bYpuO%1ztZl`BR^5_#!a%BJ4M1{C~1T08xFxnJK09u}WZ( zmwcw5m5;3_6Dz7GPGZ60<>UtYIk0O7xm=b^-+x)ObEKtX#eU%uzei6b}}5eQMLnR92m$Y-;RudZdv>|2Pk zJAcq+0GtPDEK0`10I`yhGKOTaN=FxtzyqDF#~A2p$H}O4@1oVz){&~JE#}(bof{KC zX-ll+Fo2AsNEu7Yl?RwUdk!a0wD9Y`F9`#|rq;h9~jJ+0Q%2$MOs_T7~Lx^1%Iob zcm@!h?KnyMvBUJ|6s_kYbh5exaG@Xt53PTev=n3X0gp14!M?xpr4*=KPD`V;_C8rI zZ{P`Q8(91NE9}|!A%E=u947+KxBt%Bi>$lu(jb{gW_%9j8D002ovPDHLkV1haJjnM!A diff --git a/core/img/filetypes/folder-public.svg b/core/img/filetypes/folder-public.svg index a949833f95..04a11f2689 100644 --- a/core/img/filetypes/folder-public.svg +++ b/core/img/filetypes/folder-public.svg @@ -1,68 +1,60 @@ + - - - - image/svg+xml - - - - - - + - - + + - + - + - + - + - + - + - + - - + + - + - + - - - + + + - - - + + + - - - - - - + + + + + + diff --git a/core/img/filetypes/folder-shared.png b/core/img/filetypes/folder-shared.png index e547a242062eb9687929fb640e99d33468e85500..e3c0ee9815abeb49ed7098de5a550cefa57edb58 100644 GIT binary patch delta 10 RcmX@h*~~dXd1Gz@3jh_81DF5+ delta 83 zcmZqXJj*#j*@J - - - - image/svg+xml - - - - - - + - - + + - + - + - + - + - + - + - + - - + + - + - + - - - + + + - - - + + + - - - - - - + + + + + + diff --git a/core/img/filetypes/folder.png b/core/img/filetypes/folder.png index b7be63d58369d5da485f12ead9ca6982c8e8e563..bffa01fa07128b4bd52fea34d28ed6553f2e43f9 100644 GIT binary patch delta 10 RcmX@g`kQ5f^2Xc4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6x>F#!Oob{NY5 diff --git a/core/img/filetypes/folder.svg b/core/img/filetypes/folder.svg index 92d4cc2271..8271ca3793 100644 --- a/core/img/filetypes/folder.svg +++ b/core/img/filetypes/folder.svg @@ -1,60 +1,58 @@ - + - + - + - + - + - + - + - + - + - - - - - + + + - - - + + + - - - + + + diff --git a/core/img/filetypes/font.png b/core/img/filetypes/font.png index 9404c3ca6ac330d3639a00e0b4c618e52172c2a2..535e03dfa7719300249d7142075884ada1dc5e92 100644 GIT binary patch delta 10 RcmZ3;d!1*3^2S^fHUJh~1DyZ> delta 83 zcmcc4vygX!vIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6y=u>k;>G8l6J diff --git a/core/img/filetypes/font.svg b/core/img/filetypes/font.svg index 8fca5ff9ef..13c0596006 100644 --- a/core/img/filetypes/font.svg +++ b/core/img/filetypes/font.svg @@ -5,33 +5,31 @@ - + - - - - + + + + - + - + - + - - - - - - - - - + + + + + + + diff --git a/core/img/filetypes/image-svg+xml.png b/core/img/filetypes/image-svg+xml.png index e3dd52489d3772962e22cdf47569b53616fe73eb..a847f78fcd8599ea8787c56cfa845a43dd128c7b 100644 GIT binary patch delta 10 Rcmdnb{*`Tl^2XdCW&jvc1Lyz% delta 83 zcmey$wx4~1vIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6ysFarRm*BHJ4 diff --git a/core/img/filetypes/image-svg+xml.svg b/core/img/filetypes/image-svg+xml.svg index 06df5f54da..1f0a54a21c 100644 --- a/core/img/filetypes/image-svg+xml.svg +++ b/core/img/filetypes/image-svg+xml.svg @@ -1,56 +1,48 @@ - + - + - + - + - - + + - + - - - - - - - - - + + + + + - - - - - - - - - - - + + + + + + + diff --git a/core/img/filetypes/image.png b/core/img/filetypes/image.png index 087f5dcdbdf61777512cbf7985715f0a12124a19..5cdc05029af7048f6283b756ddbead27bf7367ca 100644 GIT binary patch delta 10 Rcmcb>-p)Qjd1ForGXNE|1DyZ> delta 82 zcmZo?zra30*`0y8*vT`5gM;JtL;nX13=EtF9+AZi47}Gtn9)gNb_GySvcxr_Bsf2< iq&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j8>x+oY0LoQh8g7m diff --git a/core/img/filetypes/image.svg b/core/img/filetypes/image.svg index 50991f7359..86cbb633bf 100644 --- a/core/img/filetypes/image.svg +++ b/core/img/filetypes/image.svg @@ -1,61 +1,57 @@ - + - - + + - + - + - + - + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + diff --git a/core/img/filetypes/package-x-generic.png b/core/img/filetypes/package-x-generic.png index e08cc5480ce6d314765a370c2d9012772305c7fe..4f5c6583bf1bf06ffc3b8da0cc2ac5cc94ac8ca3 100644 GIT binary patch delta 10 RcmbQmc7b(*^2Xe?OaK;L1NHy_ delta 83 zcmcb>I*V4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6z9X956_HW
+ - - - - image/svg+xml - - - - - - + - - + + - + - - + + - + - + - - + + - + - - + + - - - - + + + + - - - - + + + + - + - - - - + + + + - - - - + + + + diff --git a/core/img/filetypes/text-code.png b/core/img/filetypes/text-code.png index 753d151f538842c2636a94e0f9231fc4ef1c301f..c0e7590108104033da94a62c93ac28fef9c14122 100644 GIT binary patch delta 10 RcmeBSKg2dcd1J0TGXNA;15W?| delta 83 zcmX@a*26wQ*@J - + - + - + - + - - + + - - - - - - - - - - + + + + + + @@ -58,9 +54,7 @@ - - - - - + + + diff --git a/core/img/filetypes/text-html.png b/core/img/filetypes/text-html.png index dd17b7501034216c35e9273dc7e3858d486d2aed..c3bbf2bfd91f2ae6bba5fdf38bc8903738164653 100644 GIT binary patch delta 10 RcmeBUJ<2jcWn-=)695!y15yA0 delta 81 zcmX@g(#JYM#f`bx$uoq5gX8u?{|5{V44efXk;M!Qyw^dP(Me-=1yE43#5JNMI6tkV hJh3R1p}f3YFEcN@I61K(RWH9NefB#Wsf~&%OaR_i8JPe8 diff --git a/core/img/filetypes/text-html.svg b/core/img/filetypes/text-html.svg index c41964738d..99215d303e 100644 --- a/core/img/filetypes/text-html.svg +++ b/core/img/filetypes/text-html.svg @@ -1,49 +1,43 @@ - + - + - + - + - - + + - - - - - - - - - + + + + + - - - - - + + + diff --git a/core/img/filetypes/text-vcard.png b/core/img/filetypes/text-vcard.png index 2e52d1ecb3a51b897b64d06b8db16e89c398b9e6..6849792dfd24e77b10f02069a402d2ff59d3319b 100644 GIT binary patch delta 655 zcmV;A0&x9~2Alet>|0fq{X8gM)E#aWXP8Gcz+hJUl%;Jw84@KtMo3LPAAF zMMg$OM@L6UNJvRZNlHpeOG`^kOiWEpO-@cuPft%!P*71(QGZfWQd3h?R8&+|RaI72 zR##V7SXfwET3TCMTU}jUUS3{bUteHgU}IxrY;0_9ZfYbpQWXxsi~>0t*yAYxVpN!!^6YQ&d$%z&)3)2+uPgR+}z#W-QM2b-{0Th z;Naom;o{=rlt)=I7_<=;-L_>FMg~>g((4?Ck9A?d|UF?(gsK@bK{Q z@$vHV^7Hfa^z`)g_4WPz{r~^}qcrll0000HbW%=J009CI6LWi}rlzK*rlzK*t-3L% z_VE~0)Pg9&Vv%(`M3qZLI8B_q~yRlzyp9Ru>&Y8 zu)Rflh0pZWU7f^2$o0%7m$$SpcZ0ocR0@l;b#bb2a3*6d z#D5EA9e<#LH1gE6B^&}<@j}hs_;iJCaud;0GtRz1<`?wUEDe<{V@+SpWZYT7&EI1s zhRnaGVNPV>^y4~`LXM7mN&z5}=X*)v{4LugGn5pD!(H}NQb-#9L&LQE)dvB6Bmiy; p1bhD%PDHLkV1mJJL%IL} delta 769 zcmV+c1OEJ+1&#)g8Gi-<0047(dh`GQ00eVFNmK|32nc)#WQYI&010qNS#tmY4c7nw z4c7reD4Tcy000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs0007uNkl5M86ot=S7Gq#}DOL!9gp{T+1X5c02P7aC?*~|GwuNZfRB$42q8iR&~@cfP`>8!wuB+S zm`W@uW#|xr0Do2)!j=bM_Vz!K0aeV++X80(F#u*>4=|g&3gG4C1@(Fz4-XGuW+V~` zq|<2}9UZL%P$_V?>G%66l}a!S1KDgA*=!cNuA^Ko}RXti1}O%wfoACHfZ zAR?HiiT(Y3Twh-!l}agnq4j~mV1V&>jLBr;cFS(Ji+}CyZM?p|`uYMD;VMJ7+XWH9 zaU6H<>^U3`SJqA_MK}YPPNxe2i3pmeVKf@SFbri(l>#@S>2&I*eg>dvnmZ&c;$z&4ocpQ%7EWp~fjeI^I zxPb-EfPWAI$H&KzQi6!U%n(9gcXt=MuCMfl0&sVChpVeAFtdAcVP?F&y`fsIF0}Hm z0DSo@7z_re)oN(B+t}LL!u$KXTZEQnAsUUM*=*wW_7>;o=bpCw?X%$G;sS( zh(JUh&kUweD4@}3DF0sz;Fq$!y*)fVJ)zg@DS89V%QQ`o|J(P0N~N-P;dzZlBTr0~ zzFY&AWd#CQmR}8od-?wlZQhk^BLH+=Mh5VIs2P>ety0u zB27x^($IWr=wEmFwG0-b1OQ9UElOeUbx?f*yVglZ`4!fZ00000NkvXXu0mjf_dQuS diff --git a/core/img/filetypes/text-vcard.svg b/core/img/filetypes/text-vcard.svg index 27054be57e..f9d50fef77 100644 --- a/core/img/filetypes/text-vcard.svg +++ b/core/img/filetypes/text-vcard.svg @@ -1,60 +1,53 @@ - + - - - + + + - + - - - + + + - + - - - - - - + + + + + + - + - - - + + + - + - - + + - + - - - - image/svg+xml - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/core/img/filetypes/text-x-c.png b/core/img/filetypes/text-x-c.png index b9edd1e866e457027339e21329e367e84f9dd304..2bdb16a2a770230e7adab3350a70f544a33600cf 100644 GIT binary patch delta 1209 zcmV;q1V;P83d{+RBYy;wNklQ-9g!XZs8#lSw9<&1O8$ z>#A{?^w_{8DT{Ruk-@852vD|S~DJ?fh#1QcV&>*uygr%2nSX@b8G&XZMa{zZYZk(TL-?cU zlJF8ysZ}6X3lQOh20`a#n9(GBIfQxD!D9mh_~6H7ynS&1F`0j$1BW8eicfwiBAgq> z67ifTi*W0!IG^Tl<%Jx0c6YDWiUvOYbrZLZINVqgixm&~Qv>+wFBQ}0dOJUc8)_8> zNw})Tfqx~ZfURufQXhk-PjlGW+N9DNB&SP~^y-sIeEf3}e{PwuI1$S{i+iOaUU{Nt z&$>ra!h$1$RYE8mE)SZ{EBR!Hv}tY?msYhuBE}o-I9;5;jL*_I3f5 zl7mA9&ol9OHhQ4oJe7+-GN+D2V5>&*JmBRV25l9BO4tqxy^KoDj8 zet#3sjiw&dh(?*E*NH@;djuL7?~(A`LWNYCFnm_PTG@tfyB$}ee@2E!C^u$Ns#=yii@Y@ww3eH5r{^k zcx@_-TVJf8BE?YlL^xsu*^vp%k;q(ME)j*3A;wb3j>fQFCl%E4h%V@e6j$-mh0)`k z0@6YS33p|j!$-f(!%hyP7EWNv1Y|x1C4ZR?q_{*XqN(nlaaXS)r2dV!p6P{U>R==( zNYsvmh;}@5pA!;rZIZ)h3%9URPQWMI;7eiX*2A*vSO&1Yh+ba9tLH*+wF)$W35-*< z>_~`c140*|zafdi^r($HY5_NQO1Qtn!0H_U0y3!BOMwB)ult4b8 zrym$WA)*GUVM>y|qkvC&XbV#cyzRad^sIid^#e~O&pp4>0B7P=iLTf zlVSFEt9*-ber9GyTv%98aRMk53Nj+KK_cO_B|u-034P>J#L2+&TlS${4$uiE{wMqc XM5I0?VEUtc00000NkvXXu0mjfaS%cu delta 1327 zcmV+~1YTDR$`1B6YHDh6 zczD?0DX3U1#uF10`PQ*5f%^LTL_VJ%kW%hza81()f?#R$_!a=)_oFC^*qoWYN(h1P z`%y;#DJ4p&eSZgN`tAtOD$nzX;}{_XLI{#1!7vP@l-JG@np6B6t9;Rs`r9{_tgb)CPiDbUyV;Cj_j-pzvlFQ{tr_=if(6lfNu`G+a z*Wmk`A)fBgm3A=FLl7zAnooVT!RflkYbPAEhmd;)aDN;J(=<^^FP+-820h&N>|dw4ErM!OLFAFAE_~{vdys6A}qptw#FpO|p0A$SllZ6z`F^ zK4Gl5R)2~~kBsp7uZvXuXvaglV+Jt}TWb-Gx%ED%~-GTvI5?4!*$y4zqgZToV{&%ru6+wl3dw`Ru~U4SqWUv`)5kI5VKQQh7j<8KCB*=*^Ds z@z1loaztaa-^L3fW=aW{mlQ)sPY{a~L4N|uE%DMpr)?AJn1M_t!#fjQT>tJCHM@tZ zw1};4^2bkexmx1VjS50ISUvsZ$9q_G6<#PwLZ9yPJg=V{?^p$G525e-R4QdIp48D7 zuMw|SSPc}jWkpHrC+<5&qj!|$IKym7;s%P?Tg6$v&POli2m_xaN!lL5wv8xB5`Us7 zB5T73XLP=qzRs;`7L^@A*ByuA^xh zx~`M51sBF6ZkATK`k=zS2ZDywQ3z};VbDx?c~o&Ym&URTbX{M!U1gwkQlrrz3_~<2BIdZw&mXC&qhqsLFq&?jQ z`>DqU5JCt|+fto-mZoV4vGs3t1Aq|1n4Fxnrl+S%`%VC?tgKi<2tz3quPDddoR)`_ l*3$q0LbWO27J&a-{{cjod3Xm9dgTBB002ovPDHLkV1l@CffE1# diff --git a/core/img/filetypes/text-x-c.svg b/core/img/filetypes/text-x-c.svg index 35a6a0cdfe..462286754f 100644 --- a/core/img/filetypes/text-x-c.svg +++ b/core/img/filetypes/text-x-c.svg @@ -1,75 +1,70 @@ - + - - + + - - + + - - + + - + - - - + + + - + - + - - - + + + - + - + - - - - + + + + - - - - - + + + + + - - - - image/svg+xml - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/core/img/filetypes/text-x-h.png b/core/img/filetypes/text-x-h.png index 37a8805b50696aa9cf36c610871a96cb1d5b3bba..7b4a36cdbe9e51389769429a2e9a8ae394650feb 100644 GIT binary patch delta 10 Rcmcb`Ie~M6^2Xd;762BO1HS+O delta 83 zcmbQhd5d#`vIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6z%vj6~*a2S;U diff --git a/core/img/filetypes/text-x-h.svg b/core/img/filetypes/text-x-h.svg index 38ed04690f..9ed1bd6ff9 100644 --- a/core/img/filetypes/text-x-h.svg +++ b/core/img/filetypes/text-x-h.svg @@ -1,79 +1,74 @@ - + - + - + - - - + + + - - + + - - + + - - + + - - - + + + - + - - - + + + - + - + - - - - + + + + - - - - - + + + + + - - - - image/svg+xml - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/core/img/filetypes/text-x-javascript.png b/core/img/filetypes/text-x-javascript.png index 24d09ce978181c4b08b67c879553a75fc3c1e97a..1e1d3140f63cf6bde1b015abd154e351da0d16d7 100644 GIT binary patch delta 1224 zcmV;(1ULJ<3fl>gBYy;Z14}iXsw;Oq%A=_Rh?` zckX$(NHdN}n8><<3mAh0$6|h!RKP@gDP!Du?y|l5+F$uk|ZGvL*%bn zv@6I2&}G~;H-D3+DNz)W=Q+#E%S=s8QLEK<4`BVt^PGuqKV;&T8vtSH>#^51^`h5Py;F0bCr&f+;`*?}GmS#oR9x zpTEKM-f@D70F(wa-dE_hzo+%~7c>sPKU^BN+ij90p;D<(GZt?xB7!xB`T2P=uNeLG zb@uPI$kI<_YK+xYL6;zoEZ$jy8}7Vd+HR{7Hk(bF%_abCRRZhr;!&cQo}NZUBP7Z~ zmf#8adw<>$Kk+I>H(~L|FX{dKHKPwb*7vuqN;pWnu&_XyrYNOo7=yPC1iTwOq~M)^ zDX7;ht4CiWe(+hUhn}W-=;=*9cbo+?Gc#)nAb9IRJl@%V_cX7g)Bb@taE$7+)O60` z(N{R58&n^89z8kpAHSQrN29J92v#M!fFaevn0t;1W7wVu`0RaRD3u=hO4Us;pI zb1{w(WjajmNw_*bMfbfI$$vk&r2=ZZmCQSjw|))64eSZZ$m1{3yZc%GSR7%oUB&wV zm7nA4aYN^mH-|4o>sb&*5hKR*KY??GBuU7VE)+QgWjeJh$sT-xto19MZ$9SQMj46> zO@D|pJtQb^zYbim8hQo}p`(}QgtbwEcb-GWCUE-?AmcN{qhna(*A#OeYaA$jQDwJO zpkA+2tJT(0Q~m`IFHB4{abX3ke|41R`Qaw6mr!|zR{^KHn)JrI(0ShP6MtEj zAtJIGC1M3x)yC0=~;6Ca@3?VxPxZK~z|Uy_QdiWLFi3 zzjN!pSM^?XO?7peuI|xj!#L*OB48Hdgb@N+L>z;lVpdsXlYfB(+(<$e31pK+AR8qF z+=ymCg#i~55Ql)caS|7UCNhdaWI~7P>2y!e%&V&RUcGzo$)cw#mHwCRa^er(qHbNz z`QGoIbM6yWWm1yEWS5;N9(|?)&RU$&3=hf!|gb+~GI}WfN`*Q&%m1P-KRUsl6W2mZ%D2fOnjDK%y zetv!`s9gZtZ$J6$w?668VI13Q&w&70mXT!{aU3HbUcrWnLI7JQeB}Z1JSRyK%Ccl* zV}qroC0ec4odei@%CcnP-Cwit;Jtvbe)$7h-*_Eqe1G{+Nu~y9Hk;JzbpUEnjWqu^ z2-IS`RR>2b)Ttc+&=64XKm@#*s#6XPFbU$l$6AYq0M3Iz2(`}u`1Oy-Fa84QZ%~UO zg7;)7hXdFj$b+ju1P#&n|LW>Lss8X&j-Qw(T8O|{z@pk<*#8^7 zH~vWHxqn~n8~?x~==b|%Sw^GLpyfR3JtBg4j+K=a3N_6B{x$A7;gR+CDa;(3n}V%D zns_vLqI=Km*|z%vOisdXw@bI%1)y(g;1w0ch~fD03)qt|L>$xVAkHGWlPpByvz;Tq4|TKU>BD^ z6L+V~K>%r*vcA5~&6_s~-lIOCUh!Vp+}z~)_3QXYpW?%!%i67!K#Xw%7LR4zonB-3 z%YPRrKe&9L1A7AOB@K#t-GT@cd!jn>#EXm`d6xgI&9K&Qq8ee!TiiYG82s*M2gW{B z7bHo-jC1272*HtM8D%zvs)VS{p!Fq+$DgO@{fognzvZi)I#dOgnBYc8R6qP2*mD{x z6Ga#pl_ha&mgwg{M&=d>_nboJmq};m@PAIX91Dtf0gT<(*#jMDx7)N@t*zFSPXR=Q zg@rC5Zou3u%iWUU%G=~uEuzq#Q?wdU(j>GOr|*KIDDd9noTCwR3=q6hRTY&B*kVNK z64I6>6*G=;qe|Eq7>+&j()5F9`>RK8Tq81|&O^=O6o?zdB2?dhj{jc12p?a?1b>f; zKw}2(KSS%`vq+;c-5~0}{Ts?S#T7a7*SEN9CPzmVlGJe$jjv)^T!!yFjkOl%9M)Ql zF*xVYi3{jRM*vX%`2yYBA2(^chA9iwM0`B7-g9gSVxB|Qy8jt*t_Ni~v-W6tlO?3pS%3UwM3BjY)2&pH#0v=U|1`rW3 z=Jtd(25hu*%TzMPAR=-gfQZ=h=g-Giu3Wi(N3!nF#>Pf0B34!1IOk4VZX;91UjzU! g(j5tR0sO!92~YZ|W + - + - - - + + + - + - - - + + + - + - + - - - + + + - + - + - - - - + + + + - - - - - + + + + + - + - - + + - + - - - - image/svg+xml - - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/core/img/filetypes/text-x-python.png b/core/img/filetypes/text-x-python.png index 57148f4b90d401b26b324d3eaf530f11032b4726..fbaf9a342f626eba72af7e7a11105739f4f2ec85 100644 GIT binary patch delta 1350 zcmV-M1-bgY3)l*fBYy=SNkllxihzbcrNfC&z^dnAVCvm*q_3ZA<;}Bxf zCT^V4KFRX>dG^h3-kX{Co)Qsu%Y_RUR%T~sJ???D+wJ_!nSV2_-MT#!H5v`oYPF`V zwRd%L$8peFuimQP1CS(1mSq{YdglL%Qi>!=vI7CEwTQ@F2iUQFAi!?v_xog7hEfX0 zamccaLZN`QcJzBkrl+Ux2xC6xOF)@{;T{*0{r3|{l4iQ|1J0Gq`~x(3-6Q7hm@xp z1eGevF3~u4lJ+m3W2c@%`BQfc;EWq&vKaCN1U6T%v42)P$JHAl*Dn8vC?6YLqIz_J zwEO+o4Z7b(p7to=j~-50{y+lOH1Cd3NZ9IU~0JRX`q!hG-xq1VTC6^KPg1E%I* z#IGJFELk!J%*tEwmd_JCN4~Pg>1SAI(mFWjDzkNd8{gq>n zKMUC=LYeN$D&EoOac5s;tJ8seK&e_K-MGAMBY#@Pb1k44#wo^~Hj@KbL2Qns9U8Ta z)?7&0T}A0Ds)iUYzuQACQe&8Z`#9(WH(>!~)Vy+JXgbfZUercAZ!kPJ3ZHlWwb zapztho8p~uHpUz6&pcJj&ioEnMR{AGE%G62*VI#46f^9jKTMPbnpi4-#_BP<3(y!!KOKxgy0s( zdf@gUkN~j`CLfZfDTP7-0IfB~m{EbUQjhsF(}h#eY1pr|LgnK4+oZHsefv) z^m~F>gZ1W6Sw^SR0T_Y!zJHS!T-SyAvkZC{sgwe`T|@QMnO#TQPVRyF3m*|h5n5~1 zEB~SYnt$=G8#Chx5ShK~WUZ@AnCU0IfBZN(HSoj^hvn0sVfTVzG$1 z`X#~UMLbV2e{2e6bC$1bYR|oQXMgEQ$vd8X$07@z4IL=`kFM|5~fvuTR>h=YRQa{Q&fBw9` zw6wH-FPhVCx9cmVJP{cs5_PLv{-yM}Hb%7 delta 1452 zcmV;d1ylOi3cU-EBYyw{b3#c}2nYxWd+$HVFbFIXI^lD9}rTTyjfu=zpQ;A=mr?Mv#A?cVBZ2 z&=ffaa8V;bf+TW~Aiv}vqAXGp#pNz%cV}J?GFkl~CE2n21qhPEx9@%C&CHueB_izA zjT<-C=I7@I1O}E>n)oM|#Rv!<* z@T>PY`}Cin2A}{-7O#*-9kRGf@#5ccpISaqkVgUt>VLncQqGaI4Nd{2Tqu`N?sHhT zNpJN-vhs^~&DW;}{6zpZi;;8#vK^vcOr8!Y&ol@sRg_(!arP4JZ$84#{1)ZUJTibY z&B$aiPk6$dF_ zATM8F_HGGfi{jDk}rH~62QWE~NUI0~#*#{!H`L7st45#?g7 zWpi^AfSI92tOb>0^8vlBA>Qg=n1B8)AZP2==Tv_80RU;|KX{#gQapW;WaCSM=yV8I zk6waNCBzEY9IU~0Jf2=W#bWRcq1VTC6^KPg1Ak@~U&F7SBP`q|EUco^O~e{RgzVnG zsMjHsud!*5VfadXFy6#HAR<^1kQ`7{X3t~3`+&OpEoYy739@a3GTpUxyfd%h&i|2} zP6zS(;K1Xcf=3fMOV@7 zpnp6Ht*dNrbO1$IEtB5+1e0vw2QHFF40Z-M&8rW048^j$1OiDvB1trQXi4=DZA#ds zcTsK=XM3AG&k4MFa&7R73iI>V==P_a3Vo2A%}z}4!XJ>I4&BC+0e0W*E`aj5`_mfs z+&ff%b&*o(40%67@_gTO!P1*_@BV}4e1C<4=P+y4gVo2$JkLFyNYSkebY@uvGub1O4{C?^ce`pVkAgl;t zGsNatqX@&0Fbv0zwAT2(zpvQD{w3m_m@q8RoU0>Px?N4M@cPs{VtOeyf|wlT?0ziE?-Rrttha#5GCG|O zz!=2${e4+*T^H&vG3ec-QVQsH4S&_kSN0t36SQO_JALwAMI|Ll6Y?`+bVVBIeG=1lu?9JjLSK z8I;Xgy{DfhhvOBA21DFampJ#@+kl$5Y$pad zscJ90L)KpdFQ8tYec%URf7g5>0Hu_2oQd`62ss4x#iK182c^`}4T)09yMFz;zp}Ej z`H%!BQn%anl~SIFj4u*(FeNPyDE%h^0Hkst;30tjxBd%6Zn*^bqDz(l0000 + - + - - - + + + - + - - - + + + - + - - - + + + - - + - - + + - - - + + - + - + - - - + + + - + - + - - - - + + + + - - - - - + + + + + - - - - image/svg+xml - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - diff --git a/core/img/filetypes/text.png b/core/img/filetypes/text.png index 6b069c82c119a5bc115cd657b9752215b8cd1044..73080fb3ea02960c42afc2f0ca7eb5a2474a6c2e 100644 GIT binary patch delta 10 RcmdnW`i5nK%Env|CIA<91IGXW delta 81 zcmaFEvXym$iW_sWlV=DA2gmJ){tp-!7&r?&B8wRqc&~#nqm#z$3ZS55iEBhjaDG}z hd16s2LwR|*US?i)adKios$PCk`s{Z$QX3V$nE>|$8V&#e diff --git a/core/img/filetypes/text.svg b/core/img/filetypes/text.svg index 69a1bcd98c..32685b586c 100644 --- a/core/img/filetypes/text.svg +++ b/core/img/filetypes/text.svg @@ -1,43 +1,39 @@ - + - + - + - + - - + + - - - - - - - - + + + + - - - + + + diff --git a/core/img/filetypes/video.png b/core/img/filetypes/video.png index 045754df26fa90c64237a817fe5a151b1aa18ab7..a5793d6eb10fa256e91cdd28052fed782427f7c8 100644 GIT binary patch delta 1233 zcmV;?1TOp13giipBYy;|NklNAUFLpTNnlX5iE}v+&G!U&{96 z*E8}x_0u>SfBgKUB<|#-Je03ffVHu)(VCl^+l^4K*FEY8Zft?Gcp1FqdGKmiz+bxt zL48qSz1`A#>VNl^7v%V$xh08-C&^2BC|{-qs@1B&IX}S|J3%eQ^j&up6;WIS`0s5OF-i&}srBb48fzRvIQY;1N#4-UPnH<5Kga`tOjD!^Mb`^jR z{rrO3SO6D#=1k9A3E;aV0^3%gVpoYEhXjF(Lf(u3*MD`z;NalW$jHbNwG`8Pj#lzO zCwD_&Zj>Bn-tybaAVsJ#(lNaRdAu0`+uPf$(P;Rao0~qh6ssCgWOD6wB5C`sPOinU z$ORh51mJoX@@53k9yLv~6oKNX2x(1Qw{F3`lkY>{3uo}1A?;@g5mKBkM4l+ZJl>3e zo}QjmwSQ8q1PDnO;1bv)4?*wg=iun{EcBdu7MDdW4Wn6yOhF1}aS`V6W(3%_ovK!f zRSl@B)_lOtGH|;J{jaAL=e+nc*FF_t}Mu25mscNM-EXLUiEv z&#Tb<_7ePf`gyo<>3cX}l%T(2f+@HZncM-%%VchCQbTxNp9%HZJz6tI#cW{8vna+?YXFD!w} zP5jQ--#?@f*UREtDr@>X9OJHRwd|!7#UbT9ZkgFtal$=Ki6A43!}Sw)W5v zLdW=9q1`Xz;UN$Q4n;So)xle(e6awuVsQIv6)Oy*{iN%wSDo#UeV_S`$|y+lFc;THY4)qnl<*MClRin%Rp0VrGa)bM)xZU!8M)y64H0C+}H%>p02M zZlp+YWs1wwcz<4`Na`@JXydWkqm4&vk8OFvXBOd3 zqBmil=hCI*Q)Wh<=K}NtThq0f**1i#L8}(siqcyf&be#H?ZA=voT=fwLLzj) zkwhENCV!H!HbA!o^Kb_Q#^Z6gaN$Cq1qTisNTUZrG+N_94GD^+0dW#Z8JJFaqzzaw zM0FwVfPjctk|Z*H9SJDvm3q9+?Qeg`*3Un2<%>_zx&Z-u5AO6A2g^ly=Kg9Jzz^)@*{s>b;x(DXr4hU>)Y=pJ7wSJiW`}Ze30Uu@*m=|^3vbkAPW@+z% zdAI`tBEk;0b_#SJnAxUcIOm{gxN`O^=U#iA>i6F%vILcF6VAgO5Gaab#;rwBoSCP9 zh(OcOTwG`6_$!Q0pC(Hjdy5Pwf_g=KSbvDyPhxUXmgS6F%d*_gf_B>j;yqLqzr67# z-#+{ZgfN@+th=gcO0U2?+yMdS+>BeDi}vs#8u2Cv$K->s= z3X@-7lD)TuxB~)ZS-SQ0_4}vZT+RU0At8j6L<}c}!w>;Mr-#Q(Fd&$qIFjHN;`W3l zC-Z7{9UQeLRGLtQgi6zR4C!ps_ka5T-mZ zGi+4Ahzh8IB7`PFnOWv%>v%%^IEe&AWH0dk>gwu~(~3;u$CZ_xxBgMAt~svWv*VTr z-V>3%W_Ee + - - - - + + + + - - - + + + - - + + - - + + - - + + - - - + + + - - - + + + - - - - - - - - - + + + + + + + + + - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/img/filetypes/web.png b/core/img/filetypes/web.png index c380231264555a13531b8fc6b1ed9d5c1f533a4e..33063212466ca53e7c562f723864f336d3b21b6e 100644 GIT binary patch delta 2124 zcmV-S2($Oj5!eurBYy}VNkl6+Scj^sc>LuV3*qZtVC`+Bl$urXdKC zmbNssDww26N(qAC&h?+uCLZm=S;s!rRNSzpmJp795 zBz6+N*7ok~%+EVCzeN zj(p?Q!;M>C|KmD>b&YfXR{>joak%oyU;gRkukLzlFuTw*5Xuj9=7#+Tb0fing;k{; zk;-si^RJHe(KGby|5U){7Z3c9Q{vtE+5FSKyzHgDmwF3MUpSZ3*3;u@>ptVT7#Bm) z{Ia4@eM9{n4S%&y=j3E{J+bTHv;Vb#O+S0H;w!rjyjxTl-l2K@1t$lFp+6==GExSj zrh-9l2eLr+`XH(^7!XwG5e$GuRmEkCD|T%B`5UM2zHj}C4<+F7=l5?4hJx=FSJ!{? zs-BfKJR^e1@sM3v3-a_B_=`%QbnPQh@$h=^7Zd}>bAJFF2PSaPcVz^IWpBXGYb$C# zvFh!Ip4s`$|46{5AMdFMc>OQBimOX5MrDY_1dwN^pm6yb(4{zNVgdq%W#G%r1I`3+ zd3?B~=uH!pSQMWTVR~{LF0(L%sz07@#HV+D>Py=jKCl4I!~Nc0Tv;+aBY}#GMSHtI zPl_;p@_%iZ`ukroMh?W0_dtsaz!V)!9c{-HfMJ3!CjwbT<)AAvMEkqp%!%U=Dk{li zF8IR-67blMTAs}K}t9|_TN5>DxU=s1iTzmn^!kA*WFft z&UwG@4p%OU#$}6CyguZR+if$uY$=4wYAqs0#Ig;R5kW36$Sx-i4&s-4Ay8BWk@{7j z7k}Ofd5f3jDw^?=+o!r3YeP|Z|@4sO4y+J&Si6S%iMmi?+I0PphI+typ?}z3u-v^CFF1sFZT@D4vi5XSZm63S@ z3}%iRDN#1?kV%u7JB5qb(U6eozEhUvw~C-8Nq~xlxaQtf@U2Y`!^(1xRS(QC zFb$H1-$9q=2{`$?T{BFVVhr;{-7a16Cgzr^TNP#;J8fu^08{7Mu~VM1w|}4`fSw@% znx=uGD6o9lUGUVCkHYFZu%IzGx7RE5b{rU6un!>VF;hk&C54bP+lw4<`@>fB?}sgf z?q>=V?IrgsLVw)qwm(EZjcqfAe|YNo~{a)HUo z3^**tQ2BBsu(v65TmU@gjC2i9DwvTGaI1)LILvL_uwi*566rt@!S@N^IL?hjR?oqg zTR@8rFj>GppR~YaJO#0vaYRlJBv?A~swHzv~2r$ta*aH!eT73+w0dxDNbQbr^dp+VK|I6&84uNQcp zhg2#BaXb$Q4Gj(TKA*3fpOXsS+VqHt-p&bW_WBFVxIRfvWC&!@7DCbIRbltU`bdcu zu{F+dfXI=6BDNy$?SJi+_U_%gf6tyh-^OusTU*;>SfG#J`axo*$KlT39v;8g{)BFf zUoh0^lueR^P+=_ub1T5@^3RDJzZcUY40{_=)F)4M86zVj3PoO9TN}*H&8;O7`}XZS zj6zylT3XJe1?Y32rN`;vp3(jzuWe3>qb<4_jWRWXX;8q;`+qXTnaDFKFu?70W5j)G z`(NJq^@$TFrbrBlXl!h(*?>hjhs!QP(>ks|L8uO72Ps7IO6UHT@qy0GNp<24m7Be+ zvDv6*%nG_DXau^ZIl9MlOd1**Qd(P&9l|Jgq62#;Cnt4ELrqOhZdFy)^Tg$F-rNPI z{Ug$(1IdAiNPomHpB=o?zW2GIW3N3pe&Oi4*u?oQqImhc1iGd})w4=S> zqj!%VKmPjZ)2An>9wbSE`uh4M&CSgV9LG0>=m?5Dfe@UL5O)w0#s{xXo^LyKz3b2+ z0$tM_-4jLeCCu^W^m|vYUY)|xHx5J`mKkk9@*?B2cm zr?FUUhTd`B)iD3hwYIjlA3b{Xz5f3G-=I60!|0#Z{>?klr>VRE0000hBYyw{b3#c}2nYxWds{}9*Ympfo_^T1afoT5t;9%wjb=wP z=XcNfpEGxri11+^&W9Qu@cx^JZrlEBi+J&J<*9A}(Q;Dh#ON=+es%7HzDvE|65R5W zJw4WO?om{BWj->Q&(|IspCHxIi8xR?c??_!x2Besbr(|G(tnAB8lsrq8jtjBes*MN=Ew*Of#l5 zi-U^|G!n-6<8Ra4*h>A$mnmekQ+}+!`^=B-{rO^X7VUzq-`ll3oveA-UDDV2S~g&M zx=4_pq+#OxHLn$eHp2yW|V-NNKsjb5Kd>&8j#|&Keot@uoYJXdH{%FAnCz* zDSwkrDjVIg>4rP{-xENqN{xl%C=>}2_85)+a z#cGSPf^rn1RP{NT2aRT?nHhN<6GdPJe}8fe6KlLwJvb2($5$+xfluA`gBCB5&XoKZ zYbq}ifwuLZq+`Qo8hX}YwMDeSYJ-gpHr7>Dev?=;{mR}-a1pE(;_?i}FXQLNiQEQU z*Q?*S`NpoZ03z|1YrL8$su)Sn&Y+w`WmTmjj+?3kj~B{TRk;oe(_E4`MNisbjemd@ z#9BlItYs!UMk=$^F^)O+Y!5`HTU$4+t4>ZfbdadaaQfxv39_fK+AbP&AxtjJ4EjL_GDw*Q3J%4+7?R2G`D?Wiz_LOqOwPyjuVowqj%OsYjtXLet z0?Ku1=su6~#2bXuS;AtLWJ4>Nl^gNW4QBu-Cy6*NT5CRi^_8S*l03S5kbjI-eB}rP zGr7oq#1Ud_CFR;y45x)~dJ=0aVk+Zy>d1b=>8Z0y0e=o!YoaLP z^2;veD_gJOqV5D(!5Tvxlw-j;b{4=(zkMWUb$Qwb0XB-}9WSv(Vog-cRcdJ}ipxbN zUwMJtk^R_6&jX0HXswCkm@o|4xc+?Z{NlB2Iwyg|5neJ`JpAI*r_MGZV6}Ztf*cb1 zNEpnwm(_w-lR=EUOBE2S<$oQ6ilDWgR~Uw@TDg+DZn=R^tVyGUzb-ll04%{Hjz2nP zLmwN?RuqNUSW~y8ALS&m#$p#_B9-Z009rBJTn6SKf*_!)tCKr#y-7Z|sjqKfU?8<9 zz@aC9JZiQ7Q}IugCG@eu?7S2%jolj&Q)yFM%>vfN%y}TvSZn41-hT~|$z;?`TefU$ zX=!BDAxl8Q^)oK3Z)eFUF)dHbX6Nc zKrGjtbBZtBbUk4hA|hC8=VgpRDMcK|^3+pLy_(DAKH*e@yVc-HATd64=q`!ICgxTz z!7Mf?BVmBTL3D`d2!Ah8SItnlBEO7O1I=Z?7(+6d#Bm&a-=|P0P$(2wyLRoGR4R4I zTTluIZ~=GX@ZO2K)~*L?GxlDkTRN1R0@p=3P6b2^^-I=36k-Xh8L-v)|4s?&>gur8 z5(EK9j~*=#4i5e?ilTj5>#0N{QAi{blkeUU&213n&Aq?b(|@}1f>+x6FWc^z`aVTn zt#Vu%+gGE*5}sRw4a)O_s4|Q!)>P&|GMVJ1{Rd3f(hl9!)RbDidUf5wg9leX_~3(I z1tK66k$BF8dV%7(^VFL!j~@N=&u*SAjqcQv&Dv-N2}3+5RZV%RqBBZh@H~&hhmS-r z{N?#a_wCy^nSV?s@qM2S8#b)kvSrK01+gk!AQdNuRk8>Os`7!^xAs21bNuzaH_t{B zzm8P?L~Qff*yM{kF2*`8#<9s4W1G)LDu2RJwtW2f@o;ePxj*dMwd?+ok&$1XK7CpT zLBOh2tD07RiR%pKKkNGy=IKrY}mE?wPR(|_L8m8fl63K08+@nCXntT;ZD z-?nYrL9O-QcI?=3E1-LOd)?b_zx}}G&6}6`zR&RR@YMeO`#0^}xpN2>*%gb32DDNt zsNSE0m@}zU93Ltc$A?A$wZJ<9*ixyqefRF&JLXC`JUkpvPEI~CGc&WTv9ZyOqR3s~ zwfFzuP&_H6ssZOZX72h7fT~0mym(+>pth;0X-|E9eQ!RW|I_yE+wY#c_b;%5#fX%| R9&7*r002ovPDHLkV1ftBOCA6K diff --git a/core/img/filetypes/web.svg b/core/img/filetypes/web.svg index 67775a2233..5b5a9c3b77 100644 --- a/core/img/filetypes/web.svg +++ b/core/img/filetypes/web.svg @@ -1,45 +1,36 @@ - + - - - - image/svg+xml - - - - - - + - + - + - - + + - + - + - - - + + + - - - - - - - + + + + + + + diff --git a/core/img/filetypes/x-office-document.png b/core/img/filetypes/x-office-document.png index fcd28e9a292f84e04b7ae031755b3b9823aabf64..6c0c4f8c228afd8c6cf5454f687edbaf8b09907e 100644 GIT binary patch delta 10 RcmZ3)euHg-^2S_KW&jor1Cam# delta 83 zcmcb?wupU#vIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6y=GXnsX2^ePp diff --git a/core/img/filetypes/x-office-document.svg b/core/img/filetypes/x-office-document.svg index fc51a3a1b7..eb2368722e 100644 --- a/core/img/filetypes/x-office-document.svg +++ b/core/img/filetypes/x-office-document.svg @@ -1,60 +1,53 @@ - + - + - - - + + + - + - - + + - + - + - - - + + + - + - - - - + + + + - - - - - + + + + + - - - - image/svg+xml - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/core/img/filetypes/x-office-presentation.png b/core/img/filetypes/x-office-presentation.png index 7ee552ba7c80dd6f285a4acd5b4a2cba62c140a9..b129c76de6068c2ca039880dd26f9a17b8ccd883 100644 GIT binary patch delta 10 RcmX@d(ZVr7d1LNFW&jqI1Q-AS delta 83 zcmZqSIL9$T*@J + - - - + + + - + - - - + + + - + - + - - - - - - + + + + + + - + - - - + + + - + - + - + - - + + - + - + - + - + - + - + - + - - - - image/svg+xml - - - - - - - - - - - + + + + - - - + + + - - - - - - - - - - - + + + - + + + + + + + + + + + + + + + + + + + diff --git a/core/img/filetypes/x-office-spreadsheet.png b/core/img/filetypes/x-office-spreadsheet.png index dfdc74a8bf660ebd02baa99b0cf40d48478dd032..9efe6f29501a07539a1b855ed89850fcd83f404e 100644 GIT binary patch delta 10 RcmbQrcA9m9^2Xd1OaK-61Lpt$ delta 83 zcmX@jI+bmLvIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6z9Vgdk+_!zwa diff --git a/core/img/filetypes/x-office-spreadsheet.svg b/core/img/filetypes/x-office-spreadsheet.svg index af40bb252a..aae8f3c95c 100644 --- a/core/img/filetypes/x-office-spreadsheet.svg +++ b/core/img/filetypes/x-office-spreadsheet.svg @@ -1,64 +1,63 @@ - + - + - - - + + + - + - + - - - - + + + + - - - - - + + + + + - + - - + + - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/img/image-optimization.sh b/core/img/image-optimization.sh index 0a96bf558d..e6374c419b 100755 --- a/core/img/image-optimization.sh +++ b/core/img/image-optimization.sh @@ -2,7 +2,7 @@ function recursive_optimize_images() { cd $1; -optipng -o6 *.png; +optipng -o6 -strip all *.png; jpegoptim --strip-all *.jpg; for svg in `ls *.svg`; do diff --git a/core/img/logo-wide.png b/core/img/logo-wide.png index 5b7d4c6f915fee2bf95c9ce7b903baf30b6c006b..b15c76ecb155fe6e2be8dd56de459708925ff0cb 100644 GIT binary patch delta 10 Rcmdli_)1`c^2Qu@4geSq1Kt1t delta 82 zcmaDQuvu_|vO5EFv6E*A2M5RPhyD*37#KJUJR*x37oc5!lIL8@MUQTpt6Hc}fEJvjjX<{Bmd diff --git a/core/img/logo-wide.svg b/core/img/logo-wide.svg index 29c617d6f8..bacba6755c 100644 --- a/core/img/logo-wide.svg +++ b/core/img/logo-wide.svg @@ -1,3 +1,3 @@ - - + + diff --git a/core/img/logo.png b/core/img/logo.png index 8d112d99be554002b6fcab41b6468d27e75954b0..2c551a1c22c837274204d9371469dbc79c4e129e 100644 GIT binary patch delta 10 Rcmdm|@l}0-^2VG?!T=j(1h@bI delta 82 zcmeyWzE5Loc5!lIL8@MUQTpt6Hc}fEuLuJG7Hk^; diff --git a/core/img/logo.svg b/core/img/logo.svg index cfb20b60e4..06008c41c5 100644 --- a/core/img/logo.svg +++ b/core/img/logo.svg @@ -1,4 +1,4 @@ - - + + diff --git a/core/img/places/calendar-dark.png b/core/img/places/calendar-dark.png index 920dee610dd3b71f2fdde988eeaf0945b31fd544..39032bcfa1a491ec1996230cb3dd76557c14a2b9 100644 GIT binary patch delta 10 RcmZ3>{Df(O%Env=MgSJI1F8T3 delta 81 zcmaFDw3c~-iW_sWlV=DA2gmJ){tp-!7&r?&B8wRqc&~#nqm#z$3ZS55iEBhjaDG}z hd16s2LwR|*US?i)adKios$PCk`s{Z$QX3VW83FLO8SwxB diff --git a/core/img/places/contacts-dark.png b/core/img/places/contacts-dark.png index a08339d1d3d88413910fe07e95beb32536983983..ec60fb603fb49031891d0b2cbe92763971de5405 100644 GIT binary patch delta 10 RcmX@a{)26T^2XdyW&jwD1MvU= delta 83 zcmeytc8Gm~vIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6ysGXnsr$r#4~ diff --git a/core/img/places/contacts-dark.svg b/core/img/places/contacts-dark.svg index 3fc10cfe08..9c95478cdf 100644 --- a/core/img/places/contacts-dark.svg +++ b/core/img/places/contacts-dark.svg @@ -1,7 +1,7 @@ - - + + diff --git a/core/img/places/file.png b/core/img/places/file.png index 63837a1af90c0dab2191f0e20dab9f04ce2759d9..ff179e96b641901d0df8718b0e351a57fac4f1f2 100644 GIT binary patch delta 9 QcmaFEw1{bf%EY{X029mvL;wH) delta 82 zcmZ3)^oD7IiaSfOlV=DA5Y%v_bTBY5a29w(7BevLUI$@DCym(^Ktah8*NBqf{Irtt h#G+J&^73-M%)IR4 - + - - + + diff --git a/core/img/places/files.png b/core/img/places/files.png index 52e0c6bf949ca5021b22b36b9753d16faedee8ed..16c78efe40f855430486b6445cdf1a999c38c08e 100644 GIT binary patch delta 9 QcmbQibe?g7%Ea8&01>zY$N&HU delta 80 zcmX@lID=_|iW_sWlV=DA2gmJ){tp-!7&r?&B8wRqc&~#nqm#z$3ZS55iEBhjaDG}z hd16s2LwR|*US?i)adKios$PCk`s{Z$QWF)|0RYKA8V>*f diff --git a/core/img/places/files.svg b/core/img/places/files.svg index d446ef655a..970f5b5629 100644 --- a/core/img/places/files.svg +++ b/core/img/places/files.svg @@ -1,6 +1,6 @@ - + diff --git a/core/img/places/folder.png b/core/img/places/folder.png index 46079e03e9ef2f7f6ff391990907e34ec9fda358..d8eb4ccf4c66d64a1d887ee4dde9dee3c66bbe6b 100644 GIT binary patch delta 9 Qcmcc2)X6kKWn$h_01_hu`2YX_ delta 81 zcmeBVy38~|#hsS|Iv5xjI14-?iy0VruY)k7lg8`{prB-lYeY$Kep*R+ gVo@qXd3m{BW?pu2a$-TMUVc&f>~}U&6BS - + - + - + - + diff --git a/core/img/places/home.png b/core/img/places/home.png index e664719e2ec960407908a497a4372e024f429062..8905bd7fb3cfc7b07bb58d0dba392516fc4c4ef2 100644 GIT binary patch delta 9 Qcmcb{)XOwMWn%7201{jT0{{R3 delta 80 zcmeBWy2dm?#f`bx$uoq5gX8u?{|5{V44efXk;M!Qyw^dP(Me-=1yE43#5JNMI6tkV gJh3R1p}f3YFEcN@I61K(RWH9NefB#Wsfmhj0LTy;N&o-= diff --git a/core/img/places/home.svg b/core/img/places/home.svg index 80b7dcc866..bb75f259b4 100644 --- a/core/img/places/home.svg +++ b/core/img/places/home.svg @@ -1,11 +1,11 @@ - + - + diff --git a/core/img/places/link.png b/core/img/places/link.png index 44b7e199a7267e9c1d87f54ebdbf064e7fac0b45..7cf97115dede43d5e68593bde14c3886024b5109 100644 GIT binary patch literal 851 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0V6+SH332`Z|36S9G&I!M*jQUz zTSZ01($Z2_R~N|D)6+9GH8nIe1d>25kYQ$K24ol+837q4CMFOzL;-|^2tvexx`14u zI8Z%A9Igdf8ALIVL}S3!z;!{?KuDmO5Mv>-a5X>%P#mHLnT>2XvN;s8^(N-=0fR5I zB*-tAfr*)wjh$0aL`*_TR!&|~Sw&4(`U?Gykhm*bsINr+p%-cfg{IHoH}#%{Dq5GZ`{27;L+nJ&tAQK z_u=!mA3uNn`TMU=%y1Jh`l3Bu977}|&mQD-y6nKfdLe$fg5cEHUTy_t?;A%t9b#`t zvIZ{5JT0|=N%`;h{SA}12rnpLxObTOvFFmq5!x>w+9{dXDC`VeC8=7_E+6W=)%DY# z%bPEHJz4CTAo1Yk&4Y);gOtsSWFCm!FR*4W@hM51$;$9vzxIwom(6R&dHnjl&)c-r z^%+Ez8nYGke>1N6^7ei1<@gXNF+BR<}l1NJu4}0Ir?mlU<2hTjCjcltY3-u|f zC;I+L&Qj-pa5tXSeR8n>y)8PIBwIzZEDV1Z?kYQS#ycXBM_sLc@7(ldT}Pfv^r`LK zb?ywSP_a~B(qywO+a7OkQl9zaTg93)yDp`DJe~=_-9U-)^c@k z#*9^g4`*piigC+oE1h_Ncc0=<#%qi1eI(_#v$WZWIJ^#D=F^~7=TcX1TXrJkqv$(< qg^A69Oy55)xm37j>X#22{;=PDRw>H0uFVM;w+x=HelF{r5}E)XN+-<# delta 1083 zcmV-B1jPH(2E_=F8Gi-<0047(dh`GQ00eVFNmK|32nc)#WQYI&010qNS#tmY4c7nw z4c7reD4Tcy000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs000BRNklw%xwh>XV5>0%$@3jnwVi#Q~MSn#iVhidl#R z|L1qk+ROdfV+XeRCP*3rk!(XH|?%JK@>$JK&+}0A~LP2 zuLDHQ*0by&xj%z&L=2 zd>O~_Q4ujg5Iim-XMkzv+-$oXZ99uA{+kY7Id8^j?`ufR6Q*^R0SAGv&NAQebDM{V&@D(7asQnYDJ@ z81pr-t4+xMp`oE0a+CmA)Vd_GUT{=Cum}iYPOit=H?jfER!tx9J^(0ANDV0hGRP|gDaEl!Pj(@1?RMDVPcnVZ?3RrCQiOBJM-2D9fk4cg| z3%t<*K!93NQEdU7bEz@rX<8~%)hEI*+_V|T#>Ps(!yN!pW6X(m(^1=dpjxdi0uwoi zcUxbpl}e>=Wo2asIM^;ZFp+5$TGyE{ilPzk{dr(GbIpm!`>J{nm<0B - - - - image/svg+xml - - - - - - + diff --git a/core/img/places/music.png b/core/img/places/music.png index 5b71e19ee3c885b88695e4067fd66b5531af9ae8..953a2c24665dab60fa2d596ea545be7c2a50cf34 100644 GIT binary patch delta 10 RcmX@Y`io_P^2Xe7CIA?f1M&a> delta 83 zcmeyxa)fn)vIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6x>G64Xo&=|-7 diff --git a/core/img/places/picture.png b/core/img/places/picture.png index 2b96ea518ce876eaefd2e90b7594b0b5bd3844ca..b60da3b5fd850e9d8f78dbebe0c4ef4180605e1a 100644 GIT binary patch delta 10 RcmdnQ{DNtM^2S_OMgSKK1GfMG delta 83 zcmaFCw266wvIhf8v6E*A2N2Y7q;xPaFmM)lL>4nJ@LmUDMkkHg6+l7B64!{5;QX|b i^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq&6zLGXemd-x!Sm diff --git a/core/img/places/picture.svg b/core/img/places/picture.svg index 82d457f5c7..b4c81b7a93 100644 --- a/core/img/places/picture.svg +++ b/core/img/places/picture.svg @@ -1,4 +1,4 @@ - + diff --git a/core/img/rating/s1.png b/core/img/rating/s1.png index 015f94837142b64ed34837e2e36922734de24769..9d5014106e5a6a966af40025839cc05180b53ee7 100644 GIT binary patch delta 12 TcmeBVUd=Q?Wn!tx#BG-W9YzI0 delta 102 zcmZ3@)X6+S#gDVVBeIx*fm;}a85w5Hkzin8U@!6Xb!ET9#lb6KE)w)&KTt?EGbEzK zIX^cyHLnE7WngeFN=+(#<+S#gDVVBeIx*fm;}a85w5Hkzin8U@!6Xb!ET9#lb6V)PCmZZ=jHDW=KSd zbAE1aYF-JD%fR4Vl$uzQnxasiS(2gP?&%wlqL<1(QSmc317ni6yNi3m-jmgvg&3t7 E0f)^T*8l(j diff --git a/core/img/rating/s11.png b/core/img/rating/s11.png index 3dcb4bb4830a52f9767079fb4acc39d2cee43ef5..c674569c3899f3d8a4e141fcfe08abb69fd19072 100644 GIT binary patch delta 33 pcmdnUa)Eh*3gdx^Wk&?l&;99TU|?V@3GxeOaCmkjZE`f@H2~f^4JiNs delta 129 zcmcb>ypd&sN)Ts(M`SSr1Gg{;GcwGYBf-GHz+U3%>&kwIi-T9tXzQ=#l|Uic%#er@ z=ltB<)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6^dD1LaN>Ji2N|Nmb)Zng=?Wh@Eu Z3ubV5b|VeMN%D4gark#L=ElTd*8uO*DE0sV diff --git a/core/img/rating/s2.png b/core/img/rating/s2.png index 94ac5bc956648b35bee893bfa64bcb237dab79a2..6846c8771f5036d485e913851f962582365fdd97 100644 GIT binary patch delta 13 VcmbQvvXgm&%EZ#elT{f%0RSVs1z-RG delta 102 zcmdnVJe_5NiXUfzM`SSr1Gg{;GcwGYBf-GHz+U3%>&kwIi-T7}VR~b31yD#fGbEzK zIX^cyHLnE7WngeFN=+ delta 105 zcmcb_vVnDiiXUfzM`SSr1Gg{;GcwGYBf-GHz+U3%>&kwIi-T8!&pSL}J5WeAGbEzK zIX^cyHLnE7WngeFN=+V!Z diff --git a/core/img/rating/s4.png b/core/img/rating/s4.png index 5ce388875703076a48cbf08db65c0ee4546e29e4..55e917f92e65d0c79f4f8e0c3c658274a91bc705 100644 GIT binary patch delta 14 VcmX@b`i5nK%EZzSn~NAD7y&TR1?d0) delta 105 zcmaFEa*B0=iXUfzM`SSr1Gg{;GcwGYBf-GHz+U3%>&kwIi-T8OdZEya$v`35%#er@ z=ltB<)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6_oqT*+62F4_BcNh1By(g&kwIi-T93?U2Y9FQAZYW=KSd zbAE1aYF-JD%fR4Vl$uzQnxasiS(2gP?&%wlqL<1(QSmc317ni6yNi3m-jmgvg%~{; E0c05*Hvj+t diff --git a/core/img/rating/s6.png b/core/img/rating/s6.png index 267c52ad3c03150291f8ed3ca498a82acafd951a..8856309f8384e3a4c073f201232a3a74033a2c4c 100644 GIT binary patch delta 14 VcmX@j`j%ya%EZzSn~NAD838cu1?&I- delta 105 zcmaFMa+-C5iXUfzM`SSr1Gg{;GcwGYBf-GHz+U3%>&kwIi-T88eR|r}P@s@(W=KSd zbAE1aYF-JD%fR4Vl$uzQnxasiS(2gP?&%wlqL<1(QSmc317ni6yNi3m-jmgvg&3n5 E0f3AgqW}N^ diff --git a/core/img/rating/s7.png b/core/img/rating/s7.png index 3381d066d871291a5fcb47078173953d0242708e..4112e14fde236a03a0a2f6a22cbb3f543a101739 100644 GIT binary patch delta 14 VcmdnVdYff}%EZzSn~NCT838W!1-1YH delta 105 zcmcc3vXga!iXUfzM`SSr1Gg{;GcwGYBf-GHz+U3%>&kwIi-T9x?Aq^TDL^6F%#er@ z=ltB<)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6_oqT*+62F4_BcNh1By(g&kwIi-T8`>*thPkAXt6nIRD+ z&iT2ysd*(pE(3#eQEFmIYKlU6W=V#EyQgnJie4)FM8(hC42((M?k?^Ldrwwx7GjKM F1OUL$9jE{R diff --git a/core/img/rating/s9.png b/core/img/rating/s9.png index dfe83563433e62e9169976187f265d5e7665cec8..3197f23785f55472924cbc41bceb4ed7664896ec 100644 GIT binary patch delta 14 VcmZ3+dV*zw%EZzSn~NAt7y&Hd1$_Vj delta 105 zcmX@XvW#_tiXUfzM`SSr1Gg{;GcwGYBf-GHz+U3%>&kwIi-T80>`UMFw?HA;%#er@ z=ltB<)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6_oqT*+62F4_BcNh1By(g Date: Thu, 20 Feb 2014 09:47:59 +0100 Subject: [PATCH 23/24] fix master - #7274 brokes it --- lib/private/appframework/middleware/middlewaredispatcher.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/private/appframework/middleware/middlewaredispatcher.php b/lib/private/appframework/middleware/middlewaredispatcher.php index 2a715598fc..598743e523 100644 --- a/lib/private/appframework/middleware/middlewaredispatcher.php +++ b/lib/private/appframework/middleware/middlewaredispatcher.php @@ -26,6 +26,7 @@ namespace OC\AppFramework\Middleware; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\Response; +use OCP\AppFramework\MiddleWare; /** * This class is used to store and run all the middleware in correct order From 49f2014e0c131a07bc0139ce437cb8c170ad518d Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Thu, 20 Feb 2014 10:01:49 +0100 Subject: [PATCH 24/24] Revert "Added extra checks for ext storage class" This reverts commit 9e9a5b9ea1f9b4699cf2d0c621f3f911f3639df9. Unit tests weren't ready, need further tweaking. --- apps/files_external/lib/config.php | 8 +------- apps/files_external/tests/mountconfig.php | 24 ----------------------- 2 files changed, 1 insertion(+), 31 deletions(-) diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index cd3e7f3a4a..94dc5fb7ad 100755 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -277,21 +277,15 @@ class OC_Mount_Config { $mountType, $applicable, $isPersonal = false) { - $backends = self::getBackends(); $mountPoint = OC\Files\Filesystem::normalizePath($mountPoint); if ($mountPoint === '' || $mountPoint === '/' || $mountPoint == '/Shared') { // can't mount at root or "Shared" folder return false; } - - if (!isset($backends[$class])) { - // invalid backend - return false; - } if ($isPersonal) { // Verify that the mount point applies for the current user // Prevent non-admin users from mounting local storage - if ($applicable !== OCP\User::getUser() || strtolower($class) === '\oc\files\storage\local') { + if ($applicable != OCP\User::getUser() || $class == '\OC\Files\Storage\Local') { return false; } $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/'); diff --git a/apps/files_external/tests/mountconfig.php b/apps/files_external/tests/mountconfig.php index 4c61b8961f..941aec680b 100644 --- a/apps/files_external/tests/mountconfig.php +++ b/apps/files_external/tests/mountconfig.php @@ -48,28 +48,4 @@ class Test_Mount_Config extends \PHPUnit_Framework_TestCase { $this->assertEquals(false, OC_Mount_Config::addMountPoint('/Shared', $storageClass, array(), $mountType, $applicable, $isPersonal)); } - - public function testAddMountPointSingleUser() { - \OC_User::setUserId('test'); - $mountType = 'user'; - $applicable = 'test'; - $isPersonal = true; - // local - $this->assertEquals(false, OC_Mount_Config::addMountPoint('/ext', '\OC\Files\storage\local', array(), $mountType, $applicable, $isPersonal)); - // non-local - $this->assertEquals(true, OC_Mount_Config::addMountPoint('/ext', '\OC\Files\Storage\SFTP', array(), $mountType, $applicable, $isPersonal)); - - } - - public function testAddMountPointUnexistClass() { - \OC_User::setUserId('test'); - $storageClass = 'Unexist_Storage'; - $mountType = 'user'; - $applicable = 'test'; - $isPersonal = true; - // local - // non-local - $this->assertEquals(false, OC_Mount_Config::addMountPoint('/ext', $storageClass, array(), $mountType, $applicable, $isPersonal)); - - } }