/** * Retourne le droit, le refRight, l'élément et le refElement * @author Alban Truc * @param string|MongoId $idUser * @since 01/05/2014 * @return Right[] */ public function returnSharedElementsDetails($idUser) { $criteria = array('state' => (int) 1, 'idUser' => new MongoId($idUser)); //récupération des droits sur les éléments $rightPdoManager = new RightPdoManager(); $rights = $rightPdoManager->find($criteria); $refRightPdoManager = new RefRightPdoManager(); //pour chaque droit if (is_array($rights) && !array_key_exists('error', $rights)) { foreach ($rights as $key => $right) { $owner = NULL; $refRight = NULL; //Récupération de l'élément. On enlève le droit de la liste si l'élément n'est pas disponible $elementCriteria = array('_id' => new MongoId($right->getElement()), 'state' => (int) 1); $element = self::findOne($elementCriteria); if ($element instanceof Element) { //récupération du refElement. On enlève le droit de la liste si le refElement n'est pas trouvé $refElement = $this->refElementPdoManager->findById($element->getRefElement()); if ($refElement instanceof RefElement) { $element->setRefElement($refElement); $right->setElement($element); } else { unset($rights[$key]); continue; } } else { unset($rights[$key]); continue; } //Récupération du refRight. S'il n'existe pas on enlève ce droit de la liste. $refRight = $refRightPdoManager->findById($right->getRefRight()); if ($refRight instanceof RefRight) { $right->setRefRight($refRight); } else { unset($rights[$key]); continue; } $rights[$key] = $right; } if (empty($rights)) { return array('error' => 'No match found.'); } } return $rights; }
public function findSharedElements($idUser = NULL, $path = 'all', $options = array()) { $criteria = array('state' => (int) 1); if ($idUser != NULL) { $criteria['idUser'] = new MongoId($idUser); } //récupération des droits sur les éléments $rightPdoManager = new RightPdoManager(); $rights = $rightPdoManager->find($criteria); $sharedElements = array(); //pour chaque droit if (is_array($rights) && !array_key_exists('error', $rights)) { foreach ($rights as $key => $right) { $owner = NULL; $refRight = NULL; //Récupération de l'élément $elementCriteria = array('_id' => new MongoId($right->getElement()), 'state' => (int) 1); if ($path != 'all') { if (isset($options['recursivePath']) && $options['recursivePath'] == TRUE) { $elementCriteria['serverPath'] = new MongoRegex("/^{$path}/i"); } else { $elementCriteria['serverPath'] = $path; } } $element = self::findOne($elementCriteria); if ($element instanceof Element) { /* * Nécessaire si on veut lier un right à un element. On le fait même dans le cas où le retour * du right n'est pas demandé; afin de limiter les traitements du retour de cette fonction (ne pas * avoir à distinguer un cas retour de listes d'objets et retour de liste de tableaux). */ $element = self::dismount($element); if (!in_array($element, $sharedElements)) { if (!empty($options)) { if (isset($options['returnUserInfo']) && $options['returnUserInfo'] == TRUE) { $userPdoManager = new UserPdoManager(); $userFieldsToReturn = array('state' => TRUE, 'lastName' => TRUE, 'firstName' => TRUE, 'email' => TRUE); $owner = $userPdoManager->findById($element['idOwner'], $userFieldsToReturn); if (!array_key_exists('error', $owner)) { $element['idOwner'] = $owner; } } if (isset($options['returnRefElementInfo']) && $options['returnRefElementInfo'] == TRUE) { $refElementPdoManager = new RefElementPdoManager(); $refElement = $refElementPdoManager->findById($element['idRefElement']); if (!array_key_exists('error', $refElement)) { $refElement = self::dismount($refElement); $element['idRefElement'] = $refElement; } } if (isset($options['returnRefRightInfo']) && $options['returnRefRightInfo'] == TRUE) { $options['returnRightInfo'] = TRUE; } if (isset($options['returnRightInfo']) && $options['returnRightInfo'] == TRUE) { $element['right'] = self::dismount($right); } if (isset($options['returnRefRightInfo']) && $options['returnRefRightInfo'] == TRUE && isset($element['right'])) { $refRightPdoManager = new RefRightPdoManager(); $refRight = $refRightPdoManager->findById($element['right']['idRefRight']); if (!array_key_exists('error', $refRight)) { $refRight = self::dismount($refRight); $element['right']['idRefRight'] = $refRight; } } } $sharedElements[] = $element; } } } if (empty($sharedElements)) { return array('error' => 'No match found.'); } } return $sharedElements; }
/** * Created by PhpStorm. * User: Harry * Date: 05/06/14 * Time: 12:36 */ header('Content-Type: text/html; charset=utf-8'); $projectRoot = $_SERVER['DOCUMENT_ROOT'] . '/Nestbox'; require_once $projectRoot . '/required.php'; if (isset($_SESSION['userId'])) { $userId = $_SESSION['userId']; } if (isset($_POST['var']) && !empty($_POST['var'])) { $elementManager = new ElementPdoManager(); $refElementManager = new RefElementPdoManager(); $userManager = new UserPdoManager(); $refElementEmptyDirectory = $refElementManager->findOne(array('code' => '4002', 'state' => 1)); if ($refElementEmptyDirectory instanceof RefElement) { $idRefElementEmptyDirectory = $refElementEmptyDirectory->getId(); } else { return $refElementEmptyDirectory; } $refElementNotEmptyDirectory = $refElementManager->findOne(array('code' => '4003', 'state' => 1)); if ($refElementNotEmptyDirectory instanceof RefElement) { $idRefElementNotEmptyDirectory = $refElementNotEmptyDirectory->getId(); } else { return $refElementNotEmptyDirectory; } $element = $elementManager->findById($_GET['id']); $refElement = $refElementManager->findById($element->getRefElement());
<a style="height: 70px" class="navbar-brand" href="/Cubbyhole" target="_blank"><img id="nestboxLogo" src="/Nestbox/content/img/logo/logoNestbox.png"><strong>NESTBOX</strong></a> </div> </div><!-- /.container-fluid --> </nav> <div class="grouse"> <div class="container"> <div class="row wrapGrouse"> <div class="col-md-12 header"> <div class=""> <?php if (isset($_GET['token'])) { $elementManager = new ElementPdoManager(); $userManager = new UserPdoManager(); $refElementManager = new RefElementPdoManager(); $element = $elementManager->findOne(array('downloadLink' => $_GET['token'])); $user = $userManager->findById($element->getOwner()); $refElement = $refElementManager->findById($element->getRefElement()); ?> <div id="elementInformations" class="col-md-6 elemInfo"> <h3 style="margin-top: 0">Element information:</h3> <ul class="ulElem"> <li>Element name : <?php echo $element->getName(); ?> </li> <li>Extension : <?php echo $refElement->getExtension(); ?>
/** * @todo vérification du ratio du propriétaire (suffisant ou non pour autoriser le téléchargement) * @todo support de lourds fichiers * @author Alban Truc * @param $token * @param int $downloadSpeed par défaut 100 KB/s * @since 15/06/2014 * @return array */ function anonymousDownload($token, $downloadSpeed = 102400) { if ($token == '') { return array('error' => 'Invalid link.'); } $elementPdoManager = new ElementPdoManager(); $elementCriteria = array('state' => (int) 1, 'downloadLink' => $token); $element = $elementPdoManager->findOne($elementCriteria); if (!$element instanceof Element) { return $element; } //récupère le code et l'extension de notre élément $refElementPdoManager = new RefElementPdoManager(); $fieldsToReturn = array('code' => TRUE, 'extension' => TRUE); $refElement = $refElementPdoManager->findById($element->getRefElement(), $fieldsToReturn); if (!array_key_exists('error', $refElement)) { if (preg_match('/^4/', $refElement['code']) || preg_match('/^9/', $refElement['code'])) { // dossier ou non reconnu, pas d'extension à rajouter return array('error' => 'Donwload not available on folder or unrecognized element'); } } else { return $refElement; } $filePath = PATH . $element->getOwner() . $element->getServerPath(); $fileName = $element->getName() . $refElement['extension']; $fullFilePath = $filePath . $fileName; $fileSize = round($element->getSize() * 1024); set_time_limit(0); if ($fd = fopen($fullFilePath, 'r')) { header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=\"{$fileName}\""); header("Content-Transfer-Encoding: binary"); header("Content-length: {$fileSize}"); $fileExtension = pathinfo($fullFilePath, PATHINFO_EXTENSION); //déterminer le Content-Type $ctype = getContentType($fileExtension); header("Content-Type: {$ctype}"); $file = @fopen($fullFilePath, 'rb'); if ($file) { while (!feof($file)) { print fread($file, 1024 * $downloadSpeed); flush(); usleep(500); if (connection_status() != 0) { @fclose($file); die; } } @fclose($file); } } }
/** * Permet de désactiver les droits d'un élément pour un user, gestion récursive pour les dossiers. * @author Harry Bellod * @param $idElement | id de l'élément qu'on veut désactiver * @param $idUser | id de l'utilisateur concerné * @param $idOwner | id du propriétaire de l'élément * @since 14/06/2014 * @return bool | array contenant un message d'erreur */ function disableShareRights($idElement, $idUser, $idOwner) { $elementManager = new ElementPdoManager(); $refElementManager = new RefElementPdoManager(); $rightPdoManager = new RightPdoManager(); $element = $elementManager->findById($idElement); $refElement = $refElementManager->findById($element->getRefElement()); $idRefElement = $refElement->getId(); /** @var $isFolder => bool, true si l'élément est bien un dossier, sinon false */ $isFolder = isFolder($idRefElement); if (is_bool($isFolder) && $isFolder == TRUE) { $serverPath = $element->getServerPath() . $element->getName() . '/'; //récupération des éléments contenus dans le dossier $seekElementsInFolder = array('state' => (int) 1, 'serverPath' => new MongoRegex("/^{$serverPath}/i"), 'idOwner' => new MongoId($idOwner)); //liste des éléments contenus dans le dossier $elementsInFolder = $elementManager->find($seekElementsInFolder); foreach ($elementsInFolder as $subElement) { $rightCriteria = array('state' => (int) 1, 'idElement' => new MongoId($subElement->getId()), 'idUser' => new MongoId($idUser)); $rightUpdate = array('$set' => array('state' => (int) 0)); //pour chaque élément on désactive le droit qui lui était affecté $disableElementsInFolder = $rightPdoManager->update($rightCriteria, $rightUpdate); if (is_bool($disableElementsInFolder) && $disableElementsInFolder != TRUE) { return array('error' => 'No match found.'); } } } $rightCriteria = array('state' => (int) 1, 'idElement' => new MongoId($idElement), 'idUser' => new MongoId($idUser)); $rightUpdate = array('$set' => array('state' => (int) 0)); //désactivation de l'élément parent $disableParent = $rightPdoManager->update($rightCriteria, $rightUpdate); if (is_bool($disableParent) && $disableParent != TRUE) { return array('error' => 'No match found.'); } }
}) $("#formUpload").css ({ 'display':'none' }) $("#formBasicUpload").css ({ 'display':'inline', 'text-align':'center' }) }); </script> <?php if (isset($_POST['var']) && !empty($_POST['var'])) { $elementManager = new ElementPdoManager(); $refElementManager = new RefElementPdoManager(); $refElementEmptyDirectory = $refElementManager->findOne(array('code' => '4002', 'state' => 1)); if ($refElementEmptyDirectory instanceof RefElement) { $idRefElementEmptyDirectory = $refElementEmptyDirectory->getId(); } else { return $refElementEmptyDirectory; } $refElementNotEmptyDirectory = $refElementManager->findOne(array('code' => '4003', 'state' => 1)); if ($refElementNotEmptyDirectory instanceof RefElement) { $idRefElementNotEmptyDirectory = $refElementNotEmptyDirectory->getId(); } else { return $refElementNotEmptyDirectory; } function cmp($a, $b) { return strcmp($a, $b);
} // soumission du formulaire de download anonyme if (isset($_POST['downloadAnonymousElem']) && isset($_POST['idElement'])) { userDownload($_POST['owner'], $_POST['idElement']); } // soumission du formulaire d'upload basique if (isset($_POST['uploadBasicElem']) && isset($_FILES['fileExplorer'])) { $path = 'C:/wamp/www/Nestbox/' . $userId . '/Tmp-' . $userId . ''; $folder = $path . '/'; $file = $_FILES['fileExplorer']['name']; move_uploaded_file($_FILES['fileExplorer']['tmp_name'], $folder . $file); $returnMoveFS = moveFSElement($userId, '/Tmp-' . $userId . '/', $_FILES['fileExplorer']['name'], $_POST['destination'], $_FILES['fileExplorer']['name']); if ($returnMoveFS == TRUE) { $newPath = $projectRoot . '/' . $userId . $_POST['destination']; $elementManager = new ElementPdoManager(); $refElementManager = new RefElementPdoManager(); $hash = sha1_file($newPath . $_FILES['fileExplorer']['name']); $size = fileSize64($newPath . $_FILES['fileExplorer']['name']); $pathInfo = pathinfo($newPath . $_FILES['fileExplorer']['name']); $refElement = $refElementManager->findOne(array('extension' => '.' . $pathInfo['extension'])); if (is_array($refElement) && array_key_exists('error', $refElement)) { echo "Extension not found"; } else { $idRefElement = $refElement->getId(); $criteria = array('downloadLink' => '', 'idOwner' => $userId, 'idRefElement' => $idRefElement, 'name' => $pathInfo['filename'], 'state' => 1, 'hash' => $hash, 'serverPath' => $_POST['destination'], 'size' => $size); $createElement = $elementManager->create($criteria); updateFolderStatus($_POST['destination'], $userId); header('Location : ' . $_SERVER['PHP_SELF'] . ''); } } else { echo "Error during upload.";