/** * Internal method to get capabilities of this adapter * * @return Capabilities */ protected function internalGetCapabilities() { if ($this->capabilities === null) { $marker = new stdClass(); $options = $this->getOptions(); // detect metadata $metadata = array('mtime', 'filespec'); if (!$options->getNoAtime()) { $metadata[] = 'atime'; } if (!$options->getNoCtime()) { $metadata[] = 'ctime'; } $capabilities = new Capabilities($this, $marker, array('supportedDatatypes' => array('NULL' => 'string', 'boolean' => 'string', 'integer' => 'string', 'double' => 'string', 'string' => true, 'array' => false, 'object' => false, 'resource' => false), 'supportedMetadata' => $metadata, 'minTtl' => 1, 'maxTtl' => 0, 'staticTtl' => false, 'ttlPrecision' => 1, 'expiredRead' => true, 'maxKeyLength' => 251, 'namespaceIsPrefix' => true, 'namespaceSeparator' => $options->getNamespaceSeparator())); // update capabilities on change options $this->getEventManager()->attach('option', function ($event) use($capabilities, $marker) { $params = $event->getParams(); if (isset($params['namespace_separator'])) { $capabilities->setNamespaceSeparator($marker, $params['namespace_separator']); } if (isset($params['no_atime']) || isset($params['no_ctime'])) { $metadata = $capabilities->getSupportedMetadata(); if (isset($params['no_atime']) && !$params['no_atime']) { $metadata[] = 'atime'; } elseif (isset($params['no_atime']) && ($index = array_search('atime', $metadata)) !== false) { unset($metadata[$index]); } if (isset($params['no_ctime']) && !$params['no_ctime']) { $metadata[] = 'ctime'; } elseif (isset($params['no_ctime']) && ($index = array_search('ctime', $metadata)) !== false) { unset($metadata[$index]); } $capabilities->setSupportedMetadata($marker, $metadata); } }); $this->capabilityMarker = $marker; $this->capabilities = $capabilities; } return $this->capabilities; }