Browse Source

Add resolveInfos() to resolve Info elements for Posts easily

pull/987/head
Timothée Jaussoin 5 years ago
parent
commit
6658dd20af
  1. 3
      CHANGELOG.md
  2. 38
      app/helpers/UtilsHelper.php
  3. 3
      app/widgets/Communities/Communities.php
  4. 1
      app/widgets/CommunityPosts/CommunityPosts.php
  5. 8
      app/widgets/Menu/Menu.php
  6. 5
      app/widgets/NewsNav/NewsNav.php
  7. 16
      app/widgets/Post/_post_card.tpl
  8. 13
      app/widgets/Post/_post_ticket.tpl

3
CHANGELOG.md

@ -8,6 +8,9 @@ v0.19.1 (trunk)
* Fix Notifications crash on MySQL
* Fix MUC private message self Carbon handling
* Fix a XML entities issues in Post content (#976)
* Add resolveInfos() to resolve Info elements for Posts easily
* New design for Post cards
* Fix chat attachments alignements
v0.19
---------------------------

38
app/helpers/UtilsHelper.php

@ -81,6 +81,44 @@ function getClientTypes()
];
}
/**
* Resolve infos from a Posts collection
*/
function resolveInfos($postCollection)
{
$serverNodes = $postCollection->map(function($item) {
return ['server' => $item->server, 'node' => $item->node];
})->unique(function ($item) {
return $item['server'].$item['node'];
});
if ($serverNodes->isNotEmpty()) {
$first = $serverNodes->first();
$infos = \App\Info::where([
'server' => $first['server'],
'node' => $first['node'],
]);
$serverNodes->skip(1)->each(function ($serverNode) use ($infos) {
$infos->orWhere([
'server' => $serverNode['server'],
'node' => $serverNode['node'],
]);
});
$infos = $infos->get()->keyBy(function ($item) {
return $item['server'].$item['node'];
});
$postCollection->map(function($item) use ($infos) {
$item->info = $infos->get($item->server.$item->node);
return $item;
});
return $postCollection;
}
}
/**
* Return a picture with a specific size
*/

3
app/widgets/Communities/Communities.php

@ -66,6 +66,9 @@ class Communities extends Base
: ($this->_page * $page)
)
->get();
$posts = resolveInfos($posts);
$view->assign('posts', $posts);
$view->assign('type', $type);
$view->assign('limit', $this->_page);

1
app/widgets/CommunityPosts/CommunityPosts.php

@ -132,6 +132,7 @@ class CommunityPosts extends Base
$posts = \App\Post::where('server', $origin)->where('node', $node)
->whereIn('nodeid', $ids)->get();
$posts = resolveInfos($posts);
$postsWithKeys = [];

8
app/widgets/Menu/Menu.php

@ -222,9 +222,13 @@ class Menu extends Base
$view->assign('next', $this->route('news', $page+1, [], 'contacts'));
}
$view->assign('items', $items
$items = $items
->orderBy('published', 'desc')
->take($this->_paging)->get());
->take($this->_paging)->get();
$items = resolveInfos($items);
$view->assign('items', $items);
$view->assign('type', $type);
$view->assign('page', $page);
$view->assign('paging', $this->_paging);

5
app/widgets/NewsNav/NewsNav.php

@ -43,7 +43,10 @@ class NewsNav extends Base
$posts->where('posts.server', $server);
}
$view->assign('posts', $posts->get()->shuffle());
$posts = $posts->get()->shuffle();
$posts = resolveInfos($posts);
$view->assign('posts', $posts);
$view->assign('page', $page);
$this->rpc('MovimTpl.fill', '#newsnav', $view->draw('_newsnav'));

16
app/widgets/Post/_post_card.tpl

@ -23,9 +23,19 @@
</span>
{/if}
{else}
<span class="primary icon bubble color {$post->node|stringToColor}">
{$post->node|firstLetterCapitalize}
</span>
{$url = null}
{if="$post->info != null"}
{$url = $post->info->getPhoto('l')}
{/if}
{if="$url"}
<span class="primary icon bubble">
<img src="{$url}"/>
</span>
{else}
<span class="primary icon bubble color {$post->node|stringToColor}">
{$post->node|firstLetterCapitalize}
</span>
{/if}
{/if}
<div>

13
app/widgets/Post/_post_ticket.tpl

@ -24,11 +24,14 @@
{$post->node|stringToColor}
{/if}"
{$url = false}
{if="$post->contact"}
{$url = $post->contact->getPhoto('l')}
{if="$url"}
style="background-image: url({$url});"
{/if}
{if="$post->info"}
{$url = $post->info->getPhoto('m')}
{/if}
{if="!$url && $post->contact"}
{$url = $post->contact->getPhoto('m')}
{/if}
{if="$url"}
style="background-image: url({$url});"
{/if}
>
{if="$url == false"}

Loading…
Cancel
Save