/** * test update of file permission. The update should remove from all shared * files the delete permission */ function testUpdateFilePermissions() { self::prepareDBUpdateFilePermissions(); // run the update routine to update the share permission updateFilePermissions(2); // verify results $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share`'); $result = $query->execute(array()); while ($row = $result->fetchRow()) { if ($row['item_type'] === 'file') { // for all files the delete permission should be removed $this->assertSame(0, (int) $row['permissions'] & \OCP\PERMISSION_DELETE); } else { // for all other the permission shouldn't change $this->assertSame(31, (int) $row['permissions'] & \OCP\PERMISSION_ALL); } } // cleanup $this->cleanupSharedTable(); }
<?php $installedVersion = OCP\Config::getAppValue('files_sharing', 'installed_version'); if (version_compare($installedVersion, '0.5', '<')) { updateFilePermissions(); } if (version_compare($installedVersion, '0.4', '<')) { removeSharedFolder(); } // clean up oc_share table from files which are no longer exists if (version_compare($installedVersion, '0.3.5.6', '<')) { \OC\Files\Cache\Shared_Updater::fixBrokenSharesOnAppUpdate(); } /** * it is no longer possible to share single files with delete permissions. User * should only be able to unshare single files but never to delete them. */ function updateFilePermissions($chunkSize = 99) { $query = OCP\DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `item_type` = ?'); $result = $query->execute(array('file')); $updatedRows = array(); while ($row = $result->fetchRow()) { if ($row['permissions'] & \OCP\PERMISSION_DELETE) { $updatedRows[$row['id']] = (int) $row['permissions'] & ~\OCP\PERMISSION_DELETE; } } $connection = \OC_DB::getConnection(); $chunkedPermissionList = array_chunk($updatedRows, $chunkSize, true); foreach ($chunkedPermissionList as $subList) { $statement = "UPDATE `*PREFIX*share` SET `permissions` = CASE `id` ";