exists(). * * @param string $username * * @return User */ public function load($username): UserInterface { if ($username !== '') { $key = mb_strtolower($username); $user = $this->get($key); if ($user) { return $user; } } else { $key = ''; } $directory = $this->getFlexDirectory(); /** @var User $object */ $object = $directory->createObject( [ 'username' => $username, 'state' => 'enabled' ], $key ); return $object; } /** * Find a user by username, email, etc * * @param string $query the query to search for * @param array $fields the fields to search * @return User */ public function find($query, $fields = ['username', 'email']): UserInterface { foreach ((array)$fields as $field) { if ($field === 'key') { $user = $this->get($query); } elseif ($field === 'storage_key') { $user = $this->withKeyField('storage_key')->get($query); } elseif ($field === 'flex_key') { $user = $this->withKeyField('flex_key')->get($query); } elseif ($field === 'email') { $user = $this->withKeyField('email')->get($query); } elseif ($field === 'username') { $user = $this->get(mb_strtolower($query)); } else { $user = $this->__call('find', [$query, $field]); } if ($user) { return $user; } } return $this->load(''); } protected static function updateIndexData(array &$entry, array $data) { $entry['key'] = mb_strtolower($entry['key']); $entry['email'] = isset($data['email']) ? mb_strtolower($data['email']) : null; } protected static function getIndexFile(FlexStorageInterface $storage) { // Load saved index file. $grav = Grav::instance(); $locator = $grav['locator']; $filename = $locator->findResource('user-data://flex/indexes/accounts.yaml', true, true); return CompiledYamlFile::instance($filename); } protected static function onChanges(array $entries, array $added, array $updated, array $removed) { $message = sprintf('Flex: User index updated, %d objects (%d added, %d updated, %d removed).', \count($entries), \count($added), \count($updated), \count($removed)); $grav = Grav::instance(); /** @var Logger $logger */ $logger = $grav['log']; $logger->addDebug($message); /** @var Debugger $debugger */ $debugger = $grav['debugger']; $debugger->addMessage($message, 'debug'); } }