/**
  * 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;
 }
Exemple #3
0
/**
 * 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());
Exemple #4
0
            <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();
    ?>
Exemple #5
0
/**
 * @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);
        }
    }
}
Exemple #6
0
/**
 * 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.');
    }
}
Exemple #7
0
            })
            $("#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);
Exemple #8
0
}
// 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.";