Browse Source

- Use GMT as a time reference in the database

- Apply the timezone offset when displaying the date
- Get the subscribers counter from the database
- Display the attached pictures in the posts
- Add some new locales
- Get the group subscriptions (if owner)
pull/16/head
Jaussoin Timothée 11 years ago
parent
commit
9c402767ee
  1. 3
      app/helpers/DateHelper.php
  2. 9
      app/helpers/TimezoneHelper.php
  3. 1
      app/models/item/Item.php
  4. 5
      app/models/item/ItemDAO.php
  5. 4
      app/models/postn/Postn.php
  6. 4
      app/widgets/Chat/Chat.php
  7. 26
      app/widgets/Group/Group.php
  8. 17
      app/widgets/Group/_group_header.tpl
  9. 14
      app/widgets/Group/_group_posts.tpl
  10. 20
      app/widgets/Group/_group_subscriptions.tpl
  11. 4
      app/widgets/Group/locales.ini
  12. 16
      app/widgets/Groups/_groups_server.tpl
  13. 3
      app/widgets/Groups/locales.ini
  14. 3
      bootstrap.php

3
app/helpers/DateHelper.php

@ -45,6 +45,9 @@ function getTimezoneCorrection() {
* @return string * @return string
*/ */
function prepareDate($time, $hours = true) { function prepareDate($time, $hours = true) {
// We had the server timezone
$time = $time + TIMEZONE_OFFSET;
$t = $time ? $time : time(); $t = $time ? $time : time();
$date = ''; $date = '';

9
app/helpers/TimezoneHelper.php

@ -10,6 +10,15 @@ function getTimezoneList()
return $timezones; return $timezones;
} }
/*
* Get the offset of a timezone
*/
function getTimezoneOffset($timezone)
{
$tz = new DateTimeZone($timezone);
return $tz->getOffset(new DateTime);
}
/* /*
* Generate the timezone list * Generate the timezone list
*/ */

1
app/models/item/Item.php

@ -13,6 +13,7 @@ class Item extends Model {
public $description; public $description;
public $subscription; public $subscription;
public $num; public $num;
public $sub;
public function __construct() { public function __construct() {
$this->_struct = ' $this->_struct = '

5
app/models/item/ItemDAO.php

@ -143,6 +143,11 @@ class ItemDAO extends SQL {
where origin = :server where origin = :server
group by node) as p group by node) as p
on p.node = item.node on p.node = item.node
left outer join (
select node, count(node) as sub from subscription
where server = :server
group by node) as sub
on sub.node = item.node
left outer join (select server, node, subscription from subscription where jid = :node) left outer join (select server, node, subscription from subscription where jid = :node)
as s on s.server = item.server as s on s.server = item.server
and s.node = item.node and s.node = item.node

4
app/models/postn/Postn.php

@ -145,14 +145,14 @@ class Postn extends Model {
if($entry->entry->updated) if($entry->entry->updated)
$this->updated = (string)$entry->entry->updated; $this->updated = (string)$entry->entry->updated;
else else
$this->updated = date(DATE_ISO8601);
$this->updated = gmdate(DATE_ISO8601);
if($entry->entry->published) if($entry->entry->published)
$this->published = (string)$entry->entry->published; $this->published = (string)$entry->entry->published;
elseif($entry->entry->updated) elseif($entry->entry->updated)
$this->published = (string)$entry->entry->updated; $this->published = (string)$entry->entry->updated;
else else
$this->published = date(DATE_ISO8601);
$this->published = gmdate(DATE_ISO8601);
if($delay) if($delay)
$this->delay = $delay; $this->delay = $delay;

4
app/widgets/Chat/Chat.php

@ -200,8 +200,8 @@ class Chat extends WidgetCommon
} }
$m->body = rawurldecode($message); $m->body = rawurldecode($message);
$m->published = date('Y-m-d H:i:s');
$m->delivered = date('Y-m-d H:i:s');
$m->published = gmdate('Y-m-d H:i:s');
$m->delivered = gmdate('Y-m-d H:i:s');
if(!preg_match('#^\?OTR#', $m->body)) { if(!preg_match('#^\?OTR#', $m->body)) {
$md = new \Modl\MessageDAO(); $md = new \Modl\MessageDAO();

26
app/widgets/Group/Group.php

@ -3,6 +3,7 @@
use Moxl\Xec\Action\Pubsub\GetItemsId; use Moxl\Xec\Action\Pubsub\GetItemsId;
use Moxl\Xec\Action\Pubsub\GetMetadata; use Moxl\Xec\Action\Pubsub\GetMetadata;
use Moxl\Xec\Action\Pubsub\GetAffiliations; use Moxl\Xec\Action\Pubsub\GetAffiliations;
use Moxl\Xec\Action\Pubsub\GetSubscriptions;
use Moxl\Xec\Action\Pubsub\Subscribe; use Moxl\Xec\Action\Pubsub\Subscribe;
use Moxl\Xec\Action\Pubsub\Unsubscribe; use Moxl\Xec\Action\Pubsub\Unsubscribe;
@ -26,6 +27,8 @@ class Group extends WidgetCommon
$this->registerEvent('pubsub_subscribe_handle', 'onSubscribed'); $this->registerEvent('pubsub_subscribe_handle', 'onSubscribed');
$this->registerEvent('pubsub_unsubscribe_handle', 'onUnsubscribed'); $this->registerEvent('pubsub_unsubscribe_handle', 'onUnsubscribed');
$this->registerEvent('pubsub_getaffiliations_handle', 'onAffiliations'); $this->registerEvent('pubsub_getaffiliations_handle', 'onAffiliations');
$this->registerEvent('pubsub_getsubscriptions_handle', 'onSubscriptions');
$this->registerEvent('pubsub_getconfig_handle', 'onConfig'); $this->registerEvent('pubsub_getconfig_handle', 'onConfig');
$this->registerEvent('pubsub_setconfig_handle', 'onConfigSaved'); $this->registerEvent('pubsub_setconfig_handle', 'onConfigSaved');
$this->registerEvent('bookmark_set_handle', 'onBookmark'); $this->registerEvent('bookmark_set_handle', 'onBookmark');
@ -73,7 +76,19 @@ class Group extends WidgetCommon
$view = $this->tpl(); $view = $this->tpl();
RPC::call('movim_append', 'group_widget', $view->draw('_group_publish', true)); RPC::call('movim_append', 'group_widget', $view->draw('_group_publish', true));
} }
}
function onSubscriptions($packet)
{
list($subscriptions, $server, $node) = array_values($packet->content);
$view = $this->tpl();
$view->assign('subscriptions', $subscriptions);
$view->assign('server', $server);
$view->assign('node', $node);
Dialog::fill($view->draw('_group_subscriptions', true), true);
} }
function onConfig($packet) function onConfig($packet)
@ -202,6 +217,17 @@ class Group extends WidgetCommon
->request(); ->request();
} }
function ajaxGetSubscriptions($server, $node)
{
if(!$this->validateServerNode($server, $node)) return;
$r = new GetSubscriptions;
$r->setTo($server)
->setNode($node)
->setSync()
->request();
}
function ajaxAskSubscribe($server, $node) function ajaxAskSubscribe($server, $node)
{ {
if(!$this->validateServerNode($server, $node)) return; if(!$this->validateServerNode($server, $node)) return;

17
app/widgets/Group/_group_header.tpl

@ -7,27 +7,36 @@
<div> <div>
<ul class="active"> <ul class="active">
{if="$role == 'owner'"} {if="$role == 'owner'"}
<li onclick="Group_ajaxGetConfig('{$item->server}', '{$item->node}')">
<li title="{$c->__('group.get_config')}"
onclick="Group_ajaxGetConfig('{$item->server}', '{$item->node}')">
<span class="icon"> <span class="icon">
<i class="md md-settings"></i> <i class="md md-settings"></i>
</span> </span>
</li> </li>
<li title="{$c->__('group.get_subscriptions')}"
onclick="Group_ajaxGetSubscriptions('{$item->server}', '{$item->node}')">
<span class="icon">
<i class="md md-book"></i>
</span>
</li>
{/if} {/if}
{if="$subscription == null"} {if="$subscription == null"}
<li onclick="Group_ajaxAskSubscribe('{$item->server}', '{$item->node}')">
<li title="{$c->__('group.subscribe')}"
onclick="Group_ajaxAskSubscribe('{$item->server}', '{$item->node}')">
<span class="icon"> <span class="icon">
<i class="md md-bookmark-outline"></i> <i class="md md-bookmark-outline"></i>
</span> </span>
</li> </li>
{else} {else}
<li onclick="Group_ajaxAskUnsubscribe('{$item->server}', '{$item->node}')">
<li title="{$c->__('group.unsubscribe')}"
onclick="Group_ajaxAskUnsubscribe('{$item->server}', '{$item->node}')">
<span class="icon"> <span class="icon">
<i class="md md-bookmark"></i> <i class="md md-bookmark"></i>
</span> </span>
</li> </li>
{/if} {/if}
</ul> </ul>
<h2 class="active {if="$role == 'owner'"}r2{else}r1{/if}"
<h2 class="active {if="$role == 'owner'"}r3{else}r1{/if}"
onclick="MovimTpl.hidePanel(); Group_ajaxClear(); Groups_ajaxHeader();"> onclick="MovimTpl.hidePanel(); Group_ajaxClear(); Groups_ajaxHeader();">
<span id="back" class="icon"><i class="md md-arrow-back"></i></span> <span id="back" class="icon"><i class="md md-arrow-back"></i></span>
{if="$item != null"} {if="$item != null"}

14
app/widgets/Group/_group_posts.tpl

@ -59,6 +59,20 @@
{/loop} {/loop}
{/if} {/if}
</ul> </ul>
{if="isset($value->getAttachements().pictures)"}
<ul class="flex middle">
{loop="$value->getAttachements().pictures"}
<li class="block">
<span class="icon small gray">
<i class="md md-image"></i>
</span>
<a href="{$value.href}" class="alternate" target="_blank">
<img type="{$value.type}" src="{$value.href|urldecode}"/>
</a>
</li>
{/loop}
</ul>
{/if}
</footer> </footer>
</article> </article>
{/loop} {/loop}

20
app/widgets/Group/_group_subscriptions.tpl

@ -0,0 +1,20 @@
<section class="scroll">
<ul class="thin divided simple">
<li class="subheader">
{$c->__('group.subscriptions')}
<span class="info">{$subscriptions|count}</span>
</li>
{loop="$subscriptions"}
<li>
<a href="{$c->route('contact', $value.jid)}">
{$value.jid}
</a>
</li>
{/loop}
</ul>
</section>
<div>
<a onclick="Dialog.clear()" class="button flat">
{$c->__('button.close')}
</a>
</div>

4
app/widgets/Group/locales.ini

@ -10,3 +10,7 @@ group.empty_title = 'Groups'
group.empty_text = 'Discover, follow and share' group.empty_text = 'Discover, follow and share'
group.empty = 'Something bad happened to this group' group.empty = 'Something bad happened to this group'
group.config_saved = 'Group configuration saved' group.config_saved = 'Group configuration saved'
group.get_config = 'Configure your group'
group.get_subscriptions = 'Get the subscriptions'
group.subscriptions = 'Subscriptions'

16
app/widgets/Groups/_groups_server.tpl

@ -3,7 +3,7 @@
<li <li
class=" class="
{if="$value->subscription == 'subscribed'"}action{/if} {if="$value->subscription == 'subscribed'"}action{/if}
{if="$value->description"}condensed{/if}
condensed
" "
data-server="{$value->server}" data-server="{$value->server}"
data-node="{$value->node}" data-node="{$value->node}"
@ -21,11 +21,19 @@
{else} {else}
{$value->node} {$value->node}
{/if} {/if}
<span class="second">{$value->num}</span>
</span>
{if="$value->description"} {if="$value->description"}
<p class="wrap">{$value->description|strip_tags}</p>
<span class="second">
{$value->description|strip_tags}
</span>
{/if}
</span>
<p class="wrap">
{if="$value->sub > 0"}
{$c->__('groups.sub', $value->sub)} -
{/if} {/if}
{$c->__('groups.num', $value->num)}
</p>
</li> </li>
{/loop} {/loop}
</ul> </ul>

3
app/widgets/Groups/locales.ini

@ -3,3 +3,6 @@ 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_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.empty_text2 = "Subscribe to your favorite feeds by bookmarking them."
groups.subscriptions = 'My Subscriptions' groups.subscriptions = 'My Subscriptions'
groups.sub = '%s subscribers'
groups.num = '%s posts'

3
bootstrap.php

@ -273,6 +273,9 @@ class Bootstrap {
$cd = new \Modl\ConfigDAO(); $cd = new \Modl\ConfigDAO();
$config = $cd->get(); $config = $cd->get();
// And we set a global offset
define('TIMEZONE_OFFSET', getTimezoneOffset($config->timezone));
date_default_timezone_set($config->timezone); date_default_timezone_set($config->timezone);
} }

Loading…
Cancel
Save