Browse Source

- Merge with edhelas

pull/16/head
Jaussoin Timothée 13 years ago
parent
commit
afeac992f3
  1. 15
      database.php
  2. 30
      system/Cache.php
  3. 3
      system/Utils.php
  4. 16
      system/Widget/WidgetCommon.php
  5. 62
      system/Widget/widgets/Chat/Chat.php
  6. 90
      system/Widget/widgets/ContactInfo/ContactInfo.php
  7. 27
      system/Widget/widgets/ContactSummary/ContactSummary.php
  8. 53
      system/Widget/widgets/Feed/Feed.php
  9. 7
      system/Widget/widgets/Login/Login.php
  10. 1
      system/Widget/widgets/Logout/Logout.php
  11. 4
      system/Widget/widgets/Profile/Profile.php
  12. 9
      system/Widget/widgets/ProfileData/ProfileData.php
  13. 44
      system/Widget/widgets/Roster/Roster.php
  14. BIN
      system/Widget/widgets/Roster/img/earth.png
  15. BIN
      system/Widget/widgets/Roster/img/mobile.png
  16. BIN
      system/Widget/widgets/Roster/img/music.png
  17. BIN
      system/Widget/widgets/Roster/img/robot.png
  18. 24
      system/Widget/widgets/Roster/roster.css
  19. 53
      system/Widget/widgets/Wall/Wall.php
  20. 1
      themes/movim/css/posts.css
  21. 4
      themes/movim/img/default.svg
  22. 95
      themes/movim/img/default1.svg
  23. 95
      themes/movim/img/default2.svg
  24. 95
      themes/movim/img/default3.svg
  25. 95
      themes/movim/img/default4.svg
  26. 95
      themes/movim/img/default5.svg
  27. 95
      themes/movim/img/default6.svg
  28. 95
      themes/movim/img/default7.svg

15
database.php

@ -5,5 +5,20 @@
$nd = new \modl\NodeDAO();
$nd->create();
$cd = new \modl\ContactDAO();
$cd->create();
$cad = new \modl\CapsDAO();
$cad->create();
$prd = new \modl\PresenceDAO();
$prd->create();
$rd = new \modl\RosterLinkDAO();
$rd->create();
$sd = new \modl\SessionDAO();
$sd->create();
echo 'Recreate database... done !';

30
system/Cache.php

@ -108,7 +108,12 @@ class Cache
$md5 = md5($data);
$time = time();
$var = new CacheVar();
$cd = new \modl\CacheDAO();
//$var = $cd->get($cache_key)
$c = new \modl\Cache();
/*$var = new CacheVar();
$query = CacheVar::query()->select()
->where(array(
@ -119,14 +124,16 @@ class Cache
if($result) {
$var = $result[0];
}
}*/
$var->key = $cache_key;
$var->data = $data;
$var->checksum = $md5;
$var->timestamp = $time;
$c->key = $cache_key;
$c->data = $data;
$c->checksum = $md5;
$c->timestamp = $time;
$cd->set($c);
$var->run_query($var->query()->save($var));
//$var->run_query($var->query()->save($var));
}
/**
@ -135,9 +142,13 @@ class Cache
private function read_cache($key)
{
$cache_key = $this->login.':'.$key;
$cd = new \modl\CacheDAO();
$var = $cd->get($cache_key);
$var = new CacheVar();
if($var->load(array('key' => $cache_key))) {
//$var = new CacheVar();
//if($var->load(array('key' => $cache_key))) {
if(isset($var)) {
return unserialize(gzuncompress(base64_decode(str_replace("\\'", "'", $var->data))));
} else {
@ -148,4 +159,3 @@ class Cache
?>

3
system/Utils.php

@ -206,7 +206,8 @@ function prepareDate($time, $hours = true) {
if($hours)
$date .= ' - '. date('H:i', $time);
return $date;
if($time)
return $date;
}
/**

16
system/Widget/WidgetCommon.php

@ -17,24 +17,28 @@
class WidgetCommon extends WidgetBase {
protected function printPost($post) {
if($post->title)
$title = '
<span>
'.$post->title.'
</span><br />';
$html = '
<div class="post " id="'.$post->nodeid.'">
<a href="?q=friend&amp;f='.$post->getContact()->jid.'">
<a href="?q=friend&amp;f='.$post->uri.'">
<img class="avatar" src="'.$post->getContact()->getPhoto('m').'">
</a>
<div id="'.$post->nodeid.'" class="postbubble ">
'.$title.'
<span>
'.$post->title.'
</span>
<span>
'.$post->name.' <a href="?q=friend&amp;f='.$post->uri.'">'.$post->getContact()->getTrueName().'</a>
<a href="?q=friend&amp;f='.$post->uri.'">'.$post->getContact()->getTrueName().'</a>
</span>
<span class="date">
'.prepareDate(strtotime($post->published)).'
</span>
<div class="content">
'.$post->content.'
'.prepareString(html_entity_decode($post->content)).'
</div>
</div>
<div class="clear"></div>

62
system/Widget/widgets/Chat/Chat.php

@ -61,12 +61,12 @@ class Chat extends WidgetBase
function onMessage($message)
{
if($message->getData('key') == $message->getData('from')) {
$key = $message->getData('from');
$jid = $message->getData('to');
if($message->key == $message->from) {
$key = $message->from;
$jid = $message->to;
} else {
$key = $message->getData('to');
$jid = $message->getData('from');
$key = $message->to;
$jid = $message->from;
}
$query = RosterLink::query()->select()
@ -86,7 +86,7 @@ class Chat extends WidgetBase
'chats',
RPC::cdata($this->prepareChat($contact)));
RPC::call('scrollAllTalks');
} else if(isset($contact) && $message->getData('body') != '') {
} else if(isset($contact) && $message->body != '') {
$html = $this->prepareMessage($message);
@ -203,18 +203,21 @@ class Chat extends WidgetBase
{
$m = new \Message();
$m->key->setval($this->user->getLogin());
$m->to->setval(echapJid($to));
$m->from->setval($this->user->getLogin());
$m = new \modl\Message();
$m->type->setval("chat");
$m->key = $this->user->getLogin();
$m->to = echapJid($to);
$m->from = $this->user->getLogin();
$m->body->setval(rawurldecode($message));
$m->type = 'chat';
$m->published->setval(date('Y-m-d H:i:s'));
$m->delivered->setval(date('Y-m-d H:i:s'));
$m->body = rawurldecode($message);
$m->published = date('Y-m-d H:i:s');
$m->delivered = date('Y-m-d H:i:s');
$m->run_query($m->query()->save($m));
$md = new \modl\MessageDAO();
$md->set($m);
$this->onMessage($m);
@ -268,19 +271,19 @@ class Chat extends WidgetBase
}
function prepareMessage($message) {
if($message->getData('body') != '') {
if($message->body != '') {
$html = '<div class="message ';
if($message->getData('key') == $message->getData('from'))
if($message->key == $message->from)
$html.= 'me';
$content = $message->getData('body');
$content = $message->body;
if(preg_match("#^/me#", $message->getData('body'))) {
if(preg_match("#^/me#", $message->body)) {
$html .= " own ";
$content = "** ".substr($message->getData('body'), 4);
$content = "** ".substr($message->body, 4);
}
$html .= '"><span class="date">'.date('H:i', strtotime($message->getData('published'))).'</span>';
$html .= '"><span class="date">'.date('H:i', strtotime($message->published)).'</span>';
$html.= prepareString(htmlentities($content, ENT_COMPAT, "UTF-8")).'</div>';
return $html;
} else {
@ -290,24 +293,15 @@ class Chat extends WidgetBase
function prepareChat($contact)
{
$query = Message::query()
->where(
array(
'key' => $this->user->getLogin(),
array('to' => $contact->getData('jid') , '|from' => $contact->getData('jid'))
)
)
->orderby('published', true)
->limit(0, 20);
$messages = Message::run_query($query);
$md = new \modl\MessageDAO();
$messages = $md->getContact($contact->getData('jid'));
if(!empty($messages)) {
$messages = array_reverse($messages);
$day = '';
foreach($messages as $m) {
if($day != date('d',strtotime($m->getData('published')))) {
$messageshtml .= '<div class="message presence">'.prepareDate(strtotime($m->getData('published')), false).'</div>';
$day = date('d',strtotime($m->getData('published')));
if($day != date('d',strtotime($m->published))) {
$messageshtml .= '<div class="message presence">'.prepareDate(strtotime($m->published), false).'</div>';
$day = date('d',strtotime($m->published));
}
$messageshtml .= $this->prepareMessage($m);
}

90
system/Widget/widgets/ContactInfo/ContactInfo.php

@ -37,63 +37,51 @@ class ContactInfo extends WidgetCommon
function prepareContactInfo()
{
$query = Contact::query()
->join('Presence',
array('Contact.jid' =>
'Presence.jid'))
->where(array(
'Contact`.`jid' => $_GET['f']));
$user = Contact::run_query($query);
$query = RosterLink::query()
->where(array(
'key' => $this->user->getLogin(),
'jid' => $_GET['f']));
$r = RosterLink::run_query($query);
$cd = new \modl\ContactDAO();
$c = $cd->getRosterItem($_GET['f']);
$html = '';
if(isset($user) && isset($user[0][1]) && isset($r[0]->jid) && $r[0]->jid->getval() != '') {
$contact = $user[0][0];
$presence = $user[0][1]->getPresence();
if(isset($c)) {
// Mood
if($contact->mood->getval() != '') {
if($c->mood) {
$moodarray = getMood();
$mood = '';
foreach(unserialize($contact->mood->getval()) as $m)
foreach(unserialize($c->mood) as $m)
$mood .= $moodarray[$m].',';
$html .= t("I'm ").substr($mood, 0, -1).'<br />';
}
if($c->tuneartist) {
$html .= '<h2>'.t('Listening').'</h2>';
$html .= $c->tuneartist. ' - '.$c->tunetitle.' '.t('on').$c->tunesource;
}
// Last seen
if($user[0][1]->delay->getval() != '0000-00-00 00:00:00' && $this->testIsSet($user[0][1]->delay->getval())) {
if($c->delay) {
$html .= '<h2>'.t('Last seen').'</h2>';
$html .= '<span></span>'.date('j M Y - H:i',strtotime($user[0][1]->delay->getval())).'<br />';
$html .= prepareDate(strtotime($c->delay)).'<br />';
}
// Location
if(($contact->loclatitude->getval() != '' &&
$contact->loclongitude->getval() != '') || $contact->getPlace() != ''
) {
if($c->loclatitude != '' && $c->loclongitude != ''
|| $c->getPlace() != '') {
$html .= '
<h2>'.t('Location').'</h2>';
$html .= prepareDate(strtotime($contact->loctimestamp->getval())).'<br /><br />';
if($contact->getPlace() != '')
$html .= $contact->getPlace().'<br /><br />';
$html .= prepareDate(strtotime($c->loctimestamp)).'<br /><br />';
if($c->getPlace() != '')
$html .= $c->getPlace().'<br /><br />';
if($contact->loclatitude->getval() != '' &&
$contact->loclongitude->getval() != '')
if(isset($c->loclatitude) && isset($c->loclongitude))
$html .= '
<div id="mapdiv" style="width: auto; height: 250px;"></div>
<script>
map = new OpenLayers.Map("mapdiv");
map.addLayer(new OpenLayers.Layer.OSM());
var lonLat = new OpenLayers.LonLat( '.$contact->loclongitude->getval().' ,'.$contact->loclatitude->getval().' )
var lonLat = new OpenLayers.LonLat( '.$c->loclongitude.' ,'.$c->loclatitude.' )
.transform(
new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
map.getProjectionObject() // to Spherical Mercator Projection
@ -111,56 +99,52 @@ class ContactInfo extends WidgetCommon
}
// Client informations
if($presence['node'] != '' && $presence['ver'] != '') {
$node = $presence['node'].'#'.$presence['ver'];
if($c->node && $c->ver) {
$node = $c->node.'#'.$c->ver;
$cad = new \modl\CapsDAO();
$caps = $cad->get($node);
$query = \Caps::query()->select()
->where(array(
'node' => $node))
->limit(0, 1);
$data = \Caps::run_query($query);
$clienttype =
array(
'bot' => t('Bot'),
'pc' => t('Desktop'),
'phone' => t('Phone'),
'handheld' => t('Phone'),
'web' => t('Web'),
);
if(isset($data[0])) {
$data = $data[0];
if(isset($caps) && $caps->name != '' && $caps->type != '' ) {
$cinfos = '';
$cinfos .= $data->getData('name').' ('.$clienttype[$data->getData('type')].')<br />';
$cinfos .= $caps->name.' ('.$clienttype[$caps->type].')<br />';
$html .='<h2>'.t('Client Informations').'</h2>' . $cinfos;
}
}
if($contact->jid->getval() != $this->user->getLogin()) {
// Chat button
if($c->jid != $this->user->getLogin()) {
$presences = getPresences();
$html .='<h2>'.t('Actions').'</h2>';
if(isset($presence['presence']) && !in_array($presence['presence'], array(5, 6))) {
if(isset($c->presence) && !in_array($presence['presence'], array(5, 6))) {
$html .= '
<a
class="button tiny icon chat"
href="#"
style="float: left;"
id="friendchat"
onclick="'.$this->genCallWidget("Chat","ajaxOpenTalk", "'".$contact->getData('jid')."'").'"
onclick="'.$this->genCallWidget("Chat","ajaxOpenTalk", "'".$c->jid."'").'"
>
'.$presences[$presence['presence']].' - '.t('Chat').'
'.$presences[$c->presence].' - '.t('Chat').'
</a>';
}
}
}
$html .= '<div style="clear: both;"></div>';
if(isset($r[0]->jid) && $r[0]->jid->getval() != '') {
$html .= '<div style="clear: both;"></div>';
$html .='
<a
class=""
@ -178,7 +162,7 @@ class ContactInfo extends WidgetCommon
<a
class="button tiny icon yes merged left';
if(!isset($presence['presence']) || $presence['presence'] == 5)
if(!isset($c->presence) || $c->presence == 5)
$html .=' left';
$html .= '"
href="#"

27
system/Widget/widgets/ContactSummary/ContactSummary.php

@ -44,26 +44,18 @@ class ContactSummary extends WidgetCommon
$gender = getGender();
$marital = getMarital();
$query = \Presence::query()->select()
->where(array(
'key' => $this->user->getLogin(),
'jid' => $contact->jid))
->limit(0, 1);
$data = \Presence::run_query($query);
if(isset($data[0]))
$presence = $data[0]->getPresence();
// Contact avatar
$html .= '
<div class="block avatar">
<img src="'.$contact->getPhoto('l').'"/>
</div>';
$presencetxt = getPresencesTxt();
// Contact general infos
$html .= '
<div class="block">
<h1 class="'.$presence['presence_txt'].'">'.$contact->getTrueName().'</h1><br />';
<h1 class="'.$presencetxt[$contact->presence].'">'.$contact->getTrueName().'</h1><br />';
if($this->testIsSet($contact->name))
$html .= $contact->name.' ';
@ -76,7 +68,7 @@ class ContactSummary extends WidgetCommon
$html .= '<br /><br />
</div>';
if($this->testIsSet($presence['status'])) {
if($this->testIsSet($contact->status)) {
$html .= '
<div
class="block"
@ -88,7 +80,7 @@ class ContactSummary extends WidgetCommon
>';
$html .= '
<div class="textbubble">
'.prepareString($presence['status']).'
'.prepareString($contact->status).'
</div>';
$html .= '
</div>';
@ -100,12 +92,15 @@ class ContactSummary extends WidgetCommon
function build()
{
$cd = new modl\ContactDAO();
$contact = $cd->get($_GET['f']);
if($_GET['f'] != $this->user->getLogin())
$contact = $cd->getRosterItem($_GET['f']);
else
$contact = $cd->get($_GET['f']);
?>
<div id="contactsummary">
<?php
if(isset($contact)) {
if(isset($contact->photobin)) {
echo $this->prepareContactSummary($contact);
}
@ -113,7 +108,7 @@ class ContactSummary extends WidgetCommon
$contact = new modl\Contact();
echo $this->prepareContactSummary($contact);
?>
<script type="text/javascript"><?php $this->callAjax('ajaxRefreshVcard', "'".$_GET['f']."'");?></script>
<script type="text/javascript">setTimeout("<?php $this->callAjax('ajaxRefreshVcard', "'".$_GET['f']."'");?>", 1000);</script>
<?php } ?>
</div>
<?php

53
system/Widget/widgets/Feed/Feed.php

@ -168,53 +168,18 @@ class Feed extends WidgetCommon {
}
function prepareFeed($start) {
$query = RosterLink::query()->where(
array(
'RosterLink`.`key' => $this->user->getLogin(),
array(
'RosterLink`.`rostersubscription!' => 'none',
'RosterLink`.`rostersubscription!' => '',
'RosterLink`.`rostersubscription!' => 'vcard',
'|RosterLink`.`rosterask' => 'subscribe')))
->orderby('RosterLink.group', true);
$contacts = RosterLink::run_query($query);
$rosterc = array();
$commentid = array();
array_push($rosterc, $this->user->getLogin());
foreach($contacts as $c) {
array_push($rosterc, '|'.$c->getData('jid'));
}
$pd = new \modl\PostDAO();
$pl = $pd->getFeed($start+1, 10);
if(empty($rosterc))
$where = array(
'Post`.`parentid' => '',
'Post`.`key' => $this->user->getLogin());
else
$where = array(
'Post`.`parentid' => '',
'Post`.`key' => $this->user->getLogin(),
array('Post`.`jid' => $rosterc));
// We query the last messages
$query = Post::query()
->join('Contact', array('Post.jid' => 'Contact.jid'))
->where($where)
->orderby('Post.updated', true)
->limit($start+1, '10');
$messages = Post::run_query($query);
foreach($pl as $post) {
$html .= $this->printPost($post);
}
// We ask for the HTML of all the posts
$html = $this->preparePosts($messages);
$next = $start + 10;
if(sizeof($messages) > 9 && $html != '') {
if(sizeof($pl) > 9 && $html != '') {
$html .= '
<div class="post">
<div
@ -224,6 +189,7 @@ class Feed extends WidgetCommon {
</div>
</div>';
}
return $html;
}
@ -237,7 +203,10 @@ class Feed extends WidgetCommon {
$html = $this->prepareFeed(-1);
if($html == '')
$html = t("Your feed cannot be loaded.");
$html = '
<div class="message info" style="margin: 1.5em; margin-top: 0em;">'.
t("Your feed cannot be loaded.").'
</div>';
RPC::call('movim_fill', 'feedcontent', RPC::cdata($html));
RPC::commit();
}

7
system/Widget/widgets/Login/Login.php

@ -280,9 +280,10 @@ class Login extends WidgetBase {
<div class="infos">
<?php
$query = CacheVar::query()->where();
$contacts = CacheVar::run_query($query);
echo t('Population').' '.ceil(count($contacts)/2).' • ';
$rd = new \modl\RosterLinkDAO();
$pop = $rd->countAccounts();
echo t('Population').' '.$pop[0].' • ';
?>
<?php echo t('No account yet ?'); ?>
<a href="?q=account">

1
system/Widget/widgets/Logout/Logout.php

@ -92,6 +92,7 @@ class Logout extends WidgetBase
$txt = getPresences();
global $session;
$query = Presence::query()->select()
->where(array(
'key' => $this->user->getLogin(),

4
system/Widget/widgets/Profile/Profile.php

@ -83,10 +83,6 @@ class Profile extends WidgetCommon
{
$cd = new modl\ContactDAO();
$contact = $cd->get($this->user->getLogin());
/*$query = Contact::query()->select()
->where(array(
'jid' => $this->user->getLogin()));
$contact = Contact::run_query($query);*/
$presence = Cache::c('presence');

9
system/Widget/widgets/ProfileData/ProfileData.php

@ -64,7 +64,7 @@ class ProfileData extends WidgetBase
RPC::call('movim_fill', 'mapdata', RPC::cdata($html));
$html = '
<div class="message success">'.t('Location updated').'</div>';
<div class="message success">'.t('Location updated').'</div><br />';
RPC::call('movim_fill', 'maperror', RPC::cdata($html));
RPC::call('movim_delete', 'mapdiv');
RPC::commit();
@ -86,8 +86,8 @@ class ProfileData extends WidgetBase
$cd = new modl\ContactDAO();
$c = $cd->get($this->user->getLogin());
if($c) {
if($c->loctimestamp) {
$data = prepareDate(strtotime($c->loctimestamp)).'<br /><br />';
$data .= $c->getPlace();
} else {
@ -102,6 +102,7 @@ class ProfileData extends WidgetBase
<div id="maperror"></div>
<div id="mapdata" style="margin-bottom: 10px;">'.$data.'</div>
<div id="mapdiv" style="width: auto; height: 250px; display: none;"></div>
<div class="clear"></div>
<a
class="button tiny icon add"
onclick="getMyPosition(); this.style.display = \'none\';">'.
@ -112,7 +113,7 @@ class ProfileData extends WidgetBase
style="display: none;"
class="button tiny icon yes merged left"
onclick="'.$submit.' hidePositionChoice();">'.t('Accept').'</a><a
style="display: none;"
style="display: none; margin-top: 1em;"
id="myposrefuse"
onclick="hidePositionChoice();"
class="button tiny icon no merged right">'.t('Cancel').'</a>

44
system/Widget/widgets/Roster/Roster.php

@ -86,7 +86,7 @@ class Roster extends WidgetBase
*
*
*/
function prepareRosterElement($contact, $inner = false)
function prepareRosterElement($contact, $caps = false)
{
$html = '';
@ -106,9 +106,32 @@ class Roster extends WidgetBase
$html .= '
id="roster'.$contact->jid.'"
>';
$type = '';
if($caps) {
foreach($caps as $c) {
if($c->node == $contact->node.'#'.$contact->ver) {
$type = $c->type;
}
}
}
$html .= '<div class="chat on" onclick="'.$this->genCallWidget("Chat","ajaxOpenTalk", "'".$contact->jid."'").'"></div>';
$html .= '<div class="chat on" onclick="'.$this->genCallWidget("Chat","ajaxOpenTalk", "'".$contact->jid."'").'"></div>
<a
if($type == 'handheld')
$html .= '<div class="infoicon mobile"></div>';
if($type == 'web')
$html .= '<div class="infoicon web"></div>';
if($type == 'bot')
$html .= '<div class="infoicon bot"></div>';
if(isset($contact->tuneartist) && $contact->tuneartist != '')
$html .= '<div class="infoicon tune"></div>';
$html .= '<a
title="'.$contact->jid;
if($contact->status != '')
$html .= ' - '.htmlentities($contact->status);
@ -129,7 +152,7 @@ class Roster extends WidgetBase
$html .= ' ('.$contact->ressource.')';
$html .= '</span>
</a>';
$html .= '</li>';
return $html;
@ -143,7 +166,7 @@ class Roster extends WidgetBase
*
*
*/
private function prepareRosterGroup($contacts, &$i)
private function prepareRosterGroup($contacts, &$i, $caps)
{
$j = $i;
// We get the current name of the group
@ -155,10 +178,10 @@ class Roster extends WidgetBase
// We grab all the contacts of the group
$grouphtml = '';
while(isset($contacts[$i]) && $contacts[$i]->group == $currentgroup) {
if(!in_array($contacts[$i]->jid, $duplicate)) {
$grouphtml .= $this->prepareRosterElement($contacts[$i]);
//if(!in_array($contacts[$i]->jid, $duplicate)) {
$grouphtml .= $this->prepareRosterElement($contacts[$i], $caps);
array_push($duplicate, $contacts[$i]->jid);
}
//}
$i++;
}
@ -199,12 +222,15 @@ class Roster extends WidgetBase
$html = '';
$rd = new modl\RosterLinkDAO();
$capsdao = new modl\CapsDAO();
$caps = $capsdao->getAll();
if(count($contacts) != 0) {
$i = 0;
while($i < count($contacts))
$html .= $this->prepareRosterGroup($contacts, $i);
$html .= $this->prepareRosterGroup($contacts, $i, $caps);
} else {
$html .= '<script type="text/javascript">setTimeout(\''.$this->genCallAjax('ajaxRefreshRoster').'\', 1500);</script>';

BIN
system/Widget/widgets/Roster/img/earth.png

After

Width: 16  |  Height: 16  |  Size: 390 B

BIN
system/Widget/widgets/Roster/img/mobile.png

After

Width: 16  |  Height: 16  |  Size: 128 B

BIN
system/Widget/widgets/Roster/img/music.png

After

Width: 16  |  Height: 16  |  Size: 204 B

BIN
system/Widget/widgets/Roster/img/robot.png

After

Width: 16  |  Height: 16  |  Size: 364 B

24
system/Widget/widgets/Roster/roster.css

@ -239,3 +239,27 @@
border-bottom: 1px solid rgba(20, 20, 30, 1);
}
#roster li .infoicon {
width: 18px;
height: 18px;
background-repeat: no-repeat;
float: right;
margin-top: 6px;
margin-right: 2px;
}
#roster li .mobile {
background-image: url('img/mobile.png');
}
#roster li .web {
background-image: url('img/earth.png');
}
#roster li .bot {
background-image: url('img/robot.png');
}
#roster li .tune {
background-image: url('img/music.png');
}

53
system/Widget/widgets/Wall/Wall.php

@ -59,22 +59,7 @@ class Wall extends WidgetCommon
}
function onStream($from) {
/*$html = '';
$html .= '
<!--<a
class="button tiny icon"
href="#"
style="float: right;"
id="wallfollow"
onclick="'.$this->genCallAjax('ajaxSubscribe', "'".$payload["@attributes"]["from"]."'").'"
>
'.t('Follow').'
</a>
<br /><br />-->
';
*/
$html = $this->prepareFeed(0, $from);
$html = $this->prepareFeed(-1, $from);
RPC::call('movim_fill', 'wall', RPC::cdata($html));
}
@ -83,29 +68,19 @@ class Wall extends WidgetCommon
if(!$from)
$from = $_GET['f'];
$where = array(
'Post`.`key' => $this->user->getLogin(),
'Post`.`jid' => $from,
'Post`.`parentid' => '');
if(isset($_GET['p']))
$where['Post`.`nodeid'] = $_GET['p'];
// We query the last messages
$query = Post::query()
->join('Contact', array('Post.jid' => 'Contact.jid'))
->where($where)
->orderby('Post.updated', true)
->limit($start, '10');
$messages = Post::run_query($query);
// We ask for the HTML of all the posts
$htmlmessages = $this->preparePosts($messages);
$pd = new \modl\PostDAO();
$pl = $pd->getContact($from, $start+1, 10);
// We ask for the HTML of all the posts
foreach($pl as $post) {
$htmlmessages .= $this->printPost($post);
}
$next = $start + 10;
if(sizeof($messages) > 0 && $htmlmessages != false) {
if($start == 0) {
if(count($pl) > 0 && $htmlmessages != false) {
if($start == -1) {
$html .= '
<div class="posthead" style="border-top: 0px;">
<a
@ -127,7 +102,7 @@ class Wall extends WidgetCommon
</div>';
}
$html .= $htmlmessages;
if(sizeof($messages) > 9)
if(count($pl) > 9)
$html .= '
<div class="post">
<div class="older" onclick="'.$this->genCallAjax('ajaxGetFeed', "'".$next."'", "'".$from."'").'; this.parentNode.style.display = \'none\'">'.t('Get older posts').'</div>
@ -156,7 +131,7 @@ class Wall extends WidgetCommon
?>
<div class="tabelem protect orange" id="wall" title="<?php echo t('Feed');?>">
<?php
$wall = $this->prepareFeed(0);
$wall = $this->prepareFeed(-1);
if($wall)
echo $wall;
else {

1
themes/movim/css/posts.css

@ -67,6 +67,7 @@
font-weight: bold;
line-height: 1.5em;
padding-left: 1em;
display: inline-block;
}
.post span a:hover {

4
themes/movim/img/default.svg

@ -31,8 +31,8 @@
inkscape:current-layer="layer1"
showgrid="true"
showborder="false"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-width="1280"
inkscape:window-height="736"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"

95
themes/movim/img/default1.svg

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="default.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.42"
inkscape:cx="-282.14285"
inkscape:cy="120"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showborder="false"
inkscape:window-width="1280"
inkscape:window-height="736"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid2985"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
originx="0px"
originy="-3.8281246e-07px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(200,-52.362183)">
<rect
style="fill:#442178;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2987"
width="600"
height="600"
x="-200"
y="52.362183" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path2989"
sodipodi:cx="100"
sodipodi:cy="312.36218"
sodipodi:rx="140"
sodipodi:ry="140"
d="m 240,312.36218 c 0,77.31987 -62.68014,140 -140,140 -77.319865,0 -140,-62.68013 -140,-140 0,-77.31986 62.680135,-140 140,-140 77.31986,0 140,62.68014 140,140 z" />
<rect
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2993"
width="360"
height="280"
x="-80"
y="452.36218"
ry="80" />
</g>
</svg>

95
themes/movim/img/default2.svg

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="default1.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.42"
inkscape:cx="-282.14285"
inkscape:cy="120"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showborder="false"
inkscape:window-width="1280"
inkscape:window-height="736"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid2985"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
originx="0px"
originy="-3.8281246e-07px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(200,-52.362183)">
<rect
style="fill:#800033;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2987"
width="600"
height="600"
x="-200"
y="52.362183" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path2989"
sodipodi:cx="100"
sodipodi:cy="312.36218"
sodipodi:rx="140"
sodipodi:ry="140"
d="m 240,312.36218 c 0,77.31987 -62.68014,140 -140,140 -77.319865,0 -140,-62.68013 -140,-140 0,-77.31986 62.680135,-140 140,-140 77.31986,0 140,62.68014 140,140 z" />
<rect
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2993"
width="360"
height="280"
x="-80"
y="452.36218"
ry="80" />
</g>
</svg>

95
themes/movim/img/default3.svg

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="default2.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.42"
inkscape:cx="-282.14285"
inkscape:cy="120"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showborder="false"
inkscape:window-width="1280"
inkscape:window-height="736"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid2985"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
originx="0px"
originy="-3.8281246e-07px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(200,-52.362183)">
<rect
style="fill:#806600;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2987"
width="600"
height="600"
x="-200"
y="52.362183" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path2989"
sodipodi:cx="100"
sodipodi:cy="312.36218"
sodipodi:rx="140"
sodipodi:ry="140"
d="m 240,312.36218 c 0,77.31987 -62.68014,140 -140,140 -77.319865,0 -140,-62.68013 -140,-140 0,-77.31986 62.680135,-140 140,-140 77.31986,0 140,62.68014 140,140 z" />
<rect
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2993"
width="360"
height="280"
x="-80"
y="452.36218"
ry="80" />
</g>
</svg>

95
themes/movim/img/default4.svg

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="default3.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.42"
inkscape:cx="-282.14285"
inkscape:cy="120"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showborder="false"
inkscape:window-width="1280"
inkscape:window-height="736"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid2985"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
originx="0px"
originy="-3.8281246e-07px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(200,-52.362183)">
<rect
style="fill:#aa4400;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2987"
width="600"
height="600"
x="-200"
y="52.362183" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path2989"
sodipodi:cx="100"
sodipodi:cy="312.36218"
sodipodi:rx="140"
sodipodi:ry="140"
d="m 240,312.36218 c 0,77.31987 -62.68014,140 -140,140 -77.319865,0 -140,-62.68013 -140,-140 0,-77.31986 62.680135,-140 140,-140 77.31986,0 140,62.68014 140,140 z" />
<rect
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2993"
width="360"
height="280"
x="-80"
y="452.36218"
ry="80" />
</g>
</svg>

95
themes/movim/img/default5.svg

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="default4.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.42"
inkscape:cx="-282.14285"
inkscape:cy="120"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showborder="false"
inkscape:window-width="1280"
inkscape:window-height="736"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid2985"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
originx="0px"
originy="-3.8281246e-07px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(200,-52.362183)">
<rect
style="fill:#338000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2987"
width="600"
height="600"
x="-200"
y="52.362183" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path2989"
sodipodi:cx="100"
sodipodi:cy="312.36218"
sodipodi:rx="140"
sodipodi:ry="140"
d="m 240,312.36218 c 0,77.31987 -62.68014,140 -140,140 -77.319865,0 -140,-62.68013 -140,-140 0,-77.31986 62.680135,-140 140,-140 77.31986,0 140,62.68014 140,140 z" />
<rect
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2993"
width="360"
height="280"
x="-80"
y="452.36218"
ry="80" />
</g>
</svg>

95
themes/movim/img/default6.svg

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="default5.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.42"
inkscape:cx="-282.14285"
inkscape:cy="120"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showborder="false"
inkscape:window-width="1280"
inkscape:window-height="736"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid2985"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
originx="0px"
originy="-3.8281246e-07px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(200,-52.362183)">
<rect
style="fill:#800000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2987"
width="600"
height="600"
x="-200"
y="52.362183" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path2989"
sodipodi:cx="100"
sodipodi:cy="312.36218"
sodipodi:rx="140"
sodipodi:ry="140"
d="m 240,312.36218 c 0,77.31987 -62.68014,140 -140,140 -77.319865,0 -140,-62.68013 -140,-140 0,-77.31986 62.680135,-140 140,-140 77.31986,0 140,62.68014 140,140 z" />
<rect
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2993"
width="360"
height="280"
x="-80"
y="452.36218"
ry="80" />
</g>
</svg>

95
themes/movim/img/default7.svg

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="600"
height="600"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="default6.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.42"
inkscape:cx="-282.14285"
inkscape:cy="120"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
showborder="false"
inkscape:window-width="1280"
inkscape:window-height="736"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid2985"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
originx="0px"
originy="-3.8281246e-07px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(200,-52.362183)">
<rect
style="fill:#162d50;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2987"
width="600"
height="600"
x="-200"
y="52.362183" />
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path2989"
sodipodi:cx="100"
sodipodi:cy="312.36218"
sodipodi:rx="140"
sodipodi:ry="140"
d="m 240,312.36218 c 0,77.31987 -62.68014,140 -140,140 -77.319865,0 -140,-62.68013 -140,-140 0,-77.31986 62.680135,-140 140,-140 77.31986,0 140,62.68014 140,140 z" />
<rect
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="rect2993"
width="360"
height="280"
x="-80"
y="452.36218"
ry="80" />
</g>
</svg>
Loading…
Cancel
Save