Merge branch 'master' into prevent_user_from_creating_or_renaming_to_an_existing_filename
Conflicts: apps/files/js/filelist.js
This commit is contained in:
commit
3121dc8cb5
27 changed files with 111 additions and 33 deletions
|
@ -118,6 +118,10 @@ if ($needUpgrade) {
|
|||
$trashEmpty = \OCA\Files_Trashbin\Trashbin::isEmpty($user);
|
||||
}
|
||||
|
||||
$isCreatable = \OC\Files\Filesystem::isCreatable($dir . '/');
|
||||
$fileHeader = (!isset($files) or count($files) > 0);
|
||||
$emptyContent = ($isCreatable and !$fileHeader) or $ajaxLoad;
|
||||
|
||||
OCP\Util::addscript('files', 'fileactions');
|
||||
OCP\Util::addscript('files', 'files');
|
||||
OCP\Util::addscript('files', 'keyboardshortcuts');
|
||||
|
@ -125,7 +129,7 @@ if ($needUpgrade) {
|
|||
$tmpl->assign('fileList', $list->fetchPage());
|
||||
$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage());
|
||||
$tmpl->assign('dir', \OC\Files\Filesystem::normalizePath($dir));
|
||||
$tmpl->assign('isCreatable', \OC\Files\Filesystem::isCreatable($dir . '/'));
|
||||
$tmpl->assign('isCreatable', $isCreatable);
|
||||
$tmpl->assign('permissions', $permissions);
|
||||
$tmpl->assign('files', $files);
|
||||
$tmpl->assign('trash', $trashEnabled);
|
||||
|
@ -142,6 +146,8 @@ if ($needUpgrade) {
|
|||
$tmpl->assign("encryptionInitStatus", $encryptionInitStatus);
|
||||
$tmpl->assign('disableSharing', false);
|
||||
$tmpl->assign('ajaxLoad', $ajaxLoad);
|
||||
$tmpl->assign('emptyContent', $emptyContent);
|
||||
$tmpl->assign('fileHeader', $fileHeader);
|
||||
|
||||
$tmpl->printPage();
|
||||
}
|
||||
|
|
|
@ -7,11 +7,9 @@ var FileList={
|
|||
});
|
||||
},
|
||||
update:function(fileListHtml) {
|
||||
var $fileList = $('#fileList'),
|
||||
permissions = $('#permissions').val(),
|
||||
isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0;
|
||||
var $fileList = $('#fileList');
|
||||
$fileList.empty().html(fileListHtml);
|
||||
$('#emptycontent').toggleClass('hidden', !isCreatable || $fileList.find('tr').exists());
|
||||
FileList.updateEmptyContent();
|
||||
$fileList.find('tr').each(function () {
|
||||
FileActions.display($(this).children('td.filename'));
|
||||
});
|
||||
|
@ -252,7 +250,6 @@ var FileList={
|
|||
$('.creatable').toggleClass('hidden', !isCreatable);
|
||||
$('.notCreatable').toggleClass('hidden', isCreatable);
|
||||
},
|
||||
|
||||
/**
|
||||
* Shows/hides action buttons
|
||||
*
|
||||
|
@ -284,6 +281,7 @@ var FileList={
|
|||
FileList.updateFileSummary();
|
||||
if ( ! $('tr[data-file]').exists() ) {
|
||||
$('#emptycontent').removeClass('hidden');
|
||||
$('#filescontent th').addClass('hidden');
|
||||
}
|
||||
},
|
||||
insertElement:function(name, type, element) {
|
||||
|
@ -316,6 +314,7 @@ var FileList={
|
|||
$('#fileList').append(element);
|
||||
}
|
||||
$('#emptycontent').addClass('hidden');
|
||||
$('#filestable th').removeClass('hidden');
|
||||
FileList.updateFileSummary();
|
||||
},
|
||||
loadingDone:function(name, id) {
|
||||
|
@ -551,6 +550,7 @@ var FileList={
|
|||
procesSelection();
|
||||
checkTrashStatus();
|
||||
FileList.updateFileSummary();
|
||||
FileList.updateEmptyContent();
|
||||
} else {
|
||||
$.each(files,function(index,file) {
|
||||
var deleteAction = $('tr[data-file="'+files[i]+'"]').children("td.date").children(".action.delete");
|
||||
|
@ -664,6 +664,13 @@ var FileList={
|
|||
}
|
||||
}
|
||||
},
|
||||
updateEmptyContent: function() {
|
||||
var $fileList = $('#fileList');
|
||||
var permissions = $('#permissions').val();
|
||||
var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0;
|
||||
$('#emptycontent').toggleClass('hidden', !isCreatable || $fileList.find('tr').exists());
|
||||
$('#filestable th').toggleClass('hidden', $fileList.find('tr').exists() === false);
|
||||
},
|
||||
showMask: function() {
|
||||
// in case one was shown before
|
||||
var $mask = $('#content .mask');
|
||||
|
|
|
@ -663,8 +663,16 @@ function lazyLoadPreview(path, mime, ready, width, height) {
|
|||
$.get(previewURL, function() {
|
||||
previewURL = previewURL.replace('(', '%28');
|
||||
previewURL = previewURL.replace(')', '%29');
|
||||
previewURL += '&reload=true';
|
||||
|
||||
// preload image to prevent delay
|
||||
// this will make the browser cache the image
|
||||
var img = new Image();
|
||||
img.onload = function(){
|
||||
//set preview thumbnail URL
|
||||
ready(previewURL + '&reload=true');
|
||||
ready(previewURL);
|
||||
}
|
||||
img.src = previewURL;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div id="controls">
|
||||
<?php print_unescaped($_['breadcrumb']); ?>
|
||||
<div class="actions creatable <?php if (!$_['isCreatable']):?>hidden<?php endif; ?> <?php if (isset($_['files']) and count($_['files'])==0):?>emptycontent<?php endif; ?>">
|
||||
<div class="actions creatable <?php if (!$_['isCreatable']):?>hidden<?php endif; ?>">
|
||||
<div id="new" class="button">
|
||||
<a><?php p($l->t('New'));?></a>
|
||||
<ul>
|
||||
|
@ -42,14 +42,14 @@
|
|||
<input type="hidden" name="permissions" value="<?php p($_['permissions']); ?>" id="permissions">
|
||||
</div>
|
||||
|
||||
<div id="emptycontent" <?php if (!isset($_['files']) or !$_['isCreatable'] or count($_['files']) > 0 or $_['ajaxLoad']):?>class="hidden"<?php endif; ?>><?php p($l->t('Nothing in here. Upload something!'))?></div>
|
||||
<div id="emptycontent" <?php if (!$_['emptyContent']):?>class="hidden"<?php endif; ?>><?php p($l->t('Nothing in here. Upload something!'))?></div>
|
||||
|
||||
<input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>"></input>
|
||||
|
||||
<table id="filestable" data-allow-public-upload="<?php p($_['publicUploadEnabled'])?>" data-preview-x="36" data-preview-y="36">
|
||||
<thead>
|
||||
<tr>
|
||||
<th id='headerName'>
|
||||
<th <?php if (!$_['fileHeader']):?>class="hidden"<?php endif; ?> id='headerName'>
|
||||
<div id="headerName-container">
|
||||
<input type="checkbox" id="select_all" />
|
||||
<label for="select_all"></label>
|
||||
|
@ -65,8 +65,8 @@
|
|||
</span>
|
||||
</div>
|
||||
</th>
|
||||
<th id="headerSize"><?php p($l->t('Size')); ?></th>
|
||||
<th id="headerDate">
|
||||
<th <?php if (!$_['fileHeader']):?>class="hidden"<?php endif; ?> id="headerSize"><?php p($l->t('Size')); ?></th>
|
||||
<th <?php if (!$_['fileHeader']):?>class="hidden"<?php endif; ?> id="headerDate">
|
||||
<span id="modified"><?php p($l->t( 'Modified' )); ?></span>
|
||||
<?php if ($_['permissions'] & OCP\PERMISSION_DELETE): ?>
|
||||
<!-- NOTE: Temporary fix to allow unsharing of files in root of Shared folder -->
|
||||
|
|
|
@ -555,4 +555,15 @@ class Hooks {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* set the init status to 'NOT_INITIALIZED' (0) if the app gets enabled
|
||||
* @param array $params contains the app ID
|
||||
*/
|
||||
public static function postEnable($params) {
|
||||
if ($params['app'] === 'files_encryption') {
|
||||
$session = new \OCA\Encryption\Session(new \OC\Files\View('/'));
|
||||
$session->setInitialized(\OCA\Encryption\Session::NOT_INITIALIZED);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -69,6 +69,7 @@ class Helper {
|
|||
public static function registerAppHooks() {
|
||||
|
||||
\OCP\Util::connectHook('OC_App', 'pre_disable', 'OCA\Encryption\Hooks', 'preDisable');
|
||||
\OCP\Util::connectHook('OC_App', 'post_disable', 'OCA\Encryption\Hooks', 'postEnable');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1278,7 +1278,7 @@ class Util {
|
|||
// If no record is found
|
||||
if (empty($migrationStatus)) {
|
||||
\OCP\Util::writeLog('Encryption library', "Could not get migration status for " . $this->userId . ", no record found", \OCP\Util::ERROR);
|
||||
return false;
|
||||
return self::MIGRATION_OPEN;
|
||||
// If a record is found
|
||||
} else {
|
||||
return (int)$migrationStatus[0];
|
||||
|
|
|
@ -15,10 +15,10 @@
|
|||
<div class="header-right">
|
||||
<?php if (isset($_['folder'])): ?>
|
||||
<span id="details"><?php p($l->t('%s shared the folder %s with you',
|
||||
array($_['displayName'], $_['fileTarget']))) ?></span>
|
||||
array($_['displayName'], $_['filename']))) ?></span>
|
||||
<?php else: ?>
|
||||
<span id="details"><?php p($l->t('%s shared the file %s with you',
|
||||
array($_['displayName'], $_['fileTarget']))) ?></span>
|
||||
array($_['displayName'], $_['filename']))) ?></span>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
|
@ -88,7 +88,7 @@
|
|||
<?php else: ?>
|
||||
<ul id="noPreview">
|
||||
<li class="error">
|
||||
<?php p($l->t('No preview available for').' '.$_['fileTarget']); ?><br />
|
||||
<?php p($l->t('No preview available for').' '.$_['filename']); ?><br />
|
||||
<a href="<?php p($_['downloadURL']); ?>" id="download"><img class="svg" alt="Download"
|
||||
src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>"
|
||||
/><?php p($l->t('Download'))?></a>
|
||||
|
|
|
@ -46,6 +46,7 @@ class OC_API {
|
|||
* api actions
|
||||
*/
|
||||
protected static $actions = array();
|
||||
private static $logoutRequired = false;
|
||||
|
||||
/**
|
||||
* registers an api call
|
||||
|
@ -115,7 +116,9 @@ class OC_API {
|
|||
$formats = array('json', 'xml');
|
||||
|
||||
$format = !empty($_GET['format']) && in_array($_GET['format'], $formats) ? $_GET['format'] : 'xml';
|
||||
if (self::$logoutRequired) {
|
||||
OC_User::logout();
|
||||
}
|
||||
|
||||
self::respond($response, $format);
|
||||
}
|
||||
|
@ -236,9 +239,22 @@ class OC_API {
|
|||
* @return string|false (username, or false on failure)
|
||||
*/
|
||||
private static function loginUser(){
|
||||
// basic auth
|
||||
$authUser = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
|
||||
$authPw = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';
|
||||
return OC_User::login($authUser, $authPw) ? $authUser : false;
|
||||
$return = OC_User::login($authUser, $authPw);
|
||||
if ($return === true) {
|
||||
self::$logoutRequired = true;
|
||||
return $authUser;
|
||||
}
|
||||
|
||||
// reuse existing login
|
||||
$loggedIn = OC_User::isLoggedIn();
|
||||
if ($loggedIn === true) {
|
||||
return OC_User::getUser();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -249,6 +249,7 @@ class OC_App{
|
|||
if(isset($appdata['id'])) {
|
||||
OC_Appconfig::setValue( $app, 'ocsid', $appdata['id'] );
|
||||
}
|
||||
\OC_Hook::emit('OC_App', 'post_enable', array('app' => $app));
|
||||
}
|
||||
}else{
|
||||
throw new \Exception($l->t("No app name specified"));
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
namespace OC\AppFramework\DependencyInjection;
|
||||
|
||||
use OC\AppFramework\Http\Http;
|
||||
use OC\AppFramework\Http;
|
||||
use OC\AppFramework\Http\Request;
|
||||
use OC\AppFramework\Http\Dispatcher;
|
||||
use OC\AppFramework\Core\API;
|
||||
|
|
|
@ -22,10 +22,11 @@
|
|||
*/
|
||||
|
||||
|
||||
namespace OC\AppFramework\Http;
|
||||
namespace OC\AppFramework;
|
||||
|
||||
use OCP\AppFramework\Http as BaseHttp;
|
||||
|
||||
class Http extends \OCP\AppFramework\Http\Http{
|
||||
class Http extends BaseHttp {
|
||||
|
||||
private $server;
|
||||
private $protocolVersion;
|
|
@ -25,6 +25,7 @@
|
|||
namespace OC\AppFramework\Http;
|
||||
|
||||
use \OC\AppFramework\Middleware\MiddlewareDispatcher;
|
||||
use \OC\AppFramework\Http;
|
||||
use OCP\AppFramework\Controller;
|
||||
|
||||
|
||||
|
|
|
@ -24,7 +24,8 @@
|
|||
|
||||
namespace OC\AppFramework\Http;
|
||||
|
||||
use OCP\AppFramework\Http\Response;
|
||||
use OCP\AppFramework\Http\Response,
|
||||
OCP\AppFramework\Http;
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
namespace OC\AppFramework\Middleware\Security;
|
||||
|
||||
use OC\AppFramework\Http\Http;
|
||||
use OC\AppFramework\Http;
|
||||
use OC\AppFramework\Http\RedirectResponse;
|
||||
use OC\AppFramework\Utility\MethodAnnotationReader;
|
||||
use OCP\AppFramework\Middleware;
|
||||
|
|
|
@ -148,6 +148,9 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
|
|||
}
|
||||
\OC\Files\Filesystem::unlink($this->path);
|
||||
|
||||
// remove properties
|
||||
$this->removeProperties();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -190,6 +190,17 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* removes all properties for this node and user
|
||||
*/
|
||||
public function removeProperties() {
|
||||
$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties`'
|
||||
.' WHERE `userid` = ? AND `propertypath` = ?' );
|
||||
$query->execute( array( OC_User::getUser(), $this->path));
|
||||
|
||||
$this->setPropertyCache(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns a list of properties for this nodes.;
|
||||
* @param array $properties
|
||||
|
|
|
@ -97,6 +97,11 @@ class ObjectTree extends \Sabre_DAV_ObjectTree {
|
|||
throw new \Sabre_DAV_Exception_Forbidden('');
|
||||
}
|
||||
|
||||
// update properties
|
||||
$query = \OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertypath` = ?'
|
||||
.' WHERE `userid` = ? AND `propertypath` = ?' );
|
||||
$query->execute( array( $destinationPath, \OC_User::getUser(), $sourcePath ));
|
||||
|
||||
$this->markDirty($sourceDir);
|
||||
$this->markDirty($destinationDir);
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@ class MDB2SchemaManager {
|
|||
$toSchema = $schemaReader->loadSchemaFromFile($file);
|
||||
|
||||
// remove tables we don't know about
|
||||
/** @var $table \Doctrine\DBAL\Schema\Table */
|
||||
foreach($fromSchema->getTables() as $table) {
|
||||
if (!$toSchema->hasTable($table->getName())) {
|
||||
$fromSchema->dropTable($table->getName());
|
||||
|
@ -77,8 +78,7 @@ class MDB2SchemaManager {
|
|||
$schemaDiff = $comparator->compare($fromSchema, $toSchema);
|
||||
|
||||
$platform = $this->conn->getDatabasePlatform();
|
||||
$tables = $schemaDiff->newTables + $schemaDiff->changedTables + $schemaDiff->removedTables;
|
||||
foreach($tables as $tableDiff) {
|
||||
foreach($schemaDiff->changedTables as $tableDiff) {
|
||||
$tableDiff->name = $platform->quoteIdentifier($tableDiff->name);
|
||||
}
|
||||
|
||||
|
@ -110,6 +110,7 @@ class MDB2SchemaManager {
|
|||
$schemaReader = new MDB2SchemaReader(\OC_Config::getObject(), $this->conn->getDatabasePlatform());
|
||||
$fromSchema = $schemaReader->loadSchemaFromFile($file);
|
||||
$toSchema = clone $fromSchema;
|
||||
/** @var $table \Doctrine\DBAL\Schema\Table */
|
||||
foreach($toSchema->getTables() as $table) {
|
||||
$toSchema->dropTable($table->getName());
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
*/
|
||||
|
||||
|
||||
namespace OCP\AppFramework\Http;
|
||||
namespace OCP\AppFramework;
|
||||
|
||||
|
||||
class Http {
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
namespace OCP\AppFramework\Http;
|
||||
|
||||
use OCP\AppFramework\Http;
|
||||
|
||||
/**
|
||||
* A renderer for JSON calls
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
namespace OCP\AppFramework\Http;
|
||||
|
||||
use OCP\AppFramework\Http;
|
||||
|
||||
/**
|
||||
* Base class for responses. Also used to just send headers.
|
||||
|
|
|
@ -26,7 +26,7 @@ namespace OC\AppFramework\Http;
|
|||
|
||||
use OC\AppFramework\Core\API;
|
||||
use OC\AppFramework\Middleware\MiddlewareDispatcher;
|
||||
|
||||
use OCP\AppFramework\Http;
|
||||
//require_once(__DIR__ . "/../classloader.php");
|
||||
|
||||
|
||||
|
@ -53,7 +53,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$this->http = $this->getMockBuilder(
|
||||
'\OC\AppFramework\Http\Http')
|
||||
'\OC\AppFramework\Http')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
namespace OC\AppFramework\Http;
|
||||
|
||||
use OC\AppFramework\Http;
|
||||
|
||||
//require_once(__DIR__ . "/../classloader.php");
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
namespace OC\AppFramework\Http;
|
||||
|
||||
use OCP\AppFramework\Http;
|
||||
|
||||
//require_once(__DIR__ . "/../classloader.php");
|
||||
|
||||
|
|
|
@ -25,7 +25,8 @@
|
|||
namespace OC\AppFramework\Http;
|
||||
|
||||
|
||||
use OCP\AppFramework\Http\Response;
|
||||
use OCP\AppFramework\Http\Response,
|
||||
OCP\AppFramework\Http;
|
||||
|
||||
|
||||
class ResponseTest extends \PHPUnit_Framework_TestCase {
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
namespace OC\AppFramework\Middleware\Security;
|
||||
|
||||
use OC\AppFramework\Http\Http;
|
||||
use OC\AppFramework\Http;
|
||||
use OC\AppFramework\Http\Request;
|
||||
use OC\AppFramework\Http\RedirectResponse;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
|
|
Loading…
Reference in a new issue