function printAsHtml() { global $filetype; if ($handle = opendir('./')) { /* This is the correct way to loop over the directory. */ $first = true; $i = 1; while (false !== ($file = readdir($handle))) { if (isFolder($file)) { $firstFile = getFirstFileIn("./" . $file); if ($firstFile != false) { echo "<li><a href=\"./{$file}/{$firstFile}\">Sensor {$i}</a></li>"; $i++; } } } closedir($handle); } }
/** * 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|bool|Element|Element[]|TRUE -- à vérifier */ function createNewFolder($idUser, $path, $folderName, $inheritRightsFromParent) { $idUser = new MongoId($idUser); $operationSuccess = FALSE; $elementManager = new ElementManager(); if ($path != '/') { //récupération du dossier parent $explode = explode('/', $path); $parentDirectoryName = $explode[sizeof($explode) - 2]; $parentDirectoryPath = array_slice($explode, 0, sizeof($explode) - 2); $parentElementCriteria = array('state' => (int) 1, 'name' => $parentDirectoryName, 'serverPath' => $parentDirectoryPath, 'idOwner' => $idUser); $parentElement = $elementManager->findOne($parentElementCriteria); if (!array_key_exists('error', $parentElement)) { /* * 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['_id'], $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 = $elementManager->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['idRefElement']); 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 $refElementManager = new RefElementManager(); $emptyFolder = $refElementManager->findOne(array('state' => 1, 'code' => '4002'), array('_id' => TRUE)); $newFolder = array('state' => 1, 'name' => $folderName, 'idOwner' => $idUser, 'idRefElement' => $emptyFolder['_id'], 'serverPath' => $path); $insertResult = $elementManager->create($newFolder); if (is_bool($insertResult)) { if ($insertResult == TRUE) { //Le dossier parent était vide if (isset($parentElement)) { if ($parentElement['idRefElement'] == $emptyFolder['_id']) { $parentElementCriteria = array('_id' => $parentElement->getId()); //on change l'id du dossier parent pour dossier non vide $notEmptyFolder = $refElementManager->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 = $elementManager->findAndModify($parentElementCriteria, $update, array('new' => TRUE)); if (!array_key_exists('error', $updatedFolder)) { $operationSuccess = TRUE; } } if ($inheritRightsFromParent == 'TRUE') { //récupération des droits appliqués sur le dossier parent $rightManager = new RightManager(); $rightCriteria = array('state' => 1, 'idElement' => $parentElement['_id']); $rights = $rightManager->find($rightCriteria); if (!array_key_exists('error', $rights)) { //récupération du dossier précédemment inséré $newElement = $elementManager->findOne($newFolder); if (!array_key_exists('error', $newElement)) { $insertRightCopy = array(); foreach ($rights as $right) { $rightCopy = $right; $rightCopy['_id'] = new MongoId(); $rightCopy['idElement'] = $newElement['_id']; $insertRightCopy[] = $elementManager->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; } }
/** * 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; } }
?> " <?php if (isFolder($entry)) { echo "disabled"; } ?> ><i class="fa fa-share-square-o"></i></a>	 <a class="btn btn-danger btn-raised" href="?delete=<?php echo $entry; ?> "><i class="fa fa-trash-o"></i></a> </div> </td> </tr> <?php if (isFolder($entry)) { ?> </a><?php } ?> <?php //echo "<tr><td>".$entry."</td><td><small><a href='?delete=".$entry."'><i class='fa fa-trash fa-lg'></i></a></small></td></tr><br>"; } } closedir($handle); } ?> </tbody> </table> <button class="btn btn-primary btn-xl btn-block btn-raised" data-toggle="modal" data-target="#myModal">+</button>
/** * 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.'); } }