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;
 }
示例#2
0
        $("#confirmDisable").append(submitModifyRight);
    }
</script>


<div id="utils_fancybox">
    <div id="imageClose">
        <img src="./content/img/icon_close_box.png" onclick="closeBoxAndReload();"/>
    </div>
</div>
<?php 
if (isset($_POST['var']) && !empty($_POST['var'])) {
    $elementManager = new ElementPdoManager();
    $refElementManager = new RefElementPdoManager();
    $userManager = new UserPdoManager();
    $refRightManager = new RefRightPdoManager();
    $rightManager = new RightPdoManager();
    $element = $elementManager->findById($_GET['id']);
    $refElement = $refElementManager->findById($element->getRefElement());
    $user = $userManager->findById($element->getOwner());
    $refRightList = $refRightManager->findAll();
    $rightCriteria = array('idElement' => $element->getId(), 'state' => 1);
    $usersSharedElementList = $rightManager->find($rightCriteria);
    if (is_array($usersSharedElementList) && !array_key_exists('error', $usersSharedElementList)) {
        ?>
        <form id="modifyShare" method="POST">
            <?php 
        echo '<p><label name="nameRename">List of users who you shared this element:</label></p>';
        echo '<input type="hidden" name="idElement" id="idElement" value="' . $_GET['id'] . '" read-only>';
        foreach ($usersSharedElementList as $userSharedElement) {
            $user = $userManager->findById($userSharedElement->getUser());
 /**
  * Indique si l'utilisateur donné a les droits voulus sur l'élément donné
  * @author Alban Truc
  * @param MongoId|string $idUser
  * @param MongoId|string $idElement
  * @param array $refRightCodes
  * @since 15/05/2014
  * @return bool|array
  */
 public function hasRightOnElement($idUser, $idElement, $refRightCodes)
 {
     if (is_array($refRightCodes)) {
         //récupérer l'id du refRight à partir du code
         $refRightPdoManager = new RefRightPdoManager();
         $refRightCriteria = array('state' => (int) 1);
         //@see http://www.php.net/manual/en/function.count.php
         if (count($refRightCodes) > 1) {
             foreach ($refRightCodes as $refRightCode) {
                 $refRightCriteria['$or'][] = array('code' => $refRightCode);
             }
         } else {
             $refRightCriteria['code'] = $refRightCodes[0];
         }
         //var_dump($refRightCriteria);
         $refRights = $refRightPdoManager->find($refRightCriteria);
         //var_dump($refRights);
         //récupérer le droit
         $rightCriteria = array('state' => (int) 1, 'idUser' => new MongoId($idUser), 'idElement' => new MongoId($idElement));
         if (count($refRights) > 1) {
             foreach ($refRights as $refRight) {
                 $rightCriteria['$or'][] = array('idRefRight' => $refRight->getId());
             }
         } else {
             $rightCriteria['idRefRight'] = $refRights[0];
         }
         //var_dump($rightCriteria);
         $rights = self::find($rightCriteria);
         //var_dump($rights);
         if (!array_key_exists('error', $rights)) {
             return TRUE;
         } elseif ($rights['error'] == 'No match found.') {
             return FALSE;
         } else {
             return $rights;
         }
     } else {
         return array('error' => 'Expected array for third parameter (refRightCodes)');
     }
 }
示例#4
0
/**
 * Partage (lecture ou lecture et écriture) d'un élément avec un autre utilisateur
 * @author Alban Truc
 * @param string|MongoId $idElement
 * @param string|MongoId $idOwner
 * @param string $recipientEmail
 * @param string $refRightCode
 * @param bool $sendMail
 * @since 12/06/2014
 * @return array|bool
 */
function shareWithUser($idElement, $idOwner, $recipientEmail, $refRightCode, $sendMail = FALSE)
{
    $idElement = new MongoId($idElement);
    $idOwner = new MongoId($idOwner);
    $elementPdoManager = new ElementPdoManager();
    $elementCriteria = array('state' => (int) 1, '_id' => $idElement);
    $element = $elementPdoManager->findOne($elementCriteria);
    if ($element instanceof ELement) {
        /*
         * vérification que l'idOwner en param de la fonction est le même que celui de l'element, la gestion des partages
         * n'étant dans cette version qu'accessible au propriétaire de l'élément
         */
        if ($idOwner == $element->getOwner()) {
            //vérification que l'email indiquée appartient bien à un utilisateur inscrit
            $userCriteria = array('state' => (int) 1, 'email' => $recipientEmail);
            $userPdoManager = new UserPdoManager();
            $recipientUser = $userPdoManager->findOne($userCriteria);
            if ($recipientUser instanceof User) {
                if ($recipientUser->getId() != $idOwner) {
                    //récupérer l'id du refRight
                    $refRightCriteria = array('state' => (int) 1, 'code' => $refRightCode);
                    $refRightPdoManager = new RefRightPdoManager();
                    $refRight = $refRightPdoManager->findOne($refRightCriteria, array('_id' => TRUE));
                    if (is_array($refRight) && !array_key_exists('error', $refRight)) {
                        $rightList = array();
                        $refRightId = $refRight['_id'];
                        $newRight = array('state' => (int) 1, 'idUser' => $recipientUser->getId(), 'idElement' => $idElement, 'idRefRight' => $refRightId);
                        $rightList[] = $newRight;
                        /*
                         * vérification qu'il ne s'agit pas d'un dossier vide (inutile de chercher à copier le droit
                         * pour d'éventuels contenus sinon)
                         */
                        $isNonEmptyFolder = isFolder($element->getRefElement(), TRUE);
                        if (is_bool($isNonEmptyFolder)) {
                            if ($isNonEmptyFolder == TRUE) {
                                //récupération des éléments contenus dans le dossier
                                $folderPath = $element->getServerPath() . $element->getName() . '/';
                                $elementsInFolderCriteria = array('state' => 1, 'idOwner' => $idOwner, 'serverPath' => new MongoRegex("/^{$folderPath}/i"));
                                $elementsInFolder = $elementPdoManager->find($elementsInFolderCriteria);
                                if (is_array($elementsInFolder) && !array_key_exists('error', $elementsInFolder)) {
                                    foreach ($elementsInFolder as $elementInFolder) {
                                        $rightCopy = $newRight;
                                        $rightCopy['idElement'] = $elementInFolder->getId();
                                        $rightList[] = $rightCopy;
                                    }
                                } else {
                                    return $elementsInFolder;
                                }
                            }
                        } else {
                            return $isNonEmptyFolder;
                        }
                        /*
                         * Insertion ou mise à jour du droit en base. De fait cette fonction est utilisé pour la création
                         * et la mise à jour de droit.
                         */
                        $rightPdoManager = new RightPdoManager();
                        $rightCriteria = array('state' => (int) 1, 'idUser' => $recipientUser->getId());
                        $options = array('upsert' => TRUE);
                        foreach ($rightList as $right) {
                            $rightCriteria['idElement'] = $right['idElement'];
                            $rightPdoManager->update($rightCriteria, array('$set' => $right), $options);
                        }
                        //@todo envoyer un mail
                    } else {
                        return $refRight;
                    }
                } else {
                    return array('error' => 'You cannot share an element with yourself');
                }
            } else {
                return $recipientUser;
            }
        } else {
            return array('error' => 'You are not the owner of this element, you cannot share it.');
        }
    } else {
        return $element;
    }
}
 /**
  * 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;
 }
示例#6
0
/** Permet de vérifier si l'utilisateur possède les droits maximums dans le dossier courant
 * @author Harry Bellod
 * @param $serverPath | path actuel
 * @param $idUser | id de l'user connecté
 * @return bool | true si l'user à les droits maximums (écriture/lecture)
 */
function checkRightOnCurrentDirectory($serverPath, $idUser)
{
    $elementManager = new ElementPdoManager();
    $rightManager = new RightPdoManager();
    $refRightManager = new RefRightPdoManager();
    if ($serverPath != "/") {
        // on récupère le nom du dossier ou l'on se trouve
        $explode = explode("/", $serverPath);
        $currentDirectory = $explode[sizeof($explode) - 2];
        // on récupère son serverPath
        $pattern = "#" . $currentDirectory . "/#";
        $path = preg_replace($pattern, "", $serverPath, 1);
        $criteria = array('name' => $currentDirectory, 'serverPath' => $path, 'state' => 1);
        $element = $elementManager->findOne($criteria);
        $rightCriteria = array('idElement' => $element->getId(), 'idUser' => $idUser);
        $right = $rightManager->findOne($rightCriteria);
        $refRight = $refRightManager->findById($right->getRefRight());
        //si l'utilisateur n'a que les droits de lecture alors return false, sinon true
        if ($refRight->getCode() == '01') {
            return false;
        } else {
            return true;
        }
    }
}