2015-03-09 18:20:18 +03:00
< ? php
/**
2015-06-25 12:43:55 +03:00
* @ author Morris Jobke < hey @ morrisjobke . de >
* @ author Robin Appelman < icewind @ owncloud . com >
*
* @ copyright Copyright ( c ) 2015 , ownCloud , Inc .
* @ license AGPL - 3.0
*
* This code is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License , version 3 ,
* as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License , version 3 ,
* along with this program . If not , see < http :// www . gnu . org / licenses />
*
2015-03-09 18:20:18 +03:00
*/
namespace OCA\Files_Sharing ;
2015-04-15 19:18:28 +03:00
use OC\Files\Filesystem ;
2015-06-23 18:09:00 +03:00
use OC\User\NoUserException ;
2015-03-09 18:20:18 +03:00
use OCA\Files_Sharing\Propagation\PropagationManager ;
use OCP\Files\Config\IMountProvider ;
use OCP\Files\Storage\IStorageFactory ;
use OCP\IConfig ;
use OCP\IUser ;
class MountProvider implements IMountProvider {
/**
* @ var \OCP\IConfig
*/
protected $config ;
/**
* @ var \OCA\Files_Sharing\Propagation\PropagationManager
*/
protected $propagationManager ;
/**
* @ param \OCP\IConfig $config
* @ param \OCA\Files_Sharing\Propagation\PropagationManager $propagationManager
*/
2015-04-20 14:32:09 +03:00
public function __construct ( IConfig $config , PropagationManager $propagationManager ) {
2015-03-09 18:20:18 +03:00
$this -> config = $config ;
$this -> propagationManager = $propagationManager ;
}
/**
2015-04-20 14:32:09 +03:00
* Get all mountpoints applicable for the user and check for shares where we need to update the etags
2015-03-09 18:20:18 +03:00
*
* @ param \OCP\IUser $user
* @ param \OCP\Files\Storage\IStorageFactory $storageFactory
* @ return \OCP\Files\Mount\IMountPoint []
*/
public function getMountsForUser ( IUser $user , IStorageFactory $storageFactory ) {
$shares = \OCP\Share :: getItemsSharedWithUser ( 'file' , $user -> getUID ());
$propagator = $this -> propagationManager -> getSharePropagator ( $user -> getUID ());
$propagator -> propagateDirtyMountPoints ( $shares );
$shares = array_filter ( $shares , function ( $share ) {
return $share [ 'permissions' ] > 0 ;
});
2015-06-23 18:09:00 +03:00
$shares = array_map ( function ( $share ) use ( $user , $storageFactory ) {
try {
Filesystem :: initMountPoints ( $share [ 'uid_owner' ]);
} catch ( NoUserException $e ) {
\OC :: $server -> getLogger () -> warning ( 'The user \'' . $share [ 'uid_owner' ] . '\' of share with ID \'' . $share [ 'id' ] . '\' can\'t be retrieved.' , array ( 'app' => 'files_sharing' ));
return null ;
}
2015-03-09 18:20:18 +03:00
// for updating etags for the share owner when we make changes to this share.
$ownerPropagator = $this -> propagationManager -> getChangePropagator ( $share [ 'uid_owner' ]);
// for updating our etags when changes are made to the share from the owners side (probably indirectly by us trough another share)
$this -> propagationManager -> listenToOwnerChanges ( $share [ 'uid_owner' ], $user -> getUID ());
return new SharedMount (
'\OC\Files\Storage\Shared' ,
'/' . $user -> getUID () . '/' . $share [ 'file_target' ],
array (
'propagator' => $ownerPropagator ,
'share' => $share ,
'user' => $user -> getUID ()
),
$storageFactory
);
}, $shares );
2015-06-23 18:09:00 +03:00
// array_filter removes the null values from the array
return array_filter ( $shares );
2015-03-09 18:20:18 +03:00
}
}