2012-07-13 17:17:36 +04:00
< ? php
2012-09-10 02:29:47 +04:00
$installedVersion = OCP\Config :: getAppValue ( 'files_sharing' , 'installed_version' );
2012-09-11 05:57:05 +04:00
if ( version_compare ( $installedVersion , '0.3' , '<' )) {
2012-09-22 01:25:57 +04:00
$update_error = false ;
2012-09-10 02:29:47 +04:00
$query = OCP\DB :: prepare ( 'SELECT * FROM `*PREFIX*sharing`' );
$result = $query -> execute ();
$groupShares = array ();
2012-09-25 13:47:45 +04:00
//we need to set up user backends, otherwise creating the shares will fail with "because user does not exist"
OC_User :: useBackend ( new OC_User_Database ());
OC_Group :: useBackend ( new OC_Group_Database ());
OC_App :: loadApps ( array ( 'authentication' ));
2012-09-10 02:29:47 +04:00
while ( $row = $result -> fetchRow ()) {
$itemSource = OC_FileCache :: getId ( $row [ 'source' ], '' );
if ( $itemSource != - 1 ) {
$file = OC_FileCache :: get ( $row [ 'source' ], '' );
if ( $file [ 'mimetype' ] == 'httpd/unix-directory' ) {
$itemType = 'folder' ;
} else {
$itemType = 'file' ;
2012-08-29 10:42:49 +04:00
}
2012-09-10 02:29:47 +04:00
if ( $row [ 'permissions' ] == 0 ) {
2012-09-25 20:01:56 +04:00
$permissions = OCP\Share :: PERMISSION_READ | OCP\Share :: PERMISSION_SHARE ;
2012-09-10 02:29:47 +04:00
} else {
2012-09-25 14:04:15 +04:00
$permissions = OCP\Share :: PERMISSION_READ | OCP\Share :: PERMISSION_UPDATE | OCP\Share :: PERMISSION_SHARE ;
2012-09-10 02:29:47 +04:00
if ( $itemType == 'folder' ) {
$permissions |= OCP\Share :: PERMISSION_CREATE ;
}
}
$pos = strrpos ( $row [ 'uid_shared_with' ], '@' );
if ( $pos !== false && OC_Group :: groupExists ( substr ( $row [ 'uid_shared_with' ], $pos + 1 ))) {
$shareType = OCP\Share :: SHARE_TYPE_GROUP ;
$shareWith = substr ( $row [ 'uid_shared_with' ], 0 , $pos );
if ( isset ( $groupShares [ $shareWith ][ $itemSource ])) {
continue ;
} else {
$groupShares [ $shareWith ][ $itemSource ] = true ;
}
} else if ( $row [ 'uid_shared_with' ] == 'public' ) {
$shareType = OCP\Share :: SHARE_TYPE_LINK ;
$shareWith = null ;
} else {
$shareType = OCP\Share :: SHARE_TYPE_USER ;
$shareWith = $row [ 'uid_shared_with' ];
}
OC_User :: setUserId ( $row [ 'uid_owner' ]);
2012-09-25 13:47:45 +04:00
//we need to setup the filesystem for the user, otherwise OC_FileSystem::getRoot will fail and break
OC_Util :: setupFS ( $row [ 'uid_owner' ]);
2012-09-22 01:25:57 +04:00
try {
OCP\Share :: shareItem ( $itemType , $itemSource , $shareType , $shareWith , $permissions );
}
catch ( Exception $e ) {
$update_error = true ;
2012-09-26 14:27:34 +04:00
OCP\Util :: writeLog ( 'files_sharing' , 'Upgrade Routine: Skipping sharing "' . $row [ 'source' ] . '" to "' . $shareWith . '" (error is "' . $e -> getMessage () . '")' , OCP\Util :: WARN );
2012-09-22 01:25:57 +04:00
}
2012-09-25 13:47:45 +04:00
OC_Util :: tearDownFS ();
2012-08-29 10:42:49 +04:00
}
2012-07-13 17:17:36 +04:00
}
2012-09-22 01:25:57 +04:00
if ( $update_error ) {
2012-09-26 14:27:34 +04:00
OCP\Util :: writeLog ( 'files_sharing' , 'There were some problems upgrading the sharing of files' , OCP\Util :: ERROR );
2012-09-22 01:25:57 +04:00
}
2012-09-10 02:29:47 +04:00
// NOTE: Let's drop the table after more testing
// $query = OCP\DB::prepare('DROP TABLE `*PREFIX*sharing`');
// $query->execute();
2012-09-22 01:25:57 +04:00
}