Browse Source

Move the user settings to the Settign model

Add the NSFW switch + first implementation in the config
pull/392/head
Timothée Jaussoin 9 years ago
parent
commit
b9a6bc9810
  1. 61
      app/models/postn/PostnDAO.php
  2. 17
      app/models/setting/Setting.php
  3. 73
      app/models/setting/SettingDAO.php
  4. 9
      app/widgets/Config/Config.php
  5. 25
      app/widgets/Config/_config_form.tpl
  6. 2
      app/widgets/Config/locales.ini
  7. 10
      app/widgets/Presence/Presence.php
  8. 1
      src/Movim/Bootstrap.php
  9. 29
      src/Movim/User.php

61
app/models/postn/PostnDAO.php

@ -204,7 +204,8 @@ class PostnDAO extends SQL
$params = [
'origin' => $origin,
'node' => $node,
'nodeid' => $nodeid
'nodeid' => $nodeid,
'setting.session' => $this->_user
];
$this->_sql = '
@ -216,6 +217,15 @@ class PostnDAO extends SQL
where postn.origin = :origin
and postn.node = :node';
if(isset($this->_user)) {
$this->_sql .= '
and (
postn.nsfw = (select nsfw from setting where session = :session)
or postn.nsfw = false)';
$params += ['setting.session' => $this->_user];
}
if(!$around) {
$this->_sql .= ' and postn.nodeid = :nodeid';
} else {
@ -360,6 +370,9 @@ class PostnDAO extends SQL
and postn.origin = :origin
and postn.node = :node
and postn.node != \'urn:xmpp:microblog:0\'
and (
postn.nsfw = (select nsfw from setting where session = :jid)
or postn.nsfw = false)
order by postn.published desc';
if($limitr !== false)
@ -387,14 +400,19 @@ class PostnDAO extends SQL
and postn.node = item.node
where postn.origin = :origin
and postn.node = :node
and (
postn.nsfw = (select nsfw from setting where session = :session)
or postn.nsfw = false)
order by postn.published desc';
if($limitr !== false)
if($limitr !== false) {
$this->_sql = $this->_sql.' limit '.(int)$limitr.' offset '.(int)$limitf;
}
$this->prepare(
'Postn',
[
'setting.session' => $this->_user,
'origin' => $from,
'node' => $node
]
@ -405,27 +423,36 @@ class PostnDAO extends SQL
function getPublicTag($tag, $limitf = false, $limitr = false)
{
$params = ['tag.tag' => $tag];
$this->_sql = '
select *, postn.aid from postn
left outer join contact on postn.aid = contact.jid
where nodeid in (select nodeid from tag where tag = :tag)
and postn.open = true
order by postn.published desc';
and postn.open = true';
if(isset($this->_user)) {
$this->_sql .= '
and (
postn.nsfw = (select nsfw from setting where session = :session)
or postn.nsfw = false)
order by postn.published desc';
$params += ['setting.session' => $this->_user];
}
if($limitr !== false)
$this->_sql = $this->_sql.' limit '.(int)$limitr.' offset '.(int)$limitf;
$this->prepare(
'Postn',
[
'tag.tag' => $tag
]
$params
);
return $this->run('ContactPostn');
}
function getGallery($from, $limitf = false, $limitr = false)
/*function getGallery($from, $limitf = false, $limitr = false)
{
$this->_sql = '
select *, postn.aid from postn
@ -445,7 +472,7 @@ class PostnDAO extends SQL
);
return $this->run('ContactPostn');
}
}*/
function getGroupPicture($origin, $node)
{
@ -537,6 +564,9 @@ class PostnDAO extends SQL
on postn.origin = item.server
and postn.node = item.node
where ((postn.origin, postn.node) in (select server, node from subscription where jid = :origin))
and (
postn.nsfw = (select nsfw from setting where session = :origin)
or postn.nsfw = false)
order by postn.published desc
';
@ -561,6 +591,9 @@ class PostnDAO extends SQL
left outer join contact on postn.aid = contact.jid
where postn.origin = :origin and postn.node = \'urn:xmpp:microblog:0\'
and (
postn.nsfw = (select nsfw from setting where session = :origin)
or postn.nsfw = false)
order by postn.published desc
';
@ -750,6 +783,9 @@ class PostnDAO extends SQL
and postn.node not like \'urn:xmpp:microblog:0:comments/%\'
and postn.node not like \'urn:xmpp:inbox\'
and published > :published
and (
postn.nsfw = (select nsfw from setting where session = :origin)
or postn.nsfw = false)
';
$this->prepare(
@ -805,6 +841,9 @@ class PostnDAO extends SQL
)
and postn.node not like \'urn:xmpp:microblog:0:comments/%\'
and postn.node not like \'urn:xmpp:inbox\'
and (
postn.nsfw = (select nsfw from setting where session = :origin)
or postn.nsfw = false)
order by postn.published desc
limit 1 offset 0';
@ -831,7 +870,9 @@ class PostnDAO extends SQL
postn.node != \'urn:xmpp:microblog:0\'
and postn.node not like \'urn:xmpp:microblog:0:comments/%\'
and postn.node not like \'urn:xmpp:inbox\'
and postn.nsfw is false
and (
postn.nsfw = (select nsfw from setting where session = :origin)
or postn.nsfw = false)
and aid is not null';
if($origin) {

17
app/models/setting/Setting.php

@ -0,0 +1,17 @@
<?php
namespace Modl;
class Setting extends Model
{
public $language;
public $cssurl;
public $nsfw = false;
public $_struct = [
'session' => ['type' => 'string','size' => 96,'key' => true],
'language' => ['type' => 'string','size' => 6],
'cssurl' => ['type' => 'string','size' => 128],
'nsfw' => ['type' => 'bool','size' => 16]
];
}

73
app/models/setting/SettingDAO.php

@ -0,0 +1,73 @@
<?php
namespace Modl;
class SettingDAO extends SQL
{
function set(Setting $s)
{
$this->_sql = '
update setting
set language = :language,
cssurl = :cssurl,
nsfw = :nsfw
where session = :session';
$this->prepare(
'Setting',
[
'language' => $s->language,
'cssurl' => $s->cssurl,
'nsfw' => $s->nsfw,
'session' => $this->_user
]
);
$this->run('Config');
if(!$this->_effective) {
$this->_sql = '
insert into setting
(
language,
cssurl,
nsfw,
session
)
values
(
:language,
:cssurl,
:nsfw,
:session
)
';
$this->prepare(
'Setting',
[
'language' => $s->language,
'cssurl' => $s->cssurl,
'nsfw' => $s->nsfw,
'session' => $this->_user
]
);
$this->run('Setting');
}
}
function get()
{
$this->_sql = '
select * from setting
where session = :session';
$this->prepare(
'Setting',
['session' => $this->_user]
);
return $this->run('Setting', 'item');
}
}

9
app/widgets/Config/Config.php

@ -15,13 +15,12 @@ class Config extends \Movim\Widget\Base
$view = $this->tpl();
/* We load the user configuration */
$this->user->reload(true);
$sd = new \Modl\SettingDAO;
$l = Movim\i18n\Locale::start();
$view->assign('languages', $l->getList());
$view->assign('me', $this->user->getLogin());
$view->assign('conf', $this->user->getConfig());
$view->assign('conf', $sd->get());
$view->assign('submit',
$this->call(
@ -53,9 +52,9 @@ class Config extends \Movim\Widget\Base
return;
}
$config = $this->user->getConfig();
/*$config = $this->user->getConfig();
if(isset($config))
$data = array_merge($config, $data);
$data = array_merge($config, $data);*/
$s = new Set;
$s->setXmlns('movim:prefs')

25
app/widgets/Config/_config_form.tpl

@ -16,10 +16,10 @@
<div class="block">
<div class="select">
<select name="language" id="language" value="{$conf.language}">
<select name="language" id="language" value="{$conf->language}">
<option value="en">English (default)</option>
{loop="$languages"}
{if="$key == $conf.language"}
{if="$key == $conf->language"}
<option
value="{$key}"
dir="auto"
@ -39,11 +39,30 @@
<label for="language">{$c->__('config.language')}</label>
</div>
<div class="block">
<ul class="list thick">
<li>
<span class="primary">
<div class="checkbox">
<input
{if="$conf->nsfw"}checked{/if}
type="checkbox"
id="nsfw"
name="nsfw"/>
<label for="nsfw"></label>
</div>
</span>
<p class="line">{$c->__('config.nsfw')}</p>
<p class="line">{$c->__('config.nsfw_text')}</p>
</li>
</ul>
</div>
<br />
<h3>{$c->__('config.advanced')}</h3>
<div class="block">
<input name="cssurl" class="content" placeholder="http://myserver.com/style.css" value="{$conf.cssurl}" type="url">
<input name="cssurl" class="content" placeholder="http://myserver.com/style.css" value="{$conf->cssurl}" type="url">
<label for="cssurl">{$c->__('cssurl.label')}</label>
</div>

2
app/widgets/Config/locales.ini

@ -8,6 +8,8 @@ appearence = Appearence
updated = Configuration updated
not_valid = Configuration invalid
advanced = Advanced Configuration
nsfw = Display adult content
nsfw_text = Will allow you to read the posts taggued with the #nsfw tag
[cssurl]
label = Custom CSS URL for your blog

10
app/widgets/Presence/Presence.php

@ -52,7 +52,6 @@ class Presence extends \Movim\Widget\Base
$this->onSessionUp();
$this->ajaxServerCapsGet();
$this->ajaxBookmarksGet();
$this->ajaxUserRefresh();
$this->ajaxFeedRefresh();
$this->ajaxServerDisco();
}
@ -119,15 +118,6 @@ class Presence extends \Movim\Widget\Base
->request();
}
// We refresh the user (local) configuration
function ajaxUserRefresh()
{
$language = $this->user->getConfig('language');
if(isset($language)) {
loadLanguage($language);
}
}
// We refresh our personnal feed
function ajaxFeedRefresh()
{

1
src/Movim/Bootstrap.php

@ -287,6 +287,7 @@ class Bootstrap
\Modl\Utils::loadModel('Item');
\Modl\Utils::loadModel('Message');
\Modl\Utils::loadModel('Sessionx');
\Modl\Utils::loadModel('Setting');
\Modl\Utils::loadModel('Conference');
\Modl\Utils::loadModel('Tag');

29
src/Movim/User.php

@ -7,9 +7,7 @@ use Movim\i18n\Locale;
class User
{
private $config = [];
public $caps;
public $userdir;
/**
@ -32,9 +30,8 @@ class User
$sd = new \Modl\SessionxDAO;
$session = $sd->get(SESSION_ID);
if($session && $session->config) {
if($session) {
if($language) {
$this->config = $session->config;
$lang = $this->getConfig('language');
if(isset($lang)) {
$l = Locale::start();
@ -90,10 +87,13 @@ class User
function setConfig(array $config)
{
$sd = new \Modl\SessionxDAO;
$session = $sd->get(SESSION_ID);
$session->config = $config;
$sd->set($session);
$s = new \Modl\Setting;
$s->language = $config['language'];
$s->cssurl = $config['cssurl'];
$s->nsfw = $config['nsfw'];
$sd = new \Modl\SettingDAO;
$sd->set($s);
$this->createDir();
@ -104,10 +104,17 @@ class User
function getConfig($key = false)
{
$sd = new \Modl\SettingDAO;
$s = $sd->get();
if($key == false) {
return $this->config;
} if(isset($this->config[$key])) {
return $this->config[$key];
return $s;
}
if(is_object($s)
&& property_exists($s, $key)
&& isset($s->$key)) {
return $s->$key;
}
}

Loading…
Cancel
Save