Example #1
0
 /**
  * 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();
 }
Example #2
0
<?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` ";