diff --git a/XMPPHP/Roster.php b/XMPPHP/Roster.php index 91bac21..020f2c5 100644 --- a/XMPPHP/Roster.php +++ b/XMPPHP/Roster.php @@ -79,14 +79,14 @@ class Roster * Retrieve contact via jid * * @param string $jid - * @return mixed|void + * @return array|null */ - public function getContact(string $jid) + public function getContact(string $jid): ?array { if ($this->isContact($jid)) { return $this->roster_array[$jid]['contact']; } - return; + return null; } /** @@ -128,12 +128,16 @@ class Roster * Add given contact to roster * * @param string $jid - * @param string $subscription + * @param string $subscription (optional) * @param string $name (optional) * @param array $groups (optional) */ - public function addContact(string $jid, string $subscription, string $name = '', array $groups = []): void - { + public function addContact( + string $jid, + string $subscription = 'none', + string $name = '', + array $groups = [] + ): void { $contact = ['jid' => $jid, 'subscription' => $subscription, 'name' => $name, 'groups' => $groups]; if ($this->isContact($jid)) { $this->roster_array[$jid]['contact'] = $contact; diff --git a/XMPPHP/XMPP.php b/XMPPHP/XMPP.php index 284f30d..4d6e08e 100644 --- a/XMPPHP/XMPP.php +++ b/XMPPHP/XMPP.php @@ -435,28 +435,30 @@ class XMPP extends XMLStream */ protected function roster_iq_handler(XMLObj $xml): void { - $status = "result"; + $status = 'result'; $xmlroster = $xml->sub('query'); $contacts = []; foreach ($xmlroster->subs as $item) { $groups = []; - if ($item->name == 'item') { - $jid = $item->attrs['jid']; //REQUIRED - $name = $item->attrs['name']; //MAY - $subscription = $item->attrs['subscription']; + if ($item->name === 'item') { + $jid = $item->attrs['jid']; // REQUIRED + $name = $item->attrs['name'] ?? ''; + $subscription = $item->attrs['subscription'] ?? 'none'; foreach ($item->subs as $subitem) { - if ($subitem->name == 'group') { + if ($subitem->name === 'group') { $groups[] = $subitem->data; } } - $contacts[] = [$jid, $subscription, $name, $groups]; //Store for action if no errors happen + // Store for action if no errors happen + $contacts[] = [$jid, $subscription, $name, $groups]; } else { - $status = "error"; + $status = 'error'; } } - if ($status == "result") { //No errors, add contacts + // No errors, add contacts + if ($status === 'result') { foreach ($contacts as $contact) { - $this->roster->addContact($contact[0], $contact[1], $contact[2], $contact[3]); + $this->roster->addContact(...$contact); } } if ($xml->attrs['type'] == 'set') {