info(); $this->normalizeQueryArray($info); $this->normalizeFieldsArray($info); $this->unsetBoringFields($info); $this->unsetIgnoredFields($info); if ($value->dead()) { $info['dead'] = true; } return array_merge( $info, parent::getProperties($value, $class, $propertyFilter) ); } /** * Normalize (empty) cursor query to always be an actual array. * * @param array $info Cursor info */ private function normalizeQueryArray(array &$info) { if (isset($info['query'])) { if ($info['query'] === new \StdClass()) { $info['query'] = array(); } elseif (is_array($info['query']) && isset($info['query']['$query'])) { if ($info['query']['$query'] === new \StdClass()) { $info['query']['$query'] = array(); } } } } /** * Normalize (empty) cursor fields to always be an actual array. * * @param array $info Cursor info */ private function normalizeFieldsArray(array &$info) { if (isset($info['fields']) && $info['fields'] === new \StdClass()) { $info['fields'] = array(); } } /** * Unset boring fields from the Cursor info array. * * @param array $info Cursor info */ private function unsetBoringFields(array &$info) { foreach (self::$boringFields as $boring) { if ($info[$boring] === 0) { unset($info[$boring]); } } } /** * Unset ignored fields from the Cursor info array. * * @param array $info Cursor info */ private function unsetIgnoredFields(array &$info) { foreach (self::$ignoreFields as $ignore) { if (isset($info[$ignore])) { unset($info[$ignore]); } } } }