public function listObjects($bucketName, $delimiter = null, $marker = null, $maxKeys = null, $prefix = null)
{
$result = null;
$options = array('_subdomain' => (string) $bucketName);
$aQueryString = array();
if ($delimiter !== null) {
$aQueryString[] = 'delimiter=' . self::escape($delimiter);
}
if ($marker !== null) {
$aQueryString[] = 'marker=' . self::escape($marker);
}
if ($maxKeys !== null) {
$aQueryString[] = 'max-keys=' . self::escape($maxKeys);
}
if ($prefix !== null) {
$aQueryString[] = 'prefix=' . self::escape($prefix);
}
$response = $this->client->call('GET', $options, '/' . (!empty($aQueryString) ? '?' . join('&', $aQueryString) : ''));
if ($response->getError() === false) {
//Success
$em = $this->getEntityManager();
$sxml = simplexml_load_string($response->getRawContent());
$result = new ObjectList();
$result->setS3($this->s3);
$result->setBucketName((string) $sxml->Name);
if (!empty($sxml->Marker)) {
$result->setMarker((string) $sxml->Marker);
}
if (!empty($sxml->Contents)) {
foreach ($sxml->Contents as $v) {
$objectName = (string) $v->Key;
//Tries to find object in storage
$object = $this->s3->object->get(array((string) $bucketName, $objectName));
if ($object instanceof ObjectData) {
//Resets object's properties
$object->resetObject();
} else {
//Creates a new one.
$object = new ObjectData();
$na = true;
}
$ownerid = (string) $v->Owner->ID;
if (!empty($ownerid)) {
$owner = $em->getRepository('S3:Owner')->find($ownerid);
if ($owner === null) {
$owner = new OwnerData();
$owner->ownerid = $ownerid;
$owner->displayName = (string) $v->Owner->DisplayName;
$em->attach($owner);
}
$object->setOwner($owner);
unset($owner);
}
$object->setBucketName((string) $bucketName)->setObjectName($objectName)->setETag((string) $v->ETag)->setSize((string) $v->Size)->setStorageClass((string) $v->StorageClass)->setLastModified(new \DateTime((string) $v->LastModified, new \DateTimeZone('UTC')));
if (isset($na)) {
//For the new object we need to attach it
$em->attach($object);
unset($na);
}
$result->append($object);
unset($object);
}
}
}
return $result;
}