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.
 
 
 
 

201 lines
6.6 KiB

<?php
use Respect\Validation\Validator;
use App\User;
include_once WIDGETS_PATH.'Post/Post.php';
class Blog extends \Movim\Widget\Base
{
public $_paging = 8;
private $_from;
private $_node;
private $_item;
private $_id;
private $_contact;
private $_messages = [];
private $_page;
private $_mode;
private $_tag;
function load()
{
$this->links = [];
if ($this->_view == 'node') {
$this->_from = $this->get('s');
$this->_node = $this->get('n');
if (!$this->validateServerNode($this->_from, $this->_node)) return;
$pd = new \Modl\InfoDAO;
$this->_item = $pd->get($this->_from, $this->_node);
$this->_mode = 'group';
$this->url = $this->route('node', [$this->_from, $this->_node]);
$this->links[] = [
'rel' => 'alternate',
'type' => 'application/atom+xml',
'href' => $this->route('feed', [$this->_from, $this->_node])
];
if (!$this->get('i')) {
$this->links[] = [
'rel' => 'alternate',
'type' => 'application/atom+xml',
'href' => 'xmpp:' . rawurlencode($this->_from) . '?;node=' . rawurlencode($this->_node)
];
}
} elseif ($this->_view == 'tag' && $this->validateTag($this->get('t'))) {
$this->_mode = 'tag';
$this->_tag = strtolower($this->get('t'));
$this->title = '#'.$this->_tag;
} else {
$this->_from = $this->get('f');
$this->_contact = App\Contact::find($this->_from);
if (filter_var($this->_from, FILTER_VALIDATE_EMAIL)) {
$this->_node = 'urn:xmpp:microblog:0';
} else {
return;
}
$this->_mode = 'blog';
$this->url = $this->route('blog', $this->_from);
$this->links[] = [
'rel' => 'alternate',
'type' => 'application/atom+xml',
'href' => $this->route('feed', [$this->_from])
];
if (!$this->get('i')) {
$this->links[] = [
'rel' => 'alternate',
'type' => 'application/atom+xml',
'href' => 'xmpp:' . rawurlencode($this->_from) . '?;node=' . rawurlencode($this->_node)
];
}
}
$pd = new \Modl\PostnDAO;
if ($this->_id = $this->get('i')) {
if (Validator::stringType()->between('1', '100')->validate($this->_id)) {
if (isset($this->_tag)) {
$this->_messages = $pd->getPublicTag($this->_tag, $this->_id * $this->_paging, $this->_paging + 1);
} else {
$this->_messages = $pd->getNodeUnfiltered($this->_from, $this->_node, $this->_id * $this->_paging, $this->_paging + 1);
}
$this->_page = $this->_id + 1;
} elseif (Validator::stringType()->length(5, 100)->validate($this->_id)) {
$this->_messages[0] = $pd->getPublicItem($this->_from, $this->_node, $this->_id);
if (is_object($this->_messages[0])) {
$this->title = $this->_messages[0]->title;
$description = stripTags($this->_messages[0]->contentcleaned);
if (!empty($description)) {
$this->description = truncate($description, 100);
}
$attachments = $this->_messages[0]->getAttachments();
if ($attachments && array_key_exists('pictures', $attachments)) {
$this->image = urldecode($attachments['pictures'][0]['href']);
}
}
if ($this->_view == 'node') {
$this->url = $this->route('node', [$this->_from, $this->_node, $this->_id]);
} else {
$this->url = $this->route('blog', [$this->_from, $this->_id]);
}
$this->links[] = [
'rel' => 'alternate',
'type' => 'application/atom+xml',
'href' => 'xmpp:'
. rawurlencode($this->_from)
. '?;node='
. rawurlencode($this->_node)
. ';item='
. rawurlencode($this->_id)
];
}
} else {
$this->_page = 1;
if (isset($this->_tag)) {
$this->_messages = $pd->getPublicTag($this->_tag, 0, $this->_paging + 1);
} else {
$this->_messages = $pd->getNodeUnfiltered($this->_from, $this->_node, 0, $this->_paging + 1);
}
}
if (is_array($this->messages)
&& count($this->_messages) == $this->_paging + 1) {
array_pop($this->_messages);
} else {
$this->_page = null;
}
if ($this->_node == 'urn:xmpp:microblog:0') {
$cssurl = User::find($this->_from)->cssurl;
if (isset($cssurl)
&& $cssurl != ''
&& Validator::url()->validate($cssurl)) {
$this->addrawcss($cssurl);
}
}
}
public function preparePost($p)
{
$pw = new Post;
return $pw->preparePost($p, true, true);
}
public function prepareCard($p)
{
$pw = new Post;
return $pw->preparePost($p, true, ($this->_view != 'tag'), true);
}
function display()
{
$this->view->assign('server', $this->_from);
$this->view->assign('node', $this->_node);
$this->view->assign('item', $this->_item);
$this->view->assign('contact', $this->_contact);
$this->view->assign('mode', $this->_mode);
$this->view->assign('more', $this->_page);
$this->view->assign('posts', $this->_messages);
$this->view->assign('tag', $this->_tag);
}
private function validateServerNode($server, $node)
{
$validate_server = Validator::stringType()->noWhitespace()->length(6, 40);
$validate_node = Validator::stringType()->length(3, 100);
if (!$validate_server->validate($server)
|| !$validate_node->validate($node)
) return false;
else return true;
}
private function validateTag($tag)
{
return Validator::stringType()->notEmpty()->noWhitespace()->validate($tag);
}
function getComments($post)
{
$pd = new \Modl\PostnDAO;
return $pd->getComments($post);
}
}