/home/ivoiecob/email.hirewise-va.com/vendor/afterlogic/dav/lib/DAV/FS/Shared/DirectoryTrait.php
<?php
/**
* This code is licensed under AGPLv3 license or Afterlogic Software License
* if commercial version of the product was purchased.
* For full statements of the licenses see LICENSE-AFTERLOGIC and LICENSE-AGPL3 files.
*/
namespace Afterlogic\DAV\FS\Shared;
use Afterlogic\DAV\Constants;
use Afterlogic\DAV\FS\Backend\PDO;
use Aurora\Modules\SharedFiles\Enums\Access;
use Aurora\System\Api;
/**
* @license https://www.gnu.org/licenses/agpl-3.0.html AGPL-3.0
* @license https://afterlogic.com/products/common-licensing Afterlogic Software License
* @copyright Copyright (c) 2019, Afterlogic Corp.
*/
trait DirectoryTrait
{
public function getSharedChild($name)
{
$oChild = false;
$SharedFiles = Api::GetModule('SharedFiles');
if ($SharedFiles && !$SharedFiles->getConfig('Disabled', false)) {
$oPdo = new PDO();
$sSharePath = '';
if (!empty($this->getRelativePath())) {
$sSharePath = $this->getRelativePath() . '/' . $this->getName();
} elseif (!empty($this->getName()) && !$this->isRoot()) {
$sSharePath = '/' . $this->getName();
}
$aSharedFiles = $oPdo->getSharedFilesByUid(
Constants::PRINCIPALS_PREFIX . $this->getUser(),
$name,
$sSharePath
);
foreach ($aSharedFiles as $aSharedFile) {
if ($aSharedFile['owner'] !== $aSharedFile['principaluri']) {
if ($oChild) {
$sPath = '/' . ltrim($oChild->getNode()->getRelativePath() . '/' . $oChild->getNode()->getName(), '/');
if ($aSharedFile['path'] === $sPath) {
$this->populateAccess($oChild, $aSharedFile);
}
} else {
$oChild = Root::populateItem($aSharedFile);
}
}
}
if ($oChild && $oChild->getAccess() === Access::NoAccess) {
$oChild = false;
}
}
return $oChild;
}
protected function populateAccess(&$oChild, $aSharedFile)
{
// NoAccess = 0;
// Write = 1;
// Read = 2;
// Reshare = 3;
$iAccess = $oChild->getAccess();
if ($oChild->getGroupId() === 0 && $iAccess === Access::NoAccess) {
return;
}
$sNewInitiator = $aSharedFile['initiator'];
$iNewAccess = $aSharedFile['access'];
if ((int) $aSharedFile['group_id'] === 0) { //personal sharing
$oChild->setAccess($iNewAccess);
$oChild->setInitiator($sNewInitiator);
$oChild->setGroupId(0);
} else { // group sharing
if ($iNewAccess !== Access::Read) {
if ($iAccess < $iNewAccess || $iNewAccess === Access::NoAccess) {
$oChild->setAccess($iNewAccess);
$oChild->setInitiator($sNewInitiator);
}
} elseif ($iAccess !== Access::Write && $iAccess !== Access::Reshare) {
$oChild->setAccess($iNewAccess);
$oChild->setInitiator($sNewInitiator);
}
}
}
public function getSharedChildren()
{
$aChildren = [];
$SharedFiles = Api::GetModule('SharedFiles');
if ($SharedFiles && !$SharedFiles->getConfig('Disabled', false)) {
$oPdo = new PDO();
$sPath = null;
$bIsRoot = $this->getRootPath() === $this->getPath();
if (!$bIsRoot) {
$sPath = $this->getRelativePath();
if (!empty($sPath)) {
$sPath = '/' . ltrim($sPath, '/') . '/' . $this->getName();
} else {
$sPath = '/' . $this->getName();
}
}
$aSharedFiles = $oPdo->getSharedFilesForUser(
Constants::PRINCIPALS_PREFIX . $this->getUser(),
$sPath,
($this instanceof Root)
);
foreach ($aSharedFiles as $aSharedFile) {
if ($aSharedFile['owner'] !== $aSharedFile['principaluri']) {
$bContinue= false;
foreach ($aChildren as $oChild) {
$sPath = '/' . ltrim($oChild->getNode()->getRelativePath() . '/' . $oChild->getNode()->getName(), '/');
if ($aSharedFile['path'] === $sPath) {
$this->populateAccess($oChild, $aSharedFile);
$bContinue = true;
break;
}
}
if ($bContinue) {
continue;
}
$oChild = Root::populateItem($aSharedFile);
if ($oChild && $oChild->getNode() instanceof \Sabre\DAV\FS\Node) {
$aChildren[] = $oChild;
}
}
}
$aChildren = array_filter(array_map(function ($oChild) {
if ($oChild->getAccess() !== Access::NoAccess) {
return $oChild;
}
}, $aChildren));
}
return $aChildren;
}
}