|
@@ -25,13 +25,10 @@ trait MementoFinder { |
|
|
if ($this->loggedInUserId === $userId) { |
|
|
if ($this->loggedInUserId === $userId) { |
|
|
$userFolder = $this->serverContainer->getUserFolder($this->loggedInUserId); |
|
|
$userFolder = $this->serverContainer->getUserFolder($this->loggedInUserId); |
|
|
$moreMementos = findPrivateMementos($userFolder); |
|
|
$moreMementos = findPrivateMementos($userFolder); |
|
|
$foundMementos = mergeMementos($foundMementos, $moreMementos); |
|
|
|
|
|
|
|
|
$foundMementos = array_merge($foundMementos, $moreMementos); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Filter those that match the requested URL, and sort them. |
|
|
|
|
|
$matchingMementos = filterMementosByUrl($foundMementos, $url); |
|
|
|
|
|
sortMementos($matchingMementos); |
|
|
|
|
|
return $matchingMementos; |
|
|
|
|
|
|
|
|
return listMementosMatchingUrl($foundMementos, $url); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function findAllUsersMementosForUrl($url) { |
|
|
function findAllUsersMementosForUrl($url) { |
|
@@ -45,20 +42,17 @@ trait MementoFinder { |
|
|
$shareManager = $this->serverContainer->getShareManager(); |
|
|
$shareManager = $this->serverContainer->getShareManager(); |
|
|
foreach ($allUserIds as $userId) { |
|
|
foreach ($allUserIds as $userId) { |
|
|
$moreMementos = findPublicMementos($shareManager, $userId); |
|
|
$moreMementos = findPublicMementos($shareManager, $userId); |
|
|
$foundMementos = mergeMementos($foundMementos, $moreMementos); |
|
|
|
|
|
|
|
|
$foundMementos = array_merge($foundMementos, $moreMementos); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// If logged in, get current user's private mementos too. |
|
|
// If logged in, get current user's private mementos too. |
|
|
if ($this->loggedInUserId) { |
|
|
if ($this->loggedInUserId) { |
|
|
$userFolder = $this->serverContainer->getUserFolder($this->loggedInUserId); |
|
|
$userFolder = $this->serverContainer->getUserFolder($this->loggedInUserId); |
|
|
$moreMementos = findPrivateMementos($userFolder); |
|
|
$moreMementos = findPrivateMementos($userFolder); |
|
|
$foundMementos = mergeMementos($foundMementos, $moreMementos); |
|
|
|
|
|
|
|
|
$foundMementos = array_merge($foundMementos, $moreMementos); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Filter those that match the requested URL, and sort them. |
|
|
|
|
|
$matchingMementos = filterMementosByUrl($foundMementos, $url); |
|
|
|
|
|
$matchingMementos = sortMementos($matchingMementos); |
|
|
|
|
|
return $matchingMementos; |
|
|
|
|
|
|
|
|
return listMementosMatchingUrl($foundMementos, $url); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -127,9 +121,14 @@ function findPublicMementos($shareManager, $userId) { |
|
|
return $foundMementos; |
|
|
return $foundMementos; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function mergeMementos($mementos1, $mementos2) { |
|
|
|
|
|
// TODO deduplicate (we'll get public & private URLs for the same files) |
|
|
|
|
|
return array_merge($mementos1, $mementos2); |
|
|
|
|
|
|
|
|
function listMementosMatchingUrl($foundMementos, $url) { |
|
|
|
|
|
// Filter those that match the requested URL |
|
|
|
|
|
$matchingMementos = filterMementosByUrl($foundMementos, $url); |
|
|
|
|
|
// Deduplicate (as a file may be accessible both through a public and a private URL) |
|
|
|
|
|
$matchingMementos = deduplicateMementos($matchingMementos); |
|
|
|
|
|
// Sort them by date. |
|
|
|
|
|
$matchingMementos = sortMementos($matchingMementos); |
|
|
|
|
|
return $matchingMementos; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function filterMementosByUrl($mementos, $url) { |
|
|
function filterMementosByUrl($mementos, $url) { |
|
@@ -155,6 +154,18 @@ function normaliseUrl($url) { |
|
|
return $url; |
|
|
return $url; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function deduplicateMementos($mementos) { |
|
|
|
|
|
$deduped = []; |
|
|
|
|
|
$seenIds = []; |
|
|
|
|
|
foreach ($mementos as $memento) { |
|
|
|
|
|
if (!array_key_exists($memento['id'], $seenIds)) { |
|
|
|
|
|
$deduped[] = $memento; |
|
|
|
|
|
$seenIds[$memento['id']] = null; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return $deduped; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// Sort an array of mementos by their datetime. Oldest first. |
|
|
// Sort an array of mementos by their datetime. Oldest first. |
|
|
function sortMementos($mementos) { |
|
|
function sortMementos($mementos) { |
|
|
usort($mementos, function ($m1, $m2) { return $m1['datetime'] <=> $m2['datetime']; }); |
|
|
usort($mementos, function ($m1, $m2) { return $m1['datetime'] <=> $m2['datetime']; }); |
|
@@ -177,7 +188,8 @@ function extractMementoInfo($file) { |
|
|
$datetime = getDatetime($headElement); |
|
|
$datetime = getDatetime($headElement); |
|
|
return [ |
|
|
return [ |
|
|
'originalUrls' => $originalUrls, |
|
|
'originalUrls' => $originalUrls, |
|
|
'datetime' => $datetime |
|
|
|
|
|
|
|
|
'datetime' => $datetime, |
|
|
|
|
|
'id' => $file->getFileInfo()->getId() // for deduplication |
|
|
]; |
|
|
]; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|