/** * @param AJXP_Node $node * @param String|null $direction "UP", "DOWN" * @return array() */ private function findMirrorNodesInShares($node, $direction) { $result = array(); if ($direction !== "UP") { $upmetas = array(); $node->collectMetadataInParents("ajxp_shared", AJXP_METADATA_ALLUSERS, AJXP_METADATA_SCOPE_REPOSITORY, false, $upmetas); foreach ($upmetas as $metadata) { if (is_array($metadata) && !empty($metadata["shares"])) { foreach ($metadata["shares"] as $sId => $sData) { $type = $sData["type"]; if ($type == "file") { continue; } $wsId = $sId; if ($type == "minisite") { $minisiteData = $this->getShareStore()->loadShare($sId); $wsId = $minisiteData["REPOSITORY"]; } $sharedNode = $metadata["SOURCE_NODE"]; $sharedPath = substr($node->getPath(), strlen($sharedNode->getPath())); $sharedNodeUrl = $node->getScheme() . "://" . $wsId . $sharedPath; $result[$wsId] = array(new AJXP_Node($sharedNodeUrl), "DOWN"); $this->logDebug('MIRROR NODES', 'Found shared in parent - register node ' . $sharedNodeUrl); } } } } if ($direction !== "DOWN") { if ($node->getRepository()->hasParent()) { $parentRepoId = $node->getRepository()->getParentId(); $parentRepository = ConfService::getRepositoryById($parentRepoId); if (!empty($parentRepository) && !$parentRepository->isTemplate) { $currentRoot = $node->getRepository()->getOption("PATH"); $owner = $node->getRepository()->getOwner(); $resolveUser = null; if ($owner != null) { $resolveUser = ConfService::getConfStorageImpl()->createUserObject($owner); } $parentRoot = $parentRepository->getOption("PATH", false, $resolveUser); $relative = substr($currentRoot, strlen($parentRoot)); $parentNodeURL = $node->getScheme() . "://" . $parentRepoId . $relative . $node->getPath(); $this->logDebug("action.share", "Should trigger on " . $parentNodeURL); $parentNode = new AJXP_Node($parentNodeURL); if ($owner != null) { $parentNode->setUser($owner); } $result[$parentRepoId] = array($parentNode, "UP"); } } } return $result; }