Browse Source

merge with master

pull/865/head
Christine Ho 6 years ago
parent
commit
246cd55b3e
  1. 2
      CHANGELOG.md
  2. 8
      app/helpers/StringHelper.php
  3. 36
      app/widgets/Account/Account.php
  4. 20
      app/widgets/Account/_account_gateways.tpl
  5. 25
      app/widgets/Account/account.tpl
  6. 2
      app/widgets/Blog/Blog.php
  7. 2
      app/widgets/Chat/Chat.php
  8. 3
      app/widgets/ContactActions/_contactactions_drawer.tpl
  9. 2
      app/widgets/Draw/draw.css
  10. 1
      app/widgets/Draw/draw.js
  11. 1
      app/widgets/Draw/draw.tpl
  12. 4
      app/widgets/Rooms/Rooms.php
  13. 11
      app/widgets/Search/Search.php
  14. 53
      app/widgets/Search/_search_results.tpl
  15. 5
      lib/moxl/src/Moxl/Xec/Action/Register/Get.php
  16. 3
      lib/moxl/src/Moxl/Xec/Action/Register/Set.php

2
CHANGELOG.md

@ -20,6 +20,8 @@ v0.15.1 (trunk)
* Display all the contacts clients in the ContactActions drawer
* Add support of pubsub#publish_model in CommunityHeader
* Fix Bookmarks edition (Chat panel toggle) and show a toast on save
* Add Communities results to Search
* Add a Draw widget to the chat page
v0.15 – Donati
---------------------------

8
app/helpers/StringHelper.php

@ -329,13 +329,19 @@ function stripTags($string): string
/**
* Purify a string
*/
function purifyHTML($string): string
function purifyHTML($string, $base = null): string
{
$config = \HTMLPurifier_Config::createDefault();
$config->set('HTML.Doctype', 'XHTML 1.1');
$config->set('Cache.SerializerPath', '/tmp');
$config->set('HTML.DefinitionID', 'html5-definitions');
$config->set('HTML.DefinitionRev', 1);
if ($base !== null) {
$config->set('URI.Base', $base);
$config->set('URI.MakeAbsolute', true);
}
$config->set('CSS.AllowedProperties', ['float']);
if ($def = $config->maybeGetRawHTMLDefinition()) {
$def->addElement('video', 'Block', 'Optional: (source, Flow) | (Flow, source) | Flow', 'Common', [

36
app/widgets/Account/Account.php

@ -14,7 +14,10 @@ class Account extends \Movim\Widget\Base
$this->registerEvent('register_changepassword_handle', 'onPasswordChanged');
$this->registerEvent('register_remove_handle', 'onRemoved');
$this->registerEvent('register_get_handle', 'onRegister', 'account');
$this->registerEvent('register_get_error', 'onRegisterError', 'account');
$this->registerEvent('register_get_errorfeaturenotimplemented', 'onRegisterError', 'account');
$this->registerEvent('register_set_handle', 'onRegistered', 'account');
$this->registerEvent('register_set_error', 'onRegisterError', 'account');
}
public function onPasswordChanged()
@ -32,6 +35,12 @@ class Account extends \Movim\Widget\Base
$this->rpc('Presence_ajaxLogout');
}
public function onRegistered()
{
$this->rpc('MovimTpl.fill', '#account_gateways', $this->prepareGateways());
Notification::toast($this->__('client.registered'));
}
public function onRegister($package)
{
$content = $package->content;
@ -54,9 +63,12 @@ class Account extends \Movim\Widget\Base
}
}
public function onRegisterError()
public function onRegisterError($packet)
{
Notification::toast($this->__('error.oops'));
Notification::toast(
$packet->content ??
$this->__('error.oops')
);
}
public function ajaxChangePassword($form)
@ -137,6 +149,19 @@ class Account extends \Movim\Widget\Base
->request();
}
public function prepareGateways()
{
$view = $this->tpl();
$view->assign(
'gateways',
\App\Info::where('server', 'like', '%' . $this->user->session->host)
->where('category', 'gateway')
->get()
);
return $view->draw('_account_gateways');
}
private function validateServer($server)
{
return (Validator::stringType()->noWhitespace()->length(6, 80)->validate($server));
@ -144,11 +169,6 @@ class Account extends \Movim\Widget\Base
public function display()
{
$this->view->assign(
'gateways',
\App\Info::where('server', 'like', '%' . $this->user->session->host)
->where('category', 'gateway')
->get()
);
$this->view->assign('gateways', $this->prepareGateways());
}
}

20
app/widgets/Account/_account_gateways.tpl

@ -0,0 +1,20 @@
{if="$gateways->isNotEmpty()"}
<ul class="list active middle divided">
<li class="subheader">
<p>{$c->__('account.gateway_title')}</p>
</li>
{loop="$gateways"}
<li onclick="Account_ajaxGetRegistration('{$value->server}')">
<span class="primary icon bubble color gray
{if="$value->presence"}status online{/if}">
<i class="material-icons">swap_horiz</i>
</span>
<span class="control icon gray">
<i class="material-icons">chevron_right</i>
</span>
<p>{$value->name}</p>
<p>{$value->server}</p>
</li>
{/loop}
</ul>
{/if}

25
app/widgets/Account/account.tpl

@ -1,24 +1,9 @@
<div class="tabelem" title="{$c->__('account.title')}" id="account_widget">
{if="$gateways->isNotEmpty()"}
<ul class="list active middle divided">
<li class="subheader">
<p>{$c->__('account.gateway_title')}</p>
</li>
{loop="$gateways"}
<li onclick="Account_ajaxGetRegistration('{$value->server}')">
<span class="primary icon bubble color gray
{if="$value->presence"}status online{/if}">
<i class="material-icons">swap_horiz</i>
</span>
<span class="control icon gray">
<i class="material-icons">chevron_right</i>
</span>
<p>{$value->name}</p>
<p>{$value->server}</p>
</li>
{/loop}
</ul>
{/if}
<div id="account_gateways">
{autoescape="off"}
{$gateways}
{/autoescape}
</div>
<ul class="list middle active divided ">
<li class="subheader">
<p>{$c->__('account.password_change_title')}</p>

2
app/widgets/Blog/Blog.php

@ -219,6 +219,6 @@ class Blog extends Base
private function validateTag($tag)
{
return Validator::stringType()->notEmpty()->noWhitespace()->validate($tag);
return Validator::stringType()->notEmpty()->validate($tag);
}
}

2
app/widgets/Chat/Chat.php

@ -1065,7 +1065,7 @@ class Chat extends \Movim\Widget\Base
*/
private function validateJid($jid)
{
return (Validator::stringType()->noWhitespace()->length(6, 60)->validate($jid));
return (Validator::stringType()->noWhitespace()->length(6, 256)->validate($jid));
}
public function getSmileyPath($id)

3
app/widgets/ContactActions/_contactactions_drawer.tpl

@ -44,7 +44,7 @@
</ul>
</header>
{if="$roster && $roster->presences"}
{if="$roster && $roster->presences->count() > 0"}
<ul class="list middle">
<li class="subheader"><p>{$c->__('clients.title')}</p></li>
{loop="$roster->presences"}
@ -56,6 +56,7 @@
</i>
</span>
<p class="normal line">
<span class="info">{$value->resource}</span>
{$value->capability->name}
</p>
<p class="line">

2
app/widgets/Draw/draw.css

@ -59,6 +59,7 @@
#draw .draw-control.drawing {
transform: translateX(100%);
padding-bottom: 0.5rem;
}
#draw .draw-control li.selected span.primary {
@ -70,6 +71,7 @@
height: 5.5rem;
display: block;
padding-right: 0;
padding-left: 8rem;
}
#draw [data-width=small] i {

1
app/widgets/Draw/draw.js

@ -153,7 +153,6 @@ var Draw = {
Draw.save = document.getElementById('draw-save');
Draw.save.onclick = (e) => {
const finalCanvas = document.createElement('canvas');
const rect = Draw.canvas.getBoundingClientRect();
if (Draw.snapBackground) {
finalCanvas.setAttribute('width', Snap.canvas.width);

1
app/widgets/Draw/draw.tpl

@ -71,7 +71,6 @@
<p></p>
</li>
</ul>
<br />
</div>
<ul class="list controls">
<li>

4
app/widgets/Rooms/Rooms.php

@ -501,7 +501,7 @@ class Rooms extends Base
*/
public function ajaxChatroomAdd($form)
{
if (!filter_var($form->jid->value, FILTER_VALIDATE_EMAIL)) {
if (!$this->validateRoom($form->jid->value)) {
Notification::toast($this->__('chatrooms.bad_id'));
} elseif (trim($form->name->value) == '') {
Notification::toast($this->__('chatrooms.empty_name'));
@ -595,7 +595,7 @@ class Rooms extends Base
*/
private function validateRoom($room)
{
return (Validator::stringType()->noWhitespace()->length(6, 80)->validate($room));
return (Validator::stringType()->noWhitespace()->contains('@')->length(6, 256)->validate($room));
}
/**

11
app/widgets/Search/Search.php

@ -93,12 +93,21 @@ class Search extends Base
})
->groupBy('name')
->orderBy('count', 'desc')
->take(5)
->take(4)
->get()
->pluck('name', 'count');
$view->assign('tags', $tags);
$communities = \App\Info::whereRaw('lower(node) like ?', '%'.strtolower($key).'%')
->where('category', 'pubsub')
->where('type', 'leaf')
->where('pubsubaccessmodel', 'open')
->take(5)
->get();
$view->assign('communities', $communities);
return $view->draw('_search_results');
}

53
app/widgets/Search/_search_results.tpl

@ -5,12 +5,12 @@
{/if}
{if="$tags->isNotEmpty()"}
<ul class="list active">
<li class="subheader">
<ul class="list active flex">
<li class="subheader block large">
<p>{$c->__('search.tags')}</p>
</li>
{loop="$tags"}
<li onclick="MovimUtils.redirect('{$c->route('tag', $value)}')">
<li class="block" onclick="MovimUtils.redirect('{$c->route('tag', $value)}')">
<span class="primary icon gray">
#
</span>
@ -24,6 +24,53 @@
</ul>
{/if}
{if="$communities->isNotEmpty()"}
<ul class="list card active middle">
<li class="subheader">
<p>
<span class="info">{$communities|count}</span>
{$c->__('page.communities')}
</p>
</li>
{loop="$communities"}
<li
onclick="MovimUtils.redirect('{$c->route('community', [$value->server, $value->node])}')"
title="{$value->server} - {$value->node}"
>
{$url = $value->getPhoto('m')}
{if="$url"}
<span class="primary icon bubble">
<img src="{$url}"/>
</span>
{else}
<span class="primary icon bubble color {$value->node|stringToColor}">
{$value->node|firstLetterCapitalize}
</span>
{/if}
<span class="control icon gray">
<i class="material-icons">chevron_right</i>
</span>
<p class="line normal">
{if="$value->name"}
{$value->name}
{else}
{$value->node}
{/if}
{if="$value->description"}
<span class="second">
{$value->description|strip_tags}
</span>
{/if}
</p>
<p class="line">
{$value->server} / {$value->node}
</p>
</li>
{/loop}
</ul>
{/if}
{if="$posts->isNotEmpty()"}
<ul id="search_posts" class="list card active middle">
<li class="subheader">

5
lib/moxl/src/Moxl/Xec/Action/Register/Get.php

@ -22,6 +22,11 @@ class Get extends Action
$this->deliver();
}
public function error($stanza)
{
$this->deliver();
}
public function errorFeatureNotImplemented()
{
$this->deliver();

3
lib/moxl/src/Moxl/Xec/Action/Register/Set.php

@ -34,8 +34,9 @@ class Set extends Action
$this->deliver();
}
public function error($stanza)
public function error($id, $message = false)
{
$this->pack($message);
$this->deliver();
}

Loading…
Cancel
Save