Do not update mime types for folders with extension
Some folders might have an extension like "test.conf". This fix prevents to overwrite the folder's mime type with another mime type while running the mimetype repair step.
This commit is contained in:
parent
18ad60380c
commit
8098c06e70
|
@ -35,6 +35,11 @@ class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep {
|
|||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $folderMimeTypeId;
|
||||
|
||||
/**
|
||||
* @param \OCP\IConfig $config
|
||||
*/
|
||||
|
@ -91,7 +96,7 @@ class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep {
|
|||
return \OC_DB::prepare('
|
||||
UPDATE `*PREFIX*filecache`
|
||||
SET `mimetype` = ?
|
||||
WHERE `mimetype` <> ? AND `name` ILIKE ?
|
||||
WHERE `mimetype` <> ? AND `mimetype` <> ? AND `name` ILIKE ?
|
||||
');
|
||||
}
|
||||
|
||||
|
@ -124,6 +129,10 @@ class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep {
|
|||
}
|
||||
|
||||
private function updateMimetypes($updatedMimetypes) {
|
||||
if (empty($this->folderMimeTypeId)) {
|
||||
$result = \OC_DB::executeAudited(self::getIdStmt(), array('httpd/unix-directory'));
|
||||
$this->folderMimeTypeId = (int)$result->fetchOne();
|
||||
}
|
||||
|
||||
foreach ($updatedMimetypes as $extension => $mimetype) {
|
||||
$result = \OC_DB::executeAudited(self::existsStmt(), array($mimetype));
|
||||
|
@ -139,7 +148,7 @@ class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep {
|
|||
$mimetypeId = $result->fetchOne();
|
||||
|
||||
// change mimetype for files with x extension
|
||||
\OC_DB::executeAudited(self::updateByNameStmt(), array($mimetypeId, $mimetypeId, '%.' . $extension));
|
||||
\OC_DB::executeAudited(self::updateByNameStmt(), array($mimetypeId, $this->folderMimeTypeId, $mimetypeId, '%.' . $extension));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -514,5 +514,22 @@ class RepairMimeTypes extends \Test\TestCase {
|
|||
|
||||
$this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that mime type renaming does not affect folders
|
||||
*/
|
||||
public function testDoNotChangeFolderMimeType() {
|
||||
$currentMimeTypes = [
|
||||
['test.conf', 'httpd/unix-directory'],
|
||||
['test.cnf', 'httpd/unix-directory'],
|
||||
];
|
||||
|
||||
$fixedMimeTypes = [
|
||||
['test.conf', 'httpd/unix-directory'],
|
||||
['test.cnf', 'httpd/unix-directory'],
|
||||
];
|
||||
|
||||
$this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue