Пример #1
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;
 }
<?php

/**
 * Created by PhpStorm.
 * User: Crocell
 * Date: 04/06/14
 * Time: 23:53
 */
/** @var string $projectRoot chemin du projet dans le système de fichier */
$projectRoot = $_SERVER['DOCUMENT_ROOT'] . '/Nestbox';
require_once $projectRoot . '/required.php';
$elementPdoManager = new ElementPdoManager();
$rightPdoManager = new RightPdoManager();
//Chemin des fichiers de test
$path = 'D:\\Cours SUPINFO\\M1\\Projet Fin d\'annee\\Nestbox\\Fichiers de test/';
/**
 *  /Nestbox/
 *          IMG/
 *              Croquis Nesbtox.jpg
 *          code/
 *              js/
 *                 front/
 *                       js.txt
 *              css/
 *                  test.txt
 *
 *          suivi de projet.gdoc
 *          liens upload.gdoc
 *          Explorateur de fichier.gdoc
 *  /Nestbox - test/
 *	carte.gif
Пример #3
0
/**
 * Crée un nouveau dossier vierge à l'emplacement voulu.
 * @author Alban Truc
 * @param string|MongoId $idUser
 * @param string $path
 * @param string $folderName
 * @param bool $inheritRightsFromParent
 * @since 09/06/2014
 * @return array|TRUE
 */
function createNewFolder($idUser, $path, $folderName, $inheritRightsFromParent)
{
    $idUser = new MongoId($idUser);
    $operationSuccess = FALSE;
    $elementPdoManager = new ElementPdoManager();
    if ($path != '/') {
        //récupération du dossier parent
        $explode = explode('/', $path);
        $parentDirectoryName = $explode[sizeof($explode) - 2];
        $parentDirectoryPath = implode('/', array_slice($explode, 0, sizeof($explode) - 2)) . '/';
        $parentElementCriteria = array('state' => (int) 1, 'name' => $parentDirectoryName, 'serverPath' => $parentDirectoryPath, 'idOwner' => $idUser);
        $parentElement = $elementPdoManager->findOne($parentElementCriteria);
        if ($parentElement instanceof Element) {
            /*
             * 11 correspond au droit de lecture et écriture.
             * Si on souhaite accepter la copie avec des droits de plus bas niveau, il suffit d'ajouter les codes correspondant
             * au tableau en 3e paramètre ci-dessous.
             */
            $hasRight = actionAllowed($parentElement->getId(), $idUser, array('11'));
            if (is_bool($hasRight) && $hasRight == FALSE) {
                return array('error' => 'Creation not allowed.');
            } elseif (is_array($hasRight)) {
                return $hasRight;
            }
        } else {
            return $parentElement;
        }
    }
    //vérification qu'il n'existe pas déjà un dossier avec le même nom
    $elementCriteria = array('state' => (int) 1, 'name' => $folderName, 'serverPath' => $path, 'idOwner' => $idUser);
    $elementsWithSameName = $elementPdoManager->find($elementCriteria);
    if (is_array($elementsWithSameName) && array_key_exists('error', $elementsWithSameName)) {
        if ($elementsWithSameName['error'] != 'No match found.') {
            return $elementsWithSameName;
        }
    } else {
        foreach ($elementsWithSameName as $key => $elementWithSameName) {
            $isFolder = isFolder($elementWithSameName->getRefElement());
            if (is_bool($isFolder)) {
                if ($isFolder == FALSE) {
                    unset($elementsWithSameName[$key]);
                }
            } else {
                return $isFolder;
            }
        }
        if (!empty($elementsWithSameName)) {
            return array('error' => 'Folder name not available.');
        }
    }
    //File Server - 13/06/2014
    $mkdirResult = createFSDirectory($idUser, $path, $folderName);
    if (!is_bool($mkdirResult) || !($mkdirResult == TRUE)) {
        return $mkdirResult;
    }
    //Fin File Server
    //Récupération de l'id de RefElement dossier vide
    $refElementPdoManager = new RefElementPdoManager();
    $emptyFolder = $refElementPdoManager->findOne(array('state' => 1, 'code' => '4002'), array('_id' => TRUE));
    $newFolder = array('state' => 1, 'name' => $folderName, 'idOwner' => $idUser, 'idRefElement' => $emptyFolder['_id'], 'serverPath' => $path);
    $insertResult = $elementPdoManager->create($newFolder);
    if (is_bool($insertResult)) {
        if ($insertResult == TRUE) {
            //Le dossier parent était vide
            if (isset($parentElement)) {
                if ($parentElement->getRefElement() == $emptyFolder['_id']) {
                    $parentElementCriteria = array('_id' => $parentElement->getId());
                    //on change l'id du dossier parent pour dossier non vide
                    $notEmptyFolder = $refElementPdoManager->findOne(array('state' => 1, 'code' => '4003'), array('_id' => TRUE));
                    $update = array('$set' => array('idRefElement' => $notEmptyFolder['_id']));
                    //dans le cas où on voudrait récupérer le dossier parent mis à jour, on peut utiliser $updatedFolder
                    $updatedFolder = $elementPdoManager->findAndModify($parentElementCriteria, $update, array('new' => TRUE));
                    if ($updatedFolder instanceof Element) {
                        $operationSuccess = TRUE;
                    }
                }
                if ($inheritRightsFromParent == TRUE) {
                    //récupération des droits appliqués sur le dossier parent
                    $rightPdoManager = new RightPdoManager();
                    $rightCriteria = array('state' => 1, 'idElement' => $parentElement->getId());
                    $rights = $rightPdoManager->find($rightCriteria);
                    if (!array_key_exists('error', $rights)) {
                        //récupération du dossier précédemment inséré
                        $newElement = $elementPdoManager->findOne($newFolder);
                        if ($newElement instanceof Element) {
                            $insertRightCopy = array();
                            foreach ($rights as $right) {
                                $rightCopy = clone $right;
                                $rightCopy->setId(new MongoId());
                                $rightCopy->setElement($newElement->getId());
                                $insertRightCopy[] = $elementPdoManager->create($rightCopy);
                                //on pourrait se servir de $insertRightCopy pour identifier les erreurs éventuelles
                            }
                            //@todo vérifier que tous les insertRightCopy sont OK et si c'est le cas operationSuccess = TRUE
                            $operationSuccess = TRUE;
                        } else {
                            return $newElement;
                        }
                    }
                }
            }
            $operationSuccess = TRUE;
            return $operationSuccess;
        } else {
            return array('error' => 'Could not create folder in database.');
        }
    } else {
        return $insertResult;
    }
}
Пример #4
0
    }
</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());
            $refRight = $refRightManager->findById($userSharedElement->getRefRight());
Пример #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.');
    }
}
Пример #6
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;
 }
Пример #7
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;
        }
    }
}