Browse Source
- Add a new page Groups to manage the Pubsub nodes (reimplementation of the 0.8 feature)
- Add a new page Groups to manage the Pubsub nodes (reimplementation of the 0.8 feature)
- Add the subscribe/unsubscribe feature (+ bookmark sync) - Add the pubsub configuration feature - Add the node refresh feature - Add a .spinner CSS class to display a spinner in the UI - Clean the titles of the Movim pages - Fix Some SQL requests - Fiw some warnings - Fix a CSS label issuepull/16/head
48 changed files with 941 additions and 66 deletions
-
10app/assets/js/movim_tpl.js
-
3app/controllers/ChatController.php
-
3app/controllers/ConfController.php
-
3app/controllers/ContactController.php
-
2app/controllers/GroupController.php
-
3app/controllers/HelpController.php
-
2app/controllers/MainController.php
-
2app/controllers/NewsController.php
-
3app/models/contact/ContactDAO.php
-
60app/models/item/ItemDAO.php
-
24app/models/postn/PostnDAO.php
-
1app/models/subscription/Subscription.php
-
1app/models/subscription/SubscriptionDAO.php
-
3app/views/group.tpl
-
21app/widgets/Chats/Chats.php
-
2app/widgets/Chats/_chats_add.tpl
-
329app/widgets/Group/Group.php
-
13app/widgets/Group/_group_config.tpl
-
4app/widgets/Group/_group_empty.tpl
-
41app/widgets/Group/_group_header.tpl
-
64app/widgets/Group/_group_posts.tpl
-
3app/widgets/Group/_group_publish.tpl
-
37app/widgets/Group/_group_subscribe.tpl
-
19app/widgets/Group/_group_unsubscribe.tpl
-
9app/widgets/Group/group.js
-
3app/widgets/Group/group.tpl
-
12app/widgets/Group/locales.ini
-
102app/widgets/Groups/Groups.php
-
18app/widgets/Groups/_groups_header.tpl
-
31app/widgets/Groups/_groups_server.tpl
-
36app/widgets/Groups/_groups_subscriptions.tpl
-
30app/widgets/Groups/groups.js
-
3app/widgets/Groups/groups.tpl
-
5app/widgets/Groups/locales.ini
-
12app/widgets/Header/_header_group.tpl
-
1app/widgets/Header/locales.ini
-
2app/widgets/Login/Login.php
-
2app/widgets/Menu/menu.js
-
2app/widgets/Navigation/navigation.tpl
-
2app/widgets/Node/Node.php
-
4app/widgets/Presence/_presence.tpl
-
2app/widgets/Rooms/Rooms.php
-
9app/widgets/Rooms/_rooms.tpl
-
2app/widgets/Rooms/locales.ini
-
6linker.php
-
4themes/material/css/form.css
-
5themes/material/css/list.css
-
52themes/material/css/style.css
@ -0,0 +1,329 @@ |
|||
<?php |
|||
|
|||
use Moxl\Xec\Action\Pubsub\GetItems; |
|||
use Moxl\Xec\Action\Pubsub\GetMetadata; |
|||
use Moxl\Xec\Action\Pubsub\GetAffiliations; |
|||
use Moxl\Xec\Action\Pubsub\Subscribe; |
|||
use Moxl\Xec\Action\Pubsub\Unsubscribe; |
|||
|
|||
use Moxl\Xec\Action\Pubsub\GetConfig; |
|||
use Moxl\Xec\Action\Pubsub\SetConfig; |
|||
|
|||
use Respect\Validation\Validator; |
|||
|
|||
class Group extends WidgetCommon |
|||
{ |
|||
private $_paging = 15; |
|||
private $_role = null; |
|||
|
|||
function load() |
|||
{ |
|||
$this->registerEvent('pubsub_getitems_handle', 'onItems'); |
|||
$this->registerEvent('pubsub_getitems_error', 'onItemsError'); |
|||
$this->registerEvent('pubsub_subscribe_handle', 'onSubscribed'); |
|||
$this->registerEvent('pubsub_unsubscribe_handle', 'onUnsubscribed'); |
|||
$this->registerEvent('pubsub_getaffiliations_handle', 'onAffiliations'); |
|||
$this->registerEvent('pubsub_getconfig_handle', 'onConfig'); |
|||
$this->registerEvent('pubsub_setconfig_handle', 'onConfigSaved'); |
|||
$this->registerEvent('bookmark_set_handle', 'onBookmark'); |
|||
$this->addjs('group.js'); |
|||
} |
|||
|
|||
function onItems($packet) |
|||
{ |
|||
$arr = $packet->content; |
|||
$this->displayItems($arr['server'], $arr['node']); |
|||
RPC::call('Group.clearLoad'); |
|||
RPC::call('MovimTpl.showPanel'); |
|||
} |
|||
|
|||
function onBookmark() |
|||
{ |
|||
$this->ajaxClear(); |
|||
|
|||
$g = new Groups; |
|||
$g->ajaxHeader(); |
|||
$g->ajaxSubscriptions(); |
|||
} |
|||
|
|||
function onItemsError($packet) |
|||
{ |
|||
$arr = $packet->content; |
|||
Notification::append(false, $this->__('group.empty')); |
|||
// Display an error message
|
|||
RPC::call('Group.clearLoad'); |
|||
} |
|||
|
|||
function onAffiliations($packet) |
|||
{ |
|||
list($affiliations, $server, $node) = array_values($packet->content); |
|||
|
|||
foreach($affiliations as $r) { |
|||
if($r[0] == $this->user->getLogin()) |
|||
$this->_role = (string)$r[1]; |
|||
} |
|||
|
|||
Header::fill($this->prepareHeader($server, $node)); |
|||
|
|||
if(isset($this->_role) |
|||
&& ($this->_role == 'owner' || $this->_role == 'publisher')) { |
|||
$view = $this->tpl(); |
|||
RPC::call('movim_append', 'group_widget', $view->draw('_group_publish', true)); |
|||
} |
|||
|
|||
} |
|||
|
|||
function onConfig($packet) |
|||
{ |
|||
list($config, $server, $node) = array_values($packet->content); |
|||
|
|||
$view = $this->tpl(); |
|||
|
|||
$xml = new \XMPPtoForm(); |
|||
$form = $xml->getHTML($config->x->asXML()); |
|||
|
|||
$view->assign('form', $form); |
|||
$view->assign('server', $server); |
|||
$view->assign('node', $node); |
|||
$view->assign('attributes', $config->attributes()); |
|||
|
|||
Dialog::fill($view->draw('_group_config', true), true); |
|||
} |
|||
|
|||
function onConfigSaved() |
|||
{ |
|||
Notification::append(false, $this->__('group.config_saved')); |
|||
} |
|||
|
|||
function onSubscribed($packet) |
|||
{ |
|||
$arr = $packet->content; |
|||
|
|||
// Set the bookmark
|
|||
$r = new Rooms; |
|||
$r->setBookmark(); |
|||
|
|||
Notification::append(null, $this->__('group.subscribed')); |
|||
|
|||
// Set the public list
|
|||
/* |
|||
//add the group to the public list (if checked)
|
|||
if($this->_data['listgroup'] == true){ |
|||
$add = new ListAdd(); |
|||
$add->setTo($this->_to) |
|||
->setNode($this->_node) |
|||
->setFrom($this->_from) |
|||
->setData($this->_data) |
|||
->request(); |
|||
} |
|||
|
|||
}*/ |
|||
} |
|||
|
|||
function onUnsubscribed($packet) |
|||
{ |
|||
$arr = $packet->content; |
|||
|
|||
// Set the bookmark
|
|||
$r = new Rooms; |
|||
$r->setBookmark(); |
|||
|
|||
Notification::append(null, $this->__('group.unsubscribed')); |
|||
} |
|||
|
|||
private function displayItems($server, $node) |
|||
{ |
|||
if(!$this->validateServerNode($server, $node)) return; |
|||
|
|||
$html = $this->prepareGroup($server, $node); |
|||
$header = $this->prepareHeader($server, $node); |
|||
|
|||
Header::fill($header); |
|||
|
|||
RPC::call('movim_fill', 'group_widget', $html); |
|||
} |
|||
|
|||
function ajaxGetMetadata($server, $node) |
|||
{ |
|||
if(!$this->validateServerNode($server, $node)) return; |
|||
|
|||
$r = new GetMetadata; |
|||
$r->setTo($server)->setNode($node) |
|||
->request(); |
|||
} |
|||
|
|||
function ajaxGetConfig($server, $node){ |
|||
if(!$this->validateServerNode($server, $node)) return; |
|||
|
|||
$r = new GetConfig; |
|||
$r->setTo($server) |
|||
->setNode($node) |
|||
->request(); |
|||
} |
|||
|
|||
function ajaxSetConfig($data, $server, $node){ |
|||
if(!$this->validateServerNode($server, $node)) return; |
|||
|
|||
$r = new SetConfig; |
|||
$r->setTo($server) |
|||
->setNode($node) |
|||
->setData($data) |
|||
->request(); |
|||
} |
|||
|
|||
function ajaxGetItems($server, $node) |
|||
{ |
|||
if(!$this->validateServerNode($server, $node)) return; |
|||
|
|||
$r = new GetItems; |
|||
$r->setTo($server) |
|||
->setNode($node); |
|||
|
|||
$pd = new \Modl\PostnDAO(); |
|||
$posts = $pd->getNodeUnfiltered($server, $node, 0, 1); |
|||
|
|||
if(isset($posts[0])) { |
|||
$r->setSince($posts[0]->updated); |
|||
} |
|||
|
|||
$r->request(); |
|||
|
|||
RPC::call('Group.addLoad'); |
|||
} |
|||
|
|||
function ajaxGetAffiliations($server, $node){ |
|||
if(!$this->validateServerNode($server, $node)) return; |
|||
|
|||
$r = new GetAffiliations; |
|||
$r->setTo($server)->setNode($node) |
|||
->request(); |
|||
} |
|||
|
|||
function ajaxAskSubscribe($server, $node) |
|||
{ |
|||
if(!$this->validateServerNode($server, $node)) return; |
|||
|
|||
$view = $this->tpl(); |
|||
|
|||
$view->assign('server', $server); |
|||
$view->assign('node', $node); |
|||
|
|||
$pd = new \Modl\ItemDAO; |
|||
$item = $pd->getItem($server, $node); |
|||
|
|||
if(isset($item)) { |
|||
$view->assign('item', $item); |
|||
} else { |
|||
$view->assign('item', null); |
|||
} |
|||
|
|||
Dialog::fill($view->draw('_group_subscribe', true)); |
|||
} |
|||
|
|||
function ajaxSubscribe($form, $server, $node) |
|||
{ |
|||
if(!$this->validateServerNode($server, $node)) return; |
|||
|
|||
$g = new Subscribe; |
|||
$g->setTo($server) |
|||
->setNode($node) |
|||
->setFrom($this->user->getLogin()) |
|||
->setData($form) |
|||
->request(); |
|||
} |
|||
|
|||
function ajaxAskUnsubscribe($server, $node) |
|||
{ |
|||
if(!$this->validateServerNode($server, $node)) return; |
|||
|
|||
$view = $this->tpl(); |
|||
|
|||
$view->assign('server', $server); |
|||
$view->assign('node', $node); |
|||
|
|||
$pd = new \Modl\ItemDAO; |
|||
$item = $pd->getItem($server, $node); |
|||
|
|||
if(isset($item)) { |
|||
$view->assign('item', $item); |
|||
} else { |
|||
$view->assign('item', null); |
|||
} |
|||
|
|||
Dialog::fill($view->draw('_group_unsubscribe', true)); |
|||
} |
|||
|
|||
function ajaxUnsubscribe($server, $node) |
|||
{ |
|||
if(!$this->validateServerNode($server, $node)) return; |
|||
|
|||
$sd = new \Modl\SubscriptionDAO(); |
|||
|
|||
foreach($sd->get($server, $node) as $s) { |
|||
$g = new Unsubscribe; |
|||
$g->setTo($server) |
|||
->setNode($node) |
|||
->setSubid($s->subid) |
|||
->setFrom($this->user->getLogin()) |
|||
->request(); |
|||
} |
|||
} |
|||
|
|||
function ajaxClear() |
|||
{ |
|||
$html = $this->prepareEmpty(); |
|||
RPC::call('movim_fill', 'group_widget', $html); |
|||
} |
|||
|
|||
function prepareEmpty() |
|||
{ |
|||
$view = $this->tpl(); |
|||
$html = $view->draw('_group_empty', true); |
|||
|
|||
return $html; |
|||
} |
|||
|
|||
private function prepareHeader($server, $node) |
|||
{ |
|||
$pd = new \Modl\ItemDAO; |
|||
$item = $pd->getItem($server, $node); |
|||
|
|||
$pd = new \Modl\SubscriptionDAO; |
|||
$subscription = $pd->get($server, $node); |
|||
|
|||
$view = $this->tpl(); |
|||
|
|||
$view->assign('item', $item); |
|||
$view->assign('subscription', $subscription); |
|||
$view->assign('role', $this->_role); |
|||
|
|||
return $view->draw('_group_header', true); |
|||
} |
|||
|
|||
private function prepareGroup($server, $node) |
|||
{ |
|||
$pd = new \Modl\PostnDAO(); |
|||
$posts = $pd->getNodeUnfiltered($server, $node, 0, $this->_paging); |
|||
|
|||
$view = $this->tpl(); |
|||
$view->assign('posts', $posts); |
|||
$html = $view->draw('_group_posts', true); |
|||
|
|||
return $html; |
|||
} |
|||
|
|||
private function validateServerNode($server, $node) |
|||
{ |
|||
$validate_server = Validator::string()->noWhitespace()->length(6, 40); |
|||
$validate_node = Validator::string()->length(3, 100); |
|||
|
|||
if(!$validate_server->validate($server) |
|||
|| !$validate_node->validate($node) |
|||
) return false; |
|||
else return true; |
|||
} |
|||
|
|||
function display() |
|||
{ |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
<section class="scroll"> |
|||
<form name="config" data-sessionid="{$attributes->sessionid}" data-node="{$attributes->node}"> |
|||
{$form} |
|||
</form> |
|||
</section> |
|||
<div> |
|||
<a onclick="Dialog.clear()" class="button flat"> |
|||
{$c->__('button.close')} |
|||
</a> |
|||
<a onclick="Group_ajaxSetConfig(movim_parse_form('config'), '{$server}', '{$node}'); Dialog.clear();" class="button flat"> |
|||
{$c->__('button.save')} |
|||
</a> |
|||
</div> |
|||
@ -0,0 +1,4 @@ |
|||
<div class="placeholder icon pages"> |
|||
<h1>{$c->__('group.empty_title')}</h1> |
|||
<h4>{$c->__('group.empty_text')}</h4> |
|||
</div> |
|||
@ -0,0 +1,41 @@ |
|||
<div> |
|||
<span class="on_desktop icon"><i class="md md-pages"></i></span> |
|||
<h2> |
|||
{$c->__('page.groups')} |
|||
</h2> |
|||
</div> |
|||
<div> |
|||
<ul class="active"> |
|||
{if="$role == 'owner'"} |
|||
<li onclick="Group_ajaxGetConfig('{$item->server}', '{$item->node}')"> |
|||
<span class="icon"> |
|||
<i class="md md-settings"></i> |
|||
</span> |
|||
</li> |
|||
{/if} |
|||
{if="$subscription == null"} |
|||
<li onclick="Group_ajaxAskSubscribe('{$item->server}', '{$item->node}')"> |
|||
<span class="icon"> |
|||
<i class="md md-bookmark-outline"></i> |
|||
</span> |
|||
</li> |
|||
{else} |
|||
<li onclick="Group_ajaxAskUnsubscribe('{$item->server}', '{$item->node}')"> |
|||
<span class="icon"> |
|||
<i class="md md-bookmark"></i> |
|||
</span> |
|||
</li> |
|||
{/if} |
|||
</ul> |
|||
<h2 class="active {if="$role == 'owner'"}r2{else}r1{/if}" |
|||
onclick="MovimTpl.hidePanel(); Group_ajaxClear(); Groups_ajaxHeader();"> |
|||
<span id="back" class="icon"><i class="md md-arrow-back"></i></span> |
|||
{if="$item != null"} |
|||
{if="$item->name"} |
|||
{$item->name} |
|||
{else} |
|||
{$item->node} |
|||
{/if} |
|||
{/if} |
|||
</h2> |
|||
</div> |
|||
@ -0,0 +1,64 @@ |
|||
{loop="$posts"} |
|||
<article> |
|||
<header> |
|||
<ul class="thick"> |
|||
<li class="condensed"> |
|||
{$url = $value->getContact()->getPhoto('s')} |
|||
{if="$url"} |
|||
<span class="icon bubble"> |
|||
<img src="{$url}"> |
|||
</span> |
|||
{else} |
|||
<span class="icon bubble color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span> |
|||
{/if} |
|||
<h2> |
|||
{if="$value->title != null"} |
|||
{$value->title} |
|||
{else} |
|||
{$c->__('post.default_title')} |
|||
{/if} |
|||
</h2> |
|||
<p> |
|||
{if="$value->node == 'urn:xmpp:microblog:0' && $value->getContact()->getTrueName() != ''"} |
|||
{$value->getContact()->getTrueName()} - |
|||
{/if} |
|||
{$value->published|strtotime|prepareDate} |
|||
</p> |
|||
</li> |
|||
</ul> |
|||
</header> |
|||
<section> |
|||
{$value->contentcleaned} |
|||
</section> |
|||
<footer> |
|||
<ul class="thin"> |
|||
{if="isset($value->getAttachements().links)"} |
|||
{loop="$value->getAttachements().links"} |
|||
<li> |
|||
<span class="icon small"><img src="http://icons.duckduckgo.com/ip2/{$value.url.host}.ico"/></span> |
|||
<a href="{$value.href}" class="alternate" target="_blank"> |
|||
<span>{$value.href|urldecode}</span> |
|||
</a> |
|||
</li> |
|||
{/loop} |
|||
{/if} |
|||
{if="isset($value->getAttachements().files)"} |
|||
{loop="$value->getAttachements().files"} |
|||
<li> |
|||
<a |
|||
href="{$value.href}" |
|||
class="enclosure" |
|||
type="{$value.type}" |
|||
target="_blank"> |
|||
<span class="icon small gray"> |
|||
<span class="md md-attach-file"></span> |
|||
</span> |
|||
<span>{$value.href|urldecode}</span> |
|||
</a> |
|||
</li> |
|||
{/loop} |
|||
{/if} |
|||
</ul> |
|||
</footer> |
|||
</article> |
|||
{/loop} |
|||
@ -0,0 +1,3 @@ |
|||
<a onclick="Group_ajaxPublish()" class="button action color"> |
|||
<i class="md md-create"></i> |
|||
</a> |
|||
@ -0,0 +1,37 @@ |
|||
<section> |
|||
<h3>{$c->__('group.subscribe')}</h3> |
|||
{if="$item"} |
|||
<br /> |
|||
<h4 class="gray"> |
|||
{$item->name} |
|||
</h4> |
|||
{/if} |
|||
<ul class="simple"> |
|||
<li> |
|||
<form name="subscribe"> |
|||
<div> |
|||
<input |
|||
name="label" |
|||
type="text" |
|||
title="{$c->__('group.label_label')}" |
|||
placeholder="My Group Name" |
|||
{if="$item"} |
|||
value="{$item->name}" |
|||
{/if} |
|||
/> |
|||
<label for="label">{$c->__('group.label_label')}</label> |
|||
</div> |
|||
</form> |
|||
</li> |
|||
</ul> |
|||
</section> |
|||
<div> |
|||
<a onclick="Dialog.clear()" class="button flat"> |
|||
{$c->__('button.close')} |
|||
</a> |
|||
<a |
|||
onclick="Group_ajaxSubscribe(movim_form_to_json('subscribe'), '{$server}', '{$node}'); Dialog.clear()" |
|||
class="button flat"> |
|||
{$c->__('group.subscribe')} |
|||
</a> |
|||
</div> |
|||
@ -0,0 +1,19 @@ |
|||
<section> |
|||
<h3>{$c->__('group.sure')}</h3> |
|||
{if="$item"} |
|||
<br /> |
|||
<h4 class="gray"> |
|||
{$c->__('group.unsubscribe_text')} : {$item->name} |
|||
</h4> |
|||
{/if} |
|||
</section> |
|||
<div> |
|||
<a onclick="Dialog.clear()" class="button flat"> |
|||
{$c->__('button.close')} |
|||
</a> |
|||
<a |
|||
onclick="Group_ajaxUnsubscribe('{$server}', '{$node}'); Dialog.clear()" |
|||
class="button flat"> |
|||
{$c->__('group.unsubscribe')} |
|||
</a> |
|||
</div> |
|||
@ -0,0 +1,9 @@ |
|||
var Group = { |
|||
addLoad: function() { |
|||
movim_add_class('#group_widget', 'on'); |
|||
}, |
|||
|
|||
clearLoad: function() { |
|||
movim_remove_class('#group_widget', 'on'); |
|||
} |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
<div id="group_widget" class="divided spinner"> |
|||
{$c->prepareEmpty()} |
|||
</div> |
|||
@ -0,0 +1,12 @@ |
|||
group.subscribe = 'Subscribe' |
|||
group.subscribed = 'Subscribed' |
|||
group.unsubscribe = 'Unsubscribe' |
|||
group.unsubscribe_text = 'You are going to unsubscribe from this Group' |
|||
group.unsubscribed = 'Unsubscribed' |
|||
group.share_label = 'Make your membership to this group public to your friends' |
|||
group.label_label = 'Give a label for this group' |
|||
group.sure = 'Are you sure ?' |
|||
group.empty_title = 'Groups' |
|||
group.empty_text = 'Discover, follow and share' |
|||
group.empty = 'Something bad happened to this group' |
|||
group.config_saved = 'Group configuration saved' |
|||
@ -0,0 +1,102 @@ |
|||
<?php |
|||
|
|||
use Moxl\Xec\Action\Pubsub\GetItems; |
|||
use Moxl\Xec\Action\Pubsub\DiscoItems; |
|||
use Respect\Validation\Validator; |
|||
|
|||
class Groups extends WidgetCommon |
|||
{ |
|||
private $_list_server; |
|||
|
|||
function load() |
|||
{ |
|||
$this->registerEvent('pubsub_discoitems_handle', 'onDisco'); |
|||
$this->registerEvent('pubsub_discoitems_error', 'onDiscoError'); |
|||
$this->addjs('groups.js'); |
|||
} |
|||
|
|||
function onDisco($packet) |
|||
{ |
|||
$server = $packet->content; |
|||
$this->displayServer($server); |
|||
} |
|||
|
|||
function onDiscoError($packet) |
|||
{ |
|||
// Display a nice error
|
|||
} |
|||
|
|||
function ajaxHeader() |
|||
{ |
|||
$id = new \modl\ItemDAO(); |
|||
|
|||
$view = $this->tpl(); |
|||
$view->assign('servers', $id->getServers()); |
|||
$header = $view->draw('_groups_header', true); |
|||
|
|||
Header::fill($header); |
|||
} |
|||
|
|||
function ajaxSubscriptions() |
|||
{ |
|||
$html = $this->prepareSubscriptions(); |
|||
|
|||
RPC::call('movim_fill', 'groups_widget', $html); |
|||
RPC::call('Groups.refresh'); |
|||
} |
|||
|
|||
function ajaxDisco($server) |
|||
{ |
|||
$validate_server = Validator::string()->noWhitespace()->length(6, 40); |
|||
if(!$validate_server->validate($server)) return; |
|||
|
|||
$r = new DiscoItems; |
|||
$r->setTo($server)->request(); |
|||
} |
|||
|
|||
private function displayServer($server) |
|||
{ |
|||
$validate_server = Validator::string()->noWhitespace()->length(6, 40); |
|||
if(!$validate_server->validate($server)) return; |
|||
|
|||
$html = $this->prepareServer($server); |
|||
|
|||
RPC::call('movim_fill', 'groups_widget', $html); |
|||
RPC::call('Groups.refresh'); |
|||
} |
|||
|
|||
function checkNewServer($node) { |
|||
$r = false; |
|||
|
|||
if($this->_list_server != $node->server) |
|||
$r = true; |
|||
|
|||
$this->_list_server = $node->server; |
|||
return $r; |
|||
} |
|||
|
|||
function prepareSubscriptions() { |
|||
$sd = new \modl\SubscriptionDAO(); |
|||
|
|||
$view = $this->tpl(); |
|||
$view->assign('subscriptions', $sd->getSubscribed()); |
|||
$html = $view->draw('_groups_subscriptions', true); |
|||
|
|||
return $html; |
|||
} |
|||
|
|||
private function prepareServer($server) { |
|||
$id = new \modl\ItemDAO(); |
|||
|
|||
$view = $this->tpl(); |
|||
$view->assign('nodes', $id->getItems($server)); |
|||
$view->assign('server', $server); |
|||
$html = $view->draw('_groups_server', true); |
|||
|
|||
return $html; |
|||
} |
|||
|
|||
function display() |
|||
{ |
|||
} |
|||
} |
|||
@ -0,0 +1,18 @@ |
|||
<div> |
|||
<span id="menu" class="on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="md md-menu"></i></span> |
|||
<span class="on_desktop icon"><i class="md md-pages"></i></span> |
|||
<form> |
|||
<div> |
|||
<div class="select"> |
|||
<select onchange="window[this.value].apply(this, [this.options[this.selectedIndex].dataset['server']]);" name="language" id="language"> |
|||
<option value="Groups_ajaxSubscriptions" selected="selected">{$c->__('groups.subscriptions')}</option> |
|||
{loop="$servers"} |
|||
{if="!filter_var($value->server, FILTER_VALIDATE_EMAIL)"} |
|||
<option value="Groups_ajaxDisco" data-server="{$value->server}">{$value->server} ({$value->number})</option> |
|||
{/if} |
|||
{/loop} |
|||
</select> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
@ -0,0 +1,31 @@ |
|||
<ul class="middle divided spaced active"> |
|||
{loop="$nodes"} |
|||
<li |
|||
class=" |
|||
{if="$value->subscription == 'subscribed'"}action{/if} |
|||
{if="$value->description"}condensed{/if} |
|||
" |
|||
data-server="{$value->server}" |
|||
data-node="{$value->node}" |
|||
title="{$value->server} - {$value->node}" |
|||
> |
|||
{if="$value->subscription == 'subscribed'"} |
|||
<div class="action"> |
|||
<i class="md md-bookmark"></i> |
|||
</div> |
|||
{/if} |
|||
<span class="icon bubble color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span> |
|||
<span> |
|||
{if="$value->name"} |
|||
{$value->name} |
|||
{else} |
|||
{$value->node} |
|||
{/if} |
|||
<span class="second">{$value->num}</span> |
|||
</span> |
|||
{if="$value->description"} |
|||
<p class="wrap">{$value->description|strip_tags}</p> |
|||
{/if} |
|||
</li> |
|||
{/loop} |
|||
</ul> |
|||
@ -0,0 +1,36 @@ |
|||
{if="$subscriptions == null"} |
|||
<ul class="thick"> |
|||
<li class="condensed"> |
|||
<span class="icon bubble color green"> |
|||
<i class="md md-bookmark"></i> |
|||
</span> |
|||
<span>{$c->__('groups.empty_title')}</span> |
|||
<p>{$c->__('groups.empty_text1')} {$c->__('groups.empty_text2')}</p> |
|||
</li> |
|||
</ul> |
|||
{else} |
|||
<ul class="divided spaced middle active"> |
|||
{loop="$subscriptions"} |
|||
{if="$c->checkNewServer($value)"} |
|||
<li class="subheader">{$value->server}</li> |
|||
{/if} |
|||
<li |
|||
{if="$value->description"}class="condensed"{/if} |
|||
data-server="{$value->server}" |
|||
data-node="{$value->node}" |
|||
> |
|||
<span class="icon bubble color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span> |
|||
<span> |
|||
{if="$value->name"} |
|||
{$value->name} |
|||
{else} |
|||
{$value->node} |
|||
{/if} |
|||
</span> |
|||
{if="$value->description"} |
|||
<p class="wrap">{$value->description|strip_tags}</p> |
|||
{/if} |
|||
</li> |
|||
{/loop} |
|||
</ul> |
|||
{/if} |
|||
@ -0,0 +1,30 @@ |
|||
var Groups = { |
|||
refresh: function() { |
|||
var items = document.querySelectorAll('#groups_widget ul li:not(.subheader)'); |
|||
|
|||
var i = 0; |
|||
while(i < items.length) |
|||
{ |
|||
items[i].onclick = function(e) { |
|||
MovimTpl.scrollPanelTop(); |
|||
Group_ajaxGetItems(this.dataset.server, this.dataset.node); |
|||
Group_ajaxGetAffiliations(this.dataset.server, this.dataset.node); |
|||
Group_ajaxGetMetadata(this.dataset.server, this.dataset.node); |
|||
Groups.reset(items); |
|||
movim_add_class(this, 'active'); |
|||
} |
|||
i++; |
|||
} |
|||
}, |
|||
|
|||
reset: function(list) { |
|||
for(i = 0; i < list.length; i++) { |
|||
movim_remove_class(list[i], 'active'); |
|||
} |
|||
} |
|||
} |
|||
|
|||
MovimWebsocket.attach(function() { |
|||
Groups_ajaxHeader(); |
|||
Groups.refresh(); |
|||
}); |
|||
@ -0,0 +1,3 @@ |
|||
<div id="groups_widget"> |
|||
{$c->prepareSubscriptions()} |
|||
</div> |
|||
@ -0,0 +1,5 @@ |
|||
groups.empty_title = 'Hello' |
|||
groups.contact_post = 'Contact post' |
|||
groups.empty_text1 = "You don't have any subscriptions yet, select a group server above to start exploring." |
|||
groups.empty_text2 = "Subscribe to your favorite feeds by bookmarking them." |
|||
groups.subscriptions = 'My Subscriptions' |
|||
@ -1,13 +1,5 @@ |
|||
<div> |
|||
<span id="menu" class="on_mobile icon active" onclick="MovimTpl.toggleMenu()"><i class="md md-menu"></i></span> |
|||
<span class="on_desktop icon"><i class="md md-receipt"></i></span> |
|||
<form> |
|||
<div> |
|||
<div class="select"> |
|||
<select onchange="window[this.value].apply()" name="language" id="language"> |
|||
<option value="Groups_ajaxSubscriptions" selected="selected">{$c->__('menu.subscriptions')}</option> |
|||
</select> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
<span class="on_desktop icon"><i class="md md-pages"></i></span> |
|||
<h2>{$c->__('page.groups')}</h2> |
|||
</div> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue