Browse Source

- Fix the URL rewriting (part 1)

- Re-implement the Blog + Feed pages
- Add the avatars in the Menu + Post (if microblog)
- Fix the linker when not connected to XMPP
pull/16/head
Jaussoin Timothée 11 years ago
parent
commit
91036a1879
  1. 4
      app/models/config/Config.php
  2. 5
      app/models/config/ConfigDAO.php
  3. 1
      app/models/contact/Contact.php
  4. 7
      app/models/postn/Postn.php
  5. 23
      app/views/blog.tpl
  6. 7
      app/views/login.tpl
  7. 2
      app/widgets/AdminDB/AdminDB.php
  8. 9
      app/widgets/AdminDB/admindb.tpl
  9. 15
      app/widgets/AdminMain/AdminMain.php
  10. 28
      app/widgets/AdminMain/adminmain.tpl
  11. 4
      app/widgets/AdminMain/locales.ini
  12. 2
      app/widgets/Avatar/avatar.js
  13. 38
      app/widgets/Blog/Blog.php
  14. 61
      app/widgets/Blog/blog.tpl
  15. 7
      app/widgets/Menu/_menu_list.tpl
  16. 18
      app/widgets/Post/Post.php
  17. 48
      app/widgets/Post/_post.tpl
  18. 5
      app/widgets/Post/locales.ini
  19. 26
      app/widgets/Syndication/Syndication.php
  20. 16
      app/widgets/Syndication/syndication.tpl
  21. 55
      linker.php
  22. 10
      system/Route.php
  23. 6
      themes/material/css/article.css
  24. 3
      themes/material/css/grid.css

4
app/models/config/Config.php

@ -16,6 +16,7 @@ class Config extends Model {
public $unregister;
public $username;
public $password;
public $rewrite;
public $sizelimit;
public function __construct() {
@ -47,6 +48,8 @@ class Config extends Model {
{"type":"string", "size":32, "mandatory":true },
"password" :
{"type":"string", "size":64, "mandatory":true },
"rewrite" :
{"type":"int", "size":1 },
"sizelimit" :
{"type":"int", "size":16 }
}';
@ -66,6 +69,7 @@ class Config extends Model {
$this->unregister = false;
$this->username = 'admin';
$this->password = sha1('password');
$this->rewrite = false;
$this->sizelimit = 20240001;
}
}

5
app/models/config/ConfigDAO.php

@ -19,6 +19,7 @@ class ConfigDAO extends SQL {
unregister = :unregister,
username = :username,
password = :password,
rewrite = :rewrite,
sizelimit = :sizelimit';
$this->prepare(
@ -37,6 +38,7 @@ class ConfigDAO extends SQL {
'unregister' => $c->unregister,
'username' => $c->username,
'password' => $c->password,
'rewrite' => $c->rewrite,
'sizelimit' => $c->sizelimit
)
);
@ -71,6 +73,7 @@ class ConfigDAO extends SQL {
unregister,
username,
password,
rewrite,
sizelimit
)
values
@ -88,6 +91,7 @@ class ConfigDAO extends SQL {
:unregister,
:username,
:password,
:rewrite,
:sizelimit
)
';
@ -108,6 +112,7 @@ class ConfigDAO extends SQL {
'unregister' => $c->unregister,
'username' => $c->username,
'password' => $c->password,
'rewrite' => $c->rewrite,
'sizelimit' => $c->sizelimit
)
);

1
app/models/contact/Contact.php

@ -208,6 +208,7 @@ class Contact extends Model {
if(isset($jid)) {
$sizes = array(
'wall' => array(1920, 1080),
'xxl' => array(1280, 300),
'l' => array(210 , false),
'm' => array(120 , false),

7
app/models/postn/Postn.php

@ -269,6 +269,13 @@ class Postn extends Model {
return false;
}
public function isMine() {
if($this->jid == $this->session)
return true;
else
return false;
}
public function isMicroblog() {
if($this->node == "urn:xmpp:microblog:0")
return true;

23
app/views/blog.tpl

@ -1,14 +1,11 @@
<?php /* -*- mode: html -*- */
?>
<main>
<section>
<div>
<?php //$this->widget('Tabs');?>
<div id="main">
<div id="left">
<?php $this->widget('ContactSummary');?>
</div>
<?php $this->widget('Tabs');?>
<div id="center">
<?php $this->widget('Blog');?>
<?php $this->widget('ContactCard');?>
</div>
</div>
<?php $this->widget('Blog');?>
<?php //$this->widget('ContactSummary');?>
<?php //$this->widget('ContactCard');?>
</div>
</section>
</main>

7
app/views/login.tpl

@ -1,9 +1,8 @@
<?php $this->widget('Presence'); ?>
<main>
<section>
<div>
<?php $this->widget('Login'); ?>
</div>
<div>
<?php $this->widget('Login'); ?>
</div>
</section>
</main>

2
app/widgets/AdminDB/AdminDB.php

@ -42,7 +42,7 @@ class AdminDB extends WidgetBase
$this->view->assign('infos', $infos);
$this->view->assign('db_update', $this->call('ajaxUpdateDatabase')
."this.className='button color orange icon loading'; setTimeout(function() {location.reload(false)}, 1000);");
."this.className='button color loading';");
try {
$md->connect();
} catch(Exception $e) {

9
app/widgets/AdminDB/admindb.tpl

@ -19,15 +19,14 @@
<span>{$c->__('db.connect_success')}</span>
</li>
{if="null !== $infos"}
<li class="block large condensed">
<li class="block large condensed action">
<div class="action">
<a class="button" onclick="{$db_update}"> {$c->__('button.update')}</a>
</div>
<span class="icon bubble color orange">
<i class="md md-refresh"></i>
</span>
<span>{$c->__('db.update')}</span>
<div class="control">
<a class="button oppose"
onclick="{$db_update}"> {$c->__('button.update')}</a>
</div>
{loop="$infos"}
<p>{$value}</p>
{/loop}

15
app/widgets/AdminMain/AdminMain.php

@ -25,6 +25,7 @@ class AdminMain extends WidgetBase
$config = $cd->get();
if(isset($form)) {
\movim_log(serialize($form));
if(isset($form['password'])
&& $form['password'] != '' && $form['repassword'] != ''
&& $form['password'] == $form['repassword']) {
@ -34,9 +35,18 @@ class AdminMain extends WidgetBase
}
unset($form['repassword']);
if($form['rewrite'] == 'on') {
$form['rewrite'] = 1;
} else {
$form['rewrite'] = 0;
}
foreach($form as $key => $value) {
$config->$key = $value;
}
\movim_log(serialize($config));
$cd->set($config);
//set timezone
@ -86,6 +96,11 @@ class AdminMain extends WidgetBase
if(isset($json) && $json->status != 404) {
$this->view->assign('websockets', $json);
}
$this->view->assign('server_rewrite', false);
if(isset($_SERVER['HTTP_MOD_REWRITE']) && $_SERVER['HTTP_MOD_REWRITE']) {
$this->view->assign('server_rewrite', true);
}
$this->view->assign('timezones', getTimezoneList());
$this->view->assign('langs', loadLangArray());

28
app/widgets/AdminMain/adminmain.tpl

@ -156,6 +156,32 @@
</li>
</ul>
{if="$server_rewrite"}
<br />
<h3>{$c->__('rewrite.title')}</h3>
<div>
<ul class="thick simple">
<li class="action">
<div class="control action">
<div class="checkbox">
<input
type="checkbox"
id="rewrite"
name="rewrite"
{if="$conf->rewrite"}
checked
{/if}>
<label for="rewrite"></label>
</div>
</div>
<span>{$c->__('rewrite.info')}</span>
</li>
</ul>
</div>
{/if}
<br />
<h3>{$c->__('credentials.title')}</h3>
@ -186,4 +212,4 @@
value="{$c->__('button.submit')}"/>
<div class="clear"></div>
</form>
</div>
</div>

4
app/widgets/AdminMain/locales.ini

@ -39,3 +39,7 @@ information.label = 'Information Message'
log.empty = 'Empty'
log.syslog = 'Syslog'
log.syslog_files = 'Syslog and files'
[rewrite]
rewrite.title = 'URL Rewriting'
rewrite.info = 'The URL Rewriting can be enabled'

2
app/widgets/Avatar/avatar.js

@ -16,7 +16,7 @@ var Avatar = {
},
preview : function(src) {
var canvas = document.createElement('canvas');
width = height = canvas.width = canvas.height = 210;
width = height = canvas.width = canvas.height = 410;
var image = new Image();
image.src = src;
image.onload = function(){

38
app/widgets/Blog/Blog.php

@ -8,26 +8,31 @@ class Blog extends WidgetCommon {
function display()
{
if(!isset($_GET['f']) || !isset($_GET['n'])) {
if(!isset($_GET['f'])) {
return;
}
$from = $_GET['f'];
$node = $_GET['n'];
$this->view->assign('from', $from);
if(filter_var($from, FILTER_VALIDATE_EMAIL)) {
$node = 'urn:xmpp:microblog:0';
} else {
return;
//$node = $_GET['n'];
}
/*$this->view->assign('from', $from);
if(isset($node))
$this->view->assign('node', $node);
$this->view->assign('node', $node);*/
$pd = new \modl\PostnDAO();
if(isset($from) && isset($node))
$messages = $pd->getPublic($from, $node);
//if(isset($from) && isset($node))
$messages = $pd->getPublic($from, $node);
if($messages[0] != null) {
// Title and logo
// For a Pubsub feed
if(isset($from) && isset($node) && $node != 'urn:xmpp:microblog:0') {
/*if(isset($from) && isset($node) && $node != 'urn:xmpp:microblog:0') {
$pd = new \modl\NodeDAO();
$n = $pd->getNode($from, $node);
if(isset($n->title))
@ -38,15 +43,20 @@ class Blog extends WidgetCommon {
} else {
$this->view->assign('title', $this->__('blog.title',$messages[0]->getContact()->getTrueName()));
$this->view->assign('logo', $messages[0]->getContact()->getPhoto('l'));
}
$this->view->assign('date', date('c'));
$this->view->assign('name', $messages[0]->getContact()->getTrueName());
$this->view->assign('feed', Route::urlize('feed',array($from, $node)));
}*/
$cd = new \modl\ContactDAO();
$c = $cd->get($from);
$this->view->assign('contact', $c);
//$this->view->assign('date', date('c'));
//$this->view->assign('name', $messages[0]->getContact()->getTrueName());
//$this->view->assign('feed', Route::urlize('feed',array($from, $node)));
} else {
$this->view->assign('title', $this->__('page.feed'));
}
$this->view->assign('posts', $this->preparePosts($messages, true));
$this->view->assign('posts', $messages);
//$this->view->assign('posts', $this->preparePosts($messages, true));
}
}

61
app/widgets/Blog/blog.tpl

@ -1,16 +1,51 @@
<div class="tabelem" title="{$c->__('page.feed')}" id="blog" >
<h1 class="paddedtopbottom">{$title}</h1>
<div class="posthead paddedtopbottom">
<a
class="button color orange merged left"
href="{$feed}"
target="_blank"
>
<i class="fa fa-rss"></i> {$c->__('page.feed')} (Atom)
</a>
</div>
<div class="tabelem divided" title="{$c->__('page.feed')}" id="blog" >
{$posts}
<ul class="thick">
<li class="action">
<div class="action">
<a
href="{$c->route('feed', array($contact->jid, 'urn:xmpp:microblog:0'))}"
target="_blank"
>
<i class="md md-wifi-tethering"></i> Atom
</a>
</div>
<span class="icon gray">
<i class="md md-edit"></i>
</span>
<span>
<h2>{$c->__('blog.title', $contact->getTrueName())}</h2>
</span>
</li>
</ul>
<div class="spacetop clear"></div>
{loop="$posts"}
<article>
<header>
<ul class="thick">
<li class="condensed">
<span class="icon bubble">
<img src="{$value->getContact()->getPhoto('s')}">
</span>
<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()} -
{/if}
{$value->published|strtotime|prepareDate}
</p>
</li>
</ul>
</header>
<section>
{$value->contentcleaned}
</section>
</article>
{/loop}
</div>

7
app/widgets/Menu/_menu_list.tpl

@ -17,8 +17,9 @@
<i class="md md-warning"></i>
</span>
{elseif="$value->node == 'urn:xmpp:microblog:0'"}
<span class="icon bubble color {$value->jid|stringToColor}">
<i class="md md-create"></i>
<span class="icon bubble">
<!--<i class="md md-create"></i>-->
<img src="{$value->getContact()->getPhoto('s')}">
</span>
{else}
<span class="icon bubble color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span>
@ -33,7 +34,7 @@
<span class="info">{$value->published|strtotime|prepareDate}</span>
{if="$value->node == 'urn:xmpp:microblog:0'"}
<p class="wrap">{$value->jid}</p>
<p class="wrap">{$value->getContact()->getTrueName()}</p>
{else}
<p class="wrap">{$value->node}</p>
{/if}

18
app/widgets/Post/Post.php

@ -211,6 +211,24 @@ class Post extends WidgetCommon
return $this->prepareEmpty();
}
}
function ajaxTogglePrivacy($id) {
if(!preg_match('/^[a-f0-9]{32}$/', $id))
return;
$pd = new \Modl\PrivacyDAO();
$p = $pd->get($id);
$pd = new \Modl\PostnDAO;
$po = $pd->getItem($id);
if($po->privacy == 1) {
Notification::append(false, $this->__('post.blog_remove'));
\Modl\Privacy::set($id, 0);
} if($po->privacy == 0) {
Notification::append(false, $this->__('post.blog_add'));
\Modl\Privacy::set($id, 1);
}
}
function display()
{

48
app/widgets/Post/_post.tpl

@ -10,15 +10,28 @@
<header>
<ul class="thick">
<li class="condensed">
{if="$post->node == 'urn:xmpp:microblog:0'"}
<span class="icon bubble">
<img src="{$post->getContact()->getPhoto('s')}">
</span>
{else}
<!--<a href="{$c->route('node', array($post->jid, $post->node))}">-->
<span class="icon bubble color {$post->node|stringToColor}">{$post->node|firstLetterCapitalize}</span>
<!--</a>-->
{if="$post->title != null"}
<span>{$post->title}</span>
{else}
<span>{$c->__('post.default_title')}</span>
{/if}
<p>{$post->published|strtotime|prepareDate}</p>
<span>
{if="$post->title != null"}
{$post->title}
{else}
{$c->__('post.default_title')}
{/if}
</span>
<p>
{if="$post->node == 'urn:xmpp:microblog:0'"}
{$post->getContact()->getTrueName()} -
{/if}
{$post->published|strtotime|prepareDate}
</p>
</li>
</ul>
</header>
@ -56,6 +69,31 @@
{/loop}
{/if}
</ul>
{if="$post->isMine()"}
<ul class="thick">
<li class="action">
<form>
<div class="action">
<div class="checkbox">
<input
type="checkbox"
id="privacy"
name="privacy"
{if="$post->privacy"}
checked
{/if}
onclick="Post_ajaxTogglePrivacy('{$post->nodeid}')">
<label for="privacy"></label>
</div>
</div>
</form>
<span class="icon bubble color red">
<i class="md md-public"></i>
</span>
<span>{$c->__('post.public')}</span>
</li>
</ul>
{/if}
</footer>
<div id="comments"></div>

5
app/widgets/Post/locales.ini

@ -14,3 +14,8 @@ post.no_content_preview = 'No content to preview'
post.no_content = 'No content'
post.published = 'Post published'
post.gallery = 'This picture will be added to your gallery'
[manage]
post.public = 'Publish this post on your public feed?'
post.blog_add = 'Post published on your blog'
post.blog_remove = 'Post removed from your blog'

26
app/widgets/Syndication/Syndication.php

@ -28,6 +28,19 @@ class Syndication extends WidgetBase
{
ob_clean();
if(!isset($_GET['f'])) {
return;
}
$from = $_GET['f'];
if(filter_var($from, FILTER_VALIDATE_EMAIL)) {
$node = 'urn:xmpp:microblog:0';
} else {
return;
//$node = $_GET['n'];
}
/*
if(!isset($_GET['f']) || !isset($_GET['n'])) {
return;
}
@ -36,7 +49,7 @@ class Syndication extends WidgetBase
$node = $_GET['n'];
$this->view->assign('from', $from);
$this->view->assign('node', $node);
$this->view->assign('node', $node);*/
$pd = new \modl\PostnDAO();
@ -47,9 +60,16 @@ class Syndication extends WidgetBase
if(isset($messages[0])) {
header("Content-Type: application/atom+xml; charset=UTF-8");
$cd = new \modl\ContactDAO();
$this->view->assign('date', date('c'));
$this->view->assign('contact', $cd->get($from));
$this->view->assign('uri', htmlentities(Route::urlize('blog',array($from, $node))));
// Title and logo
// For a Pubsub feed
if(isset($from) && isset($node) && $node != 'urn:xmpp:microblog:0') {
/*if(isset($from) && isset($node) && $node != 'urn:xmpp:microblog:0') {
$pd = new \modl\NodeDAO();
$n = $pd->getNode($from, $node);
if(isset($n->title))
@ -66,7 +86,7 @@ class Syndication extends WidgetBase
$this->view->assign('name', $messages[0]->getContact()->getTrueName());
$this->view->assign('uri', htmlentities(Route::urlize('blog',array($from, $node))));
$this->view->assign('link', '<link rel="self" href="'.htmlentities(Route::urlize('feed',array($from, $node))).'"/>');
$this->view->assign('uuid', generateUUID($from.$node));
$this->view->assign('uuid', generateUUID($from.$node));*/
}
}

16
app/widgets/Syndication/syndication.tpl

@ -1,15 +1,15 @@
{if="isset($from)"}
{if="isset($contact)"}
{if="!empty($messages)"}
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>{$title}</title>
<title>{$c->__('feed.title', $contact->getTrueName())}</title>
<updated>{$date}</updated>
<author>
<name>{$name}</name>
<name>{$contact->getTrueName()}</name>
<uri>{$uri}</uri>
</author>
{$link}
<logo>{$logo}</logo>
<logo>{$contact->getPhoto('xl')}</logo>
<generator uri="http://movim.eu/" version="{#APP_VERSION#}">
Movim
@ -18,7 +18,13 @@
<id>urn:uuid:{$uuid}</id>
{loop="$messages"}
<entry>
<title>{$c->prepareTitle($value->title)}</title>
<title>
{if="$value->title != null"}
{$c->prepareTitle($value->title)}
{else}
{$c->__('post.default_title')}
{/if}
</title>
<id>urn:uuid:{$c->generateUUID($value->content)}</id>
<updated>{$c->prepareUpdated($value->published)}</updated>
<content type="html">

55
linker.php

@ -45,7 +45,7 @@ $connector($config->websocketurl, array('xmpp'))->then(function($conn) use (&$st
$conn->on('message', function($message) use ($conn, $loop) {
if($message != '') {
#fwrite(STDERR, colorize($message, 'yellow')." : ".colorize('received', 'green')."\n");
fwrite(STDERR, colorize($message, 'yellow')." : ".colorize('received', 'green')."\n");
if($message == '</stream:stream>') {
$conn->close();
@ -76,7 +76,7 @@ $connector($config->websocketurl, array('xmpp'))->then(function($conn) use (&$st
}
if(!empty($xml)) {
#fwrite(STDERR, colorize(trim($xml), 'yellow')." : ".colorize('sent to XMPP', 'green')."\n");
fwrite(STDERR, colorize(trim($xml), 'yellow')." : ".colorize('sent to XMPP', 'green')."\n");
$conn->send(trim($xml));
}
}
@ -118,7 +118,7 @@ $connector($config->websocketurl, array('xmpp'))->then(function($conn) use (&$st
\Moxl\API::clear();
if(!empty($xml)) {
#fwrite(STDERR, colorize(trim($xml), 'yellow')." : ".colorize('sent to XMPP', 'green')."\n");
fwrite(STDERR, colorize(trim($xml), 'yellow')." : ".colorize('sent to XMPP', 'green')."\n");
$conn->send(trim($xml));
}
@ -145,31 +145,38 @@ $connector($config->websocketurl, array('xmpp'))->then(function($conn) use (&$st
// Fallback event, when the WebSocket is not enabled,
// we still handle browser to Movim requests
$stdin->on('data', function ($data) use ($loop) {
$messages = explode("\n", trim($data));
foreach ($messages as $message) {
//fwrite(STDERR, colorize($message, 'yellow')." : ".colorize('received from the browser', 'green')."\n");
$msg = json_decode($message);
if(isset($msg)) {
if($msg->func == 'message' && $msg->body != '') {
$msg = $msg->body;
} elseif($msg->func == 'unregister') {
$loop->stop();
if(substr($data, -3) == "END") {
$messages = explode("END", $buffer . substr($data, 0, -3));
$buffer = '';
foreach ($messages as $message) {
#fwrite(STDERR, colorize($message, 'yellow')." : ".colorize('received from the browser', 'green')."\n");
$msg = json_decode($message);
if(isset($msg)) {
if($msg->func == 'message' && $msg->body != '') {
$msg = $msg->body;
} elseif($msg->func == 'unregister') {
$loop->stop();
}
} else {
return;
}
} else {
return;
}
$rpc = new \RPC();
$rpc->handle_json($msg);
$rpc = new \RPC();
$rpc->handle_json($msg);
$msg = json_encode(\RPC::commit());
\RPC::clear();
$msg = json_encode(\RPC::commit());
\RPC::clear();
if(!empty($msg)) {
echo base64_encode(gzcompress($msg, 9))."END";
if(!empty($msg)) {
#fwrite(STDERR, colorize($msg, 'yellow')." : ".colorize('sent to the browser', 'green')."\n");
echo base64_encode(gzcompress($msg, 9))."END";
}
}
} else {
$buffer .= $data;
}
});

10
system/Route.php

@ -35,7 +35,10 @@ class Route extends \BaseController {
}
public function find() {
if(isset($_SERVER['HTTP_MOD_REWRITE']) && $_SERVER['HTTP_MOD_REWRITE']) {
$cd = new \Modl\ConfigDAO();
$config = $cd->get();
if($config->rewrite == true) {
$request = explode('/', $this->fetchGet('query'));
$this->_page = $request[0];
array_shift($request);
@ -69,6 +72,9 @@ class Route extends \BaseController {
$r = new Route();
$routes = $r->_routes;
$cd = new \Modl\ConfigDAO();
$config = $cd->get();
if($page === 'root')
return BASE_URI;
@ -79,7 +85,7 @@ class Route extends \BaseController {
if($tab != false)
$tab = '#'.$tab;
//We construct a classic URL if the rewriting is disabled
if(!isset($_SERVER['HTTP_MOD_REWRITE']) || !$_SERVER['HTTP_MOD_REWRITE']) {
if($config->rewrite == false) {
$uri = BASE_URI . '?q='.$page;
if($params != false && is_array($params)) {

6
themes/material/css/article.css

@ -14,6 +14,10 @@ article header h1 {
line-height: 12rem;
}
article header h2 {
line-height: 3.75rem;
}
article section {
font-size: 2rem;
line-height: 3rem;
@ -33,7 +37,7 @@ article section p {
article section content ul li,
article section content ol li {
font-size: 2rem;
font-size: 1.75rem;
line-height: 3rem;
padding-left: 2rem;
list-style-position: inside;

3
themes/material/css/grid.css

@ -21,6 +21,9 @@ ul.grid nav {
width: 100%;
padding: 0 2rem;
box-sizing: border-box;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
@media screen and (max-width: 1024px) {

Loading…
Cancel
Save