Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 $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());
 $user = $userManager->findById($element->getOwner());
 echo '<div id="elementInformations">
         <label name="validationMove">Are you sure you want to move this element ?</label>
             <ul>
                 <li>Element name : ' . $element->getName() . '</li>
                 <li>Current directory : ' . $element->getServerPath() . '</li>
                 <li>Type : ' . $refElement->getDescription() . '</li>
                 <li>Size : ' . $element->getSize() . ' KB</li>
                 <li>Owner : ' . $user->getFirstName() . ' ' . $user->getLastName() . '</li>
             </ul>
       </div>';
 function cmp($a, $b)
 {
     return strcmp($a, $b);
 }
Ejemplo n.º 4
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);
        }
    }
}
Ejemplo n.º 5
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.');
    }
}