diff options
author | Vincent Petry <pvince81@owncloud.com> | 2014-06-25 21:34:39 +0400 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2014-06-25 21:49:18 +0400 |
commit | b1e778d5fd05ae7224e73dc2cdc72a94c4f8b55c (patch) | |
tree | dfe56460d19a47a825cc33f6a329aca3258ae76a /lib/repair | |
parent | c6bcb07f8373b3a1515fc2f26872a0256ee3666d (diff) |
Moved office mimetype update to a repair step
Diffstat (limited to 'lib/repair')
-rw-r--r-- | lib/repair/repairmimetypes.php | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/lib/repair/repairmimetypes.php b/lib/repair/repairmimetypes.php new file mode 100644 index 00000000000..397d18eb72d --- /dev/null +++ b/lib/repair/repairmimetypes.php @@ -0,0 +1,87 @@ +<?php +/** + * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com> + * Copyright (c) 2014 Jörn Dreyer jfd@owncloud.com + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Repair; + +use OC\Hooks\BasicEmitter; + +class RepairMimeTypes extends BasicEmitter implements \OC\RepairStep { + + public function getName() { + return 'Repair mime types'; + } + + private function fixOfficeMimeTypes() { + // update wrong mimetypes + $wrongMimetypes = array( + 'application/mspowerpoint' => 'application/vnd.ms-powerpoint', + 'application/msexcel' => 'application/vnd.ms-excel', + ); + + $stmt = \OC_DB::prepare(' + UPDATE `*PREFIX*mimetypes` + SET `mimetype` = ? + WHERE `mimetype` = ? + '); + + foreach ($wrongMimetypes as $wrong => $correct) { + \OC_DB::executeAudited($stmt, array($wrong, $correct)); + } + + $updatedMimetypes = array( + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'xlsx' => 'application/vnd.ms-excel', + 'pptx' => 'application/vnd.ms-powerpoint', + ); + + // separate doc from docx etc + foreach ($updatedMimetypes as $extension => $mimetype ) { + $result = \OC_DB::executeAudited(' + SELECT count(`mimetype`) + FROM `*PREFIX*mimetypes` + WHERE `mimetype` = ? + ', array($mimetype) + ); + + $exists = $result->fetchOne(); + + if ( ! $exists ) { + // insert mimetype + \OC_DB::executeAudited(' + INSERT INTO `*PREFIX*mimetypes` ( `mimetype` ) + VALUES ( ? ) + ', array($mimetype) + ); + } + + // change mimetype for files with x extension + \OC_DB::executeAudited(' + UPDATE `*PREFIX*filecache` + SET `mimetype` = ( + SELECT `id` + FROM `*PREFIX*mimetypes` + WHERE `mimetype` = ? + ) WHERE `name` LIKE ? + ', array($mimetype, '%.'.$extension) + ); + } + return true; + } + + /** + * Fix mime types + */ + public function run() { + // TODO: check precondition to avoid running the fix every time + if ($this->fixOfficeMimeTypes()) { + $this->emit('\OC\Repair', 'info', array('Fixed office mime types')); + } + } +} + |