Example #1
0
 /**
  * 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 string $refRightCode
  * @param string $returnRights
  * @since 15/05/2014
  * @return bool
  */
 public function hasRightOnElement($idUser, $idElement, $refRightCode, $returnRights = 'FALSE')
 {
     //récupérer l'id du refRight à partir du code
     $refRightManager = new RefRightManager();
     $refRightCriteria = array('state' => (int) 1, 'code' => (string) $refRightCode);
     $refRight = $refRightManager->findOne($refRightCriteria);
     //récupérer le droit
     $rightCriteria = array('state' => (int) 1, 'idUser' => new MongoId($idUser), 'idElement' => new MongoId($idElement), 'idRefRigt' => $refRight['_id']);
     $right = self::find($rightCriteria);
     if (!array_key_exists('error', $right)) {
         return TRUE;
     } else {
         return FALSE;
     }
 }
Example #2
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);
    $elementManager = new ElementManager();
    $elementCriteria = array('state' => (int) 1, '_id' => $idElement);
    $element = $elementManager->findOne($elementCriteria);
    if (is_array($element) && !array_key_exists('error', $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['idOwner']) {
            //vérification que l'email indiquée appartient bien à un utilisateur inscrit
            $userCriteria = array('state' => (int) 1, 'email' => $recipientEmail);
            $userManager = new UserManager();
            $recipientUser = $userManager->findOne($userCriteria);
            if (is_array($recipientUser) && !array_key_exists('error', $recipientUser)) {
                if ($recipientUser['_id'] != $idOwner) {
                    //récupérer l'id du refRight
                    $refRightCriteria = array('state' => (int) 1, 'code' => $refRightCode);
                    $refRightManager = new RefRightManager();
                    $refRight = $refRightManager->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['_id'], '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['idRefElement'], TRUE);
                        if (is_bool($isNonEmptyFolder)) {
                            if ($isNonEmptyFolder == TRUE) {
                                //récupération des éléments contenus dans le dossier
                                $folderPath = $element['serverPath'] . $element['name'] . '/';
                                $elementsInFolderCriteria = array('state' => 1, 'idOwner' => $idOwner, 'serverPath' => new MongoRegex("/^{$folderPath}/i"));
                                $elementsInFolder = $elementManager->find($elementsInFolderCriteria);
                                if (is_array($elementsInFolder) && !array_key_exists('error', $elementsInFolder)) {
                                    foreach ($elementsInFolder as $elementInFolder) {
                                        $rightCopy = $newRight;
                                        $rightCopy['idElement'] = $elementInFolder['_id'];
                                        $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.
                         */
                        $rightManager = new RightManager();
                        $rightCriteria = array('state' => (int) 1, 'idUser' => $recipientUser['_id']);
                        $options = array('upsert' => TRUE);
                        foreach ($rightList as $right) {
                            $rightCriteria['idElement'] = $right['idElement'];
                            $rightManager->update($rightCriteria, array('$set' => $right), $options);
                        }
                        return TRUE;
                        //@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, le refElement et le propriétaire
  * @author Alban Truc
  * @param string|MongoId $idUser
  * @param string $path emplacement sur le serveur des éléments
  * @param NULL|string $elementName nom de l'élément
  * @since 01/05/2014
  * @return array
  */
 public function returnSharedElementsDetails($idUser, $path = 'all', $elementName = NULL)
 {
     $idUser = new MongoId($idUser);
     $criteria = array('state' => (int) 1, 'idUser' => $idUser);
     //récupération des droits sur les éléments
     $rightManager = new RightManager();
     $rights = $rightManager->find($criteria);
     $userManager = new UserManager();
     $refRightManager = new RefRightManager();
     $refElementManager = new RefElementManager();
     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['idElement']), 'state' => (int) 1);
             if ($path != 'all') {
                 $elementCriteria['serverPath'] = $path;
             }
             if ($elementName != NULL) {
                 $elementCriteria['name'] = $elementName;
             }
             unset($right['idElement']);
             $element = self::findOne($elementCriteria);
             if (is_array($element) && !array_key_exists('error', $element)) {
                 $idOwner = $element['idOwner'];
                 unset($element['idOwner']);
                 //récupération du refElement. On enlève le droit de la liste si le refElement n'est pas trouvé
                 $refElement = $refElementManager->findById($element['idRefElement']);
                 unset($element['idRefElement']);
                 if (is_array($refElement) && !array_key_exists('error', $refElement)) {
                     $element['refElement'] = $refElement;
                     $right['element'] = $element;
                 } else {
                     unset($rights[$key]);
                     continue;
                 }
             } else {
                 unset($rights[$key]);
                 continue;
             }
             /*
              * Récupération de l'utilisateur propriétaire.
              * Si son état n'est pas à 1, le droit n'aurait pas du être à 1; donc on enlève ce droit de la liste.
              */
             $userCriteria = array('_id' => new MongoId($idOwner), 'state' => (int) 1);
             $fieldsToReturn = array('firstName' => 1, 'lastName' => 1);
             unset($right['idUser']);
             $owner = $userManager->findOne($userCriteria, $fieldsToReturn);
             if (is_array($owner) && !array_key_exists('error', $owner)) {
                 $right['owner'] = $owner;
             } else {
                 unset($rights[$key]);
                 continue;
             }
             //Récupération du refRight. S'il n'existe pas on enlève ce droit de la liste.
             $refRight = $refRightManager->findById($right['idRefRight']);
             unset($right['idRefRight']);
             if (is_array($refRight) && !array_key_exists('error', $refRight)) {
                 $right['refRight'] = $refRight;
             } else {
                 unset($rights[$key]);
                 continue;
             }
             $rights[$key] = $right;
         }
         if (empty($rights)) {
             return array('error' => 'No match found.');
         }
     }
     return $rights;
 }