1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/movim_ynh.git synced 2024-09-03 19:46:19 +02:00

rollback to movim 0.9-2015-08-25

This commit is contained in:
src386 2015-09-10 10:11:09 +02:00
parent 88279612ef
commit e2af267fb7
58 changed files with 886 additions and 593 deletions

View file

@ -7,12 +7,12 @@ Warning: BETA.
You need a valid SSL certificate to use Movim, auto-signed is not allowed.
Current Movim version : 0.9 git2015-09-10
Current Movim version : 0.9 git2015-08-25
**Changelog**
0.9b 2015-0
- Update to Movim 0.9 git2015-09-10
- Update to Movim 0.9 git2015-08-25
- Add notes in README about public pods & whitelisting
- script/install now check if path is empty.
- script/remove now delete /etc/php/fpm/pool.d/movim.conf (fix #8).

View file

@ -47,9 +47,17 @@ class MovimEmoji
}
}
function addUrls($string, $preview = false) {
/**
* @desc Prepare the string (add the a to the links and show the smileys)
*
* @param string $string
* @param boolean display large emojis
* @param check the links and convert them to pictures (heavy)
* @return string
*/
function prepareString($string, $large = false, $preview = false) {
// Add missing links
return preg_replace_callback(
$string = preg_replace_callback(
"/([\w\"'>]+\:\/\/[\w-?&;#+%:~=\.\/\@]+[\w\/])/", function ($match) use($preview) {
if(!in_array(substr($match[0], 0, 1), array('>', '"', '\''))) {
$content = $match[0];
@ -76,18 +84,6 @@ function addUrls($string, $preview = false) {
}, $string
);
}
/**
* @desc Prepare the string (add the a to the links and show the smileys)
*
* @param string $string
* @param boolean display large emojis
* @param check the links and convert them to pictures (heavy)
* @return string
*/
function prepareString($string, $large = false, $preview = false) {
$string = addUrls($string, $preview);
// We remove all the style attributes
$string = preg_replace_callback(
@ -98,7 +94,16 @@ function prepareString($string, $large = false, $preview = false) {
// Twitter hashtags
$string = preg_replace_callback(
"/ #[a-zA-Z0-9_-]{3,}/", function ($match) { return ' <a class="twitter hastag" href="http://twitter.com/search?q='. urlencode(trim($match[0])). '&src=hash" target="_blank">'. trim($match[0]). '</a>'; }, ' ' . $string);
"/ #[a-zA-Z0-9_-]{3,}/", function ($match) {
return
' <a class="twitter hastag" href="http://twitter.com/search?q='.
urlencode(trim($match[0])).
'&src=hash" target="_blank">'.
trim($match[0]).
'</a>';
}, ' ' . $string
);
$string = preg_replace_callback(
"/ @[a-zA-Z0-9_-]{3,}/", function ($match) {
return

View file

@ -2,31 +2,31 @@
namespace modl;
class Conference extends Model {
class Conference extends Model {
public $jid;
protected $conference;
protected $name;
protected $nick;
public $conference;
public $name;
public $nick;
public $autojoin;
public $status;
public function __construct() {
$this->_struct = '
{
"jid" :
"jid" :
{"type":"string", "size":128, "mandatory":true, "key":true },
"conference" :
"conference" :
{"type":"string", "size":128, "mandatory":true, "key":true },
"name" :
"name" :
{"type":"string", "size":128, "mandatory":true },
"nick" :
"nick" :
{"type":"string", "size":128 },
"autojoin" :
"autojoin" :
{"type":"int", "size":1 },
"status" :
"status" :
{"type":"int", "size":1 }
}';
parent::__construct();
}
}

View file

@ -31,7 +31,7 @@ class Config extends Model {
"loglevel" :
{"type":"string", "size":16, "mandatory":true },
"timezone" :
{"type":"string", "size":32, "mandatory":true },
{"type":"string", "size":16, "mandatory":true },
"xmppwhitelist" :
{"type":"text" },
"info" :
@ -50,7 +50,7 @@ class Config extends Model {
parent::__construct();
$this->description = 'Description';//__('global.description');
$this->description = __('global.description');
$this->theme = 'material';
$this->locale = 'en';
$this->maxusers = -1;

View file

@ -2,8 +2,6 @@
namespace modl;
use Respect\Validation\Validator;
class Contact extends Model {
public $jid;
@ -160,36 +158,37 @@ class Contact extends Model {
}
public function set($vcard, $jid) {
$this->__set('jid', \echapJid($jid));
$this->jid = \echapJid($jid);
$validate_date = Validator::date('Y-m-d');
if(isset($vcard->vCard->BDAY)
&& $validate_date->validate($vcard->vCard->BDAY))
$this->__set('date', (string)$vcard->vCard->BDAY);
&& (string)$vcard->vCard->BDAY != '')
$this->date = (string)$vcard->vCard->BDAY;
else
$this->date = null;
$this->__set('date', date(DATE_ISO8601, strtotime($this->date)));
$this->date = date(DATE_ISO8601, strtotime($this->date));
$this->__set('name', (string)$vcard->vCard->NICKNAME);
$this->__set('fn', (string)$vcard->vCard->FN);
$this->__set('url', (string)$vcard->vCard->URL);
$this->name = (string)$vcard->vCard->NICKNAME;
$this->fn = (string)$vcard->vCard->FN;
$this->url = (string)$vcard->vCard->URL;
$this->__set('gender', (string)$vcard->vCard->{'X-GENDER'});
$this->__set('marital', (string)$vcard->vCard->MARITAL->STATUS);
$this->gender = (string)$vcard->vCard->{'X-GENDER'};
$this->marital = (string)$vcard->vCard->MARITAL->STATUS;
$this->__set('email', (string)$vcard->vCard->EMAIL->USERID);
$this->email = (string)$vcard->vCard->EMAIL->USERID;
$this->__set('adrlocality', (string)$vcard->vCard->ADR->LOCALITY);
$this->__set('adrpostalcode', (string)$vcard->vCard->ADR->PCODE);
$this->__set('adrcountry', (string)$vcard->vCard->ADR->CTRY);
$this->adrlocality = (string)$vcard->vCard->ADR->LOCALITY;
$this->adrpostalcode = (string)$vcard->vCard->ADR->PCODE;
$this->adrcountry = (string)$vcard->vCard->ADR->CTRY;
if(filter_var((string)$vcard->vCard->PHOTO, FILTER_VALIDATE_URL)) {
$this->__set('photobin', base64_encode(
requestUrl((string)$vcard->vCard->PHOTO, 1)));
$this->photobin = base64_encode(
requestUrl((string)$vcard->vCard->PHOTO, 1));
} else {
$this->__set('photobin', (string)$vcard->vCard->PHOTO->BINVAL);
$this->photobin = (string)$vcard->vCard->PHOTO->BINVAL;
}
$this->__set('description', (string)$vcard->vCard->DESC);
$this->description = (string)$vcard->vCard->DESC;
}
public function createThumbnails() {
@ -251,32 +250,32 @@ class Contact extends Model {
}
public function setTune($stanza) {
$this->__set('tuneartist', (string)$stanza->items->item->tune->artist);
$this->__set('tunelenght', (int)$stanza->items->item->tune->lenght);
$this->__set('tunerating', (int)$stanza->items->item->tune->rating);
$this->__set('tunesource', (string)$stanza->items->item->tune->source);
$this->__set('tunetitle', (string)$stanza->items->item->tune->title);
$this->__set('tunetrack', (string)$stanza->items->item->tune->track);
$this->tuneartist = (string)$stanza->items->item->tune->artist;
$this->tunelenght = (int)$stanza->items->item->tune->lenght;
$this->tunerating = (int)$stanza->items->item->tune->rating;
$this->tunesource = (string)$stanza->items->item->tune->source;
$this->tunetitle = (string)$stanza->items->item->tune->title;
$this->tunetrack = (string)$stanza->items->item->tune->track;
}
public function setVcard4($vcard) {
$validate_date = Validator::date('Y-m-d');
if(isset($vcard->bday->date)
&& $validate_date->validate($vcard->bday->date))
$this->__set('date', (string)$vcard->bday->date);
if(isset($vcard->bday->date))
$this->date = (string)$vcard->bday->date;
if(empty($this->date))
$this->date = null;
$this->__set('name', (string)$vcard->nickname->text);
$this->__set('fn', (string)$vcard->fn->text);
$this->__set('url', (string)$vcard->url->uri);
$this->name = (string)$vcard->nickname->text;
$this->fn = (string)$vcard->fn->text;
$this->url = (string)$vcard->url->uri;
if(isset($vcard->gender))
$this->__set('gender ', (string)$vcard->gender->sex->text);
$this->gender = (string)$vcard->gender->sex->text;
if(isset($vcard->marital))
$this->__set('marital', (string)$vcard->marital->status->text);
$this->marital = (string)$vcard->marital->status->text;
$this->__set('adrlocality', (string)$vcard->adr->locality);
$this->__set('adrcountry', (string)$vcard->adr->country);
$this->__set('adrpostalcode', (string)$vcard->adr->code);
$this->adrlocality = (string)$vcard->adr->locality;
$this->adrcountry = (string)$vcard->adr->country;
$this->adrpostalcode = (string)$vcard->adr->code;
if(isset($vcard->impp)) {
foreach($vcard->impp->children() as $c) {
@ -284,20 +283,21 @@ class Contact extends Model {
switch($key) {
case 'twitter' :
$this->__set('twitter', str_replace('@', '', $value));
$this->twitter = str_replace('@', '', $value);
break;
case 'skype' :
$this->__set('skype', (string)$value);
$this->skype = (string)$value;
break;
case 'ymsgr' :
$this->__set('yahoo', (string)$value);
$this->yahoo = (string)$value;
break;
}
}
}
$this->__set('email', (string)$vcard->email->text);
$this->__set('description', trim((string)$vcard->note->text));
$this->email = (string)$vcard->email->text;
$this->description = trim((string)$vcard->note->text);
}
public function getPlace() {
@ -389,26 +389,6 @@ class Contact extends Model {
}
}
function getAlbum()
{
$uri = str_replace(
' ',
'%20',
'http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=80c1aa3abfa9e3d06f404a2e781e38f9&artist='.
$this->tuneartist.
'&album='.
$this->tunesource.
'&format=json'
);
$json = json_decode(requestURL($uri, 2));
if($json->album) {
$json->album->url = $json->album->image[2]->{'#text'};
return $json->album;
}
}
function toRoster() {
return array(
'jid' => $this->jid,

View file

@ -6,15 +6,15 @@ class Message extends Model {
public $session;
public $jidto;
public $jidfrom;
protected $resource;
public $resource;
public $type;
protected $subject;
protected $thread;
protected $body;
protected $html;
public $subject;
public $thread;
public $body;
public $html;
public $published;
public $delivered;
@ -25,30 +25,30 @@ class Message extends Model {
{
$this->_struct = '
{
"session" :
"session" :
{"type":"string", "size":128, "mandatory":true },
"jidto" :
"jidto" :
{"type":"string", "size":128, "mandatory":true },
"jidfrom" :
"jidfrom" :
{"type":"string", "size":128, "mandatory":true },
"resource" :
"resource" :
{"type":"string", "size":128 },
"type" :
"type" :
{"type":"string", "size":20 },
"subject" :
"subject" :
{"type":"text"},
"thread" :
"thread" :
{"type":"string", "size":128 },
"body" :
"body" :
{"type":"text"},
"html" :
"html" :
{"type":"text"},
"published" :
"published" :
{"type":"date"},
"delivered" :
"delivered" :
{"type":"date"}
}';
parent::__construct();
}
@ -66,15 +66,15 @@ class Message extends Model {
$this->jidfrom = $jid[0];
if(isset($jid[1]))
$this->__set('resource', $jid[1]);
$this->resource = $jid[1];
$this->type = 'chat';
if($stanza->attributes()->type) {
$this->type = (string)$stanza->attributes()->type;
}
$this->__set('body', (string)$stanza->body);
$this->__set('subject', (string)$stanza->subject);
$this->body = (string)$stanza->body;
$this->subject = (string)$stanza->subject;
$images = (bool)($this->type == 'chat');
@ -83,9 +83,9 @@ class Message extends Model {
$this->html = \fixSelfClosing($this->html);
$this->html = \prepareString($this->html, false, $images);
} else {*/
// $this->html = \prepareString($this->body, false, $images);
$this->html = \prepareString($this->body, false, $images);
//}
if($stanza->delay)
$this->published = gmdate('Y-m-d H:i:s', strtotime($stanza->delay->attributes()->stamp));
elseif($parent && $parent->delay)
@ -95,15 +95,4 @@ class Message extends Model {
$this->delivered = gmdate('Y-m-d H:i:s');
}
}
public function convertEmojis()
{
$emoji = \MovimEmoji::getInstance();
$this->body = $emoji->replace($this->body);
}
public function addUrls()
{
$this->body = addUrls($this->body);
}
}

View file

@ -109,33 +109,33 @@ class Postn extends Model {
else
$entry = $item;
$this->__set('origin', $from);
$this->origin = $from;
if($node)
$this->__set('node', $node);
$this->node = $node;
else
$this->__set('node', (string)$item->attributes()->node);
$this->node = (string)$item->attributes()->node;
$this->__set('nodeid', (string)$entry->attributes()->id);
$this->nodeid = (string)$entry->attributes()->id;
if($entry->entry->id)
$this->__set('nodeid', (string)$entry->entry->id);
$this->nodeid = (string)$entry->entry->id;
// Get some informations on the author
if($entry->entry->author->name)
$this->__set('aname', (string)$entry->entry->author->name);
$this->aname = (string)$entry->entry->author->name;
if($entry->entry->author->uri)
$this->__set('aid', substr((string)$entry->entry->author->uri, 5));
$this->aid = substr((string)$entry->entry->author->uri, 5);
if($entry->entry->author->email)
$this->__set('aemail', (string)$entry->entry->author->email);
$this->aemail = (string)$entry->entry->author->email;
// Non standard support
if($entry->entry->source && $entry->entry->source->author->name)
$this->__set('aname', (string)$entry->entry->source->author->name);
$this->aname = (string)$entry->entry->source->author->name;
if($entry->entry->source && $entry->entry->source->author->uri)
$this->__set('aid', substr((string)$entry->entry->source->author->uri, 5));
$this->aid = substr((string)$entry->entry->source->author->uri, 5);
$this->__set('title', (string)$entry->entry->title);
$this->title = (string)$entry->entry->title;
// Content
if($entry->entry->summary && (string)$entry->entry->summary != '')
@ -153,22 +153,23 @@ class Postn extends Model {
$content = $summary.$content;
if($entry->entry->updated)
$this->__set('updated', (string)$entry->entry->updated);
$this->updated = (string)$entry->entry->updated;
else
$this->__set('updated', gmdate(DATE_ISO8601));
$this->updated = gmdate(DATE_ISO8601);
if($entry->entry->published)
$this->__set('published', (string)$entry->entry->published);
$this->published = (string)$entry->entry->published;
elseif($entry->entry->updated)
$this->__set('published', (string)$entry->entry->updated);
$this->published = (string)$entry->entry->updated;
else
$this->__set('published', gmdate(DATE_ISO8601));
$this->published = gmdate(DATE_ISO8601);
if($delay)
$this->__set('delay', $delay);
$this->delay = $delay;
$contentimg = $this->setAttachements($entry->entry->link);
// Tags parsing
if($entry->entry->category) {
$this->tags = array();
@ -182,24 +183,22 @@ class Postn extends Model {
}
if(!empty($this->tags))
$this->__set('tags', serialize($this->tags));
$this->tags = serialize($this->tags);
if($contentimg != '')
$content .= '<br />'.$contentimg;
if(!isset($this->commentplace))
$this->__set('commentplace', $this->origin);
$this->commentplace = $this->origin;
$this->__set('content', trim($content));
//$this->__set('contentcleaned', prepareString(html_entity_decode($this->content)));
$purifier = new \HTMLPurifier();
$this->contentcleaned = $purifier->purify(html_entity_decode($this->content));
$this->content = trim($content);
$this->contentcleaned = prepareString(html_entity_decode($this->content));
if($entry->entry->geoloc) {
if($entry->entry->geoloc->lat != 0)
$this->__set('lat', (string)$entry->entry->geoloc->lat);
$this->lat = (string)$entry->entry->geoloc->lat;
if($entry->entry->geoloc->lon != 0)
$this->__set('lon', (string)$entry->entry->geoloc->lon);
$this->lon = (string)$entry->entry->geoloc->lon;
}
}

View file

@ -4,23 +4,23 @@ namespace Modl;
class Presence extends Model {
protected $id;
protected $session;
protected $jid;
// General presence informations
protected $resource;
protected $value;
protected $priority;
protected $status;
// Client Informations
protected $node;
protected $ver;
// Delay - XEP 0203
protected $delay;
// Last Activity - XEP 0256
protected $last;
@ -33,84 +33,84 @@ class Presence extends Model {
// vcard-temp:x:update, not saved in the DB
public $photo = false;
public function __construct() {
$this->_struct = '
{
"id" :
"id" :
{"type":"string", "size":128, "mandatory":true },
"session" :
"session" :
{"type":"string", "size":64, "mandatory":true, "key":true },
"jid" :
"jid" :
{"type":"string", "size":64, "mandatory":true, "key":true },
"resource" :
"resource" :
{"type":"string", "size":64, "key":true },
"value" :
"value" :
{"type":"int", "size":11, "mandatory":true },
"priority" :
"priority" :
{"type":"int", "size":11 },
"status" :
"status" :
{"type":"text"},
"node" :
"node" :
{"type":"string", "size":128 },
"ver" :
"ver" :
{"type":"string", "size":128 },
"delay" :
"delay" :
{"type":"date"},
"last" :
"last" :
{"type":"int", "size":11 },
"publickey" :
"publickey" :
{"type":"text"},
"muc" :
"muc" :
{"type":"int", "size":1 },
"mucjid" :
"mucjid" :
{"type":"string", "size":64 },
"mucaffiliation" :
"mucaffiliation" :
{"type":"string", "size":32 },
"mucrole" :
"mucrole" :
{"type":"string", "size":32 }
}';
parent::__construct();
}
public function setPresence($stanza) {
$jid = explode('/',(string)$stanza->attributes()->from);
if($stanza->attributes()->to)
$to = current(explode('/',(string)$stanza->attributes()->to));
else
$to = $jid[0];
$this->__set('session', $to);
$this->__set('jid', $jid[0]);
$this->session = $to;
$this->jid = $jid[0];
if(isset($jid[1]))
$this->__set('resource', $jid[1]);
$this->resource = $jid[1];
else
$this->__set('resource', 'default');
$this->__set('status', (string)$stanza->status);
$this->resource = 'default';
$this->status = (string)$stanza->status;
if($stanza->c) {
$this->__set('node', (string)$stanza->c->attributes()->node);
$this->__set('ver', (string)$stanza->c->attributes()->ver);
$this->node = (string)$stanza->c->attributes()->node;
$this->ver = (string)$stanza->c->attributes()->ver;
}
if($stanza->priority)
$this->__set('priority', (string)$stanza->priority);
$this->priority = (string)$stanza->priority;
if((string)$stanza->attributes()->type == 'error') {
$this->__set('value', 6);
$this->value = 6;
} elseif((string)$stanza->attributes()->type == 'unavailable') {
$this->__set('value', 5);
$this->value = 5;
} elseif((string)$stanza->show == 'away') {
$this->__set('value', 2);
$this->value = 2;
} elseif((string)$stanza->show == 'dnd') {
$this->__set('value', 3);
$this->value = 3;
} elseif((string)$stanza->show == 'xa') {
$this->__set('value', 4);
$this->value = 4;
} else {
$this->__set('value', 1);
$this->value = 1;
}
// Specific XEP
@ -118,41 +118,41 @@ class Presence extends Model {
foreach($stanza->children() as $name => $c) {
switch($c->attributes()->xmlns) {
case 'jabber:x:signed' :
$this->__set('publickey', (string)$c);
$this->publickey = (string)$c;
break;
case 'http://jabber.org/protocol/muc#user' :
$this->__set('muc ', true);
$this->muc = true;
if($c->item->attributes()->jid)
$this->__set('mucjid', cleanJid((string)$c->item->attributes()->jid));
$this->mucjid = cleanJid((string)$c->item->attributes()->jid);
else
$this->__set('mucjid', (string)$stanza->attributes()->from);
$this->mucjid = (string)$stanza->attributes()->from;
$this->__set('mucrole', (string)$c->item->attributes()->role);
$this->__set('mucaffiliation', (string)$c->item->attributes()->affiliation);
$this->mucrole = (string)$c->item->attributes()->role;
$this->mucaffiliation = (string)$c->item->attributes()->affiliation;
break;
case 'vcard-temp:x:update' :
$this->__set('photo', true);
$this->photo = true;
break;
}
}
}
if($stanza->delay) {
$this->__set('delay',
$this->delay =
gmdate(
'Y-m-d H:i:s',
'Y-m-d H:i:s',
strtotime(
(string)$stanza->delay->attributes()->stamp
)
)
);
;
}
if($stanza->query) {
$this->__set('last', (int)$stanza->query->attributes()->seconds);
$this->last = (int)$stanza->query->attributes()->seconds;
}
}
public function getPresence() {
$txt = array(
1 => 'online',
@ -162,7 +162,7 @@ class Presence extends Model {
5 => 'offline',
6 => 'server_error'
);
$arr = array();
$arr['jid'] = $this->jid;
$arr['resource'] = $this->resource;
@ -172,7 +172,7 @@ class Presence extends Model {
$arr['status'] = $this->status;
$arr['node'] = $this->node;
$arr['ver'] = $this->ver;
return $arr;
}

View file

@ -2,57 +2,56 @@
namespace modl;
class RosterLink extends Model {
class RosterLink extends Model {
public $session;
public $jid;
protected $rostername;
public $rostername;
public $rosterask;
public $rostersubscription;
protected $realname;
protected $groupname;
public $realname;
public $groupname;
public $chaton;
public $publickey;
public function __construct() {
$this->_struct = '
{
"session" :
"session" :
{"type":"string", "size":128, "mandatory":true, "key":true },
"jid" :
"jid" :
{"type":"string", "size":128, "mandatory":true, "key":true },
"rostername" :
"rostername" :
{"type":"string", "size":128 },
"rosterask" :
"rosterask" :
{"type":"string", "size":128 },
"rostersubscription" :
"rostersubscription" :
{"type":"string", "size":128 },
"realname" :
"realname" :
{"type":"string", "size":128 },
"groupname" :
"groupname" :
{"type":"string", "size":128 },
"chaton" :
"chaton" :
{"type":"int", "size":11 }
}';
parent::__construct();
}
function set($stanza) {
$this->jid = (string)$stanza->attributes()->jid;
if(isset($stanza->attributes()->name)
&& (string)$stanza->attributes()->name != '')
$this->__set('rostername', (string)$stanza->attributes()->name);
if(isset($stanza->attributes()->name) && (string)$stanza->attributes()->name != '')
$this->rostername = (string)$stanza->attributes()->name;
else
$this->__set('rostername', (string)$stanza->attributes()->jid);
$this->__set('rosterask', (string)$stanza->attributes()->ask);
$this->__set('rostersubscription', (string)$stanza->attributes()->subscription);
$this->__set('groupname', (string)$stanza->group);
$this->rostername = (string)$stanza->attributes()->jid;
$this->rosterask = (string)$stanza->attributes()->ask;
$this->rostersubscription = (string)$stanza->attributes()->subscription;
$this->groupname = (string)$stanza->group;
}
}

View file

@ -4,11 +4,11 @@ namespace modl;
class Subscription extends Model {
public $jid;
protected $server;
protected $node;
protected $subscription;
protected $subid;
protected $title;
public $server;
public $node;
public $subscription;
public $subid;
public $title;
public $description;
public $tags;
public $timestamp;
@ -40,13 +40,13 @@ class Subscription extends Model {
}
function set($jid, $server, $node, $s) {
$this->__set('jid', $jid);
$this->__set('server', $server);
$this->__set('node', $node);
$this->__set('jid', (string)$s->attributes()->jid);
$this->__set('subscription', (string)$s->attributes()->subscription);
$this->__set('subid', (string)$s->attributes()->subid);
$this->__set('tags', serialize(array()));
$this->jid = $jid;
$this->server = $server;
$this->node = $node;
$this->jid = (string)$s->attributes()->jid;
$this->subscription = (string)$s->attributes()->subscription;
$this->subid = (string)$s->attributes()->subid;
$this->tags = serialize(array());
if($this->subid = '')
$this->subid = 'default';

View file

@ -5,7 +5,6 @@
<?php $this->widget('Tabs');?>
<?php $this->widget('About');?>
<?php $this->widget('Help');?>
<?php $this->widget('Caps');?>
</div>
</section>

View file

@ -11,8 +11,8 @@
<meta name="theme-color" content="#1C1D5B" />
<link rel="shortcut icon" href="<?php $this->linkFile('img/favicon.ico');?>" />
<!--<link rel="stylesheet" href="<?php echo BASE_URI; ?>app/assets/js/leaflet.css" />
<script src="<?php echo BASE_URI; ?>app/assets/js/leaflet.js"></script>-->
<link rel="stylesheet" href="<?php echo BASE_URI; ?>app/assets/js/leaflet.css" />
<script src="<?php echo BASE_URI; ?>app/assets/js/leaflet.js"></script>
<script src="<?php echo BASE_URI; ?>app/assets/js/favico.js"></script>
<!-- OTR -->

View file

@ -20,7 +20,7 @@
<span class="icon bubble color purple"><i class="zmdi zmdi-flag"></i></span>
<span>{$c->__('about.translators')}</span>
<p>
{$c->__('about.translators_text')} <a href="https://www.transifex.com/projects/p/movim/">www.transifex.com/projects/p/movim/</a>
Thanks to all the translators <a href="https://translations.launchpad.net/movim">translations.launchpad.net/movim</a>
</p>
</li>
<li class="subheader">{$c->__('about.software')}</li>

View file

@ -1,9 +1,8 @@
[about]
thanks = Thanks
developers = Developers
translators = Translators
translators_text = "Thanks to all the translators"
software = Software
resources = Resources
api = API
info = Movim is an XMPP-based communication platform. All the project, except the following software and resources, is under
thanks = Thanks
developers = Developers
translators = Translators
software = Software
resources = Resources
api = API
info = Movim is an XMPP-based communication platform. All the project, except the following software and resources, is under

View file

@ -13,7 +13,7 @@ class Account extends WidgetBase
$this->addjs('account.js');
$this->registerEvent('register_changepassword_handle', 'onPasswordChanged');
$this->registerEvent('register_remove_handle', 'onRemoved');
$this->registerEvent('register_get_handle', 'onRegister', 'account');
$this->registerEvent('register_get_handle', 'onRegister');
}
function onPasswordChanged()

View file

@ -10,7 +10,3 @@ var Account = {
Presence_ajaxLogout();
}
}
MovimWebsocket.attach(function() {
Notification.current('account');
});

View file

@ -9,12 +9,12 @@ class AccountNext extends WidgetBase {
{
$this->addjs('accountnext.js');
$this->addcss('accountnext.css');
$this->registerEvent('register_get_handle', 'onForm');
$this->registerEvent('register_set_handle', 'onRegistered');
$this->registerEvent('register_set_errorconflict', 'onRegisterError', 'accountnext');
$this->registerEvent('register_set_errornotacceptable', 'onRegisterNotAcceptable', 'accountnext');
$this->registerEvent('register_get_errorserviceunavailable', 'onServiceUnavailable', 'accountnext');
$this->registerEvent('register_set_errorconflict', 'onRegisterError');
$this->registerEvent('register_set_errornotacceptable', 'onRegisterNotAcceptable');
$this->registerEvent('register_get_errorserviceunavailable', 'onServiceUnavailable');
}
function display()
@ -35,7 +35,7 @@ class AccountNext extends WidgetBase {
switch($form->x->attributes()->xmlns) {
case 'jabber:x:data' :
$formview = $this->tpl();
$formh = $xtf->getHTML($form->x->asXML());
$formview->assign('submitdata', $this->call('ajaxRegister', "movim_form_to_json('data')"));
@ -47,13 +47,13 @@ class AccountNext extends WidgetBase {
case 'jabber:x:oob' :
$oobview = $this->tpl();
$oobview->assign('url', (string)$form->x->url);
$html = $oobview->draw('_accountnext_oob', true);
RPC::call('movim_fill', 'subscription_form', $html);
break;
}
} else{
$formh = $xtf->getHTML($form->asXML());
}
@ -65,9 +65,9 @@ class AccountNext extends WidgetBase {
$view = $this->tpl();
$view->assign('url', (string)$form->x->url);
$html = $view->draw('_accountnext_registered', true);
RPC::call('movim_fill', 'subscription_form', $html);
RPC::call('setUsername', $data->username->value);
}
@ -77,12 +77,12 @@ class AccountNext extends WidgetBase {
$error = $package->content;
Notification::append(null, $error);
}
function onRegisterNotAcceptable()
{
Notification::append(null, $this->__('error.not_acceptable'));
}
function onServiceUnavailable()
{
Notification::append(null, $this->__('error.service_unavailable'));

View file

@ -12,10 +12,10 @@
</div>
<input
class="button oppose color"
class="button flat oppose"
type="submit"
name="submit"
value="{$c->__('button.validate')}" />
value="{$c->__('button.submit')}" />
</form>
</li>
</ul>

View file

@ -72,8 +72,6 @@ class AdminMain extends WidgetBase
$cd = new \Modl\ConfigDAO();
$config = $cd->get();
$l = Locale::start();
$this->view->assign('conf', $cd->get());
$this->view->assign('logs',
array(
@ -98,6 +96,6 @@ class AdminMain extends WidgetBase
}
$this->view->assign('timezones', getTimezoneList());
$this->view->assign('langs', $l->getList());
$this->view->assign('langs', loadLangArray());
}
}

View file

@ -155,7 +155,7 @@
<input
type="submit"
class="button color green oppose"
value="{$c->__('button.save')}"/>
value="{$c->__('button.submit')}"/>
<div class="clear"></div>
</form>
</div>

View file

@ -46,7 +46,7 @@ class AdminTest extends WidgetBase
$config = $cd->get();
$this->view->assign('dbconnected', $md->_connected);
$this->view->assign('dbtype', $supported[$config->type]);
$this->view->assign('dbtype', $supported[$conf['type']]);
$this->view->assign('dbinfos', sizeof($md->check()));
$this->view->assign('websocketurl', $config->websocketurl);
}

View file

@ -34,11 +34,10 @@
</div>
<ul>
<!--
<li class="subheader">
{$c->__('compatibility.info')}
</li>
-->
{if="$dbconnected"}
{if="$dbinfos > 0"}
<li>

View file

@ -103,7 +103,7 @@
<ul class="middle divided spaced">
{if="isset($attachements.links)"}
{loop="$attachements.links"}
{if="substr($value.href, 0, 5) != 'xmpp:' && filter_var($value.href, FILTER_VALIDATE_URL)"}
{if="substr($value.href, 0, 5) != 'xmpp:'"}
<li>
<span class="icon">
<img src="http://icons.duckduckgo.com/ip2/{$value.url.host}.ico"/>

View file

@ -30,6 +30,10 @@ class Bookmark extends WidgetBase
{
$this->addcss('bookmark.css');
$this->registerEvent('bookmark', 'onBookmark');
$this->registerEvent('bookmarkerror', 'onBookmarkError');
//$this->registerEvent('mucrole', 'onMucRole');
$this->registerEvent('groupsubscribed', 'onGroupSubscribed');
$this->registerEvent('groupunsubscribed', 'onGroupUnsubscribed');
}
@ -124,6 +128,16 @@ class Bookmark extends WidgetBase
RPC::call('movim_fill', 'bookmarks', $html);
Notification::append(null, $this->__('bookmarks.updated'));
}
/*
function onMucRole($arr)
{
}
*/
function onBookmarkError($error)
{
Notification::append(null, $this->__('bookmarks.error').$error);
}
function ajaxGetBookmark()
{

View file

@ -253,7 +253,7 @@ class Chat extends WidgetBase
}
$m->body = rawurldecode($message);
//$m->html = prepareString($m->body, false, true);
$m->html = prepareString($m->body, false, true);
$m->published = gmdate('Y-m-d H:i:s');
$m->delivered = gmdate('Y-m-d H:i:s');
@ -265,7 +265,7 @@ class Chat extends WidgetBase
$p = new Publish;
$p->setTo($to);
//$p->setHTML($m->html);
$p->setContent($m->body);
$p->setContent(htmlspecialchars($m->body));
if($muc) {
$p->setMuc();
@ -488,10 +488,7 @@ class Chat extends WidgetBase
if(isset($message->html)) {
$message->body = $message->html;
} else {
// We add some smileys...
$message->convertEmojis();
$message->addUrls();
// $message->body = prepareString(htmlentities($message->body , ENT_COMPAT,'UTF-8'));
$message->body = prepareString(htmlentities($message->body , ENT_COMPAT,'UTF-8'));
}
if($message->type == 'groupchat') {

View file

@ -77,6 +77,7 @@ var Chat = {
};
bubble.querySelector('span.user').innerHTML = message.resource;
var conversation = document.getElementById(id);
if(conversation) {
conversation.appendChild(bubble);
@ -109,7 +110,6 @@ var Chat = {
if(bubble) {
bubble.querySelector('div.bubble div').innerHTML = message.body;
bubble.querySelector('div.bubble span.info').innerHTML = message.published;
movim_append(id, bubble.outerHTML);

View file

@ -36,9 +36,7 @@ class Config extends WidgetBase
/* We load the user configuration */
$this->user->reload();
$l = Locale::start();
$view->assign('languages', $l->getList());
$view->assign('languages', loadLangArray());
$view->assign('me', $this->user->getLogin());
$view->assign('conf', $this->user->getConfig());

View file

@ -271,6 +271,26 @@ class Contact extends WidgetBase
}
}
function getLastFM($contact)
{
$uri = str_replace(
' ',
'%20',
'http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=80c1aa3abfa9e3d06f404a2e781e38f9&artist='.
$contact->tuneartist.
'&album='.
$contact->tunesource.
'&format=json'
);
$json = json_decode(requestURL($uri, 2));
$img = $json->album->image[2]->{'#text'};
$url = $json->album->url;
return array($img, $url);
}
/**
* @brief Validate the jid
*

View file

@ -131,6 +131,14 @@
</li>
{/if}
{if="$contact->description != null && trim($contact->description) != ''"}
<li class="condensed block">
<span class="icon gray"><i class="zmdi zmdi-format-align-justify"></i></span>
<span>{$c->__('general.about')}</span>
<p class="all">{$contact->description}</p>
</li>
{/if}
{if="$contact->mood != null"}
{$moods = unserialize($contact->mood)}
<li class="condensed block">
@ -142,16 +150,7 @@
</p>
</li>
{/if}
{if="$contact->description != null && trim($contact->description) != ''"}
<li class="condensed block large">
<span class="icon gray"><i class="zmdi zmdi-format-align-justify"></i></span>
<span>{$c->__('general.about')}</span>
<p class="all">{$contact->description}</p>
</li>
{/if}
</ul>
<br />
{if="$blog != null"}
<ul class="active">
@ -172,25 +171,26 @@
</ul>
{/if}
{$album = $contact->getAlbum()}
{if="$album"}
{if="$contact->tuneartist || $contact->tunetitle"}
<ul class="flex">
<li class="subheader block large">{$c->__('general.tune')}</li>
{$img_array = $c->getLastFM($contact)}
<li class="
block
{if="$contact->tunetitle"}condensed{/if}
action
{if="isset($img_array[1]) && $img_array[1] != ''"} action{/if}
">
<div class="action">
<a href="{$album->url}" target="_blank">
<i class="zmdi zmdi-radio"></i>
</a>
</div>
{if="isset($img_array[1]) && $img_array[1] != ''"}
<div class="action">
<a href="{$img_array[1]}" target="_blank">
<i class="zmdi zmdi-radio"></i>
</a>
</div>
{/if}
<span class="icon bubble">
{if="isset($album->url)"}
<img src="{$album->url}"/>
{if="isset($img_array[0]) && $img_array[0] != ''"}
<img src="{$img_array[0]}"/>
{else}
<i class="zmdi zmdi-play-circle-fill"></i>
{/if}
@ -203,6 +203,7 @@
{$contact->tunesource}
{/if}
</span>
{if="$contact->tunetitle"}
<p>{$contact->tunetitle}</p>
{/if}

View file

@ -196,6 +196,10 @@ class Group extends WidgetBase
$view->assign('node', $node);
$html .= $view->draw('_group_publish', true);
$header = $this->prepareHeader($server, $node);
Header::fill($header);
RPC::call('MovimTpl.fill', '#group_widget.'.stringToUri($server.'_'.$node), $html);
RPC::call('Group.enableVideos');
}
@ -278,14 +282,14 @@ class Group extends WidgetBase
->request();
}
function ajaxGetSubscriptions($server, $node, $notify = true)
function ajaxGetSubscriptions($server, $node)
{
if(!$this->validateServerNode($server, $node)) return;
$r = new GetSubscriptions;
$r->setTo($server)
->setNode($node)
->setNotify($notify)
->setSync()
->request();
}

View file

@ -54,7 +54,7 @@
<li onclick="Group_ajaxGetConfig('{$item->server}', '{$item->node}')">
<span>{$c->__('group.configuration')}</span>
</li>
<li onclick="Group_ajaxGetSubscriptions('{$item->server}', '{$item->node}', true)">
<li onclick="Group_ajaxGetSubscriptions('{$item->server}', '{$item->node}')">
<span>{$c->__('group.subscriptions')}</span>
</li>
<li onclick="Group_ajaxDelete('{$item->server}', '{$item->node}')">

View file

@ -20,13 +20,11 @@
<span class="icon bubble color {$value->node|stringToColor}">{$value->node|firstLetterCapitalize}</span>
{/if}
<h2>
<a href="{$c->route('news', $value->nodeid)}">
{if="$value->title != null"}
{$value->title}
{else}
{$c->__('post.default_title')}
{/if}
</a>
{if="$value->title != null"}
{$value->title}
{else}
{$c->__('post.default_title')}
{/if}
</h2>
<p>
{if="$value->getContact()->getTrueName() != ''"}
@ -49,7 +47,7 @@
<ul class="thin">
{if="isset($attachements.links)"}
{loop="$attachements.links"}
{if="substr($value.href, 0, 5) != 'xmpp:' && filter_var($value.href, FILTER_VALIDATE_URL)"}
{if="substr($value.href, 0, 5) != 'xmpp:'"}
<li>
<span class="icon small"><img src="http://icons.duckduckgo.com/ip2/{$value.url.host}.ico"/></span>
<a href="{$value.href}" class="alternate" target="_blank">
@ -112,9 +110,7 @@
{/if}
<span class="info">{$value->published|strtotime|prepareDate}</span>
<span>
<a href="{$c->route('contact', $value->getContact()->jid)}">
{$value->getContact()->getTrueName()}
</a>
{$value->getContact()->getTrueName()}
</span>
<p class="all">
{$value->content}

View file

@ -10,7 +10,7 @@ var Groups = {
Group_ajaxGetItems(this.dataset.server, this.dataset.node);
Group_ajaxGetMetadata(this.dataset.server, this.dataset.node);
Group_ajaxGetAffiliations(this.dataset.server, this.dataset.node);
Group_ajaxGetSubscriptions(this.dataset.server, this.dataset.node, false);
//Group_ajaxGetSubscriptions(this.dataset.server, this.dataset.node);
Groups.reset(items);
movim_add_class(this, 'active');
}

View file

@ -32,7 +32,7 @@
<p>{$c->__('chatroom.button')}<br/>movim@conference.movim.eu</p>
</li>
</ul>
<!--
<div class="clear spacetop"></div>
<h2 class="padded_top_bottom">{$c->__('help.faq')}</h2>
@ -71,5 +71,5 @@
</section>
</article>
</div>-->
</div>
</div>

View file

@ -24,6 +24,9 @@ wrong_account = Movim failed to authenticate. You entered wrong data
mechanism = Authentication mechanism not supported by Movim
fail_auth = The XMPP authentification failed
[account]
title = Accounts
[form]
username = My address
password = Password
@ -31,6 +34,6 @@ create_one = Create one !
another_account = Another account
no_account = No account yet ?
whitelist.info = You can login with accounts from theses servers
connected = Connected
population = Population
whitelist.info = You can login with accounts from theses servers
connected = Connected
population = Population

View file

@ -23,7 +23,7 @@ var Login = {
Login.rememberSession(localStorage.username);
// A fallback security
setTimeout("MovimWebsocket.unregister()", 20000);
setTimeout("MovimWebsocket.unregister()", 7000);
}
},

View file

@ -8,7 +8,7 @@
<div id="form" class="dialog">
<section>
<span class="info">{$c->__('form.connected')} {$connected} / {$pop}</span>
<span class="info">{$c->__('connected')} {$connected} / {$pop}</span>
<h3>{$c->__('page.login')}</h3>
<form
data-action="{$submit}"

View file

@ -8,7 +8,7 @@
margin-right: 0.5em;
border-radius: 1em;
}
/*
#notifs_widget.groupshown li:not(:first-child){
display: none;
}
@ -24,4 +24,3 @@
content: "\f2c0";
display: inline-block;
}
*/

View file

@ -68,7 +68,7 @@
<ul class="middle divided spaced">
{if="isset($attachements.links)"}
{loop="$attachements.links"}
{if="substr($value.href, 0, 5) != 'xmpp:' && filter_var($value.href, FILTER_VALIDATE_URL)"}
{if="substr($value.href, 0, 5) != 'xmpp:'"}
<li>
<span class="icon">
<img src="http://icons.duckduckgo.com/ip2/{$value.url.host}.ico"/>

View file

@ -157,18 +157,14 @@ class Publish extends WidgetBase
}
if($form->embed->value != '' && filter_var($form->embed->value, FILTER_VALIDATE_URL)) {
try {
$embed = Embed\Embed::create($form->embed->value);
$p->setLink($form->embed->value);
$embed = Embed\Embed::create($form->embed->value);
$p->setLink($form->embed->value);
if($embed->type == 'photo') {
$key = key($embed->images);
$p->setImage($embed->images[0]['value'], $embed->title, $embed->images[0]['mime']);
} else {
$content .= $this->prepareEmbed($embed);
}
} catch(Exception $e) {
error_log($e->getMessage());
if($embed->type == 'photo') {
$key = key($embed->images);
$p->setImage($embed->images[0]['value'], $embed->title, $embed->images[0]['mime']);
} else {
$content .= $this->prepareEmbed($embed);
}
}
@ -189,19 +185,15 @@ class Publish extends WidgetBase
return;
}
try {
$embed = Embed\Embed::create($url);
$html = $this->prepareEmbed($embed);
$embed = Embed\Embed::create($url);
$html = $this->prepareEmbed($embed);
if($embed->type == 'photo') {
RPC::call('movim_fill', 'gallery', $this->prepareGallery($embed));
RPC::call('movim_fill', 'preview', '');
} else {
RPC::call('movim_fill', 'preview', $html);
RPC::call('movim_fill', 'gallery', '');
}
} catch(Exception $e) {
error_log($e->getMessage());
if($embed->type == 'photo') {
RPC::call('movim_fill', 'gallery', $this->prepareGallery($embed));
RPC::call('movim_fill', 'preview', '');
} else {
RPC::call('movim_fill', 'preview', $html);
RPC::call('movim_fill', 'gallery', '');
}
}

View file

@ -1,4 +1,4 @@
<div class="quote" cite="{$embed->url}">
<q cite="{$embed->url}">
<ul>
<li>
<span>
@ -17,4 +17,4 @@
</li>
{/if}
</ul>
</div>
</q>

View file

@ -16,7 +16,6 @@ class Rooms extends WidgetBase
$this->registerEvent('bookmark_set_handle', 'onBookmark');
$this->registerEvent('presence_muc_handle', 'onConnected');
$this->registerEvent('presence_unavailable_handle', 'onDisconnected');
$this->registerEvent('presence_muc_errorconflict', 'onConflict');
}
function onBookmark()
@ -30,11 +29,6 @@ class Rooms extends WidgetBase
$this->refreshRooms();
}
function onConflict()
{
Notification::append(null, $this->__('chatrooms.conflict'));
}
function onDisconnected()
{
// We reset the Chat view
@ -202,9 +196,9 @@ class Rooms extends WidgetBase
array_push($arr,
array(
'type' => 'conference',
'name' => htmlentities($c->name),
'name' => $c->name,
'autojoin' => $c->autojoin,
'nick' => htmlentities($c->nick),
'nick' => $c->nick,
'jid' => $c->conference));
}

View file

@ -18,17 +18,16 @@
<span class="second">{$value->conference}</span>
</li>
{/loop}
{if="$conferences == null"}
<li class="condensed">
<span class="icon green">
<i class="zmdi zmdi-accounts-outline"></i>
</span>
<p>{$c->__('rooms.empty_text1')} {$c->__('rooms.empty_text2')}</p>
</li>
{/if}
</ul>
{if="$conferences == null"}
<ul class="thick spaced">
<li class="condensed">
<span class="icon green">
<i class="zmdi zmdi-accounts-outline"></i>
</span>
<p>{$c->__('rooms.empty_text1')} {$c->__('rooms.empty_text2')}</p>
</li>
</ul>
{/if}
{else}
{if="$c->getView() == 'room' && $room != false"}
<div class="placeholder icon">

View file

@ -17,7 +17,6 @@ connected = Connected to the chatroom
disconnected = Disconnected from the chatroom
users = Users in the room
bad_nickname = Please enter a correct nickname (2 to 40 characters)
conflict = Username already taken
[bookmarks]
updated = Bookmarks updated

View file

@ -31,18 +31,18 @@
<!--ng-class="rosterCtrl.getContactClient(myjid.ajiditems)"-- >-->
<div
class="action"
ng-if="myjid.ajiditems.rosterview.tune || myjid.ajiditems.rosterview.type != '' || myjid.ajiditems.rosterview.subscription != 'both'"
ng-if="myjid.ajiditems.rosterview.tune != '' || myjid.ajiditems.rosterview.type != '' || myjid.ajiditems.rosterview.subscription != 'both'"
ng-switch on="myjid.ajiditems.rosterview.type">
<i ng-switch-when="handheld" class="zmdi zmdi-smartphone"></i>
<i ng-switch-when="phone" class="zmdi zmdi-smartphone"></i>
<i ng-switch-when="web" class="zmdi zmdi-globe-alt"></i>
<i ng-switch-when="bot" class="zmdi zmdi-memory"></i>
<i ng-if="myjid.ajiditems.rosterview.tune" class="zmdi zmdi-play"></i>
<i ng-if="myjid.ajiditems.rosterview.tune" class="zmdi zmdi-play-arrow"></i>
<i ng-if="myjid.ajiditems.rosterview.subscription == 'to'" class="zmdi zmdi-arrow-in"></i>
<i ng-if="myjid.ajiditems.rosterview.subscription == 'from'" class="zmdi zmdi-arrow-out"></i>
<i ng-if="myjid.ajiditems.rosterview.subscription == 'none'" class="zmdi zmdi-do-not-disturb"></i>
</div>
<span
ng-if="::myjid.ajiditems.rosterview.avatar != false"
class="icon bubble status {{myjid.ajiditems.rosterview.presencetxt}}"

View file

@ -21,7 +21,7 @@
</span>
<span>{$c->__('privacy.privacy_question')}</span>
<p>{$c->__('privacy.privacy_info')}</p>
<p>{$c->__('privacy.privacy_info')}</p>
</li>
</ul>
@ -52,9 +52,9 @@
<select name="day" class="datepicker">
<option value="-1">{$c->__('Day')}</option>
{loop="$days"}
<option value="{$value}"
<option value="{$value}"
{if="$key == substr($me->date, 8)"}
selected
selected
{/if}
>{$value}</option>
{/loop}
@ -64,9 +64,9 @@
<select name="year" class="datepicker">
<option value="-1">{$c->__('Year')}</option>
{loop="$years"}
<option value="{$value}"
<option value="{$value}"
{if="$value == substr($me->date,0,4)"}
selected
selected
{/if}
>{$value}</option>
{/loop}
@ -76,9 +76,9 @@
<select name="month" class="datepicker">
<option value="-1">{$c->__('Month')}</option>
{loop="$months"}
<option value="{$key}"
<option value="{$key}"
{if="$key == substr($me->date,5,2)"}
selected
selected
{/if}
>{$value}</option>
{/loop}
@ -91,9 +91,9 @@
<div class="select">
<select name="gender">
{loop="$gender"}
<option
<option
{if="$key == $me->gender"}
selected
selected
{/if}
value="{$key}">{$value}</option>
{/loop}
@ -106,9 +106,9 @@
<div class="select">
<select name="marital">
{loop="$marital"}
<option
<option
{if="$key == $me->marital"}
selected
selected
{/if}
value="{$key}">{$value}</option>
{/loop}
@ -134,15 +134,15 @@
<input type="text" type="locality" name ="locality" class="content" value="{$me->adrlocality}" placeholder="{$c->__('position.locality')}">
<label for="url">{$c->__('position.locality')}</label>
</div>
<div class="block">
<div class="select">
<select name="country">
<option value=""></option>
{loop="$countries"}
<option
<option
{if="$value == $me->adrcountry"}
selected
selected
{/if}
value="{$value}">{$value}</option>
{/loop}
@ -152,19 +152,19 @@
</div>
<h3 class="block large">{$c->__('accounts.accounts_title')}</h3>
<div class="block">
<input type="text" name="twitter" class="content" value="{$me->twitter}" placeholder="{$c->__('accounts.twitter')}">
<input type="text" name="twitter" class="content" value="{$me->twitter}" placeholder="{$c->__('accounts.nickname')}">
<label for="twitter"><i class="fa fa-twitter"></i> {$c->__('accounts.twitter')}</label>
</div>
<div class="block">
<input type="text" name="skype" class="content" value="{$me->skype}" placeholder="{$c->__('accounts.skype')}">
<input type="text" name="skype" class="content" value="{$me->skype}" placeholder="{$c->__('accounts.nickname')}">
<label for="skype"><i class="fa fa-skype"></i> {$c->__('accounts.skype')}</label>
</div>
<div class="block">
<input type="email" name="yahoo" class="content" value="{$me->yahoo}" placeholder="{$c->__('accounts.yahoo')}">
<input type="email" name="yahoo" class="content" value="{$me->yahoo}" placeholder="{$c->__('accounts.accounts_yahoo')}">
<label for="skype"><i class="fa fa-yahoo"></i> {$c->__('accounts.yahoo')}</label>
</div>
@ -173,9 +173,9 @@
onclick="
{$submit}
movim_button_save('#vcard4validate');
this.value = '{$c->__('Submitting')}';
this.className='button oppose inactive';"
class="button color oppose"
this.value = '{$c->__('Submitting')}';
this.className='button oppose inactive';"
class="button color oppose"
id="vcard4validate"
>
{$c->__('button.save')}

View file

@ -25,8 +25,9 @@ country = Country
accounts_title = Accounts
twitter = Twitter
skype = Skype
yahoo = Yahoo Account
yahoo = Yahoo
accounts_nickname = Nickname
accounts_yahoo = Yahoo Account
[privacy]
privacy_title = Privacy Level

View file

@ -81,7 +81,7 @@ class Bootstrap {
DOCUMENT_ROOT.'/log/php.log',
DOCUMENT_ROOT.'/cache/test.tmp',
);
$errors = array();
$errors=array();
if(!is_writable(DOCUMENT_ROOT))
$errors[] = 'We\'re unable to write to folder '.DOCUMENT_ROOT.': check rights';
@ -201,8 +201,7 @@ class Bootstrap {
private function loadSystem() {
// Loads up all system libraries.
//require_once(SYSTEM_PATH . "/i18n/i18n.php");
require_once(SYSTEM_PATH . "/i18n/Locale.php");
require_once(SYSTEM_PATH . "/i18n/i18n.php");
require_once(SYSTEM_PATH . "Session.php");
require_once(SYSTEM_PATH . "Sessionx.php");
@ -220,8 +219,8 @@ class Bootstrap {
require_once(LIB_PATH . "XMPPtoForm.php");
// SDPtoJingle and JingletoSDP lib :)
//require_once(LIB_PATH . "SDPtoJingle.php");
//require_once(LIB_PATH . "JingletoSDP.php");
require_once(LIB_PATH . "SDPtoJingle.php");
require_once(LIB_PATH . "JingletoSDP.php");
}
private function loadHelpers() {
@ -242,7 +241,7 @@ class Bootstrap {
require_once(SYSTEM_PATH . "widget/WidgetBase.php");
require_once(SYSTEM_PATH . "widget/WidgetWrapper.php");
//require_once(APP_PATH . "widgets/WidgetCommon/WidgetCommon.php");
require_once(APP_PATH . "widgets/WidgetCommon/WidgetCommon.php");
require_once(APP_PATH . "widgets/Notification/Notification.php");
}
@ -256,23 +255,20 @@ class Bootstrap {
$cd = new \Modl\ConfigDAO();
$config = $cd->get();
$l = Locale::start();
if($user->isLogged()) {
$lang = $user->getConfig('language');
if(isset($lang)) {
$l->load($lang);
loadLanguage($lang);
} else {
// Load default language.
$l->load($config->locale);
loadLanguage($config->locale);
}
}
elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$l->detect();
$l->loadPo();
else if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
loadLanguageAuto();
}
else {
$l->load($config->locale);
loadLanguage($config->locale);
}
}
@ -325,7 +321,7 @@ class Bootstrap {
if(file_exists(DOCUMENT_ROOT.'/config/db.inc.php')) {
require DOCUMENT_ROOT.'/config/db.inc.php';
} else {
throw new Exception('Cannot find config/db.inc.php file');
throw new MovimException('Cannot find config/db.inc.php file');
}
$db->setConnectionArray($conf);
@ -391,7 +387,7 @@ class Bootstrap {
$s->load();
$user = new User;
$db = Modl\Modl::getInstance();
$db = modl\Modl::getInstance();
$db->setUser($user->getLogin());
}
}

View file

@ -22,7 +22,6 @@
"react/socket-client": "0.4.*@dev",
"forxer/Gravatar": "~1.2",
"respect/validation": "0.8.*",
"ezyang/htmlpurifier": "^4.7"
"respect/validation": "0.8.*"
}
}

View file

@ -40,14 +40,9 @@
define('DOCUMENT_ROOT', dirname(__FILE__));
require_once(DOCUMENT_ROOT.'/bootstrap.php');
try {
$bootstrap = new Bootstrap();
$bootstrap->boot();
} catch(Exception $e) {
error_log($e->getMessage());
echo 'Oops, something went wrong, please check the log files';
return;
}
$bootstrap = new Bootstrap();
$bootstrap->boot();
$rqst = new FrontController();
$rqst->handle();

View file

@ -52,8 +52,8 @@ $stdin_behaviour = function ($data) use (&$conn, $loop, &$buffer, &$connector, &
$port = 5222;
$dns = \Moxl\Utils::resolveHost($msg->host);
if(isset($dns->target) && $dns->target != null) $msg->host = $dns->target;
if(isset($dns->port) && $dns->port != null) $port = $dns->port;
if(isset($dns[0]['target']) && $dns[0]['target'] != null) $msg->host = $dns[0]['target'];
if(isset($dns[0]['port']) && $dns[0]['port'] != null) $port = $dns[0]['port'];
#fwrite(STDERR, colorize('open a socket to '.$domain, 'yellow')." : ".colorize('sent to XMPP', 'green')."\n");
$connector->create($msg->host, $port)->then($xmpp_behaviour);
}
@ -111,8 +111,6 @@ $xmpp_behaviour = function (React\Stream\Stream $stream) use (&$conn, $loop, &$s
|| $message == '<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>') {
stream_set_blocking($conn->stream, 1);
stream_context_set_option($conn->stream, 'ssl', 'allow_self_signed', true);
#stream_context_set_option($conn->stream, 'ssl', 'verify_peer_name', false);
#stream_context_set_option($conn->stream, 'ssl', 'verify_peer', false);
$out = stream_socket_enable_crypto($conn->stream, 1, STREAM_CRYPTO_METHOD_TLS_CLIENT);
$restart = true;
@ -139,7 +137,7 @@ $xmpp_behaviour = function (React\Stream\Stream $stream) use (&$conn, $loop, &$s
\RPC::clear();
if(!empty($msg)) {
//echo json_encode($msg)."";
//[MaJ[MaJ[MaJ[MaI[MaI[MaI[MaI[MaI[MaI[MaI[MaI[MaIecho json_encode($msg)."";
echo base64_encode(gzcompress(json_encode($msg), 9))."";
//fwrite(STDERR, colorize(json_encode($msg).' '.strlen($msg), 'yellow')." : ".colorize('sent to browser', 'green')."\n");
}

View file

@ -1,9 +1,6 @@
#
# Translators:
# Éfrit, 2015
# Jaussoin Timothée <edhelas@movim.eu>, 2015
# Maxime Buquet <tidusx62@gmail.com>, 2015
# Tom <caporaldead@gmail.com>, 2015
# French translations for Movim Website package.
# This file is distributed under the same license as the Movim Website package.
# This file was translated from CodingTeam at <http://codingteam.net/>.
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
#. extracted from ../app/widgets/About/locales.ini
#. #-#-#-#-# locales.po (PACKAGE VERSION) #-#-#-#-#
@ -94,18 +91,18 @@
#. extracted from ../locales/locales.ini
msgid ""
msgstr ""
"Project-Id-Version: movim\n"
"Project-Id-Version: Movim Website\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-20 15:17+0200\n"
"PO-Revision-Date: 2015-08-21 09:30+0000\n"
"Last-Translator: Jaussoin Timothée <edhelas@movim.eu>\n"
"Language-Team: French (France) (http://www.transifex.com/movim/movim/language/fr_FR/)\n"
"Language: fr_FR\n"
"PO-Revision-Date: 2015-06-10 08:09+0000\n"
"Last-Translator: Axelos <axelos@broman.fr>\n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Translate Toolkit 1.12.0\n"
"X-Launchpad-Export-Date: 2015-06-18 21:08+0000\n"
"X-Generator: Launchpad (build 17570)\n"
#: [about]thanks
msgid "Thanks"
@ -140,8 +137,9 @@ msgid "Account"
msgstr "Compte"
#: [account]password_change_title
#, fuzzy
msgid "Change my password"
msgstr "Changer de mot de passe"
msgstr "Mot de passe incorrect"
#: [account]password [db]password [credentials]password [form]password
#: [input]password
@ -149,8 +147,9 @@ msgid "Password"
msgstr "Mot de passe"
#: [account]password_confirmation
#, fuzzy
msgid "Password confirmation"
msgstr "Confirmation du mot de passe"
msgstr "%s Configuration"
#: [account]password_changed
msgid "The password has been updated"
@ -158,7 +157,7 @@ msgstr "Le mot de passe a été mis à jour"
#: [account]password_not_valid
msgid "Please provide a valid password (6 characters minimum)"
msgstr "Veuillez entrer un mot de passe valide (6 caractères minimum)"
msgstr "Veuillez entrer un mot de passe valide (6 lettres minimum)"
#: [account]password_not_same
msgid "The provided passwords are not the same"
@ -169,16 +168,17 @@ msgid "Delete my account"
msgstr "Supprimer mon compte"
#: [account]delete
#, fuzzy
msgid "Delete your account"
msgstr "Supprimer votre compte"
msgstr "Supprimer mon compte"
#: [account]delete_text
msgid "You will delete your XMPP account and all the relative information linked to it (profile, contacts and publications)."
msgstr "Vous allez supprimer votre compte XMPP ainsi que lensemble des informations qui y sont liées (profil, contacts et billets)."
msgstr "Vous allez supprimer votre compte XMPP ainsi que l'ensemble des informations liés à celui-ci (profil, contacts et billets)."
#: [account]delete_text_confirm
msgid "Are you sure that you want to delete it ?"
msgstr "Êtes-vous sûr de vouloir le supprimer?"
msgstr "Êtes-vous sûr de vouloir le supprimer?"
#: [account]gateway_title
msgid "Gateway"
@ -198,11 +198,11 @@ msgstr "sur"
#: [create]successfull
msgid "Your acccount has been successfully registered"
msgstr "Compte créé avec succès"
msgstr "Votre compte a été correctement enregistré"
#: [create]loading
msgid "Loading"
msgstr "Chargement"
msgstr "Chargement en cours"
#: [error]not_acceptable
msgid "Not Acceptable"
@ -210,11 +210,11 @@ msgstr "Non acceptable"
#: [error]service_unavailable
msgid "The registration system of this server is currently unavailable"
msgstr "Le système dinscription de ce serveur est actuellement indisponible"
msgstr "Le système denregistrement de ce serveur est actuellement indisponible"
#: [oob]about
msgid "This server use an external system for the registration, please click on the following URL."
msgstr "Ce serveur utilise un service externe pour enregistrer les nouveaux utilisateurs, cliquer sur lien suivant pour y accéder."
msgstr "Ce serveur utilise un service externe pour enregistrer les nouveaux utilisateurs, veuillez sil vous plaît cliquer sur le lien suivant."
#: [adhoc]title
msgid "Actions"
@ -226,7 +226,7 @@ msgstr "Base de données"
#: [db]connect_error
msgid "Modl wasn't able to connect to the database"
msgstr "Modl na pas pu se connecter à la base de données"
msgstr "Modl na pas été en mesure de se connecter à la base de données"
#: [db]connect_success
msgid "Movim is connected to the database"
@ -246,7 +246,7 @@ msgstr "Type de base de données"
#: [db]username [credentials]username [input]username
msgid "Username"
msgstr "Nom dutilisateur"
msgstr "Identifiant"
#: [db]host
msgid "Host"
@ -257,8 +257,9 @@ msgid "Port"
msgstr "Port"
#: [db]name
#, fuzzy
msgid "Database sName"
msgstr ""
msgstr "Nom de la base de données"
#: [admin]general
msgid "General Settings"
@ -274,7 +275,7 @@ msgstr "Langue par défaut"
#: [general]log_verbosity
msgid "Log verbosity"
msgstr "Niveau de détails des journaux"
msgstr "Niveau de détail des journaux"
#: [general]timezone
msgid "Server Timezone"
@ -290,7 +291,7 @@ msgstr "Configuration du WebSocket"
#: [websocket]info
msgid "Enter here a valid WebSocket URI in the form"
msgstr "Veuillez saisir une URI du WebSocket valide dans le formulaire"
msgstr "Veuillez saisir une URI WebSocket valide dans le formulaire"
#: [websocket]label
msgid "WebSocket URI"
@ -298,7 +299,7 @@ msgstr "URI du WebSocket"
#: [websocket]save_info
msgid "If you change the URI, please restart the daemon to reload the configuration"
msgstr "Veuillez relancer le démon si vous changer lURI, afin de prendre en compte la configuration"
msgstr "Si vous changez lURI, veuillez relancer le démon afin de prendre en compte la configuration"
#: [websocket]publics
msgid "Public WebSockets"
@ -310,7 +311,7 @@ msgstr "Identification de ladministrateur"
#: [credentials]info
msgid "Change the default credentials admin/password"
msgstr "Modifiez les paramètres didentification admin/mot de passe"
msgstr "Modifiez les paramètres didentification admin/password"
#: [credentials]re_password
msgid "Retype password"
@ -322,7 +323,7 @@ msgstr "Serveurs XMPP : Liste blanche"
#: [whitelist]info1
msgid "If you want to specify a list of authorized XMPP servers on your Movim pod and forbid the connection on all the others please put their domain name here, with comma (ex: movim.eu,jabber.fr)"
msgstr "Si vous souhaitez établir une liste de serveurs XMPP autorisés sur votre pod Movim et interdire la connexion à tous les autres, saisissez la liste de leurs noms de domaine, séparés par une virgule (ex : movim.eu, jabber.fr)."
msgstr "Si vous souhaitez établir une liste de serveurs XMPP autorisés sur votre pod Movim et interdire la connexion à tous les autres, veuillez saisir la liste de leurs noms de domaine, séparés par une virgule (ex : movim.eu, jabber.fr)."
#: [whitelist]info2
msgid "Leave this field blank if you allow the access to all the XMPP accounts."
@ -333,6 +334,7 @@ msgid "List of whitelisted XMPP servers"
msgstr "Liste blanche des serveurs XMPP"
#: [information]title
#, fuzzy
msgctxt "[information]title"
msgid "Information Message"
msgstr "Message dinformation"
@ -346,10 +348,12 @@ msgid "This message will be displayed on the login page"
msgstr "Ce message sera affiché sur la page de connexion."
#: [information]info2
#, fuzzy
msgid "Leave this field blank if you dont want to show any message."
msgstr "Laissez ce champ vide si vous ne voulez afficher aucun message."
#: [information]label
#, fuzzy
msgctxt "[information]label"
msgid "Information Message"
msgstr "Message dinformation"
@ -368,11 +372,11 @@ msgstr "Journal système et fichiers"
#: [rewrite]title
msgid "URL Rewriting"
msgstr "Réécriture dURL"
msgstr "Réécriture d'URL"
#: [rewrite]info
msgid "The URL Rewriting can be enabled"
msgstr "La réécriture dURL peut être activée"
msgstr "La réécriture d'URL peut être activée"
#: [admin]compatibility
msgid "General Overview"
@ -380,7 +384,7 @@ msgstr "Aperçu général"
#: [compatibility]info
msgid "Movim has found some issues or things that need to be fixed or improved"
msgstr "Movim a rencontré des problèmes ou des soucis qui doivent être corrigés ou améliorés"
msgstr "Movim a rencontré des problèmes ou des choses qui doivent être corrigés ou améliorés"
#: [compatibility]php1
msgid "Update your PHP-Version: %s"
@ -403,6 +407,7 @@ msgid "Install the php5-gd library"
msgstr "Installez la librairie php5-gd"
#: [compatibility]rights
#, fuzzy
msgid "Read and write rights for the webserver in Movims root directory"
msgstr "Droits de lecture et décriture pour le serveur web dans le dossier racine de Movim"
@ -416,11 +421,11 @@ msgstr "La base de données doit être mise à jour, allez dans son panneau pour
#: [compatibility]websocket
msgid "WebSocket connection error, check if the Movim Daemon is running and is reachable"
msgstr "Erreur de connexion WebSocket, vérifiez si le démon Movim est en cours dexécution et sil est joignable"
msgstr ""
#: [compatibility]xmpp_websocket
msgid "XMPP Websocket connection error, please check the validity of the URL given in the General Configuration"
msgstr "Erreur de connexion XMPP Websocket, veuillez vérifier la validité de lURL donnée dans la configuration générale"
msgstr "Erreur de connexion XMPP Websocket, s'il vous plaît vérifier la validité de l'URL donnée dans la configuration générale"
#: [schema]browser
msgid "Browser"
@ -428,7 +433,7 @@ msgstr "Navigateur"
#: [schema]movim
msgid "Movim Core"
msgstr "Cœur de Movim"
msgstr ""
#: [schema]daemon
msgid "Movim Daemon"
@ -444,11 +449,11 @@ msgstr "Vous pouvez enregistrer ici votre pod sur %slAPI officielle%s et êtr
#: [api]register
msgid "Your pod is not registered on the API"
msgstr "Votre pod nest pas enregistré dans lAPI"
msgstr "Votre pod nest pas enregistré sur lAPI"
#: [api]registered
msgid "Your pod is registered on the API"
msgstr "Votre pod est enregistré dans lAPI"
msgstr "Votre pod est enregistré sur lAPI"
#: [api]wait
msgid "Your pod is not yet validated"
@ -476,7 +481,7 @@ msgstr "Utiliser"
#: [avatar]webcam
msgid "Webcam"
msgstr "Webcam"
msgstr "Caméra"
#: [avatar]cheese
msgid "Cheese !"
@ -500,7 +505,7 @@ msgstr "Flux de %s"
#: [blog]empty
msgid "This user has not posted anything right now"
msgstr "Cet utilisateur na rien publié pour le moment"
msgstr "Cet utilisateur n'a rien publié pour le moment"
#: [title]conferences
msgid "Conferences"
@ -519,6 +524,7 @@ msgid "Chat Room ID"
msgstr "Identifiant du salon"
#: [chatroom]name
#, fuzzy
msgctxt "[chatroom]name"
msgid "Name"
msgstr "Nom"
@ -544,6 +550,7 @@ msgid "Bookmarks updated"
msgstr "Signets mis à jour"
#: [bookmarks]error
#, fuzzy
msgid "An error occured :"
msgstr "Une erreur sest produite : "
@ -560,6 +567,7 @@ msgid "URL"
msgstr "URL"
#: [url]name
#, fuzzy
msgctxt "[url]name"
msgid "Name"
msgstr "Nom"
@ -606,7 +614,7 @@ msgstr "Discuter avec vos contacts"
#: [chat]frequent [chats]frequent
msgid "Frequent contacts"
msgstr "Contacts fréquents"
msgstr "Contacts fréquent"
#: [chatroom]members
msgid "Members"
@ -637,12 +645,14 @@ msgid "Subject changed"
msgstr "Sujet mis à jour"
#: [chats]empty_title
#, fuzzy
msgid "No chats yet..."
msgstr "Pas de discussions pour le moment"
msgstr "Pas de commentaires pour le moment"
#: [chats]empty
#, fuzzy
msgid "Open a new conversation by clicking on the plus button bellow or visit the Contacts page."
msgstr "Commencez une nouvelle conversation en cliquant sur le bouton plus ci-dessous ou visitez la page Contacts."
msgstr "Commencez une nouvelle conversation en cliquant sur le bouton plus ci-dessous"
#: [chats]add
msgid "Chat with a contact"
@ -697,6 +707,7 @@ msgid "Appearence"
msgstr "Apparence"
#: [config]info
#, fuzzy
msgid "This configuration is shared wherever you are connected"
msgstr "Cette configuration est partagée partout où vous vous connectez!"
@ -821,40 +832,44 @@ msgid "Last public post"
msgstr "Derniers billets public"
#: [subscription]to
#, fuzzy
msgid "You can see this contact status"
msgstr "Vous pouvez voir l'état de ce contact"
msgstr "Pas de flux public pour ce contact"
#: [subscription]to_button
msgid "Share my status"
msgstr "Partager mon état"
msgstr ""
#: [subscription]to_text
msgid "But this contact cannot see yours"
msgstr "Mais ce contact ne peux pas voir le votre"
msgstr ""
#: [subscription]from
#, fuzzy
msgid "You are not subscribed to this contact"
msgstr "Vous nêtes pas abonné à ce contact"
msgstr "Vous allez vous désinscrire de ce Groupe."
#: [subscription]from_button
#, fuzzy
msgid "Ask to subscribe"
msgstr "Demander pour sabonner"
msgstr "%s souscrits"
#: [subscription]from_text
msgid "But this contact can still see if you are online"
msgstr "Mais ce contact peut tout de même voir votre présence en ligne"
msgstr ""
#: [subscription]nil
#, fuzzy
msgid "No subscriptions"
msgstr ""
msgstr "Abonnements"
#: [subscription]nil_button
msgid "Invite"
msgstr "Inviter"
msgstr ""
#: [subscription]nil_text
msgid "This contact is in your contact list but there is no subscriptions between the two accounts"
msgstr "Ce contact est dans votre liste de contacts mais il ny a pas dabonnements entre les deux comptes"
msgstr ""
#: [group]subscribe
msgid "Subscribe"
@ -890,7 +905,7 @@ msgstr "Êtes-vous sûr?"
#: [group]empty_text
msgid "Discover, follow and share"
msgstr "Découvrir, suivre et partager"
msgstr "Découvrire, suivre et partager"
#: [group]empty
msgid "Something bad happened to this group"
@ -914,15 +929,16 @@ msgstr "Il semblerait que que groupe n'existe plus. Souhaitez-vous le supprimer
#: [group]counter
msgid "%s groups on this server"
msgstr "%s groupes sur ce serveur"
msgstr ""
#: [group]subscriptions [statistics]subscriptions
msgid "Subscriptions"
msgstr "Abonnements"
#: [group]servers
#, fuzzy
msgid "Groups servers"
msgstr ""
msgstr "Groupes"
#: [group]search_server
msgid "Search for a new server"
@ -986,11 +1002,11 @@ msgstr "Groupe supprimé avec succès"
#: [groups]name_error
msgid "Please provide a valid group name (4 characters minimum)"
msgstr "Merci d'entrer un nom de groupe valide (4 caractères minimum)"
msgstr ""
#: [groups]no_creation
msgid "You cannot create a new Group on this server"
msgstr "Aucun formulaire de création de compte na été trouvé sur le serveur"
msgstr ""
#: [groups]sub
msgid "%s subscribers"
@ -1001,8 +1017,9 @@ msgid "%s posts"
msgstr "%s billets"
#: [groups]disco_error
#, fuzzy
msgid "This server doesn't exists"
msgstr ""
msgstr "Ce serveur héberge %s comptes"
#: [menu]all
msgid "All"
@ -1013,12 +1030,14 @@ msgid "Refresh all the streams"
msgstr "Rafraîchir tous les flux"
#: [roster]search
#, fuzzy
msgid "Search in your contacts"
msgstr "Chercher dans vos contacts "
msgstr "Discuter avec vos contacts"
#: [hello]active_contacts
#, fuzzy
msgid "Active contacts"
msgstr "Contacts actifs"
msgstr "Vos contacts"
#: [hello]chat
msgid "Go on the Chat page"
@ -1034,7 +1053,7 @@ msgstr "Lire tous ces articles sur la page Actualité"
#: [hello]blog_title
msgid "Visit your public blog"
msgstr "Aller sur votre blog public"
msgstr "Aller sur votre blog publique"
#: [hello]blog_text
msgid "See your public posts and share them with all your contacts"
@ -1150,7 +1169,7 @@ msgstr "Mettre à jour ma position"
#: [login_anonymous]bad_username
msgid "Bad nickname (between 4 and 40 characters)"
msgstr "Mauvais surnom (entre 4 et 40 caractères)"
msgstr ""
#: [error]username
msgid "Wrong username"
@ -1189,6 +1208,7 @@ msgid "Account successfully created"
msgstr "Compte créé avec succès"
#: [error]xmpp_unauthorized
#, fuzzy
msgctxt "[error]xmpp_unauthorized"
msgid "Your XMPP server is unauthorized"
msgstr "Votre compte XMPP nest pas autorisé à se connecter"
@ -1226,6 +1246,7 @@ msgid "Invalid password format"
msgstr "Mot de passe non valide"
#: [error]unauthorized
#, fuzzy
msgctxt "[error]unauthorized"
msgid "Your XMPP server is unauthorized"
msgstr "Votre compte XMPP nest pas autorisé à se connecter"
@ -1279,10 +1300,12 @@ msgid "Population"
msgstr "Population"
#: [menu]empty_title
#, fuzzy
msgid "No news yet..."
msgstr "Pas de commentaires pour le moment"
#: [menu]empty
#, fuzzy
msgid "Welcome on your news feed, here you will see all the posts published by your contacts and in the groups you have subscribed."
msgstr "Bienvenue sur flux dactualité, ici vous verrez tous les billets publiés dans les groupes auxquels vous vous êtes abonnés."
@ -1416,15 +1439,16 @@ msgstr "Vous pouvez également utiliser des services comme Imgur ou Flickr pour
#: [post]repost
msgid "This is a re-post from %s"
msgstr "Ceci est une republication de %s"
msgstr ""
#: [post]repost_profile
msgid "See %s profile"
msgstr "Voir le profil de %s"
msgstr ""
#: [post]public
#, fuzzy
msgid "Publish this post publicly?"
msgstr ""
msgstr "Publier ce billet sur votre flux public?"
#: [post]blog_add
msgid "Post published on your blog"
@ -1472,11 +1496,11 @@ msgstr "Présence"
#: [status]online
msgid "Online with Movim"
msgstr "En ligne avec Movim"
msgstr ""
#: [publish]title
msgid "Publish"
msgstr "Publier"
msgstr ""
#: [publish]attach
msgid "Add a file or a picture to your post"
@ -1484,11 +1508,11 @@ msgstr ""
#: [publish]no_publication
msgid "You cannot publish a post on this Group"
msgstr "Vous ne pouvez pas publier de billet sur ce groupe"
msgstr ""
#: [publish]form_filled
msgid "Some fields have been filled in. Do you still want to go back and loose their content?"
msgstr "Certains champs ont été remplis. Êtes-vous sûr de vouloir revenir en arrière et de perdre le contenu déjà saisi ?"
msgstr ""
#: [public_groups]shared
msgid "Shared"
@ -1524,31 +1548,31 @@ msgstr "Utilisateurs du salon"
#: [chatrooms]bad_nickname
msgid "Please enter a correct nickname (2 to 40 characters)"
msgstr "Merci d'entrer un surnom valide (entre 2 et 40 caractères)"
msgstr ""
#: [room]anonymous_title
msgid "Public chatroom"
msgstr "Salon public"
msgstr ""
#: [room]no_room
msgid "Please provide a room address"
msgstr "Merci d'entrer l'adresse d'un salon"
msgstr ""
#: [room]anonymous_text1
msgid "You are currently logued as an anonymous user."
msgstr "Vous êtes actuellement connecté en tant qu'anonyme"
msgstr ""
#: [room]anonymous_text2
msgid "You can join using your own account or create one on the login page by loging out using the cross in the top-right corner."
msgstr "Vous pouvez vous connecter en utilisant votre propre compte ou en créer un sur la page de connexion, en cliquant sur la croix en haut à droite."
msgstr ""
#: [room]anonymous_login
msgid "Login on %s"
msgstr "Connexion sur %s"
msgstr ""
#: [room]nick
msgid "Your nickname"
msgstr "Votre surnom"
msgstr ""
#: [roster]ungrouped
msgid "Ungrouped"
@ -1575,12 +1599,14 @@ msgid "Please enter a valid Jabber ID"
msgstr "Veuillez entrer un identifiant Jabber valide"
#: [roster]no_contacts_title
#, fuzzy
msgid "No contacts ?"
msgstr ""
msgstr "Vos contacts"
#: [roster]no_contacts_text
#, fuzzy
msgid "You can add one using the + button bellow"
msgstr ""
msgstr "Pas de contacts? Vous pouvez en ajouter un en cliquant sur le bouton + ci-dessous ou aller sur la page Explorer"
#: [roster]show_hide
msgid "Show/Hide"
@ -1663,8 +1689,9 @@ msgid "No contact specified"
msgstr "Aucun contact indiqué"
#: [upload]title
#, fuzzy
msgid "Upload a file"
msgstr ""
msgstr "Téléverser"
#: [upload]choose
msgid "Choose a file to upload"
@ -1691,9 +1718,10 @@ msgid "Your profile is now restricted"
msgstr "Votre profil est maintenant restreint"
#: [general]nickname
#, fuzzy
msgctxt "[general]nickname"
msgid "Nickname"
msgstr "Surnom"
msgstr "Pseudonyme"
#: [accounts]twitter
msgid "Twitter"
@ -1708,13 +1736,15 @@ msgid "Yahoo"
msgstr "Yahoo"
#: [accounts]accounts_nickname
#, fuzzy
msgctxt "[accounts]accounts_nickname"
msgid "Nickname"
msgstr "Surnom"
msgstr "Pseudonyme"
#: [accounts]accounts_yahoo
#, fuzzy
msgid "Yahoo Account"
msgstr "Compte Yahoo"
msgstr "Compte"
#: [privacy]privacy_title
msgid "Privacy Level"
@ -1850,7 +1880,7 @@ msgstr "Partager"
#: [page]room
msgid "Room"
msgstr "Salon"
msgstr ""
#: [error]error
msgid "Error: %s"
@ -2018,11 +2048,11 @@ msgstr "Connexion"
#: [button]bool_yes
msgid "Yes"
msgstr ""
msgstr "Oui"
#: [button]bool_no
msgid "No"
msgstr ""
msgstr "Non"
#: [button]return
msgid "Return"
@ -2081,9 +2111,10 @@ msgid "Sunday"
msgstr "Dimanche"
#: [gender]nil
#, fuzzy
msgctxt "[gender]nil"
msgid "None"
msgstr ""
msgstr "Aucun"
#: [gender]male
msgid "Male"
@ -2118,9 +2149,10 @@ msgid "Registered"
msgstr "Inscrit"
#: [marital]nil
#, fuzzy
msgctxt "[marital]nil"
msgid "None"
msgstr ""
msgstr "Aucun"
#: [marital]single
msgid "Single"
@ -2595,6 +2627,7 @@ msgid "Yesterday"
msgstr "Hier"
#: [date]ago
#, fuzzy
msgid "%d days ago"
msgstr " Il y a %d jours"
@ -2624,11 +2657,11 @@ msgstr "courriel"
#: [post]no_comments
msgid "No comments yet"
msgstr ""
msgstr "Pas de commentaires pour le moment"
#: [post]no_comments_stream
msgid "No comments stream"
msgstr ""
msgstr "Pas de flux de commentaires"
#: [post]no_load
msgid "Your feed cannot be loaded."
@ -2651,8 +2684,9 @@ msgid "Show the older comments"
msgstr "Afficher les commentaires plus anciens"
#: [post]comments_loading
#, fuzzy
msgid "Loading comments..."
msgstr ""
msgstr "Chargement des commentaires…"
#: [post]comments_get
msgid "Get the comments"
@ -2697,3 +2731,300 @@ msgstr "LAPI est indisponible pour le moment, réessayez plus tard."
#: [field]type_here
msgid "Type here"
msgstr "Rédigez votre message ici"
#~ msgid "Environment"
#~ msgstr "Environnement"
#~ msgid "You can login with Facebook (chat only) using %syour.id@chat.facebook.com%s and your password"
#~ msgstr "Vous pouvez vous connecter avec Facebook (messagerie instantanée uniquement) en entrant %svotre.id@chat.facebook.com%s et votre mot de passe"
#~ msgid "%sGmail accounts are also compatible%s but are not fully supported"
#~ msgstr "%sLes comptes Gmail sont aussi compatibles%s mais ne sont pas complètement pris en charge"
#~ msgid "You can login using your favorite Jabber account"
#~ msgstr "Vous pouvez vous connecter avec votre compte Jabber favori"
#~ msgid "or with our demonstration account"
#~ msgstr "ou avec notre compte de démonstration"
#~ msgid "%s has been removed from your public groups"
#~ msgstr "%s a été supprimé de vos groupes publics"
#~ msgid "Remove a chatroom"
#~ msgstr "Enlever un salon de discussion"
#~ msgid "You are going to remove the following chatroom. Please confirm your action."
#~ msgstr "Vous allez supprimer le salon de discussion suivant de vos signets. Confirmez sil vous plaît."
#~ msgid "Remote application incompatible"
#~ msgstr "Lapplication distante est incompatible"
#~ msgid "Remove"
#~ msgstr "Retirer"
#~ msgid "remorseful"
#~ msgstr "plein de remords"
#~ msgid "Movim's folder must be writable."
#~ msgstr "Le dossier racine de Movim doit être accessible en écriture."
#~ msgid "Couldn't create directory '%s'."
#~ msgstr "La création du répertoire '%s' est impossible."
#~ msgid "Couldn't create configuration file '%s'."
#~ msgstr "La création du fichier de configuration '%s' est impossible."
#~ msgid "Compatibility Test"
#~ msgstr "Test de compatibilité"
#~ msgid "User not logged in."
#~ msgstr "Vous n'êtes pas authentifié."
#~ msgid "JID not provided."
#~ msgstr "JID indisponible."
#~ msgid "jid '%s' is incorrect"
#~ msgstr "Le JID '%s' n'est pas valide"
#~ msgid "Cannot open log file '%s'"
#~ msgstr "Le journal '%s' ne peut être ouvert"
#~ msgid "%s - Account Creation"
#~ msgstr "%s - Création de compte"
#~ msgid "Remove this contact"
#~ msgstr "Supprimer ce contact"
#~ msgid "Debug console"
#~ msgstr "Console de débogage"
#~ msgid "Logout"
#~ msgstr "Se déconnecter"
#~ msgid "Decline"
#~ msgstr "Refuser"
#~ msgid "Loading the contact feed ..."
#~ msgstr "Chargement du flux ..."
#~ msgid "wants to talk with you"
#~ msgstr "veut discuter avec vous"
#~ msgid "or"
#~ msgstr "ou"
#~ msgid "Actual version : "
#~ msgstr "Version actuelle : "
#~ msgid "Install %s and %s packages"
#~ msgstr "Veuillez installer les paquets %s et %s"
#~ msgid "Update your PHP version or contact your server administrator"
#~ msgstr "Mettez à jour votre version de PHP ou contactez l'administrateur de votre serveur"
#~ msgid "Enable read and write rights on Movim's root folder"
#~ msgstr "Activez les droits de lecture et d'écriture sur le dossier racine de Movim"
#~ msgid "Please remove the %s folder in order to complete the installation"
#~ msgstr "Veuillez supprimer le dossier %s pour terminer l'installation"
#~ msgid "Database Movim schema installed"
#~ msgstr "Le schéma des tables a été installé"
#~ msgid "Valid Bosh"
#~ msgstr "Bosh valide"
#~ msgid "Success !"
#~ msgstr "Bravo !"
#~ msgid "The current BOSH URL in invalid"
#~ msgstr "L'URL Bosh donnée n'est pas valide"
#~ msgid "Loading your feed ..."
#~ msgstr "Chargement de votre flux ..."
#~ msgid "Show All"
#~ msgstr "Tout afficher"
#~ msgid "Follow"
#~ msgstr "Suivre"
#~ msgid "Database Detected"
#~ msgstr "Base de données détectée"
#~ msgid "Movim requires the %s extension."
#~ msgstr "Movim a besoin de l'extension %s."
#~ msgid "The following requirements were not met. Please make sure they are all satisfied in order to install Movim."
#~ msgstr "Les dépendances ci-dessous ne sont pas satisfaites. Assurez-vous qu'elles le soient afin d'installer Movim."
#~ msgid "You can now access your shiny Movim instance %sJump In !%s"
#~ msgstr "Vous pouvez maintenant accéder à votre version fraîchement installée de Movim %sAllons y !%s"
#~ msgid "Install the %s package"
#~ msgstr "Installer le paquet %s"
#~ msgid "XMPP Connection Preferences"
#~ msgstr "Configuration de la connexion XMPP"
#~ msgid "You entered different passwords"
#~ msgstr "Vous avez entré des mots de passe différents"
#~ msgid "BOSH Connection Preferences"
#~ msgstr "Configuration de la connexion BOSH"
#~ msgid "Wrong ID"
#~ msgstr "Mauvais identifiant"
#~ msgid "Only alphanumerics elements are authorized"
#~ msgstr "Seul des éléments alphanumériques sont autorisés"
#~ msgid "Make sure your password is safe :"
#~ msgstr "Soyez sur que votre mot de passe est suffisamment robuste :"
#~ msgid "Example :"
#~ msgstr "Exemple :"
#~ msgid "Same here !"
#~ msgstr "Même chôse ici !"
#~ msgid "Retype"
#~ msgstr "Retaper"
#~ msgid "Pseudo"
#~ msgstr "Pseudo"
#~ msgid "Create"
#~ msgstr "Créer"
#~ msgid "Create my vCard"
#~ msgstr "Créer ma vCard"
#~ msgid "A capital letter, a digit and a special character are recommended"
#~ msgstr "Un bon mot de passe est composé d'au moins une majuscule, un chiffre et un caractère spécial"
#~ msgid "8 characters"
#~ msgstr "8 caractères"
#~ msgid "Proxy Preferences"
#~ msgstr "Préférences du Proxy"
#~ msgid "Address"
#~ msgstr "Adresse"
#~ msgid "Firstly fill in this blank with a brand new account ID, this address will follow you on all the Movim network !"
#~ msgstr "Tout d'abord remplir ce vide avec un ID de tout nouveau compte, cette adresse vous suivra sur tout le réseau Movim !"
#~ msgid "%s - Add An Account"
#~ msgstr "%s - Ajouter Un Compte"
#~ msgid "Add your login informations"
#~ msgstr "Ajoutez vos informations de connexion"
#~ msgid "Client Name"
#~ msgstr "Nom du client"
#~ msgid "Client Type"
#~ msgstr "Type de Client"
#~ msgid "Contacts (%s)"
#~ msgstr "Contacts (%s)"
#~ msgid "Your server doesn't support post publication, you can only read contact's feeds"
#~ msgstr "Votre serveur ne gère pas la publication des billets, vous ne pouvez que lire les flux de vos contacts."
#~ msgid "No profile yet ?"
#~ msgstr "Pas encore de profil ?"
#~ msgid "Edit my Profile"
#~ msgstr "Modifier mon profil"
#~ msgid "PHP version mismatch. Movim requires PHP 5.3 minimum."
#~ msgstr "La version de PHP ne correspond pas. Movim nécessite la version 5.3 au minimum."
#~ msgid "normal"
#~ msgstr "standard"
#~ msgid "terse"
#~ msgstr "concis"
#~ msgid "empty"
#~ msgstr "vide"
#~ msgid "Keep in mind that Movim is still under development and will handle many personal details. Its use can potentially endanger your data. Always pay attention to information that you submit."
#~ msgstr "Gardez à l'esprit que Movim est encore en développement et va manipuler des informations personnelles. Son utilisation peut donc les mettre en danger. Faites donc toujours attention aux informations que vous envoyez."
#~ msgid "Before you enjoy your social network, a few adjustements are required."
#~ msgstr "Avant que vous utilisiez votre réseau social, quelques ajustements sont nécessaires."
#~ msgid "ultimate"
#~ msgstr "complet"
#~ msgid "talkative"
#~ msgstr "bavard"
#~ msgid "Although Movim is evolving fast, many (many) features are missing. Be patient ;). You can have a look %s at next versions's roadmaps %s to know if the one you want is on its way."
#~ msgstr "Même si Movim avance vite, il manque encore de (très) nombreuses fonctionnalités. Soyez patient ;). Vous pouvez aller jeter un œil aux %s feuilles de routes des prochaines version %s pour voir si celle-ci n'est pas déjà prévue."
#~ msgid "Go to the %s to the Frequently Asked Questions %s or come ask your question on the official chatroom %s or via our mailing-list (%s see the dedicated page %s)."
#~ msgstr "Allez jeter un oeil %s à la Foire aux Questions %s ou venez nous la poser directement sur le salon officiel %s ou sur la mailing-list (%s voir la page dédiée %s)."
#~ msgid "Don't forget that Movim is an open source project, a helping hand is always welcome (see %s Can I participate %s)"
#~ msgstr "Et n'oubliez pas que Movim est un logiciel libre, un petit coup de main est toujours le bienvenu (voir la page %s Puis-je participer %s)."
#~ msgid "Link my current account"
#~ msgstr "Lier mon compte actuel"
#~ msgid "Connecting..."
#~ msgstr "Connexion…"
#~ msgid "Invite this user"
#~ msgstr "Inviter cet utilisateur"
#~ msgid "Bosh connection failed with error '%s'"
#~ msgstr "La connection Bosh a échoué avec l'erreur '%s'"
#~ msgid "Database connection failed with error '%s'"
#~ msgstr "La connexion à la base de données à échoué avec l'erreur '%s'"
#~ msgid "XMPP connection through Bosh failed with error '%s'"
#~ msgstr "La connection XMPP à travers Bosh a échoué avec l'erreur '%s'"
#~ msgid "Send request"
#~ msgstr "Envoyer la demande"
#~ msgid "Thank you for downloading Movim!"
#~ msgstr "Merci d'avoir téléchargé Movim !"
#~ msgid "Some errors were detected. Please correct them for the installation to proceed."
#~ msgstr "Des erreurs ont été détectées. Veuillez les corriger pour terminer correctement l'installation."
#~ msgid "Cannot load element value '%s'"
#~ msgstr "Impossible de charger la valeur de l'élément « %s »"
#~ msgid "Invalid name"
#~ msgstr "Nom incorrect"
#~ msgid "Username already taken"
#~ msgstr "Identifiant déjà utilisé"
#~ msgid "What is Movim?"
#~ msgstr "Quest-ce que Movim?"
#~ msgid "My Posts"
#~ msgstr "Mes billets"
#~ msgid "I can't find the answer to my question here"
#~ msgstr "Ma question nest pas listée ici"
#~ msgid "Visit the page %s What is Movim ? %s to know more about the project, its aims and understand how it works."
#~ msgstr "Visitez la page %s Quest-ce que Movim ? %s pour en savoir plus le projet, ses buts et comprendre son fonctionnement."
#~ msgid "Some features are missing/I can't do everything I used to do on other social networks"
#~ msgstr "Il manque des fonctionnalités / Je narrive pas à faire ce que je faisais sur les autres réseaux sociaux"
#~ msgid "Could not communicate with the XMPP server"
#~ msgstr "Erreur de communication avec le serveur XMPP"
#~ msgid "Could not connect to the XMPP server"
#~ msgstr "Erreur de connexion au serveur XMPP"

View file

@ -53,8 +53,7 @@ class User {
$this->config = $session->config;
$lang = $this->getConfig('language');
if(isset($lang)) {
$l = Locale::start();
$l->load($lang);
loadLanguage($lang);
}
$cd = new modl\CapsDAO;

View file

@ -20,25 +20,6 @@ use Monolog\Logger;
use Monolog\Handler\SyslogHandler;
use Monolog\Handler\StreamHandler;
class Utils {
public static function log($message, $priority = '')
{
if(LOG_LEVEL != null && LOG_LEVEL > 0) {
$log = new Logger('movim');
$handler = new SyslogHandler('movim');
if(LOG_LEVEL > 1)
$log->pushHandler(new StreamHandler(LOG_PATH.'/movim.log', Logger::DEBUG));
$log->pushHandler($handler, Logger::DEBUG);
$errlines = explode("\n",$message);
foreach ($errlines as $txt) { $log->addDebug($txt); }
}
}
}
/**
* Return the list of gender
*/
@ -521,6 +502,7 @@ function generateUUID($string = false) {
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
function movim_log($logs) {
$log = new Logger('movim');
$log->pushHandler(new SyslogHandler('movim'));

View file

@ -27,7 +27,7 @@ class WidgetBase
protected $user;
protected $name;
protected $pure; // To render the widget without the container
//protected $translations = array(); // Set translations in the controller
protected $translations = array(); // Set translations in the controller
protected $_view;
public $events;
public $filters;
@ -73,6 +73,11 @@ class WidgetBase
'tpl_ext' => 'tpl',
'auto_escape' => false
);
if(file_exists($this->respath('locales.ini', true))) {
$this->translations = parse_ini_file($this->respath('locales.ini', true), true, INI_SCANNER_RAW);
}
// We load the template engine
$this->view = new Tpl;
$this->view->objectConfigure($config);
@ -82,14 +87,30 @@ class WidgetBase
$this->pure = false;
}
function __()
{
function __() {
$args = func_get_args();
return call_user_func_array('__', $args);
global $translationshash;
if(!is_array($this->translations)) $this->translations = array();
$tmp_trans = array_merge_recursive($this->translations, $translationshash);
$arr = explode('.', $args[0]);
if(is_array($tmp_trans)
&& array_key_exists($arr[0], $tmp_trans)
&& array_key_exists($arr[1], $tmp_trans[$arr[0]])) {
$vars = $tmp_trans[$arr[0]][$arr[1]];
if(is_array($vars))
$args[0] = $vars[0];
else
$args[0] = $vars;
return call_user_func_array('t', $args);
} else {
return $args[0];
}
}
function ___()
{
function ___() {
echo call_user_func_array(array(&$this, '__'), func_get_args());
}
@ -98,8 +119,7 @@ class WidgetBase
return $this->user->isSupported($key);
}
function route()
{
function route() {
return call_user_func_array('Route::urlize',func_get_args());
}
@ -127,7 +147,9 @@ class WidgetBase
function display() {}
/**
* àdesc Return the template's HTML code
* Return the template's HTML code
* @param a specific template name to load (like Ruby partials)
* @param load the parent template, like for WidgetCommon
*/
function draw()
{

View file

@ -89,8 +89,7 @@ article section content em {
/* Some CSS to style the quote XHTML generated by Movim */
article section content blockquote,
article section content q,
article section content div.quote {
article section content q {
display: block;
border-radius: 2px;
border: 1px solid rgba(0, 0, 0, 0.12);
@ -98,34 +97,34 @@ article section content div.quote {
box-sizing: border-box;
}
article section content div.quote:before,
article section content div.quote:after {
article section content q:before,
article section content q:after {
content: '';
display: none;
}
article section content div.quote ul {
article section content q ul {
display: flex;
flex-flow: row wrap;
}
article section content div.quote li {
article section content q li {
flex: 1 25%;
list-style-type: none;
padding-left: 0;
}
article section content div.quote li:first-child {
article section content q li:first-child {
flex: 1 75%;
}
@media screen and (max-width: 1024px) {
article section content div.quote li {
article section content q li {
flex: 1 100%;
}
}
article section content div.quote li img {
article section content q li img {
max-height: 10rem;
max-width: 100%;
float: right;

View file

@ -13,7 +13,6 @@ ul li {
}
ul > a {
max-width: 100%;
display: block;
}

View file

@ -152,13 +152,11 @@ body > nav.active {
width: 45rem;
}
@media screen and (min-width: 1024px) {
body > div.dialog:not(:empty) ~ main,
body > div.dialog:not(:empty) ~ nav,
body > nav.active + main {
opacity: 0.5;
pointer-events: none;
}
body > div.dialog:not(:empty) ~ main,
body > div.dialog:not(:empty) ~ nav,
body > nav.active + main {
opacity: 0.5;
pointer-events: none;
}
body > nav li { /* Little hack for the navbar */
@ -229,7 +227,6 @@ main {
background-color: white;
-webkit-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
transform: translateZ(0);
}
nav + main {
@ -711,7 +708,6 @@ main section > div:first-child:nth-last-child(2) ~ div .actions.fixed > div:last
width: 40rem;
pointer-events: none;
transition: opacity 0.2s ease, bottom 0.4s ease;
transform: translateX(0);
}
.snackbar p,
@ -881,7 +877,6 @@ dl dd {
.spinner:before,
.spinner:after {
transition: top .3s ease-in-out;
transform: translateX(0);
content: '';
position: absolute;
left: calc(50% - 3.5rem);
@ -895,8 +890,8 @@ dl dd {
}
.spinner.on:before {
animation: 1s spinner infinite linear;
-webkit-animation: 1s spinner 1s infinite linear;
animation: spinner 1s linear infinite;
-webkit-animation: spinner 1s linear infinite;
}
.spinner:before {
@ -921,12 +916,10 @@ dl dd {
}
@keyframes spinner {
from { transform: rotate(0deg); }
to {transform: rotate(360deg);}
}
@-webkit-keyframes spinner {
from { transform: rotate(0deg); }
to {-webkit-transform: rotate(360deg);}
}