Merge remote branch 'upstream/master'

This commit is contained in:
Tobias Hößl 2012-02-28 21:19:02 +00:00
commit 3d249f0edd
57 changed files with 2398 additions and 1274 deletions

View file

@ -9,9 +9,9 @@ require_once('include/nav.php');
require_once('include/cache.php'); require_once('include/cache.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_VERSION', '2.3.1263' ); define ( 'FRIENDICA_VERSION', '2.3.1265' );
define ( 'DFRN_PROTOCOL_VERSION', '2.22' ); define ( 'DFRN_PROTOCOL_VERSION', '2.22' );
define ( 'DB_UPDATE_VERSION', 1126 ); define ( 'DB_UPDATE_VERSION', 1129 );
define ( 'EOL', "<br />\r\n" ); define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );

View file

@ -634,7 +634,8 @@ CREATE TABLE IF NOT EXISTS `mailacct` (
`mailbox` CHAR( 255 ) NOT NULL, `mailbox` CHAR( 255 ) NOT NULL,
`user` CHAR( 255 ) NOT NULL , `user` CHAR( 255 ) NOT NULL ,
`pass` TEXT NOT NULL , `pass` TEXT NOT NULL ,
`reply_to` CHAR( 255 ) NOT NULL , `action` INT NOT NULL ,
`movetofolder` CHAR(255) NOT NULL ,
`pubmail` TINYINT(1) NOT NULL DEFAULT '0', `pubmail` TINYINT(1) NOT NULL DEFAULT '0',
`last_check` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' `last_check` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE = MyISAM DEFAULT CHARSET=utf8; ) ENGINE = MyISAM DEFAULT CHARSET=utf8;
@ -837,4 +838,17 @@ INDEX ( `master-parent-item` ),
INDEX ( `receiver-uid` ) INDEX ( `receiver-uid` )
) ENGINE = MyISAM DEFAULT CHARSET=utf8; ) ENGINE = MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `spam` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`uid` INT NOT NULL,
`spam` INT NOT NULL DEFAULT '0',
`ham` INT NOT NULL DEFAULT '0',
`term` CHAR(255) NOT NULL,
`date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
INDEX ( `uid` ),
INDEX ( `spam` ),
INDEX ( `ham` ),
INDEX ( `term` )
) ENGINE = MyISAM DEFAULT CHARSET=utf8;

View file

@ -230,11 +230,16 @@ function scrape_feed($url) {
$ret = array(); $ret = array();
$s = fetch_url($url); $s = fetch_url($url);
if(! $s)
return $ret;
$headers = $a->get_curl_headers(); $headers = $a->get_curl_headers();
logger('scrape_feed: headers=' . $headers, LOGGER_DEBUG); $code = $a->get_curl_code();
logger('scrape_feed: returns: ' . $code . ' headers=' . $headers, LOGGER_DEBUG);
if(! $s) {
logger('scrape_feed: no data returned for ' . $url);
return $ret;
}
$lines = explode("\n",$headers); $lines = explode("\n",$headers);
if(count($lines)) { if(count($lines)) {
@ -258,8 +263,10 @@ function scrape_feed($url) {
logger('scrape_feed: parse error: ' . $e); logger('scrape_feed: parse error: ' . $e);
} }
if(! $dom) if(! $dom) {
logger('scrape_feed: failed to parse.');
return $ret; return $ret;
}
$head = $dom->getElementsByTagName('base'); $head = $dom->getElementsByTagName('base');
@ -448,7 +455,16 @@ function probe_url($url, $mode = PROBE_NORMAL) {
if((strcasecmp($feadr->mailbox,$name) == 0) if((strcasecmp($feadr->mailbox,$name) == 0)
&&(strcasecmp($feadr->host,$phost) == 0) &&(strcasecmp($feadr->host,$phost) == 0)
&& (strlen($feadr->personal))) { && (strlen($feadr->personal))) {
$vcard['fn'] = notags($feadr->personal);
$personal = imap_mime_header_decode($feadr->personal);
$vcard['fn'] = "";
foreach($personal as $perspart)
if ($perspart->charset != "default")
$vcard['fn'] .= iconv($perspart->charset, 'UTF-8//IGNORE', $perspart->text);
else
$vcard['fn'] .= $perspart->text;
$vcard['fn'] = notags($vcard['fn']);
} }
} }
} }
@ -556,7 +572,7 @@ function probe_url($url, $mode = PROBE_NORMAL) {
if($check_feed) { if($check_feed) {
$feedret = scrape_feed(($poll) ? $poll : $url); $feedret = scrape_feed(($poll) ? $poll : $url);
logger('probe_url: scrape_feed returns: ' . print_r($feedret,true), LOGGER_DATA); logger('probe_url: scrape_feed ' . (($poll)? $poll : $url) . ' returns: ' . print_r($feedret,true), LOGGER_DATA);
if(count($feedret) && ($feedret['feed_atom'] || $feedret['feed_rss'])) { if(count($feedret) && ($feedret['feed_atom'] || $feedret['feed_rss'])) {
$poll = ((x($feedret,'feed_atom')) ? unamp($feedret['feed_atom']) : unamp($feedret['feed_rss'])); $poll = ((x($feedret,'feed_atom')) ? unamp($feedret['feed_atom']) : unamp($feedret['feed_rss']));
if(! x($vcard)) if(! x($vcard))

7
include/bbcode.php Executable file → Normal file
View file

@ -151,7 +151,7 @@ function bbcode($Text,$preserve_nl = false) {
// handle nested lists // handle nested lists
$endlessloop = 0; $endlessloop = 0;
while (strpos($Text, "[/list]") and strpos($Text, "[list") and (++$endlessloop < 20)) { while ((strpos($Text, "[/list]") !== false) and (strpos($Text, "[list") !== false) and (++$endlessloop < 20)) {
$Text = preg_replace("/\[list\](.*?)\[\/list\]/ism", '<ul class="listbullet" style="list-style-type: circle;">$1</ul>' ,$Text); $Text = preg_replace("/\[list\](.*?)\[\/list\]/ism", '<ul class="listbullet" style="list-style-type: circle;">$1</ul>' ,$Text);
$Text = preg_replace("/\[list=\](.*?)\[\/list\]/ism", '<ul class="listnone" style="list-style-type: none;">$1</ul>' ,$Text); $Text = preg_replace("/\[list=\](.*?)\[\/list\]/ism", '<ul class="listnone" style="list-style-type: none;">$1</ul>' ,$Text);
$Text = preg_replace("/\[list=1\](.*?)\[\/list\]/ism", '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>' ,$Text); $Text = preg_replace("/\[list=1\](.*?)\[\/list\]/ism", '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>' ,$Text);
@ -194,7 +194,7 @@ function bbcode($Text,$preserve_nl = false) {
// Check for [quote] text // Check for [quote] text
// handle nested quotes // handle nested quotes
$endlessloop = 0; $endlessloop = 0;
while (strpos($Text, "[/quote]") !== false and strpos($Text, "[quote]") !== false and (++$endlessloop < 20)) while ((strpos($Text, "[/quote]") !== false) and (strpos($Text, "[quote]") !== false) and (++$endlessloop < 20))
$Text = preg_replace("/\[quote\](.*?)\[\/quote\]/ism","$QuoteLayout", $Text); $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/ism","$QuoteLayout", $Text);
// Check for [quote=Author] text // Check for [quote=Author] text
@ -203,7 +203,7 @@ function bbcode($Text,$preserve_nl = false) {
// handle nested quotes // handle nested quotes
$endlessloop = 0; $endlessloop = 0;
while (strpos($Text, "[/quote]") !== false and strpos($Text, "[quote=") !== false and (++$endlessloop < 20)) while ((strpos($Text, "[/quote]")!== false) and (strpos($Text, "[quote=") !== false) and (++$endlessloop < 20))
$Text = preg_replace("/\[quote=[\"\']*(.*?)[\"\']*\](.*?)\[\/quote\]/ism", $Text = preg_replace("/\[quote=[\"\']*(.*?)[\"\']*\](.*?)\[\/quote\]/ism",
"<blockquote><strong>" . $t_wrote . "</strong> $2</blockquote>", "<blockquote><strong>" . $t_wrote . "</strong> $2</blockquote>",
$Text); $Text);
@ -285,3 +285,4 @@ function bbcode($Text,$preserve_nl = false) {
return $Text; return $Text;
} }

View file

@ -6,6 +6,11 @@
function localize_item(&$item){ function localize_item(&$item){
$Text = $item['body']; $Text = $item['body'];
// find private image (w/data url) if present and convert image
// link to a magic-auth redirect.
$saved_image = ''; $saved_image = '';
$img_start = strpos($Text,'[img]data:'); $img_start = strpos($Text,'[img]data:');
$img_end = strpos($Text,'[/img]'); $img_end = strpos($Text,'[/img]');
@ -403,6 +408,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
$toplevelprivate = false; $toplevelprivate = false;
// Take care of author collapsing and comment collapsing // Take care of author collapsing and comment collapsing
// (author collapsing is currently disabled)
// If a single author has more than 3 consecutive top-level posts, squash the remaining ones. // If a single author has more than 3 consecutive top-level posts, squash the remaining ones.
// If there are more than two comments, squash all but the last 2. // If there are more than two comments, squash all but the last 2.
@ -410,7 +416,9 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
$toplevelprivate = (($toplevelpost && $item['private']) ? true : false); $toplevelprivate = (($toplevelpost && $item['private']) ? true : false);
$item_writeable = (($item['writable'] || $item['self']) ? true : false); $item_writeable = (($item['writable'] || $item['self']) ? true : false);
/*if($blowhard == $item['cid'] && (! $item['self']) && ($mode != 'profile') && ($mode != 'notes')) { // DISABLED
/*
if($blowhard == $item['cid'] && (! $item['self']) && ($mode != 'profile') && ($mode != 'notes')) {
$blowhard_count ++; $blowhard_count ++;
if($blowhard_count == 3) { if($blowhard_count == 3) {
$o .= '<div class="icollapse-wrapper fakelink" id="icollapse-wrapper-' . $item['parent'] $o .= '<div class="icollapse-wrapper fakelink" id="icollapse-wrapper-' . $item['parent']
@ -424,7 +432,9 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
if($blowhard_count >= 3) if($blowhard_count >= 3)
$o .= '</div>'; $o .= '</div>';
$blowhard_count = 0; $blowhard_count = 0;
}*/ }
// END DISABLED
*/
$comments_seen = 0; $comments_seen = 0;
$comments_collapsed = false; $comments_collapsed = false;

View file

@ -1,6 +1,7 @@
<?php <?php
require_once("boot.php"); require_once("boot.php");
require_once('include/queue_fn.php'); require_once('include/queue_fn.php');
require_once('include/html2plain.php');
function delivery_run($argv, $argc){ function delivery_run($argv, $argc){
global $a, $db; global $a, $db;
@ -432,9 +433,19 @@ function delivery_run($argv, $argc){
if($reply_to) if($reply_to)
$headers .= 'Reply-to: ' . $reply_to . "\n"; $headers .= 'Reply-to: ' . $reply_to . "\n";
$headers .= 'Message-id: <' . $it['uri'] . '>' . "\n";
// for testing purposes: Collect exported mails
$file = tempnam("/tmp/friendica/", "mail-out-");
file_put_contents($file, json_encode($it));
$headers .= 'Message-Id: <' . iri2msgid($it['uri']). '>' . "\n";
//logger("Mail: uri: ".$it['uri']." parent-uri ".$it['parent-uri'], LOGGER_DEBUG);
//logger("Mail: Data: ".print_r($it, true), LOGGER_DEBUG);
//logger("Mail: Data: ".print_r($it, true), LOGGER_DATA);
if($it['uri'] !== $it['parent-uri']) { if($it['uri'] !== $it['parent-uri']) {
$header .= 'References: <' . $it['parent-uri'] . '>' . "\n"; $headers .= 'References: <' . iri2msgid($it['parent-uri']) . '>' . "\n";
if(! strlen($it['title'])) { if(! strlen($it['title'])) {
$r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1", $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1",
dbesc($it['parent-uri']) dbesc($it['parent-uri'])
@ -450,13 +461,16 @@ function delivery_run($argv, $argc){
} }
} }
} }
$headers .= 'MIME-Version: 1.0' . "\n"; /*$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n"; //$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";
$headers .= 'Content-Type: text/plain; charset=UTF-8' . "\n";
$headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n"; $headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n";
$html = prepare_body($it); $html = prepare_body($it);
$message = '<html><body>' . $html . '</body></html>'; //$message = '<html><body>' . $html . '</body></html>';
$message = html2plain($html);
logger('notifier: email delivery to ' . $addr); logger('notifier: email delivery to ' . $addr);
mail($addr, $subject, $message, $headers); mail($addr, $subject, $message, $headers);*/
email_send($addr, $subject, $headers, $it);
} }
break; break;

View file

@ -1,4 +1,5 @@
<?php <?php
require_once('include/html2plain.php');
function email_connect($mailbox,$username,$password) { function email_connect($mailbox,$username,$password) {
if(! function_exists('imap_open')) if(! function_exists('imap_open'))
@ -79,15 +80,32 @@ function email_get_msg($mbox,$uid) {
if(! $struc) if(! $struc)
return $ret; return $ret;
// for testing purposes: Collect imported mails
// $file = tempnam("/tmp/friendica2/", "mail-in-");
// file_put_contents($file, json_encode($struc));
if(! $struc->parts) { if(! $struc->parts) {
$ret['body'] = email_get_part($mbox,$uid,$struc,0); $ret['body'] = email_get_part($mbox,$uid,$struc,0, 'html');
if (trim($ret['body']) == '')
$ret['body'] = email_get_part($mbox,$uid,$struc,0, 'plain');
else
$ret['body'] = html2bbcode($ret['body']);
} }
else { else {
$text = '';
$html = '';
foreach($struc->parts as $ptop => $p) { foreach($struc->parts as $ptop => $p) {
$x = email_get_part($mbox,$uid,$p,$ptop + 1); $x = email_get_part($mbox,$uid,$p,$ptop + 1, 'plain');
if($x) if($x) $text .= $x;
$ret['body'] = $x;
$x = email_get_part($mbox,$uid,$p,$ptop + 1, 'html');
if($x) $html .= $x;
} }
if (trim($html) != '')
$ret['body'] = html2bbcode($html);
else
$ret['body'] = $text;
} }
return $ret; return $ret;
} }
@ -95,74 +113,81 @@ function email_get_msg($mbox,$uid) {
// At the moment - only return plain/text. // At the moment - only return plain/text.
// Later we'll repackage inline images as data url's and make the HTML safe // Later we'll repackage inline images as data url's and make the HTML safe
function email_get_part($mbox,$uid,$p,$partno) { function email_get_part($mbox,$uid,$p,$partno, $subtype) {
// $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple // $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple
global $htmlmsg,$plainmsg,$charset,$attachments; global $htmlmsg,$plainmsg,$charset,$attachments;
echo $partno; //echo $partno."\n";
// DECODE DATA // DECODE DATA
$data = ($partno) $data = ($partno)
? @imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK) ? @imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK)
: @imap_body($mbox,$uid,FT_UID|FT_PEEK); : @imap_body($mbox,$uid,FT_UID|FT_PEEK);
// Any part may be encoded, even plain text messages, so check everything. // for testing purposes: Collect imported mails
if ($p->encoding==4) // $file = tempnam("/tmp/friendica2/", "mail-body-");
$data = quoted_printable_decode($data); // file_put_contents($file, $data);
elseif ($p->encoding==3)
$data = base64_decode($data);
// PARAMETERS // Any part may be encoded, even plain text messages, so check everything.
// get all parameters, like charset, filenames of attachments, etc. if ($p->encoding==4)
$params = array(); $data = quoted_printable_decode($data);
if ($p->parameters) elseif ($p->encoding==3)
foreach ($p->parameters as $x) $data = base64_decode($data);
$params[strtolower($x->attribute)] = $x->value;
if ($p->dparameters)
foreach ($p->dparameters as $x)
$params[strtolower($x->attribute)] = $x->value;
// ATTACHMENT // PARAMETERS
// Any part with a filename is an attachment, // get all parameters, like charset, filenames of attachments, etc.
// so an attached text file (type 0) is not mistaken as the message. $params = array();
if ($p->parameters)
foreach ($p->parameters as $x)
$params[strtolower($x->attribute)] = $x->value;
if (isset($p->dparameters) and $p->dparameters)
foreach ($p->dparameters as $x)
$params[strtolower($x->attribute)] = $x->value;
if ($params['filename'] || $params['name']) { // ATTACHMENT
// filename may be given as 'Filename' or 'Name' or both // Any part with a filename is an attachment,
$filename = ($params['filename'])? $params['filename'] : $params['name']; // so an attached text file (type 0) is not mistaken as the message.
// filename may be encoded, so see imap_mime_header_decode()
$attachments[$filename] = $data; // this is a problem if two files have same name
}
// TEXT if ((isset($params['filename']) and $params['filename']) || (isset($params['name']) and $params['name'])) {
if ($p->type == 0 && $data) { // filename may be given as 'Filename' or 'Name' or both
// Messages may be split in different parts because of inline attachments, $filename = ($params['filename'])? $params['filename'] : $params['name'];
// so append parts together with blank row. // filename may be encoded, so see imap_mime_header_decode()
if (strtolower($p->subtype)=='plain') $attachments[$filename] = $data; // this is a problem if two files have same name
return (trim($data) ."\n\n"); }
else
// TEXT
if ($p->type == 0 && $data) {
// Messages may be split in different parts because of inline attachments,
// so append parts together with blank row.
if (strtolower($p->subtype)==$subtype) {
$data = iconv($params['charset'], 'UTF-8//IGNORE', $data);
return (trim($data) ."\n\n");
} else
$data = ''; $data = '';
// $htmlmsg .= $data ."<br><br>"; // $htmlmsg .= $data ."<br><br>";
$charset = $params['charset']; // assume all parts are same charset $charset = $params['charset']; // assume all parts are same charset
} }
// EMBEDDED MESSAGE // EMBEDDED MESSAGE
// Many bounce notifications embed the original message as type 2, // Many bounce notifications embed the original message as type 2,
// but AOL uses type 1 (multipart), which is not handled here. // but AOL uses type 1 (multipart), which is not handled here.
// There are no PHP functions to parse embedded messages, // There are no PHP functions to parse embedded messages,
// so this just appends the raw source to the main message. // so this just appends the raw source to the main message.
// elseif ($p->type==2 && $data) { // elseif ($p->type==2 && $data) {
// $plainmsg .= $data."\n\n"; // $plainmsg .= $data."\n\n";
// } // }
// SUBPART RECURSION // SUBPART RECURSION
if ($p->parts) { if (isset($p->parts) and $p->parts) {
foreach ($p->parts as $partno0=>$p2) { $x = "";
$x = email_get_part($mbox,$uid,$p2,$partno . '.' . ($partno0+1)); // 1.2, 1.2.1, etc. foreach ($p->parts as $partno0=>$p2) {
if($x) $x .= email_get_part($mbox,$uid,$p2,$partno . '.' . ($partno0+1), $subtype); // 1.2, 1.2.1, etc.
return $x; //if($x)
// return $x;
} }
} return $x;
}
} }
@ -218,4 +243,51 @@ function email_header_encode($in_str, $charset) {
return $out_str; return $out_str;
} }
function email_send($addr, $subject, $headers, $item) {
//$headers .= 'MIME-Version: 1.0' . "\n";
//$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";
//$headers .= 'Content-Type: text/plain; charset=UTF-8' . "\n";
//$headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n";
$part = uniqid("", true);
$html = prepare_body($item);
$headers .= "Mime-Version: 1.0\n";
$headers .= 'Content-Type: multipart/alternative; boundary="=_'.$part.'"'."\n\n";
$body = "\n--=_".$part."\n";
$body .= "Content-Transfer-Encoding: 8bit\n";
$body .= "Content-Type: text/plain; charset=utf-8; format=flowed\n\n";
$body .= html2plain($html)."\n";
$body .= "--=_".$part."\n";
$body .= "Content-Transfer-Encoding: 8bit\n";
$body .= "Content-Type: text/html; charset=utf-8\n\n";
$body .= '<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">'.$html."</body></html>\n";
$body .= "--=_".$part."--";
//$message = '<html><body>' . $html . '</body></html>';
//$message = html2plain($html);
logger('notifier: email delivery to ' . $addr);
mail($addr, $subject, $body, $headers);
}
function iri2msgid($iri) {
if (!strpos($iri, "@"))
$msgid = preg_replace("/urn:(\S+):(\S+)\.(\S+):(\d+):(\S+)/i", "urn!$1!$4!$5@$2.$3", $iri);
else
$msgid = $iri;
return($msgid);
}
function msgid2iri($msgid) {
if (strpos($msgid, "@"))
$iri = preg_replace("/urn!(\S+)!(\d+)!(\S+)@(\S+)\.(\S+)/i", "urn:$1:$4.$5:$2:$3", $msgid);
else
$iri = $msgid;
return($iri);
}

View file

@ -27,7 +27,7 @@ function notification($params) {
if($params['type'] == NOTIFY_MAIL) { if($params['type'] == NOTIFY_MAIL) {
$subject = sprintf( t('New mail received at %s'),$sitename); $subject = sprintf( t('[Friendica:Notify] New mail received at %s'),$sitename);
$preamble = sprintf( t('%s sent you a new private message at %s.'),$params['source_name'],$sitename); $preamble = sprintf( t('%s sent you a new private message at %s.'),$params['source_name'],$sitename);
$epreamble = sprintf( t('%s sent you %s.'),'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a private message') . '[/url]'); $epreamble = sprintf( t('%s sent you %s.'),'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a private message') . '[/url]');
@ -38,7 +38,7 @@ function notification($params) {
} }
if($params['type'] == NOTIFY_COMMENT) { if($params['type'] == NOTIFY_COMMENT) {
logger("notification: params = " . print_r($params, true), LOGGER_DEBUG); // logger("notification: params = " . print_r($params, true), LOGGER_DEBUG);
$parent_id = $params['parent']; $parent_id = $params['parent'];
@ -46,7 +46,8 @@ function notification($params) {
// So, we cannot have different subjects for notifications of the same thread. // So, we cannot have different subjects for notifications of the same thread.
// Before this we have the name of the replier on the subject rendering // Before this we have the name of the replier on the subject rendering
// differents subjects for messages on the same thread. // differents subjects for messages on the same thread.
$subject = sprintf( t('Someone commented on item #%d at %s'), $parent_id, $sitename);
$subject = sprintf( t('[Friendica:Notify] Comment to conversation #%d by %s'), $parent_id, $params['source_name']);
$preamble = sprintf( t('%s commented on an item/conversation you have been following.'), $params['source_name']); $preamble = sprintf( t('%s commented on an item/conversation you have been following.'), $params['source_name']);
$epreamble = sprintf( t('%s commented in %s.'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a watched conversation') . '[/url]'); $epreamble = sprintf( t('%s commented in %s.'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a watched conversation') . '[/url]');
@ -57,7 +58,10 @@ function notification($params) {
} }
if($params['type'] == NOTIFY_WALL) { if($params['type'] == NOTIFY_WALL) {
$preamble = $subject = sprintf( t('%s posted to your profile wall at %s') , $params['source_name'], $sitename); $subject = sprintf( t('[Friendica:Notify] %s posted to your profile wall') , $params['source_name']);
$preamble = sprintf( t('%s posted to your profile wall at %s') , $params['source_name'], $sitename);
$epreamble = sprintf( t('%s posted to %s') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('your profile wall.') . '[/url]'); $epreamble = sprintf( t('%s posted to %s') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('your profile wall.') . '[/url]');
$sitelink = t('Please visit %s to view and/or reply to the conversation.'); $sitelink = t('Please visit %s to view and/or reply to the conversation.');
@ -67,7 +71,8 @@ function notification($params) {
} }
if($params['type'] == NOTIFY_TAGSELF) { if($params['type'] == NOTIFY_TAGSELF) {
$preamble = $subject = sprintf( t('%s tagged you at %s') , $params['source_name'], $sitename); $subject = sprintf( t('[Friendica:Notify] %s tagged you') , $params['source_name']);
$preamble = sprintf( t('%s tagged you at %s') , $params['source_name'], $sitename);
$epreamble = sprintf( t('%s %s.') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['link'] . ']' . t('tagged you') . '[/url]'); $epreamble = sprintf( t('%s %s.') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['link'] . ']' . t('tagged you') . '[/url]');
$sitelink = t('Please visit %s to view and/or reply to the conversation.'); $sitelink = t('Please visit %s to view and/or reply to the conversation.');
@ -77,7 +82,8 @@ function notification($params) {
} }
if($params['type'] == NOTIFY_TAGSHARE) { if($params['type'] == NOTIFY_TAGSHARE) {
$preamble = $subject = sprintf( t('%s tagged your post at %s') , $params['source_name'], $sitename); $subject = sprintf( t('[Friendica:Notify] %s tagged your post') , $params['source_name']);
$preamble = sprintf( t('%s tagged your post at %s') , $params['source_name'], $sitename);
$epreamble = sprintf( t('%s tagged %s') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('your post') . '[/url]' ); $epreamble = sprintf( t('%s tagged %s') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('your post') . '[/url]' );
$sitelink = t('Please visit %s to view and/or reply to the conversation.'); $sitelink = t('Please visit %s to view and/or reply to the conversation.');
@ -87,7 +93,7 @@ function notification($params) {
} }
if($params['type'] == NOTIFY_INTRO) { if($params['type'] == NOTIFY_INTRO) {
$subject = sprintf( t('Introduction received at %s'), $sitename); $subject = sprintf( t('[Friendica:Notify] Introduction received'));
$preamble = sprintf( t('You\'ve received an introduction from \'%s\' at %s'), $params['source_name'], $sitename); $preamble = sprintf( t('You\'ve received an introduction from \'%s\' at %s'), $params['source_name'], $sitename);
$epreamble = sprintf( t('You\'ve received %s from %s.'), '[url=$itemlink]' . t('an introduction') . '[/url]' , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]'); $epreamble = sprintf( t('You\'ve received %s from %s.'), '[url=$itemlink]' . t('an introduction') . '[/url]' , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
$body = sprintf( t('You may visit their profile at %s'),$params['source_link']); $body = sprintf( t('You may visit their profile at %s'),$params['source_link']);
@ -99,7 +105,7 @@ function notification($params) {
} }
if($params['type'] == NOTIFY_SUGGEST) { if($params['type'] == NOTIFY_SUGGEST) {
$subject = sprintf( t('Friend suggestion received at %s'), $sitename); $subject = sprintf( t('[Friendica:Notify] Friend suggestion received'));
$preamble = sprintf( t('You\'ve received a friend suggestion from \'%s\' at %s'), $params['source_name'], $sitename); $preamble = sprintf( t('You\'ve received a friend suggestion from \'%s\' at %s'), $params['source_name'], $sitename);
$epreamble = sprintf( t('You\'ve received %s for %s from %s.'), $epreamble = sprintf( t('You\'ve received %s for %s from %s.'),
'[url=$itemlink]' . t('a friend suggestion') . '[/url]', '[url=$itemlink]' . t('a friend suggestion') . '[/url]',
@ -135,20 +141,34 @@ function notification($params) {
} while($dups == true); } while($dups == true);
$datarray = array();
$datarray['hash'] = $hash;
$datarray['name'] = $params['source_name'];
$datarray['url'] = $params['source_link'];
$datarray['photo'] = $params['source_photo'];
$datarray['date'] = datetime_convert();
$datarray['uid'] = $params['uid'];
$datarray['link'] = $itemlink;
$datarray['type'] = $params['type'];
$datarray['verb'] = $params['verb'];
$datarray['otype'] = $params['otype'];
call_hooks('enotify_store', $datarray);
// create notification entry in DB // create notification entry in DB
$r = q("insert into notify (hash,name,url,photo,date,uid,link,type,verb,otype) $r = q("insert into notify (hash,name,url,photo,date,uid,link,type,verb,otype)
values('%s','%s','%s','%s','%s',%d,'%s',%d,'%s','%s')", values('%s','%s','%s','%s','%s',%d,'%s',%d,'%s','%s')",
dbesc($hash), dbesc($datarray['hash']),
dbesc($params['source_name']), dbesc($datarray['name']),
dbesc($params['source_link']), dbesc($datarray['url']),
dbesc($params['source_photo']), dbesc($datarray['photo']),
dbesc(datetime_convert()), dbesc($datarray['date']),
intval($params['uid']), intval($datarray['uid']),
dbesc($itemlink), dbesc($datarray['link']),
intval($params['type']), intval($datarray['type']),
dbesc($params['verb']), dbesc($datarray['verb']),
dbesc($params['otype']) dbesc($datarray['otype'])
); );
$r = q("select id from notify where hash = '%s' and uid = %d limit 1", $r = q("select id from notify where hash = '%s' and uid = %d limit 1",
@ -217,44 +237,71 @@ intval($params['uid']), LOGGER_DEBUG);
$htmlversion = html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), $htmlversion = html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"),
"<br />\n",$body)))); "<br />\n",$body))));
$datarray = array();
$datarray['banner'] = $banner;
$datarray['product'] = $product;
$datarray['preamble'] = $preamble;
$datarray['sitename'] = $sitename;
$datarray['siteurl'] = $siteurl;
$datarray['type'] = $params['type'];
$datarray['parent'] = $params['parent'];
$datarray['source_name'] = $params['source_name'];
$datarray['source_link'] = $params['source_link'];
$datarray['source_photo'] = $params['source_photo'];
$datarray['uid'] = $params['uid'];
$datarray['username'] = $params['to_name'];
$datarray['hsitelink'] = $hsitelink;
$datarray['tsitelink'] = $tsitelink;
$datarray['hitemlink'] = '<a href="' . $itemlink . '">' . $itemlink . '</a>';
$datarray['titemlink'] = $itemlink;
$datarray['thanks'] = $thanks;
$datarray['site_admin'] = $site_admin;
$datarray['title'] = stripslashes($title);
$datarray['htmlversion'] = $htmlversion;
$datarray['textversion'] = $textversion;
$datarray['subject'] = $subject;
$datarray['headers'] = $additional_mail_header;
call_hooks('enotify_mail', $datarray);
// load the template for private message notifications // load the template for private message notifications
$tpl = get_markup_template('email_notify_html.tpl'); $tpl = get_markup_template('email_notify_html.tpl');
$email_html_body = replace_macros($tpl,array( $email_html_body = replace_macros($tpl,array(
'$banner' => $banner, '$banner' => $datarray['banner'],
'$product' => $product, '$product' => $datarray['product'],
'$preamble' => $preamble, '$preamble' => $datarray['preamble'],
'$sitename' => $sitename, '$sitename' => $datarray['sitename'],
'$siteurl' => $siteurl, '$siteurl' => $datarray['siteurl'],
'$source_name' => $params['source_name'], '$source_name' => $datarray['source_name'],
'$source_link' => $params['source_link'], '$source_link' => $datarray['source_link'],
'$source_photo' => $params['source_photo'], '$source_photo' => $datarray['source_photo'],
'$username' => $params['to_name'], '$username' => $datarray['to_name'],
'$hsitelink' => $hsitelink, '$hsitelink' => $datarray['hsitelink'],
'$itemlink' => '<a href="' . $itemlink . '">' . $itemlink . '</a>', '$hitemlink' => $datarray['hitemlink'],
'$thanks' => $thanks, '$thanks' => $datarray['thanks'],
'$site_admin' => $site_admin, '$site_admin' => $datarray['site_admin'],
'$title' => stripslashes($title), '$title' => $datarray['title'],
'$htmlversion' => $htmlversion, '$htmlversion' => $datarray['htmlversion'],
)); ));
// load the template for private message notifications // load the template for private message notifications
$tpl = get_markup_template('email_notify_text.tpl'); $tpl = get_markup_template('email_notify_text.tpl');
$email_text_body = replace_macros($tpl,array( $email_text_body = replace_macros($tpl,array(
'$banner' => $banner, '$banner' => $datarray['banner'],
'$product' => $product, '$product' => $datarray['product'],
'$preamble' => $preamble, '$preamble' => $datarray['preamble'],
'$sitename' => $sitename, '$sitename' => $datarray['sitename'],
'$siteurl' => $siteurl, '$siteurl' => $datarray['siteurl'],
'$source_name' => $params['source_name'], '$source_name' => $datarray['source_name'],
'$source_link' => $params['source_link'], '$source_link' => $datarray['source_link'],
'$source_photo' => $params['source_photo'], '$source_photo' => $datarray['source_photo'],
'$username' => $params['to_name'], '$username' => $datarray['to_name'],
'$tsitelink' => $tsitelink, '$tsitelink' => $datarray['tsitelink'],
'$itemlink' => $itemlink, '$titemlink' => $datarray['titemlink'],
'$thanks' => $thanks, '$thanks' => $datarray['thanks'],
'$site_admin' => $site_admin, '$site_admin' => $datarray['site_admin'],
'$title' => stripslashes($title), '$title' => $datarray['title'],
'$textversion' => $textversion, '$textversion' => $datarray['textversion'],
)); ));
// logger('text: ' . $email_text_body); // logger('text: ' . $email_text_body);
@ -266,10 +313,10 @@ intval($params['uid']), LOGGER_DEBUG);
'fromEmail' => $sender_email, 'fromEmail' => $sender_email,
'replyTo' => $sender_email, 'replyTo' => $sender_email,
'toEmail' => $params['to_email'], 'toEmail' => $params['to_email'],
'messageSubject' => $subject, 'messageSubject' => $datarray['subject'],
'htmlVersion' => $email_html_body, 'htmlVersion' => $email_html_body,
'textVersion' => $email_text_body, 'textVersion' => $email_text_body,
'additionalMailHeader' => $additional_mail_header, 'additionalMailHeader' => $datarray['headers'],
)); ));
} }

View file

@ -258,7 +258,7 @@ function html2bbcode($message)
"[hr]\n", "[hr]\n",
"\n[list", "\n[list",
"[/list]\n", "[/list]\n",
"\n[/list]", "\n[/",
"[list]\n", "[list]\n",
"[list=1]\n", "[list=1]\n",
"\n[*]"), "\n[*]"),
@ -268,7 +268,7 @@ function html2bbcode($message)
"[hr]", "[hr]",
"[list", "[list",
"[/list]", "[/list]",
"[/list]", "[/",
"[list]", "[list]",
"[list=1]", "[list=1]",
"[*]"), "[*]"),

180
include/html2plain.php Normal file
View file

@ -0,0 +1,180 @@
<?php
require_once "html2bbcode.php";
function breaklines($line, $level)
{
$wraplen = 75-$level;
$newlines = array();
do {
$oldline = $line;
$subline = substr($line, 0, $wraplen);
$pos = strrpos($subline, ' ');
if ($pos == 0)
$pos = strpos($line, ' ');
if (($pos > 0) and strlen($line) > $wraplen) {
$newline = trim(substr($line, 0, $pos));
if ($level > 0)
$newline = str_repeat(">", $level).' '.$newline;
$newlines[] = $newline." ";
$line = substr($line, $pos+1);
}
} while ((strlen($line) > $wraplen) and !($oldline == $line));
if ($level > 0)
$line = str_repeat(">", $level).' '.$line;
$newlines[] = $line;
return(implode($newlines, "\n"));
}
function quotelevel($message)
{
$lines = explode("\n", $message);
$newlines = array();
$level = 0;
foreach($lines as $line) {;
$line = trim($line);
$startquote = false;
while (strpos("*".$line, '[quote]') > 0) {
$level++;
$pos = strpos($line, '[quote]');
$line = substr($line, 0, $pos).substr($line, $pos+7);
$startquote = true;
}
$currlevel = $level;
while (strpos("*".$line, '[/quote]') > 0) {
$level--;
if ($level < 0)
$level = 0;
$pos = strpos($line, '[/quote]');
$line = substr($line, 0, $pos).substr($line, $pos+8);
}
if (!$startquote or ($line != ''))
$newlines[] = breaklines($line, $currlevel);
}
return(implode($newlines, "\n"));
}
function html2plain($html)
{
global $lang;
$message = str_replace("\r", "", $html);
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$message = mb_convert_encoding($message, 'HTML-ENTITIES', "UTF-8");
@$doc->loadHTML($message);
$xpath = new DomXPath($doc);
$list = $xpath->query("//pre");
foreach ($list as $node) {
$node->nodeValue = str_replace("\n", "\r", $node->nodeValue);
}
$message = $doc->saveHTML();
$message = str_replace(array("\n<", ">\n", "\r", "\n", "\xC3\x82\xC2\xA0"), array("<", ">", "<br>", " ", ""), $message);
$message = preg_replace('= [\s]*=i', " ", $message);
// nach <a href="...">...</a> suchen, die ... miteinander vergleichen und bei Gleichheit durch ein einzelnes ... ersetzen.
$pattern = '/<a.*?href="(.*?)".*?>(.*?)<\/a>/is';
preg_match_all($pattern, $message, $result, PREG_SET_ORDER);
foreach ($result as $treffer) {
if ($treffer[1] == $treffer[2]) {
$search = '<a href="'.$treffer[1].'" target="_blank">'.$treffer[1].'</a>';
$message = str_replace($search, $treffer[1], $message);
}
}
@$doc->loadHTML($message);
node2bbcode($doc, 'html', array(), '', '');
node2bbcode($doc, 'body', array(), '', '');
// MyBB-Auszeichnungen
node2bbcode($doc, 'span', array('style'=>'text-decoration: underline;'), '_', '_');
node2bbcode($doc, 'span', array('style'=>'font-style: italic;'), '/', '/');
node2bbcode($doc, 'span', array('style'=>'font-weight: bold;'), '*', '*');
node2bbcode($doc, 'strong', array(), '*', '*');
node2bbcode($doc, 'b', array(), '*', '*');
node2bbcode($doc, 'i', array(), '/', '/');
node2bbcode($doc, 'u', array(), '_', '_');
node2bbcode($doc, 'blockquote', array(), '[quote]', "[/quote]\n");
node2bbcode($doc, 'br', array(), "\n", '');
node2bbcode($doc, 'span', array(), "", "");
node2bbcode($doc, 'pre', array(), "", "");
node2bbcode($doc, 'div', array(), "\r", "\r");
node2bbcode($doc, 'p', array(), "\n", "\n");
//node2bbcode($doc, 'ul', array(), "\n[list]", "[/list]\n");
//node2bbcode($doc, 'ol', array(), "\n[list=1]", "[/list]\n");
node2bbcode($doc, 'li', array(), "\n* ", "\n");
node2bbcode($doc, 'hr', array(), str_repeat("-", 70), "");
node2bbcode($doc, 'tr', array(), "\n", "");
node2bbcode($doc, 'td', array(), "\t", "");
node2bbcode($doc, 'h1', array(), "\n\n*", "*\n");
node2bbcode($doc, 'h2', array(), "\n\n*", "*\n");
node2bbcode($doc, 'h3', array(), "\n\n*", "*\n");
node2bbcode($doc, 'h4', array(), "\n\n*", "*\n");
node2bbcode($doc, 'h5', array(), "\n\n*", "*\n");
node2bbcode($doc, 'h6', array(), "\n\n*", "*\n");
node2bbcode($doc, 'a', array('href'=>'/(.+)/'), ' $1', '', true);
node2bbcode($doc, 'img', array('alt'=>'/(.+)/'), '$1', '');
node2bbcode($doc, 'img', array('title'=>'/(.+)/'), '$1', '');
node2bbcode($doc, 'img', array(), '', '');
node2bbcode($doc, 'img', array('src'=>'/(.+)/'), '[img]$1', '[/img]');
$message = $doc->saveHTML();
$message = str_replace("[img]", "", $message);
$message = str_replace("[/img]", "", $message);
// was ersetze ich da?
// Irgendein stoerrisches UTF-Zeug
$message = str_replace(chr(194).chr(160), ' ', $message);
$message = str_replace("&nbsp;", " ", $message);
// Aufeinanderfolgende DIVs
$message = preg_replace('=\r *\r=i', "\n", $message);
$message = str_replace("\r", "\n", $message);
$message = strip_tags($message);
$message = html_entity_decode($message, ENT_QUOTES, 'UTF-8');
do {
$oldmessage = $message;
$message = str_replace("\n\n\n", "\n\n", $message);
} while ($oldmessage != $message);
$message = quotelevel(trim($message));
return(trim($message));
}
?>

View file

@ -17,7 +17,7 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_
if (!is_null($accept_content)){ if (!is_null($accept_content)){
curl_setopt($ch,CURLOPT_HTTPHEADER, array ( curl_setopt($ch,CURLOPT_HTTPHEADER, array (
"Accept: "+$accept_content "Accept: " . $accept_content
)); ));
} }
@ -60,6 +60,7 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_
$curl_info = @curl_getinfo($ch); $curl_info = @curl_getinfo($ch);
$http_code = $curl_info['http_code']; $http_code = $curl_info['http_code'];
// logger('fetch_url:' . $http_code . ' data: ' . $s);
$header = ''; $header = '';
// Pull out multiple headers, e.g. proxy and continuation headers // Pull out multiple headers, e.g. proxy and continuation headers
@ -74,11 +75,13 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_
if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) { if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) {
$matches = array(); $matches = array();
preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
$url = trim(array_pop($matches)); $newurl = trim(array_pop($matches));
$url_parsed = @parse_url($url); if(strpos($newurl,'/') === 0)
$newurl = $url . $newurl;
$url_parsed = @parse_url($newurl);
if (isset($url_parsed)) { if (isset($url_parsed)) {
$redirects++; $redirects++;
return fetch_url($url,$binary,$redirects,$timeout); return fetch_url($newurl,$binary,$redirects,$timeout);
} }
} }
@ -163,11 +166,13 @@ function post_url($url,$params, $headers = null, &$redirects = 0, $timeout = 0)
if($http_code == 301 || $http_code == 302 || $http_code == 303) { if($http_code == 301 || $http_code == 302 || $http_code == 303) {
$matches = array(); $matches = array();
preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
$url = trim(array_pop($matches)); $newurl = trim(array_pop($matches));
$url_parsed = @parse_url($url); if(strpos($newurl,'/') === 0)
$newurl = $url . $newurl;
$url_parsed = @parse_url($newurl);
if (isset($url_parsed)) { if (isset($url_parsed)) {
$redirects++; $redirects++;
return post_url($url,$params,$headers,$redirects,$timeout); return fetch_url($newurl,$binary,$redirects,$timeout);
} }
} }
$a->set_curl_code($http_code); $a->set_curl_code($http_code);

View file

@ -2,6 +2,7 @@
require_once("boot.php"); require_once("boot.php");
require_once('include/queue_fn.php'); require_once('include/queue_fn.php');
require_once('include/html2plain.php');
/* /*
* This file was at one time responsible for doing all deliveries, but this caused * This file was at one time responsible for doing all deliveries, but this caused
@ -646,10 +647,14 @@ function notifier_run($argv, $argc){
if($reply_to) if($reply_to)
$headers .= 'Reply-to: ' . $reply_to . "\n"; $headers .= 'Reply-to: ' . $reply_to . "\n";
$headers .= 'Message-id: <' . $it['uri'] . '>' . "\n"; // for testing purposes: Collect exported mails
$file = tempnam("/tmp/friendica/", "mail-out2-");
file_put_contents($file, json_encode($it));
$headers .= 'Message-Id: <' . iri2msgid($it['uri']) . '>' . "\n";
if($it['uri'] !== $it['parent-uri']) { if($it['uri'] !== $it['parent-uri']) {
$header .= 'References: <' . $it['parent-uri'] . '>' . "\n"; $headers .= 'References: <' . iri2msgid($it['parent-uri']) . '>' . "\n";
if(! strlen($it['title'])) { if(! strlen($it['title'])) {
$r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1", $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1",
dbesc($it['parent-uri']) dbesc($it['parent-uri'])
@ -666,13 +671,16 @@ function notifier_run($argv, $argc){
} }
} }
$headers .= 'MIME-Version: 1.0' . "\n"; /*$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n"; //$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";
$headers .= 'Content-Type: text/plain; charset=UTF-8' . "\n";
$headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n"; $headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n";
$html = prepare_body($it); $html = prepare_body($it);
$message = '<html><body>' . $html . '</body></html>'; //$message = '<html><body>' . $html . '</body></html>';
$message = html2plain($html);
logger('notifier: email delivery to ' . $addr); logger('notifier: email delivery to ' . $addr);
mail($addr, $subject, $message, $headers); mail($addr, $subject, $message, $headers);*/
email_send($addr, $subject, $headers, $it);
} }
break; break;
case NETWORK_DIASPORA: case NETWORK_DIASPORA:

View file

@ -225,9 +225,16 @@ function get_theme_info($theme){
'description' => "", 'description' => "",
'author' => array(), 'author' => array(),
'maintainer' => array(), 'maintainer' => array(),
'version' => "" 'version' => "",
'experimental' => false,
'unsupported' => false
); );
if(file_exists("view/theme/$theme/experimental"))
$info['experimental'] = true;
if(file_exists("view/theme/$theme/unsupported"))
$info['unsupported'] = true;
if (!is_file("view/theme/$theme/theme.php")) return $info; if (!is_file("view/theme/$theme/theme.php")) return $info;
$f = file_get_contents("view/theme/$theme/theme.php"); $f = file_get_contents("view/theme/$theme/theme.php");

View file

@ -1,6 +1,7 @@
<?php <?php
require_once("boot.php"); require_once("boot.php");
require_once("include/quoteconvert.php");
function poller_run($argv, $argc){ function poller_run($argv, $argc){
@ -419,13 +420,13 @@ function poller_run($argv, $argc){
// look for a 'references' header and try and match with a parent item we have locally. // look for a 'references' header and try and match with a parent item we have locally.
$raw_refs = ((x($headers,'references')) ? str_replace("\t",'',$headers['references']) : ''); $raw_refs = ((x($headers,'references')) ? str_replace("\t",'',$headers['references']) : '');
$datarray['uri'] = trim($meta->message_id,'<>'); $datarray['uri'] = msgid2iri(trim($meta->message_id,'<>'));
if($raw_refs) { if($raw_refs) {
$refs_arr = explode(' ', $raw_refs); $refs_arr = explode(' ', $raw_refs);
if(count($refs_arr)) { if(count($refs_arr)) {
for($x = 0; $x < count($refs_arr); $x ++) for($x = 0; $x < count($refs_arr); $x ++)
$refs_arr[$x] = "'" . str_replace(array('<','>',' '),array('','',''),dbesc($refs_arr[$x])) . "'"; $refs_arr[$x] = "'" . msgid2iri(str_replace(array('<','>',' '),array('','',''),dbesc($refs_arr[$x]))) . "'";
} }
$qstr = implode(',',$refs_arr); $qstr = implode(',',$refs_arr);
$r = q("SELECT `uri` , `parent-uri` FROM `item` WHERE `uri` IN ( $qstr ) AND `uid` = %d LIMIT 1", $r = q("SELECT `uri` , `parent-uri` FROM `item` WHERE `uri` IN ( $qstr ) AND `uid` = %d LIMIT 1",
@ -453,9 +454,39 @@ function poller_run($argv, $argc){
intval($r[0]['id']) intval($r[0]['id'])
); );
} }
switch ($mailconf[0]['action']) {
case 0:
break;
case 1:
logger("Mail: Deleting ".$msg_uid);
imap_delete($mbox, $msg_uid, FT_UID);
break;
case 2:
logger("Mail: Mark as seen ".$msg_uid);
imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
break;
case 3:
logger("Mail: Moving ".$msg_uid." to ".$mailconf[0]['movetofolder']);
imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
if ($mailconf[0]['movetofolder'] != "")
imap_mail_move($mbox, $msg_uid, $mailconf[0]['movetofolder'], FT_UID);
break;
}
continue; continue;
} }
$datarray['title'] = notags(trim($meta->subject));
// Decoding the header
$subject = imap_mime_header_decode($meta->subject);
$datarray['title'] = "";
foreach($subject as $subpart)
if ($subpart->charset != "default")
$datarray['title'] .= iconv($subpart->charset, 'UTF-8//IGNORE', $subpart->text);
else
$datarray['title'] .= $subpart->text;
$datarray['title'] = notags(trim($datarray['title']));
//$datarray['title'] = notags(trim($meta->subject));
$datarray['created'] = datetime_convert('UTC','UTC',$meta->date); $datarray['created'] = datetime_convert('UTC','UTC',$meta->date);
$r = email_get_msg($mbox,$msg_uid); $r = email_get_msg($mbox,$msg_uid);
@ -463,15 +494,24 @@ function poller_run($argv, $argc){
logger("Mail: can't fetch msg ".$msg_uid); logger("Mail: can't fetch msg ".$msg_uid);
continue; continue;
} }
$datarray['body'] = escape_tags($r['body']); $datarray['body'] = escape_tags(convertquote($r['body'], false));
logger("Mail: Importing ".$msg_uid); logger("Mail: Importing ".$msg_uid);
// some mailing lists have the original author as 'from' - add this sender info to msg body. // some mailing lists have the original author as 'from' - add this sender info to msg body.
// todo: adding a gravatar for the original author would be cool // todo: adding a gravatar for the original author would be cool
if(! stristr($meta->from,$contact['addr'])) if(! stristr($meta->from,$contact['addr'])) {
$datarray['body'] = t('From: ') . escape_tags($meta->from) . "\n\n" . $datarray['body']; $from = imap_mime_header_decode($meta->from);
$fromdecoded = "";
foreach($from as $frompart)
if ($frompart->charset != "default")
$fromdecoded .= iconv($frompart->charset, 'UTF-8//IGNORE', $frompart->text);
else
$fromdecoded .= $frompart->text;
$datarray['body'] = "[b]".t('From: ') . escape_tags($fromdecoded) . "[/b]\n\n" . $datarray['body'];
}
$datarray['uid'] = $importer_uid; $datarray['uid'] = $importer_uid;
$datarray['contact-id'] = $contact['id']; $datarray['contact-id'] = $contact['id'];
@ -493,6 +533,24 @@ function poller_run($argv, $argc){
q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1", q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1",
intval($stored_item) intval($stored_item)
); );
switch ($mailconf[0]['action']) {
case 0:
break;
case 1:
logger("Mail: Deleting ".$msg_uid);
imap_delete($mbox, $msg_uid, FT_UID);
break;
case 2:
logger("Mail: Mark as seen ".$msg_uid);
imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
break;
case 3:
logger("Mail: Moving ".$msg_uid." to ".$mailconf[0]['movetofolder']);
imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID);
if ($mailconf[0]['movetofolder'] != "")
imap_mail_move($mbox, $msg_uid, $mailconf[0]['movetofolder'], FT_UID);
break;
}
} }
} }

132
include/quoteconvert.php Normal file
View file

@ -0,0 +1,132 @@
<?php
function convertquote($body, $reply)
{
// Convert Quotes
$arrbody = explode("\n", trim($body));
$arrlevel = array();
for ($i = 0; $i < count($arrbody); $i++) {
$quotelevel = 0;
$quoteline = $arrbody[$i];
while ((strlen($quoteline)>0) and ((substr($quoteline, 0, 1) == '>')
or (substr($quoteline, 0, 1) == ' '))) {
if (substr($quoteline, 0, 1) == '>')
$quotelevel++;
$quoteline = ltrim(substr($quoteline, 1));
}
//echo $quotelevel.'*'.$quoteline."\r\n";
$arrlevel[$i] = $quotelevel;
$arrbody[$i] = $quoteline;
}
$quotelevel = 0;
$previousquote = 0;
$arrbodyquoted = array();
for ($i = 0; $i < count($arrbody); $i++) {
$previousquote = $quotelevel;
$quotelevel = $arrlevel[$i];
$currline = $arrbody[$i];
while ($previousquote < $quotelevel) {
if ($sender != '') {
$quote = "[quote title=$sender]";
$sender = '';
} else
$quote = "[quote]";
$arrbody[$i] = $quote.$arrbody[$i];
$previousquote++;
}
while ($previousquote > $quotelevel) {
$arrbody[$i] = '[/quote]'.$arrbody[$i];
$previousquote--;
}
$arrbodyquoted[] = $arrbody[$i];
}
while ($quotelevel > 0) {
$arrbodyquoted[] = '[/quote]';
$quotelevel--;
}
$body = implode("\n", $arrbodyquoted);
if (strlen($body) > 0)
$body = $body."\n\n";
if ($reply)
$body = removetofu($body);
return($body);
}
function removetofu($message)
{
$message = trim($message);
do {
$oldmessage = $message;
$message = preg_replace('=\[/quote\][\s](.*?)\[quote\]=i', '$1', $message);
$message = str_replace("[/quote][quote]", "", $message);
} while ($message != $oldmessage);
$quotes = array();
$startquotes = 0;
$start = 0;
while(($pos = strpos($message, '[quote', $start)) > 0) {
$quotes[$pos] = -1;
$start = $pos + 7;
$startquotes++;
}
$endquotes = 0;
$start = 0;
while(($pos = strpos($message, '[/quote]', $start)) > 0) {
$start = $pos + 7;
$endquotes++;
}
while ($endquotes < $startquotes) {
$message .= '[/quote]';
++$endquotes;
}
$start = 0;
while(($pos = strpos($message, '[/quote]', $start)) > 0) {
$quotes[$pos] = 1;
$start = $pos + 7;
}
if (strtolower(substr($message, -8)) != '[/quote]')
return($message);
krsort($quotes);
$quotelevel = 0;
$quotestart = 0;
foreach ($quotes as $index => $quote) {
$quotelevel += $quote;
if (($quotelevel == 0) and ($quotestart == 0))
$quotestart = $index;
}
if ($quotestart != 0) {
$message = trim(substr($message, 0, $quotestart))."\n[collapsed]\n".substr($message, $quotestart+7, -8).'[/collapsed]';
}
return($message);
}
?>

View file

@ -161,6 +161,7 @@
return $s; return $s;
} }
/*
private function _str_replace($str){ private function _str_replace($str){
#$this->search,$this->replace, #$this->search,$this->replace,
$searchs = $this->search; $searchs = $this->search;
@ -183,7 +184,7 @@
} }
return str_replace($this->search,$this->replace, $str); return str_replace($this->search,$this->replace, $str);
} }*/
public function replace($s, $r) { public function replace($s, $r) {
@ -205,7 +206,8 @@
$os = ""; $count=0; $os = ""; $count=0;
while($os!=$s && $count<10){ while($os!=$s && $count<10){
$os=$s; $count++; $os=$s; $count++;
$s = $this->_str_replace($s); //$s = $this->_str_replace($s);
$s = str_replace($this->search, $this->replace, $s);
} }
return template_unescape($s); return template_unescape($s);
} }

View file

@ -147,58 +147,8 @@ class b8_storage_frndc extends b8_storage_base
public function connect() public function connect()
{ {
return TRUE;
# Are we already connected?
if($this->connected === TRUE)
return TRUE;
# Are we using an existing passed resource?
if($this->config['connection'] === FALSE) {
# ... yes we are, but the connection is not a resource, so return an error
$this->connected = FALSE;
return self::DATABASE_CONNECTION_BAD_RESOURCE;
}
elseif($this->config['connection'] === NULL) {
# ... no we aren't so we have to connect.
if($this->_connection = mysql_connect($this->config['host'], $this->config['user'], $this->config['pass'])) {
if(mysql_select_db($this->config['database'], $this->_connection) === FALSE) {
$this->connected = FALSE;
return self::DATABASE_SELECT_ERROR . ": " . mysql_error();
}
}
else {
$this->connected = FALSE;
return self::DATABASE_CONNECTION_ERROR;
}
}
else {
# ... yes we are
$this->_connection = $this->config['connection'];
}
# Just in case ...
if($this->_connection === NULL) {
$this->connected = FALSE;
return self::DATABASE_CONNECTION_FAIL;
}
# Check to see if the wordlist table exists
if(mysql_query('DESCRIBE ' . $this->config['table_name'], $this->_connection) === FALSE) {
$this->connected = FALSE;
return self::DATABASE_TABLE_ACCESS_FAIL . ": " . mysql_error();
}
# Everything is okay and connected
$this->connected = TRUE; $this->connected = TRUE;
return TRUE;
# Let's see if this is a b8 database and the version is okay
return $this->check_database();
} }
@ -235,7 +185,7 @@ class b8_storage_frndc extends b8_storage_base
# ... and fetch the data # ... and fetch the data
$result = q(' $result = q('
SELECT token, count SELECT *
FROM ' . $this->config['table_name'] . ' FROM ' . $this->config['table_name'] . '
WHERE ' . $where . ' AND uid = ' . $uid ); WHERE ' . $where . ' AND uid = ' . $uid );
@ -256,7 +206,7 @@ class b8_storage_frndc extends b8_storage_base
$token = dbesc($token); $token = dbesc($token);
$count = dbesc($count); $count = dbesc($count);
$uid = dbesc($uid); $uid = dbesc($uid);
array_push($this->_puts, '("' . $token . '", "' . $count . '", '"' . $uid .'")'); array_push($this->_puts, '("' . $token . '", "' . $count . '", "' . $uid .'")');
} }
/** /**
@ -273,7 +223,7 @@ class b8_storage_frndc extends b8_storage_base
$token = dbesc($token); $token = dbesc($token);
$count = dbesc($count); $count = dbesc($count);
$uid = dbesc($uid); $uid = dbesc($uid);
array_push($this->_puts, '("' . $token . '", "' . $count . '", '"' . $uid .'")'); array_push($this->_puts, '("' . $token . '", "' . $count . '", "' . $uid .'")');
} }
/** /**
@ -325,7 +275,7 @@ class b8_storage_frndc extends b8_storage_base
if(count($this->_updates) > 0) { if(count($this->_updates) > 0) {
// this still needs work // this still needs work
$result = q("select * from " . $this->config['table_name'] . ' where token = '; $result = q("select * from " . $this->config['table_name'] . ' where token = ');
$result = q(' $result = q('

View file

@ -711,7 +711,7 @@ function admin_page_themes(&$a){
return; // NOTREACHED return; // NOTREACHED
} }
// display plugin details // display theme details
require_once('library/markdown.php'); require_once('library/markdown.php');
if (theme_status($themes,$theme)) { if (theme_status($themes,$theme)) {
@ -769,7 +769,9 @@ function admin_page_themes(&$a){
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$baseurl' => $a->get_baseurl(), '$baseurl' => $a->get_baseurl(),
'$function' => 'themes', '$function' => 'themes',
'$plugins' => $xthemes '$plugins' => $xthemes,
'$experimental' => t('[Experimental]'),
'$unsupported' => t('[Unsupported]')
)); ));
} }

View file

@ -504,8 +504,9 @@ function contacts_content(&$a) {
'name' => $rr['name'], 'name' => $rr['name'],
'username' => $rr['name'], 'username' => $rr['name'],
'sparkle' => $sparkle, 'sparkle' => $sparkle,
'itemurl' => $rr['url'],
'url' => $url, 'url' => $url,
'item' => $rr, 'network' => network_to_name($rr['network']),
); );
} }

View file

@ -50,6 +50,8 @@ function settings_post(&$a) {
return; return;
} }
$old_page_flags = $a->user['page-flags'];
if(($a->argc > 1) && ($a->argv[1] === 'oauth') && x($_POST,'remove')){ if(($a->argc > 1) && ($a->argv[1] === 'oauth') && x($_POST,'remove')){
$key = $_POST['remove']; $key = $_POST['remove'];
q("DELETE FROM tokens WHERE id='%s' AND uid=%d", q("DELETE FROM tokens WHERE id='%s' AND uid=%d",
@ -110,13 +112,15 @@ function settings_post(&$a) {
if(($a->argc > 1) && ($a->argv[1] == 'connectors')) { if(($a->argc > 1) && ($a->argv[1] == 'connectors')) {
if(x($_POST['imap-submit'])) { if(x($_POST['imap-submit'])) {
$mail_server = ((x($_POST,'mail_server')) ? $_POST['mail_server'] : ''); $mail_server = ((x($_POST,'mail_server')) ? $_POST['mail_server'] : '');
$mail_port = ((x($_POST,'mail_port')) ? $_POST['mail_port'] : ''); $mail_port = ((x($_POST,'mail_port')) ? $_POST['mail_port'] : '');
$mail_ssl = ((x($_POST,'mail_ssl')) ? strtolower(trim($_POST['mail_ssl'])) : ''); $mail_ssl = ((x($_POST,'mail_ssl')) ? strtolower(trim($_POST['mail_ssl'])) : '');
$mail_user = ((x($_POST,'mail_user')) ? $_POST['mail_user'] : ''); $mail_user = ((x($_POST,'mail_user')) ? $_POST['mail_user'] : '');
$mail_pass = ((x($_POST,'mail_pass')) ? trim($_POST['mail_pass']) : ''); $mail_pass = ((x($_POST,'mail_pass')) ? trim($_POST['mail_pass']) : '');
$mail_replyto = ((x($_POST,'mail_replyto')) ? $_POST['mail_replyto'] : ''); $mail_action = ((x($_POST,'mail_action')) ? trim($_POST['mail_action']) : '');
$mail_pubmail = ((x($_POST,'mail_pubmail')) ? $_POST['mail_pubmail'] : ''); $mail_movetofolder = ((x($_POST,'mail_movetofolder')) ? trim($_POST['mail_movetofolder']) : '');
$mail_replyto = ((x($_POST,'mail_replyto')) ? $_POST['mail_replyto'] : '');
$mail_pubmail = ((x($_POST,'mail_pubmail')) ? $_POST['mail_pubmail'] : '');
$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
@ -142,11 +146,14 @@ function settings_post(&$a) {
); );
} }
$r = q("UPDATE `mailacct` SET `server` = '%s', `port` = %d, `ssltype` = '%s', `user` = '%s', $r = q("UPDATE `mailacct` SET `server` = '%s', `port` = %d, `ssltype` = '%s', `user` = '%s',
`action` = %d, `movetofolder` = '%s',
`mailbox` = 'INBOX', `reply_to` = '%s', `pubmail` = %d WHERE `uid` = %d LIMIT 1", `mailbox` = 'INBOX', `reply_to` = '%s', `pubmail` = %d WHERE `uid` = %d LIMIT 1",
dbesc($mail_server), dbesc($mail_server),
intval($mail_port), intval($mail_port),
dbesc($mail_ssl), dbesc($mail_ssl),
dbesc($mail_user), dbesc($mail_user),
intval($mail_action),
dbesc($mail_movetofolder),
dbesc($mail_replyto), dbesc($mail_replyto),
intval($mail_pubmail), intval($mail_pubmail),
intval(local_user()) intval(local_user())
@ -370,7 +377,7 @@ function settings_post(&$a) {
); );
} }
if($old_visibility != $net_publish) { if(($old_visibility != $net_publish) || ($page_flags != $old_page_flags)) {
// Update global directory in background // Update global directory in background
$url = $_SESSION['my_url']; $url = $_SESSION['my_url'];
if($url && strlen(get_config('system','directory_submit_url'))) if($url && strlen(get_config('system','directory_submit_url')))
@ -561,13 +568,15 @@ function settings_content(&$a) {
$r = null; $r = null;
} }
$mail_server = ((count($r)) ? $r[0]['server'] : ''); $mail_server = ((count($r)) ? $r[0]['server'] : '');
$mail_port = ((count($r) && intval($r[0]['port'])) ? intval($r[0]['port']) : ''); $mail_port = ((count($r) && intval($r[0]['port'])) ? intval($r[0]['port']) : '');
$mail_ssl = ((count($r)) ? $r[0]['ssltype'] : ''); $mail_ssl = ((count($r)) ? $r[0]['ssltype'] : '');
$mail_user = ((count($r)) ? $r[0]['user'] : ''); $mail_user = ((count($r)) ? $r[0]['user'] : '');
$mail_replyto = ((count($r)) ? $r[0]['reply_to'] : ''); $mail_replyto = ((count($r)) ? $r[0]['reply_to'] : '');
$mail_pubmail = ((count($r)) ? $r[0]['pubmail'] : 0); $mail_pubmail = ((count($r)) ? $r[0]['pubmail'] : 0);
$mail_chk = ((count($r)) ? $r[0]['last_check'] : '0000-00-00 00:00:00'); $mail_action = ((count($r)) ? $r[0]['action'] : 0);
$mail_movetofolder = ((count($r)) ? $r[0]['movetofolder'] : '');
$mail_chk = ((count($r)) ? $r[0]['last_check'] : '0000-00-00 00:00:00');
$tpl = get_markup_template("settings_connectors.tpl"); $tpl = get_markup_template("settings_connectors.tpl");
@ -589,6 +598,8 @@ function settings_content(&$a) {
'$mail_pass' => array('mail_pass', t('Email password:'), '', ''), '$mail_pass' => array('mail_pass', t('Email password:'), '', ''),
'$mail_replyto' => array('mail_replyto', t('Reply-to address:'), '', 'Optional'), '$mail_replyto' => array('mail_replyto', t('Reply-to address:'), '', 'Optional'),
'$mail_pubmail' => array('mail_pubmail', t('Send public posts to all email contacts:'), $mail_pubmail, ''), '$mail_pubmail' => array('mail_pubmail', t('Send public posts to all email contacts:'), $mail_pubmail, ''),
'$mail_action' => array('mail_action', t('Action after import:'), $mail_action, '', array(0=>t('None'), 1=>t('Delete'), 2=>t('Mark as seen'), 3=>t('Move to folder'))),
'$mail_movetofolder' => array('mail_movetofolder', t('Move to folder:'), $mail_movetofolder, ''),
'$submit' => t('Submit'), '$submit' => t('Submit'),

View file

@ -134,6 +134,7 @@ EOT;
$arr['target'] = $target; $arr['target'] = $target;
$arr['object-type'] = $objtype; $arr['object-type'] = $objtype;
$arr['object'] = $obj; $arr['object'] = $obj;
$arr['private'] = $item['private'];
$arr['allow_cid'] = $item['allow_cid']; $arr['allow_cid'] = $item['allow_cid'];
$arr['allow_gid'] = $item['allow_gid']; $arr['allow_gid'] = $item['allow_gid'];
$arr['deny_cid'] = $item['deny_cid']; $arr['deny_cid'] = $item['deny_cid'];

View file

@ -63,7 +63,8 @@ function viewcontacts_content(&$a) {
'username' => $rr['name'], 'username' => $rr['name'],
'url' => $url, 'url' => $url,
'sparkle' => '', 'sparkle' => '',
'item' => $rr, 'itemurl' => $rr['url'],
'network' => network_to_name($rr['network']),
); );
} }

View file

@ -1,6 +1,6 @@
<?php <?php
define( 'UPDATE_VERSION' , 1126 ); define( 'UPDATE_VERSION' , 1129 );
/** /**
* *
@ -1090,3 +1090,27 @@ function update_1125() {
) ENGINE = MyISAM DEFAULT CHARSET=utf8"); ) ENGINE = MyISAM DEFAULT CHARSET=utf8");
} }
function update_1126() {
q("ALTER TABLE `mailacct` ADD `action` INT NOT NULL AFTER `pass`,
ADD `movetofolder` CHAR(255) NOT NULL AFTER `action`");
}
function update_1127() {
q("CREATE TABLE IF NOT EXISTS `spam` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`uid` INT NOT NULL,
`spam` INT NOT NULL DEFAULT '0',
`ham` INT NOT NULL DEFAULT '0',
`term` CHAR(255) NOT NULL,
INDEX ( `uid` ),
INDEX ( `spam` ),
INDEX ( `ham` ),
INDEX ( `term` )
) ENGINE = MyISAM DEFAULT CHARSET=utf8");
}
function update_1128() {
q("alter table spam add `date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `term` ");
}

View file

@ -6,6 +6,8 @@
<li class='plugin $p.1'> <li class='plugin $p.1'>
<a class='toggleplugin' href='$baseurl/admin/$function/$p.0?a=t' title="{{if $p.1==on }}Disable{{ else }}Enable{{ endif }}" ><span class='icon $p.1'></span></a> <a class='toggleplugin' href='$baseurl/admin/$function/$p.0?a=t' title="{{if $p.1==on }}Disable{{ else }}Enable{{ endif }}" ><span class='icon $p.1'></span></a>
<a href='$baseurl/admin/$function/$p.0'><span class='name'>$p.2.name</span></a> - <span class="version">$p.2.version</span> <a href='$baseurl/admin/$function/$p.0'><span class='name'>$p.2.name</span></a> - <span class="version">$p.2.version</span>
{{ if $p.2.experimental }} $experimental {{ endif }}{{ if $p.2.unsupported }} $unsupported {{ endif }}
<div class='desc'>$p.2.description</div> <div class='desc'>$p.2.description</div>
</li> </li>
{{ endfor }} {{ endfor }}

View file

@ -17,8 +17,8 @@
</div> </div>
<div class="contact-name" id="contact-entry-name-$contact.id" >$contact.name</div> <div class="contact-name" id="contact-entry-name-$contact.id" >$contact.name</div>
<div class="contact-details" id="contact-entry-url-$contact.id" >$contact.item.url</div> <div class="contact-details" id="contact-entry-url-$contact.id" >$contact.itemurl</div>
<div class="contact-details" id="contact-entry-network-$contact.id" >$contact.item.network|network_to_name</div> <div class="contact-details" id="contact-entry-network-$contact.id" >$contact.network</div>
</div> </div>

File diff suppressed because it is too large Load diff

View file

@ -34,13 +34,13 @@ $a->strings["Friend suggestion sent."] = "Kontaktvorschlag gesendet.";
$a->strings["Suggest Friends"] = "Kontakte vorschlagen"; $a->strings["Suggest Friends"] = "Kontakte vorschlagen";
$a->strings["Suggest a friend for %s"] = "Schlage %s einen Kontakt vor"; $a->strings["Suggest a friend for %s"] = "Schlage %s einen Kontakt vor";
$a->strings["Event description and start time are required."] = "Ereignis Beschreibung und Startzeit sind erforderlich."; $a->strings["Event description and start time are required."] = "Ereignis Beschreibung und Startzeit sind erforderlich.";
$a->strings["l, F j"] = "l, F j";
$a->strings["Edit event"] = "Veranstaltung bearbeiten";
$a->strings["link to source"] = "Link zum Originalbeitrag";
$a->strings["Events"] = "Veranstaltungen"; $a->strings["Events"] = "Veranstaltungen";
$a->strings["Create New Event"] = "Neue Veranstaltung erstellen"; $a->strings["Create New Event"] = "Neue Veranstaltung erstellen";
$a->strings["Previous"] = "Vorherige"; $a->strings["Previous"] = "Vorherige";
$a->strings["Next"] = "Nächste"; $a->strings["Next"] = "Nächste";
$a->strings["l, F j"] = "l, F j";
$a->strings["Edit event"] = "Veranstaltung bearbeiten";
$a->strings["link to source"] = "Link zum Originalbeitrag";
$a->strings["hour:minute"] = "Stunde:Minute"; $a->strings["hour:minute"] = "Stunde:Minute";
$a->strings["Event details"] = "Veranstaltungsdetails"; $a->strings["Event details"] = "Veranstaltungsdetails";
$a->strings["Format is %s %s. Starting date and Description are required."] = "Format ist %s %s. Anfangsdatum und Beschreibung sind notwendig."; $a->strings["Format is %s %s. Starting date and Description are required."] = "Format ist %s %s. Anfangsdatum und Beschreibung sind notwendig.";
@ -251,6 +251,7 @@ $a->strings["Welcome to %s"] = "Willkommen zu %s";
$a->strings["Invalid request identifier."] = "Invalid request identifier."; $a->strings["Invalid request identifier."] = "Invalid request identifier.";
$a->strings["Discard"] = "Verwerfen"; $a->strings["Discard"] = "Verwerfen";
$a->strings["Ignore"] = "Ignorieren"; $a->strings["Ignore"] = "Ignorieren";
$a->strings["System"] = "System";
$a->strings["Network"] = "Netzwerk"; $a->strings["Network"] = "Netzwerk";
$a->strings["Personal"] = "Persönlich"; $a->strings["Personal"] = "Persönlich";
$a->strings["Home"] = "Pinnwand"; $a->strings["Home"] = "Pinnwand";
@ -282,15 +283,20 @@ $a->strings["%s is now friends with %s"] = "%s ist jetzt mit %s befreundet";
$a->strings["%s created a new post"] = "%s hat einen neuen Beitrag erstellt"; $a->strings["%s created a new post"] = "%s hat einen neuen Beitrag erstellt";
$a->strings["%s commented on %s's post"] = "%s hat %ss Beitrag kommentiert"; $a->strings["%s commented on %s's post"] = "%s hat %ss Beitrag kommentiert";
$a->strings["No more network notifications."] = "Keine weiteren Netzwerk-Benachrichtigungen."; $a->strings["No more network notifications."] = "Keine weiteren Netzwerk-Benachrichtigungen.";
$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen";
$a->strings["No more system notifications."] = "Keine weiteren System Benachrichtigungen.";
$a->strings["System Notifications"] = "System Benachrichtigungen";
$a->strings["No more personal notifications."] = "Keine weiteren persönlichen Benachrichtigungen"; $a->strings["No more personal notifications."] = "Keine weiteren persönlichen Benachrichtigungen";
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
$a->strings["No more home notifications."] = "Keine weiteren Pinnwand-Benachrichtigungen"; $a->strings["No more home notifications."] = "Keine weiteren Pinnwand-Benachrichtigungen";
$a->strings["Home Notifications"] = "Pinnwand Benachrichtigungen";
$a->strings["Could not access contact record."] = "Konnte nicht auf die Kontaktdaten zugreifen."; $a->strings["Could not access contact record."] = "Konnte nicht auf die Kontaktdaten zugreifen.";
$a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profil nicht finden."; $a->strings["Could not locate selected profile."] = "Konnte das ausgewählte Profil nicht finden.";
$a->strings["Contact updated."] = "Kontakt aktualisiert."; $a->strings["Contact updated."] = "Kontakt aktualisiert.";
$a->strings["Contact has been blocked"] = "Kontakt wurde blockiert"; $a->strings["Contact has been blocked"] = "Kontakt wurde blockiert";
$a->strings["Contact has been unblocked"] = "Kontakt wurde wieder freigegeben"; $a->strings["Contact has been unblocked"] = "Kontakt wurde wieder freigegeben";
$a->strings["Contact has been ignored"] = "Der Kontakt wurde ignoriert"; $a->strings["Contact has been ignored"] = "Kontakt wurde ignoriert";
$a->strings["Contact has been unignored"] = "Kontakt wurde ignoriert"; $a->strings["Contact has been unignored"] = "Kontakt wird nicht mehr ignoriert";
$a->strings["stopped following"] = "wird nicht mehr gefolgt"; $a->strings["stopped following"] = "wird nicht mehr gefolgt";
$a->strings["Contact has been removed."] = "Kontakt wurde entfernt."; $a->strings["Contact has been removed."] = "Kontakt wurde entfernt.";
$a->strings["You are mutual friends with %s"] = "Du hast mit %s eine beidseitige Freundschaft"; $a->strings["You are mutual friends with %s"] = "Du hast mit %s eine beidseitige Freundschaft";
@ -328,17 +334,19 @@ $a->strings["Update now"] = "Jetzt aktualisieren";
$a->strings["Currently blocked"] = "Derzeit geblockt"; $a->strings["Currently blocked"] = "Derzeit geblockt";
$a->strings["Currently ignored"] = "Derzeit ignoriert"; $a->strings["Currently ignored"] = "Derzeit ignoriert";
$a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein"; $a->strings["Replies/likes to your public posts <strong>may</strong> still be visible"] = "Antworten/Likes auf deine öffentlichen Beiträge <strong>könnten</strong> weiterhin sichtbar sein";
$a->strings["Contacts"] = "Kontakte"; $a->strings["All Contacts"] = "Alle Kontakte";
$a->strings["Show Unblocked Contacts"] = "Nicht geblockte Kontakte anzeigen"; $a->strings["Unblocked Contacts"] = "Nicht blockierte Kontakte";
$a->strings["Show Blocked Contacts"] = "Blockierte Kontakte anzeigen"; $a->strings["Blocked Contacts"] = "Blockierte Kontakte";
$a->strings["Show All Contacts"] = "Alle Kontakte anzeigen"; $a->strings["Ignored Contacts"] = "Ignorierte Kontakte";
$a->strings["Search your contacts"] = "Suche in deinen Kontakten"; $a->strings["Hidden Contacts"] = "Verborgene Kontakte";
$a->strings["Finding: "] = "Funde: ";
$a->strings["Find"] = "Finde";
$a->strings["Mutual Friendship"] = "Beidseitige Freundschaft"; $a->strings["Mutual Friendship"] = "Beidseitige Freundschaft";
$a->strings["is a fan of yours"] = "ist ein Fan von dir"; $a->strings["is a fan of yours"] = "ist ein Fan von dir";
$a->strings["you are a fan of"] = "du bist Fan von"; $a->strings["you are a fan of"] = "du bist Fan von";
$a->strings["Edit contact"] = "Kontakt bearbeiten"; $a->strings["Edit contact"] = "Kontakt bearbeiten";
$a->strings["Contacts"] = "Kontakte";
$a->strings["Search your contacts"] = "Suche in deinen Kontakten";
$a->strings["Finding: "] = "Funde: ";
$a->strings["Find"] = "Finde";
$a->strings["No valid account found."] = "Kein gültiger Account gefunden."; $a->strings["No valid account found."] = "Kein gültiger Account gefunden.";
$a->strings["Password reset request issued. Check your email."] = "Zurücksetzen des Passworts eingeleitet. Bitte überprüfe deine E-Mail."; $a->strings["Password reset request issued. Check your email."] = "Zurücksetzen des Passworts eingeleitet. Bitte überprüfe deine E-Mail.";
$a->strings["Password reset requested at %s"] = "Anfrage zum Zurücksetzen des Passworts auf %s erhalten"; $a->strings["Password reset requested at %s"] = "Anfrage zum Zurücksetzen des Passworts auf %s erhalten";
@ -365,7 +373,7 @@ $a->strings["Password update failed. Please try again."] = "Aktualisierung des P
$a->strings[" Please use a shorter name."] = " Bitte verwende einen kürzeren Namen."; $a->strings[" Please use a shorter name."] = " Bitte verwende einen kürzeren Namen.";
$a->strings[" Name too short."] = " Name ist zu kurz."; $a->strings[" Name too short."] = " Name ist zu kurz.";
$a->strings[" Not valid email."] = " Keine gültige E-Mail."; $a->strings[" Not valid email."] = " Keine gültige E-Mail.";
$a->strings[" Cannot change to that email."] = " Cannot change to that email."; $a->strings[" Cannot change to that email."] = "Ändern der E-Mail nicht möglich. ";
$a->strings["Settings updated."] = "Einstellungen aktualisiert."; $a->strings["Settings updated."] = "Einstellungen aktualisiert.";
$a->strings["Account settings"] = "Account Einstellungen"; $a->strings["Account settings"] = "Account Einstellungen";
$a->strings["Connector settings"] = "Connector-Einstellungen"; $a->strings["Connector settings"] = "Connector-Einstellungen";
@ -452,9 +460,9 @@ $a->strings["Notification Settings"] = "Benachrichtigungseinstellungen";
$a->strings["Send a notification email when:"] = "Benachrichtigungs-E-Mail senden wenn:"; $a->strings["Send a notification email when:"] = "Benachrichtigungs-E-Mail senden wenn:";
$a->strings["You receive an introduction"] = "Du eine Kontaktanfrage erhältst"; $a->strings["You receive an introduction"] = "Du eine Kontaktanfrage erhältst";
$a->strings["Your introductions are confirmed"] = "Eine deiner Kontaktanfragen akzeptiert wurde"; $a->strings["Your introductions are confirmed"] = "Eine deiner Kontaktanfragen akzeptiert wurde";
$a->strings["Someone writes on your profile wall"] = "Jemand etwas auf deine Pinnwand schreibt"; $a->strings["Someone writes on your profile wall"] = "Jemand schreibt etwas auf deine Pinnwand";
$a->strings["Someone writes a followup comment"] = "Jemand auch einen Kommentar verfasst"; $a->strings["Someone writes a followup comment"] = "Jemand verfasst auch einen Kommentar";
$a->strings["You receive a private message"] = "Du eine private Nachricht erhältst"; $a->strings["You receive a private message"] = "Du erhältst eine private Nachricht";
$a->strings["You receive a friend suggestion"] = "Du eine Empfehlung erhältst"; $a->strings["You receive a friend suggestion"] = "Du eine Empfehlung erhältst";
$a->strings["You are tagged in a post"] = "Du wurdest in einem Beitrag erwähnt"; $a->strings["You are tagged in a post"] = "Du wurdest in einem Beitrag erwähnt";
$a->strings["Advanced Page Settings"] = "Erweiterte Seiten-Einstellungen"; $a->strings["Advanced Page Settings"] = "Erweiterte Seiten-Einstellungen";
@ -485,16 +493,18 @@ $a->strings["Personal Notes"] = "Persönliche Notizen";
$a->strings["Save"] = "Speichern"; $a->strings["Save"] = "Speichern";
$a->strings["Welcome to Friendica"] = "Willkommen bei Friendica"; $a->strings["Welcome to Friendica"] = "Willkommen bei Friendica";
$a->strings["New Member Checklist"] = "Checkliste für neue Mitglieder"; $a->strings["New Member Checklist"] = "Checkliste für neue Mitglieder";
$a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page."] = "Wir möchten dir einige Tipps und Links anbieten, um deine Erfahrung mit Friendica so angenehm wie möglich zu machen. Klicke einfach einen Aspekt an, um weitere Informationen zu erhalten."; $a->strings["We would like to offer some tips and links to help make your experience enjoyable. Click any item to visit the relevant page. A link to this page will be visible from your home page for two weeks after your initial registration and then will quietly disappear."] = "Wir möchten Dir einige Tipps und Links anbieten, die Dir helfen könnten, den Einstieg angenehmer zu machen. Klicke auf ein Element, um die entsprechende Seite zu besuchen. Ein Link zu dieser Seite hier bleibt sichtbar über Deine Pinnwand für zwei Wochen nach dem Registrierungsdatum und wird dann verschwinden.";
$a->strings["On your <em>Settings</em> page - change your initial password. Also make a note of your Identity Address. This will be useful in making friends."] = "Ändere dein anfängliches Passwort auf der <em>Einstellungen</em> Seite. Bei dieser Gelegenheit solltest du dir die Adresse deines Profils merken, diese wird benötigt um mit Anderen in Kontakt zu treten."; $a->strings["On your <em>Settings</em> page - change your initial password. Also make a note of your Identity Address. This looks just like an email address - and will be useful in making friends on the free social web."] = "Ändere bitte unter <em>Einstellungen</em> Dein Passwort. Außerdem merke Dir Deine Indentifikations Adresse. Diese sieht aus wie eine E-Mail Adresse und wird benötig um Freunschaften mit anderen im Friendica Netzwerk zu schliessen.";
$a->strings["Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you."] = "Überprüfe die restlichen Einstellungen, insbesondere die Einstellungen zur Privatsphäre. Wenn du dein Profil nicht veröffentlichst ist das wie wenn niemand deine Telefonnummer kennt. Im Allgemeinen solltest du es veröffentlichen - außer all deine Freunde und potentiellen Freunde wissen wie man dich findet."; $a->strings["Review the other settings, particularly the privacy settings. An unpublished directory listing is like having an unlisted phone number. In general, you should probably publish your listing - unless all of your friends and potential friends know exactly how to find you."] = "Überprüfe die restlichen Einstellungen, insbesondere die Einstellungen zur Privatsphäre. Wenn du dein Profil nicht veröffentlichst ist das wie wenn niemand deine Telefonnummer kennt. Im Allgemeinen solltest du es veröffentlichen - außer all deine Freunde und potentiellen Freunde wissen wie man dich findet.";
$a->strings["Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not."] = "Lade ein Profilbild hoch falls du es noch nicht getan hast. Studien haben gezeigt, dass es zehnmal wahrscheinlicher ist neue Freunde zu finden, wenn du ein Bild von dir selbst verwendest als wenn du dies nicht tust."; $a->strings["Upload a profile photo if you have not done so already. Studies have shown that people with real photos of themselves are ten times more likely to make friends than people who do not."] = "Lade ein Profilbild hoch falls du es noch nicht getan hast. Studien haben gezeigt, dass es zehnmal wahrscheinlicher ist neue Freunde zu finden, wenn du ein Bild von dir selbst verwendest als wenn du dies nicht tust.";
$a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = "Richte die Verbindung zu Facebook ein, wenn du im Augenblick ein Facebook Konto hast und (optional) deine Facebook Freunde und Unterhaltungen importieren willst."; $a->strings["Authorise the Facebook Connector if you currently have a Facebook account and we will (optionally) import all your Facebook friends and conversations."] = "Richte die Verbindung zu Facebook ein, wenn du im Augenblick ein Facebook Konto hast und (optional) deine Facebook Freunde und Unterhaltungen importieren willst.";
$a->strings["<em>If</em> this is your own personal server, installing the Facebook addon may ease your transition to the free social web."] = "<em>Wenn</em> dies dein privater Server ist könnte die Installation des Facebook Connectors deinen Umzug ins freie Soziale Netz angenehmer gestalten.";
$a->strings["Enter your email access information on your Connector Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "Gib deine E-Mail-Zugangsinformationen auf der Connector-Einstellungsseite ein, falls du E-Mails aus deinem Posteingang importieren und mit Freunden und Mailinglisten interagieren willlst."; $a->strings["Enter your email access information on your Connector Settings page if you wish to import and interact with friends or mailing lists from your email INBOX"] = "Gib deine E-Mail-Zugangsinformationen auf der Connector-Einstellungsseite ein, falls du E-Mails aus deinem Posteingang importieren und mit Freunden und Mailinglisten interagieren willlst.";
$a->strings["Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = "Editiere dein <strong>Standard</strong> Profil nach deinen Vorlieben. Überprüfe die Einstellungen zum Verbergen deiner Freundesliste vor unbekannten Betrachtern des Profils."; $a->strings["Edit your <strong>default</strong> profile to your liking. Review the settings for hiding your list of friends and hiding the profile from unknown visitors."] = "Editiere dein <strong>Standard</strong> Profil nach deinen Vorlieben. Überprüfe die Einstellungen zum Verbergen deiner Freundesliste vor unbekannten Betrachtern des Profils.";
$a->strings["Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships."] = "Trage ein paar öffentliche Stichwörter in dein Standardprofil ein, die deine Interessen beschreiben. Eventuell sind wir in der Lage Leute zu finden, die deine Interessen teilen und können dir dann Kontakte vorschlagen."; $a->strings["Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships."] = "Trage ein paar öffentliche Stichwörter in dein Standardprofil ein, die deine Interessen beschreiben. Eventuell sind wir in der Lage Leute zu finden, die deine Interessen teilen und können dir dann Kontakte vorschlagen.";
$a->strings["Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the <em>Add New Contact</em> dialog."] = "Die Kontakte-Seite ist die Einstiegsseite, von der aus du Kontakte verwalten und dich mit Freunden in anderen Netzwerken verbinden kannst. Normalerweise gibst du dazu einfach ihre Adresse oder die URL der Seite im Kasten <em>Neuen Kontakt hinzufügen</em> ein."; $a->strings["Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the <em>Add New Contact</em> dialog."] = "Die Kontakte-Seite ist die Einstiegsseite, von der aus du Kontakte verwalten und dich mit Freunden in anderen Netzwerken verbinden kannst. Normalerweise gibst du dazu einfach ihre Adresse oder die URL der Seite im Kasten <em>Neuen Kontakt hinzufügen</em> ein.";
$a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested."] = "Über die Verzeichnisseite kannst du andere Personen auf diesem Server oder anderen verteilten Seiten finden. Halte nach einem <em>Verbinden</em> oder <em>Folgen</em> Link auf deren Profilseiten Ausschau und gib deine eigene Profiladresse an falls du danach gefragt wirst."; $a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested."] = "Über die Verzeichnisseite kannst du andere Personen auf diesem Server oder anderen verteilten Seiten finden. Halte nach einem <em>Verbinden</em> oder <em>Folgen</em> Link auf deren Profilseiten Ausschau und gib deine eigene Profiladresse an falls du danach gefragt wirst.";
$a->strings["On the side panel of the Contacts page are several tools to find new friends. We can match people by interest, look up people by name or interest, and provide suggestions based on network relationships. On a brand new site, friend suggestions will usually begin to be populated within 24 hours."] = "Im seitlichen Bedienfeld der Kontakte-Seite gibt es diverse Werkzeuge, um neue Freunde zu finden. Wir können Menschen mit den gleichen Interessen finden, anhand von Namen oder Interessen suchen oder aber aufgrund vorhandener Kontakte neue Freunde vorschlagen.\nAuf einer brandneuen - soeben erstellten - Seite starten die Kontaktvorschläge innerhalb von 24 Stunden.";
$a->strings["Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page."] = "Sobald du einige Freunde gefunden hast, organisiere sie in Gruppen zur privaten Kommunikation im Seitenmenü der Kontakte-Seite. Du kannst dann mit jeder dieser Gruppen von der Netzwerkseite aus privat interagieren."; $a->strings["Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page."] = "Sobald du einige Freunde gefunden hast, organisiere sie in Gruppen zur privaten Kommunikation im Seitenmenü der Kontakte-Seite. Du kannst dann mit jeder dieser Gruppen von der Netzwerkseite aus privat interagieren.";
$a->strings["Our <strong>help</strong> pages may be consulted for detail on other program features and resources."] = "Unsere <strong>Hilfe</strong> Seiten können herangezogen werden, um weitere Einzelheiten zu andern Programm Features zu erhalten."; $a->strings["Our <strong>help</strong> pages may be consulted for detail on other program features and resources."] = "Unsere <strong>Hilfe</strong> Seiten können herangezogen werden, um weitere Einzelheiten zu andern Programm Features zu erhalten.";
$a->strings["Item not available."] = "Beitrag nicht verfügbar."; $a->strings["Item not available."] = "Beitrag nicht verfügbar.";
@ -511,14 +521,13 @@ $a->strings["Unable to remove group."] = "Konnte die Gruppe nicht entfernen.";
$a->strings["Click on a contact to add or remove."] = "Klicke einen Kontakt an, um ihn hinzuzufügen oder zu entfernen"; $a->strings["Click on a contact to add or remove."] = "Klicke einen Kontakt an, um ihn hinzuzufügen oder zu entfernen";
$a->strings["Group Editor"] = "Gruppeneditor"; $a->strings["Group Editor"] = "Gruppeneditor";
$a->strings["Members"] = "Mitglieder"; $a->strings["Members"] = "Mitglieder";
$a->strings["All Contacts"] = "Alle Kontakte";
$a->strings["Invalid profile identifier."] = "Ungültiger Profil-Bezeichner"; $a->strings["Invalid profile identifier."] = "Ungültiger Profil-Bezeichner";
$a->strings["Profile Visibility Editor"] = "Editor für die Profil-Sichtbarkeit"; $a->strings["Profile Visibility Editor"] = "Editor für die Profil-Sichtbarkeit";
$a->strings["Profile"] = "Profil"; $a->strings["Profile"] = "Profil";
$a->strings["Visible To"] = "Sichtbar für"; $a->strings["Visible To"] = "Sichtbar für";
$a->strings["All Contacts (with secure profile access)"] = "Alle Kontakte (mit gesichertem Profilzugriff)"; $a->strings["All Contacts (with secure profile access)"] = "Alle Kontakte (mit gesichertem Profilzugriff)";
$a->strings["View Contacts"] = "Kontakte anzeigen";
$a->strings["No contacts."] = "Keine Kontakte."; $a->strings["No contacts."] = "Keine Kontakte.";
$a->strings["View Contacts"] = "Kontakte anzeigen";
$a->strings["An invitation is required."] = "Du benötigst eine Einladung."; $a->strings["An invitation is required."] = "Du benötigst eine Einladung.";
$a->strings["Invitation could not be verified."] = "Die Einladung konnte nicht überprüft werden."; $a->strings["Invitation could not be verified."] = "Die Einladung konnte nicht überprüft werden.";
$a->strings["Invalid OpenID url"] = "Ungültige OpenID URL"; $a->strings["Invalid OpenID url"] = "Ungültige OpenID URL";
@ -531,7 +540,7 @@ $a->strings["Not a valid email address."] = "Keine gültige E-Mail-Adresse.";
$a->strings["Cannot use that email."] = "Konnte diese E-Mail-Adresse nicht verwenden."; $a->strings["Cannot use that email."] = "Konnte diese E-Mail-Adresse nicht verwenden.";
$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and must also begin with a letter."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen."; $a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and must also begin with a letter."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen.";
$a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."; $a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
$a->strings["SERIOUS ERROR: Generation of security keys failed."] = "SERIOUS ERROR: Generation of security keys failed."; $a->strings["SERIOUS ERROR: Generation of security keys failed."] = "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden.";
$a->strings["An error occurred during registration. Please try again."] = "Wärend der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal."; $a->strings["An error occurred during registration. Please try again."] = "Wärend der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
$a->strings["An error occurred creating your default profile. Please try again."] = "Bei der Erstellung des Standard-Profils ist ein Fehler aufgetreten. Bitte versuche es noch einmal."; $a->strings["An error occurred creating your default profile. Please try again."] = "Bei der Erstellung des Standard-Profils ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
$a->strings["Registration details for %s"] = "Details der Registration von %s"; $a->strings["Registration details for %s"] = "Details der Registration von %s";
@ -614,6 +623,7 @@ $a->strings["No friends to display."] = "Keine Freunde zum Anzeigen.";
$a->strings["Site"] = "Seite"; $a->strings["Site"] = "Seite";
$a->strings["Users"] = "Nutzer"; $a->strings["Users"] = "Nutzer";
$a->strings["Plugins"] = "Plugins"; $a->strings["Plugins"] = "Plugins";
$a->strings["Themes"] = "Themen";
$a->strings["Logs"] = "Protokolle"; $a->strings["Logs"] = "Protokolle";
$a->strings["User registrations waiting for confirmation"] = "Nutzeranmeldungen die auf Bestätigung warten"; $a->strings["User registrations waiting for confirmation"] = "Nutzeranmeldungen die auf Bestätigung warten";
$a->strings["Administration"] = "Administration"; $a->strings["Administration"] = "Administration";
@ -685,6 +695,7 @@ $a->strings["Disable"] = "Ausschalten";
$a->strings["Enable"] = "Einschalten"; $a->strings["Enable"] = "Einschalten";
$a->strings["Toggle"] = "Umschalten"; $a->strings["Toggle"] = "Umschalten";
$a->strings["Settings"] = "Einstellungen"; $a->strings["Settings"] = "Einstellungen";
$a->strings["No themes found."] = "Keine Themen gefunden.";
$a->strings["Log settings updated."] = "Protokolleinstellungen aktualisiert."; $a->strings["Log settings updated."] = "Protokolleinstellungen aktualisiert.";
$a->strings["Clear"] = "löschen"; $a->strings["Clear"] = "löschen";
$a->strings["Debugging"] = "Protokoll führen"; $a->strings["Debugging"] = "Protokoll führen";
@ -941,6 +952,16 @@ $a->strings["Blocked %s - Click to open/close"] = "%s blockiert - Zum Öffnen/Sc
$a->strings["Unblock Author"] = "Autor freischalten"; $a->strings["Unblock Author"] = "Autor freischalten";
$a->strings["Block Author"] = "Autor blockieren"; $a->strings["Block Author"] = "Autor blockieren";
$a->strings["blockem settings updated"] = "blockem Einstellungen aktualisiert"; $a->strings["blockem settings updated"] = "blockem Einstellungen aktualisiert";
$a->strings[":-)"] = ":-)";
$a->strings[":-("] = ":-(";
$a->strings["lol"] = "lol";
$a->strings["Quick Comment Settings"] = "Schnell-Kommentar Einstellungen";
$a->strings["Enter quick comments, one per line"] = "Gibt ein Schnell-Kommentar pro Zeile ein";
$a->strings["Quick Comment settings saved."] = "Schnell-Kommentare Einstellungen gespeichert";
$a->strings["Tile Server URL"] = "Tile Server URL";
$a->strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">public tile servers</a>"] = "Eine Liste <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">öffentlicher Tile Server</a>";
$a->strings["Default zoom"] = "Standard Zoom";
$a->strings["The default zoom level. (1:world, 18:highest)"] = "Standard Zoo,level (1: Welt; 18: höchstes)";
$a->strings["Editplain settings updated."] = "Editplain Einstellungen aktualisiert"; $a->strings["Editplain settings updated."] = "Editplain Einstellungen aktualisiert";
$a->strings["Editplain Settings"] = "Editplain Einstellungen"; $a->strings["Editplain Settings"] = "Editplain Einstellungen";
$a->strings["Disable richtext status editor"] = "RichText Editor deaktivieren"; $a->strings["Disable richtext status editor"] = "RichText Editor deaktivieren";
@ -967,6 +988,7 @@ $a->strings["Current StatusNet API is"] = "Derzeitige StatusNet-API-URL lautet";
$a->strings["Cancel StatusNet Connection"] = "Verbindung zum StatusNet Server abbrechen"; $a->strings["Cancel StatusNet Connection"] = "Verbindung zum StatusNet Server abbrechen";
$a->strings["Currently connected to: "] = "Momentan verbunden mit: "; $a->strings["Currently connected to: "] = "Momentan verbunden mit: ";
$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Wenn aktiviert können all deine <strong>öffentlichen</strong> Einträge auf dem verbundenen StatusNet Konto veröffentlicht werden. Du kannst das (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen."; $a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Wenn aktiviert können all deine <strong>öffentlichen</strong> Einträge auf dem verbundenen StatusNet Konto veröffentlicht werden. Du kannst das (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen.";
$a->strings["<strong>Note</strong>: Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to StatusNet will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "<strong>Hinweis</strong>: Aufgrund deiner Privatsphären Einstellungen (<em>Profil-Details vor unbekannten Betrachtern verbergen?</em>) wird der Link der eventuell an an deinen StatusNet Account weitergeleitete angehangen wird um auf den original Artikel zu verweisen den Betrachter auf eine leere Seite führen, auf der er darüber informiert wird, dass der Zugriff eingeschränkt wurde.";
$a->strings["Allow posting to StatusNet"] = "Veröffentlichung bei StatusNet erlauben"; $a->strings["Allow posting to StatusNet"] = "Veröffentlichung bei StatusNet erlauben";
$a->strings["Send public postings to StatusNet by default"] = "Veröffentliche öffentliche Beiträge standardmäßig bei StatusNet"; $a->strings["Send public postings to StatusNet by default"] = "Veröffentliche öffentliche Beiträge standardmäßig bei StatusNet";
$a->strings["Clear OAuth configuration"] = "OAuth-Konfiguration löschen"; $a->strings["Clear OAuth configuration"] = "OAuth-Konfiguration löschen";
@ -987,11 +1009,18 @@ $a->strings["WordPress username"] = "WordPress-Benutzername";
$a->strings["WordPress password"] = "WordPress-Passwort"; $a->strings["WordPress password"] = "WordPress-Passwort";
$a->strings["WordPress API URL"] = "WordPress-API-URL"; $a->strings["WordPress API URL"] = "WordPress-API-URL";
$a->strings["Post to WordPress by default"] = "Standardmäßig auf WordPress veröffentlichen"; $a->strings["Post to WordPress by default"] = "Standardmäßig auf WordPress veröffentlichen";
$a->strings["\"Show more\" Settings"] = "\"Mehr zeigen\" Einstellungen";
$a->strings["Enable Show More"] = "Aktiviere \"Mehr zeigen\"";
$a->strings["Cutting posts after how much characters"] = "Begrenze Beiträge nach der Anzahl der Buchstaben";
$a->strings["Show More Settings saved."] = "\"Mehr zeigen\" Einstellungen gesichert.";
$a->strings["Show More"] = "\"Mehr zeigen\"";
$a->strings["This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool."] = "Diese Website benutzt <a href='http://www.piwik.org'>Piwik</a>, eine Open Source-Software zur statistischen Auswertung der Besucherzugriffe."; $a->strings["This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool."] = "Diese Website benutzt <a href='http://www.piwik.org'>Piwik</a>, eine Open Source-Software zur statistischen Auswertung der Besucherzugriffe.";
$a->strings["If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."] = "Wenn Du nicht willst, dass Deine Besuche auf diese Weise gespeichert werden, kannst Du <a href='%s'>ein Cookie setzen</a>. Dann wird Piwik Dich auf dieser Website nicht mehr verfolgen (opt-out)."; $a->strings["If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."] = "Wenn Du nicht willst, dass Deine Besuche auf diese Weise gespeichert werden, kannst Du <a href='%s'>ein Cookie setzen</a>. Dann wird Piwik Dich auf dieser Website nicht mehr verfolgen (opt-out).";
$a->strings["Piwik Base URL"] = "Piwik Basis URL"; $a->strings["Piwik Base URL"] = "Piwik Basis URL";
$a->strings["Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)"] = "Absoluter Pfad zu deiner Piwik Installation (ohen Protokoll (http/s) und mit abschließendem Schrägstrich)";
$a->strings["Site ID"] = "Seiten ID"; $a->strings["Site ID"] = "Seiten ID";
$a->strings["Show opt-out cookie link?"] = "Link zum Setzen des Opt-Out Cookies anzeigen?"; $a->strings["Show opt-out cookie link?"] = "Link zum Setzen des Opt-Out Cookies anzeigen?";
$a->strings["Asynchronous tracking"] = "Asynchroned Tracken";
$a->strings["Post to Twitter"] = "Bei Twitter veröffentlichen"; $a->strings["Post to Twitter"] = "Bei Twitter veröffentlichen";
$a->strings["Twitter settings updated."] = "Twitter Einstellungen aktualisiert."; $a->strings["Twitter settings updated."] = "Twitter Einstellungen aktualisiert.";
$a->strings["Twitter Posting Settings"] = "Twitter-Beitragseinstellungen"; $a->strings["Twitter Posting Settings"] = "Twitter-Beitragseinstellungen";
@ -1000,6 +1029,7 @@ $a->strings["At this Friendica instance the Twitter plugin was enabled but you h
$a->strings["Log in with Twitter"] = "bei Twitter anmelden"; $a->strings["Log in with Twitter"] = "bei Twitter anmelden";
$a->strings["Copy the PIN from Twitter here"] = "Kopiere die Twitter-PIN hier her"; $a->strings["Copy the PIN from Twitter here"] = "Kopiere die Twitter-PIN hier her";
$a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Wenn aktiviert können all deine <strong>öffentlichen</strong> Einträge auf dem verbundenen Twitter Konto veröffentlicht werden. Du kannst dies (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen."; $a->strings["If enabled all your <strong>public</strong> postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Wenn aktiviert können all deine <strong>öffentlichen</strong> Einträge auf dem verbundenen Twitter Konto veröffentlicht werden. Du kannst dies (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen.";
$a->strings["<strong>Note</strong>: Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "<strong>Hinweis</strong>: Aufgrund deiner Privatsphären Einstellungen (<em>Profil-Details vor unbekannten Betrachtern verbergen?</em>) wird der Link der eventuell an an deinen Twitter Account weitergeleitete angehangen wird um auf den original Artikel zu verweisen den Betrachter auf eine leere Seite führen, auf der er darüber informiert wird, dass der Zugriff eingeschränkt wurde.";
$a->strings["Allow posting to Twitter"] = "Veröffentlichung bei Twitter erlauben"; $a->strings["Allow posting to Twitter"] = "Veröffentlichung bei Twitter erlauben";
$a->strings["Send public postings to Twitter by default"] = "Veröffentliche öffentliche Beiträge standardmäßig bei Twitter"; $a->strings["Send public postings to Twitter by default"] = "Veröffentliche öffentliche Beiträge standardmäßig bei Twitter";
$a->strings["Consumer key"] = "Consumer Key"; $a->strings["Consumer key"] = "Consumer Key";
@ -1170,6 +1200,7 @@ $a->strings["People directory"] = "Nutzerverzeichnis";
$a->strings["Conversations from your friends"] = "Unterhaltungen deiner Kontakte"; $a->strings["Conversations from your friends"] = "Unterhaltungen deiner Kontakte";
$a->strings["Friend Requests"] = "Kontaktanfragen"; $a->strings["Friend Requests"] = "Kontaktanfragen";
$a->strings["See all notifications"] = "Alle Benachrichtigungen anzeigen"; $a->strings["See all notifications"] = "Alle Benachrichtigungen anzeigen";
$a->strings["Mark all system notifications seen"] = "Markiere alle System Benachrichtigungen als gelesen";
$a->strings["Private mail"] = "Private Email"; $a->strings["Private mail"] = "Private Email";
$a->strings["Manage"] = "Verwalten"; $a->strings["Manage"] = "Verwalten";
$a->strings["Manage other pages"] = "Andere Seiten verwalten"; $a->strings["Manage other pages"] = "Andere Seiten verwalten";
@ -1214,6 +1245,7 @@ $a->strings["second"] = "Sekunde";
$a->strings["seconds"] = "Sekunden"; $a->strings["seconds"] = "Sekunden";
$a->strings["%1\$d %2\$s ago"] = "%1\$d %2\$s her"; $a->strings["%1\$d %2\$s ago"] = "%1\$d %2\$s her";
$a->strings["From: "] = "Von: "; $a->strings["From: "] = "Von: ";
$a->strings["$1 wrote:"] = "$1 geschrieben:";
$a->strings["Image/photo"] = "Bild/Foto"; $a->strings["Image/photo"] = "Bild/Foto";
$a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbanken Server '%s' nicht ermitteln."; $a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbanken Server '%s' nicht ermitteln.";
$a->strings["[no subject]"] = "[kein Betreff]"; $a->strings["[no subject]"] = "[kein Betreff]";
@ -1225,19 +1257,33 @@ $a->strings["Thank You,"] = "Danke,";
$a->strings["%s Administrator"] = "der Administrator von %s"; $a->strings["%s Administrator"] = "der Administrator von %s";
$a->strings["New mail received at %s"] = "Neue Nachricht auf %s empfangen"; $a->strings["New mail received at %s"] = "Neue Nachricht auf %s empfangen";
$a->strings["%s sent you a new private message at %s."] = "%s hat dir eine neue private Nachricht auf %s geschrieben."; $a->strings["%s sent you a new private message at %s."] = "%s hat dir eine neue private Nachricht auf %s geschrieben.";
$a->strings["%s sent you %s."] = "%s hat Dir geschickt %s";
$a->strings["a private message"] = "eine private Nachricht";
$a->strings["Please visit %s to view and/or reply to your private messages."] = "Bitte besuche %s, um deine privaten Nachrichten anzusehen und/oder zu beantworten."; $a->strings["Please visit %s to view and/or reply to your private messages."] = "Bitte besuche %s, um deine privaten Nachrichten anzusehen und/oder zu beantworten.";
$a->strings["%s commented on an item at %s"] = "%s kommentierte einen Beitrag auf %s"; $a->strings["%s commented on an item at %s"] = "%s kommentierte einen Beitrag auf %s";
$a->strings["%s commented on an item/conversation you have been following."] = "%s hat einen Beitrag kommentiert, dem du folgst."; $a->strings["%s commented on an item/conversation you have been following."] = "%s hat einen Beitrag kommentiert, dem du folgst.";
$a->strings["%s commented in %s."] = "%s wurde kommentiert in %s";
$a->strings["a watched conversation"] = "eine beobachtete Unterhaltung";
$a->strings["Please visit %s to view and/or reply to the conversation."] = "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren."; $a->strings["Please visit %s to view and/or reply to the conversation."] = "Bitte besuche %s, um die Konversation anzusehen und/oder zu kommentieren.";
$a->strings["%s posted to your profile wall at %s"] = "%s hat auf deine Pinnwand bei %s gepostet"; $a->strings["%s posted to your profile wall at %s"] = "%s hat auf deine Pinnwand bei %s gepostet";
$a->strings["%s posted to %s"] = "%s schrieb an %s";
$a->strings["your profile wall."] = "Deine Pinnwand";
$a->strings["%s tagged you at %s"] = "%s hat dich auf %s erwähnt"; $a->strings["%s tagged you at %s"] = "%s hat dich auf %s erwähnt";
$a->strings["%s %s."] = "%s %s.";
$a->strings["tagged you"] = "erwähnte Dich";
$a->strings["%s tagged your post at %s"] = "%s hat deinen Beitrag auf %s getaggt"; $a->strings["%s tagged your post at %s"] = "%s hat deinen Beitrag auf %s getaggt";
$a->strings["%s tagged %s"] = "%s markierte %s";
$a->strings["your post"] = "Dein Beitrag";
$a->strings["Introduction received at %s"] = "Kontaktanfrage auf %s erhalten"; $a->strings["Introduction received at %s"] = "Kontaktanfrage auf %s erhalten";
$a->strings["You've received an introduction from '%s' at %s"] = "Du hast eine Kontaktanfrage von '%s' auf %s erhalten"; $a->strings["You've received an introduction from '%s' at %s"] = "Du hast eine Kontaktanfrage von '%s' auf %s erhalten";
$a->strings["You've received %s from %s."] = "Du hast %s von %s erhalten.";
$a->strings["an introduction"] = "eine Einführung";
$a->strings["You may visit their profile at %s"] = "Hier kannst du das Profil betrachten: %s"; $a->strings["You may visit their profile at %s"] = "Hier kannst du das Profil betrachten: %s";
$a->strings["Please visit %s to approve or reject the introduction."] = "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen."; $a->strings["Please visit %s to approve or reject the introduction."] = "Bitte besuche %s, um die Kontaktanfrage anzunehmen oder abzulehnen.";
$a->strings["Friend suggestion received at %s"] = "Kontaktvorschlag empfangen auf %s"; $a->strings["Friend suggestion received at %s"] = "Kontaktvorschlag empfangen auf %s";
$a->strings["You've received a friend suggestion from '%s' at %s"] = "Du hast von '%s' einen Kontaktvorschlag erhalten auf %s"; $a->strings["You've received a friend suggestion from '%s' at %s"] = "Du hast von '%s' einen Kontaktvorschlag erhalten auf %s";
$a->strings["You've received %s for %s from %s."] = "Du hast %s für %s von %s erhalten.";
$a->strings["a friend suggestion"] = "ein Freunde Vorschlag";
$a->strings["Name:"] = "Name:"; $a->strings["Name:"] = "Name:";
$a->strings["Photo:"] = "Foto:"; $a->strings["Photo:"] = "Foto:";
$a->strings["Please visit %s to approve or reject the suggestion."] = "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen."; $a->strings["Please visit %s to approve or reject the suggestion."] = "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen.";

View file

@ -18,7 +18,7 @@
<tr><td style="font-weight:bold;padding-bottom:5px;">$title</td></tr> <tr><td style="font-weight:bold;padding-bottom:5px;">$title</td></tr>
<tr><td style="padding-right:22px;">$htmlversion</td></tr> <tr><td style="padding-right:22px;">$htmlversion</td></tr>
<tr><td style="padding-top:11px;" colspan="2">$hsitelink</td></tr> <tr><td style="padding-top:11px;" colspan="2">$hsitelink</td></tr>
<tr><td style="padding-bottom:11px;" colspan="2">$itemlink</td></tr> <tr><td style="padding-bottom:11px;" colspan="2">$hitemlink</td></tr>
<tr><td></td><td>$thanks</td></tr> <tr><td></td><td>$thanks</td></tr>
<tr><td></td><td>$site_admin</td></tr> <tr><td></td><td>$site_admin</td></tr>
</tbody> </tbody>

View file

@ -6,7 +6,7 @@ $title
$textversion $textversion
$tsitelink $tsitelink
$itemlink $titemlink
$thanks $thanks
$site_admin $site_admin

View file

@ -11,10 +11,10 @@
<link rel="search" <link rel="search"
href="$baseurl/opensearch" href="$baseurl/opensearch"
type="application/opensearchdescription+xml" type="application/opensearchdescription+xml"
title="Search in Friendika" /> title="Search in Friendica" />
<!--[if IE]> <!--[if IE]>
<script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <script type="text/javascript" src="https://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> <![endif]-->
<script type="text/javascript" src="$baseurl/js/jquery.js" ></script> <script type="text/javascript" src="$baseurl/js/jquery.js" ></script>
<script type="text/javascript" src="$baseurl/js/jquery.textinputs.js" ></script> <script type="text/javascript" src="$baseurl/js/jquery.textinputs.js" ></script>

View file

@ -129,7 +129,6 @@ function enableOnUser(){
$("#profile-jot-text").focus(enableOnUser); $("#profile-jot-text").focus(enableOnUser);
$("#profile-jot-text").click(enableOnUser); $("#profile-jot-text").click(enableOnUser);
var uploader = new window.AjaxUpload( var uploader = new window.AjaxUpload(
'wall-image-upload', 'wall-image-upload',
{ action: 'wall_upload/$nickname', { action: 'wall_upload/$nickname',

View file

@ -23,6 +23,8 @@ $settings_connectors
{{inc field_password.tpl with $field=$mail_pass }}{{endinc}} {{inc field_password.tpl with $field=$mail_pass }}{{endinc}}
{{inc field_input.tpl with $field=$mail_replyto }}{{endinc}} {{inc field_input.tpl with $field=$mail_replyto }}{{endinc}}
{{inc field_checkbox.tpl with $field=$mail_pubmail }}{{endinc}} {{inc field_checkbox.tpl with $field=$mail_pubmail }}{{endinc}}
{{inc field_select.tpl with $field=$mail_action }}{{endinc}}
{{inc field_input.tpl with $field=$mail_movetofolder }}{{endinc}}
<div class="settings-submit-wrapper" > <div class="settings-submit-wrapper" >
<input type="submit" id="imap-submit" name="imap-submit" class="settings-submit" value="$submit" /> <input type="submit" id="imap-submit" name="imap-submit" class="settings-submit" value="$submit" />

View file

View file

View file

BIN
view/theme/dispy/premium.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
view/theme/dispy/star.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -1099,6 +1099,21 @@ div[id$="wrapper"] br { clear: left; }
border-bottom: 0px; border-bottom: 0px;
}*/ }*/
.starred {
background-image: url("star.png");
repeat: no-repeat;
}
.unstarred {
background-image: url("premium.png");
repeat: no-repeat;
}
.tagged {
background-image: url("tag.png");
repeat: no-repeat;
}
.border { .border {
border: 1px solid #babdb6; border: 1px solid #babdb6;

BIN
view/theme/dispy/tag.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 B

View file

@ -24,6 +24,7 @@
<div class="wall-item-tools" id="wall-item-tools-$id"> <div class="wall-item-tools" id="wall-item-tools-$id">
{{ if $star }} {{ if $star }}
<a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a> <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
<a href="#" id="tagger-$id" onclick="itemTag($id); return false;" class="tag-item icon tagged" title="$star.tagger"></a>
{{ endif }} {{ endif }}
{{ if $vote }} {{ if $vote }}
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id"> <div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">

View file

@ -29,6 +29,7 @@
<div class="wall-item-tools" id="wall-item-tools-$id"> <div class="wall-item-tools" id="wall-item-tools-$id">
{{ if $star }} {{ if $star }}
<a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a> <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
<a href="#" id="tagger-$id" onclick="itemTag($id); return false;" class="tag-item icon tagged" title="$star.tagger"></a>
{{ endif }} {{ endif }}
{{ if $vote }} {{ if $vote }}
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id"> <div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">

View file

@ -59,6 +59,7 @@
{{ if $star }} {{ if $star }}
<a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a> <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
<a href="#" id="tagger-$id" onclick="itemTag($id); return false;" class="tag-item icon tagged" title="$star.tagger"></a>
{{ endif }} {{ endif }}
<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" > <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >

View file

View file

View file

View file

View file

@ -49,6 +49,8 @@
{{ if $star }} {{ if $star }}
<a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a> <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
<a href="#" id="tagger-$id" onclick="itemTag($id); return false;" class="tag-item icon tagged" title="$star.tagger"></a>
{{ endif }} {{ endif }}
<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" > <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >

View file

@ -53,6 +53,7 @@
{{ if $star }} {{ if $star }}
<a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a> <a href="#" id="starred-$id" onclick="dostar($id); return false;" class="star-item icon $isstarred" title="$star.toggle"></a>
<a href="#" id="tagger-$id" onclick="itemTag($id); return false;" class="tag-item icon tagged" title="$star.tagger"></a>
{{ endif }} {{ endif }}
<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" > <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >

View file

View file

@ -1,6 +1,7 @@
// Quattro Theme LESS file // Quattro Theme LESS file
// "Echo" palette from Inkscape // "Echo" palette from Inkscape
@Yellow1 : #fce94f;
@Blue1:rgb(25,174,255); @Blue1:rgb(25,174,255);
@Blue2:rgb(0,132,200); @Blue2:rgb(0,132,200);
@Blue3:rgb(0,92,148); @Blue3:rgb(0,92,148);
@ -71,6 +72,7 @@
@NoticeBackgroundColor: #511919; @NoticeBackgroundColor: #511919;
@ThreadBackgroundColor: #f6f7f8; @ThreadBackgroundColor: #f6f7f8;
@ShinyBorderColor: @Yellow1;
@CommentBoxEmptyColor: @Grey3; @CommentBoxEmptyColor: @Grey3;
@CommentBoxEmptyBorderColor: @Grey3; @CommentBoxEmptyBorderColor: @Grey3;
@ -91,4 +93,4 @@
@JotPermissionUnlockBackgroundColor: @Grey2; @JotPermissionUnlockBackgroundColor: @Grey2;
@JotPermissionLockBackgroundColor: @Grey4; @JotPermissionLockBackgroundColor: @Grey4;
@JotLoadingBackgroundColor: @Grey1; @JotLoadingBackgroundColor: @Grey1;
@JotPreviewBackgroundColor: @Yellow1;

View file

@ -13,6 +13,11 @@
&.link { background-image: url("../../../images/icons/@{size}/link.png"); } &.link { background-image: url("../../../images/icons/@{size}/link.png"); }
&.lock { background-image: url("../../../images/icons/@{size}/lock.png"); } &.lock { background-image: url("../../../images/icons/@{size}/lock.png"); }
&.unlock { background-image: url("../../../images/icons/@{size}/unlock.png"); } &.unlock { background-image: url("../../../images/icons/@{size}/unlock.png"); }
&.type-unkn { background-image: url("../../../images/icons/@{size}/zip.png"); }
&.type-audio{ background-image: url("../../../images/icons/@{size}/audio.png"); }
&.type-video{ background-image: url("../../../images/icons/@{size}/video.png"); }
&.type-image{ background-image: url("../../../images/icons/@{size}/image.png"); }
&.type-text { background-image: url("../../../images/icons/@{size}/text.png"); }
} }

View file

@ -3,7 +3,7 @@
/* global */ /* global */
body { body {
font-family: Liberation Sans,helvetica,arial,clean,sans-serif; font-family: Liberation Sans,helvetica,arial,clean,sans-serif;
font-size: 10px; font-size: 11px;
background-color: @BodyBackground; background-color: @BodyBackground;
color: @BodyColor; color: @BodyColor;
margin: 50px 0px 0px 0px; margin: 50px 0px 0px 0px;
@ -44,6 +44,9 @@ a:hover {color: @LinkHover; text-decoration: underline; }
.hidden { display: none; } .hidden { display: none; }
.clear { clear: both; } .clear { clear: both; }
.fakelink { color: @Link; text-decoration: none; cursor:pointer; }
.fakelink:hover { color: @LinkHover; text-decoration: underline; }
code { code {
font-family: Courier, monospace; font-family: Courier, monospace;
white-space: pre; white-space: pre;
@ -55,6 +58,23 @@ code {
padding: 10px; padding: 10px;
margin-top: 20px; margin-top: 20px;
} }
#panel {
position: absolute;
width: 10em;
background: @MenuBg;
color: @Menu;
margin: 0px;
padding: 1em;
list-style: none;
border: 3px solid @MenuBorder;
z-index: 100000;
.shadow();
}
/* tool */ /* tool */
.tool { .tool {
@ -234,7 +254,8 @@ ul.menu-popup {
#nav-notifications-menu { #nav-notifications-menu {
width: 400px; width: 400px; max-height: 550px;
overflow: auto;
img { float: left; margin-right: 5px; } img { float: left; margin-right: 5px; }
.contactname { font-weight: bold; } .contactname { font-weight: bold; }
.notif-when { font-size: 10px; color: @MenuItemDetail; display: block; } .notif-when { font-size: 10px; color: @MenuItemDetail; display: block; }
@ -288,15 +309,98 @@ aside {
.allcontact-link { float: right; margin: 5px 0px; } .allcontact-link { float: right; margin: 5px 0px; }
.contact-block-content { .contact-block-content {
clear: both; clear: both;
overflow: auto; height: auto; overflow: hidden;
height: auto;
} }
/*.contact-block-div { width:60px; height: 60px; }*/
.contact-block-link { .contact-block-link {
float: left; float: left;
margin: 0px 2px 2px 0px; margin: 0px 2px 2px 0px;
img { widht: 48px; height: 58px; } img { width: 48px; height: 48px; }
} }
} }
/* mail view */
.mail-conv-sender,
.mail-conv-detail {
float: left;
}
.mail-conv-detail {
margin-left: 20px;
width: 500px;
}
.mail-conv-subject {
font-size: 1.4em;
margin: 10px 0;
}
.mail-conv-outside-wrapper-end {
clear: both;
}
.mail-conv-outside-wrapper {
margin-top: 30px;
}
.mail-conv-delete-wrapper {
float: right;
margin-right: 30px;
margin-top: 15px;
}
.mail-conv-break {
clear: both;
}
.mail-conv-delete-icon {
border: none;
}
/* group member */
#contact-edit-drop-link,
.mail-list-delete-wrapper,
.group-delete-wrapper {
float: right;
margin-right: 50px;
.drophide {
background-image: url('../../../images/icons/22/delete.png');
display: block; width: 22px; height: 22px;
opacity: 0.3;
position: relative;
top: -50px;
}
.drop {
background-image: url('../../../images/icons/22/delete.png');
display: block; width: 22px; height: 22px;
position: relative;
top: -50px;
}
}
/*
#group-members {
margin-top: 20px;
padding: 10px;
height: 250px;
overflow: auto;
border: 1px solid #ddd;
}
#group-members-end {
clear: both;
}
#group-all-contacts {
padding: 10px;
height: 450px;
overflow: auto;
border: 1px solid #ddd;
}
#group-all-contacts-end {
clear: both;
margin-bottom: 10px;
}
.contact-block-div {
float: left;
width: 60px;
height: 60px;
}*/
/* widget */ /* widget */
.widget { .widget {
@ -431,6 +535,28 @@ section {
} }
} }
.comment-edit-preview {
width: 710px;
border: 1px solid @Grey5;
margin-top: 10px;
.contact-photo { width: 32px; height: 32px; margin-left: 16px;
/*background: url(../../../images/icons/22/user.png) no-repeat center center;*/
}
.contact-photo-menu-button {
top: 15px !important;
left: 15px !important;
}
.wall-item-links { padding-left: 12px; }
.wall-item-container { width: 700px; }
.tread-wrapper { width: 700px; padding: 0; margin: 10px 0;}
}
.shiny { border-right:10px solid @ShinyBorderColor; }
#jot-preview-content .tread-wrapper { background-color: @JotPreviewBackgroundColor; }
.wall-item-tags { padding-top: 5px; } .wall-item-tags { padding-top: 5px; }
@ -445,7 +571,31 @@ section {
} }
} }
/* contacts menu */ .wwto {
position: absolute !important;
width: 25px; height: 25px;
background: #FFFFFF;
border: 2px solid @Metalic3;
height: 25px;
width: 25px;
overflow: hidden;
padding: 1px;
position: absolute !important;
top: 40px;
left: 30px;
.shadow(0px, 0px)
}
.wwto .contact-photo { width: 25px; height: 25px; }
#pause {
position: fixed;
bottom: 5px;
right: 5px;
}
.contact-photo-wrapper { position: relative; } .contact-photo-wrapper { position: relative; }
.contact-photo { .contact-photo {
width: 48px; height: 48px; width: 48px; height: 48px;
@ -462,8 +612,14 @@ section {
.contact-wrapper { .contact-wrapper {
float: left; float: left;
width: 90px; width: 300px;
height: 90px; height: 90px;
padding-right: 10px;
margin: 0 10px 10px 0px;
.contact-photo-wrapper {
float: left;
margin-right: 10px;
}
.contact-photo { .contact-photo {
width: 80px; height: 80px; width: 80px; height: 80px;
img { width: 80px; height: 80px; } img { width: 80px; height: 80px; }
@ -482,8 +638,12 @@ section {
img { width: 175px; height: 175px; } img { width: 175px; height: 175px; }
} }
} }
.contact-name { text-align: center; font-weight: bold; } .contact-name { font-weight: bold; padding-top: 15px; }
.contact-details { color: @Grey3;} .contact-details {
color: @Grey3; white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* editor */ /* editor */
.jothidden { display: none; } .jothidden { display: none; }
@ -794,6 +954,58 @@ ul.tabs {
#profile-edit-links li { #profile-edit-links li {
list-style: none; list-style: none;
margin-top: 10px;
}
#profile-edit-default-desc {
color: #FF0000;
border: 1px solid #FF8888;
background-color: #FFEEEE;
padding: 7px;
}
#profile-edit-profile-name-label,
#profile-edit-name-label,
#profile-edit-pdesc-label,
#profile-edit-gender-label,
#profile-edit-dob-label,
#profile-edit-address-label,
#profile-edit-locality-label,
#profile-edit-region-label,
#profile-edit-postal-code-label,
#profile-edit-country-name-label,
#profile-edit-marital-label,
#profile-edit-with-label,
#profile-edit-sexual-label,
#profile-edit-politic-label,
#profile-edit-religion-label,
#profile-edit-pubkeywords-label,
#profile-edit-prvkeywords-label,
#profile-edit-gender-select,
#profile-edit-homepage-label {
float: left;
width: 175px;
padding-top: 7px;
}
#profile-edit-profile-name,
#profile-edit-name,
#gender-select,
#profile-edit-pdesc,
#profile-edit-gender,
#profile-edit-dob,
#profile-edit-address,
#profile-edit-locality,
#profile-edit-region,
#profile-edit-postal-code,
#profile-edit-country-name,
#profile-edit-marital,
#profile-edit-with,
#profile-edit-sexual,
#profile-edit-politic,
#profile-edit-religion,
#profile-edit-pubkeywords,
#profile-edit-prvkeywords,
#profile-edit-homepage {
margin-top: 5px;
} }
/* oauth */ /* oauth */
@ -828,6 +1040,28 @@ ul.tabs {
margin: 0px 10px 10px 0px; margin: 0px 10px 10px 0px;
} }
/* profile match wrapper */
.profile-match-wrapper {
float: left;
width: 90px;
height: 90px;
margin-bottom: 20px;
.contact-photo {
width: 80px; height: 80px;
img { width: 80px; height: 80px; }
}
.contact-photo-menu-button {
left: 0px;
top: 63px;
}
}
/* page footer */ /* page footer */
footer { height: 100px; display: table-row; } footer { height: 100px; display: table-row; }
.pager {
margin-top: 25px;
clear: both;
}

View file

@ -1,7 +1,7 @@
<div class="wall-item-decor"> <div class="wall-item-decor">
<span class="icon s22 star $isstarred" id="starred-$id" title="$star.starred">$star.starred</span> <span class="icon star $isstarred" id="starred-$id" title="$star.starred">$star.starred</span>
{{ if $lock }}<span class="icon s22 lock fakelink" onclick="lockview(event,$id);" title="$lock">$lock</span>{{ endif }} {{ if $lock }}<span class="icon lock fakelink" onclick="lockview(event,$id);" title="$lock">$lock</span>{{ endif }}
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" /> <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
</div> </div>
@ -25,6 +25,7 @@
<a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle">$name</span></a> <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle">$name</span></a>
<span class="wall-item-ago">- &nbsp; <span class="wall-item-ago">- &nbsp;
{{ if $plink }}<a class="link" title="$plink.title" href="$plink.href" style="color: #999">$ago</a>{{ else }} $ago {{ endif }} {{ if $plink }}<a class="link" title="$plink.title" href="$plink.href" style="color: #999">$ago</a>{{ else }} $ago {{ endif }}
{{ if $lock }} - <span class="fakelink" style="color: #999" onclick="lockview(event,$id);">$lock</span> {{ endif }}
</span> </span>
</div> </div>
<div class="wall-item-content"> <div class="wall-item-content">

View file

@ -334,11 +334,15 @@ h4 {
font-size: 1.1em; font-size: 1.1em;
} }
a {color: #3e3e8c; a {
text-decoration: none; color: #36C;
/* color: #3e3e8c; */
text-decoration: none;
}
a:hover {
/* color: blue; */
text-decoration: underline
} }
a:hover {color: blue;
text-decoration: underline}
.wall-item-name-link { .wall-item-name-link {
/* float: left;*/ /* float: left;*/
@ -364,12 +368,13 @@ text-decoration: underline}
clear: both; clear: both;
} }
.fakelink { .fakelink {
color: #3e3e8c; color: #36c;
/* color: #3e3e8c; */
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
} }
.fakelink:hover { .fakelink:hover {
color: blue; /* color: blue; */
/*color: #005c94; */ /*color: #005c94; */
text-decoration: underline; text-decoration: underline;
} }
@ -402,6 +407,12 @@ code {
.tool { .tool {
height: auto; height: auto;
overflow: auto; overflow: auto;
padding: 3px;
}
#saved-search-ul .tool:hover,
#nets-sidebar .tool:hover,
#sidebar-group-list .tool:hover {
background: #EEE;
} }
.tool .label { .tool .label {
float: left; float: left;
@ -409,6 +420,12 @@ code {
.tool .action { .tool .action {
float: right; float: right;
} }
.tool a {
color: #000;
}
.tool a:hover {
text-decoration: none;
}
/* popup notifications */ /* popup notifications */
div.jGrowl div.notice { div.jGrowl div.notice {
background: #511919 url("../../../images/icons/48/notice.png") no-repeat 5px center; background: #511919 url("../../../images/icons/48/notice.png") no-repeat 5px center;
@ -496,7 +513,7 @@ nav ul {
nav ul li { nav ul li {
list-style: none; list-style: none;
margin: 0px; margin: 0px;
padding: 0px; /* padding: 1px 1px 3px 1px; */
float: left; float: left;
} }
nav ul li .menu-popup { nav ul li .menu-popup {
@ -536,7 +553,8 @@ nav .nav-menu.selected {
nav .nav-notify { nav .nav-notify {
display: none; display: none;
position: absolute; position: absolute;
background-color: #19aeff; background-color: #36c;
/* background-color: #19aeff; */
-moz-border-radius: 5px 5px 5px 5px; -moz-border-radius: 5px 5px 5px 5px;
-webkit-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px;
border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px;
@ -571,10 +589,25 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify, nav #nav-notifications-link
nav #nav-apps-link.selected { nav #nav-apps-link.selected {
background-color: #364e59; background-color: #364e59;
} }
#nav-notifications-mark-all {
/* padding: 1px 1px 2px 26px; */
/* border-bottom: 1px solid #364E59; */
/* margin: 0px 0px 2px 0px;
padding: 5px 10px; */
}
#nav-notifications-see-all {
/* padding: 1px 1px 2px 26px; */
/* border-bottom: 1px solid #364E59; */
/* margin: 0px 0px 2px 0px;
padding: 5px 10px; */
}
ul.menu-popup { ul.menu-popup {
position: absolute; position: absolute;
display: none; display: none;
width: 10em; width: 11em;
background: #ffffff; background: #ffffff;
color: #2d2d2d; color: #2d2d2d;
margin: 0px; margin: 0px;
@ -644,6 +677,15 @@ ul.menu-popup .empty {
max-height: 550px; max-height: 550px;
overflow: auto; overflow: auto;
} }
/* #nav-notifications-menu a {
display: inline;
padding: 5px 0px;
margin: 0px 0px 2px 0px;
}
#nav-notifications-menu li:hover {
background-color: #bdcdd4;
}*/
#nav-notifications-menu img { #nav-notifications-menu img {
float: left; float: left;
margin-right: 5px; margin-right: 5px;
@ -656,6 +698,13 @@ ul.menu-popup .empty {
color: #9eabb0; color: #9eabb0;
display: block; display: block;
} }
.notif-image {
width: 32px;
height: 32px;
padding: 7px 7px 0px 0px;
}
/* aside */ /* aside */
aside { aside {
display: table-cell; display: table-cell;
@ -711,7 +760,8 @@ aside #dfrn-request-link {
} }
aside #dfrn-request-link:hover { aside #dfrn-request-link:hover {
text-decoration: none; text-decoration: none;
background-color: #19aeff; background-color: #36c;
/* background-color: #19aeff; */
} }
aside #profiles-menu { aside #profiles-menu {
width: 20em; width: 20em;
@ -813,7 +863,7 @@ section {
display: table-cell; display: table-cell;
vertical-align: top; vertical-align: top;
width: 800px; width: 800px;
padding: 0px 20px 0px 10px; padding: 0px 0px 0px 10px;
} }
/* wall item */ /* wall item */
.tread-wrapper { .tread-wrapper {
@ -886,7 +936,7 @@ section {
} }
.wall-item-container .wall-item-content img { .wall-item-container .wall-item-content img {
max-width: 710px; max-width: 700px;
} }
.wall-item-container .wall-item-links, .wall-item-container .wall-item-actions { .wall-item-container .wall-item-links, .wall-item-container .wall-item-actions {
display: table-cell; display: table-cell;
@ -946,7 +996,7 @@ section {
/*background: url(../../../images/icons/22/user.png) no-repeat center center;*/ /*background: url(../../../images/icons/22/user.png) no-repeat center center;*/
} }
.wall-item-container.comment .contact-photo-menu-button { .wall-item-container.comment {
top: 15px !important; top: 15px !important;
left: 15px !important; left: 15px !important;
} }
@ -985,7 +1035,7 @@ section {
/*background: url(../../../images/icons/22/user.png) no-repeat center center;*/ /*background: url(../../../images/icons/22/user.png) no-repeat center center;*/
} }
.comment-edit-preview .contact-photo-menu-button { .comment-edit-preview {
top: 15px !important; top: 15px !important;
left: 15px !important; left: 15px !important;
} }
@ -1000,6 +1050,16 @@ section {
padding: 0; padding: 0;
margin: 10px 0; margin: 10px 0;
} }
.shiny {
/* border-right: 10px solid #fce94f; */
border-right: 1px solid #A7C7F7;
padding-right: 12px;
}
#jot-preview-content .tread-wrapper {
background-color: #fce94f;
}
.wall-item-tags { .wall-item-tags {
padding-top: 1px; padding-top: 1px;
padding-bottom: 2px; padding-bottom: 2px;
@ -1056,12 +1116,7 @@ section {
width: 48px; width: 48px;
height: 48px; height: 48px;
} }
.contact-photo-menu-button {
display: none;
position: absolute;
left: -2px;
top: 31px;
}
.contact-wrapper { .contact-wrapper {
float: left; float: left;
width: 90px; width: 90px;
@ -1076,26 +1131,21 @@ section {
width: 80px; width: 80px;
height: 80px; height: 80px;
} }
.contact-wrapper .contact-photo-menu-button { .contact-wrapper {
left: 0px; left: 0px;
top: 63px; top: 63px;
} }
.directory-item { .contact-photo {
float: left; width: 48px;
width: 200px; height: 48px;
height: 200px;
} }
.directory-item .contact-photo { .contact-photo img {
width: 175px; width: 48px;
height: 175px; height: 48px;
}
.directory-item .contact-photo img {
width: 175px;
height: 175px;
} }
.contact-name { .contact-name {
text-align: center; /* text-align: center; */
font-weight: bold; /*font-weight: bold;*/
font-size: 12px; font-size: 12px;
} }
.contact-details { .contact-details {
@ -1459,7 +1509,8 @@ ul.tabs li .active {
} }
/* contacts */ /* contacts */
.contact-entry-wrapper { .contact-entry-wrapper {
width: 50px; width: 120px;
height: 120px;
float: left; float: left;
} }
/* photo */ /* photo */
@ -1482,10 +1533,48 @@ ul.tabs li .active {
width: 80px; width: 80px;
height: 80px; height: 80px;
} }
.profile-match-wrapper .contact-photo-menu-button { .profile-match-wrapper {
left: 0px; left: 0px;
top: 63px; top: 63px;
} }
.contact-photo-menu-button {
position: relative;
background-image: url("../../../images/icons/16/menu.png");
background-position: top left;
background-repeat: no-repeat;
margin: 0px 0px -16px 0px;
padding: 0px;
width: 16px;
height: 16px;
top: -20px; left:0px;
overflow: hidden;
text-indent: 40px;
display: none;
}
.contact-photo-menu {
width: 11em;
border: 3px solid #364e59;
color: #2d2d2d;
background: #FFFFFF;
/* position: absolute;*/
position: relative;
left: 0px; top: 0px;
display: none;
z-index: 10000;
}
.contact-photo-menu ul { margin:0px; padding: 0px; list-style: none }
.contact-photo-menu li a {
display: block;
padding: 5px 10px;
color: #2d2d2d;
text-decoration: none;
}
.contact-photo-menu li a:hover {
background-color: #bdcdd4;
}
/* page footer */ /* page footer */
footer { footer {
height: 100px; height: 100px;
@ -1527,397 +1616,338 @@ blockquote {
#prof-separator { display: none;} #prof-separator { display: none;}
*/ */
#prvmail-wrapper, .mail-conv-detail, .mail-list-detail { #prvmail-to-label, #prvmail-subject-label, #prvmail-message-label {
position: relative; margin-bottom: 10px;
width: 500px; margin-top: 20px;
padding: 50px;
margin: 20px auto;
background-color: #fff;
-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
} }
#prvmail-wrapper:before, #prvmail-wrapper:after, .mail-conv-detail:before, .mail-conv-detail:after, .mail-list-detail:before, .mail-list-detail:after { #prvmail-submit {
position: absolute; float: left;
width: 40%; margin-top: 10px;
height: 10px; margin-right: 30px;
content: ' '; }
left: 12px; #prvmail-upload-wrapper,
bottom: 12px; #prvmail-link-wrapper,
background: transparent; #prvmail-rotator-wrapper {
-webkit-transform: skew(-5deg) rotate(-5deg); float: left;
-moz-transform: skew(-5deg) rotate(-5deg); margin-top: 10px;
-ms-transform: skew(-5deg) rotate(-5deg); margin-right: 10px;
-o-transform: skew(-5deg) rotate(-5deg); width: 24px;
transform: skew(-5deg) rotate(-5deg);
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
z-index: -1;
} }
#prvmail-wrapper:after, .mail-conv-detail:after, .mail-list-detail:after { #prvmail-end {
left: auto; clear: both;
right: 12px;
-webkit-transform: skew(5deg) rotate(5deg);
-moz-transform: skew(5deg) rotate(5deg);
-ms-transform: skew(5deg) rotate(5deg);
-o-transform: skew(5deg) rotate(5deg);
transform: skew(5deg) rotate(5deg);
}
.prvmail-text {
width: 100%;
}
.mail-list-outside-wrapper {
margin-top: 20px;
}
.mail-list-sender {
float: left;
padding: 5px;
background-color: #efefef;
border: 2px dotted #eeeeee;
-moz-box-shadow: 3px 3px 4px #959494;
-webkit-box-shadow: 3px 3px 4px #959494;
box-shadow: 3px 3px 4px #959494;
} }
.mail-list-sender,
.mail-list-detail { .mail-list-detail {
margin-left: 100px; float: left;
width: 300px;
min-height: 70px;
padding: 20px;
padding-top:10px;
border: 1px solid #dddddd;
}
.mail-list-sender-name {
font-size: 1.1em;
display: inline;
font-variant:small-caps;
} }
.mail-list-detail {
.mail-list-date { margin-left: 20px;
float: right;
clear: block;
display: inline;
font-size: 0.9em;
padding-left: 10px;
font-stretch:ultra-condensed;
font-variant:small-caps;
} }
.mail-list-subject { .mail-list-subject {
clear: block; font-size: 1.1em;
font-size: 1.2em; margin-top: 10px;
padding-top: 20px; }
padding-right: 50px; a.mail-list-link {
display: block;
font-size: 1.3em;
padding: 4px 0;
} }
.mail-list-subject a { /*
color: #626262; *a.mail-list-link:hover {
} * background-color: #15607B;
* color: #F5F6FB;
*}
*/
.mail-list-delete-wrapper { float: right;}
.mail-list-outside-wrapper-end { .mail-list-outside-wrapper-end {
clear: both; clear: both;
}
.mail-list-outside-wrapper {
margin-top: 30px;
}
.mail-list-delete-wrapper {
float: right;
margin-right: 30px;
margin-top: 15px;
}
.mail-list-delete-icon {
border: none;
}
.mail-conv-sender,
.mail-conv-detail {
float: left;
}
.mail-conv-detail {
margin-left: 20px;
width: 500px;
}
.mail-conv-subject {
font-size: 1.4em;
margin: 10px 0;
}
.mail-conv-outside-wrapper-end {
clear: both;
} }
.mail-conv-outside-wrapper { .mail-conv-outside-wrapper {
margin-bottom: 10px; margin-top: 30px;
} }
.mail-conv-sender {float: left; margin: 0px 5px 5px 0px; } .mail-conv-delete-wrapper {
.mail-conv-sender-photo { float: right;
width: 64px; margin-right: 30px;
height: 64px; margin-top: 15px;
}
.mail-conv-break {
clear: both;
} }
.mail-conv-sender-name { float: left; font-variant:small-caps; font-style: bold; } .mail-conv-delete-icon {
.mail-conv-date { float: right; font-variant:small-caps; } border: none;
.mail-conv-subject { clear: right; font-weight: bold; font-size: 1.2em }
.mail-conv-body {
clear: both;
} }
.mail-conv-detail {
width: 500px;
padding: 30px;
padding-bottom: 10px;
margin-left: 20px;
margin-bottom: 0px;
vertical-align: middle;
margin: auto;
border: 1px solid #dddddd;
}
.mail-conv-break { display: none; border: none;}
.mail-conv-delete-wrapper { padding-top: 10px; width: 510px; text-align: right; }
/* ========== */ /* ========== */
/* = Events = */ /* = Events = */
/* ========== */ /* ========== */
.clear { clear: both; }
.eventcal { .eventcal {
float: left; float: left;
font-size: 20px; font-size: 20px;
padding: 20px;
} }
.vevent { .vevent {
position: relative; border: 1px solid #CCCCCC;
width: 400px; }
padding: 20px; .vevent .event-description, .vevent .event-location {
padding-top: 10px; margin-left: 10px;
margin: 0 0px; margin-right: 10px;
margin-bottom: 10px; }
background-color: #fff; .vevent .event-start {
-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); margin-left: 10px;
-moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1); margin-right: 10px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2), inset 0 0 50px rgba(0, 0, 0, 0.1);
} }
.vevent:before, .vevent:after { #new-event-link {
position: absolute; margin-bottom: 10px;
width: 40%;
height: 10px;
content: ' ';
left: 12px;
bottom: 12px;
background: transparent;
-webkit-transform: skew(-5deg) rotate(-5deg);
-moz-transform: skew(-5deg) rotate(-5deg);
-ms-transform: skew(-5deg) rotate(-5deg);
-o-transform: skew(-5deg) rotate(-5deg);
transform: skew(-5deg) rotate(-5deg);
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
z-index: -1;
}
.vevent:after {
left: auto;
right: 12px;
-webkit-transform: skew(5deg) rotate(5deg);
-moz-transform: skew(5deg) rotate(5deg);
-ms-transform: skew(5deg) rotate(5deg);
-o-transform: skew(5deg) rotate(5deg);
transform: skew(5deg) rotate(5deg);
}
.vevent .event-description {
margin-left: 10px;
margin-right: 10px;
text-align:center;
font-size: 1.2em;
font-weight:bolder;
}
.vevent .event-location{
margin-left: 10px;
margin-right: 10px;
font-size: 1em;
font-style: oblique;
text-align: center;
}
.vevent .event-start, .vevent .event-end {
margin-left: 20px;
margin-right: 20px;
margin-bottom: 2px;
margin-top: 2px;
font-size: 0.9em;
font-variant: small-caps;
text-align: left;
}
#new-event-link{
width: 130px;
padding: 7px;
margin-bottom: 10px;
margin-left: 170px; ;
-moz-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
-webkit-box-shadow:inset 0px 1px 0px 0px #cfcfcf;
box-shadow:inset 0px 1px 0px 0px #cfcfcf;
background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bdbdbd), color-stop(1, #a2a2a2) );
background:-moz-linear-gradient( center top, #bdbdbd 5%, #a2a2a2 100% );
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdbdbd', endColorstr='#a2a2a2');
background-color:#bdbdbd;
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
color: #efefef;
}
#new-event-link:hover {
color: #efefef;
background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #b20202), color-stop(1, #d60808) );
background:-moz-linear-gradient( center top, #b20202 5%, #d60808 100% );
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b20202', endColorstr='#d60808');
background-color:#b20202;
}
#new-event-link:active {
background-color: #b20202;
position:relative;
top:1px;
}
#new-event-link a {
color: #efefef;
text-align: center;
} }
.edit-event-link, .plink-event-link { .edit-event-link, .plink-event-link {
float: left; float: left;
margin-top: 4px; margin-top: 4px;
margin-right: 4px; margin-right: 4px;
margin-bottom: 15px; margin-bottom: 15px;
} }
.event-description:before { .event-description:before {
content: url('calendar.png'); content: url('../../../images/calendar.png');
margin-right: 15px; margin-right: 15px;
vertical-align: middle;
} }
.event-start, .event-end { .event-start, .event-end {
margin-left: 10px; margin-left: 10px;
width: 330px; width: 330px;
clear: both;
} }
.event-start .dtstart, .event-end .dtend { .event-start .dtstart, .event-end .dtend {
float: right; float: right;
} }
.event-list-date { .event-list-date {
color: #626262; margin-bottom: 10px;
margin-bottom: 10px;
font-variant:small-caps;
font-stretch:condensed;
} }
.prevcal, .nextcal { .prevcal, .nextcal {
float: left; float: left;
margin-left: 32px; margin-left: 32px;
margin-right: 32px; margin-right: 32px;
margin-top: 64px; margin-top: 64px;
}
.event-calendar-end {
clear: both;
} }
.event-calendar-end {
clear: both;
}
.calendar { .calendar {
width: 300px; font-family: Courier, monospace;
font-family: Helvetica, Arial, sans-serif;
background-color: #f1f1f1;
border: 1px solid #dedede;
margin-bottom: 10px;
-moz-box-shadow: 5px 5px 8px #959494;
-webkit-box-shadow: 5px 5px 8px #959494;
box-shadow: 5px 5px 8px #959494;
} }
.calendar caption{
background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #d60808), color-stop(1, #b20202) );
background:-moz-linear-gradient( center top, #d60808 5%, #b20202 100% );
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d60808', endColorstr='#b20202');
background-color: #b20202;
padding: 10px 0px 10px 0px;
width: 300px;
color: #ffffff;
font-weight: bold;
text-align:center;
font-variant:small-caps;
-moz-box-shadow: 5px 2px 8px #959494;
-webkit-box-shadow: 5px 2px 8px #959494;
box-shadow: 5px 2px 8px #959494;
}
tr {
border: 1px solid #eeeeee;
}
.calendar td {
font-size: 14px;
text-align: center;
padding: 3px 0px;
}
.calendar td > a {
background-color: #cdcdcd;
padding: 2px;
color: #000;
}
.calendar th {
font-size: 16px;
}
.today { .today {
font-weight: bold; font-weight: bold;
text-align: center; color: #FF0000;
background-color: #b20202;
color: #fff;
} }
#event-start-text, .settings-block {
#event-finish-text { border: 1px solid #AAA;
margin-top: 10px; margin: 10px;
margin-bottom: 5px; padding: 10px;
} }
#event-nofinish-checkbox, .app-title {
#event-nofinish-text, margin: 10px;
#event-adjust-checkbox,
#event-adjust-text,
#event-share-checkbox {
float: left;
} }
#event-datetime-break { #identity-manage-desc {
margin-bottom: 10px; margin-top:15px;
margin-bottom: 15px;
} }
#event-nofinish-break, #identity-manage-choose {
#event-adjust-break, margin-bottom: 15px;
#event-share-break {
clear: both;
} }
#event-desc-text, #identity-submit {
#event-location-text { margin-top: 20px;
margin-top: 10px;
margin-bottom: 5px;
} }
#event-submit { #photo-prev-link, #photo-next-link {
margin-top: 10px; padding: 10px;
float: left;
}
#photo-photo {
float: left;
}
#photo-photo-end {
clear: both;
}
.profile-match-photo {
float: left;
text-align: center;
width: 120px;
}
.profile-match-name {
float: left;
text-align: center;
width: 120px;
overflow: hidden;
}
.profile-match-break,
.profile-match-end {
clear: both;
}
.profile-match-connect {
text-align: center;
font-weight: bold;
}
.profile-match-wrapper {
float: left;
padding: 10px;
width: 120px;
height: 120px;
scroll: auto;
}
#profile-match-wrapper-end {
clear: both;
} }
/* ============= */ /* ============= */
/* = Directory = */ /* = Directory = */
/* ============= */ /* ============= */
/* contacts menu */
.contact-photo-wrapper {
position: relative;
}
.contact-photo {
width: 48px;
height: 48px;
overflow: hidden;
display: block;
}
.contact-photo img {
width: 48px;
height: 48px;
}
.contact-photo-menu-button {
display: none;
/* position: absolute; */
/* position: absolute; */
left: -2px;
top: -20px;
}
.contact-wrapper {
float: left;
width: 90px;
height: 90px;
margin-bottom: 15px;
}
.contact-wrapper .contact-photo {
width: 80px;
height: 80px;
}
.contact-wrapper .contact-photo img {
width: 80px;
height: 80px;
}
.contact-wrapper .contact-photo-menu-button {
left: 0px;
top: 63px;
}
.directory-item { .directory-item {
float: left; float: left;
margin: 50px 50px 0px 0px; width: 200px;
height: 200px;
}
.directory-item .contact-photo {
width: 175px;
height: 175px;
}
.directory-item .contact-photo img {
width: 175px;
height: 175px;
}
.contact-name {
text-align: center;
font-weight: bold;
font-size: 12px;
}
.contact-details {
color: #999999;
} }
.directory-details { .photo-top-image-wrapper {
font-size: 0.9em; position: relative;
font-variant: small-caps; float: left;
width: 160px; margin-top: 15px;
margin-right: 15px;
width: 200px; height: 200px;
overflow: hidden;
}
.photo-top-album-name {
width: 100%;
min-height: 2em;
position: absolute;
bottom: 0px;
padding: 0px 3px;
padding-top: 0.5em;
background-color: rgb(255, 255, 255);
}
#photo-top-end {
clear: both;
} }
.directory-name { #photo-top-links {
font-size: 1em; margin-bottom: 30px;
font-variant: small-caps; margin-left: 30px;
width: 150px;
} }
#photos-upload-newalbum-div {
float: left;
width: 175px;
}

View file

@ -1,7 +1,7 @@
{{ if $indent }}{{ else }} {{ if $indent }}{{ else }}
<div class="wall-item-decor"> <div class="wall-item-decor">
<span class="icon s22 star $isstarred" id="starred-$id" title="$star.starred">$star.starred</span> <span class="icon star $isstarred" id="starred-$id" title="$star.starred">$star.starred</span>
{{ if $lock }}<span class="icon s22 lock fakelink" onclick="lockview(event,$id);" title="$lock">$lock</span>{{ endif }} {{ if $lock }}<span class="icon lock fakelink" onclick="lockview(event,$id);" title="$lock">$lock</span>{{ endif }}
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" /> <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
</div> </div>
{{ endif }} {{ endif }}
@ -23,8 +23,9 @@
</div> </div>
<div class="wall-item-actions-author"> <div class="wall-item-actions-author">
<a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle">$name</span></a> <a href="$profile_url" target="redir" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle">$name</span></a>
<span class="wall-item-ago">- &nbsp; <span class="wall-item-ago">-
{{ if $plink }}<a class="link" title="$plink.title" href="$plink.href" style="color: #999">$ago</a>{{ else }} $ago {{ endif }} {{ if $plink }}<a class="link" title="$plink.title" href="$plink.href" style="color: #999">$ago</a>{{ else }} $ago {{ endif }}
{{ if $lock }} - <span class="fakelink" style="color: #999" onclick="lockview(event,$id);">$lock</span> {{ endif }}
</span> </span>
</div> </div>
<div class="wall-item-content"> <div class="wall-item-content">

View file

@ -1,7 +1,7 @@
{{ if $indent }}{{ else }} {{ if $indent }}{{ else }}
<div class="wall-item-decor"> <div class="wall-item-decor">
<span class="icon s22 star $isstarred" id="starred-$id" title="$star.starred">$star.starred</span> <span class="icon star $isstarred" id="starred-$id" title="$star.starred">$star.starred</span>
{{ if $lock }}<span class="icon s22 lock fakelink" onclick="lockview(event,$id);" title="$lock">$lock</span>{{ endif }} {{ if $lock }}<span class="icon lock fakelink" onclick="lockview(event,$id);" title="$lock">$lock</span>{{ endif }}
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" /> <img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
</div> </div>
{{ endif }} {{ endif }}
@ -32,6 +32,7 @@
$to <a href="$owner_url" target="redir" title="$olinktitle" class="wall-item-name-link"><span class="wall-item-name$osparkle" id="wall-item-ownername-$id">$owner_name</span></a> $to <a href="$owner_url" target="redir" title="$olinktitle" class="wall-item-name-link"><span class="wall-item-name$osparkle" id="wall-item-ownername-$id">$owner_name</span></a>
$vwall <span class="wall-item-ago">- &nbsp; $vwall <span class="wall-item-ago">- &nbsp;
{{ if $plink }}<a class="link" title="$plink.title" href="$plink.href" style="color: #999">$ago</a>{{ else }} $ago {{ endif }} {{ if $plink }}<a class="link" title="$plink.title" href="$plink.href" style="color: #999">$ago</a>{{ else }} $ago {{ endif }}
{{ if $lock }} - <span class="fakelink" style="color: #999" onclick="lockview(event,$id);">$lock</span> {{ endif }}
</span> </span>
</div> </div>
@ -61,6 +62,7 @@
{{ if $star }} {{ if $star }}
<a href="#" id="star-$id" onclick="dostar($id); return false;" class="$star.classdo" title="$star.do">$star.do</a> <a href="#" id="star-$id" onclick="dostar($id); return false;" class="$star.classdo" title="$star.do">$star.do</a>
<a href="#" id="unstar-$id" onclick="dostar($id); return false;" class="$star.classundo" title="$star.undo">$star.undo</a> <a href="#" id="unstar-$id" onclick="dostar($id); return false;" class="$star.classundo" title="$star.undo">$star.undo</a>
<a href="#" id="tagger-$id" onclick="itemTag($id); return false;" class="$star.classtagger" title="$star.tagger">$star.tagger</a>
{{ endif }} {{ endif }}
{{ if $vote }} {{ if $vote }}

View file

@ -55,6 +55,8 @@
{{ if $star }} {{ if $star }}
<a href="#" id="star-$id" onclick="dostar($id); return false;" class="$star.classdo" title="$star.do">$star.do</a> <a href="#" id="star-$id" onclick="dostar($id); return false;" class="$star.classdo" title="$star.do">$star.do</a>
<a href="#" id="unstar-$id" onclick="dostar($id); return false;" class="$star.classundo" title="$star.undo">$star.undo</a> <a href="#" id="unstar-$id" onclick="dostar($id); return false;" class="$star.classundo" title="$star.undo">$star.undo</a>
<a href="#" id="tagger-$id" onclick="itemTag($id); return false;" class="$star.classtagger" title="$star.tagger">$star.tagger</a>
{{ endif }} {{ endif }}
{{ if $vote }} {{ if $vote }}