addjs('contactactions.js'); $this->registerEvent('roster_additem_handle', 'onAdd', 'contact'); $this->registerEvent('roster_removeitem_handle', 'onDelete'); $this->registerEvent('roster_updateitem_handle', 'onUpdate'); } public function onDelete($packet) { Toast::send($this->__('roster.deleted')); } public function onAdd($packet) { Toast::send($this->__('roster.added')); } public function onUpdate($packet = false) { Toast::send($this->__('roster.updated')); } public function ajaxAddAsk($jid) { $view = $this->tpl(); $view->assign('contact', App\Contact::firstOrNew(['id' => $jid])); $view->assign('groups', $this->user->session->contacts()->select('group')->groupBy('group')->pluck('group')->toArray()); Dialog::fill($view->draw('_contactactions_add')); } public function ajaxGetDrawer($jid) { if (!$this->validateJid($jid)) { return; } $tpl = $this->tpl(); $tpl->assign('contact', \App\Contact::firstOrNew(['id' => $jid])); if ($jid != $this->user->id) { $tpl->assign('pictures', \App\Message::jid($jid) ->where('picture', true) ->orderBy('published', 'desc') ->take(24) ->get()); $tpl->assign('links', \App\Message::jid($jid) ->where('picture', false) ->whereNotNull('urlid') ->orderBy('published', 'desc') ->take(24) ->get()); $tpl->assign('roster', $this->user->session->contacts()->where('jid', $jid)->first()); } else { $tpl->assign('pictures', collect()); $tpl->assign('links', collect()); $tpl->assign('roster', null); } $hasFingerprints = ($this->user->bundles()->where('jid', $jid)->count() > 0); $tpl->assign('jid', $jid); $tpl->assign('clienttype', getClientTypes()); $tpl->assign('hasfingerprints', $hasFingerprints); $tpl->assign('posts', \App\Post::where('server', $jid) ->restrictToMicroblog() ->where('open', true) ->orderBy('published', 'desc') ->take(4) ->get() ); Drawer::fill($tpl->draw('_contactactions_drawer')); $this->rpc('Tabs.create'); if ($hasFingerprints) { $this->rpc('ContactActions.getDrawerFingerprints', $jid); } } public function ajaxGetDrawerFingerprints($jid, $deviceId) { $tpl = $this->tpl(); $tpl->assign('fingerprints', $this->user->bundles()->where('jid', $jid)->with('sessions')->get()); $tpl->assign('deviceid', $deviceId); $this->rpc('MovimTpl.fill', '#omemo_fingerprints', $tpl->draw('_contactactions_drawer_fingerprints')); } public function ajaxAdd($form) { $r = new AddItem; $r->setTo((string)$form->searchjid->value) ->setName((string)$form->alias->value) ->setGroup((string)$form->group->value) ->request(); $p = new Subscribe; $p->setTo((string)$form->searchjid->value) ->request(); (new Dialog)->ajaxClear(); } public function ajaxChat($jid) { if (!$this->validateJid($jid)) { return; } $c = new Chats; $c->ajaxOpen($jid); $this->rpc('MovimUtils.redirect', $this->route('chat', $jid)); } public function prepareEmbedUrl(EmbedLight $embed) { return (new \Chat)->prepareEmbed($embed, true); } public function prepareTicket(\App\Post $post) { return (new \Post)->prepareTicket($post); } /** * @brief Validate the jid * * @param string $jid */ private function validateJid($jid) { $validate_jid = Validator::stringType()->noWhitespace()->length(6, 60); return ($validate_jid->validate($jid)); } }