You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

259 lines
8.7 KiB

<?php
class Feed extends WidgetCommon {
function WidgetLoad()
{
$this->addcss('feed.css');
$this->addjs('feed.js');
$this->registerEvent('post', 'onStream');
$this->registerEvent('postdeleted', 'onPostDelete');
$this->registerEvent('postdeleteerror', 'onPostDeleteError');
$this->registerEvent('comment', 'onComment');
$this->registerEvent('nocomment', 'onNoComment');
$this->registerEvent('nocommentstream', 'onNoCommentStream');
$this->registerEvent('stream', 'onStream');
$this->registerEvent('postpublished', 'onPostPublished');
$this->registerEvent('postpublisherror', 'onPostPublishError');
$this->registerEvent('nodecreated', 'onNodeCreated');
$this->registerEvent('nodecreationerror', 'onNodeCreationError');
$this->registerEvent('config', 'onConfig');
$this->cached = false;
}
function onConfig(array $data)
{
$this->user->setConfig($data);
RPC::call('movim_fill', 'feedhead', RPC::cdata($this->prepareHead()));
}
function onNodeCreated() {
$config = $this->user->getConfig();
$config['feed'] = 'created';
$s = new moxl\StorageSet();
$s->setXmlns('movim:prefs')
->setData(serialize($config))
->request();
}
function onNodeCreationError() {
$config = $this->user->getConfig();
$config['feed'] = 'error';
$s = new moxl\StorageSet();
$s->setXmlns('movim:prefs')
->setData(serialize($config))
->request();
$html .=
'<div class="message error">'.
t("Your server doesn't support post publication, you can only read contact's feeds").'
</div>';
RPC::call('movim_fill', 'feednotifs', RPC::cdata($html));
RPC::commit();
}
function onPostPublished($post) {
$query = Post::query()
->join('Contact', array('Post.jid' => 'Contact.jid'))
->where(
array(
'Post`.`nodeid' => $post->nodeid->getval()))
->limit(0, 1);
$messages = Post::run_query($query);
// We ask for the HTML of all the posts
$html = $this->preparePosts($messages);
RPC::call('createCommentNode', $post->nodeid->getval());
RPC::call('movim_prepend', 'feedcontent', RPC::cdata($html));
}
function ajaxCreateCommentNode($parentid) {
$n = new moxl\MicroblogCommentCreateNode();
$n->setTo($this->user->getLogin())
->setParentId($parentid)
->request();
}
function onPostPublishError($error) {
$html .=
'<div class="message error">'.t('An error occured : ').$error.'</div>';
RPC::call('movim_fill', 'feednotifs', RPC::cdata($html));
}
function prepareHead() {
$html = '';
global $session;
if($session['config']['config'] == false) {
$html .=
'<div class="message warning" style="margin: 1.5em;">'.
t("Your server doesn't support post publication, you can only read contact's feeds").
'</div>';
} elseif(!isset($session['config']['feed'])) {
$html .= '
<div id="feednotifs">
<div class="message info">'.
t("Creating your feed...").
'</div>
</div>
<script type="text/javascript">'.
$this->genCallAjax('ajaxCreateNode').
'</script>';
} else {
$html .= '
<script type="text/javascript">
function createCommentNode(parentid) {'.
$this->genCallAjax('ajaxCreateCommentNode', 'parentid[0]').
'}
</script>
<table id="feedsubmitform">
<tbody>
<tr>
<td>
<textarea
placeholder="'.t("What's new ?").'"
id="feedmessagecontent"
class="steditor"
onkeyup="movim_textarea_autoheight(this);"></textarea>
</td>
</tr>
<script type="text/javascript">
var ste = new SimpleTextEditor("feedmessagecontent", "ste");
ste.init();
</script>
<tr id="feedsubmitrow">
<td>
<a
title="Plus"
href="#"
onclick="frameHeight(this);"
style="float: left;"
class="button tiny icon add merged left">'.t("Size").'
</a>
<a
title="Rich"
href="#"
onclick="richText(this);"
style="float: left;"
class="button tiny icon yes merged right">'.t("Rich Text").'
</a>
<a
title="'.t("Submit").'"
href="#"
id="feedmessagesubmit"
onclick="ste.submit();'.$this->genCallAjax('ajaxPublishItem', 'getFeedMessage()').'; ste.clearContent();"
class="button tiny icon submit">'.t("Submit").'
</a>
</td>
</tr>
</tbody>
</table>
<div id="feednotifs"></div>';
}
return $html;
}
function prepareFeed($start) {
$pd = new \modl\PostDAO();
$pl = $pd->getFeed($start+1, 10);
foreach($pl as $post) {
$html .= $this->printPost($post);
}
// We ask for the HTML of all the posts
$next = $start + 10;
if(sizeof($pl) > 9 && $html != '') {
$html .= '
<div class="post">
<div
class="older"
onclick="'.$this->genCallAjax('ajaxGetFeed', "'".$next."'").'; this.parentNode.style.display = \'none\'">'.
t('Get older posts').'
</div>
</div>';
}
return $html;
}
function ajaxGetFeed($start) {
RPC::call('movim_append', 'feedcontent', RPC::cdata($this->prepareFeed($start)));
RPC::commit();
}
function onStream($payload) {
$html = '';
$html = $this->prepareFeed(-1);
if($html == '')
$html = '
<div class="message info" style="margin: 1.5em; margin-top: 0em;">'.
t("Your feed cannot be loaded.").'
</div>';
RPC::call('movim_fill', 'feedcontent', RPC::cdata($html));
RPC::commit();
}
function ajaxPublishItem($content)
{
if($content != '') {
$id = md5(openssl_random_pseudo_bytes(5));
$p = new moxl\MicroblogPostPublish();
$p->setTo($this->user->getLogin())
->setId($id)
->setContent(htmlspecialchars(rawurldecode($content)))
->request();
}
}
function ajaxCreateNode()
{
$p = new moxl\MicroblogCreateNode();
$p->setTo($this->user->getLogin())
->request();
}
function build()
{
?>
<div class="tabelem" title="<?php echo t('Feed'); ?>" id="feed">
<div id="feedhead">
<?php
echo $this->prepareHead();
?>
</div>
<div class="posthead">
<ul class="filters">
<li class="on" onclick="showPosts(this, false);"><?php echo t('All');?></li>
<li onclick="showPosts(this, true);"><?php echo t('My Posts');?></li>
</ul>
</div>
<div id="feedcontent">
<?php
echo $this->prepareFeed(-1);
?>
</div>
</div>
<?php
}
}