public function describeAvailabilityZones(ListDataType $zoneName = null, AvailabilityZoneFilterList $filter = null)
{
$result = null;
$isSoap = $this->client->getType() == Aws::CLIENT_SOAP;
$options = array();
if ($zoneName !== null) {
if ($isSoap) {
foreach ($zoneName as $v) {
$options['availabilityZoneSet']['item'][] = array('zoneName' => $v);
}
} else {
$options = $zoneName->getQueryArrayBare('ZoneName');
}
}
if ($filter !== null) {
if ($isSoap) {
foreach ($filter as $v) {
$vals = array();
foreach ($v->value as $vs) {
$vals[] = array('value' => $vs);
}
$t = array('name' => $v->name, 'valueSet' => array('item' => $vals));
$options['filterSet']['item'][] = $t;
}
} else {
$options = array_merge($options, $filter->getQueryArrayBare('Filter'));
}
}
$response = $this->client->call(ucfirst(__FUNCTION__), $options);
if ($response->getError() === false) {
//Success
$sxml = simplexml_load_string($response->getRawContent());
unset($response);
if (!empty($sxml->availabilityZoneInfo->item)) {
$result = new AvailabilityZoneList();
$result->setEc2($this->ec2)->setRequestId((string) $sxml->requestId);
foreach ($sxml->availabilityZoneInfo->item as $v) {
$zname = (string) $v->zoneName;
$item = $this->ec2->getEntityManagerEnabled() ? $this->ec2->availabilityZone->get($zname) : null;
if ($item === null) {
$item = new AvailabilityZoneData();
$item->setEc2($this->ec2);
$bAttach = true;
} else {
$bAttach = false;
}
$messageList = new AvailabilityZoneMessageList();
$messageList->setEc2($this->ec2);
if (!empty($v->messageSet->item)) {
foreach ($v->messageSet->item as $m) {
$message = new AvailabilityZoneMessageData();
$message->setEc2($this->ec2);
$message->message = (string) $m->message;
$messageList->append($message);
unset($message);
}
}
$item->zoneName = $zname;
$item->zoneState = (string) $v->zoneState;
$item->regionName = (string) $v->regionName;
$item->setMessageSet($messageList);
$result->append($item);
if ($bAttach && $this->ec2->getEntityManagerEnabled()) {
$this->getEntityManager()->attach($item);
}
unset($item);
}
}
}
return $result;
}