From 311e35731c52102cbce3befc6343f179080ad38c Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 23 Feb 2012 20:51:44 +0100 Subject: [PATCH 01/11] bbcode.php: A list or quote at the beginning wasn't detected --- include/bbcode.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/bbcode.php b/include/bbcode.php index d639b0c39..eef1cde1f 100755 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -151,7 +151,7 @@ function bbcode($Text,$preserve_nl = false) { // handle nested lists $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", '' ,$Text); $Text = preg_replace("/\[list=\](.*?)\[\/list\]/ism", '' ,$Text); $Text = preg_replace("/\[list=1\](.*?)\[\/list\]/ism", '' ,$Text); @@ -194,7 +194,7 @@ function bbcode($Text,$preserve_nl = false) { // Check for [quote] text // handle nested quotes $endlessloop = 0; - while (strpos($Text, "[/quote]") and strpos($Text, "[quote]") and (++$endlessloop < 20)) + while ((strpos($Text, "[/quote]") !== false) and (strpos($Text, "[quote]") !== false) and (++$endlessloop < 20)) $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/ism","$QuoteLayout", $Text); // Check for [quote=Author] text @@ -203,7 +203,7 @@ function bbcode($Text,$preserve_nl = false) { // handle nested quotes $endlessloop = 0; - while (strpos($Text, "[/quote]") and strpos($Text, "[quote=") and (++$endlessloop < 20)) + while ((strpos($Text, "[/quote]")!== false) and (strpos($Text, "[quote=") !== false) and (++$endlessloop < 20)) $Text = preg_replace("/\[quote=[\"\']*(.*?)[\"\']*\](.*?)\[\/quote\]/ism", "
" . $t_wrote . " $2
", $Text); From 484a442f2b1072fe714174f4f782aa7d15818e72 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 23 Feb 2012 20:59:34 +0100 Subject: [PATCH 02/11] GIT problems ... --- include/bbcode.php | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) mode change 100755 => 100644 include/bbcode.php diff --git a/include/bbcode.php b/include/bbcode.php old mode 100755 new mode 100644 index 47822d093..cff26f5c8 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -194,11 +194,7 @@ function bbcode($Text,$preserve_nl = false) { // Check for [quote] text // handle nested quotes $endlessloop = 0; -<<<<<<< HEAD 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)) ->>>>>>> upstream/master $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/ism","$QuoteLayout", $Text); // Check for [quote=Author] text @@ -207,11 +203,7 @@ function bbcode($Text,$preserve_nl = false) { // handle nested quotes $endlessloop = 0; -<<<<<<< HEAD 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)) ->>>>>>> upstream/master $Text = preg_replace("/\[quote=[\"\']*(.*?)[\"\']*\](.*?)\[\/quote\]/ism", "
" . $t_wrote . " $2
", $Text); @@ -293,3 +285,4 @@ function bbcode($Text,$preserve_nl = false) { return $Text; } + From f6320f3319a8009c7bdf51035b226f0ea688d8bd Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 24 Feb 2012 07:11:26 +0100 Subject: [PATCH 03/11] Encoding for incoming mails. Fixed invalid message id (with side effect at the moment). Sending mail as text mail. Encoding name when importing mail contact. --- include/Scrape.php | 15 +++- include/delivery.php | 41 ++++++--- include/email.php | 10 ++- include/html2plain.php | 180 +++++++++++++++++++++++++++++++++++++++ include/notifier.php | 26 ++++-- include/poller.php | 30 ++++++- include/quoteconvert.php | 132 ++++++++++++++++++++++++++++ 7 files changed, 411 insertions(+), 23 deletions(-) create mode 100644 include/html2plain.php create mode 100644 include/quoteconvert.php diff --git a/include/Scrape.php b/include/Scrape.php index 52405ae2d..e98978f38 100755 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -445,10 +445,19 @@ function probe_url($url, $mode = PROBE_NORMAL) { $adr = imap_rfc822_parse_adrlist($x->to,''); if(isset($adr)) { foreach($adr as $feadr) { - if((strcasecmp($feadr->mailbox,$name) == 0) - &&(strcasecmp($feadr->host,$phost) == 0) + if((strcasecmp($feadr->mailbox,$name) == 0) + &&(strcasecmp($feadr->host,$phost) == 0) && (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']); } } } diff --git a/include/delivery.php b/include/delivery.php index 677d89388..c7c2e8a3f 100755 --- a/include/delivery.php +++ b/include/delivery.php @@ -1,6 +1,7 @@ ' . "\n"; + + // for testing purposes: Collect exported mails + $file = tempnam("/tmp/friendica/", "mail-out-"); + file_put_contents($file, json_encode($it)); + + $headers .= 'Message-Id: <' . cleanupmessageid($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']) { - $header .= 'References: <' . $it['parent-uri'] . '>' . "\n"; + $headers .= 'References: <' . cleanupmessageid($it['parent-uri']) . '>' . "\n"; if(! strlen($it['title'])) { $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1", dbesc($it['parent-uri']) @@ -451,10 +462,12 @@ function delivery_run($argv, $argc){ } } $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"; $html = prepare_body($it); - $message = '' . $html . ''; + //$message = '' . $html . ''; + $message = html2plain($html); logger('notifier: email delivery to ' . $addr); mail($addr, $subject, $message, $headers); } @@ -473,7 +486,7 @@ function delivery_run($argv, $argc){ if((! $contact['pubkey']) && (! $public_message)) break; - + if($target_item['verb'] === ACTIVITY_DISLIKE) { // unsupported break; @@ -514,6 +527,14 @@ function delivery_run($argv, $argc){ return; } +function cleanupmessageid($messageid) { + global $a; + + if (!strpos($messageid, '@')) + $messageid = str_replace(":", ".", $messageid).'@'.$a->get_hostname(); + return($messageid); +} + if (array_search(__file__,get_included_files())===0){ delivery_run($argv,$argc); killme(); diff --git a/include/email.php b/include/email.php index 3e6a8186d..452682260 100755 --- a/include/email.php +++ b/include/email.php @@ -79,6 +79,10 @@ function email_get_msg($mbox,$uid) { if(! $struc) return $ret; + // for testing purposes: Collect imported mails + // $file = tempnam("/tmp/friendica2/", "mail-in-"); + // file_put_contents($file, json_encode($struc)); + if(! $struc->parts) { $ret['body'] = email_get_part($mbox,$uid,$struc,0); } @@ -99,13 +103,17 @@ function email_get_part($mbox,$uid,$p,$partno) { // $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple global $htmlmsg,$plainmsg,$charset,$attachments; - echo $partno; + //echo $partno; // DECODE DATA $data = ($partno) ? @imap_fetchbody($mbox,$uid,$partno, FT_UID|FT_PEEK) : @imap_body($mbox,$uid,FT_UID|FT_PEEK); + // for testing purposes: Collect imported mails + // $file = tempnam("/tmp/friendica2/", "mail-body-"); + // file_put_contents($file, $data); + // Any part may be encoded, even plain text messages, so check everything. if ($p->encoding==4) $data = quoted_printable_decode($data); diff --git a/include/html2plain.php b/include/html2plain.php new file mode 100644 index 000000000..2a4cf6639 --- /dev/null +++ b/include/html2plain.php @@ -0,0 +1,180 @@ + 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("<", ">", "
", " ", ""), $message); + $message = preg_replace('= [\s]*=i', " ", $message); + + // nach ... suchen, die ... miteinander vergleichen und bei Gleichheit durch ein einzelnes ... ersetzen. + $pattern = '/(.*?)<\/a>/is'; + preg_match_all($pattern, $message, $result, PREG_SET_ORDER); + + foreach ($result as $treffer) { + if ($treffer[1] == $treffer[2]) { + $search = ''.$treffer[1].''; + $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(" ", " ", $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)); +} +?> diff --git a/include/notifier.php b/include/notifier.php index 37bc6dae5..3ad433afd 100755 --- a/include/notifier.php +++ b/include/notifier.php @@ -2,6 +2,7 @@ require_once("boot.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 @@ -633,7 +634,7 @@ function notifier_run($argv, $argc){ ); if($r1 && $r1[0]['reply_to']) $reply_to = $r1[0]['reply_to']; - + $subject = (($it['title']) ? email_header_encode($it['title'],'UTF-8') : t("\x28no subject\x29")) ; // only expose our real email address to true friends @@ -646,10 +647,14 @@ function notifier_run($argv, $argc){ if($reply_to) $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: <' . cleanupmessageid($it['uri']) . '>' . "\n"; if($it['uri'] !== $it['parent-uri']) { - $header .= 'References: <' . $it['parent-uri'] . '>' . "\n"; + $headers .= 'References: <' . cleanupmessageid($it['parent-uri']) . '>' . "\n"; if(! strlen($it['title'])) { $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1", dbesc($it['parent-uri']) @@ -667,10 +672,12 @@ function notifier_run($argv, $argc){ } $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"; $html = prepare_body($it); - $message = '' . $html . ''; + //$message = '' . $html . ''; + $message = html2plain($html); logger('notifier: email delivery to ' . $addr); mail($addr, $subject, $message, $headers); } @@ -834,6 +841,15 @@ function notifier_run($argv, $argc){ return; } +function cleanupmessageid($messageid) { + global $a; + + if (!strpos($messageid, '@')) + $messageid = str_replace(":", ".", $messageid).'@'.$a->get_hostname(); + + return($messageid); +} + if (array_search(__file__,get_included_files())===0){ notifier_run($argv,$argc); killme(); diff --git a/include/poller.php b/include/poller.php index 3e7a1e9b4..ad15ec244 100755 --- a/include/poller.php +++ b/include/poller.php @@ -1,6 +1,7 @@ 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); $r = email_get_msg($mbox,$msg_uid); @@ -463,15 +476,24 @@ function poller_run($argv, $argc){ logger("Mail: can't fetch msg ".$msg_uid); continue; } - $datarray['body'] = escape_tags($r['body']); + $datarray['body'] = escape_tags(convertquote($r['body'], false)); logger("Mail: Importing ".$msg_uid); // 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 - if(! stristr($meta->from,$contact['addr'])) - $datarray['body'] = t('From: ') . escape_tags($meta->from) . "\n\n" . $datarray['body']; + if(! stristr($meta->from,$contact['addr'])) { + $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['contact-id'] = $contact['id']; diff --git a/include/quoteconvert.php b/include/quoteconvert.php new file mode 100644 index 000000000..3aee93234 --- /dev/null +++ b/include/quoteconvert.php @@ -0,0 +1,132 @@ +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); +} +?> From 0ba45eb74543fc6377c48ac17d8b632e431e9467 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 24 Feb 2012 08:50:42 +0100 Subject: [PATCH 04/11] Sending mail as multipart/alternative (html and plain text) (very basic by now) --- include/delivery.php | 17 +++++------------ include/email.php | 41 ++++++++++++++++++++++++++++++++++++++++- include/notifier.php | 20 ++++++-------------- 3 files changed, 51 insertions(+), 27 deletions(-) diff --git a/include/delivery.php b/include/delivery.php index c7c2e8a3f..98c4f75df 100755 --- a/include/delivery.php +++ b/include/delivery.php @@ -438,14 +438,14 @@ function delivery_run($argv, $argc){ $file = tempnam("/tmp/friendica/", "mail-out-"); file_put_contents($file, json_encode($it)); - $headers .= 'Message-Id: <' . cleanupmessageid($it['uri']). '>' . "\n"; + $headers .= 'Message-Id: <' . email_cleanupmessageid($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']) { - $headers .= 'References: <' . cleanupmessageid($it['parent-uri']) . '>' . "\n"; + $headers .= 'References: <' . email_cleanupmessageid($it['parent-uri']) . '>' . "\n"; if(! strlen($it['title'])) { $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1", dbesc($it['parent-uri']) @@ -461,7 +461,7 @@ 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/plain; charset=UTF-8' . "\n"; $headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n"; @@ -469,7 +469,8 @@ function delivery_run($argv, $argc){ //$message = '' . $html . ''; $message = html2plain($html); logger('notifier: email delivery to ' . $addr); - mail($addr, $subject, $message, $headers); + mail($addr, $subject, $message, $headers);*/ + email_send($addr, $subject, $headers, $it); } break; @@ -527,14 +528,6 @@ function delivery_run($argv, $argc){ return; } -function cleanupmessageid($messageid) { - global $a; - - if (!strpos($messageid, '@')) - $messageid = str_replace(":", ".", $messageid).'@'.$a->get_hostname(); - return($messageid); -} - if (array_search(__file__,get_included_files())===0){ delivery_run($argv,$argc); killme(); diff --git a/include/email.php b/include/email.php index 452682260..fee3e2f68 100755 --- a/include/email.php +++ b/include/email.php @@ -1,4 +1,5 @@ ' . $html . ''; + //$message = html2plain($html); + logger('notifier: email delivery to ' . $addr); + mail($addr, $subject, $body, $headers); +} + +function email_cleanupmessageid($messageid) { + global $a; + + if (!strpos($messageid, '@')) + $messageid = str_replace(":", ".", $messageid).'@'.$a->get_hostname(); + + return($messageid); +} diff --git a/include/notifier.php b/include/notifier.php index 3ad433afd..b22e8c6f0 100755 --- a/include/notifier.php +++ b/include/notifier.php @@ -651,10 +651,10 @@ function notifier_run($argv, $argc){ $file = tempnam("/tmp/friendica/", "mail-out2-"); file_put_contents($file, json_encode($it)); - $headers .= 'Message-Id: <' . cleanupmessageid($it['uri']) . '>' . "\n"; + $headers .= 'Message-Id: <' . email_cleanupmessageid($it['uri']) . '>' . "\n"; if($it['uri'] !== $it['parent-uri']) { - $headers .= 'References: <' . cleanupmessageid($it['parent-uri']) . '>' . "\n"; + $headers .= 'References: <' . email_cleanupmessageid($it['parent-uri']) . '>' . "\n"; if(! strlen($it['title'])) { $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1", dbesc($it['parent-uri']) @@ -671,7 +671,7 @@ 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/plain; charset=UTF-8' . "\n"; $headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n"; @@ -679,7 +679,8 @@ function notifier_run($argv, $argc){ //$message = '' . $html . ''; $message = html2plain($html); logger('notifier: email delivery to ' . $addr); - mail($addr, $subject, $message, $headers); + mail($addr, $subject, $message, $headers);*/ + email_send($addr, $subject, $headers, $it); } break; case NETWORK_DIASPORA: @@ -726,7 +727,7 @@ function notifier_run($argv, $argc){ // we are the relay - send comments, likes and unlikes to our conversants diaspora_send_relay($target_item,$owner,$contact); break; - } + } elseif(($top_level) && (! $walltowall)) { // currently no workable solution for sending walltowall diaspora_send_status($target_item,$owner,$contact); @@ -841,15 +842,6 @@ function notifier_run($argv, $argc){ return; } -function cleanupmessageid($messageid) { - global $a; - - if (!strpos($messageid, '@')) - $messageid = str_replace(":", ".", $messageid).'@'.$a->get_hostname(); - - return($messageid); -} - if (array_search(__file__,get_included_files())===0){ notifier_run($argv,$argc); killme(); From a74b0746b1e39d86aca4f665cfded03e6b344240 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 25 Feb 2012 01:10:45 +0100 Subject: [PATCH 05/11] multipart messages complete, message-id conversion done. --- include/delivery.php | 4 ++-- include/email.php | 37 +++++++++++++++++++++++-------------- include/notifier.php | 4 ++-- include/poller.php | 4 ++-- 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/include/delivery.php b/include/delivery.php index 98c4f75df..97a76965a 100755 --- a/include/delivery.php +++ b/include/delivery.php @@ -438,14 +438,14 @@ function delivery_run($argv, $argc){ $file = tempnam("/tmp/friendica/", "mail-out-"); file_put_contents($file, json_encode($it)); - $headers .= 'Message-Id: <' . email_cleanupmessageid($it['uri']). '>' . "\n"; + $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']) { - $headers .= 'References: <' . email_cleanupmessageid($it['parent-uri']) . '>' . "\n"; + $headers .= 'References: <' . iri2msgid($it['parent-uri']) . '>' . "\n"; if(! strlen($it['title'])) { $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1", dbesc($it['parent-uri']) diff --git a/include/email.php b/include/email.php index fee3e2f68..4fc241f24 100755 --- a/include/email.php +++ b/include/email.php @@ -232,24 +232,27 @@ function email_send($addr, $subject, $headers, $item) { //$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="=_1f5dbdf8dbd0a060ea5bc3050bb14c6a"'."\n\n"; + $headers .= 'Content-Type: multipart/alternative; boundary="=_'.$part.'"'."\n\n"; - $body = "--=_1f5dbdf8dbd0a060ea5bc3050bb14c6a\n"; - $body .= "Content-Transfer-Encoding: quoted-printable\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 .= "--=_1f5dbdf8dbd0a060ea5bc3050bb14c6a\n"; - $body .= "Content-Transfer-Encoding: quoted-printable\n"; + $body .= "--=_".$part."\n"; + $body .= "Content-Transfer-Encoding: 8bit\n"; $body .= "Content-Type: text/html; charset=utf-8\n\n"; - $body .= $html."\n\n"; + $body .= ''.$html."\n"; - $body .= "--=_1f5dbdf8dbd0a060ea5bc3050bb14c6a--\n"; + $body .= "--=_".$part."--"; //$message = '' . $html . ''; //$message = html2plain($html); @@ -257,12 +260,18 @@ function email_send($addr, $subject, $headers, $item) { mail($addr, $subject, $body, $headers); } -function email_cleanupmessageid($messageid) { - global $a; - - if (!strpos($messageid, '@')) - $messageid = str_replace(":", ".", $messageid).'@'.$a->get_hostname(); - - return($messageid); +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); +} diff --git a/include/notifier.php b/include/notifier.php index b22e8c6f0..684395da6 100755 --- a/include/notifier.php +++ b/include/notifier.php @@ -651,10 +651,10 @@ function notifier_run($argv, $argc){ $file = tempnam("/tmp/friendica/", "mail-out2-"); file_put_contents($file, json_encode($it)); - $headers .= 'Message-Id: <' . email_cleanupmessageid($it['uri']) . '>' . "\n"; + $headers .= 'Message-Id: <' . iri2msgid($it['uri']) . '>' . "\n"; if($it['uri'] !== $it['parent-uri']) { - $headers .= 'References: <' . email_cleanupmessageid($it['parent-uri']) . '>' . "\n"; + $headers .= 'References: <' . iri2msgid($it['parent-uri']) . '>' . "\n"; if(! strlen($it['title'])) { $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1", dbesc($it['parent-uri']) diff --git a/include/poller.php b/include/poller.php index ad15ec244..9cf12ed9c 100755 --- a/include/poller.php +++ b/include/poller.php @@ -420,13 +420,13 @@ function poller_run($argv, $argc){ // 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']) : ''); - $datarray['uri'] = trim($meta->message_id,'<>'); + $datarray['uri'] = msgid2iri(trim($meta->message_id,'<>')); if($raw_refs) { $refs_arr = explode(' ', $raw_refs); if(count($refs_arr)) { 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); $r = q("SELECT `uri` , `parent-uri` FROM `item` WHERE `uri` IN ( $qstr ) AND `uid` = %d LIMIT 1", From 01301a616901c23687f5ca33f147af7e4ea67c25 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 25 Feb 2012 02:37:39 +0100 Subject: [PATCH 06/11] Bug fixed where mails where nearly empty. HTML mails can now be received. --- include/email.php | 132 ++++++++++++++++++++++++++-------------------- 1 file changed, 74 insertions(+), 58 deletions(-) diff --git a/include/email.php b/include/email.php index 4fc241f24..659978b6e 100755 --- a/include/email.php +++ b/include/email.php @@ -85,14 +85,27 @@ function email_get_msg($mbox,$uid) { // file_put_contents($file, json_encode($struc)); 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 { + $text = ''; + $html = ''; foreach($struc->parts as $ptop => $p) { - $x = email_get_part($mbox,$uid,$p,$ptop + 1); - if($x) - $ret['body'] = $x; + $x = email_get_part($mbox,$uid,$p,$ptop + 1, 'plain'); + if($x) $text .= $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; } @@ -100,78 +113,81 @@ function email_get_msg($mbox,$uid) { // At the moment - only return plain/text. // Later we'll repackage inline images as data url's and make the HTML safe -function email_get_part($mbox,$uid,$p,$partno) { - // $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple - global $htmlmsg,$plainmsg,$charset,$attachments; +function email_get_part($mbox,$uid,$p,$partno, $subtype) { + // $partno = '1', '2', '2.1', '2.1.3', etc for multipart, 0 if simple + global $htmlmsg,$plainmsg,$charset,$attachments; - //echo $partno; + //echo $partno."\n"; - // DECODE DATA - $data = ($partno) + // DECODE DATA + $data = ($partno) ? @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); // for testing purposes: Collect imported mails // $file = tempnam("/tmp/friendica2/", "mail-body-"); // file_put_contents($file, $data); - // Any part may be encoded, even plain text messages, so check everything. - if ($p->encoding==4) - $data = quoted_printable_decode($data); - elseif ($p->encoding==3) - $data = base64_decode($data); + // Any part may be encoded, even plain text messages, so check everything. + if ($p->encoding==4) + $data = quoted_printable_decode($data); + elseif ($p->encoding==3) + $data = base64_decode($data); - // PARAMETERS - // get all parameters, like charset, filenames of attachments, etc. - $params = array(); - if ($p->parameters) - foreach ($p->parameters as $x) - $params[strtolower($x->attribute)] = $x->value; - if ($p->dparameters) - foreach ($p->dparameters as $x) - $params[strtolower($x->attribute)] = $x->value; + // PARAMETERS + // get all parameters, like charset, filenames of attachments, etc. + $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; - // ATTACHMENT - // Any part with a filename is an attachment, - // so an attached text file (type 0) is not mistaken as the message. + // ATTACHMENT + // Any part with a filename is an attachment, + // so an attached text file (type 0) is not mistaken as the message. - if ($params['filename'] || $params['name']) { - // filename may be given as 'Filename' or 'Name' or both - $filename = ($params['filename'])? $params['filename'] : $params['name']; - // filename may be encoded, so see imap_mime_header_decode() - $attachments[$filename] = $data; // this is a problem if two files have same name - } + if ((isset($params['filename']) and $params['filename']) || (isset($params['name']) and $params['name'])) { + // filename may be given as 'Filename' or 'Name' or both + $filename = ($params['filename'])? $params['filename'] : $params['name']; + // 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 ($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)=='plain') - 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 = ''; // $htmlmsg .= $data ."

"; - $charset = $params['charset']; // assume all parts are same charset - } + $charset = $params['charset']; // assume all parts are same charset + } - // EMBEDDED MESSAGE - // Many bounce notifications embed the original message as type 2, - // but AOL uses type 1 (multipart), which is not handled here. - // There are no PHP functions to parse embedded messages, - // so this just appends the raw source to the main message. -// elseif ($p->type==2 && $data) { -// $plainmsg .= $data."\n\n"; -// } + // EMBEDDED MESSAGE + // Many bounce notifications embed the original message as type 2, + // but AOL uses type 1 (multipart), which is not handled here. + // There are no PHP functions to parse embedded messages, + // so this just appends the raw source to the main message. +// elseif ($p->type==2 && $data) { +// $plainmsg .= $data."\n\n"; +// } - // SUBPART RECURSION - if ($p->parts) { - foreach ($p->parts as $partno0=>$p2) { - $x = email_get_part($mbox,$uid,$p2,$partno . '.' . ($partno0+1)); // 1.2, 1.2.1, etc. - if($x) - return $x; + // SUBPART RECURSION + if (isset($p->parts) and $p->parts) { + $x = ""; + foreach ($p->parts as $partno0=>$p2) { + $x .= email_get_part($mbox,$uid,$p2,$partno . '.' . ($partno0+1), $subtype); // 1.2, 1.2.1, etc. + //if($x) + // return $x; } - } + return $x; + } } From dccefb3c36cd6b4672871a6a378a916bcb9d9992 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 25 Feb 2012 11:00:35 +0100 Subject: [PATCH 07/11] "vier": The contacts are now working again. Line break before closing bbcodes removed. --- include/html2bbcode.php | 4 +- view/theme/vier/colors.less | 4 +- view/theme/vier/icons.less | 5 + view/theme/vier/quattro.less | 250 +++++++++++++++++++++++++++++++++-- view/theme/vier/style.css | 48 +++++-- 5 files changed, 289 insertions(+), 22 deletions(-) diff --git a/include/html2bbcode.php b/include/html2bbcode.php index d8f1a24f1..65920380b 100755 --- a/include/html2bbcode.php +++ b/include/html2bbcode.php @@ -258,7 +258,7 @@ function html2bbcode($message) "[hr]\n", "\n[list", "[/list]\n", - "\n[/list]", + "\n[/", "[list]\n", "[list=1]\n", "\n[*]"), @@ -268,7 +268,7 @@ function html2bbcode($message) "[hr]", "[list", "[/list]", - "[/list]", + "[/", "[list]", "[list=1]", "[*]"), diff --git a/view/theme/vier/colors.less b/view/theme/vier/colors.less index 5314b5284..18d0fc620 100644 --- a/view/theme/vier/colors.less +++ b/view/theme/vier/colors.less @@ -1,6 +1,7 @@ // Quattro Theme LESS file // "Echo" palette from Inkscape +@Yellow1 : #fce94f; @Blue1:rgb(25,174,255); @Blue2:rgb(0,132,200); @Blue3:rgb(0,92,148); @@ -71,6 +72,7 @@ @NoticeBackgroundColor: #511919; @ThreadBackgroundColor: #f6f7f8; +@ShinyBorderColor: @Yellow1; @CommentBoxEmptyColor: @Grey3; @CommentBoxEmptyBorderColor: @Grey3; @@ -91,4 +93,4 @@ @JotPermissionUnlockBackgroundColor: @Grey2; @JotPermissionLockBackgroundColor: @Grey4; @JotLoadingBackgroundColor: @Grey1; - +@JotPreviewBackgroundColor: @Yellow1; diff --git a/view/theme/vier/icons.less b/view/theme/vier/icons.less index f87327703..e314fba1f 100644 --- a/view/theme/vier/icons.less +++ b/view/theme/vier/icons.less @@ -13,6 +13,11 @@ &.link { background-image: url("../../../images/icons/@{size}/link.png"); } &.lock { background-image: url("../../../images/icons/@{size}/lock.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"); } } diff --git a/view/theme/vier/quattro.less b/view/theme/vier/quattro.less index 671577303..9d2608261 100644 --- a/view/theme/vier/quattro.less +++ b/view/theme/vier/quattro.less @@ -3,7 +3,7 @@ /* global */ body { font-family: Liberation Sans,helvetica,arial,clean,sans-serif; - font-size: 10px; + font-size: 11px; background-color: @BodyBackground; color: @BodyColor; margin: 50px 0px 0px 0px; @@ -44,6 +44,9 @@ a:hover {color: @LinkHover; text-decoration: underline; } .hidden { display: none; } .clear { clear: both; } +.fakelink { color: @Link; text-decoration: none; cursor:pointer; } +.fakelink:hover { color: @LinkHover; text-decoration: underline; } + code { font-family: Courier, monospace; white-space: pre; @@ -55,6 +58,23 @@ code { padding: 10px; 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 { @@ -234,7 +254,8 @@ ul.menu-popup { #nav-notifications-menu { - width: 400px; + width: 400px; max-height: 550px; + overflow: auto; img { float: left; margin-right: 5px; } .contactname { font-weight: bold; } .notif-when { font-size: 10px; color: @MenuItemDetail; display: block; } @@ -288,16 +309,99 @@ aside { .allcontact-link { float: right; margin: 5px 0px; } .contact-block-content { clear: both; - overflow: auto; height: auto; + overflow: hidden; + height: auto; } + /*.contact-block-div { width:60px; height: 60px; }*/ .contact-block-link { float: left; 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 { margin-bottom: 2em; @@ -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; } @@ -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 { width: 48px; height: 48px; @@ -462,8 +612,14 @@ section { .contact-wrapper { float: left; - width: 90px; + width: 300px; height: 90px; + padding-right: 10px; + margin: 0 10px 10px 0px; + .contact-photo-wrapper { + float: left; + margin-right: 10px; + } .contact-photo { width: 80px; height: 80px; img { width: 80px; height: 80px; } @@ -482,8 +638,12 @@ section { img { width: 175px; height: 175px; } } } -.contact-name { text-align: center; font-weight: bold; } -.contact-details { color: @Grey3;} +.contact-name { font-weight: bold; padding-top: 15px; } +.contact-details { + color: @Grey3; white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} /* editor */ .jothidden { display: none; } @@ -794,6 +954,58 @@ ul.tabs { #profile-edit-links li { 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 */ @@ -828,6 +1040,28 @@ ul.tabs { 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 */ footer { height: 100px; display: table-row; } + +.pager { + margin-top: 25px; + clear: both; +} + diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index 89dd98146..e99f1a8af 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -946,7 +946,7 @@ section { /*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; left: 15px !important; } @@ -985,7 +985,7 @@ section { /*background: url(../../../images/icons/22/user.png) no-repeat center center;*/ } -.comment-edit-preview .contact-photo-menu-button { +.comment-edit-preview { top: 15px !important; left: 15px !important; } @@ -1056,12 +1056,7 @@ section { width: 48px; height: 48px; } -.contact-photo-menu-button { - display: none; - position: absolute; - left: -2px; - top: 31px; -} + .contact-wrapper { float: left; width: 90px; @@ -1076,7 +1071,7 @@ section { width: 80px; height: 80px; } -.contact-wrapper .contact-photo-menu-button { +.contact-wrapper { left: 0px; top: 63px; } @@ -1459,7 +1454,8 @@ ul.tabs li .active { } /* contacts */ .contact-entry-wrapper { - width: 50px; + width: 120px; + height: 120px; float: left; } /* photo */ @@ -1482,10 +1478,40 @@ ul.tabs li .active { width: 80px; height: 80px; } -.profile-match-wrapper .contact-photo-menu-button { +.profile-match-wrapper { left: 0px; top: 63px; } + +.contact-photo-menu-button { + position: relative; + background-image: url("photo-menu.jpg"); + 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: auto; + border: 2px solid #444444; + 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: 2px; } +.contact-photo-menu li a:hover { color: #FFFFFF; background: #3465A4; text-decoration: none; } + /* page footer */ footer { height: 100px; From 3c68bf25ac9176ccfbc9f2e658dcc360431c46cc Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 25 Feb 2012 11:13:04 +0100 Subject: [PATCH 08/11] "vier" popup menu looks nicer now (more like quattro again) --- view/theme/vier/style.css | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index e99f1a8af..0268c64d8 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -574,7 +574,7 @@ nav #nav-apps-link.selected { ul.menu-popup { position: absolute; display: none; - width: 10em; + width: 11em; background: #ffffff; color: #2d2d2d; margin: 0px; @@ -1485,7 +1485,7 @@ ul.tabs li .active { .contact-photo-menu-button { position: relative; - background-image: url("photo-menu.jpg"); + background-image: url("../../../images/icons/16/menu.png"); background-position: top left; background-repeat: no-repeat; margin: 0px 0px -16px 0px; @@ -1499,8 +1499,9 @@ ul.tabs li .active { } .contact-photo-menu { - width: auto; - border: 2px solid #444444; + width: 11em; + border: 3px solid #364e59; + color: #2d2d2d; background: #FFFFFF; /* position: absolute;*/ position: relative; @@ -1509,8 +1510,15 @@ ul.tabs li .active { z-index: 10000; } .contact-photo-menu ul { margin:0px; padding: 0px; list-style: none } -.contact-photo-menu li a { display: block; padding: 2px; } -.contact-photo-menu li a:hover { color: #FFFFFF; background: #3465A4; text-decoration: 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 */ footer { From 1cf1870512de474208ce3682450c047e027d6c38 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 25 Feb 2012 19:40:05 +0100 Subject: [PATCH 09/11] poller.php: Test for moving to archive, vier-style: notifications fixed --- include/poller.php | 12 +++++++++++- view/theme/vier/style.css | 25 ++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/include/poller.php b/include/poller.php index 9cf12ed9c..d79079fcd 100755 --- a/include/poller.php +++ b/include/poller.php @@ -454,6 +454,11 @@ function poller_run($argv, $argc){ intval($r[0]['id']) ); } + //logger("Mail: Deleting ".$msg_uid); + //imap_delete($mbox, $msg_uid, FT_UID); + imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID); + logger("Mail: Moving ".$msg_uid); + imap_mail_move($mbox, $msg_uid, "Archiv", FT_UID); continue; } @@ -515,6 +520,11 @@ function poller_run($argv, $argc){ q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1", intval($stored_item) ); + //logger("Mail: Deleting ".$msg_uid); + //imap_delete($mbox, $msg_uid, FT_UID); + imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID); + logger("Mail: Moving ".$msg_uid); + imap_mail_move($mbox, $msg_uid, "Archiv", FT_UID); } } @@ -523,7 +533,7 @@ function poller_run($argv, $argc){ } elseif($contact['network'] === NETWORK_FACEBOOK) { // This is picked up by the Facebook plugin on a cron hook. - // Ignored here. + // Ignored here. } if($xml) { diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index 0268c64d8..61a3b06ab 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -496,7 +496,7 @@ nav ul { nav ul li { list-style: none; margin: 0px; - padding: 0px; + padding: 1px 1px 3px 1px; float: left; } nav ul li .menu-popup { @@ -571,6 +571,18 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify, nav #nav-notifications-link nav #nav-apps-link.selected { background-color: #364e59; } + +#nav-notifications-mark-all { + padding: 1px 1px 2px 1px; + border-bottom: 1px solid #364E59; + margin: 0px 0px 2px 26px; +} + +#nav-notifications-see-all { + padding: 1px; + margin: 0px 0px 2px 26px; +} + ul.menu-popup { position: absolute; display: none; @@ -587,9 +599,9 @@ ul.menu-popup { box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); } ul.menu-popup a { - display: block; + /* display: block; */ color: #2d2d2d; - padding: 5px 10px; + /* padding: 5px 10px; */ text-decoration: none; } ul.menu-popup a:hover { @@ -656,6 +668,13 @@ ul.menu-popup .empty { color: #9eabb0; display: block; } + +.notif-image { + width: 32px; + height: 32px; + padding: 7px 7px 0px 0px; +} + /* aside */ aside { display: table-cell; From edc44933a4f57c09ee1cfb93615d052a2b125d99 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 26 Feb 2012 21:16:29 +0100 Subject: [PATCH 10/11] "Vier-Theme" Some more design stuff. --- view/theme/vier/search_item.tpl | 5 +- view/theme/vier/style.css | 672 ++++++++++++++---------------- view/theme/vier/wall_item.tpl | 7 +- view/theme/vier/wallwall_item.tpl | 5 +- 4 files changed, 334 insertions(+), 355 deletions(-) diff --git a/view/theme/vier/search_item.tpl b/view/theme/vier/search_item.tpl index 9cd3c8e2e..372e0d034 100755 --- a/view/theme/vier/search_item.tpl +++ b/view/theme/vier/search_item.tpl @@ -1,7 +1,7 @@
- $star.starred - {{ if $lock }}$lock{{ endif }} + $star.starred + {{ if $lock }}$lock{{ endif }}
@@ -25,6 +25,7 @@ $name -   {{ if $plink }}$ago{{ else }} $ago {{ endif }} + {{ if $lock }} - $lock {{ endif }}
diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index 61a3b06ab..5ffb02f48 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -334,11 +334,15 @@ h4 { font-size: 1.1em; } -a {color: #3e3e8c; -text-decoration: none; +a { + 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 { /* float: left;*/ @@ -364,12 +368,13 @@ text-decoration: underline} clear: both; } .fakelink { - color: #3e3e8c; + color: #36c; + /* color: #3e3e8c; */ text-decoration: none; cursor: pointer; } .fakelink:hover { - color: blue; + /* color: blue; */ /*color: #005c94; */ text-decoration: underline; } @@ -402,6 +407,12 @@ code { .tool { height: auto; overflow: auto; + padding: 3px; +} +#saved-search-ul .tool:hover, +#nets-sidebar .tool:hover, +#sidebar-group-list .tool:hover { + background: #EEE; } .tool .label { float: left; @@ -409,6 +420,12 @@ code { .tool .action { float: right; } +.tool a { + color: #000; +} +.tool a:hover { + text-decoration: none; +} /* popup notifications */ div.jGrowl div.notice { background: #511919 url("../../../images/icons/48/notice.png") no-repeat 5px center; @@ -496,7 +513,7 @@ nav ul { nav ul li { list-style: none; margin: 0px; - padding: 1px 1px 3px 1px; + /* padding: 1px 1px 3px 1px; */ float: left; } nav ul li .menu-popup { @@ -536,7 +553,8 @@ nav .nav-menu.selected { nav .nav-notify { display: none; position: absolute; - background-color: #19aeff; + background-color: #36c; + /* background-color: #19aeff; */ -moz-border-radius: 5px 5px 5px 5px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; @@ -573,14 +591,17 @@ nav #nav-apps-link.selected { } #nav-notifications-mark-all { - padding: 1px 1px 2px 1px; - border-bottom: 1px solid #364E59; - margin: 0px 0px 2px 26px; + /* padding: 1px 1px 2px 26px; */ + /* border-bottom: 1px solid #364E59; */ + margin: 0px 0px 2px 0px; + padding: 5px 10px; } #nav-notifications-see-all { - padding: 1px; - margin: 0px 0px 2px 26px; + /* padding: 1px 1px 2px 26px; */ + /* border-bottom: 1px solid #364E59; */ + margin: 0px 0px 2px 0px; + padding: 5px 10px; } ul.menu-popup { @@ -599,9 +620,9 @@ ul.menu-popup { box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7); } ul.menu-popup a { - /* display: block; */ + display: block; color: #2d2d2d; - /* padding: 5px 10px; */ + padding: 5px 10px; text-decoration: none; } ul.menu-popup a:hover { @@ -656,6 +677,15 @@ ul.menu-popup .empty { max-height: 550px; 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 { float: left; margin-right: 5px; @@ -730,7 +760,8 @@ aside #dfrn-request-link { } aside #dfrn-request-link:hover { text-decoration: none; - background-color: #19aeff; + background-color: #36c; + /* background-color: #19aeff; */ } aside #profiles-menu { width: 20em; @@ -832,7 +863,7 @@ section { display: table-cell; vertical-align: top; width: 800px; - padding: 0px 20px 0px 10px; + padding: 0px 0px 0px 10px; } /* wall item */ .tread-wrapper { @@ -905,7 +936,7 @@ section { } .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 { display: table-cell; @@ -1019,6 +1050,15 @@ section { padding: 0; margin: 10px 0; } + +.shiny { + /* border-right: 10px solid #fce94f; */ + border-right: 1px solid #A7C7F7; +} +#jot-preview-content .tread-wrapper { + background-color: #fce94f; +} + .wall-item-tags { padding-top: 1px; padding-bottom: 2px; @@ -1094,22 +1134,17 @@ section { left: 0px; top: 63px; } -.directory-item { - float: left; - width: 200px; - height: 200px; +.contact-photo { + width: 48px; + height: 48px; } -.directory-item .contact-photo { - width: 175px; - height: 175px; -} -.directory-item .contact-photo img { - width: 175px; - height: 175px; +.contact-photo img { + width: 48px; + height: 48px; } .contact-name { - text-align: center; - font-weight: bold; + /* text-align: center; */ + /*font-weight: bold;*/ font-size: 12px; } .contact-details { @@ -1580,397 +1615,338 @@ blockquote { #prof-separator { display: none;} */ -#prvmail-wrapper, .mail-conv-detail, .mail-list-detail { - position: relative; - width: 500px; - 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-to-label, #prvmail-subject-label, #prvmail-message-label { + margin-bottom: 10px; + margin-top: 20px; } -#prvmail-wrapper:before, #prvmail-wrapper:after, .mail-conv-detail:before, .mail-conv-detail:after, .mail-list-detail:before, .mail-list-detail:after { - position: absolute; - 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; +#prvmail-submit { + float: left; + margin-top: 10px; + margin-right: 30px; +} +#prvmail-upload-wrapper, +#prvmail-link-wrapper, +#prvmail-rotator-wrapper { + float: left; + margin-top: 10px; + margin-right: 10px; + width: 24px; } -#prvmail-wrapper:after, .mail-conv-detail:after, .mail-list-detail: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); -} - -.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; +#prvmail-end { + clear: both; } +.mail-list-sender, .mail-list-detail { - margin-left: 100px; - 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; + float: left; } - -.mail-list-date { - float: right; - clear: block; - display: inline; - font-size: 0.9em; - padding-left: 10px; - font-stretch:ultra-condensed; - font-variant:small-caps; +.mail-list-detail { + margin-left: 20px; } .mail-list-subject { - clear: block; - font-size: 1.2em; - padding-top: 20px; - padding-right: 50px; + font-size: 1.1em; + margin-top: 10px; +} +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 { - 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 { - margin-bottom: 10px; + margin-top: 30px; } -.mail-conv-sender {float: left; margin: 0px 5px 5px 0px; } -.mail-conv-sender-photo { - width: 64px; - height: 64px; +.mail-conv-delete-wrapper { + float: right; + margin-right: 30px; + margin-top: 15px; +} +.mail-conv-break { + clear: both; } -.mail-conv-sender-name { float: left; font-variant:small-caps; font-style: bold; } -.mail-conv-date { float: right; font-variant:small-caps; } -.mail-conv-subject { clear: right; font-weight: bold; font-size: 1.2em } -.mail-conv-body { - clear: both; +.mail-conv-delete-icon { + border: none; } -.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 = */ /* ========== */ - -.clear { clear: both; } .eventcal { - float: left; - font-size: 20px; - padding: 20px; + float: left; + font-size: 20px; } .vevent { - position: relative; - width: 400px; - padding: 20px; - padding-top: 10px; - margin: 0 0px; - margin-bottom: 10px; - 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); + border: 1px solid #CCCCCC; +} +.vevent .event-description, .vevent .event-location { + margin-left: 10px; + margin-right: 10px; +} +.vevent .event-start { + margin-left: 10px; + margin-right: 10px; } -.vevent:before, .vevent:after { - position: absolute; - 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; +#new-event-link { + margin-bottom: 10px; } .edit-event-link, .plink-event-link { - float: left; - margin-top: 4px; - margin-right: 4px; - margin-bottom: 15px; + float: left; + margin-top: 4px; + margin-right: 4px; + margin-bottom: 15px; } .event-description:before { - content: url('calendar.png'); - margin-right: 15px; - vertical-align: middle; + content: url('../../../images/calendar.png'); + margin-right: 15px; } .event-start, .event-end { - margin-left: 10px; - width: 330px; + margin-left: 10px; + width: 330px; + clear: both; } .event-start .dtstart, .event-end .dtend { - float: right; + float: right; } .event-list-date { - color: #626262; - margin-bottom: 10px; - font-variant:small-caps; - font-stretch:condensed; + margin-bottom: 10px; } .prevcal, .nextcal { - float: left; - margin-left: 32px; - margin-right: 32px; - margin-top: 64px; + float: left; + margin-left: 32px; + margin-right: 32px; + margin-top: 64px; } - .event-calendar-end { - clear: both; + clear: both; } -.calendar { - width: 300px; - 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 { - font-weight: bold; - text-align: center; - background-color: #b20202; - color: #fff; -} -#event-start-text, -#event-finish-text { - margin-top: 10px; - margin-bottom: 5px; +.calendar { + font-family: Courier, monospace; +} +.today { + font-weight: bold; + color: #FF0000; } -#event-nofinish-checkbox, -#event-nofinish-text, -#event-adjust-checkbox, -#event-adjust-text, -#event-share-checkbox { - float: left; +.settings-block { + border: 1px solid #AAA; + margin: 10px; + padding: 10px; } -#event-datetime-break { - margin-bottom: 10px; +.app-title { + margin: 10px; } -#event-nofinish-break, -#event-adjust-break, -#event-share-break { - clear: both; +#identity-manage-desc { + margin-top:15px; + margin-bottom: 15px; } -#event-desc-text, -#event-location-text { - margin-top: 10px; - margin-bottom: 5px; +#identity-manage-choose { + margin-bottom: 15px; } -#event-submit { - margin-top: 10px; +#identity-submit { + margin-top: 20px; +} + +#photo-prev-link, #photo-next-link { + 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 = */ /* ============= */ - +/* 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 { - float: left; - margin: 50px 50px 0px 0px; + float: left; + 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 { - font-size: 0.9em; - font-variant: small-caps; - width: 160px; +.photo-top-image-wrapper { + position: relative; + float: left; + 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 { - font-size: 1em; - font-variant: small-caps; - width: 150px; +#photo-top-links { + margin-bottom: 30px; + margin-left: 30px; } + +#photos-upload-newalbum-div { + float: left; + width: 175px; +} + diff --git a/view/theme/vier/wall_item.tpl b/view/theme/vier/wall_item.tpl index 03cbd4c0b..abd2862a1 100644 --- a/view/theme/vier/wall_item.tpl +++ b/view/theme/vier/wall_item.tpl @@ -1,7 +1,7 @@ {{ if $indent }}{{ else }}
- $star.starred - {{ if $lock }}$lock{{ endif }} + $star.starred + {{ if $lock }}$lock{{ endif }}
{{ endif }} @@ -23,8 +23,9 @@
$name - -   + - {{ if $plink }}$ago{{ else }} $ago {{ endif }} + {{ if $lock }} - $lock {{ endif }}
diff --git a/view/theme/vier/wallwall_item.tpl b/view/theme/vier/wallwall_item.tpl index 3357bd8e0..2301da1d1 100644 --- a/view/theme/vier/wallwall_item.tpl +++ b/view/theme/vier/wallwall_item.tpl @@ -1,7 +1,7 @@ {{ if $indent }}{{ else }}
- $star.starred - {{ if $lock }}$lock{{ endif }} + $star.starred + {{ if $lock }}$lock{{ endif }}
{{ endif }} @@ -32,6 +32,7 @@ $to $owner_name $vwall -   {{ if $plink }}$ago{{ else }} $ago {{ endif }} + {{ if $lock }} - $lock {{ endif }}
From fe3dfbee5638dd2988bd8b126652b3138572f02c Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 26 Feb 2012 23:39:29 +0100 Subject: [PATCH 11/11] Mail: New options for actions after importing mails. --- boot.php | 2 +- database.sql | 3 +- include/poller.php | 46 ++++++++++++++++++++++++------- mod/settings.php | 53 +++++++++++++++++++++--------------- update.php | 6 +++- view/settings_connectors.tpl | 2 ++ view/theme/vier/style.css | 13 +++++---- 7 files changed, 84 insertions(+), 41 deletions(-) diff --git a/boot.php b/boot.php index 54f318e5e..e9f9efd70 100755 --- a/boot.php +++ b/boot.php @@ -11,7 +11,7 @@ require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_VERSION', '2.3.1263' ); define ( 'DFRN_PROTOCOL_VERSION', '2.22' ); -define ( 'DB_UPDATE_VERSION', 1126 ); +define ( 'DB_UPDATE_VERSION', 1127 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index 9ad96ca77..ced646f59 100755 --- a/database.sql +++ b/database.sql @@ -634,7 +634,8 @@ CREATE TABLE IF NOT EXISTS `mailacct` ( `mailbox` CHAR( 255 ) NOT NULL, `user` CHAR( 255 ) 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', `last_check` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ) ENGINE = MyISAM DEFAULT CHARSET=utf8; diff --git a/include/poller.php b/include/poller.php index d79079fcd..cfbc46b87 100755 --- a/include/poller.php +++ b/include/poller.php @@ -454,11 +454,24 @@ function poller_run($argv, $argc){ intval($r[0]['id']) ); } - //logger("Mail: Deleting ".$msg_uid); - //imap_delete($mbox, $msg_uid, FT_UID); - imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID); - logger("Mail: Moving ".$msg_uid); - imap_mail_move($mbox, $msg_uid, "Archiv", FT_UID); + 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; } @@ -520,11 +533,24 @@ function poller_run($argv, $argc){ q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1", intval($stored_item) ); - //logger("Mail: Deleting ".$msg_uid); - //imap_delete($mbox, $msg_uid, FT_UID); - imap_setflag_full($mbox, $msg_uid, "\\Seen", ST_UID); - logger("Mail: Moving ".$msg_uid); - imap_mail_move($mbox, $msg_uid, "Archiv", FT_UID); + 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; + } } } diff --git a/mod/settings.php b/mod/settings.php index 91f4325da..90eb9dbd7 100755 --- a/mod/settings.php +++ b/mod/settings.php @@ -110,13 +110,15 @@ function settings_post(&$a) { if(($a->argc > 1) && ($a->argv[1] == 'connectors')) { if(x($_POST['imap-submit'])) { - $mail_server = ((x($_POST,'mail_server')) ? $_POST['mail_server'] : ''); - $mail_port = ((x($_POST,'mail_port')) ? $_POST['mail_port'] : ''); - $mail_ssl = ((x($_POST,'mail_ssl')) ? strtolower(trim($_POST['mail_ssl'])) : ''); - $mail_user = ((x($_POST,'mail_user')) ? $_POST['mail_user'] : ''); - $mail_pass = ((x($_POST,'mail_pass')) ? trim($_POST['mail_pass']) : ''); - $mail_replyto = ((x($_POST,'mail_replyto')) ? $_POST['mail_replyto'] : ''); - $mail_pubmail = ((x($_POST,'mail_pubmail')) ? $_POST['mail_pubmail'] : ''); + $mail_server = ((x($_POST,'mail_server')) ? $_POST['mail_server'] : ''); + $mail_port = ((x($_POST,'mail_port')) ? $_POST['mail_port'] : ''); + $mail_ssl = ((x($_POST,'mail_ssl')) ? strtolower(trim($_POST['mail_ssl'])) : ''); + $mail_user = ((x($_POST,'mail_user')) ? $_POST['mail_user'] : ''); + $mail_pass = ((x($_POST,'mail_pass')) ? trim($_POST['mail_pass']) : ''); + $mail_action = ((x($_POST,'mail_action')) ? trim($_POST['mail_action']) : ''); + $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); @@ -142,11 +144,14 @@ function settings_post(&$a) { ); } $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", dbesc($mail_server), intval($mail_port), dbesc($mail_ssl), dbesc($mail_user), + intval($mail_action), + dbesc($mail_movetofolder), dbesc($mail_replyto), intval($mail_pubmail), intval(local_user()) @@ -218,8 +223,8 @@ function settings_post(&$a) { $openid = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url'])) : ''); $maxreq = ((x($_POST,'maxreq')) ? intval($_POST['maxreq']) : 0); $expire = ((x($_POST,'expire')) ? intval($_POST['expire']) : 0); - - + + $expire_items = ((x($_POST,'expire_items')) ? intval($_POST['expire_items']) : 0); $expire_notes = ((x($_POST,'expire_notes')) ? intval($_POST['expire_notes']) : 0); $expire_starred = ((x($_POST,'expire_starred')) ? intval($_POST['expire_starred']) : 0); @@ -561,23 +566,25 @@ function settings_content(&$a) { $r = null; } - $mail_server = ((count($r)) ? $r[0]['server'] : ''); - $mail_port = ((count($r) && intval($r[0]['port'])) ? intval($r[0]['port']) : ''); - $mail_ssl = ((count($r)) ? $r[0]['ssltype'] : ''); - $mail_user = ((count($r)) ? $r[0]['user'] : ''); - $mail_replyto = ((count($r)) ? $r[0]['reply_to'] : ''); - $mail_pubmail = ((count($r)) ? $r[0]['pubmail'] : 0); - $mail_chk = ((count($r)) ? $r[0]['last_check'] : '0000-00-00 00:00:00'); + $mail_server = ((count($r)) ? $r[0]['server'] : ''); + $mail_port = ((count($r) && intval($r[0]['port'])) ? intval($r[0]['port']) : ''); + $mail_ssl = ((count($r)) ? $r[0]['ssltype'] : ''); + $mail_user = ((count($r)) ? $r[0]['user'] : ''); + $mail_replyto = ((count($r)) ? $r[0]['reply_to'] : ''); + $mail_pubmail = ((count($r)) ? $r[0]['pubmail'] : 0); + $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"); $o .= replace_macros($tpl, array( '$title' => t('Connector Settings'), '$tabs' => $tabs, - + '$diasp_enabled' => $diasp_enabled, '$ostat_enabled' => $ostat_enabled, - + '$h_imap' => t('Email/Mailbox Setup'), '$imap_desc' => t("If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox."), '$imap_lastcheck' => array('imap_lastcheck', t('Last successful email check:'), $mail_chk,''), @@ -589,8 +596,10 @@ function settings_content(&$a) { '$mail_pass' => array('mail_pass', t('Email password:'), '', ''), '$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, ''), - '$submit' => t('Submit'), - + '$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'), + '$settings_connectors' => $settings_connectors @@ -598,7 +607,7 @@ function settings_content(&$a) { return $o; } - + require_once('include/acl_selectors.php'); $p = q("SELECT * FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1", diff --git a/update.php b/update.php index 18dc90cce..8a2d891ca 100755 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index 5ffb02f48..39f4ffea4 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -593,15 +593,15 @@ nav #nav-apps-link.selected { #nav-notifications-mark-all { /* padding: 1px 1px 2px 26px; */ /* border-bottom: 1px solid #364E59; */ - margin: 0px 0px 2px 0px; - padding: 5px 10px; + /* 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; + /* margin: 0px 0px 2px 0px; + padding: 5px 10px; */ } ul.menu-popup { @@ -677,14 +677,14 @@ ul.menu-popup .empty { max-height: 550px; overflow: auto; } -#nav-notifications-menu a { +/* #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 { float: left; @@ -1054,6 +1054,7 @@ section { .shiny { /* border-right: 10px solid #fce94f; */ border-right: 1px solid #A7C7F7; + padding-right: 12px; } #jot-preview-content .tread-wrapper { background-color: #fce94f;