diff --git a/app/Info.php b/app/Info.php index 51bd9fd07..b0b1c42e8 100644 --- a/app/Info.php +++ b/app/Info.php @@ -74,6 +74,24 @@ class Info extends Model } } + public function scopeRestrictMucServices($query) + { + $query->whereIn('parent', function ($query) { + $query->select('server') + ->from('infos') + ->whereIn('id', function ($query) { + $query->select('info_id') + ->from('identities') + ->where('category', 'conference'); + }) + ->whereNotIn('id', function ($query) { + $query->select('info_id') + ->from('identities') + ->where('category', 'gateway'); + }); + }); + } + public function setReactionsrestrictionsAttribute(array $arr) { $this->attributes['reactionsrestrictions'] = serialize($arr); diff --git a/app/Message.php b/app/Message.php index 959f8bb18..b054ec477 100644 --- a/app/Message.php +++ b/app/Message.php @@ -657,7 +657,7 @@ class Message extends Model if ($post = $xmppUri->getPost()) { $this->postid = $post->id; - } else { + } elseif($xmppUri->getServer() && $xmppUri->getNode() && $xmppUri->getNodeItemId()) { $getItem = new GetItem; $getItem->setTo($xmppUri->getServer()) ->setNode($xmppUri->getNode()) diff --git a/app/Widgets/Chat/_chat_header.tpl b/app/Widgets/Chat/_chat_header.tpl index dd5bbdc6a..0d7fac94b 100644 --- a/app/Widgets/Chat/_chat_header.tpl +++ b/app/Widgets/Chat/_chat_header.tpl @@ -111,16 +111,6 @@ {/if} - {if="$conference && $conference->info && $conference->info->name"} - - {$conference->info->name} - - {/if} - - {if="$conference && $conference->info && $conference->isGroupChat() && $conference->subject && $conference->info->name"} - - {/if} - {if="$conference && $conference->isGroupChat() && $subject = $conference->subject"} {$subject} diff --git a/app/Widgets/Rooms/Rooms.php b/app/Widgets/Rooms/Rooms.php index a2c335d27..3236243b4 100644 --- a/app/Widgets/Rooms/Rooms.php +++ b/app/Widgets/Rooms/Rooms.php @@ -167,8 +167,11 @@ class Rooms extends Base ->get() as $room ) { if (!$room->info) { + $jid = explodeJid($room->conference); + $request = new Request; $request->setTo($room->conference) + ->setParent($jid['server']) ->request(); } @@ -284,8 +287,11 @@ class Rooms extends Base return; } + $jid = explodeJid($room); + $r = new Request; $r->setTo($room) + ->setParent($jid['server']) ->request(); $p = new Muc; @@ -295,7 +301,6 @@ class Rooms extends Base $nickname = $this->user->username; } - $jid = explodeJid($room); $capability = \App\Info::where('server', $jid['server']) ->where('node', '') ->first(); @@ -308,10 +313,6 @@ class Rooms extends Base if ($capability->isMAM2()) { $p->enableMAM2(); } - } else { - $r = new Request; - $r->setTo($jid['server']) - ->request(); } $m = new GetMembers; diff --git a/app/Widgets/RoomsExplore/RoomsExplore.php b/app/Widgets/RoomsExplore/RoomsExplore.php index 04794ba6a..3bc72f82f 100644 --- a/app/Widgets/RoomsExplore/RoomsExplore.php +++ b/app/Widgets/RoomsExplore/RoomsExplore.php @@ -29,11 +29,13 @@ class RoomsExplore extends Base } $view->assign('vcards', Contact::whereIn('id', $keys)->get()->keyBy('id')); - $view->assign('bookmarks', $this->user->session - ->conferences() - ->whereIn('conference', $keys) - ->get() - ->keyBy('conference') + $view->assign( + 'bookmarks', + $this->user->session + ->conferences() + ->whereIn('conference', $keys) + ->get() + ->keyBy('conference') ); $view->assign('results', $results); $view->assign('global', $packet->content['global']); @@ -79,7 +81,7 @@ class RoomsExplore extends Base } else { $s = new Search; $s->setKeyword($keyword) - ->request(); + ->request(); } } @@ -88,6 +90,7 @@ class RoomsExplore extends Base $view = $this->tpl(); $rooms = \App\Info::whereCategory('conference') ->restrictUserHost() + ->restrictMucServices() ->whereType('text') ->where('mucpublic', true) ->where('mucpersistent', true) @@ -95,10 +98,10 @@ class RoomsExplore extends Base ->orderBy('occupants', 'desc'); if ($keyword) { - $rooms = $rooms->where(function($query) use ($keyword) { - $query->where('name', 'like', '%'.$keyword.'%') - ->orWhere('server', 'like', '%'.$keyword.'%') - ->orWhere('description', 'like', '%'.$keyword.'%'); + $rooms = $rooms->where(function ($query) use ($keyword) { + $query->where('name', 'like', '%' . $keyword . '%') + ->orWhere('server', 'like', '%' . $keyword . '%') + ->orWhere('description', 'like', '%' . $keyword . '%'); }); } @@ -106,11 +109,13 @@ class RoomsExplore extends Base $view->assign('vcards', Contact::whereIn('id', $rooms->pluck('server'))->get()->keyBy('id')); $view->assign('rooms', $rooms); - $view->assign('bookmarks', $this->user->session - ->conferences() - ->whereIn('conference', $rooms->pluck('server')) - ->get() - ->keyBy('conference') + $view->assign( + 'bookmarks', + $this->user->session + ->conferences() + ->whereIn('conference', $rooms->pluck('server')) + ->get() + ->keyBy('conference') ); $this->rpc('MovimTpl.fill', '#roomsexplore_local', $view->draw('_roomsexplore_local')); diff --git a/app/Widgets/RoomsUtils/RoomsUtils.php b/app/Widgets/RoomsUtils/RoomsUtils.php index fb743521a..3263d9de6 100644 --- a/app/Widgets/RoomsUtils/RoomsUtils.php +++ b/app/Widgets/RoomsUtils/RoomsUtils.php @@ -34,6 +34,7 @@ use Moxl\Xec\Action\Presence\Muc; use Moxl\Xec\Action\Presence\Unavailable; use Illuminate\Database\Capsule\Manager as DB; +use Moxl\Xec\Action\Register\Remove; class RoomsUtils extends Base { @@ -557,6 +558,10 @@ class RoomsUtils extends Base $d->setId($room) ->setVersion($conference->bookmarkversion) ->request(); + + $unregister = new Remove; + $unregister->setTo($room) + ->request(); } /** diff --git a/app/Widgets/RoomsUtils/_rooms_drawer.tpl b/app/Widgets/RoomsUtils/_rooms_drawer.tpl index f04fe4ea3..4def59714 100644 --- a/app/Widgets/RoomsUtils/_rooms_drawer.tpl +++ b/app/Widgets/RoomsUtils/_rooms_drawer.tpl @@ -65,7 +65,7 @@ {if="$conference->subject"}
  • - short_text + info_i

    @@ -77,7 +77,25 @@

    {autoescape="off"} - {$conference->subject|addUrls} + {$conference->subject|addUrls|nl2br} + {/autoescape} +

    +
    +
  • + {/if} + + {if="$conference->info->description"} +
  • + + short_text + +
    +

    + {$c->__('information.description')} +

    +

    + {autoescape="off"} + {$conference->info->description|addUrls|nl2br} {/autoescape}

    diff --git a/src/Moxl/API.php b/src/Moxl/API.php index 18d63da06..81322b223 100644 --- a/src/Moxl/API.php +++ b/src/Moxl/API.php @@ -18,7 +18,7 @@ class API if ($me->id && $me->session && $me->session->resource) { $iq->setAttribute( 'from', - $me->id.'/'.$me->session->resource + $me->id . '/' . $me->session->resource ); } diff --git a/src/Moxl/Stanza/Register.php b/src/Moxl/Stanza/Register.php index 870bf7103..a94420542 100644 --- a/src/Moxl/Stanza/Register.php +++ b/src/Moxl/Stanza/Register.php @@ -34,13 +34,13 @@ class Register \Moxl\API::request(\Moxl\API::iqWrapper($query, $to, 'set')); } - public static function remove() + public static function remove(?string $to) { $dom = new \DOMDocument('1.0', 'UTF-8'); $query = $dom->createElementNS('jabber:iq:register', 'query'); $query->appendChild($dom->createElement('remove')); - \Moxl\API::request(\Moxl\API::iqWrapper($query, false, 'set')); + \Moxl\API::request(\Moxl\API::iqWrapper($query, $to ?? false, 'set')); } public static function changePassword($to, $username, $password) diff --git a/src/Moxl/Xec/Action/Register/Remove.php b/src/Moxl/Xec/Action/Register/Remove.php index 9e4d2c933..a8b905201 100644 --- a/src/Moxl/Xec/Action/Register/Remove.php +++ b/src/Moxl/Xec/Action/Register/Remove.php @@ -7,10 +7,12 @@ use Moxl\Stanza\Register; class Remove extends Action { + protected ?string $_to = null; + public function request() { $this->store(); - Register::remove(); + Register::remove($this->_to); } public function handle(?\SimpleXMLElement $stanza = null, ?\SimpleXMLElement $parent = null) @@ -20,7 +22,10 @@ class Remove extends Action public function error(string $errorId, ?string $message = null) { - $this->pack($message); - $this->deliver(); + // We don't handle errors for now if we unregister from a specific thing + if ($this->_to == null) { + $this->pack($message); + $this->deliver(); + } } }