]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #2104 from rabuzarus/2611_contacts_directory
authorMichael Vogel <icarus@dabo.de>
Mon, 30 Nov 2015 17:07:35 +0000 (18:07 +0100)
committerMichael Vogel <icarus@dabo.de>
Mon, 30 Nov 2015 17:07:35 +0000 (18:07 +0100)
display contact information in contact and directory according to theā€¦

71 files changed:
include/Contact.php
include/Scrape.php
include/acl_selectors.php
include/bb2diaspora.php
include/bbcode.php
include/contact_widgets.php
include/conversation.php
include/cron.php
include/delivery.php
include/forums.php
include/group.php
include/identity.php
include/items.php
include/notifier.php
include/ostatus.php
include/pubsubpublish.php
include/salmon.php
include/text.php
include/user.php
js/main.js
mod/admin.php
mod/contacts.php
mod/crepair.php
mod/dirfind.php
mod/group.php
mod/item.php
mod/manage.php
mod/match.php
mod/network.php
mod/nogroup.php
mod/parse_url.php
mod/ping.php
mod/suggest.php
mod/viewcontacts.php
util/credits.txt
util/messages.po
view/global.css
view/templates/admin_site.tpl
view/templates/contact_edit.tpl
view/templates/crepair.tpl
view/templates/group_side.tpl
view/templates/manage.tpl
view/templates/profile_vcard.tpl
view/templates/viewcontact_template.tpl
view/templates/widget_forumlist.tpl
view/theme/duepuntozero/deriv/darkzero.css
view/theme/duepuntozero/deriv/easterbunny.css
view/theme/duepuntozero/deriv/greenzero.css
view/theme/duepuntozero/deriv/purplezero.css
view/theme/duepuntozero/style.css
view/theme/duepuntozero/templates/profile_vcard.tpl
view/theme/frost-mobile/style.css
view/theme/frost-mobile/templates/profile_vcard.tpl
view/theme/frost/style.css
view/theme/frost/templates/profile_vcard.tpl
view/theme/quattro/dark/style.css
view/theme/quattro/green/style.css
view/theme/quattro/js/quattro.js
view/theme/quattro/lilac/style.css
view/theme/quattro/quattro.less
view/theme/quattro/templates/profile_vcard.tpl
view/theme/quattro/templates/widget_forumlist.tpl [new file with mode: 0644]
view/theme/smoothly/style.css
view/theme/vier/breathe.css
view/theme/vier/dark.css
view/theme/vier/flat.css
view/theme/vier/plus.css
view/theme/vier/style.css
view/theme/vier/templates/profile_vcard.tpl
view/theme/vier/templates/widget_forumlist_right.tpl [new file with mode: 0644]
view/theme/vier/theme.php

index b98c9f7056295774c8395d894e83b85ee8f6c7b1..6673e6911d693c5f6ee793453881357c143ca9e7 100644 (file)
@@ -286,7 +286,7 @@ function get_contact_details_by_url($url, $uid = -1) {
 }
 
 if(! function_exists('contact_photo_menu')){
-function contact_photo_menu($contact) {
+function contact_photo_menu($contact, $uid = 0) {
 
        $a = get_app();
 
@@ -298,6 +298,33 @@ function contact_photo_menu($contact) {
        $contact_drop_link = "";
        $poke_link="";
 
+       if ($uid == 0)
+               $uid = local_user();
+
+       if ($contact["uid"] != $uid) {
+               if ($uid == 0) {
+                       $profile_link = zrl($contact['url']);
+                       $menu = Array('profile' => array(t("View Profile"), $profile_link, true));
+
+                       return $menu;
+               }
+
+               $r = q("SELECT * FROM `contact` WHERE `nurl` = '%s' AND `network` = '%s' AND `uid` = %d",
+                       dbesc($contact["nurl"]), dbesc($contact["network"]), intval($uid));
+               if ($r)
+                       return contact_photo_menu($r[0], $uid);
+               else {
+                       $profile_link = zrl($contact['url']);
+                       $connlnk = 'follow/?url='.$contact['url'];
+                       $menu = Array(
+                               'profile' => array(t("View Profile"), $profile_link, true),
+                               'follow' => array(t("Connect/Follow"), $connlnk, true)
+                               );
+
+                       return $menu;
+               }
+       }
+
        $sparkle = false;
        if($contact['network'] === NETWORK_DFRN) {
                $sparkle = true;
@@ -322,7 +349,7 @@ function contact_photo_menu($contact) {
                $poke_link = $a->get_baseurl() . '/poke/?f=&c=' . $contact['id'];
 
        $contact_url = $a->get_baseurl() . '/contacts/' . $contact['id'];
-       $posts_link = $a->get_baseurl() . '/network/0?nets=all&cid=' . $contact['id'];
+       $posts_link = $a->get_baseurl() . "/contacts/" . $contact['id'] . '/posts';
        $contact_drop_link = $a->get_baseurl() . "/contacts/" . $contact['id'] . '/drop?confirm=1';
 
 
index 64a930bfdaedebfccbf46acb9f37a03085174cbe..4f9d675c1801309f5d11fee3a6bd2a79b28ea21e 100644 (file)
@@ -17,10 +17,12 @@ function scrape_dfrn($url, $dont_probe = false) {
        if(! $s)
                return $ret;
 
-       $probe = probe_url($url);
+       if (!$dont_probe) {
+               $probe = probe_url($url);
 
-       if (isset($probe["addr"]))
-               $ret["addr"] = $probe["addr"];
+               if (isset($probe["addr"]))
+                       $ret["addr"] = $probe["addr"];
+       }
 
        $headers = $a->get_curl_headers();
        logger('scrape_dfrn: headers=' . $headers, LOGGER_DEBUG);
index a1154399a713035c43a8f83751006cdcd8228989..4ef3d05ea3959fb9ba46070436f7c33e2b034612 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 require_once("include/contact_selectors.php");
+require_once("include/contact_widgets.php");
 require_once("include/features.php");
 require_once("mod/proxy.php");
 
@@ -425,6 +426,8 @@ function acl_lookup(&$a, $out_type = 'json') {
                $group_count = 0;
        }
 
+       $sql_extra2 .= " ".unavailable_networks();
+
        if ($type=='' || $type=='c'){
                $r = q("SELECT COUNT(*) AS c FROM `contact`
                                WHERE `uid` = %d AND `self` = 0
index fc05e720f4f7b1c7a16896532d7e534d315cc7d1..a8b39f741ac84a2d066066e129176cf0dff82b9a 100644 (file)
@@ -83,7 +83,6 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) {
                'return \'#\'. str_replace(\' \', \'_\', $match[2]);'
        ), $Text);
 
-
        // Converting images with size parameters to simple images. Markdown doesn't know it.
        $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text);
 
@@ -94,11 +93,12 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) {
                // Add all tags that maybe were removed
                if (preg_match_all("/#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism",$OriginalText, $tags)) {
                        $tagline = "";
-                       foreach($tags[2] as $tag)
-                               if (!strpos($Text, "#".$tag))
+                       foreach($tags[2] as $tag) {
+                               $tag = html_entity_decode($tag, ENT_QUOTES, 'UTF-8');
+                               if (!strpos(html_entity_decode($Text, ENT_QUOTES, 'UTF-8'), "#".$tag))
                                        $tagline .= "#".$tag." ";
-
-                       $Text = $Text."<br />".$tagline;
+                       }
+                       $Text = $Text." ".$tagline;
                }
 
        } else
index 81536d37200fdd5083a38685c306282856f8d0cb..acf6979d84544788a5eb8a2292ad2f77912b64ef 100644 (file)
@@ -99,10 +99,19 @@ function bb_attachment($Text, $simplehtml = false, $tryoembed = true) {
                                $image = "";
                        }
 
-                       if ($simplehtml == 7)
-                               $text = sprintf('<a href="%s" title="%s" class="attachment thumbnail" rel="nofollow external">%s</a>',
-                                               $url, $title, $title);
-                       elseif (($simplehtml != 4) AND ($simplehtml != 0))
+                       if ($simplehtml == 7) {
+                               $title2 = $title;
+
+                               $test1 = trim(html_entity_decode($match[1],ENT_QUOTES,'UTF-8'));
+                               $test2 = trim(html_entity_decode($title,ENT_QUOTES,'UTF-8'));
+
+                               // If the link description is similar to the text above then don't add the link description
+                               if (($title != "") AND ((strpos($test1,$test2) !== false) OR
+                                       (similar_text($test1,$test2) / strlen($title)) > 0.9))
+                                       $title2 = $url;
+                               $text = sprintf('<a href="%s" title="%s" class="attachment thumbnail" rel="nofollow external">%s</a><br />',
+                                               $url, $title, $title2);
+                       } elseif (($simplehtml != 4) AND ($simplehtml != 0))
                                $text = sprintf('<a href="%s" target="_blank">%s</a><br>', $url, $title);
                        else {
                                $text = sprintf('<span class="type-%s">', $type);
@@ -950,11 +959,13 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal
        $Text = preg_replace_callback("&\[url=/posts/([^\[\]]*)\](.*)\[\/url\]&Usi", 'bb_DiasporaLinks', $Text);
 
        // if the HTML is used to generate plain text, then don't do this search, but replace all URL of that kind to text
-       if (!$forplaintext)
-               $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1<a href="$2" target="_blank">$2</a>', $Text);
-       else {
-               $Text = preg_replace("(\[url\]([$URLSearchString]*)\[\/url\])ism"," $1 ",$Text);
-               $Text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'bb_RemovePictureLinks', $Text);
+       if ($simplehtml != 7) {
+               if (!$forplaintext)
+                       $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1<a href="$2" target="_blank">$2</a>', $Text);
+               else {
+                       $Text = preg_replace("(\[url\]([$URLSearchString]*)\[\/url\])ism"," $1 ",$Text);
+                       $Text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'bb_RemovePictureLinks', $Text);
+               }
        }
 
        if ($tryoembed)
index 810671a91cceee3e4ce78a646b56b7ef443a79d3..bbbd941b5609df3ae7321bc708599e17c6de4ccc 100644 (file)
@@ -20,12 +20,12 @@ function findpeople_widget() {
        if(get_config('system','invitation_only')) {
                $x = get_pconfig(local_user(),'system','invites_remaining');
                if($x || is_site_admin()) {
-                       $a->page['aside'] .= '<div class="side-link" id="side-invite-remain">' 
-                       . sprintf( tt('%d invitation available','%d invitations available',$x), $x) 
+                       $a->page['aside'] .= '<div class="side-link" id="side-invite-remain">'
+                       . sprintf( tt('%d invitation available','%d invitations available',$x), $x)
                        . '</div>' . $inv;
                }
        }
+
        return replace_macros(get_markup_template('peoplefind.tpl'),array(
                '$findpeople' => t('Find People'),
                '$desc' => t('Enter name or interest'),
@@ -40,18 +40,55 @@ function findpeople_widget() {
 
 }
 
+function unavailable_networks() {
+       $network_filter = "";
+
+       $networks = array();
+
+       if (!plugin_enabled("appnet"))
+               $networks[] = NETWORK_APPNET;
+
+       if (!plugin_enabled("fbpost") AND !plugin_enabled("facebook"))
+               $networks[] = NETWORK_FACEBOOK;
+
+       if (!plugin_enabled("statusnet"))
+               $networks[] = NETWORK_STATUSNET;
+
+       if (!plugin_enabled("pumpio"))
+               $networks[] = NETWORK_PUMPIO;
+
+       if (!plugin_enabled("twitter"))
+               $networks[] = NETWORK_TWITTER;
+
+       if (get_config("system","ostatus_disabled"))
+               $networks[] = NETWORK_OSTATUS;
+
+       if (!get_config("system","diaspora_enabled"))
+               $networks[] = NETWORK_DIASPORA;
+
+       if (!sizeof($networks))
+               return "";
+
+       $network_filter = implode("','", $networks);
+
+       $network_filter = "AND `network` NOT IN ('$network_filter')";
+
+       return $network_filter;
+}
 
 function networks_widget($baseurl,$selected = '') {
 
        $a = get_app();
 
-       if(! local_user())
+       if(!local_user())
                return '';
 
-       if(! feature_enabled(local_user(),'networks'))
+       if(!feature_enabled(local_user(),'networks'))
                return '';
 
-       $r = q("SELECT DISTINCT(`network`) FROM `contact` WHERE `uid` = %d AND `self` = 0 ORDER BY `network`",
+       $extra_sql = unavailable_networks();
+
+       $r = q("SELECT DISTINCT(`network`) FROM `contact` WHERE `uid` = %d AND NOT `self` $extra_sql ORDER BY `network`",
                intval(local_user())
        );
 
@@ -180,7 +217,7 @@ function common_friends_visitor_widget($profile_uid) {
        }
 
        if($cid == 0 && $zcid == 0)
-               return; 
+               return;
 
        require_once('include/socgraph.php');
 
@@ -204,6 +241,6 @@ function common_friends_visitor_widget($profile_uid) {
                '$linkmore' => (($t > 5) ? 'true' : ''),
                '$more' => t('show more'),
                '$items' => $r
-       )); 
+       ));
 
 };
index 3b2eb54bde12c655b1df3421bd70f8d9df48d03d..476ae80bea1b0276228b1bd386045a7c45a71b6c 100644 (file)
@@ -891,7 +891,7 @@ function item_photo_menu($item){
        if(($cid) && (! $item['self'])) {
                $poke_link = $a->get_baseurl($ssl_state) . '/poke/?f=&c=' . $cid;
                $contact_url = $a->get_baseurl($ssl_state) . '/contacts/' . $cid;
-               $posts_link = $a->get_baseurl($ssl_state) . '/network/0?nets=all&cid=' . $cid;
+               $posts_link = $a->get_baseurl($ssl_state) . '/contacts/' . $cid . '/posts';
 
                $clean_url = normalise_link($item['author-link']);
 
index 7b2244b55eda9a4c370ec5104479a11b57d796e6..d95d8bc601bfa7b19d7a5d89eaaa977c0c9e780a 100644 (file)
@@ -189,6 +189,27 @@ function cron_run(&$argv, &$argc){
                        q('DELETE FROM `photo` WHERE `uid` = 0 AND `resource-id` LIKE "pic:%%" AND `created` < NOW() - INTERVAL %d SECOND', $cachetime);
                }
 
+               // maximum table size in megabyte
+               $max_tablesize = intval(get_config('system','optimize_max_tablesize')) * 1000000;
+               if ($max_tablesize == 0)
+                       $max_tablesize = 100 * 1000000; // Default are 100 MB
+
+               // Optimize some tables that need to be optimized
+               $r = q("SHOW TABLE STATUS");
+               foreach($r as $table) {
+
+                       // Don't optimize tables that needn't to be optimized
+                       if ($table["Data_free"] == 0)
+                               continue;
+
+                       // Don't optimize tables that are too large
+                       if ($table["Data_length"] > $max_tablesize)
+                               continue;
+
+                       // So optimize it
+                       q("OPTIMIZE TABLE `%s`", dbesc($table["Name"]));
+               }
+
                set_config('system','cache_last_cleared', time());
        }
 
index cdd59451f0f2b0065cdc76b324ba6521fa6edb56..dc02faaba8e03d1957797861a6cd4a0ee9defa59 100644 (file)
@@ -2,6 +2,7 @@
 require_once("boot.php");
 require_once('include/queue_fn.php');
 require_once('include/html2plain.php');
+require_once("include/ostatus.php");
 
 function delivery_run(&$argv, &$argc){
        global $a, $db;
@@ -391,7 +392,8 @@ function delivery_run(&$argv, &$argc){
                                                        continue;
 
                                                if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire))
-                                                       $slaps[] = atom_entry($item,'html',null,$owner,true);
+                                                       $slaps[] = ostatus_salmon($item,$owner);
+                                                       //$slaps[] = atom_entry($item,'html',null,$owner,true);
                                        }
 
                                        logger('notifier: slapdelivery: ' . $contact['name']);
index d8da36cc5c694760036980f970c806ae946b9b8c..995a29cad1411d0ec6280068ac9bfca52d1b00e1 100644 (file)
@@ -56,14 +56,16 @@ function get_forumlist($uid, $showhidden = true, $lastitem, $showprivate = false
 
 /**
  * @brief Forumlist widget
- * 
+ *
  * Sidebar widget to show subcribed friendica forums. If activated
  * in the settings, it appears at the notwork page sidebar
- * 
- * @param App $a
+ *
+ * @param int $uid
+ * @param int $cid
+ *     The contact id which is used to mark a forum as "selected"
  * @return string
  */
-function widget_forumlist($a) {
+function widget_forumlist($uid,$cid = 0) {
 
        if(! intval(feature_enabled(local_user(),'forumlist_widget')))
                return;
@@ -73,7 +75,7 @@ function widget_forumlist($a) {
        //sort by last updated item
        $lastitem = true;
 
-       $contacts = get_forumlist($a->user['uid'],true,$lastitem, true);
+       $contacts = get_forumlist($uid,true,$lastitem, true);
        $total = count($contacts);
        $visible_forums = 10;
 
@@ -83,10 +85,14 @@ function widget_forumlist($a) {
 
                foreach($contacts as $contact) {
 
+                       $selected = (($cid == $contact['id']) ? ' forum-selected' : '');
+
                        $entry = array(
-                               'url' => $a->get_baseurl() . '/network?f=&cid=' . $contact['id'],
-                               'external_url' => $a->get_baseurl() . '/redir/' . $contact['id'],
+                               'url' => z_root() . '/network?f=&cid=' . $contact['id'],
+                               'external_url' => z_root() . '/redir/' . $contact['id'],
                                'name' => $contact['name'],
+                               'cid' => $contact['id'],
+                               'selected'      => $selected,
                                'micro' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO),
                                'id' => ++$id,
                        );
@@ -110,13 +116,13 @@ function widget_forumlist($a) {
 
 /**
  * @brief Format forumlist as contact block
- * 
+ *
  * This function is used to show the forumlist in
  * the advanced profile.
- * 
+ *
  * @param int $uid
  * @return string
- * 
+ *
  */
 function forumlist_profile_advanced($uid) {
 
@@ -147,3 +153,30 @@ function forumlist_profile_advanced($uid) {
                $o .= $forumlist;
                return $o;
 }
+
+/**
+ * @brief count unread forum items
+ *
+ * Count unread items of connected forums and private groups
+ *
+ * @return array
+ *     'id' => contact id
+ *     'name' => contact/forum name
+ *     'count' => counted unseen forum items
+ *
+ */
+
+function forums_count_unseen() {
+       $r = q("SELECT `contact`.`id`, `contact`.`name`, COUNT(*) AS `count` FROM `item`
+                       INNER JOIN `contact` ON `item`.`contact-id` = `contact`.`id`
+                       WHERE `item`.`uid` = %d AND `item`.`visible` AND NOT `item`.`deleted` AND `item`.`unseen`
+                       AND `contact`.`network`= 'dfrn' AND (`contact`.`forum` OR `contact`.`prv`)
+                       AND NOT `contact`.`blocked` AND NOT `contact`.`hidden`
+                       AND NOT `contact`.`pending` AND NOT `contact`.`archive`
+                       AND `contact`.`success_update` > `failure_update`
+                       GROUP BY `contact`.`id` ",
+               intval(local_user())
+       );
+
+       return $r;
+}
index fe29d39f1a810ae86eb6ec5ef66d630c7538831e..862d06818dd0957bb8a7428f3a7c7b996b953e89 100644 (file)
@@ -213,9 +213,20 @@ function mini_group_select($uid,$gid = 0) {
 }
 
 
-
-
-function group_side($every="contacts",$each="group",$edit = false, $group_id = 0, $cid = 0) {
+/**
+ * @brief Create group sidebar widget
+ * 
+ * @param string $every
+ * @param string $each
+ * @param string $editmode
+ *     'standard' => include link 'Edit groups'
+ *     'extended' => include link 'Create new group'
+ *     'full' => include link 'Create new group' and provide for each group a link to edit this group
+ * @param int $group_id
+ * @param int $cid
+ * @return string
+ */
+function group_side($every="contacts",$each="group",$editmode = "standard", $group_id = 0, $cid = 0) {
 
        $o = '';
 
@@ -239,13 +250,13 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0
        $member_of = array();
        if($cid) {
                $member_of = groups_containing(local_user(),$cid);
-       } 
+       }
 
        if(count($r)) {
                foreach($r as $rr) {
                        $selected = (($group_id == $rr['id']) ? ' group-selected' : '');
                        
-                       if ($edit) {
+                       if ($editmode == "full") {
                                $groupedit = array(
                                        'href' => "group/".$rr['id'],
                                        'title' => t('edit'),
@@ -269,14 +280,17 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0
 
        $tpl = get_markup_template("group_side.tpl");
        $o = replace_macros($tpl, array(
-               '$title'                => t('Groups'),
+               '$title'        => t('Groups'),
+               'newgroup'      => (($editmode == "extended") || ($editmode == "full") ? 1 : ''),
+               '$editgroupstext' => t('Edit groups'),
+               'grouppage'     => "group/",
                '$edittext'     => t('Edit group'),
                '$createtext'   => t('Create a new group'),
-    '$creategroup' => t('Group Name: '),
-    '$form_security_token' => get_form_security_token("group_edit"),
+               '$creategroup'  => t('Group Name: '),
+               '$form_security_token' => get_form_security_token("group_edit"),
                '$ungrouped'    => (($every === 'contacts') ? t('Contacts not in any group') : ''),
-               '$groups'               => $groups,
-               '$add'                  => t('add'),
+               '$groups'       => $groups,
+               '$add'          => t('add'),
        ));
 
 
index 3ab65d9e64e8711cd0f6412311cf671f96a06e75..48fd5056dc98a10a85b3c97ad1156d956b8fa988 100644 (file)
@@ -62,7 +62,7 @@ if(! function_exists('profile_load')) {
 
                if($profile) {
                        $profile_int = intval($profile);
-                       $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `user`.* FROM `profile`
+                       $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `contact`.`addr` AS faddr, `user`.* FROM `profile`
                                        INNER JOIN `contact` on `contact`.`uid` = `profile`.`uid` INNER JOIN `user` ON `profile`.`uid` = `user`.`uid`
                                        WHERE `user`.`nickname` = '%s' AND `profile`.`id` = %d AND `contact`.`self` = 1 LIMIT 1",
                                        dbesc($nickname),
@@ -70,7 +70,7 @@ if(! function_exists('profile_load')) {
                        );
                }
                if((!$r) && (!count($r))) {
-                       $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `user`.* FROM `profile`
+                       $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `contact`.`addr` AS faddr, `user`.* FROM `profile`
                                        INNER JOIN `contact` ON `contact`.`uid` = `profile`.`uid` INNER JOIN `user` ON `profile`.`uid` = `user`.`uid`
                                        WHERE `user`.`nickname` = '%s' AND `profile`.`is-default` = 1 AND `contact`.`self` = 1 LIMIT 1",
                                        dbesc($nickname)
@@ -216,12 +216,17 @@ if(! function_exists('profile_sidebar')) {
                }
 
                if ($connect AND ($profile['network'] != NETWORK_DFRN) AND !isset($profile['remoteconnect']))
-                               $connect = false;
+                       $connect = false;
 
                if (isset($profile['remoteconnect']))
                        $remoteconnect = $profile['remoteconnect'];
 
-               if( get_my_url() && $profile['unkmail'] && ($profile['uid'] != local_user()) )
+               if ($connect AND ($profile['network'] == NETWORK_DFRN) AND !isset($remoteconnect))
+                       $subscribe_feed = t("Atom feed");
+               else
+                       $subscribe_feed = false;
+
+               if(get_my_url() && $profile['unkmail'] && ($profile['uid'] != local_user()))
                        $wallmessage = t('Message');
                else
                        $wallmessage = false;
@@ -337,6 +342,7 @@ if(! function_exists('profile_sidebar')) {
                        '$profile' => $p,
                        '$connect'  => $connect,
                        '$remoteconnect'  => $remoteconnect,
+                       '$subscribe_feed' => $subscribe_feed,
                        '$wallmessage' => $wallmessage,
                        '$location' => $location,
                        '$gender'   => $gender,
index c4310c24e2233a3a83761ae38429d8d42483b1b0..65d66b77a17801e597fe54bdba71907d508716e4 100644 (file)
@@ -4171,14 +4171,13 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
                        );
                }
                // send email notification to owner?
-       }
-       else {
+       } else {
 
                // create contact record
 
-               $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `name`, `nick`, `photo`, `network`, `rel`,
-                       `blocked`, `readonly`, `pending`, `writable` )
-                       VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, 0, 0, 1, 1 ) ",
+               $r = q("INSERT INTO `contact` (`uid`, `created`, `url`, `nurl`, `name`, `nick`, `photo`, `network`, `rel`,
+                       `blocked`, `readonly`, `pending`, `writable`)
+                       VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, 0, 0, 1, 1)",
                        intval($importer['uid']),
                        dbesc(datetime_convert()),
                        dbesc($url),
@@ -4193,27 +4192,38 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
                                intval($importer['uid']),
                                dbesc($url)
                );
-               if(count($r))
+               if(count($r)) {
                                $contact_record = $r[0];
 
-               // create notification
-               $hash = random_string();
+                               $photos = import_profile_photo($photo,$importer["uid"],$contact_record["id"]);
 
-               if(is_array($contact_record)) {
-                       $ret = q("INSERT INTO `intro` ( `uid`, `contact-id`, `blocked`, `knowyou`, `hash`, `datetime`)
-                               VALUES ( %d, %d, 0, 0, '%s', '%s' )",
-                               intval($importer['uid']),
-                               intval($contact_record['id']),
-                               dbesc($hash),
-                               dbesc(datetime_convert())
-                       );
+                               q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s' WHERE `id` = %d",
+                                       dbesc($photos[0]),
+                                       dbesc($photos[1]),
+                                       dbesc($photos[2]),
+                                       intval($contact_record["id"])
+                               );
                }
 
+
                $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
                        intval($importer['uid'])
                );
                $a = get_app();
-               if(count($r)) {
+               if(count($r) AND !in_array($r[0]['page-flags'], array(PAGE_SOAPBOX, PAGE_FREELOVE))) {
+
+                       // create notification
+                       $hash = random_string();
+
+                       if(is_array($contact_record)) {
+                               $ret = q("INSERT INTO `intro` ( `uid`, `contact-id`, `blocked`, `knowyou`, `hash`, `datetime`)
+                                       VALUES ( %d, %d, 0, 0, '%s', '%s' )",
+                                       intval($importer['uid']),
+                                       intval($contact_record['id']),
+                                       dbesc($hash),
+                                       dbesc(datetime_convert())
+                               );
+                       }
 
                        if(intval($r[0]['def_gid'])) {
                                require_once('include/group.php');
@@ -4221,7 +4231,7 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
                        }
 
                        if(($r[0]['notify-flags'] & NOTIFY_INTRO) &&
-                               in_array($r[0]['page-flags'], array(PAGE_NORMAL, PAGE_SOAPBOX, PAGE_FREELOVE))) {
+                               in_array($r[0]['page-flags'], array(PAGE_NORMAL))) {
 
                                notification(array(
                                        'type'         => NOTIFY_INTRO,
@@ -4239,7 +4249,13 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
                                ));
 
                        }
+               } elseif (count($r) AND in_array($r[0]['page-flags'], array(PAGE_SOAPBOX, PAGE_FREELOVE))) {
+                       $r = q("UPDATE `contact` SET `pending` = 0 WHERE `uid` = %d AND `url` = '%s' AND `pending` LIMIT 1",
+                                       intval($importer['uid']),
+                                       dbesc($url)
+                       );
                }
+
        }
 }
 
@@ -4479,7 +4495,8 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
        //$o .= "\t".'<link rel="self" type="application/atom+xml" href="'.xmlify($a->get_baseurl().'/api/statuses/show/'.$item['id'].'.atom').'"/>'."\r\n";
        //$o .= "\t".'<link rel="edit" type="application/atom+xml" href="'.xmlify($a->get_baseurl().'/api/statuses/show/'.$item['id'].'.atom').'"/>'."\r\n";
 
-       $o .= item_get_attachment($item);
+       // Deactivated since it was meant only for OStatus
+       //$o .= item_get_attachment($item);
 
        $o .= item_getfeedattach($item);
 
@@ -4644,7 +4661,7 @@ function item_getfeedtags($item) {
        if($cnt) {
                for($x = 0; $x < $cnt; $x ++) {
                        if($matches[1][$x])
-                               $ret[] = array('#',$matches[1][$x], $matches[2][$x]);
+                               $ret[$matches[2][$x]] = array('#',$matches[1][$x], $matches[2][$x]);
                }
        }
        $matches = false;
index 9dac5f114b177d617956a9772d733194d13bd0f1..ec2b666bede9109304020a3bc3993c66abe7ea03 100644 (file)
@@ -4,6 +4,7 @@ require_once('include/queue_fn.php');
 require_once('include/html2plain.php');
 require_once("include/Scrape.php");
 require_once('include/diaspora.php');
+require_once("include/ostatus.php");
 
 /*
  * This file was at one time responsible for doing all deliveries, but this caused
@@ -529,7 +530,8 @@ function notifier_run(&$argv, &$argc){
                unset($photos);
        } else {
 
-               $slap = atom_entry($target_item,'html',null,$owner,false);
+               $slap = ostatus_salmon($target_item,$owner);
+               //$slap = atom_entry($target_item,'html',null,$owner,false);
 
                if($followup) {
                        foreach($items as $item) {  // there is only one item
@@ -569,7 +571,8 @@ function notifier_run(&$argv, &$argc){
                                        $atom .= atom_entry($item,'text',null,$owner,true);
 
                                if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire))
-                                       $slaps[] = atom_entry($item,'html',null,$owner,true);
+                                       $slaps[] = ostatus_salmon($item,$owner);
+                                       //$slaps[] = atom_entry($item,'html',null,$owner,true);
                        }
                }
        }
index 523ccfe510e55144255fb0052dd693db7425c976..ebd5741e5157a44977a4f6452857c2f509199191 100644 (file)
@@ -14,6 +14,15 @@ define('OSTATUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes
 define('OSTATUS_DEFAULT_POLL_TIMEFRAME', 1440); // given in minutes
 define('OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS', 14400); // given in minutes
 
+define("NS_ATOM", "http://www.w3.org/2005/Atom");
+define("NS_THR", "http://purl.org/syndication/thread/1.0");
+define("NS_GEORSS", "http://www.georss.org/georss");
+define("NS_ACTIVITY", "http://activitystrea.ms/spec/1.0/");
+define("NS_MEDIA", "http://purl.org/syndication/atommedia");
+define("NS_POCO", "http://portablecontacts.net/spec/1.0");
+define("NS_OSTATUS", "http://ostatus.org/schema/1.0");
+define("NS_STATUSNET", "http://status.net/schema/api/1/");
+
 function ostatus_check_follow_friends() {
        $r = q("SELECT `uid`,`v` FROM `pconfig` WHERE `cat`='system' AND `k`='ostatus_legacy_contact' AND `v` != ''");
 
@@ -1067,4 +1076,391 @@ function ostatus_store_conversation($itemid, $conversation_url) {
                logger('Storing conversation url '.$conversation_url.' for id '.$itemid);
        }
 }
+
+function xml_add_element($doc, $parent, $element, $value = "", $attributes = array()) {
+       $element = $doc->createElement($element, xmlify($value));
+
+       foreach ($attributes AS $key => $value) {
+               $attribute = $doc->createAttribute($key);
+               $attribute->value = xmlify($value);
+               $element->appendChild($attribute);
+       }
+
+       $parent->appendChild($element);
+}
+
+function ostatus_add_header($doc, $owner) {
+       $a = get_app();
+
+       $r = q("SELECT * FROM `profile` WHERE `uid` = %d AND `is-default`",
+               intval($owner["uid"]));
+       if (!$r)
+               return;
+
+       $profile = $r[0];
+
+       $root = $doc->createElementNS(NS_ATOM, 'feed');
+       $doc->appendChild($root);
+
+       $root->setAttribute("xmlns:thr", NS_THR);
+       $root->setAttribute("xmlns:georss", NS_GEORSS);
+       $root->setAttribute("xmlns:activity", NS_ACTIVITY);
+       $root->setAttribute("xmlns:media", NS_MEDIA);
+       $root->setAttribute("xmlns:poco", NS_POCO);
+       $root->setAttribute("xmlns:ostatus", NS_OSTATUS);
+       $root->setAttribute("xmlns:statusnet", NS_STATUSNET);
+
+       $attributes = array("uri" => "https://friendi.ca", "version" => FRIENDICA_VERSION."-".DB_UPDATE_VERSION);
+       xml_add_element($doc, $root, "generator", FRIENDICA_PLATFORM, $attributes);
+       xml_add_element($doc, $root, "id", $a->get_baseurl()."/profile/".$owner["nick"]);
+       xml_add_element($doc, $root, "title", sprintf("%s timeline", $profile["name"]));
+       xml_add_element($doc, $root, "subtitle", sprintf("Updates from %s on %s", $profile["name"], $a->config["sitename"]));
+       xml_add_element($doc, $root, "logo", $profile["photo"]);
+       xml_add_element($doc, $root, "updated", datetime_convert("UTC", "UTC", "now", ATOM_TIME));
+
+       $author = ostatus_add_author($doc, $owner, $profile);
+       $root->appendChild($author);
+
+       $attributes = array("href" => $owner["url"], "rel" => "alternate", "type" => "text/html");
+       xml_add_element($doc, $root, "link", "", $attributes);
+
+       // To-Do: We have to find out what this is
+       //$attributes = array("href" => $a->get_baseurl()."/sup",
+       //              "rel" => "http://api.friendfeed.com/2008/03#sup",
+       //              "type" => "application/json");
+       //xml_add_element($doc, $root, "link", "", $attributes);
+
+       ostatus_hublinks($doc, $root);
+
+       $attributes = array("href" => $a->get_baseurl()."/salmon/".$owner["nick"], "rel" => "salmon");
+       xml_add_element($doc, $root, "link", "", $attributes);
+
+       $attributes = array("href" => $a->get_baseurl()."/salmon/".$owner["nick"], "rel" => "http://salmon-protocol.org/ns/salmon-replies");
+       xml_add_element($doc, $root, "link", "", $attributes);
+
+       $attributes = array("href" => $a->get_baseurl()."/salmon/".$owner["nick"], "rel" => "http://salmon-protocol.org/ns/salmon-mention");
+       xml_add_element($doc, $root, "link", "", $attributes);
+
+       $attributes = array("href" => $a->get_baseurl()."/api/statuses/user_timeline/".$owner["nick"].".atom",
+                       "rel" => "self", "type" => "application/atom+xml");
+       xml_add_element($doc, $root, "link", "", $attributes);
+
+       return $root;
+}
+
+function ostatus_hublinks($doc, $root) {
+       $a = get_app();
+       $hub = get_config('system','huburl');
+
+       $hubxml = '';
+       if(strlen($hub)) {
+               $hubs = explode(',', $hub);
+               if(count($hubs)) {
+                       foreach($hubs as $h) {
+                               $h = trim($h);
+                               if(! strlen($h))
+                                       continue;
+                               if ($h === '[internal]')
+                                       $h = $a->get_baseurl() . '/pubsubhubbub';
+                               xml_add_element($doc, $root, "link", "", array("href" => $h, "rel" => "hub"));
+                       }
+               }
+       }
+}
+
+function ostatus_get_attachment($doc, $root, $item) {
+       $o = "";
+       $siteinfo = get_attached_data($item["body"]);
+
+       switch($siteinfo["type"]) {
+               case 'link':
+                       $attributes = array("rel" => "enclosure",
+                                       "href" => $siteinfo["url"],
+                                       "type" => "text/html; charset=UTF-8",
+                                       "length" => "",
+                                       "title" => $siteinfo["title"]);
+                       xml_add_element($doc, $root, "link", "", $attributes);
+                       break;
+               case 'photo':
+                       $imgdata = get_photo_info($siteinfo["image"]);
+                       $attributes = array("rel" => "enclosure",
+                                       "href" => $siteinfo["image"],
+                                       "type" => $imgdata["mime"],
+                                       "length" => intval($imgdata["size"]));
+                       xml_add_element($doc, $root, "link", "", $attributes);
+                       break;
+               case 'video':
+                       $attributes = array("rel" => "enclosure",
+                                       "href" => $siteinfo["url"],
+                                       "type" => "text/html; charset=UTF-8",
+                                       "length" => "",
+                                       "title" => $siteinfo["title"]);
+                       xml_add_element($doc, $root, "link", "", $attributes);
+                       break;
+               default:
+                       break;
+       }
+
+       if (($siteinfo["type"] != "photo") AND isset($siteinfo["image"])) {
+               $photodata = get_photo_info($siteinfo["image"]);
+
+               $attributes = array("rel" => "preview", "href" => $siteinfo["image"], "media:width" => $photodata[0], "media:height" => $photodata[1]);
+               xml_add_element($doc, $root, "link", "", $attributes);
+       }
+
+
+       $arr = explode('[/attach],',$item['attach']);
+       if(count($arr)) {
+               foreach($arr as $r) {
+                       $matches = false;
+                       $cnt = preg_match('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"|',$r,$matches);
+                       if($cnt) {
+                               $attributes = array("rel" => "enclosure",
+                                               "href" => $matches[1],
+                                               "type" => $matches[3]);
+
+                               if(intval($matches[2]))
+                                       $attributes["length"] = intval($matches[2]);
+
+                               if(trim($matches[4]) != "")
+                                       $attributes["title"] = trim($matches[4]);
+
+                               xml_add_element($doc, $root, "link", "", $attributes);
+                       }
+               }
+       }
+}
+
+function ostatus_add_author($doc, $owner, $profile) {
+       $a = get_app();
+
+       $author = $doc->createElement("author");
+       xml_add_element($doc, $author, "activity:object-type", ACTIVITY_OBJ_PERSON);
+       xml_add_element($doc, $author, "uri", $owner["url"]);
+       xml_add_element($doc, $author, "name", $profile["name"]);
+
+       $attributes = array("rel" => "alternate", "type" => "text/html", "href" => $owner["url"]);
+       xml_add_element($doc, $author, "link", "", $attributes);
+
+       $attributes = array(
+                       "rel" => "avatar",
+                       "type" => "image/jpeg", // To-Do?
+                       "media:width" => 175,
+                       "media:height" => 175,
+                       "href" => $profile["photo"]);
+       xml_add_element($doc, $author, "link", "", $attributes);
+
+       $attributes = array(
+                       "rel" => "avatar",
+                       "type" => "image/jpeg", // To-Do?
+                       "media:width" => 80,
+                       "media:height" => 80,
+                       "href" => $profile["thumb"]);
+       xml_add_element($doc, $author, "link", "", $attributes);
+
+       xml_add_element($doc, $author, "poco:preferredUsername", $owner["nick"]);
+       xml_add_element($doc, $author, "poco:displayName", $profile["name"]);
+       xml_add_element($doc, $author, "poco:note", $profile["about"]);
+
+       if (trim($owner["location"]) != "") {
+               $element = $doc->createElement("poco:address");
+               xml_add_element($doc, $element, "poco:formatted", $owner["location"]);
+               $author->appendChild($element);
+       }
+
+       if (trim($profile["homepage"]) != "") {
+               $urls = $doc->createElement("poco:urls");
+               xml_add_element($doc, $urls, "poco:type", "homepage");
+               xml_add_element($doc, $urls, "poco:value", $profile["homepage"]);
+               xml_add_element($doc, $urls, "poco:primary", "true");
+               $author->appendChild($urls);
+       }
+
+       xml_add_element($doc, $author, "followers", "", array("url" => $a->get_baseurl()."/viewcontacts/".$owner["nick"]));
+       xml_add_element($doc, $author, "statusnet:profile_info", "", array("local_id" => $owner["uid"]));
+
+       return $author;
+}
+
+function ostatus_entry($doc, $item, $owner, $toplevel = false) {
+       $a = get_app();
+
+       if (!$toplevel) {
+               $entry = $doc->createElement("entry");
+               $title = sprintf("New note by %s", $owner["nick"]);
+       } else {
+               $entry = $doc->createElementNS(NS_ATOM, "entry");
+
+               $entry->setAttribute("xmlns:thr", NS_THR);
+               $entry->setAttribute("xmlns:georss", NS_GEORSS);
+               $entry->setAttribute("xmlns:activity", NS_ACTIVITY);
+               $entry->setAttribute("xmlns:media", NS_MEDIA);
+               $entry->setAttribute("xmlns:poco", NS_POCO);
+               $entry->setAttribute("xmlns:ostatus", NS_OSTATUS);
+               $entry->setAttribute("xmlns:statusnet", NS_STATUSNET);
+
+               $r = q("SELECT * FROM `profile` WHERE `uid` = %d AND `is-default`",
+                       intval($owner["uid"]));
+               if (!$r)
+                       return;
+
+               $profile = $r[0];
+
+               $author = ostatus_add_author($doc, $owner, $profile);
+               $entry->appendChild($author);
+
+               $title = sprintf("New comment by %s", $owner["nick"]);
+       }
+
+       // To use the object-type "bookmark" we have to implement these elements:
+       //
+       // <activity:object-type>http://activitystrea.ms/schema/1.0/bookmark</activity:object-type>
+       // <title>Historic Rocket Landing</title>
+       // <summary>Nur ein Testbeitrag.</summary>
+       // <link rel="related" href="https://www.youtube.com/watch?v=9pillaOxGCo"/>
+       // <link rel="preview" href="https://pirati.cc/file/thumb-4526-450x338-b48c8055f0c2fed0c3f67adc234c4b99484a90c42ed3cac73dc1081a4d0a7bc1.jpg.jpg" media:width="450" media:height="338"/>
+       //
+       // But: it seems as if it doesn't federate well between the GS servers
+       // So we just set it to "note" to be sure that it reaches their target systems
+
+       xml_add_element($doc, $entry, "activity:object-type", ACTIVITY_OBJ_NOTE);
+       xml_add_element($doc, $entry, "id", $item["uri"]);
+       xml_add_element($doc, $entry, "title", $title);
+
+       if($item['allow_cid'] || $item['allow_gid'] || $item['deny_cid'] || $item['deny_gid'])
+               $body = fix_private_photos($item['body'],$owner['uid'],$item, 0);
+       else
+               $body = $item['body'];
+
+       if ($item['title'] != "")
+               $body = "[b]".$item['title']."[/b]\n\n".$body;
+
+       //$body = bb_remove_share_information($body);
+       $body = bbcode($body, false, false, 7);
+
+       xml_add_element($doc, $entry, "content", $body, array("type" => "html"));
+
+       xml_add_element($doc, $entry, "link", "", array("rel" => "alternate", "type" => "text/html",
+                                                       "href" => $a->get_baseurl()."/display/".$item["guid"]));
+
+       xml_add_element($doc, $entry, "status_net", "", array("notice_id" => $item["id"]));
+       xml_add_element($doc, $entry, "activity:verb", construct_verb($item));
+       xml_add_element($doc, $entry, "published", datetime_convert("UTC","UTC",$item["created"]."+00:00",ATOM_TIME));
+       xml_add_element($doc, $entry, "updated", datetime_convert("UTC","UTC",$item["edited"]."+00:00",ATOM_TIME));
+
+       if (($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || (($item['thr-parent'] !== '') && ($item['thr-parent'] !== $item['uri']))) {
+               $parent = q("SELECT `guid` FROM `item` WHERE `id` = %d", intval($item["parent"]));
+               $parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']);
+
+               $attributes = array(
+                               "ref" => $parent_item,
+                               "type" => "text/html",
+                               "href" => $a->get_baseurl()."/display/".$parent[0]["guid"]);
+               xml_add_element($doc, $entry, "thr:in-reply-to", "", $attributes);
+
+               $attributes = array(
+                               "rel" => "related",
+                               "href" => $a->get_baseurl()."/display/".$parent[0]["guid"]);
+               xml_add_element($doc, $entry, "link", "", $attributes);
+        }
+
+       xml_add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation",
+                                                       "href" => $a->get_baseurl()."/display/".$owner["nick"]."/".$item["parent"]));
+       xml_add_element($doc, $entry, "ostatus:conversation", $a->get_baseurl()."/display/".$owner["nick"]."/".$item["parent"]);
+
+       $tags = item_getfeedtags($item);
+
+       if(count($tags))
+               foreach($tags as $t)
+                       if ($t[0] == "@")
+                               xml_add_element($doc, $entry, "link", "", array("rel" => "mentioned",
+                                                                               "ostatus:object-type" => ACTIVITY_OBJ_PERSON,
+                                                                               "href" => $t[1]));
+
+       if (!$item["private"])
+               xml_add_element($doc, $entry, "link", "", array("rel" => "mentioned",
+                                                               "ostatus:object-type" => "http://activitystrea.ms/schema/1.0/collection",
+                                                               "href" => "http://activityschema.org/collection/public"));
+
+       if(count($tags))
+               foreach($tags as $t)
+                       if ($t[0] != "@")
+                               xml_add_element($doc, $entry, "category", "", array("term" => $t[2]));
+
+       ostatus_get_attachment($doc, $entry, $item);
+
+       // To-Do:
+       // The API call has yet to be implemented
+       //$attributes = array("href" => $a->get_baseurl()."/api/statuses/show/".$item["id"].".atom",
+       //              "rel" => "self", "type" => "application/atom+xml");
+       //xml_add_element($doc, $entry, "link", "", $attributes);
+
+       //$attributes = array("href" => $a->get_baseurl()."/api/statuses/show/".$item["id"].".atom",
+       //              "rel" => "edit", "type" => "application/atom+xml");
+       //xml_add_element($doc, $entry, "link", "", $attributes);
+
+       $app = $item["app"];
+       if ($app == "")
+               $app = "web";
+
+       xml_add_element($doc, $entry, "statusnet:notice_info", "", array("local_id" => $item["id"], "source" => $app));
+
+       return $entry;
+}
+
+function ostatus_feed(&$a, $owner_nick, $last_update) {
+
+       $r = q("SELECT `contact`.*, `user`.`nickname`, `user`.`timezone`, `user`.`page-flags`
+                       FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`
+                       WHERE `contact`.`self` AND `user`.`nickname` = '%s' LIMIT 1",
+                       dbesc($owner_nick));
+       if (!$r)
+               return;
+
+       $owner = $r[0];
+
+       if(!strlen($last_update))
+               $last_update = 'now -30 days';
+
+       $check_date = datetime_convert('UTC','UTC',$last_update,'Y-m-d H:i:s');
+
+       $items = q("SELECT STRAIGHT_JOIN `item`.*, `item`.`id` AS `item_id` FROM `item`
+                       INNER JOIN `thread` ON `thread`.`iid` = `item`.`parent`
+                       LEFT JOIN `item` AS `thritem` ON `thritem`.`uri`=`item`.`thr-parent` AND `thritem`.`uid`=`item`.`uid`
+                       WHERE `item`.`uid` = %d AND `item`.`received` > '%s' AND NOT `item`.`private` AND NOT `item`.`deleted`
+                               AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid`  = '' AND `item`.`deny_gid`  = ''
+                               AND ((`item`.`wall` AND (`item`.`parent` = `item`.`id`))
+                                       OR (`item`.`network` = '%s' AND ((`thread`.`network`='%s') OR (`thritem`.`network` = '%s'))) AND `thread`.`mention`)
+                               AND (`item`.`owner-link` IN ('%s', '%s'))
+                       ORDER BY `item`.`received` DESC
+                       LIMIT 0, 300",
+                       intval($owner["uid"]), dbesc($check_date),
+                       dbesc(NETWORK_DFRN), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_OSTATUS),
+                       dbesc($owner["nurl"]), dbesc(str_replace("http://", "https://", $owner["nurl"]))
+               );
+
+       $doc = new DOMDocument('1.0', 'utf-8');
+       $doc->formatOutput = true;
+
+       $root = ostatus_add_header($doc, $owner);
+
+       foreach ($items AS $item) {
+               $entry = ostatus_entry($doc, $item, $owner);
+               $root->appendChild($entry);
+       }
+
+       return(trim($doc->saveXML()));
+}
+
+function ostatus_salmon($item,$owner) {
+
+       $doc = new DOMDocument('1.0', 'utf-8');
+       $doc->formatOutput = true;
+
+       $entry = ostatus_entry($doc, $item, $owner, true);
+
+       $doc->appendChild($entry);
+
+       return(trim($doc->saveXML()));
+}
 ?>
index bc81fd78680c16cf0b429abeb557aa6b59727c87..d27beea3d5ea7683a771afd319b54fac3abd571a 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 require_once("boot.php");
+require_once("include/ostatus.php");
 
 function handle_pubsubhubbub() {
        global $a, $db;
@@ -12,17 +13,17 @@ function handle_pubsubhubbub() {
        $r = q("SELECT * FROM `push_subscriber` WHERE `push` > 0");
 
        foreach($r as $rr) {
-               $params = get_feed_for($a, '', $rr['nickname'], $rr['last_update'], 0, true);
+               //$params = get_feed_for($a, '', $rr['nickname'], $rr['last_update'], 0, true);
+               $params = ostatus_feed($a, $rr['nickname'], $rr['last_update']);
                $hmac_sig = hash_hmac("sha1", $params, $rr['secret']);
 
                $headers = array("Content-type: application/atom+xml",
-                                               sprintf("Link: <%s>;rel=hub," .
-                                                               "<%s>;rel=self",
-                                                               $a->get_baseurl() . '/pubsubhubbub',
-                                                               $rr['topic']),
-                                               "X-Hub-Signature: sha1=" . $hmac_sig);
+                               sprintf("Link: <%s>;rel=hub,<%s>;rel=self",
+                                       $a->get_baseurl().'/pubsubhubbub',
+                                       $rr['topic']),
+                               "X-Hub-Signature: sha1=".$hmac_sig);
 
-               logger('POST '. print_r($headers, true)."\n".$params, LOGGER_DEBUG);
+               logger('POST '.print_r($headers, true)."\n".$params, LOGGER_DEBUG);
 
                post_url($rr['callback_url'], $params, $headers);
                $ret = $a->get_curl_code();
index 7574374907eabf3f4cca2789b5be712dfebadee5..a254fe7e97086953d4a8b1c607ad0e1feefd6b39 100644 (file)
@@ -66,8 +66,6 @@ function get_salmon_key($uri,$keyhash) {
 
 function slapper($owner,$url,$slap) {
 
-       logger('slapper called for '.$url.'. Data: ' . $slap);
-
        // does contact have a salmon endpoint?
 
        if(! strlen($url))
@@ -97,6 +95,8 @@ EOT;
 
        $slap = str_replace('<entry>',$namespaces,$slap);
 
+       logger('slapper called for '.$url.'. Data: ' . $slap);
+
        // create a magic envelope
 
        $data      = base64url_encode($slap);
index 0b826b626fd6282d89798f6088ec63573513bbad..253489180552b4822ffc475f1b3fe38d476e1810 100644 (file)
@@ -943,6 +943,9 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
        if($class)
                $class = ' ' . $class;
 
+       if ($contact["addr"] == "")
+               $contact["addr"] = $contact["url"];
+
        $url = $contact['url'];
        $sparkle = '';
        $redir = false;
@@ -966,7 +969,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
                        . (($click) ? ' fakelink' : '') . '" '
                        . (($redir) ? ' target="redir" ' : '')
                        . (($url) ? ' href="' . $url . '"' : '') . $click
-                       . '" title="' . $contact['name'] . ' [' . $contact['url'] . ']" alt="' . $contact['name']
+                       . '" title="' . $contact['name'] . ' [' . $contact['addr'] . ']" alt="' . $contact['name']
                        . '" >'. $contact['name'] . '</a></div>' . "\r\n";
        }
        else {
@@ -974,7 +977,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
                        . (($click) ? ' fakelink' : '') . '" '
                        . (($redir) ? ' target="redir" ' : '')
                        . (($url) ? ' href="' . $url . '"' : '') . $click . ' ><img class="contact-block-img' . $class . $sparkle . '" src="'
-                       . proxy_url($contact['micro'], false, PROXY_SIZE_THUMB) . '" title="' . $contact['name'] . ' [' . $contact['url'] . ']" alt="' . $contact['name']
+                       . proxy_url($contact['micro'], false, PROXY_SIZE_THUMB) . '" title="' . $contact['name'] . ' [' . $contact['addr'] . ']" alt="' . $contact['name']
                        . '" /></a></div>' . "\r\n";
        }
 }}
index d989664acd72999f16ec1432765124cd23c39f01..3997a8a61f12584da6469808d767fb93c53c2db6 100644 (file)
@@ -48,7 +48,7 @@ function create_user($arr) {
                        $result['message'] .= t('An invitation is required.') . EOL;
                        return $result;
                }
-               $r = q("select * from register where `hash` = '%s' limit 1", dbesc($invite_id));
+               $r = q("SELECT * FROM `register` WHERE `hash` = '%s' LIMIT 1", dbesc($invite_id));
                if(! results($r)) {
                        $result['message'] .= t('Invitation could not be verified.') . EOL;
                        return $result;
@@ -66,7 +66,7 @@ function create_user($arr) {
                        require_once('library/openid.php');
                        $openid = new LightOpenID;
                        $openid->identity = $openid_url;
-                       $openid->returnUrl = $a->get_baseurl() . '/openid';
+                       $openid->returnUrl = z_root() . '/openid';
                        $openid->required = array('namePerson/friendly', 'contact/email', 'namePerson');
                        $openid->optional = array('namePerson/first','media/image/aspect11','media/image/default');
                        try {
@@ -138,9 +138,10 @@ function create_user($arr) {
 
        if(! preg_match("/^[a-z0-9][a-z0-9\_]*$/",$nickname))
                $result['message'] .= t('Your "nickname" can only contain "a-z", "0-9" and "_".') . EOL;
+
        $r = q("SELECT `uid` FROM `user`
-                       WHERE `nickname` = '%s' LIMIT 1",
-                       dbesc($nickname)
+               WHERE `nickname` = '%s' LIMIT 1",
+               dbesc($nickname)
        );
        if(count($r))
                $result['message'] .= t('Nickname is already registered. Please choose another.') . EOL;
@@ -149,8 +150,8 @@ function create_user($arr) {
        // but could be a security issue for federated platforms.
 
        $r = q("SELECT * FROM `userd`
-                       WHERE `username` = '%s' LIMIT 1",
-                       dbesc($nickname)
+               WHERE `username` = '%s' LIMIT 1",
+               dbesc($nickname)
        );
        if(count($r))
                $result['message'] .= t('Nickname was once registered here and may not be re-used. Please choose another.') . EOL;
@@ -237,8 +238,8 @@ function create_user($arr) {
         */
 
        $r = q("SELECT `uid` FROM `user`
-                       WHERE `nickname` = '%s' ",
-                       dbesc($nickname)
+               WHERE `nickname` = '%s' ",
+               dbesc($nickname)
        );
        if((count($r) > 1) && $newuid) {
                $result['message'] .= t('Nickname is already registered. Please choose another.') . EOL;
@@ -255,8 +256,8 @@ function create_user($arr) {
                        t('default'),
                        1,
                        dbesc($username),
-                       dbesc($a->get_baseurl() . "/photo/profile/{$newuid}.jpg"),
-                       dbesc($a->get_baseurl() . "/photo/avatar/{$newuid}.jpg"),
+                       dbesc(z_root() . "/photo/profile/{$newuid}.jpg"),
+                       dbesc(z_root() . "/photo/avatar/{$newuid}.jpg"),
                        intval($publish),
                        intval($netpublish)
 
@@ -269,22 +270,23 @@ function create_user($arr) {
                        return $result;
                }
                $r = q("INSERT INTO `contact` ( `uid`, `created`, `self`, `name`, `nick`, `photo`, `thumb`, `micro`, `blocked`, `pending`, `url`, `nurl`,
-                       `request`, `notify`, `poll`, `confirm`, `poco`, `name-date`, `uri-date`, `avatar-date`, `closeness` )
-                       VALUES ( %d, '%s', 1, '%s', '%s', '%s', '%s', '%s', 0, 0, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 0 ) ",
+                       `addr`, `request`, `notify`, `poll`, `confirm`, `poco`, `name-date`, `uri-date`, `avatar-date`, `closeness` )
+                       VALUES ( %d, '%s', 1, '%s', '%s', '%s', '%s', '%s', 0, 0, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 0 ) ",
                        intval($newuid),
                        datetime_convert(),
                        dbesc($username),
                        dbesc($nickname),
-                       dbesc($a->get_baseurl() . "/photo/profile/{$newuid}.jpg"),
-                       dbesc($a->get_baseurl() . "/photo/avatar/{$newuid}.jpg"),
-                       dbesc($a->get_baseurl() . "/photo/micro/{$newuid}.jpg"),
-                       dbesc($a->get_baseurl() . "/profile/$nickname"),
-                       dbesc(normalise_link($a->get_baseurl() . "/profile/$nickname")),
-                       dbesc($a->get_baseurl() . "/dfrn_request/$nickname"),
-                       dbesc($a->get_baseurl() . "/dfrn_notify/$nickname"),
-                       dbesc($a->get_baseurl() . "/dfrn_poll/$nickname"),
-                       dbesc($a->get_baseurl() . "/dfrn_confirm/$nickname"),
-                       dbesc($a->get_baseurl() . "/poco/$nickname"),
+                       dbesc(z_root() . "/photo/profile/{$newuid}.jpg"),
+                       dbesc(z_root() . "/photo/avatar/{$newuid}.jpg"),
+                       dbesc(z_root() . "/photo/micro/{$newuid}.jpg"),
+                       dbesc(z_root() . "/profile/$nickname"),
+                       dbesc(normalise_link(z_root() . "/profile/$nickname")),
+                       dbesc($nickname . '@' . substr(z_root(), strpos(z_root(),'://') + 3 )),
+                       dbesc(z_root() . "/dfrn_request/$nickname"),
+                       dbesc(z_root() . "/dfrn_notify/$nickname"),
+                       dbesc(z_root() . "/dfrn_poll/$nickname"),
+                       dbesc(z_root() . "/dfrn_confirm/$nickname"),
+                       dbesc(z_root() . "/poco/$nickname"),
                        dbesc(datetime_convert()),
                        dbesc(datetime_convert()),
                        dbesc(datetime_convert())
@@ -296,23 +298,23 @@ function create_user($arr) {
                require_once('include/group.php');
                group_add($newuid, t('Friends'));
 
-               $r = q("SELECT id FROM `group` WHERE uid = %d AND name = '%s'",
+               $r = q("SELECT `id` FROM `group` WHERE `uid` = %d AND `name` = '%s'",
                        intval($newuid),
                        dbesc(t('Friends'))
                );
                if($r && count($r)) {
                        $def_gid = $r[0]['id'];
 
-                       q("UPDATE user SET def_gid = %d WHERE uid = %d",
+                       q("UPDATE `user` SET `def_gid` = %d WHERE `uid` = %d",
                                intval($r[0]['id']),
                                intval($newuid)
                        );
                }
 
                if(get_config('system', 'newuser_private') && $def_gid) {
-                       q("UPDATE user SET allow_gid = '%s' WHERE uid = %d",
-                          dbesc("<" . $def_gid . ">"),
-                          intval($newuid)
+                       q("UPDATE `user` SET `allow_gid` = '%s' WHERE `uid` = %d",
+                               dbesc("<" . $def_gid . ">"),
+                               intval($newuid)
                        );
                }
 
index df454afe1fb8bbccdf1aa86fafe9486917da74c0..f67d7183cedabb5e476e094459c386592a070ff9 100644 (file)
                                $(".group-"+gid+" .notify").addClass("show").text(gcount);
                        });
 
+                       $(".forum-widget-entry .notify").removeClass("show");
+                       $(data).find("forum").each(function() {
+                               var fid = this.id;
+                               var fcount = this.innerHTML;
+                               $(".forum-"+fid+" .notify").addClass("show").text(fcount);
+                       });
+
 
                        var eNotif = $(data).find('notif')
 
index d9a17dcad7010939fdbd2208c778e60914f0613c..8d2a7688f8f500e2b7cbcb5905cb43dfdce6d080 100644 (file)
@@ -409,6 +409,7 @@ function admin_page_site_post(&$a){
        $poll_interval          =       ((x($_POST,'poll_interval'))            ? intval(trim($_POST['poll_interval']))         : 0);
        $maxloadavg             =       ((x($_POST,'maxloadavg'))               ? intval(trim($_POST['maxloadavg']))            : 50);
        $maxloadavg_frontend    =       ((x($_POST,'maxloadavg_frontend'))      ? intval(trim($_POST['maxloadavg_frontend']))   : 50);
+       $optimize_max_tablesize =       ((x($_POST,'optimize_max_tablesize'))   ? intval(trim($_POST['optimize_max_tablesize'])): 100);
        $poco_completion        =       ((x($_POST,'poco_completion'))          ? intval(trim($_POST['poco_completion']))       : false);
        $poco_requery_days      =       ((x($_POST,'poco_requery_days'))        ? intval(trim($_POST['poco_requery_days']))     : 7);
        $poco_discovery         =       ((x($_POST,'poco_discovery'))           ? intval(trim($_POST['poco_discovery']))        : 0);
@@ -490,6 +491,7 @@ function admin_page_site_post(&$a){
        set_config('system','poll_interval',$poll_interval);
        set_config('system','maxloadavg',$maxloadavg);
        set_config('system','maxloadavg_frontend',$maxloadavg_frontend);
+       set_config('system','optimize_max_tablesize',$optimize_max_tablesize);
        set_config('system','poco_completion',$poco_completion);
        set_config('system','poco_requery_days',$poco_requery_days);
        set_config('system','poco_discovery',$poco_discovery);
@@ -772,6 +774,7 @@ function admin_page_site(&$a) {
                '$poll_interval'        => array('poll_interval', t("Poll interval"), (x(get_config('system','poll_interval'))?get_config('system','poll_interval'):2), t("Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval.")),
                '$maxloadavg'           => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
                '$maxloadavg_frontend'  => array('maxloadavg_frontend', t("Maximum Load Average (Frontend)"), ((intval(get_config('system','maxloadavg_frontend')) > 0)?get_config('system','maxloadavg_frontend'):50), t("Maximum system load before the frontend quits service - default 50.")),
+               '$optimize_max_tablesize'=> array('optimize_max_tablesize', t("Maximum table size for optimization"), ((intval(get_config('system','optimize_max_tablesize')) > 0)?get_config('system','optimize_max_tablesize'):100), t("Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it.")),
 
                '$poco_completion'      => array('poco_completion', t("Periodical check of global contacts"), get_config('system','poco_completion'), t("If enabled, the global contacts are checked periodically for missing or outdated data and the vitality of the contacts and servers.")),
                '$poco_requery_days'    => array('poco_requery_days', t("Days between requery"), get_config('system','poco_requery_days'), t("Number of days after which a server is requeried for his contacts.")),
index 83388ed4ed9e68e91b96f1c35d678ea765a94616..992f8ed6b2e43d51aba7db7fcd168131452d518e 100644 (file)
@@ -13,7 +13,7 @@ function contacts_init(&$a) {
 
        $contact_id = 0;
 
-       if(($a->argc == 2) && intval($a->argv[1])) {
+       if((($a->argc == 2) && intval($a->argv[1])) OR (($a->argc == 3) && intval($a->argv[1]) && ($a->argv[2] == "posts"))) {
                $contact_id = intval($a->argv[1]);
                $r = q("SELECT * FROM `contact` WHERE `uid` = %d and `id` = %d LIMIT 1",
                        intval(local_user()),
@@ -55,8 +55,8 @@ function contacts_init(&$a) {
                $findpeople_widget .= findpeople_widget();
        }
 
-       $groups_widget .= group_side('contacts','group',false,0,$contact_id);
-       
+       $groups_widget .= group_side('contacts','group','full',0,$contact_id);
+
        $a->page['aside'] .= replace_macros(get_markup_template("contacts-widget-sidebar.tpl"),array(
                '$vcard_widget' => $vcard_widget,
                '$findpeople_widget' => $findpeople_widget,
@@ -464,6 +464,9 @@ function contacts_content(&$a) {
                                goaway($a->get_baseurl(true) . '/contacts');
                        return; // NOTREACHED
                }
+               if($cmd === 'posts') {
+                       return contact_posts($a, $contact_id);
+               }
        }
 
 
@@ -548,43 +551,7 @@ function contacts_content(&$a) {
                $all_friends = (($x) ? t('View all contacts') : '');
 
                // tabs
-               $tabs = array(
-                       array(
-                               'label' => (($contact['blocked']) ? t('Unblock') : t('Block') ),
-                               'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/block',
-                               'sel'   => '',
-                               'title' => t('Toggle Blocked status'),
-                               'id'    => 'toggle-block-tab',
-                               'accesskey' => 'b',
-                       ),
-                       array(
-                               'label' => (($contact['readonly']) ? t('Unignore') : t('Ignore') ),
-                               'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/ignore',
-                               'sel'   => '',
-                               'title' => t('Toggle Ignored status'),
-                               'id'    => 'toggle-ignore-tab',
-                               'accesskey' => 'i',
-                       ),
-
-                       array(
-                               'label' => (($contact['archive']) ? t('Unarchive') : t('Archive') ),
-                               'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/archive',
-                               'sel'   => '',
-                               'title' => t('Toggle Archive status'),
-                               'id'    => 'toggle-archive-tab',
-                               'accesskey' => 'v',
-                       ),
-                       array(
-                               'label' => t('Repair'),
-                               'url'   => $a->get_baseurl(true) . '/crepair/' . $contact_id,
-                               'sel'   => '',
-                               'title' => t('Advanced Contact Settings'),
-                               'id'    => 'repair-tab',
-                               'accesskey' => 'r',
-                       )
-               );
-               $tab_tpl = get_markup_template('common_tabs.tpl');
-               $tab_str = replace_macros($tab_tpl, array('$tabs' => $tabs));
+               $tab_str = contact_tabs($a, $contact_id, 2);
 
                $lost_contact = (($contact['archive'] && $contact['term-date'] != '0000-00-00 00:00:00' && $contact['term-date'] < datetime_convert('','','now')) ? t('Communications lost with this contact!') : '');
 
@@ -602,8 +569,17 @@ function contacts_content(&$a) {
                        ($contact['rel'] == CONTACT_IS_FOLLOWER))
                        $follow = $a->get_baseurl(true)."/follow?url=".urlencode($contact["url"]);
 
+
+               $header = $contact["name"];
+
+               if ($contact["addr"] != "")
+                       $header .= " <".$contact["addr"].">";
+
+               $header .= " (".network_to_name($contact['network'], $contact['url']).")";
+
                $o .= replace_macros($tpl, array(
-                       '$header' => t('Contact Editor'),
+                       //'$header' => t('Contact Editor'),
+                       '$header' => htmlentities($header),
                        '$tab_str' => $tab_str,
                        '$submit' => t('Submit'),
                        '$lbl_vis1' => t('Profile Visibility'),
@@ -653,6 +629,12 @@ function contacts_content(&$a) {
                        '$url' => $url,
                        '$profileurllabel' => t('Profile URL'),
                        '$profileurl' => $contact['url'],
+                       '$location' => bbcode($contact["location"]),
+                       '$location_label' => t("Location:"),
+                       '$about' => bbcode($contact["about"], false, false),
+                       '$about_label' => t("About:"),
+                       '$keywords' => $contact["keywords"],
+                       '$keywords_label' => t("Tags:")
 
                ));
 
@@ -786,8 +768,9 @@ function contacts_content(&$a) {
                $total = $r[0]['total'];
        }
 
+       $sql_extra3 = unavailable_networks();
 
-       $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `pending` = 0 $sql_extra $sql_extra2 ORDER BY `name` ASC LIMIT %d , %d ",
+       $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `pending` = 0 $sql_extra $sql_extra2 $sql_extra3 ORDER BY `name` ASC LIMIT %d , %d ",
                intval($_SESSION['uid']),
                intval($a->pager['start']),
                intval($a->pager['itemspage'])
@@ -829,6 +812,124 @@ function contacts_content(&$a) {
        return $o;
 }
 
+function contact_tabs($a, $contact_id, $active_tab) {
+       // tabs
+       $tabs = array(
+               array(
+                       'label'=>t('Status'),
+                       'url' => "contacts/".$contact_id."/posts",
+                       'sel' => (($active_tab == 1)?'active':''),
+                       'title' => t('Status Messages and Posts'),
+                       'id' => 'status-tab',
+                       'accesskey' => 'm',
+               ),
+               array(
+                       'label'=>t('Profile'),
+                       'url' => "contacts/".$contact_id,
+                       'sel' => (($active_tab == 2)?'active':''),
+                       'title' => t('Profile Details'),
+                       'id' => 'status-tab',
+                       'accesskey' => 'r',
+               ),
+               array(
+                       'label' => t('Repair'),
+                       'url'   => $a->get_baseurl(true) . '/crepair/' . $contact_id,
+                       'sel' => (($active_tab == 3)?'active':''),
+                       'title' => t('Advanced Contact Settings'),
+                       'id'    => 'repair-tab',
+                       'accesskey' => 'r',
+               ),
+               array(
+                       'label' => (($contact['blocked']) ? t('Unblock') : t('Block') ),
+                       'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/block',
+                       'sel'   => '',
+                       'title' => t('Toggle Blocked status'),
+                       'id'    => 'toggle-block-tab',
+                       'accesskey' => 'b',
+               ),
+               array(
+                       'label' => (($contact['readonly']) ? t('Unignore') : t('Ignore') ),
+                       'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/ignore',
+                       'sel'   => '',
+                       'title' => t('Toggle Ignored status'),
+                       'id'    => 'toggle-ignore-tab',
+                       'accesskey' => 'i',
+               ),
+               array(
+                       'label' => (($contact['archive']) ? t('Unarchive') : t('Archive') ),
+                       'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/archive',
+                       'sel'   => '',
+                       'title' => t('Toggle Archive status'),
+                       'id'    => 'toggle-archive-tab',
+                       'accesskey' => 'v',
+               )
+       );
+       $tab_tpl = get_markup_template('common_tabs.tpl');
+       $tab_str = replace_macros($tab_tpl, array('$tabs' => $tabs));
+
+       return $tab_str;
+}
+
+function contact_posts($a, $contact_id) {
+
+       require_once('include/conversation.php');
+
+       $r = q("SELECT * FROM `contact` WHERE `id` = %d", intval($contact_id));
+       if ($r) {
+               $contact = $r[0];
+               $a->page['aside'] = "";
+               profile_load($a, "", 0, get_contact_details_by_url($contact["url"]));
+       }
+
+       if(get_config('system', 'old_pager')) {
+               $r = q("SELECT COUNT(*) AS `total` FROM `item`
+                       WHERE `item`.`uid` = %d AND (`author-link` = '%s')",
+                       intval(local_user()), dbesc($contact["url"]));
+
+               $a->set_pager_total($r[0]['total']);
+       }
+
+       $r = q("SELECT `item`.`uri`, `item`.*, `item`.`id` AS `item_id`,
+                       `author-name` AS `name`, `owner-avatar` AS `photo`,
+                       `owner-link` AS `url`, `owner-avatar` AS `thumb`
+               FROM `item` FORCE INDEX (uid_contactid_created)
+               WHERE `item`.`uid` = %d AND `contact-id` = %d
+                       AND (`author-link` = '%s')
+               ORDER BY `item`.`created` DESC LIMIT %d, %d",
+               intval(local_user()),
+               intval($contact_id),
+               dbesc($contact["url"]),
+               intval($a->pager['start']),
+               intval($a->pager['itemspage'])
+       );
+
+       $tab_str = contact_tabs($a, $contact_id, 1);
+
+       $header = $contact["name"];
+
+       if ($contact["addr"] != "")
+               $header .= " <".$contact["addr"].">";
+
+       $header .= " (".network_to_name($contact['network'], $contact['url']).")";
+
+       $tpl = get_markup_template("section_title.tpl");
+       $o = replace_macros($tpl,array(
+                '$title' => htmlentities($header)
+        ));
+
+       $o .= $tab_str;
+
+       $o .= conversation($a,$r,'community',false);
+
+       if(!get_config('system', 'old_pager')) {
+               $o .= alt_pager($a,count($r));
+       } else {
+               $o .= paginate($a);
+       }
+
+       return $o;
+}
+
 function _contact_detail_for_template($rr){
 
        $community = '';
index 4f00190990654b0a898aee8a0722ecfe1413f076..d16adf8c745b6083b5911e7e5c3af3368a417aa2 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+require_once("include/contact_selectors.php");
+require_once("mod/contacts.php");
 
 function crepair_init(&$a) {
        if(! local_user())
@@ -157,9 +159,20 @@ function crepair_content(&$a) {
 
        $update_profile = in_array($contact['network'], array(NETWORK_DFRN, NETWORK_DSPR, NETWORK_OSTATUS));
 
+       $tab_str = contact_tabs($a, $contact['id'], 3);
+
+       $header = $contact["name"];
+
+       if ($contact["addr"] != "")
+                $header .= " <".$contact["addr"].">";
+
+        $header .= " (".network_to_name($contact['network'], $contact['url']).")";
+
        $tpl = get_markup_template('crepair.tpl');
        $o .= replace_macros($tpl, array(
-               '$title'        => t('Repair Contact Settings'),
+               //'$title'      => t('Repair Contact Settings'),
+               '$title'        => htmlentities($header),
+               '$tab_str'      => $tab_str,
                '$warning'      => $warning,
                '$info'         => $info,
                '$returnaddr'   => $returnaddr,
index 6a4c7f1ced21a542c33225f400b2f0913e39ea27..3f9c82576a3bf02845082e266ba1dfb0e66095cf 100644 (file)
@@ -205,6 +205,7 @@ function dirfind_content(&$a, $prefix = "") {
                                        'details'       => $contact_details['location'],
                                        'tags'          => $contact_details['keywords'],
                                        'about'         => $contact_details['about'],
+                                       'account_type'  => (($contact_details['community']) ? t('Forum') : ''),
                                        'network' => network_to_name($jj->network, $jj->url),
                                        'id' => ++$id,
                                );
index 263586e2e903458f1cf7627a8849ffc4bdc64149..e9f9561f4613eaa0728b06f5e1113828e1cb7c15 100644 (file)
@@ -7,7 +7,7 @@ function validate_members(&$item) {
 function group_init(&$a) {
        if(local_user()) {
                require_once('include/group.php');
-               $a->page['aside'] = group_side('contacts','group',false,(($a->argc > 1) ? intval($a->argv[1]) : 0));
+               $a->page['aside'] = group_side('contacts','group','extended',(($a->argc > 1) ? intval($a->argv[1]) : 0));
        }
 }
 
index 91a94974e9a232cd0b7c1e2a55893fe0ee69c41b..a2b88a8e305f00474a3adecb034adb5a6ed71ddf 100644 (file)
@@ -362,8 +362,7 @@ function item_post(&$a) {
        if((local_user()) && (local_user() == $profile_uid)) {
                $self = true;
                $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
-                       intval($_SESSION['uid'])
-               );
+                       intval($_SESSION['uid']));
        }
        elseif(remote_user()) {
                if(is_array($_SESSION['remote'])) {
index c0eedc2ba07ebcfecaa4b05cd44ab428c844ef5d..adcc3d787aac0d58563cbd5d38e82e50384498d2 100644 (file)
@@ -114,6 +114,25 @@ function manage_content(&$a) {
                $identities[$key][thumb] = $thumb[0][thumb];
 
                $identities[$key]['selected'] = (($id['nickname'] === $a->user['nickname']) ? true : false);
+
+               $notifications = 0;
+
+               $r = q("SELECT DISTINCT(`parent`) FROM `notify` WHERE `uid` = %d AND NOT `seen` AND NOT (`type` IN (%d, %d))",
+                       intval($id['uid']), intval(NOTIFY_INTRO), intval(NOTIFY_MAIL));
+               if ($r)
+                       $notifications = sizeof($r);
+
+               $r = q("SELECT DISTINCT(`convid`) FROM `mail` WHERE `uid` = %d AND NOT `seen`",
+                       intval($id['uid']));
+               if ($r)
+                       $notifications = $notifications + sizeof($r);
+
+               $r = q("SELECT COUNT(*) AS `introductions` FROM `intro` WHERE NOT `blocked` AND NOT `ignore` AND `uid` = %d",
+                       intval($id['uid']));
+               if ($r)
+                       $notifications = $notifications + $r[0]["introductions"];
+
+               $identities[$key]['notifications'] = $notifications;
        }
 
        $o = replace_macros(get_markup_template('manage.tpl'), array(
index db1cac0f7876d8b7106c87b8559c9d0f5e492974..3b0367b4290e1efd02ccbd945eca34fb4e79bb4d 100644 (file)
@@ -79,6 +79,7 @@ function match_content(&$a) {
                                                'details'       => $contact_details['location'],
                                                'tags'          => $contact_details['keywords'],
                                                'about'         => $contact_details['about'],
+                                               'account_type'  => (($contact_details['community']) ? t('Forum') : ''),
                                                'thumb' => proxy_url($jj->photo, false, PROXY_SIZE_THUMB),
                                                'inttxt' => ' ' . t('is interested in:'),
                                                'conntxt' => t('Connect'),
index 903ee4154839ca37493a89b02dbdf8e23fdb7630..8e7a2b8e1ea1174b9bd0069924d5fcd1881be0e8 100644 (file)
@@ -6,6 +6,8 @@ function network_init(&$a) {
        }
 
        $is_a_date_query = false;
+       if(x($_GET['cid']) && intval($_GET['cid']) != 0)
+               $cid = $_GET['cid'];
 
        if($a->argc > 1) {
                for($x = 1; $x < $a->argc; $x ++) {
@@ -145,21 +147,13 @@ function network_init(&$a) {
                ));
        }
 
-       $a->page['aside'] .= (feature_enabled(local_user(),'groups') ? group_side('network/0','network',true,$group_id) : '');
-       $a->page['aside'] .= (feature_enabled(local_user(),'forumlist_widget') ? widget_forumlist($a) : '');
+       $a->page['aside'] .= (feature_enabled(local_user(),'groups') ? group_side('network/0','network','standard',$group_id) : '');
+       $a->page['aside'] .= (feature_enabled(local_user(),'forumlist_widget') ? widget_forumlist(local_user(),$cid) : '');
        $a->page['aside'] .= posted_date_widget($a->get_baseurl() . '/network',local_user(),false);
        $a->page['aside'] .= networks_widget($a->get_baseurl(true) . '/network',(x($_GET, 'nets') ? $_GET['nets'] : ''));
        $a->page['aside'] .= saved_searches($search);
        $a->page['aside'] .= fileas_widget($a->get_baseurl(true) . '/network',(x($_GET, 'file') ? $_GET['file'] : ''));
 
-       if(x($_GET['cid']) && intval($_GET['cid']) != 0) {
-               $r = q("SELECT `url` FROM `contact` WHERE `id` = %d",
-                       intval($_GET['cid']));
-               if ($r) {
-                       $a->page['aside'] = "";
-                       profile_load($a, "", 0, get_contact_details_by_url($r[0]["url"]));
-               }
-       }
 }
 
 function saved_searches($search) {
@@ -583,7 +577,7 @@ function network_content(&$a, $update = 0) {
        }
        elseif($cid) {
 
-               $r = q("SELECT `id`,`name`,`network`,`writable`,`nurl` FROM `contact` WHERE `id` = %d
+               $r = q("SELECT `id`,`name`,`network`,`writable`,`nurl`, `forum`, `prv`, `addr`, `thumb`, `location` FROM `contact` WHERE `id` = %d
                                AND `blocked` = 0 AND `pending` = 0 LIMIT 1",
                        intval($cid)
                );
@@ -594,8 +588,18 @@ function network_content(&$a, $update = 0) {
                                            ON $sql_table.$sql_parent = `temp1`.`parent` ";
                        $sql_extra = "";
 
-                       $o = replace_macros(get_markup_template("section_title.tpl"),array(
-                               '$title' => sprintf( t('Contact: %s'), htmlentities($r[0]['name']))
+                       $entries[0] = array(
+                               'id' => 'network',
+                               'name' => htmlentities($r[0]['name']),
+                               'itemurl' => (($r[0]['addr']) ? ($r[0]['addr']) : ($r[0]['nurl'])),
+                               'thumb' => proxy_url($r[0]['thumb'], false, PROXY_SIZE_THUMB),
+                               'account_type' => (($r[0]['forum']) || ($r[0]['prv']) ? t('Forum') : ''),
+                               'details' => $r[0]['location'],
+                       );
+
+                       $o = replace_macros(get_markup_template("viewcontact_template.tpl"),array(
+                               'contacts' => $entries,
+                               'id' => 'network',
                        )) . $o;
 
                        if($r[0]['network'] === NETWORK_OSTATUS && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
index 06fa730e0d1a581ef7f3c1a8df8d678da6a2e029..9f6e9784331851b702434245f24256313612d6e4 100644 (file)
@@ -15,7 +15,7 @@ function nogroup_init(&$a) {
        if(! x($a->page,'aside'))
                $a->page['aside'] = '';
 
-       $a->page['aside'] .= group_side('contacts','group',false,0,$contact_id);
+       $a->page['aside'] .= group_side('contacts','group','extended',0,$contact_id);
 }
 
 
index 97eebb89ab630ae2b9aa5a8417733baaa5fb4d43..ef051d9f6b433c0e8152c39168c0debd8cfbee0a 100644 (file)
@@ -280,7 +280,8 @@ function parseurl_getsiteinfo($url, $no_guessing = false, $do_oembed = true, $co
        if (isset($keywords)) {
                $siteinfo["keywords"] = array();
                foreach ($keywords as $keyword)
-                       $siteinfo["keywords"][] = trim($keyword);
+                       if (!in_array(trim($keyword), $siteinfo["keywords"]))
+                               $siteinfo["keywords"][] = trim($keyword);
        }
 
        //$list = $xpath->query("head/meta[@property]");
index 8cbfd308e67aa3792a0a5329617ae84efa609fe7..967555881c0c1f5f535163fb1657b8ea9349a642 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 require_once("include/datetime.php");
 require_once('include/bbcode.php');
+require_once('include/forums.php');
 require_once("mod/proxy.php");
 
 function ping_init(&$a) {
@@ -34,6 +35,7 @@ function ping_init(&$a) {
                $home = 0;
                $network = 0;
                $network_group = array();
+               $forums_unseen = array();
 
                $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`wall`, `item`.`author-name`,
                                `item`.`contact-id`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object`,
@@ -100,6 +102,10 @@ function ping_init(&$a) {
                        #echo '<SQL id="' . intval(local_user()) . '">' . $sql . '</SQL>';
                        $network_group = q($sql, intval(local_user()), intval(local_user()));
                        #echo '<COUNT R="' . count($network_group) . '"/>';
+
+                       if(intval(feature_enabled(local_user(),'forumlist_widget'))) {
+                               $forums_unseen = forums_count_unseen();
+                       }
                }
 
                $intros1 = q("SELECT  `intro`.`id`, `intro`.`datetime`,
@@ -220,6 +226,7 @@ function ping_init(&$a) {
                                <net>$network</net>
                                <home>$home</home>\r\n";
                if ($register!=0) echo "<register>$register</register>";
+
                if ( count($network_group) ) {
                        echo '<groups>';
                        foreach ($network_group as $it) {
@@ -228,6 +235,14 @@ function ping_init(&$a) {
                        echo "</groups>";
                }
 
+               if ( count($forums_unseen) ) {
+                       echo '<forums>';
+                       foreach ($forums_unseen as $it) {
+                               echo '<forum id="' . $it['id'] . '">' . $it['count'] . "</forum>";
+                       }
+                       echo "</forums>";
+               }
+
                echo "<all-events>$all_events</all-events>
                        <all-events-today>$all_events_today</all-events-today>
                        <events>$events</events>
index 578338b5058055ff85d57dbb22d7c6abff4aab9f..b73c2cd1b61eef34a248ff9e507d92b4182f419b 100644 (file)
@@ -36,7 +36,7 @@ function suggest_init(&$a) {
                }
                // Now check how the user responded to the confirmation query
                if(!$_REQUEST['canceled']) {
-                       q("insert into gcign ( uid, gcid ) values ( %d, %d ) ",
+                       q("INSERT INTO `gcign` ( `uid`, `gcid` ) VALUES ( %d, %d ) ",
                                intval(local_user()),
                                intval($_GET['ignore'])
                        );
@@ -90,8 +90,9 @@ function suggest_content(&$a) {
                        'name' => $rr['name'],
                        'thumb' => proxy_url($rr['photo'], false, PROXY_SIZE_THUMB),
                        'details'       => $contact_details['location'],
-                        'tags'          => $contact_details['keywords'],
-                        'about'         => $contact_details['about'],
+                       'tags'          => $contact_details['keywords'],
+                       'about'         => $contact_details['about'],
+                       'account_type'  => (($contact_details['community']) ? t('Forum') : ''),
                        'ignlnk' => $ignlnk,
                        'ignid' => $rr['id'],
                        'conntxt' => t('Connect'),
index f199574c69483945f63f4e632c155aa49ba500d2..d16a48e349190f447ac0d3cbf4087ea088f3e164 100644 (file)
@@ -26,19 +26,30 @@ function viewcontacts_content(&$a) {
        }
 
 
-       $r = q("SELECT COUNT(*) as `total` FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0 ",
-               intval($a->profile['uid'])
+       $r = q("SELECT COUNT(*) AS `total` FROM `contact`
+               WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0
+                       AND `network` IN ('%s', '%s', '%s')",
+               intval($a->profile['uid']),
+               dbesc(NETWORK_DFRN),
+               dbesc(NETWORK_DIASPORA),
+               dbesc(NETWORK_OSTATUS)
        );
        if(count($r))
                $a->set_pager_total($r[0]['total']);
 
-       $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0 ORDER BY `name` ASC LIMIT %d , %d ",
+       $r = q("SELECT * FROM `contact`
+               WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0
+                       AND `network` IN ('%s', '%s', '%s')
+               ORDER BY `name` ASC LIMIT %d, %d",
                intval($a->profile['uid']),
+               dbesc(NETWORK_DFRN),
+               dbesc(NETWORK_DIASPORA),
+               dbesc(NETWORK_OSTATUS),
                intval($a->pager['start']),
                intval($a->pager['itemspage'])
        );
-       if(! count($r)) {
-               info( t('No contacts.') . EOL );
+       if(!count($r)) {
+               info(t('No contacts.').EOL);
                return $o;
        }
 
@@ -64,12 +75,14 @@ function viewcontacts_content(&$a) {
                $contacts[] = array(
                        'id' => $rr['id'],
                        'img_hover' => sprintf( t('Visit %s\'s profile [%s]'), $rr['name'], $rr['url']),
+                       'photo_menu' => contact_photo_menu($rr),
                        'thumb' => proxy_url($rr['thumb'], false, PROXY_SIZE_THUMB),
                        'name' => htmlentities(substr($rr['name'],0,20)),
                        'username' => htmlentities($rr['name']),
                        'details'       => $contact_details['location'],
-                        'tags'          => $contact_details['keywords'],
-                        'about'         => $contact_details['about'],
+                       'tags'          => $contact_details['keywords'],
+                       'about'         => $contact_details['about'],
+                       'account_type'  => (($contact_details['community']) ? t('Forum') : ''),
                        'url' => $url,
                        'sparkle' => '',
                        'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']),
index d31c741d530ea0e0ba253f346b5cafa33f4914f0..a0890ef3d90d3ce2309d0499ce1665dbb9031eb7 100644 (file)
@@ -6,6 +6,7 @@ Alex
 Alexander Kampmann
 AlfredSK
 Andi Stadler
+Andreas H.
 AndrĆ© Lohan
 Anthronaut
 Arian - Cazare Muncitori
@@ -114,6 +115,7 @@ Rabuzarus
 Radek
 Rafael
 Rainulf Pineda
+Ralph
 rcmaniac
 rebeka-catalina
 repat
index 5388b94dafef1efe10f6c6d650e620c5d3643d77..7dcd9719314c6961f3e94c2a8aedba7b02cb498b 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-11-08 21:46+0100\n"
+"POT-Creation-Date: 2015-11-30 13:14+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -37,13 +37,13 @@ msgstr ""
 msgid "Contact updated."
 msgstr ""
 
-#: mod/contacts.php:198 mod/dfrn_request.php:576
+#: mod/contacts.php:198 mod/dfrn_request.php:578
 msgid "Failed to update contact record."
 msgstr ""
 
 #: mod/contacts.php:354 mod/manage.php:96 mod/display.php:496
-#: mod/profile_photo.php:19 mod/profile_photo.php:169 mod/profile_photo.php:180
-#: mod/profile_photo.php:193 mod/ostatus_subscribe.php:9 mod/follow.php:10
+#: mod/profile_photo.php:19 mod/profile_photo.php:175 mod/profile_photo.php:186
+#: mod/profile_photo.php:199 mod/ostatus_subscribe.php:9 mod/follow.php:10
 #: mod/follow.php:72 mod/follow.php:137 mod/item.php:169 mod/item.php:185
 #: mod/group.php:19 mod/dfrn_confirm.php:55 mod/fsuggest.php:78
 #: mod/wall_upload.php:77 mod/wall_upload.php:80 mod/viewcontacts.php:24
@@ -58,7 +58,7 @@ msgstr ""
 #: mod/api.php:31 mod/notes.php:22 mod/poke.php:149 mod/repair_ostatus.php:9
 #: mod/invite.php:15 mod/invite.php:101 mod/photos.php:163 mod/photos.php:1097
 #: mod/regmod.php:110 mod/uimport.php:23 mod/attach.php:33
-#: include/items.php:5103 index.php:382
+#: include/items.php:5041 index.php:382
 msgid "Permission denied."
 msgstr ""
 
@@ -86,7 +86,7 @@ msgstr ""
 msgid "Contact has been unarchived"
 msgstr ""
 
-#: mod/contacts.php:443 mod/contacts.php:816
+#: mod/contacts.php:443 mod/contacts.php:817
 msgid "Do you really want to delete this contact?"
 msgstr ""
 
@@ -95,18 +95,18 @@ msgstr ""
 #: mod/settings.php:1109 mod/settings.php:1114 mod/settings.php:1120
 #: mod/settings.php:1126 mod/settings.php:1132 mod/settings.php:1158
 #: mod/settings.php:1159 mod/settings.php:1160 mod/settings.php:1161
-#: mod/settings.php:1162 mod/dfrn_request.php:848 mod/register.php:235
+#: mod/settings.php:1162 mod/dfrn_request.php:850 mod/register.php:238
 #: mod/suggest.php:29 mod/profiles.php:658 mod/profiles.php:661
-#: mod/profiles.php:687 mod/api.php:105 include/items.php:4935
+#: mod/profiles.php:687 mod/api.php:105 include/items.php:4873
 msgid "Yes"
 msgstr ""
 
 #: mod/contacts.php:448 mod/tagrm.php:11 mod/tagrm.php:94 mod/follow.php:116
 #: mod/videos.php:123 mod/message.php:219 mod/fbrowser.php:93
 #: mod/fbrowser.php:128 mod/settings.php:649 mod/settings.php:675
-#: mod/dfrn_request.php:862 mod/suggest.php:32 mod/editpost.php:147
+#: mod/dfrn_request.php:864 mod/suggest.php:32 mod/editpost.php:147
 #: mod/photos.php:239 mod/photos.php:328 include/conversation.php:1221
-#: include/items.php:4938
+#: include/items.php:4876
 msgid "Cancel"
 msgstr ""
 
@@ -133,7 +133,7 @@ msgstr ""
 msgid "Private communications are not available for this contact."
 msgstr ""
 
-#: mod/contacts.php:530 mod/admin.php:643
+#: mod/contacts.php:530 mod/admin.php:645
 msgid "Never"
 msgstr ""
 
@@ -154,7 +154,7 @@ msgstr ""
 msgid "Network type: %s"
 msgstr ""
 
-#: mod/contacts.php:543 include/contact_widgets.php:200
+#: mod/contacts.php:543 include/contact_widgets.php:237
 #, php-format
 msgid "%d contact in common"
 msgid_plural "%d contacts in common"
@@ -165,13 +165,13 @@ msgstr[1] ""
 msgid "View all contacts"
 msgstr ""
 
-#: mod/contacts.php:553 mod/contacts.php:636 mod/contacts.php:820
-#: mod/admin.php:1114
+#: mod/contacts.php:553 mod/contacts.php:636 mod/contacts.php:821
+#: mod/admin.php:1117
 msgid "Unblock"
 msgstr ""
 
-#: mod/contacts.php:553 mod/contacts.php:636 mod/contacts.php:820
-#: mod/admin.php:1113
+#: mod/contacts.php:553 mod/contacts.php:636 mod/contacts.php:821
+#: mod/admin.php:1116
 msgid "Block"
 msgstr ""
 
@@ -179,11 +179,11 @@ msgstr ""
 msgid "Toggle Blocked status"
 msgstr ""
 
-#: mod/contacts.php:561 mod/contacts.php:637 mod/contacts.php:821
+#: mod/contacts.php:561 mod/contacts.php:637 mod/contacts.php:822
 msgid "Unignore"
 msgstr ""
 
-#: mod/contacts.php:561 mod/contacts.php:637 mod/contacts.php:821
+#: mod/contacts.php:561 mod/contacts.php:637 mod/contacts.php:822
 #: mod/notifications.php:54 mod/notifications.php:179 mod/notifications.php:259
 msgid "Ignore"
 msgstr ""
@@ -192,11 +192,11 @@ msgstr ""
 msgid "Toggle Ignored status"
 msgstr ""
 
-#: mod/contacts.php:570 mod/contacts.php:822
+#: mod/contacts.php:570 mod/contacts.php:823
 msgid "Unarchive"
 msgstr ""
 
-#: mod/contacts.php:570 mod/contacts.php:822
+#: mod/contacts.php:570 mod/contacts.php:823
 msgid "Archive"
 msgstr ""
 
@@ -220,7 +220,7 @@ msgstr ""
 msgid "Fetch further information for feeds"
 msgstr ""
 
-#: mod/contacts.php:593 mod/admin.php:652
+#: mod/contacts.php:593 mod/admin.php:654
 msgid "Disabled"
 msgstr ""
 
@@ -236,17 +236,17 @@ msgstr ""
 msgid "Contact Editor"
 msgstr ""
 
-#: mod/contacts.php:608 mod/manage.php:124 mod/fsuggest.php:107
+#: mod/contacts.php:608 mod/manage.php:143 mod/fsuggest.php:107
 #: mod/message.php:342 mod/message.php:525 mod/crepair.php:195
-#: mod/events.php:574 mod/content.php:712 mod/install.php:253
-#: mod/install.php:291 mod/mood.php:137 mod/profiles.php:696
+#: mod/events.php:574 mod/content.php:712 mod/install.php:261
+#: mod/install.php:299 mod/mood.php:137 mod/profiles.php:696
 #: mod/localtime.php:45 mod/poke.php:198 mod/invite.php:140 mod/photos.php:1129
 #: mod/photos.php:1253 mod/photos.php:1571 mod/photos.php:1622
 #: mod/photos.php:1670 mod/photos.php:1758 object/Item.php:710
 #: view/theme/cleanzero/config.php:80 view/theme/dispy/config.php:70
 #: view/theme/quattro/config.php:64 view/theme/diabook/config.php:148
-#: view/theme/diabook/theme.php:633 view/theme/vier/config.php:107
-#: view/theme/duepuntozero/config.php:59
+#: view/theme/diabook/theme.php:633 view/theme/clean/config.php:83
+#: view/theme/vier/config.php:107 view/theme/duepuntozero/config.php:59
 msgid "Submit"
 msgstr ""
 
@@ -269,7 +269,7 @@ msgstr ""
 msgid "Edit contact notes"
 msgstr ""
 
-#: mod/contacts.php:617 mod/contacts.php:860 mod/viewcontacts.php:66
+#: mod/contacts.php:617 mod/contacts.php:861 mod/viewcontacts.php:77
 #: mod/nogroup.php:41
 #, php-format
 msgid "Visit %s's profile [%s]"
@@ -303,13 +303,13 @@ msgstr ""
 msgid "Update public posts"
 msgstr ""
 
-#: mod/contacts.php:631 mod/admin.php:1650
+#: mod/contacts.php:631 mod/admin.php:1653
 msgid "Update now"
 msgstr ""
 
 #: mod/contacts.php:633 mod/dirfind.php:190 mod/allfriends.php:67
 #: mod/match.php:71 mod/suggest.php:82 include/contact_widgets.php:32
-#: include/conversation.php:924
+#: include/Contact.php:321 include/conversation.php:924
 msgid "Connect/Follow"
 msgstr ""
 
@@ -412,46 +412,46 @@ msgstr ""
 msgid "Only show hidden contacts"
 msgstr ""
 
-#: mod/contacts.php:807 include/text.php:1005 include/nav.php:123
+#: mod/contacts.php:808 include/text.php:1012 include/nav.php:123
 #: include/nav.php:187 view/theme/diabook/theme.php:125
 msgid "Contacts"
 msgstr ""
 
-#: mod/contacts.php:811
+#: mod/contacts.php:812
 msgid "Search your contacts"
 msgstr ""
 
-#: mod/contacts.php:812
+#: mod/contacts.php:813
 msgid "Finding: "
 msgstr ""
 
-#: mod/contacts.php:813 mod/directory.php:202 include/contact_widgets.php:34
+#: mod/contacts.php:814 mod/directory.php:202 include/contact_widgets.php:34
 msgid "Find"
 msgstr ""
 
-#: mod/contacts.php:819 mod/settings.php:146 mod/settings.php:674
+#: mod/contacts.php:820 mod/settings.php:146 mod/settings.php:674
 msgid "Update"
 msgstr ""
 
-#: mod/contacts.php:823 mod/group.php:171 mod/admin.php:1112
+#: mod/contacts.php:824 mod/group.php:171 mod/admin.php:1115
 #: mod/content.php:440 mod/content.php:743 mod/settings.php:711
 #: mod/photos.php:1715 object/Item.php:134 include/conversation.php:635
 msgid "Delete"
 msgstr ""
 
-#: mod/contacts.php:836
+#: mod/contacts.php:837
 msgid "Mutual Friendship"
 msgstr ""
 
-#: mod/contacts.php:840
+#: mod/contacts.php:841
 msgid "is a fan of yours"
 msgstr ""
 
-#: mod/contacts.php:844
+#: mod/contacts.php:845
 msgid "you are a fan of"
 msgstr ""
 
-#: mod/contacts.php:861 mod/nogroup.php:42
+#: mod/contacts.php:862 mod/nogroup.php:42
 msgid "Edit contact"
 msgstr ""
 
@@ -459,17 +459,17 @@ msgstr ""
 msgid "No profile"
 msgstr ""
 
-#: mod/manage.php:120
+#: mod/manage.php:139
 msgid "Manage Identities and/or Pages"
 msgstr ""
 
-#: mod/manage.php:121
+#: mod/manage.php:140
 msgid ""
 "Toggle between different identities or community/group pages which share "
 "your account details or which you have been granted \"manage\" permissions"
 msgstr ""
 
-#: mod/manage.php:122
+#: mod/manage.php:141
 msgid "Select an identity to manage: "
 msgstr ""
 
@@ -489,8 +489,8 @@ msgstr ""
 msgid "Profile Visibility Editor"
 msgstr ""
 
-#: mod/profperm.php:104 mod/newmember.php:32 include/identity.php:530
-#: include/identity.php:611 include/identity.php:641 include/nav.php:76
+#: mod/profperm.php:104 mod/newmember.php:32 include/identity.php:542
+#: include/identity.php:628 include/identity.php:658 include/nav.php:76
 #: view/theme/diabook/theme.php:124
 msgid "Profile"
 msgstr ""
@@ -508,13 +508,13 @@ msgid "All Contacts (with secure profile access)"
 msgstr ""
 
 #: mod/display.php:82 mod/display.php:283 mod/display.php:500
-#: mod/viewsrc.php:15 mod/admin.php:196 mod/admin.php:1157 mod/admin.php:1378
-#: mod/notice.php:15 include/items.php:4894
+#: mod/viewsrc.php:15 mod/admin.php:196 mod/admin.php:1160 mod/admin.php:1381
+#: mod/notice.php:15 include/items.php:4832
 msgid "Item not found."
 msgstr ""
 
 #: mod/display.php:211 mod/videos.php:189 mod/viewcontacts.php:19
-#: mod/community.php:18 mod/dfrn_request.php:777 mod/search.php:93
+#: mod/community.php:18 mod/dfrn_request.php:779 mod/search.php:93
 #: mod/search.php:99 mod/directory.php:37 mod/photos.php:968
 msgid "Public access denied."
 msgstr ""
@@ -558,7 +558,7 @@ msgid ""
 "join."
 msgstr ""
 
-#: mod/newmember.php:22 mod/admin.php:1209 mod/admin.php:1454
+#: mod/newmember.php:22 mod/admin.php:1212 mod/admin.php:1457
 #: mod/settings.php:99 include/nav.php:182 view/theme/diabook/theme.php:544
 #: view/theme/diabook/theme.php:648
 msgid "Settings"
@@ -583,7 +583,7 @@ msgid ""
 "potential friends know exactly how to find you."
 msgstr ""
 
-#: mod/newmember.php:36 mod/profile_photo.php:244 mod/profiles.php:709
+#: mod/newmember.php:36 mod/profile_photo.php:250 mod/profiles.php:709
 msgid "Upload Profile Photo"
 msgstr ""
 
@@ -682,7 +682,7 @@ msgid ""
 "hours."
 msgstr ""
 
-#: mod/newmember.php:66 include/group.php:272
+#: mod/newmember.php:66 include/group.php:283
 msgid "Groups"
 msgstr ""
 
@@ -740,86 +740,86 @@ msgid "Image uploaded but image cropping failed."
 msgstr ""
 
 #: mod/profile_photo.php:74 mod/profile_photo.php:81 mod/profile_photo.php:88
-#: mod/profile_photo.php:204 mod/profile_photo.php:296
-#: mod/profile_photo.php:305 mod/photos.php:70 mod/photos.php:184
+#: mod/profile_photo.php:210 mod/profile_photo.php:302
+#: mod/profile_photo.php:311 mod/photos.php:70 mod/photos.php:184
 #: mod/photos.php:767 mod/photos.php:1237 mod/photos.php:1260
-#: mod/photos.php:1854 include/user.php:343 include/user.php:350
-#: include/user.php:357 view/theme/diabook/theme.php:500
+#: mod/photos.php:1854 include/user.php:345 include/user.php:352
+#: include/user.php:359 view/theme/diabook/theme.php:500
 msgid "Profile Photos"
 msgstr ""
 
 #: mod/profile_photo.php:77 mod/profile_photo.php:84 mod/profile_photo.php:91
-#: mod/profile_photo.php:308
+#: mod/profile_photo.php:314
 #, php-format
 msgid "Image size reduction [%s] failed."
 msgstr ""
 
-#: mod/profile_photo.php:118
+#: mod/profile_photo.php:124
 msgid ""
 "Shift-reload the page or clear browser cache if the new photo does not "
 "display immediately."
 msgstr ""
 
-#: mod/profile_photo.php:128
+#: mod/profile_photo.php:134
 msgid "Unable to process image"
 msgstr ""
 
-#: mod/profile_photo.php:144 mod/wall_upload.php:151 mod/photos.php:803
+#: mod/profile_photo.php:150 mod/wall_upload.php:151 mod/photos.php:803
 #, php-format
 msgid "Image exceeds size limit of %s"
 msgstr ""
 
-#: mod/profile_photo.php:153 mod/wall_upload.php:183 mod/photos.php:843
+#: mod/profile_photo.php:159 mod/wall_upload.php:183 mod/photos.php:843
 msgid "Unable to process image."
 msgstr ""
 
-#: mod/profile_photo.php:242
+#: mod/profile_photo.php:248
 msgid "Upload File:"
 msgstr ""
 
-#: mod/profile_photo.php:243
+#: mod/profile_photo.php:249
 msgid "Select a profile:"
 msgstr ""
 
-#: mod/profile_photo.php:245
+#: mod/profile_photo.php:251
 msgid "Upload"
 msgstr ""
 
-#: mod/profile_photo.php:248
+#: mod/profile_photo.php:254
 msgid "or"
 msgstr ""
 
-#: mod/profile_photo.php:248
+#: mod/profile_photo.php:254
 msgid "skip this step"
 msgstr ""
 
-#: mod/profile_photo.php:248
+#: mod/profile_photo.php:254
 msgid "select a photo from your photo albums"
 msgstr ""
 
-#: mod/profile_photo.php:262
+#: mod/profile_photo.php:268
 msgid "Crop Image"
 msgstr ""
 
-#: mod/profile_photo.php:263
+#: mod/profile_photo.php:269
 msgid "Please adjust the image cropping for optimum viewing."
 msgstr ""
 
-#: mod/profile_photo.php:265
+#: mod/profile_photo.php:271
 msgid "Done Editing"
 msgstr ""
 
-#: mod/profile_photo.php:299
+#: mod/profile_photo.php:305
 msgid "Image uploaded successfully."
 msgstr ""
 
-#: mod/profile_photo.php:301 mod/wall_upload.php:216 mod/photos.php:870
+#: mod/profile_photo.php:307 mod/wall_upload.php:216 mod/photos.php:870
 msgid "Image upload failed."
 msgstr ""
 
 #: mod/subthread.php:87 mod/tagger.php:62 mod/like.php:168
 #: include/conversation.php:130 include/conversation.php:266
-#: include/text.php:1988 include/diaspora.php:2140
+#: include/text.php:1995 include/diaspora.php:2140
 #: view/theme/diabook/theme.php:471
 msgid "photo"
 msgstr ""
@@ -897,11 +897,11 @@ msgstr ""
 msgid "- select -"
 msgstr ""
 
-#: mod/filer.php:31 mod/editpost.php:108 mod/notes.php:61 include/text.php:997
+#: mod/filer.php:31 mod/editpost.php:108 mod/notes.php:61 include/text.php:1004
 msgid "Save"
 msgstr ""
 
-#: mod/follow.php:18 mod/dfrn_request.php:861
+#: mod/follow.php:18 mod/dfrn_request.php:863
 msgid "Submit Request"
 msgstr ""
 
@@ -921,11 +921,11 @@ msgstr ""
 msgid "The network type couldn't be detected. Contact can't be added."
 msgstr ""
 
-#: mod/follow.php:104 mod/dfrn_request.php:847
+#: mod/follow.php:104 mod/dfrn_request.php:849
 msgid "Please answer the following:"
 msgstr ""
 
-#: mod/follow.php:105 mod/dfrn_request.php:848
+#: mod/follow.php:105 mod/dfrn_request.php:850
 #, php-format
 msgid "Does %s know you?"
 msgstr ""
@@ -934,32 +934,32 @@ msgstr ""
 #: mod/settings.php:1105 mod/settings.php:1109 mod/settings.php:1114
 #: mod/settings.php:1120 mod/settings.php:1126 mod/settings.php:1132
 #: mod/settings.php:1158 mod/settings.php:1159 mod/settings.php:1160
-#: mod/settings.php:1161 mod/settings.php:1162 mod/dfrn_request.php:848
-#: mod/register.php:236 mod/profiles.php:658 mod/profiles.php:662
+#: mod/settings.php:1161 mod/settings.php:1162 mod/dfrn_request.php:850
+#: mod/register.php:239 mod/profiles.php:658 mod/profiles.php:662
 #: mod/profiles.php:687 mod/api.php:106
 msgid "No"
 msgstr ""
 
-#: mod/follow.php:106 mod/dfrn_request.php:852
+#: mod/follow.php:106 mod/dfrn_request.php:854
 msgid "Add a personal note:"
 msgstr ""
 
-#: mod/follow.php:112 mod/dfrn_request.php:858
+#: mod/follow.php:112 mod/dfrn_request.php:860
 msgid "Your Identity Address:"
 msgstr ""
 
 #: mod/follow.php:125 mod/notifications.php:244 mod/events.php:566
-#: mod/directory.php:139 include/identity.php:268 include/bb2diaspora.php:170
+#: mod/directory.php:139 include/identity.php:278 include/bb2diaspora.php:170
 #: include/event.php:36 include/event.php:60
 msgid "Location:"
 msgstr ""
 
 #: mod/follow.php:127 mod/notifications.php:246 mod/directory.php:147
-#: include/identity.php:277 include/identity.php:582
+#: include/identity.php:287 include/identity.php:594
 msgid "About:"
 msgstr ""
 
-#: mod/follow.php:129 mod/notifications.php:248 include/identity.php:576
+#: mod/follow.php:129 mod/notifications.php:248 include/identity.php:588
 msgid "Tags:"
 msgstr ""
 
@@ -975,34 +975,34 @@ msgstr ""
 msgid "Empty post discarded."
 msgstr ""
 
-#: mod/item.php:461 mod/wall_upload.php:213 mod/wall_upload.php:227
+#: mod/item.php:460 mod/wall_upload.php:213 mod/wall_upload.php:227
 #: mod/wall_upload.php:234 include/Photo.php:954 include/Photo.php:969
 #: include/Photo.php:976 include/Photo.php:998 include/message.php:145
 msgid "Wall Photos"
 msgstr ""
 
-#: mod/item.php:835
+#: mod/item.php:834
 msgid "System error. Post not saved."
 msgstr ""
 
-#: mod/item.php:964
+#: mod/item.php:963
 #, php-format
 msgid ""
 "This message was sent to you by %s, a member of the Friendica social network."
 msgstr ""
 
-#: mod/item.php:966
+#: mod/item.php:965
 #, php-format
 msgid "You may visit them online at %s"
 msgstr ""
 
-#: mod/item.php:967
+#: mod/item.php:966
 msgid ""
 "Please contact the sender by replying to this post if you do not wish to "
 "receive these messages."
 msgstr ""
 
-#: mod/item.php:971
+#: mod/item.php:970
 #, php-format
 msgid "%s posted an update."
 msgstr ""
@@ -1031,7 +1031,7 @@ msgstr ""
 msgid "Create a group of contacts/friends."
 msgstr ""
 
-#: mod/group.php:94 mod/group.php:178 include/group.php:275
+#: mod/group.php:94 mod/group.php:178 include/group.php:289
 msgid "Group Name: "
 msgstr ""
 
@@ -1149,7 +1149,7 @@ msgstr ""
 msgid "Unable to update your contact profile details on our system"
 msgstr ""
 
-#: mod/dfrn_confirm.php:753 mod/dfrn_request.php:732 include/items.php:4313
+#: mod/dfrn_confirm.php:753 mod/dfrn_request.php:734 include/items.php:4244
 msgid "[Name Withheld]"
 msgstr ""
 
@@ -1158,7 +1158,7 @@ msgstr ""
 msgid "%1$s has joined %2$s"
 msgstr ""
 
-#: mod/profile.php:21 include/identity.php:77
+#: mod/profile.php:21 include/identity.php:82
 msgid "Requested profile is not available."
 msgstr ""
 
@@ -1182,7 +1182,7 @@ msgstr ""
 msgid "Access to this item is restricted."
 msgstr ""
 
-#: mod/videos.php:375 include/text.php:1458
+#: mod/videos.php:375 include/text.php:1465
 msgid "View Video"
 msgstr ""
 
@@ -1218,7 +1218,7 @@ msgstr ""
 
 #: mod/wall_upload.php:20 mod/wall_upload.php:33 mod/wall_upload.php:86
 #: mod/wall_upload.php:122 mod/wall_upload.php:125 mod/wall_attach.php:17
-#: mod/wall_attach.php:25 mod/wall_attach.php:76 include/api.php:1702
+#: mod/wall_attach.php:25 mod/wall_attach.php:76 include/api.php:1711
 msgid "Invalid request."
 msgstr ""
 
@@ -1353,7 +1353,7 @@ msgid "Reset"
 msgstr ""
 
 #: mod/like.php:170 include/conversation.php:122 include/conversation.php:258
-#: include/text.php:1986 view/theme/diabook/theme.php:463
+#: include/text.php:1993 view/theme/diabook/theme.php:463
 msgid "event"
 msgstr ""
 
@@ -1383,23 +1383,28 @@ msgstr ""
 msgid "%1$s may attend %2$s's %3$s"
 msgstr ""
 
-#: mod/ping.php:257
+#: mod/ping.php:273
 msgid "{0} wants to be your friend"
 msgstr ""
 
-#: mod/ping.php:272
+#: mod/ping.php:288
 msgid "{0} sent you a message"
 msgstr ""
 
-#: mod/ping.php:287
+#: mod/ping.php:303
 msgid "{0} requested registration"
 msgstr ""
 
-#: mod/viewcontacts.php:41
+#: mod/viewcontacts.php:52
 msgid "No contacts."
 msgstr ""
 
-#: mod/viewcontacts.php:83 include/text.php:917
+#: mod/viewcontacts.php:85 mod/dirfind.php:208 mod/network.php:596
+#: mod/allfriends.php:79 mod/match.php:82 mod/common.php:122 mod/suggest.php:95
+msgid "Forum"
+msgstr ""
+
+#: mod/viewcontacts.php:96 include/text.php:921
 msgid "View Contacts"
 msgstr ""
 
@@ -1419,7 +1424,7 @@ msgstr ""
 msgid "Network"
 msgstr ""
 
-#: mod/notifications.php:93 mod/network.php:385
+#: mod/notifications.php:93 mod/network.php:381
 msgid "Personal"
 msgstr ""
 
@@ -1461,7 +1466,7 @@ msgstr ""
 msgid "if applicable"
 msgstr ""
 
-#: mod/notifications.php:176 mod/notifications.php:257 mod/admin.php:1110
+#: mod/notifications.php:176 mod/notifications.php:257 mod/admin.php:1113
 msgid "Approve"
 msgstr ""
 
@@ -1511,8 +1516,8 @@ msgstr ""
 msgid "New Follower"
 msgstr ""
 
-#: mod/notifications.php:250 mod/directory.php:141 include/identity.php:270
-#: include/identity.php:541
+#: mod/notifications.php:250 mod/directory.php:141 include/identity.php:280
+#: include/identity.php:553
 msgid "Gender:"
 msgstr ""
 
@@ -1822,8 +1827,8 @@ msgstr ""
 msgid "Refetch contact data"
 msgstr ""
 
-#: mod/crepair.php:169 mod/admin.php:1108 mod/admin.php:1120 mod/admin.php:1121
-#: mod/admin.php:1134 mod/settings.php:650 mod/settings.php:676
+#: mod/crepair.php:169 mod/admin.php:1111 mod/admin.php:1123 mod/admin.php:1124
+#: mod/admin.php:1137 mod/settings.php:650 mod/settings.php:676
 msgid "Name"
 msgstr ""
 
@@ -1885,27 +1890,28 @@ msgstr ""
 msgid "Access denied."
 msgstr ""
 
-#: mod/dirfind.php:188 mod/allfriends.php:82 mod/match.php:84
-#: mod/suggest.php:97 include/contact_widgets.php:10 include/identity.php:188
+#: mod/dirfind.php:188 mod/allfriends.php:82 mod/match.php:85
+#: mod/suggest.php:98 include/contact_widgets.php:10 include/identity.php:193
 msgid "Connect"
 msgstr ""
 
 #: mod/dirfind.php:189 mod/allfriends.php:66 mod/match.php:70
-#: mod/directory.php:156 mod/suggest.php:81 include/Contact.php:335
-#: include/conversation.php:912 include/conversation.php:926
+#: mod/directory.php:156 mod/suggest.php:81 include/Contact.php:307
+#: include/Contact.php:320 include/Contact.php:362 include/conversation.php:912
+#: include/conversation.php:926
 msgid "View Profile"
 msgstr ""
 
-#: mod/dirfind.php:217
+#: mod/dirfind.php:218
 #, php-format
 msgid "People Search - %s"
 msgstr ""
 
-#: mod/dirfind.php:224 mod/match.php:104
+#: mod/dirfind.php:225 mod/match.php:105
 msgid "No matches"
 msgstr ""
 
-#: mod/fbrowser.php:32 include/identity.php:649 include/nav.php:77
+#: mod/fbrowser.php:32 include/identity.php:666 include/nav.php:77
 #: view/theme/diabook/theme.php:126
 msgid "Photos"
 msgstr ""
@@ -1928,19 +1934,19 @@ msgstr ""
 msgid "Theme settings updated."
 msgstr ""
 
-#: mod/admin.php:127 mod/admin.php:709
+#: mod/admin.php:127 mod/admin.php:711
 msgid "Site"
 msgstr ""
 
-#: mod/admin.php:128 mod/admin.php:653 mod/admin.php:1103 mod/admin.php:1118
+#: mod/admin.php:128 mod/admin.php:655 mod/admin.php:1106 mod/admin.php:1121
 msgid "Users"
 msgstr ""
 
-#: mod/admin.php:129 mod/admin.php:1207 mod/admin.php:1267 mod/settings.php:66
+#: mod/admin.php:129 mod/admin.php:1210 mod/admin.php:1270 mod/settings.php:66
 msgid "Plugins"
 msgstr ""
 
-#: mod/admin.php:130 mod/admin.php:1452 mod/admin.php:1503
+#: mod/admin.php:130 mod/admin.php:1455 mod/admin.php:1506
 msgid "Themes"
 msgstr ""
 
@@ -1952,7 +1958,7 @@ msgstr ""
 msgid "Inspect Queue"
 msgstr ""
 
-#: mod/admin.php:147 mod/admin.php:156 mod/admin.php:1591
+#: mod/admin.php:147 mod/admin.php:156 mod/admin.php:1594
 msgid "Logs"
 msgstr ""
 
@@ -1980,9 +1986,9 @@ msgstr ""
 msgid "User registrations waiting for confirmation"
 msgstr ""
 
-#: mod/admin.php:222 mod/admin.php:272 mod/admin.php:708 mod/admin.php:1102
-#: mod/admin.php:1206 mod/admin.php:1266 mod/admin.php:1451 mod/admin.php:1502
-#: mod/admin.php:1590
+#: mod/admin.php:222 mod/admin.php:272 mod/admin.php:710 mod/admin.php:1105
+#: mod/admin.php:1209 mod/admin.php:1269 mod/admin.php:1454 mod/admin.php:1505
+#: mod/admin.php:1593
 msgid "Administration"
 msgstr ""
 
@@ -2013,19 +2019,19 @@ msgid ""
 "eventually deleted if the delivery fails permanently."
 msgstr ""
 
-#: mod/admin.php:243 mod/admin.php:1056
+#: mod/admin.php:243 mod/admin.php:1059
 msgid "Normal Account"
 msgstr ""
 
-#: mod/admin.php:244 mod/admin.php:1057
+#: mod/admin.php:244 mod/admin.php:1060
 msgid "Soapbox Account"
 msgstr ""
 
-#: mod/admin.php:245 mod/admin.php:1058
+#: mod/admin.php:245 mod/admin.php:1061
 msgid "Community/Celebrity Account"
 msgstr ""
 
-#: mod/admin.php:246 mod/admin.php:1059
+#: mod/admin.php:246 mod/admin.php:1062
 msgid "Automatic Friend Account"
 msgstr ""
 
@@ -2065,615 +2071,625 @@ msgstr ""
 msgid "Can not parse base url. Must have at least <scheme>://<domain>"
 msgstr ""
 
-#: mod/admin.php:585
+#: mod/admin.php:587
 msgid "RINO2 needs mcrypt php extension to work."
 msgstr ""
 
-#: mod/admin.php:593
+#: mod/admin.php:595
 msgid "Site settings updated."
 msgstr ""
 
-#: mod/admin.php:617 mod/settings.php:901
+#: mod/admin.php:619 mod/settings.php:901
 msgid "No special theme for mobile devices"
 msgstr ""
 
-#: mod/admin.php:636
+#: mod/admin.php:638
 msgid "No community page"
 msgstr ""
 
-#: mod/admin.php:637
+#: mod/admin.php:639
 msgid "Public postings from users of this site"
 msgstr ""
 
-#: mod/admin.php:638
+#: mod/admin.php:640
 msgid "Global community page"
 msgstr ""
 
-#: mod/admin.php:644
+#: mod/admin.php:646
 msgid "At post arrival"
 msgstr ""
 
-#: mod/admin.php:645 include/contact_selectors.php:56
+#: mod/admin.php:647 include/contact_selectors.php:56
 msgid "Frequently"
 msgstr ""
 
-#: mod/admin.php:646 include/contact_selectors.php:57
+#: mod/admin.php:648 include/contact_selectors.php:57
 msgid "Hourly"
 msgstr ""
 
-#: mod/admin.php:647 include/contact_selectors.php:58
+#: mod/admin.php:649 include/contact_selectors.php:58
 msgid "Twice daily"
 msgstr ""
 
-#: mod/admin.php:648 include/contact_selectors.php:59
+#: mod/admin.php:650 include/contact_selectors.php:59
 msgid "Daily"
 msgstr ""
 
-#: mod/admin.php:654
+#: mod/admin.php:656
 msgid "Users, Global Contacts"
 msgstr ""
 
-#: mod/admin.php:655
+#: mod/admin.php:657
 msgid "Users, Global Contacts/fallback"
 msgstr ""
 
-#: mod/admin.php:659
+#: mod/admin.php:661
 msgid "One month"
 msgstr ""
 
-#: mod/admin.php:660
+#: mod/admin.php:662
 msgid "Three months"
 msgstr ""
 
-#: mod/admin.php:661
+#: mod/admin.php:663
 msgid "Half a year"
 msgstr ""
 
-#: mod/admin.php:662
+#: mod/admin.php:664
 msgid "One year"
 msgstr ""
 
-#: mod/admin.php:667
+#: mod/admin.php:669
 msgid "Multi user instance"
 msgstr ""
 
-#: mod/admin.php:690
+#: mod/admin.php:692
 msgid "Closed"
 msgstr ""
 
-#: mod/admin.php:691
+#: mod/admin.php:693
 msgid "Requires approval"
 msgstr ""
 
-#: mod/admin.php:692
+#: mod/admin.php:694
 msgid "Open"
 msgstr ""
 
-#: mod/admin.php:696
+#: mod/admin.php:698
 msgid "No SSL policy, links will track page SSL state"
 msgstr ""
 
-#: mod/admin.php:697
+#: mod/admin.php:699
 msgid "Force all links to use SSL"
 msgstr ""
 
-#: mod/admin.php:698
+#: mod/admin.php:700
 msgid "Self-signed certificate, use SSL for local links only (discouraged)"
 msgstr ""
 
-#: mod/admin.php:710 mod/admin.php:1268 mod/admin.php:1504 mod/admin.php:1592
+#: mod/admin.php:712 mod/admin.php:1271 mod/admin.php:1507 mod/admin.php:1595
 #: mod/settings.php:648 mod/settings.php:758 mod/settings.php:802
 #: mod/settings.php:871 mod/settings.php:957 mod/settings.php:1192
 msgid "Save Settings"
 msgstr ""
 
-#: mod/admin.php:711 mod/register.php:260
+#: mod/admin.php:713 mod/register.php:263
 msgid "Registration"
 msgstr ""
 
-#: mod/admin.php:712
+#: mod/admin.php:714
 msgid "File upload"
 msgstr ""
 
-#: mod/admin.php:713
+#: mod/admin.php:715
 msgid "Policies"
 msgstr ""
 
-#: mod/admin.php:714
+#: mod/admin.php:716
 msgid "Advanced"
 msgstr ""
 
-#: mod/admin.php:715
+#: mod/admin.php:717
 msgid "Auto Discovered Contact Directory"
 msgstr ""
 
-#: mod/admin.php:716
+#: mod/admin.php:718
 msgid "Performance"
 msgstr ""
 
-#: mod/admin.php:717
+#: mod/admin.php:719
 msgid ""
 "Relocate - WARNING: advanced function. Could make this server unreachable."
 msgstr ""
 
-#: mod/admin.php:720
+#: mod/admin.php:722
 msgid "Site name"
 msgstr ""
 
-#: mod/admin.php:721
+#: mod/admin.php:723
 msgid "Host name"
 msgstr ""
 
-#: mod/admin.php:722
+#: mod/admin.php:724
 msgid "Sender Email"
 msgstr ""
 
-#: mod/admin.php:722
+#: mod/admin.php:724
 msgid ""
 "The email address your server shall use to send notification emails from."
 msgstr ""
 
-#: mod/admin.php:723
+#: mod/admin.php:725
 msgid "Banner/Logo"
 msgstr ""
 
-#: mod/admin.php:724
+#: mod/admin.php:726
 msgid "Shortcut icon"
 msgstr ""
 
-#: mod/admin.php:724
+#: mod/admin.php:726
 msgid "Link to an icon that will be used for browsers."
 msgstr ""
 
-#: mod/admin.php:725
+#: mod/admin.php:727
 msgid "Touch icon"
 msgstr ""
 
-#: mod/admin.php:725
+#: mod/admin.php:727
 msgid "Link to an icon that will be used for tablets and mobiles."
 msgstr ""
 
-#: mod/admin.php:726
+#: mod/admin.php:728
 msgid "Additional Info"
 msgstr ""
 
-#: mod/admin.php:726
+#: mod/admin.php:728
 #, php-format
 msgid ""
 "For public servers: you can add additional information here that will be "
 "listed at %s/siteinfo."
 msgstr ""
 
-#: mod/admin.php:727
+#: mod/admin.php:729
 msgid "System language"
 msgstr ""
 
-#: mod/admin.php:728
+#: mod/admin.php:730
 msgid "System theme"
 msgstr ""
 
-#: mod/admin.php:728
+#: mod/admin.php:730
 msgid ""
 "Default system theme - may be over-ridden by user profiles - <a href='#' "
 "id='cnftheme'>change theme settings</a>"
 msgstr ""
 
-#: mod/admin.php:729
+#: mod/admin.php:731
 msgid "Mobile system theme"
 msgstr ""
 
-#: mod/admin.php:729
+#: mod/admin.php:731
 msgid "Theme for mobile devices"
 msgstr ""
 
-#: mod/admin.php:730
+#: mod/admin.php:732
 msgid "SSL link policy"
 msgstr ""
 
-#: mod/admin.php:730
+#: mod/admin.php:732
 msgid "Determines whether generated links should be forced to use SSL"
 msgstr ""
 
-#: mod/admin.php:731
+#: mod/admin.php:733
 msgid "Force SSL"
 msgstr ""
 
-#: mod/admin.php:731
+#: mod/admin.php:733
 msgid ""
 "Force all Non-SSL requests to SSL - Attention: on some systems it could lead "
 "to endless loops."
 msgstr ""
 
-#: mod/admin.php:732
+#: mod/admin.php:734
 msgid "Old style 'Share'"
 msgstr ""
 
-#: mod/admin.php:732
+#: mod/admin.php:734
 msgid "Deactivates the bbcode element 'share' for repeating items."
 msgstr ""
 
-#: mod/admin.php:733
+#: mod/admin.php:735
 msgid "Hide help entry from navigation menu"
 msgstr ""
 
-#: mod/admin.php:733
+#: mod/admin.php:735
 msgid ""
 "Hides the menu entry for the Help pages from the navigation menu. You can "
 "still access it calling /help directly."
 msgstr ""
 
-#: mod/admin.php:734
+#: mod/admin.php:736
 msgid "Single user instance"
 msgstr ""
 
-#: mod/admin.php:734
+#: mod/admin.php:736
 msgid "Make this instance multi-user or single-user for the named user"
 msgstr ""
 
-#: mod/admin.php:735
+#: mod/admin.php:737
 msgid "Maximum image size"
 msgstr ""
 
-#: mod/admin.php:735
+#: mod/admin.php:737
 msgid ""
 "Maximum size in bytes of uploaded images. Default is 0, which means no "
 "limits."
 msgstr ""
 
-#: mod/admin.php:736
+#: mod/admin.php:738
 msgid "Maximum image length"
 msgstr ""
 
-#: mod/admin.php:736
+#: mod/admin.php:738
 msgid ""
 "Maximum length in pixels of the longest side of uploaded images. Default is "
 "-1, which means no limits."
 msgstr ""
 
-#: mod/admin.php:737
+#: mod/admin.php:739
 msgid "JPEG image quality"
 msgstr ""
 
-#: mod/admin.php:737
+#: mod/admin.php:739
 msgid ""
 "Uploaded JPEGS will be saved at this quality setting [0-100]. Default is "
 "100, which is full quality."
 msgstr ""
 
-#: mod/admin.php:739
+#: mod/admin.php:741
 msgid "Register policy"
 msgstr ""
 
-#: mod/admin.php:740
+#: mod/admin.php:742
 msgid "Maximum Daily Registrations"
 msgstr ""
 
-#: mod/admin.php:740
+#: mod/admin.php:742
 msgid ""
 "If registration is permitted above, this sets the maximum number of new user "
 "registrations to accept per day.  If register is set to closed, this setting "
 "has no effect."
 msgstr ""
 
-#: mod/admin.php:741
+#: mod/admin.php:743
 msgid "Register text"
 msgstr ""
 
-#: mod/admin.php:741
+#: mod/admin.php:743
 msgid "Will be displayed prominently on the registration page."
 msgstr ""
 
-#: mod/admin.php:742
+#: mod/admin.php:744
 msgid "Accounts abandoned after x days"
 msgstr ""
 
-#: mod/admin.php:742
+#: mod/admin.php:744
 msgid ""
 "Will not waste system resources polling external sites for abandonded "
 "accounts. Enter 0 for no time limit."
 msgstr ""
 
-#: mod/admin.php:743
+#: mod/admin.php:745
 msgid "Allowed friend domains"
 msgstr ""
 
-#: mod/admin.php:743
+#: mod/admin.php:745
 msgid ""
 "Comma separated list of domains which are allowed to establish friendships "
 "with this site. Wildcards are accepted. Empty to allow any domains"
 msgstr ""
 
-#: mod/admin.php:744
+#: mod/admin.php:746
 msgid "Allowed email domains"
 msgstr ""
 
-#: mod/admin.php:744
+#: mod/admin.php:746
 msgid ""
 "Comma separated list of domains which are allowed in email addresses for "
 "registrations to this site. Wildcards are accepted. Empty to allow any "
 "domains"
 msgstr ""
 
-#: mod/admin.php:745
+#: mod/admin.php:747
 msgid "Block public"
 msgstr ""
 
-#: mod/admin.php:745
+#: mod/admin.php:747
 msgid ""
 "Check to block public access to all otherwise public personal pages on this "
 "site unless you are currently logged in."
 msgstr ""
 
-#: mod/admin.php:746
+#: mod/admin.php:748
 msgid "Force publish"
 msgstr ""
 
-#: mod/admin.php:746
+#: mod/admin.php:748
 msgid ""
 "Check to force all profiles on this site to be listed in the site directory."
 msgstr ""
 
-#: mod/admin.php:747
+#: mod/admin.php:749
 msgid "Global directory URL"
 msgstr ""
 
-#: mod/admin.php:747
+#: mod/admin.php:749
 msgid ""
 "URL to the global directory. If this is not set, the global directory is "
 "completely unavailable to the application."
 msgstr ""
 
-#: mod/admin.php:748
+#: mod/admin.php:750
 msgid "Allow threaded items"
 msgstr ""
 
-#: mod/admin.php:748
+#: mod/admin.php:750
 msgid "Allow infinite level threading for items on this site."
 msgstr ""
 
-#: mod/admin.php:749
+#: mod/admin.php:751
 msgid "Private posts by default for new users"
 msgstr ""
 
-#: mod/admin.php:749
+#: mod/admin.php:751
 msgid ""
 "Set default post permissions for all new members to the default privacy "
 "group rather than public."
 msgstr ""
 
-#: mod/admin.php:750
+#: mod/admin.php:752
 msgid "Don't include post content in email notifications"
 msgstr ""
 
-#: mod/admin.php:750
+#: mod/admin.php:752
 msgid ""
 "Don't include the content of a post/comment/private message/etc. in the "
 "email notifications that are sent out from this site, as a privacy measure."
 msgstr ""
 
-#: mod/admin.php:751
+#: mod/admin.php:753
 msgid "Disallow public access to addons listed in the apps menu."
 msgstr ""
 
-#: mod/admin.php:751
+#: mod/admin.php:753
 msgid ""
 "Checking this box will restrict addons listed in the apps menu to members "
 "only."
 msgstr ""
 
-#: mod/admin.php:752
+#: mod/admin.php:754
 msgid "Don't embed private images in posts"
 msgstr ""
 
-#: mod/admin.php:752
+#: mod/admin.php:754
 msgid ""
 "Don't replace locally-hosted private photos in posts with an embedded copy "
 "of the image. This means that contacts who receive posts containing private "
 "photos will have to authenticate and load each image, which may take a while."
 msgstr ""
 
-#: mod/admin.php:753
+#: mod/admin.php:755
 msgid "Allow Users to set remote_self"
 msgstr ""
 
-#: mod/admin.php:753
+#: mod/admin.php:755
 msgid ""
 "With checking this, every user is allowed to mark every contact as a "
 "remote_self in the repair contact dialog. Setting this flag on a contact "
 "causes mirroring every posting of that contact in the users stream."
 msgstr ""
 
-#: mod/admin.php:754
+#: mod/admin.php:756
 msgid "Block multiple registrations"
 msgstr ""
 
-#: mod/admin.php:754
+#: mod/admin.php:756
 msgid "Disallow users to register additional accounts for use as pages."
 msgstr ""
 
-#: mod/admin.php:755
+#: mod/admin.php:757
 msgid "OpenID support"
 msgstr ""
 
-#: mod/admin.php:755
+#: mod/admin.php:757
 msgid "OpenID support for registration and logins."
 msgstr ""
 
-#: mod/admin.php:756
+#: mod/admin.php:758
 msgid "Fullname check"
 msgstr ""
 
-#: mod/admin.php:756
+#: mod/admin.php:758
 msgid ""
 "Force users to register with a space between firstname and lastname in Full "
 "name, as an antispam measure"
 msgstr ""
 
-#: mod/admin.php:757
+#: mod/admin.php:759
 msgid "UTF-8 Regular expressions"
 msgstr ""
 
-#: mod/admin.php:757
+#: mod/admin.php:759
 msgid "Use PHP UTF8 regular expressions"
 msgstr ""
 
-#: mod/admin.php:758
+#: mod/admin.php:760
 msgid "Community Page Style"
 msgstr ""
 
-#: mod/admin.php:758
+#: mod/admin.php:760
 msgid ""
 "Type of community page to show. 'Global community' shows every public "
 "posting from an open distributed network that arrived on this server."
 msgstr ""
 
-#: mod/admin.php:759
+#: mod/admin.php:761
 msgid "Posts per user on community page"
 msgstr ""
 
-#: mod/admin.php:759
+#: mod/admin.php:761
 msgid ""
 "The maximum number of posts per user on the community page. (Not valid for "
 "'Global Community')"
 msgstr ""
 
-#: mod/admin.php:760
+#: mod/admin.php:762
 msgid "Enable OStatus support"
 msgstr ""
 
-#: mod/admin.php:760
+#: mod/admin.php:762
 msgid ""
 "Provide built-in OStatus (StatusNet, GNU Social etc.) compatibility. All "
 "communications in OStatus are public, so privacy warnings will be "
 "occasionally displayed."
 msgstr ""
 
-#: mod/admin.php:761
+#: mod/admin.php:763
 msgid "OStatus conversation completion interval"
 msgstr ""
 
-#: mod/admin.php:761
+#: mod/admin.php:763
 msgid ""
 "How often shall the poller check for new entries in OStatus conversations? "
 "This can be a very ressource task."
 msgstr ""
 
-#: mod/admin.php:762
+#: mod/admin.php:764
 msgid "OStatus support can only be enabled if threading is enabled."
 msgstr ""
 
-#: mod/admin.php:764
+#: mod/admin.php:766
 msgid ""
 "Diaspora support can't be enabled because Friendica was installed into a sub "
 "directory."
 msgstr ""
 
-#: mod/admin.php:765
+#: mod/admin.php:767
 msgid "Enable Diaspora support"
 msgstr ""
 
-#: mod/admin.php:765
+#: mod/admin.php:767
 msgid "Provide built-in Diaspora network compatibility."
 msgstr ""
 
-#: mod/admin.php:766
+#: mod/admin.php:768
 msgid "Only allow Friendica contacts"
 msgstr ""
 
-#: mod/admin.php:766
+#: mod/admin.php:768
 msgid ""
 "All contacts must use Friendica protocols. All other built-in communication "
 "protocols disabled."
 msgstr ""
 
-#: mod/admin.php:767
+#: mod/admin.php:769
 msgid "Verify SSL"
 msgstr ""
 
-#: mod/admin.php:767
+#: mod/admin.php:769
 msgid ""
 "If you wish, you can turn on strict certificate checking. This will mean you "
 "cannot connect (at all) to self-signed SSL sites."
 msgstr ""
 
-#: mod/admin.php:768
+#: mod/admin.php:770
 msgid "Proxy user"
 msgstr ""
 
-#: mod/admin.php:769
+#: mod/admin.php:771
 msgid "Proxy URL"
 msgstr ""
 
-#: mod/admin.php:770
+#: mod/admin.php:772
 msgid "Network timeout"
 msgstr ""
 
-#: mod/admin.php:770
+#: mod/admin.php:772
 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
 msgstr ""
 
-#: mod/admin.php:771
+#: mod/admin.php:773
 msgid "Delivery interval"
 msgstr ""
 
-#: mod/admin.php:771
+#: mod/admin.php:773
 msgid ""
 "Delay background delivery processes by this many seconds to reduce system "
 "load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
 "for large dedicated servers."
 msgstr ""
 
-#: mod/admin.php:772
+#: mod/admin.php:774
 msgid "Poll interval"
 msgstr ""
 
-#: mod/admin.php:772
+#: mod/admin.php:774
 msgid ""
 "Delay background polling processes by this many seconds to reduce system "
 "load. If 0, use delivery interval."
 msgstr ""
 
-#: mod/admin.php:773
+#: mod/admin.php:775
 msgid "Maximum Load Average"
 msgstr ""
 
-#: mod/admin.php:773
+#: mod/admin.php:775
 msgid ""
 "Maximum system load before delivery and poll processes are deferred - "
 "default 50."
 msgstr ""
 
-#: mod/admin.php:774
+#: mod/admin.php:776
 msgid "Maximum Load Average (Frontend)"
 msgstr ""
 
-#: mod/admin.php:774
+#: mod/admin.php:776
 msgid "Maximum system load before the frontend quits service - default 50."
 msgstr ""
 
-#: mod/admin.php:776
+#: mod/admin.php:777
+msgid "Maximum table size for optimization"
+msgstr ""
+
+#: mod/admin.php:777
+msgid ""
+"Maximum table size (in MB) for the automatic optimization - default 100 MB. "
+"Enter -1 to disable it."
+msgstr ""
+
+#: mod/admin.php:779
 msgid "Periodical check of global contacts"
 msgstr ""
 
-#: mod/admin.php:776
+#: mod/admin.php:779
 msgid ""
 "If enabled, the global contacts are checked periodically for missing or "
 "outdated data and the vitality of the contacts and servers."
 msgstr ""
 
-#: mod/admin.php:777
+#: mod/admin.php:780
 msgid "Days between requery"
 msgstr ""
 
-#: mod/admin.php:777
+#: mod/admin.php:780
 msgid "Number of days after which a server is requeried for his contacts."
 msgstr ""
 
-#: mod/admin.php:778
+#: mod/admin.php:781
 msgid "Discover contacts from other servers"
 msgstr ""
 
-#: mod/admin.php:778
+#: mod/admin.php:781
 msgid ""
 "Periodically query other servers for contacts. You can choose between "
 "'users': the users on the remote system, 'Global Contacts': active contacts "
@@ -2683,32 +2699,32 @@ msgid ""
 "Global Contacts'."
 msgstr ""
 
-#: mod/admin.php:779
+#: mod/admin.php:782
 msgid "Timeframe for fetching global contacts"
 msgstr ""
 
-#: mod/admin.php:779
+#: mod/admin.php:782
 msgid ""
 "When the discovery is activated, this value defines the timeframe for the "
 "activity of the global contacts that are fetched from other servers."
 msgstr ""
 
-#: mod/admin.php:780
+#: mod/admin.php:783
 msgid "Search the local directory"
 msgstr ""
 
-#: mod/admin.php:780
+#: mod/admin.php:783
 msgid ""
 "Search the local directory instead of the global directory. When searching "
 "locally, every search will be executed on the global directory in the "
 "background. This improves the search results when the search is repeated."
 msgstr ""
 
-#: mod/admin.php:782
+#: mod/admin.php:785
 msgid "Publish server information"
 msgstr ""
 
-#: mod/admin.php:782
+#: mod/admin.php:785
 msgid ""
 "If enabled, general server and usage data will be published. The data "
 "contains the name and version of the server, number of users with public "
@@ -2716,204 +2732,204 @@ msgid ""
 "href='http://the-federation.info/'>the-federation.info</a> for details."
 msgstr ""
 
-#: mod/admin.php:784
+#: mod/admin.php:787
 msgid "Use MySQL full text engine"
 msgstr ""
 
-#: mod/admin.php:784
+#: mod/admin.php:787
 msgid ""
 "Activates the full text engine. Speeds up search - but can only search for "
 "four and more characters."
 msgstr ""
 
-#: mod/admin.php:785
+#: mod/admin.php:788
 msgid "Suppress Language"
 msgstr ""
 
-#: mod/admin.php:785
+#: mod/admin.php:788
 msgid "Suppress language information in meta information about a posting."
 msgstr ""
 
-#: mod/admin.php:786
+#: mod/admin.php:789
 msgid "Suppress Tags"
 msgstr ""
 
-#: mod/admin.php:786
+#: mod/admin.php:789
 msgid "Suppress showing a list of hashtags at the end of the posting."
 msgstr ""
 
-#: mod/admin.php:787
+#: mod/admin.php:790
 msgid "Path to item cache"
 msgstr ""
 
-#: mod/admin.php:787
+#: mod/admin.php:790
 msgid "The item caches buffers generated bbcode and external images."
 msgstr ""
 
-#: mod/admin.php:788
+#: mod/admin.php:791
 msgid "Cache duration in seconds"
 msgstr ""
 
-#: mod/admin.php:788
+#: mod/admin.php:791
 msgid ""
 "How long should the cache files be hold? Default value is 86400 seconds (One "
 "day). To disable the item cache, set the value to -1."
 msgstr ""
 
-#: mod/admin.php:789
+#: mod/admin.php:792
 msgid "Maximum numbers of comments per post"
 msgstr ""
 
-#: mod/admin.php:789
+#: mod/admin.php:792
 msgid "How much comments should be shown for each post? Default value is 100."
 msgstr ""
 
-#: mod/admin.php:790
+#: mod/admin.php:793
 msgid "Path for lock file"
 msgstr ""
 
-#: mod/admin.php:790
+#: mod/admin.php:793
 msgid ""
 "The lock file is used to avoid multiple pollers at one time. Only define a "
 "folder here."
 msgstr ""
 
-#: mod/admin.php:791
+#: mod/admin.php:794
 msgid "Temp path"
 msgstr ""
 
-#: mod/admin.php:791
+#: mod/admin.php:794
 msgid ""
 "If you have a restricted system where the webserver can't access the system "
 "temp path, enter another path here."
 msgstr ""
 
-#: mod/admin.php:792
+#: mod/admin.php:795
 msgid "Base path to installation"
 msgstr ""
 
-#: mod/admin.php:792
+#: mod/admin.php:795
 msgid ""
 "If the system cannot detect the correct path to your installation, enter the "
 "correct path here. This setting should only be set if you are using a "
 "restricted system and symbolic links to your webroot."
 msgstr ""
 
-#: mod/admin.php:793
+#: mod/admin.php:796
 msgid "Disable picture proxy"
 msgstr ""
 
-#: mod/admin.php:793
+#: mod/admin.php:796
 msgid ""
 "The picture proxy increases performance and privacy. It shouldn't be used on "
 "systems with very low bandwith."
 msgstr ""
 
-#: mod/admin.php:794
+#: mod/admin.php:797
 msgid "Enable old style pager"
 msgstr ""
 
-#: mod/admin.php:794
+#: mod/admin.php:797
 msgid ""
 "The old style pager has page numbers but slows down massively the page speed."
 msgstr ""
 
-#: mod/admin.php:795
+#: mod/admin.php:798
 msgid "Only search in tags"
 msgstr ""
 
-#: mod/admin.php:795
+#: mod/admin.php:798
 msgid "On large systems the text search can slow down the system extremely."
 msgstr ""
 
-#: mod/admin.php:797
+#: mod/admin.php:800
 msgid "New base url"
 msgstr ""
 
-#: mod/admin.php:797
+#: mod/admin.php:800
 msgid ""
 "Change base url for this server. Sends relocate message to all DFRN contacts "
 "of all users."
 msgstr ""
 
-#: mod/admin.php:799
+#: mod/admin.php:802
 msgid "RINO Encryption"
 msgstr ""
 
-#: mod/admin.php:799
+#: mod/admin.php:802
 msgid "Encryption layer between nodes."
 msgstr ""
 
-#: mod/admin.php:800
+#: mod/admin.php:803
 msgid "Embedly API key"
 msgstr ""
 
-#: mod/admin.php:800
+#: mod/admin.php:803
 msgid ""
 "<a href='http://embed.ly'>Embedly</a> is used to fetch additional data for "
 "web pages. This is an optional parameter."
 msgstr ""
 
-#: mod/admin.php:818
+#: mod/admin.php:821
 msgid "Update has been marked successful"
 msgstr ""
 
-#: mod/admin.php:826
+#: mod/admin.php:829
 #, php-format
 msgid "Database structure update %s was successfully applied."
 msgstr ""
 
-#: mod/admin.php:829
+#: mod/admin.php:832
 #, php-format
 msgid "Executing of database structure update %s failed with error: %s"
 msgstr ""
 
-#: mod/admin.php:841
+#: mod/admin.php:844
 #, php-format
 msgid "Executing %s failed with error: %s"
 msgstr ""
 
-#: mod/admin.php:844
+#: mod/admin.php:847
 #, php-format
 msgid "Update %s was successfully applied."
 msgstr ""
 
-#: mod/admin.php:848
+#: mod/admin.php:851
 #, php-format
 msgid "Update %s did not return a status. Unknown if it succeeded."
 msgstr ""
 
-#: mod/admin.php:850
+#: mod/admin.php:853
 #, php-format
 msgid "There was no additional update function %s that needed to be called."
 msgstr ""
 
-#: mod/admin.php:869
+#: mod/admin.php:872
 msgid "No failed updates."
 msgstr ""
 
-#: mod/admin.php:870
+#: mod/admin.php:873
 msgid "Check database structure"
 msgstr ""
 
-#: mod/admin.php:875
+#: mod/admin.php:878
 msgid "Failed Updates"
 msgstr ""
 
-#: mod/admin.php:876
+#: mod/admin.php:879
 msgid ""
 "This does not include updates prior to 1139, which did not return a status."
 msgstr ""
 
-#: mod/admin.php:877
+#: mod/admin.php:880
 msgid "Mark success (if update was manually applied)"
 msgstr ""
 
-#: mod/admin.php:878
+#: mod/admin.php:881
 msgid "Attempt to execute this update step automatically"
 msgstr ""
 
-#: mod/admin.php:910
+#: mod/admin.php:913
 #, php-format
 msgid ""
 "\n"
@@ -2921,7 +2937,7 @@ msgid ""
 "\t\t\t\tthe administrator of %2$s has set up an account for you."
 msgstr ""
 
-#: mod/admin.php:913
+#: mod/admin.php:916
 #, php-format
 msgid ""
 "\n"
@@ -2957,295 +2973,295 @@ msgid ""
 "\t\t\tThank you and welcome to %4$s."
 msgstr ""
 
-#: mod/admin.php:945 include/user.php:421
+#: mod/admin.php:948 include/user.php:423
 #, php-format
 msgid "Registration details for %s"
 msgstr ""
 
-#: mod/admin.php:957
+#: mod/admin.php:960
 #, php-format
 msgid "%s user blocked/unblocked"
 msgid_plural "%s users blocked/unblocked"
 msgstr[0] ""
 msgstr[1] ""
 
-#: mod/admin.php:964
+#: mod/admin.php:967
 #, php-format
 msgid "%s user deleted"
 msgid_plural "%s users deleted"
 msgstr[0] ""
 msgstr[1] ""
 
-#: mod/admin.php:1003
+#: mod/admin.php:1006
 #, php-format
 msgid "User '%s' deleted"
 msgstr ""
 
-#: mod/admin.php:1011
+#: mod/admin.php:1014
 #, php-format
 msgid "User '%s' unblocked"
 msgstr ""
 
-#: mod/admin.php:1011
+#: mod/admin.php:1014
 #, php-format
 msgid "User '%s' blocked"
 msgstr ""
 
-#: mod/admin.php:1104
+#: mod/admin.php:1107
 msgid "Add User"
 msgstr ""
 
-#: mod/admin.php:1105
+#: mod/admin.php:1108
 msgid "select all"
 msgstr ""
 
-#: mod/admin.php:1106
+#: mod/admin.php:1109
 msgid "User registrations waiting for confirm"
 msgstr ""
 
-#: mod/admin.php:1107
+#: mod/admin.php:1110
 msgid "User waiting for permanent deletion"
 msgstr ""
 
-#: mod/admin.php:1108
+#: mod/admin.php:1111
 msgid "Request date"
 msgstr ""
 
-#: mod/admin.php:1108 mod/admin.php:1120 mod/admin.php:1121 mod/admin.php:1136
+#: mod/admin.php:1111 mod/admin.php:1123 mod/admin.php:1124 mod/admin.php:1139
 #: include/contact_selectors.php:79 include/contact_selectors.php:86
 msgid "Email"
 msgstr ""
 
-#: mod/admin.php:1109
+#: mod/admin.php:1112
 msgid "No registrations."
 msgstr ""
 
-#: mod/admin.php:1111
+#: mod/admin.php:1114
 msgid "Deny"
 msgstr ""
 
-#: mod/admin.php:1115
+#: mod/admin.php:1118
 msgid "Site admin"
 msgstr ""
 
-#: mod/admin.php:1116
+#: mod/admin.php:1119
 msgid "Account expired"
 msgstr ""
 
-#: mod/admin.php:1119
+#: mod/admin.php:1122
 msgid "New User"
 msgstr ""
 
-#: mod/admin.php:1120 mod/admin.php:1121
+#: mod/admin.php:1123 mod/admin.php:1124
 msgid "Register date"
 msgstr ""
 
-#: mod/admin.php:1120 mod/admin.php:1121
+#: mod/admin.php:1123 mod/admin.php:1124
 msgid "Last login"
 msgstr ""
 
-#: mod/admin.php:1120 mod/admin.php:1121
+#: mod/admin.php:1123 mod/admin.php:1124
 msgid "Last item"
 msgstr ""
 
-#: mod/admin.php:1120
+#: mod/admin.php:1123
 msgid "Deleted since"
 msgstr ""
 
-#: mod/admin.php:1121 mod/settings.php:41
+#: mod/admin.php:1124 mod/settings.php:41
 msgid "Account"
 msgstr ""
 
-#: mod/admin.php:1123
+#: mod/admin.php:1126
 msgid ""
 "Selected users will be deleted!\\n\\nEverything these users had posted on "
 "this site will be permanently deleted!\\n\\nAre you sure?"
 msgstr ""
 
-#: mod/admin.php:1124
+#: mod/admin.php:1127
 msgid ""
 "The user {0} will be deleted!\\n\\nEverything this user has posted on this "
 "site will be permanently deleted!\\n\\nAre you sure?"
 msgstr ""
 
-#: mod/admin.php:1134
+#: mod/admin.php:1137
 msgid "Name of the new user."
 msgstr ""
 
-#: mod/admin.php:1135
+#: mod/admin.php:1138
 msgid "Nickname"
 msgstr ""
 
-#: mod/admin.php:1135
+#: mod/admin.php:1138
 msgid "Nickname of the new user."
 msgstr ""
 
-#: mod/admin.php:1136
+#: mod/admin.php:1139
 msgid "Email address of the new user."
 msgstr ""
 
-#: mod/admin.php:1169
+#: mod/admin.php:1172
 #, php-format
 msgid "Plugin %s disabled."
 msgstr ""
 
-#: mod/admin.php:1173
+#: mod/admin.php:1176
 #, php-format
 msgid "Plugin %s enabled."
 msgstr ""
 
-#: mod/admin.php:1183 mod/admin.php:1407
+#: mod/admin.php:1186 mod/admin.php:1410
 msgid "Disable"
 msgstr ""
 
-#: mod/admin.php:1185 mod/admin.php:1409
+#: mod/admin.php:1188 mod/admin.php:1412
 msgid "Enable"
 msgstr ""
 
-#: mod/admin.php:1208 mod/admin.php:1453
+#: mod/admin.php:1211 mod/admin.php:1456
 msgid "Toggle"
 msgstr ""
 
-#: mod/admin.php:1216 mod/admin.php:1463
+#: mod/admin.php:1219 mod/admin.php:1466
 msgid "Author: "
 msgstr ""
 
-#: mod/admin.php:1217 mod/admin.php:1464
+#: mod/admin.php:1220 mod/admin.php:1467
 msgid "Maintainer: "
 msgstr ""
 
-#: mod/admin.php:1269
+#: mod/admin.php:1272
 msgid "Reload active plugins"
 msgstr ""
 
-#: mod/admin.php:1367
+#: mod/admin.php:1370
 msgid "No themes found."
 msgstr ""
 
-#: mod/admin.php:1445
+#: mod/admin.php:1448
 msgid "Screenshot"
 msgstr ""
 
-#: mod/admin.php:1505
+#: mod/admin.php:1508
 msgid "Reload active themes"
 msgstr ""
 
-#: mod/admin.php:1509
+#: mod/admin.php:1512
 msgid "[Experimental]"
 msgstr ""
 
-#: mod/admin.php:1510
+#: mod/admin.php:1513
 msgid "[Unsupported]"
 msgstr ""
 
-#: mod/admin.php:1537
+#: mod/admin.php:1540
 msgid "Log settings updated."
 msgstr ""
 
-#: mod/admin.php:1593
+#: mod/admin.php:1596
 msgid "Clear"
 msgstr ""
 
-#: mod/admin.php:1599
+#: mod/admin.php:1602
 msgid "Enable Debugging"
 msgstr ""
 
-#: mod/admin.php:1600
+#: mod/admin.php:1603
 msgid "Log file"
 msgstr ""
 
-#: mod/admin.php:1600
+#: mod/admin.php:1603
 msgid ""
 "Must be writable by web server. Relative to your Friendica top-level "
 "directory."
 msgstr ""
 
-#: mod/admin.php:1601
+#: mod/admin.php:1604
 msgid "Log level"
 msgstr ""
 
-#: mod/admin.php:1651 include/acl_selectors.php:347
+#: mod/admin.php:1654 include/acl_selectors.php:348
 msgid "Close"
 msgstr ""
 
-#: mod/admin.php:1657
+#: mod/admin.php:1660
 msgid "FTP Host"
 msgstr ""
 
-#: mod/admin.php:1658
+#: mod/admin.php:1661
 msgid "FTP Path"
 msgstr ""
 
-#: mod/admin.php:1659
+#: mod/admin.php:1662
 msgid "FTP User"
 msgstr ""
 
-#: mod/admin.php:1660
+#: mod/admin.php:1663
 msgid "FTP Password"
 msgstr ""
 
-#: mod/network.php:143
+#: mod/network.php:146
 #, php-format
 msgid "Search Results For: %s"
 msgstr ""
 
-#: mod/network.php:195 mod/search.php:25
+#: mod/network.php:191 mod/search.php:25
 msgid "Remove term"
 msgstr ""
 
-#: mod/network.php:204 mod/search.php:34 include/features.php:43
+#: mod/network.php:200 mod/search.php:34 include/features.php:79
 msgid "Saved Searches"
 msgstr ""
 
-#: mod/network.php:205 include/group.php:279
+#: mod/network.php:201 include/group.php:293
 msgid "add"
 msgstr ""
 
-#: mod/network.php:366
+#: mod/network.php:362
 msgid "Commented Order"
 msgstr ""
 
-#: mod/network.php:369
+#: mod/network.php:365
 msgid "Sort by Comment Date"
 msgstr ""
 
-#: mod/network.php:374
+#: mod/network.php:370
 msgid "Posted Order"
 msgstr ""
 
-#: mod/network.php:377
+#: mod/network.php:373
 msgid "Sort by Post Date"
 msgstr ""
 
-#: mod/network.php:388
+#: mod/network.php:384
 msgid "Posts that mention or involve you"
 msgstr ""
 
-#: mod/network.php:396
+#: mod/network.php:392
 msgid "New"
 msgstr ""
 
-#: mod/network.php:399
+#: mod/network.php:395
 msgid "Activity Stream - by date"
 msgstr ""
 
-#: mod/network.php:407
+#: mod/network.php:403
 msgid "Shared Links"
 msgstr ""
 
-#: mod/network.php:410
+#: mod/network.php:406
 msgid "Interesting Links"
 msgstr ""
 
-#: mod/network.php:418
+#: mod/network.php:414
 msgid "Starred"
 msgstr ""
 
-#: mod/network.php:421
+#: mod/network.php:417
 msgid "Favourite Posts"
 msgstr ""
 
-#: mod/network.php:480
+#: mod/network.php:476
 #, php-format
 msgid "Warning: This group contains %s member from an insecure network."
 msgid_plural ""
@@ -3253,33 +3269,28 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: mod/network.php:483
+#: mod/network.php:479
 msgid "Private messages to this group are at risk of public disclosure."
 msgstr ""
 
-#: mod/network.php:550 mod/content.php:119
+#: mod/network.php:546 mod/content.php:119
 msgid "No such group"
 msgstr ""
 
-#: mod/network.php:567 mod/content.php:130
+#: mod/network.php:563 mod/content.php:130
 msgid "Group is empty"
 msgstr ""
 
-#: mod/network.php:578 mod/content.php:135
+#: mod/network.php:574 mod/content.php:135
 #, php-format
 msgid "Group: %s"
 msgstr ""
 
-#: mod/network.php:596
-#, php-format
-msgid "Contact: %s"
-msgstr ""
-
-#: mod/network.php:600
+#: mod/network.php:606
 msgid "Private messages to this person are at risk of public disclosure."
 msgstr ""
 
-#: mod/network.php:605
+#: mod/network.php:611
 msgid "Invalid contact."
 msgstr ""
 
@@ -3287,10 +3298,6 @@ msgstr ""
 msgid "No friends to display."
 msgstr ""
 
-#: mod/allfriends.php:79 mod/common.php:122
-msgid "Forum"
-msgstr ""
-
 #: mod/allfriends.php:92
 #, php-format
 msgid "Friends of %s"
@@ -3332,31 +3339,31 @@ msgstr ""
 msgid "Sat"
 msgstr ""
 
-#: mod/events.php:208 mod/settings.php:936 include/text.php:1267
+#: mod/events.php:208 mod/settings.php:936 include/text.php:1274
 msgid "Sunday"
 msgstr ""
 
-#: mod/events.php:209 mod/settings.php:936 include/text.php:1267
+#: mod/events.php:209 mod/settings.php:936 include/text.php:1274
 msgid "Monday"
 msgstr ""
 
-#: mod/events.php:210 include/text.php:1267
+#: mod/events.php:210 include/text.php:1274
 msgid "Tuesday"
 msgstr ""
 
-#: mod/events.php:211 include/text.php:1267
+#: mod/events.php:211 include/text.php:1274
 msgid "Wednesday"
 msgstr ""
 
-#: mod/events.php:212 include/text.php:1267
+#: mod/events.php:212 include/text.php:1274
 msgid "Thursday"
 msgstr ""
 
-#: mod/events.php:213 include/text.php:1267
+#: mod/events.php:213 include/text.php:1274
 msgid "Friday"
 msgstr ""
 
-#: mod/events.php:214 include/text.php:1267
+#: mod/events.php:214 include/text.php:1274
 msgid "Saturday"
 msgstr ""
 
@@ -3376,7 +3383,7 @@ msgstr ""
 msgid "Apr"
 msgstr ""
 
-#: mod/events.php:219 mod/events.php:231 include/text.php:1271
+#: mod/events.php:219 mod/events.php:231 include/text.php:1278
 msgid "May"
 msgstr ""
 
@@ -3408,47 +3415,47 @@ msgstr ""
 msgid "Dec"
 msgstr ""
 
-#: mod/events.php:227 include/text.php:1271
+#: mod/events.php:227 include/text.php:1278
 msgid "January"
 msgstr ""
 
-#: mod/events.php:228 include/text.php:1271
+#: mod/events.php:228 include/text.php:1278
 msgid "February"
 msgstr ""
 
-#: mod/events.php:229 include/text.php:1271
+#: mod/events.php:229 include/text.php:1278
 msgid "March"
 msgstr ""
 
-#: mod/events.php:230 include/text.php:1271
+#: mod/events.php:230 include/text.php:1278
 msgid "April"
 msgstr ""
 
-#: mod/events.php:232 include/text.php:1271
+#: mod/events.php:232 include/text.php:1278
 msgid "June"
 msgstr ""
 
-#: mod/events.php:233 include/text.php:1271
+#: mod/events.php:233 include/text.php:1278
 msgid "July"
 msgstr ""
 
-#: mod/events.php:234 include/text.php:1271
+#: mod/events.php:234 include/text.php:1278
 msgid "August"
 msgstr ""
 
-#: mod/events.php:235 include/text.php:1271
+#: mod/events.php:235 include/text.php:1278
 msgid "September"
 msgstr ""
 
-#: mod/events.php:236 include/text.php:1271
+#: mod/events.php:236 include/text.php:1278
 msgid "October"
 msgstr ""
 
-#: mod/events.php:237 include/text.php:1271
+#: mod/events.php:237 include/text.php:1278
 msgid "November"
 msgstr ""
 
-#: mod/events.php:238 include/text.php:1271
+#: mod/events.php:238 include/text.php:1278
 msgid "December"
 msgstr ""
 
@@ -3476,11 +3483,11 @@ msgstr ""
 msgid "Edit event"
 msgstr ""
 
-#: mod/events.php:421 include/text.php:1714 include/text.php:1721
+#: mod/events.php:421 include/text.php:1721 include/text.php:1728
 msgid "link to source"
 msgstr ""
 
-#: mod/events.php:456 include/identity.php:669 include/nav.php:79
+#: mod/events.php:456 include/identity.php:686 include/nav.php:79
 #: include/nav.php:140 view/theme/diabook/theme.php:127
 msgid "Events"
 msgstr ""
@@ -3493,7 +3500,7 @@ msgstr ""
 msgid "Previous"
 msgstr ""
 
-#: mod/events.php:459 mod/install.php:212
+#: mod/events.php:459 mod/install.php:220
 msgid "Next"
 msgstr ""
 
@@ -3583,14 +3590,15 @@ msgstr[0] ""
 msgstr[1] ""
 
 #: mod/content.php:607 object/Item.php:421 object/Item.php:434
-#: include/text.php:1992
+#: include/text.php:1999
 msgid "comment"
 msgid_plural "comments"
 msgstr[0] ""
 msgstr[1] ""
 
 #: mod/content.php:608 boot.php:773 object/Item.php:422
-#: include/contact_widgets.php:205 include/items.php:5214
+#: include/contact_widgets.php:242 include/forums.php:110
+#: include/items.php:5152 view/theme/vier/theme.php:264
 msgid "show more"
 msgstr ""
 
@@ -3719,105 +3727,105 @@ msgstr ""
 msgid "Please enter your password for verification:"
 msgstr ""
 
-#: mod/install.php:120
+#: mod/install.php:128
 msgid "Friendica Communications Server - Setup"
 msgstr ""
 
-#: mod/install.php:126
+#: mod/install.php:134
 msgid "Could not connect to database."
 msgstr ""
 
-#: mod/install.php:130
+#: mod/install.php:138
 msgid "Could not create table."
 msgstr ""
 
-#: mod/install.php:136
+#: mod/install.php:144
 msgid "Your Friendica site database has been installed."
 msgstr ""
 
-#: mod/install.php:141
+#: mod/install.php:149
 msgid ""
 "You may need to import the file \"database.sql\" manually using phpmyadmin "
 "or mysql."
 msgstr ""
 
-#: mod/install.php:142 mod/install.php:211 mod/install.php:569
+#: mod/install.php:150 mod/install.php:219 mod/install.php:577
 msgid "Please see the file \"INSTALL.txt\"."
 msgstr ""
 
-#: mod/install.php:154
+#: mod/install.php:162
 msgid "Database already in use."
 msgstr ""
 
-#: mod/install.php:208
+#: mod/install.php:216
 msgid "System check"
 msgstr ""
 
-#: mod/install.php:213
+#: mod/install.php:221
 msgid "Check again"
 msgstr ""
 
-#: mod/install.php:232
+#: mod/install.php:240
 msgid "Database connection"
 msgstr ""
 
-#: mod/install.php:233
+#: mod/install.php:241
 msgid ""
 "In order to install Friendica we need to know how to connect to your "
 "database."
 msgstr ""
 
-#: mod/install.php:234
+#: mod/install.php:242
 msgid ""
 "Please contact your hosting provider or site administrator if you have "
 "questions about these settings."
 msgstr ""
 
-#: mod/install.php:235
+#: mod/install.php:243
 msgid ""
 "The database you specify below should already exist. If it does not, please "
 "create it before continuing."
 msgstr ""
 
-#: mod/install.php:239
+#: mod/install.php:247
 msgid "Database Server Name"
 msgstr ""
 
-#: mod/install.php:240
+#: mod/install.php:248
 msgid "Database Login Name"
 msgstr ""
 
-#: mod/install.php:241
+#: mod/install.php:249
 msgid "Database Login Password"
 msgstr ""
 
-#: mod/install.php:242
+#: mod/install.php:250
 msgid "Database Name"
 msgstr ""
 
-#: mod/install.php:243 mod/install.php:282
+#: mod/install.php:251 mod/install.php:290
 msgid "Site administrator email address"
 msgstr ""
 
-#: mod/install.php:243 mod/install.php:282
+#: mod/install.php:251 mod/install.php:290
 msgid ""
 "Your account email address must match this in order to use the web admin "
 "panel."
 msgstr ""
 
-#: mod/install.php:247 mod/install.php:285
+#: mod/install.php:255 mod/install.php:293
 msgid "Please select a default timezone for your website"
 msgstr ""
 
-#: mod/install.php:272
+#: mod/install.php:280
 msgid "Site settings"
 msgstr ""
 
-#: mod/install.php:326
+#: mod/install.php:334
 msgid "Could not find a command line version of PHP in the web server PATH."
 msgstr ""
 
-#: mod/install.php:327
+#: mod/install.php:335
 msgid ""
 "If you don't have a command line version of PHP installed on server, you "
 "will not be able to run background polling via cron. See <a href='https://"
@@ -3825,216 +3833,216 @@ msgid ""
 "poller'>'Setup the poller'</a>"
 msgstr ""
 
-#: mod/install.php:331
+#: mod/install.php:339
 msgid "PHP executable path"
 msgstr ""
 
-#: mod/install.php:331
+#: mod/install.php:339
 msgid ""
 "Enter full path to php executable. You can leave this blank to continue the "
 "installation."
 msgstr ""
 
-#: mod/install.php:336
+#: mod/install.php:344
 msgid "Command line PHP"
 msgstr ""
 
-#: mod/install.php:345
+#: mod/install.php:353
 msgid "PHP executable is not the php cli binary (could be cgi-fgci version)"
 msgstr ""
 
-#: mod/install.php:346
+#: mod/install.php:354
 msgid "Found PHP version: "
 msgstr ""
 
-#: mod/install.php:348
+#: mod/install.php:356
 msgid "PHP cli binary"
 msgstr ""
 
-#: mod/install.php:359
+#: mod/install.php:367
 msgid ""
 "The command line version of PHP on your system does not have "
 "\"register_argc_argv\" enabled."
 msgstr ""
 
-#: mod/install.php:360
+#: mod/install.php:368
 msgid "This is required for message delivery to work."
 msgstr ""
 
-#: mod/install.php:362
+#: mod/install.php:370
 msgid "PHP register_argc_argv"
 msgstr ""
 
-#: mod/install.php:383
+#: mod/install.php:391
 msgid ""
 "Error: the \"openssl_pkey_new\" function on this system is not able to "
 "generate encryption keys"
 msgstr ""
 
-#: mod/install.php:384
+#: mod/install.php:392
 msgid ""
 "If running under Windows, please see \"http://www.php.net/manual/en/openssl."
 "installation.php\"."
 msgstr ""
 
-#: mod/install.php:386
+#: mod/install.php:394
 msgid "Generate encryption keys"
 msgstr ""
 
-#: mod/install.php:393
+#: mod/install.php:401
 msgid "libCurl PHP module"
 msgstr ""
 
-#: mod/install.php:394
+#: mod/install.php:402
 msgid "GD graphics PHP module"
 msgstr ""
 
-#: mod/install.php:395
+#: mod/install.php:403
 msgid "OpenSSL PHP module"
 msgstr ""
 
-#: mod/install.php:396
+#: mod/install.php:404
 msgid "mysqli PHP module"
 msgstr ""
 
-#: mod/install.php:397
+#: mod/install.php:405
 msgid "mb_string PHP module"
 msgstr ""
 
-#: mod/install.php:398
+#: mod/install.php:406
 msgid "mcrypt PHP module"
 msgstr ""
 
-#: mod/install.php:403 mod/install.php:405
+#: mod/install.php:411 mod/install.php:413
 msgid "Apache mod_rewrite module"
 msgstr ""
 
-#: mod/install.php:403
+#: mod/install.php:411
 msgid ""
 "Error: Apache webserver mod-rewrite module is required but not installed."
 msgstr ""
 
-#: mod/install.php:411
+#: mod/install.php:419
 msgid "Error: libCURL PHP module required but not installed."
 msgstr ""
 
-#: mod/install.php:415
+#: mod/install.php:423
 msgid ""
 "Error: GD graphics PHP module with JPEG support required but not installed."
 msgstr ""
 
-#: mod/install.php:419
+#: mod/install.php:427
 msgid "Error: openssl PHP module required but not installed."
 msgstr ""
 
-#: mod/install.php:423
+#: mod/install.php:431
 msgid "Error: mysqli PHP module required but not installed."
 msgstr ""
 
-#: mod/install.php:427
+#: mod/install.php:435
 msgid "Error: mb_string PHP module required but not installed."
 msgstr ""
 
-#: mod/install.php:431
+#: mod/install.php:439
 msgid "Error: mcrypt PHP module required but not installed."
 msgstr ""
 
-#: mod/install.php:443
+#: mod/install.php:451
 msgid ""
 "Function mcrypt_create_iv() is not defined. This is needed to enable RINO2 "
 "encryption layer."
 msgstr ""
 
-#: mod/install.php:445
+#: mod/install.php:453
 msgid "mcrypt_create_iv() function"
 msgstr ""
 
-#: mod/install.php:461
+#: mod/install.php:469
 msgid ""
 "The web installer needs to be able to create a file called \".htconfig.php\" "
 "in the top folder of your web server and it is unable to do so."
 msgstr ""
 
-#: mod/install.php:462
+#: mod/install.php:470
 msgid ""
 "This is most often a permission setting, as the web server may not be able "
 "to write files in your folder - even if you can."
 msgstr ""
 
-#: mod/install.php:463
+#: mod/install.php:471
 msgid ""
 "At the end of this procedure, we will give you a text to save in a file "
 "named .htconfig.php in your Friendica top folder."
 msgstr ""
 
-#: mod/install.php:464
+#: mod/install.php:472
 msgid ""
 "You can alternatively skip this procedure and perform a manual installation. "
 "Please see the file \"INSTALL.txt\" for instructions."
 msgstr ""
 
-#: mod/install.php:467
+#: mod/install.php:475
 msgid ".htconfig.php is writable"
 msgstr ""
 
-#: mod/install.php:477
+#: mod/install.php:485
 msgid ""
 "Friendica uses the Smarty3 template engine to render its web views. Smarty3 "
 "compiles templates to PHP to speed up rendering."
 msgstr ""
 
-#: mod/install.php:478
+#: mod/install.php:486
 msgid ""
 "In order to store these compiled templates, the web server needs to have "
 "write access to the directory view/smarty3/ under the Friendica top level "
 "folder."
 msgstr ""
 
-#: mod/install.php:479
+#: mod/install.php:487
 msgid ""
 "Please ensure that the user that your web server runs as (e.g. www-data) has "
 "write access to this folder."
 msgstr ""
 
-#: mod/install.php:480
+#: mod/install.php:488
 msgid ""
 "Note: as a security measure, you should give the web server write access to "
 "view/smarty3/ only--not the template files (.tpl) that it contains."
 msgstr ""
 
-#: mod/install.php:483
+#: mod/install.php:491
 msgid "view/smarty3 is writable"
 msgstr ""
 
-#: mod/install.php:499
+#: mod/install.php:507
 msgid ""
 "Url rewrite in .htaccess is not working. Check your server configuration."
 msgstr ""
 
-#: mod/install.php:501
+#: mod/install.php:509
 msgid "Url rewrite is working"
 msgstr ""
 
-#: mod/install.php:518
+#: mod/install.php:526
 msgid "ImageMagick PHP extension is installed"
 msgstr ""
 
-#: mod/install.php:520
+#: mod/install.php:528
 msgid "ImageMagick supports GIF"
 msgstr ""
 
-#: mod/install.php:528
+#: mod/install.php:536
 msgid ""
 "The database configuration file \".htconfig.php\" could not be written. "
 "Please use the enclosed text to create a configuration file in your web "
 "server root."
 msgstr ""
 
-#: mod/install.php:567
+#: mod/install.php:575
 msgid "<h1>What next</h1>"
 msgstr ""
 
-#: mod/install.php:568
+#: mod/install.php:576
 msgid ""
 "IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
 msgstr ""
@@ -4063,7 +4071,7 @@ msgstr ""
 msgid "Help:"
 msgstr ""
 
-#: mod/help.php:36 include/nav.php:113 view/theme/vier/theme.php:273
+#: mod/help.php:36 include/nav.php:113 view/theme/vier/theme.php:302
 msgid "Help"
 msgstr ""
 
@@ -4106,11 +4114,11 @@ msgstr ""
 msgid "No keywords to match. Please add keywords to your default profile."
 msgstr ""
 
-#: mod/match.php:83
+#: mod/match.php:84
 msgid "is interested in:"
 msgstr ""
 
-#: mod/match.php:97
+#: mod/match.php:98
 msgid "Profile Match"
 msgstr ""
 
@@ -4341,7 +4349,7 @@ msgstr ""
 msgid "Built-in support for %s connectivity is %s"
 msgstr ""
 
-#: mod/settings.php:809 mod/dfrn_request.php:856
+#: mod/settings.php:809 mod/dfrn_request.php:858
 #: include/contact_selectors.php:80
 msgid "Diaspora"
 msgstr ""
@@ -4482,8 +4490,8 @@ msgstr ""
 
 #: mod/settings.php:973 view/theme/cleanzero/config.php:82
 #: view/theme/dispy/config.php:72 view/theme/quattro/config.php:66
-#: view/theme/diabook/config.php:150 view/theme/vier/config.php:109
-#: view/theme/duepuntozero/config.php:61
+#: view/theme/diabook/config.php:150 view/theme/clean/config.php:85
+#: view/theme/vier/config.php:109 view/theme/duepuntozero/config.php:61
 msgid "Theme settings"
 msgstr ""
 
@@ -4555,7 +4563,7 @@ msgstr ""
 msgid "Hide your contact/friend list from viewers of your default profile?"
 msgstr ""
 
-#: mod/settings.php:1109 include/acl_selectors.php:330
+#: mod/settings.php:1109 include/acl_selectors.php:331
 msgid "Hide your profile details from unknown viewers?"
 msgstr ""
 
@@ -4634,11 +4642,11 @@ msgstr ""
 msgid "Password Settings"
 msgstr ""
 
-#: mod/settings.php:1199 mod/register.php:271
+#: mod/settings.php:1199 mod/register.php:274
 msgid "New Password:"
 msgstr ""
 
-#: mod/settings.php:1200 mod/register.php:272
+#: mod/settings.php:1200 mod/register.php:275
 msgid "Confirm:"
 msgstr ""
 
@@ -4662,7 +4670,7 @@ msgstr ""
 msgid "Basic Settings"
 msgstr ""
 
-#: mod/settings.php:1207 include/identity.php:539
+#: mod/settings.php:1207 include/identity.php:551
 msgid "Full Name:"
 msgstr ""
 
@@ -4834,147 +4842,147 @@ msgstr ""
 msgid "This introduction has already been accepted."
 msgstr ""
 
-#: mod/dfrn_request.php:120 mod/dfrn_request.php:518
+#: mod/dfrn_request.php:120 mod/dfrn_request.php:519
 msgid "Profile location is not valid or does not contain profile information."
 msgstr ""
 
-#: mod/dfrn_request.php:125 mod/dfrn_request.php:523
+#: mod/dfrn_request.php:125 mod/dfrn_request.php:524
 msgid "Warning: profile location has no identifiable owner name."
 msgstr ""
 
-#: mod/dfrn_request.php:127 mod/dfrn_request.php:525
+#: mod/dfrn_request.php:127 mod/dfrn_request.php:526
 msgid "Warning: profile location has no profile photo."
 msgstr ""
 
-#: mod/dfrn_request.php:130 mod/dfrn_request.php:528
+#: mod/dfrn_request.php:130 mod/dfrn_request.php:529
 #, php-format
 msgid "%d required parameter was not found at the given location"
 msgid_plural "%d required parameters were not found at the given location"
 msgstr[0] ""
 msgstr[1] ""
 
-#: mod/dfrn_request.php:172
+#: mod/dfrn_request.php:173
 msgid "Introduction complete."
 msgstr ""
 
-#: mod/dfrn_request.php:214
+#: mod/dfrn_request.php:215
 msgid "Unrecoverable protocol error."
 msgstr ""
 
-#: mod/dfrn_request.php:242
+#: mod/dfrn_request.php:243
 msgid "Profile unavailable."
 msgstr ""
 
-#: mod/dfrn_request.php:267
+#: mod/dfrn_request.php:268
 #, php-format
 msgid "%s has received too many connection requests today."
 msgstr ""
 
-#: mod/dfrn_request.php:268
+#: mod/dfrn_request.php:269
 msgid "Spam protection measures have been invoked."
 msgstr ""
 
-#: mod/dfrn_request.php:269
+#: mod/dfrn_request.php:270
 msgid "Friends are advised to please try again in 24 hours."
 msgstr ""
 
-#: mod/dfrn_request.php:331
+#: mod/dfrn_request.php:332
 msgid "Invalid locator"
 msgstr ""
 
-#: mod/dfrn_request.php:340
+#: mod/dfrn_request.php:341
 msgid "Invalid email address."
 msgstr ""
 
-#: mod/dfrn_request.php:367
+#: mod/dfrn_request.php:368
 msgid "This account has not been configured for email. Request failed."
 msgstr ""
 
-#: mod/dfrn_request.php:463
+#: mod/dfrn_request.php:464
 msgid "Unable to resolve your name at the provided location."
 msgstr ""
 
-#: mod/dfrn_request.php:476
+#: mod/dfrn_request.php:477
 msgid "You have already introduced yourself here."
 msgstr ""
 
-#: mod/dfrn_request.php:480
+#: mod/dfrn_request.php:481
 #, php-format
 msgid "Apparently you are already friends with %s."
 msgstr ""
 
-#: mod/dfrn_request.php:501
+#: mod/dfrn_request.php:502
 msgid "Invalid profile URL."
 msgstr ""
 
-#: mod/dfrn_request.php:507 include/follow.php:72
+#: mod/dfrn_request.php:508 include/follow.php:72
 msgid "Disallowed profile URL."
 msgstr ""
 
-#: mod/dfrn_request.php:597
+#: mod/dfrn_request.php:599
 msgid "Your introduction has been sent."
 msgstr ""
 
-#: mod/dfrn_request.php:650
+#: mod/dfrn_request.php:652
 msgid "Please login to confirm introduction."
 msgstr ""
 
-#: mod/dfrn_request.php:660
+#: mod/dfrn_request.php:662
 msgid ""
 "Incorrect identity currently logged in. Please login to <strong>this</"
 "strong> profile."
 msgstr ""
 
-#: mod/dfrn_request.php:674 mod/dfrn_request.php:691
+#: mod/dfrn_request.php:676 mod/dfrn_request.php:693
 msgid "Confirm"
 msgstr ""
 
-#: mod/dfrn_request.php:686
+#: mod/dfrn_request.php:688
 msgid "Hide this contact"
 msgstr ""
 
-#: mod/dfrn_request.php:689
+#: mod/dfrn_request.php:691
 #, php-format
 msgid "Welcome home %s."
 msgstr ""
 
-#: mod/dfrn_request.php:690
+#: mod/dfrn_request.php:692
 #, php-format
 msgid "Please confirm your introduction/connection request to %s."
 msgstr ""
 
-#: mod/dfrn_request.php:819
+#: mod/dfrn_request.php:821
 msgid ""
 "Please enter your 'Identity Address' from one of the following supported "
 "communications networks:"
 msgstr ""
 
-#: mod/dfrn_request.php:840
+#: mod/dfrn_request.php:842
 #, php-format
 msgid ""
 "If you are not yet a member of the free social web, <a href=\"%s/siteinfo"
 "\">follow this link to find a public Friendica site and join us today</a>."
 msgstr ""
 
-#: mod/dfrn_request.php:845
+#: mod/dfrn_request.php:847
 msgid "Friend/Connection Request"
 msgstr ""
 
-#: mod/dfrn_request.php:846
+#: mod/dfrn_request.php:848
 msgid ""
 "Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, "
 "testuser@identi.ca"
 msgstr ""
 
-#: mod/dfrn_request.php:854 include/contact_selectors.php:76
+#: mod/dfrn_request.php:856 include/contact_selectors.php:76
 msgid "Friendica"
 msgstr ""
 
-#: mod/dfrn_request.php:855
+#: mod/dfrn_request.php:857
 msgid "StatusNet/Federated Social Web"
 msgstr ""
 
-#: mod/dfrn_request.php:857
+#: mod/dfrn_request.php:859
 #, php-format
 msgid ""
 " - please do not use this form.  Instead, enter %s into your Diaspora search "
@@ -4993,80 +5001,84 @@ msgid ""
 "password: %s<br><br>You can change your password after login."
 msgstr ""
 
-#: mod/register.php:107
+#: mod/register.php:104
+msgid "Registration successful."
+msgstr ""
+
+#: mod/register.php:110
 msgid "Your registration can not be processed."
 msgstr ""
 
-#: mod/register.php:150
+#: mod/register.php:153
 msgid "Your registration is pending approval by the site owner."
 msgstr ""
 
-#: mod/register.php:188 mod/uimport.php:50
+#: mod/register.php:191 mod/uimport.php:50
 msgid ""
 "This site has exceeded the number of allowed daily account registrations. "
 "Please try again tomorrow."
 msgstr ""
 
-#: mod/register.php:216
+#: mod/register.php:219
 msgid ""
 "You may (optionally) fill in this form via OpenID by supplying your OpenID "
 "and clicking 'Register'."
 msgstr ""
 
-#: mod/register.php:217
+#: mod/register.php:220
 msgid ""
 "If you are not familiar with OpenID, please leave that field blank and fill "
 "in the rest of the items."
 msgstr ""
 
-#: mod/register.php:218
+#: mod/register.php:221
 msgid "Your OpenID (optional): "
 msgstr ""
 
-#: mod/register.php:232
+#: mod/register.php:235
 msgid "Include your profile in member directory?"
 msgstr ""
 
-#: mod/register.php:256
+#: mod/register.php:259
 msgid "Membership on this site is by invitation only."
 msgstr ""
 
-#: mod/register.php:257
+#: mod/register.php:260
 msgid "Your invitation ID: "
 msgstr ""
 
-#: mod/register.php:268
+#: mod/register.php:271
 msgid "Your Full Name (e.g. Joe Smith, real or real-looking): "
 msgstr ""
 
-#: mod/register.php:269
+#: mod/register.php:272
 msgid "Your Email Address: "
 msgstr ""
 
-#: mod/register.php:271
+#: mod/register.php:274
 msgid "Leave empty for an auto generated password."
 msgstr ""
 
-#: mod/register.php:273
+#: mod/register.php:276
 msgid ""
 "Choose a profile nickname. This must begin with a text character. Your "
 "profile address on this site will then be '<strong>nickname@$sitename</"
 "strong>'."
 msgstr ""
 
-#: mod/register.php:274
+#: mod/register.php:277
 msgid "Choose a nickname: "
 msgstr ""
 
-#: mod/register.php:277 boot.php:1256 include/nav.php:108
+#: mod/register.php:280 boot.php:1256 include/nav.php:108
 msgid "Register"
 msgstr ""
 
-#: mod/register.php:283 mod/uimport.php:64
+#: mod/register.php:286 mod/uimport.php:64
 msgid "Import"
 msgstr ""
 
-#: mod/register.php:284
+#: mod/register.php:287
 msgid "Import your profile to this friendica instance"
 msgstr ""
 
@@ -5086,7 +5098,7 @@ msgstr ""
 msgid "Only one search per minute is permitted for not logged in users."
 msgstr ""
 
-#: mod/search.php:126 include/text.php:996 include/nav.php:118
+#: mod/search.php:126 include/text.php:1003 include/nav.php:118
 msgid "Search"
 msgstr ""
 
@@ -5108,16 +5120,16 @@ msgstr ""
 msgid "Gender: "
 msgstr ""
 
-#: mod/directory.php:143 include/identity.php:273 include/identity.php:561
+#: mod/directory.php:143 include/identity.php:283 include/identity.php:573
 msgid "Status:"
 msgstr ""
 
-#: mod/directory.php:145 include/identity.php:275 include/identity.php:572
+#: mod/directory.php:145 include/identity.php:285 include/identity.php:584
 msgid "Homepage:"
 msgstr ""
 
 #: mod/directory.php:195 view/theme/diabook/theme.php:525
-#: view/theme/vier/theme.php:191
+#: view/theme/vier/theme.php:205
 msgid "Global Directory"
 msgstr ""
 
@@ -5224,12 +5236,12 @@ msgid ""
 "hours."
 msgstr ""
 
-#: mod/suggest.php:83 mod/suggest.php:100
+#: mod/suggest.php:83 mod/suggest.php:101
 msgid "Ignore/Hide"
 msgstr ""
 
-#: mod/suggest.php:110 include/contact_widgets.php:35
-#: view/theme/diabook/theme.php:527 view/theme/vier/theme.php:193
+#: mod/suggest.php:111 include/contact_widgets.php:35
+#: view/theme/diabook/theme.php:527 view/theme/vier/theme.php:207
 msgid "Friend Suggestions"
 msgstr ""
 
@@ -5444,7 +5456,7 @@ msgstr ""
 msgid "Since [date]:"
 msgstr ""
 
-#: mod/profiles.php:724 include/identity.php:570
+#: mod/profiles.php:724 include/identity.php:582
 msgid "Sexual Preference:"
 msgstr ""
 
@@ -5452,11 +5464,11 @@ msgstr ""
 msgid "Homepage URL:"
 msgstr ""
 
-#: mod/profiles.php:726 include/identity.php:574
+#: mod/profiles.php:726 include/identity.php:586
 msgid "Hometown:"
 msgstr ""
 
-#: mod/profiles.php:727 include/identity.php:578
+#: mod/profiles.php:727 include/identity.php:590
 msgid "Political Views:"
 msgstr ""
 
@@ -5472,11 +5484,11 @@ msgstr ""
 msgid "Private Keywords:"
 msgstr ""
 
-#: mod/profiles.php:731 include/identity.php:586
+#: mod/profiles.php:731 include/identity.php:598
 msgid "Likes:"
 msgstr ""
 
-#: mod/profiles.php:732 include/identity.php:588
+#: mod/profiles.php:732 include/identity.php:600
 msgid "Dislikes:"
 msgstr ""
 
@@ -5542,23 +5554,23 @@ msgstr ""
 msgid "Edit/Manage Profiles"
 msgstr ""
 
-#: mod/profiles.php:814 include/identity.php:231 include/identity.php:257
+#: mod/profiles.php:814 include/identity.php:241 include/identity.php:267
 msgid "Change profile photo"
 msgstr ""
 
-#: mod/profiles.php:815 include/identity.php:232
+#: mod/profiles.php:815 include/identity.php:242
 msgid "Create New Profile"
 msgstr ""
 
-#: mod/profiles.php:826 include/identity.php:242
+#: mod/profiles.php:826 include/identity.php:252
 msgid "Profile Image"
 msgstr ""
 
-#: mod/profiles.php:828 include/identity.php:245
+#: mod/profiles.php:828 include/identity.php:255
 msgid "visible to everybody"
 msgstr ""
 
-#: mod/profiles.php:829 include/identity.php:246
+#: mod/profiles.php:829 include/identity.php:256
 msgid "Edit visibility"
 msgstr ""
 
@@ -5622,7 +5634,7 @@ msgstr ""
 msgid "Permission settings"
 msgstr ""
 
-#: mod/editpost.php:132 include/acl_selectors.php:343
+#: mod/editpost.php:132 include/acl_selectors.php:344
 msgid "CC: email addresses"
 msgstr ""
 
@@ -5638,7 +5650,7 @@ msgstr ""
 msgid "Categories (comma-separated list)"
 msgstr ""
 
-#: mod/editpost.php:139 include/acl_selectors.php:344
+#: mod/editpost.php:139 include/acl_selectors.php:345
 msgid "Example: bob@example.com, mary@example.com"
 msgstr ""
 
@@ -5704,7 +5716,7 @@ msgstr ""
 msgid "Visible to:"
 msgstr ""
 
-#: mod/notes.php:46 include/identity.php:677
+#: mod/notes.php:46 include/identity.php:694
 msgid "Personal Notes"
 msgstr ""
 
@@ -5861,7 +5873,7 @@ msgid ""
 "important, please visit http://friendica.com"
 msgstr ""
 
-#: mod/photos.php:91 include/identity.php:652
+#: mod/photos.php:91 include/identity.php:669
 msgid "Photo Albums"
 msgstr ""
 
@@ -5935,7 +5947,7 @@ msgstr ""
 msgid "Do not show a status post for this upload"
 msgstr ""
 
-#: mod/photos.php:1182 mod/photos.php:1567 include/acl_selectors.php:346
+#: mod/photos.php:1182 mod/photos.php:1567 include/acl_selectors.php:347
 msgid "Permissions"
 msgstr ""
 
@@ -6036,7 +6048,7 @@ msgid "Share"
 msgstr ""
 
 #: mod/photos.php:1640 include/conversation.php:509
-#: include/conversation.php:1405
+#: include/conversation.php:1414
 msgid "Attending"
 msgid_plural "Attending"
 msgstr[0] ""
@@ -6279,7 +6291,7 @@ msgid "Examples: Robert Morgenstein, Fishing"
 msgstr ""
 
 #: include/contact_widgets.php:36 view/theme/diabook/theme.php:526
-#: view/theme/vier/theme.php:192
+#: view/theme/vier/theme.php:206
 msgid "Similar Interests"
 msgstr ""
 
@@ -6288,205 +6300,221 @@ msgid "Random Profile"
 msgstr ""
 
 #: include/contact_widgets.php:38 view/theme/diabook/theme.php:528
-#: view/theme/vier/theme.php:194
+#: view/theme/vier/theme.php:208
 msgid "Invite Friends"
 msgstr ""
 
-#: include/contact_widgets.php:71
+#: include/contact_widgets.php:108
 msgid "Networks"
 msgstr ""
 
-#: include/contact_widgets.php:74
+#: include/contact_widgets.php:111
 msgid "All Networks"
 msgstr ""
 
-#: include/contact_widgets.php:104 include/features.php:61
+#: include/contact_widgets.php:141 include/features.php:97
 msgid "Saved Folders"
 msgstr ""
 
-#: include/contact_widgets.php:107 include/contact_widgets.php:139
+#: include/contact_widgets.php:144 include/contact_widgets.php:176
 msgid "Everything"
 msgstr ""
 
-#: include/contact_widgets.php:136
+#: include/contact_widgets.php:173
 msgid "Categories"
 msgstr ""
 
-#: include/features.php:23
+#: include/features.php:58
 msgid "General Features"
 msgstr ""
 
-#: include/features.php:25
+#: include/features.php:60
 msgid "Multiple Profiles"
 msgstr ""
 
-#: include/features.php:25
+#: include/features.php:60
 msgid "Ability to create multiple profiles"
 msgstr ""
 
-#: include/features.php:26
+#: include/features.php:61
 msgid "Photo Location"
 msgstr ""
 
-#: include/features.php:26
+#: include/features.php:61
 msgid ""
 "Photo metadata is normally stripped. This extracts the location (if present) "
 "prior to stripping metadata and links it to a map."
 msgstr ""
 
-#: include/features.php:31
+#: include/features.php:66
 msgid "Post Composition Features"
 msgstr ""
 
-#: include/features.php:32
+#: include/features.php:67
 msgid "Richtext Editor"
 msgstr ""
 
-#: include/features.php:32
+#: include/features.php:67
 msgid "Enable richtext editor"
 msgstr ""
 
-#: include/features.php:33
+#: include/features.php:68
 msgid "Post Preview"
 msgstr ""
 
-#: include/features.php:33
+#: include/features.php:68
 msgid "Allow previewing posts and comments before publishing them"
 msgstr ""
 
-#: include/features.php:34
+#: include/features.php:69
 msgid "Auto-mention Forums"
 msgstr ""
 
-#: include/features.php:34
+#: include/features.php:69
 msgid ""
 "Add/remove mention when a fourm page is selected/deselected in ACL window."
 msgstr ""
 
-#: include/features.php:39
+#: include/features.php:74
 msgid "Network Sidebar Widgets"
 msgstr ""
 
-#: include/features.php:40
+#: include/features.php:75
 msgid "Search by Date"
 msgstr ""
 
-#: include/features.php:40
+#: include/features.php:75
 msgid "Ability to select posts by date ranges"
 msgstr ""
 
-#: include/features.php:41
+#: include/features.php:76 include/features.php:106
+msgid "List Forums"
+msgstr ""
+
+#: include/features.php:76
+msgid "Enable widget to display the forums your are connected with"
+msgstr ""
+
+#: include/features.php:77
 msgid "Group Filter"
 msgstr ""
 
-#: include/features.php:41
+#: include/features.php:77
 msgid "Enable widget to display Network posts only from selected group"
 msgstr ""
 
-#: include/features.php:42
+#: include/features.php:78
 msgid "Network Filter"
 msgstr ""
 
-#: include/features.php:42
+#: include/features.php:78
 msgid "Enable widget to display Network posts only from selected network"
 msgstr ""
 
-#: include/features.php:43
+#: include/features.php:79
 msgid "Save search terms for re-use"
 msgstr ""
 
-#: include/features.php:48
+#: include/features.php:84
 msgid "Network Tabs"
 msgstr ""
 
-#: include/features.php:49
+#: include/features.php:85
 msgid "Network Personal Tab"
 msgstr ""
 
-#: include/features.php:49
+#: include/features.php:85
 msgid "Enable tab to display only Network posts that you've interacted on"
 msgstr ""
 
-#: include/features.php:50
+#: include/features.php:86
 msgid "Network New Tab"
 msgstr ""
 
-#: include/features.php:50
+#: include/features.php:86
 msgid "Enable tab to display only new Network posts (from the last 12 hours)"
 msgstr ""
 
-#: include/features.php:51
+#: include/features.php:87
 msgid "Network Shared Links Tab"
 msgstr ""
 
-#: include/features.php:51
+#: include/features.php:87
 msgid "Enable tab to display only Network posts with links in them"
 msgstr ""
 
-#: include/features.php:56
+#: include/features.php:92
 msgid "Post/Comment Tools"
 msgstr ""
 
-#: include/features.php:57
+#: include/features.php:93
 msgid "Multiple Deletion"
 msgstr ""
 
-#: include/features.php:57
+#: include/features.php:93
 msgid "Select and delete multiple posts/comments at once"
 msgstr ""
 
-#: include/features.php:58
+#: include/features.php:94
 msgid "Edit Sent Posts"
 msgstr ""
 
-#: include/features.php:58
+#: include/features.php:94
 msgid "Edit and correct posts and comments after sending"
 msgstr ""
 
-#: include/features.php:59
+#: include/features.php:95
 msgid "Tagging"
 msgstr ""
 
-#: include/features.php:59
+#: include/features.php:95
 msgid "Ability to tag existing posts"
 msgstr ""
 
-#: include/features.php:60
+#: include/features.php:96
 msgid "Post Categories"
 msgstr ""
 
-#: include/features.php:60
+#: include/features.php:96
 msgid "Add categories to your posts"
 msgstr ""
 
-#: include/features.php:61
+#: include/features.php:97
 msgid "Ability to file posts under folders"
 msgstr ""
 
-#: include/features.php:62
+#: include/features.php:98
 msgid "Dislike Posts"
 msgstr ""
 
-#: include/features.php:62
+#: include/features.php:98
 msgid "Ability to dislike posts/comments"
 msgstr ""
 
-#: include/features.php:63
+#: include/features.php:99
 msgid "Star Posts"
 msgstr ""
 
-#: include/features.php:63
+#: include/features.php:99
 msgid "Ability to mark special posts with a star indicator"
 msgstr ""
 
-#: include/features.php:64
+#: include/features.php:100
 msgid "Mute Post Notifications"
 msgstr ""
 
-#: include/features.php:64
+#: include/features.php:100
 msgid "Ability to mute notifications for a thread"
 msgstr ""
 
+#: include/features.php:105
+msgid "Advanced Profile Settings"
+msgstr ""
+
+#: include/features.php:106
+msgid "Show visitors public community forums at the Advanced Profile Page"
+msgstr ""
+
 #: include/follow.php:77
 msgid "Connect URL missing."
 msgstr ""
@@ -6553,23 +6581,27 @@ msgstr ""
 msgid "Default privacy group for new contacts"
 msgstr ""
 
-#: include/group.php:228
+#: include/group.php:239
 msgid "Everybody"
 msgstr ""
 
-#: include/group.php:251
+#: include/group.php:262
 msgid "edit"
 msgstr ""
 
-#: include/group.php:273
+#: include/group.php:285
+msgid "Edit groups"
+msgstr ""
+
+#: include/group.php:287
 msgid "Edit group"
 msgstr ""
 
-#: include/group.php:274
+#: include/group.php:288
 msgid "Create a new group"
 msgstr ""
 
-#: include/group.php:277
+#: include/group.php:291
 msgid "Contacts not in any group"
 msgstr ""
 
@@ -6638,176 +6670,184 @@ msgstr ""
 msgid "%1$d %2$s ago"
 msgstr ""
 
-#: include/datetime.php:474 include/items.php:2484
+#: include/datetime.php:474 include/items.php:2444
 #, php-format
 msgid "%s's birthday"
 msgstr ""
 
-#: include/datetime.php:475 include/items.php:2485
+#: include/datetime.php:475 include/items.php:2445
 #, php-format
 msgid "Happy Birthday %s"
 msgstr ""
 
-#: include/identity.php:38
+#: include/identity.php:43
 msgid "Requested account is not available."
 msgstr ""
 
-#: include/identity.php:121 include/identity.php:255 include/identity.php:608
+#: include/identity.php:126 include/identity.php:265 include/identity.php:625
 msgid "Edit profile"
 msgstr ""
 
-#: include/identity.php:220
+#: include/identity.php:225
+msgid "Atom feed"
+msgstr ""
+
+#: include/identity.php:230
 msgid "Message"
 msgstr ""
 
-#: include/identity.php:226 include/nav.php:185
+#: include/identity.php:236 include/nav.php:185
 msgid "Profiles"
 msgstr ""
 
-#: include/identity.php:226
+#: include/identity.php:236
 msgid "Manage/edit profiles"
 msgstr ""
 
-#: include/identity.php:342
+#: include/identity.php:353
 msgid "Network:"
 msgstr ""
 
-#: include/identity.php:374 include/identity.php:460
+#: include/identity.php:385 include/identity.php:471
 msgid "g A l F d"
 msgstr ""
 
-#: include/identity.php:375 include/identity.php:461
+#: include/identity.php:386 include/identity.php:472
 msgid "F d"
 msgstr ""
 
-#: include/identity.php:420 include/identity.php:507
+#: include/identity.php:431 include/identity.php:518
 msgid "[today]"
 msgstr ""
 
-#: include/identity.php:432
+#: include/identity.php:443
 msgid "Birthday Reminders"
 msgstr ""
 
-#: include/identity.php:433
+#: include/identity.php:444
 msgid "Birthdays this week:"
 msgstr ""
 
-#: include/identity.php:494
+#: include/identity.php:505
 msgid "[No description]"
 msgstr ""
 
-#: include/identity.php:518
+#: include/identity.php:529
 msgid "Event Reminders"
 msgstr ""
 
-#: include/identity.php:519
+#: include/identity.php:530
 msgid "Events this week:"
 msgstr ""
 
-#: include/identity.php:546
+#: include/identity.php:558
 msgid "j F, Y"
 msgstr ""
 
-#: include/identity.php:547
+#: include/identity.php:559
 msgid "j F"
 msgstr ""
 
-#: include/identity.php:554
+#: include/identity.php:566
 msgid "Birthday:"
 msgstr ""
 
-#: include/identity.php:558
+#: include/identity.php:570
 msgid "Age:"
 msgstr ""
 
-#: include/identity.php:567
+#: include/identity.php:579
 #, php-format
 msgid "for %1$d %2$s"
 msgstr ""
 
-#: include/identity.php:580
+#: include/identity.php:592
 msgid "Religion:"
 msgstr ""
 
-#: include/identity.php:584
+#: include/identity.php:596
 msgid "Hobbies/Interests:"
 msgstr ""
 
-#: include/identity.php:591
+#: include/identity.php:603
 msgid "Contact information and Social Networks:"
 msgstr ""
 
-#: include/identity.php:593
+#: include/identity.php:605
 msgid "Musical interests:"
 msgstr ""
 
-#: include/identity.php:595
+#: include/identity.php:607
 msgid "Books, literature:"
 msgstr ""
 
-#: include/identity.php:597
+#: include/identity.php:609
 msgid "Television:"
 msgstr ""
 
-#: include/identity.php:599
+#: include/identity.php:611
 msgid "Film/dance/culture/entertainment:"
 msgstr ""
 
-#: include/identity.php:601
+#: include/identity.php:613
 msgid "Love/Romance:"
 msgstr ""
 
-#: include/identity.php:603
+#: include/identity.php:615
 msgid "Work/employment:"
 msgstr ""
 
-#: include/identity.php:605
+#: include/identity.php:617
 msgid "School/education:"
 msgstr ""
 
-#: include/identity.php:633 include/nav.php:75
+#: include/identity.php:621
+msgid "Forums:"
+msgstr ""
+
+#: include/identity.php:650 include/nav.php:75
 msgid "Status"
 msgstr ""
 
-#: include/identity.php:636
+#: include/identity.php:653
 msgid "Status Messages and Posts"
 msgstr ""
 
-#: include/identity.php:644
+#: include/identity.php:661
 msgid "Profile Details"
 msgstr ""
 
-#: include/identity.php:657 include/identity.php:660 include/nav.php:78
+#: include/identity.php:674 include/identity.php:677 include/nav.php:78
 msgid "Videos"
 msgstr ""
 
-#: include/identity.php:672 include/nav.php:140
+#: include/identity.php:689 include/nav.php:140
 msgid "Events and Calendar"
 msgstr ""
 
-#: include/identity.php:680
+#: include/identity.php:697
 msgid "Only You Can See This"
 msgstr ""
 
-#: include/acl_selectors.php:324
+#: include/acl_selectors.php:325
 msgid "Post to Email"
 msgstr ""
 
-#: include/acl_selectors.php:329
+#: include/acl_selectors.php:330
 #, php-format
 msgid "Connectors disabled, since \"%s\" is enabled."
 msgstr ""
 
-#: include/acl_selectors.php:335
+#: include/acl_selectors.php:336
 msgid "Visible to everybody"
 msgstr ""
 
-#: include/acl_selectors.php:336 view/theme/diabook/config.php:142
+#: include/acl_selectors.php:337 view/theme/diabook/config.php:142
 #: view/theme/diabook/theme.php:621 view/theme/vier/config.php:103
 msgid "show"
 msgstr ""
 
-#: include/acl_selectors.php:337 view/theme/diabook/config.php:142
+#: include/acl_selectors.php:338 view/theme/diabook/config.php:142
 #: view/theme/diabook/theme.php:621 view/theme/vier/config.php:103
 msgid "don't show"
 msgstr ""
@@ -6820,31 +6860,31 @@ msgstr ""
 msgid "stopped following"
 msgstr ""
 
-#: include/Contact.php:334 include/conversation.php:911
+#: include/Contact.php:361 include/conversation.php:911
 msgid "View Status"
 msgstr ""
 
-#: include/Contact.php:336 include/conversation.php:913
+#: include/Contact.php:363 include/conversation.php:913
 msgid "View Photos"
 msgstr ""
 
-#: include/Contact.php:337 include/conversation.php:914
+#: include/Contact.php:364 include/conversation.php:914
 msgid "Network Posts"
 msgstr ""
 
-#: include/Contact.php:338 include/conversation.php:915
+#: include/Contact.php:365 include/conversation.php:915
 msgid "Edit Contact"
 msgstr ""
 
-#: include/Contact.php:339
+#: include/Contact.php:366
 msgid "Drop Contact"
 msgstr ""
 
-#: include/Contact.php:340 include/conversation.php:916
+#: include/Contact.php:367 include/conversation.php:916
 msgid "Send PM"
 msgstr ""
 
-#: include/Contact.php:341 include/conversation.php:920
+#: include/Contact.php:368 include/conversation.php:920
 msgid "Poke"
 msgstr ""
 
@@ -7031,278 +7071,283 @@ msgstr ""
 msgid "Private post"
 msgstr ""
 
-#: include/conversation.php:1377
+#: include/conversation.php:1386
 msgid "View all"
 msgstr ""
 
-#: include/conversation.php:1399
+#: include/conversation.php:1408
 msgid "Like"
 msgid_plural "Likes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: include/conversation.php:1402
+#: include/conversation.php:1411
 msgid "Dislike"
 msgid_plural "Dislikes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: include/conversation.php:1408
+#: include/conversation.php:1417
 msgid "Not Attending"
 msgid_plural "Not Attending"
 msgstr[0] ""
 msgstr[1] ""
 
-#: include/conversation.php:1411 include/profile_selectors.php:6
+#: include/conversation.php:1420 include/profile_selectors.php:6
 msgid "Undecided"
 msgid_plural "Undecided"
 msgstr[0] ""
 msgstr[1] ""
 
+#: include/forums.php:105 include/text.php:1015 include/nav.php:126
+#: view/theme/vier/theme.php:259
+msgid "Forums"
+msgstr ""
+
+#: include/forums.php:107 view/theme/vier/theme.php:261
+msgid "External link to forum"
+msgstr ""
+
 #: include/network.php:967
 msgid "view full size"
 msgstr ""
 
-#: include/text.php:299
+#: include/text.php:303
 msgid "newer"
 msgstr ""
 
-#: include/text.php:301
+#: include/text.php:305
 msgid "older"
 msgstr ""
 
-#: include/text.php:306
+#: include/text.php:310
 msgid "prev"
 msgstr ""
 
-#: include/text.php:308
+#: include/text.php:312
 msgid "first"
 msgstr ""
 
-#: include/text.php:340
+#: include/text.php:344
 msgid "last"
 msgstr ""
 
-#: include/text.php:343
+#: include/text.php:347
 msgid "next"
 msgstr ""
 
-#: include/text.php:398
+#: include/text.php:402
 msgid "Loading more entries..."
 msgstr ""
 
-#: include/text.php:399
+#: include/text.php:403
 msgid "The end"
 msgstr ""
 
-#: include/text.php:890
+#: include/text.php:894
 msgid "No contacts"
 msgstr ""
 
-#: include/text.php:905
+#: include/text.php:909
 #, php-format
 msgid "%d Contact"
 msgid_plural "%d Contacts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: include/text.php:1003 include/nav.php:121
+#: include/text.php:1010 include/nav.php:121
 msgid "Full Text"
 msgstr ""
 
-#: include/text.php:1004 include/nav.php:122
+#: include/text.php:1011 include/nav.php:122
 msgid "Tags"
 msgstr ""
 
-#: include/text.php:1008 include/nav.php:126
-msgid "Forums"
-msgstr ""
-
-#: include/text.php:1059
+#: include/text.php:1066
 msgid "poke"
 msgstr ""
 
-#: include/text.php:1059
+#: include/text.php:1066
 msgid "poked"
 msgstr ""
 
-#: include/text.php:1060
+#: include/text.php:1067
 msgid "ping"
 msgstr ""
 
-#: include/text.php:1060
+#: include/text.php:1067
 msgid "pinged"
 msgstr ""
 
-#: include/text.php:1061
+#: include/text.php:1068
 msgid "prod"
 msgstr ""
 
-#: include/text.php:1061
+#: include/text.php:1068
 msgid "prodded"
 msgstr ""
 
-#: include/text.php:1062
+#: include/text.php:1069
 msgid "slap"
 msgstr ""
 
-#: include/text.php:1062
+#: include/text.php:1069
 msgid "slapped"
 msgstr ""
 
-#: include/text.php:1063
+#: include/text.php:1070
 msgid "finger"
 msgstr ""
 
-#: include/text.php:1063
+#: include/text.php:1070
 msgid "fingered"
 msgstr ""
 
-#: include/text.php:1064
+#: include/text.php:1071
 msgid "rebuff"
 msgstr ""
 
-#: include/text.php:1064
+#: include/text.php:1071
 msgid "rebuffed"
 msgstr ""
 
-#: include/text.php:1078
+#: include/text.php:1085
 msgid "happy"
 msgstr ""
 
-#: include/text.php:1079
+#: include/text.php:1086
 msgid "sad"
 msgstr ""
 
-#: include/text.php:1080
+#: include/text.php:1087
 msgid "mellow"
 msgstr ""
 
-#: include/text.php:1081
+#: include/text.php:1088
 msgid "tired"
 msgstr ""
 
-#: include/text.php:1082
+#: include/text.php:1089
 msgid "perky"
 msgstr ""
 
-#: include/text.php:1083
+#: include/text.php:1090
 msgid "angry"
 msgstr ""
 
-#: include/text.php:1084
+#: include/text.php:1091
 msgid "stupified"
 msgstr ""
 
-#: include/text.php:1085
+#: include/text.php:1092
 msgid "puzzled"
 msgstr ""
 
-#: include/text.php:1086
+#: include/text.php:1093
 msgid "interested"
 msgstr ""
 
-#: include/text.php:1087
+#: include/text.php:1094
 msgid "bitter"
 msgstr ""
 
-#: include/text.php:1088
+#: include/text.php:1095
 msgid "cheerful"
 msgstr ""
 
-#: include/text.php:1089
+#: include/text.php:1096
 msgid "alive"
 msgstr ""
 
-#: include/text.php:1090
+#: include/text.php:1097
 msgid "annoyed"
 msgstr ""
 
-#: include/text.php:1091
+#: include/text.php:1098
 msgid "anxious"
 msgstr ""
 
-#: include/text.php:1092
+#: include/text.php:1099
 msgid "cranky"
 msgstr ""
 
-#: include/text.php:1093
+#: include/text.php:1100
 msgid "disturbed"
 msgstr ""
 
-#: include/text.php:1094
+#: include/text.php:1101
 msgid "frustrated"
 msgstr ""
 
-#: include/text.php:1095
+#: include/text.php:1102
 msgid "motivated"
 msgstr ""
 
-#: include/text.php:1096
+#: include/text.php:1103
 msgid "relaxed"
 msgstr ""
 
-#: include/text.php:1097
+#: include/text.php:1104
 msgid "surprised"
 msgstr ""
 
-#: include/text.php:1490
+#: include/text.php:1497
 msgid "bytes"
 msgstr ""
 
-#: include/text.php:1522 include/text.php:1534
+#: include/text.php:1529 include/text.php:1541
 msgid "Click to open/close"
 msgstr ""
 
-#: include/text.php:1708
+#: include/text.php:1715
 msgid "View on separate page"
 msgstr ""
 
-#: include/text.php:1709
+#: include/text.php:1716
 msgid "view on separate page"
 msgstr ""
 
-#: include/text.php:1990
+#: include/text.php:1997
 msgid "activity"
 msgstr ""
 
-#: include/text.php:1993
+#: include/text.php:2000
 msgid "post"
 msgstr ""
 
-#: include/text.php:2161
+#: include/text.php:2168
 msgid "Item filed"
 msgstr ""
 
-#: include/bbcode.php:474 include/bbcode.php:1132 include/bbcode.php:1133
+#: include/bbcode.php:483 include/bbcode.php:1143 include/bbcode.php:1144
 msgid "Image/photo"
 msgstr ""
 
-#: include/bbcode.php:572
+#: include/bbcode.php:581
 #, php-format
 msgid "<a href=\"%1$s\" target=\"_blank\">%2$s</a> %3$s"
 msgstr ""
 
-#: include/bbcode.php:606
+#: include/bbcode.php:615
 #, php-format
 msgid ""
 "<span><a href=\"%s\" target=\"_blank\">%s</a> wrote the following <a href="
 "\"%s\" target=\"_blank\">post</a>"
 msgstr ""
 
-#: include/bbcode.php:1092 include/bbcode.php:1112
+#: include/bbcode.php:1103 include/bbcode.php:1123
 msgid "$1 wrote:"
 msgstr ""
 
-#: include/bbcode.php:1141 include/bbcode.php:1142
+#: include/bbcode.php:1152 include/bbcode.php:1153
 msgid "Encrypted content"
 msgstr ""
 
-#: include/notifier.php:840 include/delivery.php:456
+#: include/notifier.php:843 include/delivery.php:458
 msgid "(no subject)"
 msgstr ""
 
-#: include/notifier.php:850 include/delivery.php:467 include/enotify.php:37
+#: include/notifier.php:853 include/delivery.php:469 include/enotify.php:37
 msgid "noreply"
 msgstr ""
 
@@ -7395,7 +7440,7 @@ msgstr ""
 msgid "Redmatrix"
 msgstr ""
 
-#: include/Scrape.php:603
+#: include/Scrape.php:610
 msgid " on Last.fm"
 msgstr ""
 
@@ -7407,15 +7452,15 @@ msgstr ""
 msgid "Finishes:"
 msgstr ""
 
-#: include/plugin.php:458 include/plugin.php:460
+#: include/plugin.php:522 include/plugin.php:524
 msgid "Click here to upgrade."
 msgstr ""
 
-#: include/plugin.php:466
+#: include/plugin.php:530
 msgid "This action exceeds the limits set by your subscription plan."
 msgstr ""
 
-#: include/plugin.php:471
+#: include/plugin.php:535
 msgid "This action is not available under your subscription plan."
 msgstr ""
 
@@ -7572,42 +7617,42 @@ msgid "Site map"
 msgstr ""
 
 #: include/api.php:321 include/api.php:332 include/api.php:441
-#: include/api.php:1151 include/api.php:1153
+#: include/api.php:1160 include/api.php:1162
 msgid "User not found."
 msgstr ""
 
-#: include/api.php:799
+#: include/api.php:808
 #, php-format
 msgid "Daily posting limit of %d posts reached. The post was rejected."
 msgstr ""
 
-#: include/api.php:818
+#: include/api.php:827
 #, php-format
 msgid "Weekly posting limit of %d posts reached. The post was rejected."
 msgstr ""
 
-#: include/api.php:837
+#: include/api.php:846
 #, php-format
 msgid "Monthly posting limit of %d posts reached. The post was rejected."
 msgstr ""
 
-#: include/api.php:1360
+#: include/api.php:1369
 msgid "There is no status with this id."
 msgstr ""
 
-#: include/api.php:1434
+#: include/api.php:1443
 msgid "There is no conversation with this id."
 msgstr ""
 
-#: include/api.php:1713
+#: include/api.php:1722
 msgid "Invalid item."
 msgstr ""
 
-#: include/api.php:1723
+#: include/api.php:1732
 msgid "Invalid action. "
 msgstr ""
 
-#: include/api.php:1731
+#: include/api.php:1740
 msgid "DB error"
 msgstr ""
 
@@ -7655,37 +7700,38 @@ msgstr ""
 msgid "Your \"nickname\" can only contain \"a-z\", \"0-9\" and \"_\"."
 msgstr ""
 
-#: include/user.php:146 include/user.php:244
+#: include/user.php:147 include/user.php:245
 msgid "Nickname is already registered. Please choose another."
 msgstr ""
 
-#: include/user.php:156
+#: include/user.php:157
 msgid ""
 "Nickname was once registered here and may not be re-used. Please choose "
 "another."
 msgstr ""
 
-#: include/user.php:172
+#: include/user.php:173
 msgid "SERIOUS ERROR: Generation of security keys failed."
 msgstr ""
 
-#: include/user.php:230
+#: include/user.php:231
 msgid "An error occurred during registration. Please try again."
 msgstr ""
 
-#: include/user.php:255 view/theme/duepuntozero/config.php:44
+#: include/user.php:256 view/theme/clean/config.php:56
+#: view/theme/duepuntozero/config.php:44
 msgid "default"
 msgstr ""
 
-#: include/user.php:265
+#: include/user.php:266
 msgid "An error occurred creating your default profile. Please try again."
 msgstr ""
 
-#: include/user.php:297 include/user.php:301 include/profile_selectors.php:42
+#: include/user.php:299 include/user.php:303 include/profile_selectors.php:42
 msgid "Friends"
 msgstr ""
 
-#: include/user.php:385
+#: include/user.php:387
 #, php-format
 msgid ""
 "\n"
@@ -7694,7 +7740,7 @@ msgid ""
 "\t"
 msgstr ""
 
-#: include/user.php:389
+#: include/user.php:391
 #, php-format
 msgid ""
 "\n"
@@ -7737,11 +7783,11 @@ msgstr ""
 msgid "Attachments:"
 msgstr ""
 
-#: include/items.php:4933
+#: include/items.php:4871
 msgid "Do you really want to delete this item?"
 msgstr ""
 
-#: include/items.php:5208
+#: include/items.php:5146
 msgid "Archives"
 msgstr ""
 
@@ -8319,6 +8365,7 @@ msgid "Set theme width"
 msgstr ""
 
 #: view/theme/cleanzero/config.php:86 view/theme/quattro/config.php:68
+#: view/theme/clean/config.php:88
 msgid "Color scheme"
 msgstr ""
 
@@ -8372,7 +8419,7 @@ msgstr ""
 
 #: view/theme/diabook/config.php:158 view/theme/diabook/theme.php:130
 #: view/theme/diabook/theme.php:544 view/theme/diabook/theme.php:624
-#: view/theme/vier/config.php:111 view/theme/vier/theme.php:230
+#: view/theme/vier/config.php:111
 msgid "Community Pages"
 msgstr ""
 
@@ -8383,7 +8430,7 @@ msgstr ""
 
 #: view/theme/diabook/config.php:160 view/theme/diabook/theme.php:391
 #: view/theme/diabook/theme.php:626 view/theme/vier/config.php:112
-#: view/theme/vier/theme.php:142
+#: view/theme/vier/theme.php:156
 msgid "Community Profiles"
 msgstr ""
 
@@ -8394,19 +8441,19 @@ msgstr ""
 
 #: view/theme/diabook/config.php:162 view/theme/diabook/theme.php:606
 #: view/theme/diabook/theme.php:628 view/theme/vier/config.php:114
-#: view/theme/vier/theme.php:348
+#: view/theme/vier/theme.php:377
 msgid "Connect Services"
 msgstr ""
 
 #: view/theme/diabook/config.php:163 view/theme/diabook/theme.php:523
 #: view/theme/diabook/theme.php:629 view/theme/vier/config.php:115
-#: view/theme/vier/theme.php:189
+#: view/theme/vier/theme.php:203
 msgid "Find Friends"
 msgstr ""
 
 #: view/theme/diabook/config.php:164 view/theme/diabook/theme.php:412
 #: view/theme/diabook/theme.php:630 view/theme/vier/config.php:116
-#: view/theme/vier/theme.php:171
+#: view/theme/vier/theme.php:185
 msgid "Last users"
 msgstr ""
 
@@ -8428,7 +8475,7 @@ msgstr ""
 msgid "Your personal photos"
 msgstr ""
 
-#: view/theme/diabook/theme.php:524 view/theme/vier/theme.php:190
+#: view/theme/diabook/theme.php:524 view/theme/vier/theme.php:204
 msgid "Local Directory"
 msgstr ""
 
@@ -8440,6 +8487,56 @@ msgstr ""
 msgid "Show/hide boxes at right-hand column:"
 msgstr ""
 
+#: view/theme/clean/config.php:57
+msgid "Midnight"
+msgstr ""
+
+#: view/theme/clean/config.php:58
+msgid "Zenburn"
+msgstr ""
+
+#: view/theme/clean/config.php:59
+msgid "Bootstrap"
+msgstr ""
+
+#: view/theme/clean/config.php:60
+msgid "Shades of Pink"
+msgstr ""
+
+#: view/theme/clean/config.php:61
+msgid "Lime and Orange"
+msgstr ""
+
+#: view/theme/clean/config.php:62
+msgid "GeoCities Retro"
+msgstr ""
+
+#: view/theme/clean/config.php:86
+msgid "Background Image"
+msgstr ""
+
+#: view/theme/clean/config.php:86
+msgid ""
+"The URL to a picture (e.g. from your photo album) that should be used as "
+"background image."
+msgstr ""
+
+#: view/theme/clean/config.php:87
+msgid "Background Color"
+msgstr ""
+
+#: view/theme/clean/config.php:87
+msgid "HEX value for the background color. Don't include the #"
+msgstr ""
+
+#: view/theme/clean/config.php:89
+msgid "font size"
+msgstr ""
+
+#: view/theme/clean/config.php:89
+msgid "base font size for your interface"
+msgstr ""
+
 #: view/theme/vier/config.php:64
 msgid "Comma separated list of helper forums"
 msgstr ""
@@ -8448,11 +8545,7 @@ msgstr ""
 msgid "Set style"
 msgstr ""
 
-#: view/theme/vier/theme.php:234
-msgid "External link to forum"
-msgstr ""
-
-#: view/theme/vier/theme.php:266
+#: view/theme/vier/theme.php:295
 msgid "Quick Start"
 msgstr ""
 
index 24d0819db5b82d81619351afc04dd1e0b844e2de..63575ff21bade166439302e00edd7985f8a37763 100644 (file)
@@ -288,28 +288,28 @@ ul.credits li {
 }
 
 /* forumlist widget */
-#hide-forum-list {
-  opacity: 0.3;
-  filter:alpha(opacity=30);
+.forumlist-img {
+  height: 20px;
+  width: 20px;
+  vertical-align: middle;
 }
 
-#hide-forum-list:hover {
-  opacity: 1.0;
-  filter:alpha(opacity=100);
+#forum-widget-collapse {
+  opacity: 0.3;
 }
 
-
-#forumlist-settings-label, #forumlist-random-label, #forumlist-profile-label, #forumlist-network-label {
-  float: left;
-  width: 200px;
-  margin-bottom: 25px;
+#forum-widget-collapse:hover {
+  opacity: 1.0;
 }
 
-#forumlist-max-forumlists, #forumlist-random, #forumlist-profile, #forumlist-network {
-  float: left;
+.crepair-label {
+        margin-top: 10px;
+        float: left;
+        width: 250px;
 }
 
-.forumlist-img {
-  height: 20px;
-  width: 20px;
+.crepair-input {
+        margin-top: 10px;
+        float: left;
+        width: 200px;
 }
index 13270e2ebae29607246f055f354cc939876b2e83..c1e70614ce65518a5ef2bf870c5ea9a87f82c17a 100644 (file)
        {{include file="field_input.tpl" field=$poll_interval}}
        {{include file="field_input.tpl" field=$maxloadavg}}
        {{include file="field_input.tpl" field=$maxloadavg_frontend}}
+       {{include file="field_input.tpl" field=$optimize_max_tablesize}}
        {{include file="field_input.tpl" field=$abandon_days}}
        {{include file="field_input.tpl" field=$lockpath}}
        {{include file="field_input.tpl" field=$temppath}}
index 95e8e5d29acec265dcc76d3ec4aa06031529dd2f..0733c9e18752d60eb6b4cd770e863acaf9b647c5 100644 (file)
@@ -1,5 +1,3 @@
-
-
 <h2>{{$header}}</h2>
 
 <div id="contact-edit-wrapper" >
@@ -19,8 +17,6 @@
                                {{if $relation_text}}
                                        <li><div id="contact-edit-rel">{{$relation_text}}</div></li>
                                {{/if}}
-                               <li><div id="contact-edit-nettype">{{$nettype}}</div></li>
-                               <li><div id="contact-edit-profileurl">{{$profileurllabel}}: <a href="{{$url}}">{{$profileurl}}</a></div></li>
                                {{if $lost_contact}}
                                        <li><div id="lost-contact-message">{{$lost_contact}}</div></li>
                                {{/if}}
@@ -37,6 +33,7 @@
                                        <li><div id="archive-message">{{$archived}}</div></li>
                                {{/if}}
                        </ul>
+
                        <ul>
 
                                {{if $common_text}}
@@ -47,7 +44,7 @@
                                {{/if}}
 
 
-                               <li><a href="network/0?nets=all&cid={{$contact_id}}" id="contact-edit-view-recent">{{$lblrecent}}</a></li>
+                               <!-- <li><a href="network/0?nets=all&cid={{$contact_id}}" id="contact-edit-view-recent">{{$lblrecent}}</a></li> -->
                                {{if $lblsuggest}}
                                        <li><a href="fsuggest/{{$contact_id}}" id="contact-edit-suggest">{{$lblsuggest}}</a></li>
                                {{/if}}
                                {{/if}}
 
                        </ul>
+
+                       <dl><dt>{{$profileurllabel}}</dt><dd><a target="blank" href="{{$url}}">{{$profileurl}}</a></dd></dl>
+                       {{if $location}}<dl><dt>{{$location_label}}</dt><dd>{{$location}}</dd></dl>{{/if}}
+                       {{if $keywords}}<dl><dt>{{$keywords_label}}</dt><dd>{{$keywords}}</dd></dl>{{/if}}
+                       {{if $about}}<dl><dt>{{$about_label}}</dt><dd>{{$about}}</dd></dl>{{/if}}
                </div>
        </div>
        <div id="contact-edit-nav-end"></div>
 
+<hr />
 
 <form action="contacts/{{$contact_id}}" method="post" >
 <input type="hidden" name="contact_id" value="{{$contact_id}}">
index d500f04720b276b31ee0d161890366c1ca4d2702..1d2098331096f10ab59f8b8f86bcc1ce8f8ba4a4 100644 (file)
@@ -1,16 +1,17 @@
-
 {{include file="section_title.tpl"}}
 
+{{$tab_str}}
+
 <div class="crepair-error-message">{{$warning}}</div><br>
 <div class="crepair-return">
        {{$info}}<br>
-       <a href="{{$returnaddr}}">{{$return}}</a>
+       <!-- <a href="{{$returnaddr}}">{{$return}}</a> -->
 </div>
 <br />
 
 <form id="crepair-form" action="crepair/{{$contact_id}}" method="post" >
 
-<h4>{{$contact_name}}</h4>
+<!-- <h4>{{$contact_name}}</h4> -->
 
 <div id="contact-update-profile-wrapper">
 {{if $update_profile}}
index 4905c2fa1a1346fc2c8ccce86d67b00cceecd340..466882370f37d3961b2f0ae2522c70a372e199e6 100644 (file)
@@ -1,38 +1,42 @@
 <div class="widget" id="group-sidebar">
-<h3>{{$title}}</h3>
+       <h3>{{$title}}</h3>
 
-<div id="sidebar-group-list">
-       <ul role="menu" id="sidebar-group-ul">
-               {{foreach $groups as $group}}
-                       <li role="menuitem" class="sidebar-group-li group-{{$group.id}}">
-                               {{if $group.cid}}
-                                       <input type="checkbox"
-                                               class="{{if $group.selected}}ticked{{else}}unticked {{/if}} action"
-                                               onclick="contactgroupChangeMember('{{$group.id}}','{{$group.cid}}');return true;"
-                                               {{if $group.ismember}}checked="checked"{{/if}}
-                                       />
-                               {{/if}}
-                               {{if $group.edit}}
-                                       <a class="groupsideedit" href="{{$group.edit.href}}" title="{{$edittext}}"><span id="edit-sidebar-group-element-{{$group.id}}" class="group-edit-icon iconspacer small-pencil"><span class="sr-only">{{$edittext}}</span></span></a>
-                               {{/if}}
-                               <a id="sidebar-group-element-{{$group.id}}" class="sidebar-group-element {{if $group.selected}}group-selected{{/if}}" href="{{$group.href}}">{{$group.text}}</a>
-                               <span class="notify"></span>
-                       </li>
-               {{/foreach}}
-       </ul>
+       <div id="sidebar-group-list">
+               <ul role="menu" id="sidebar-group-ul">
+                       {{foreach $groups as $group}}
+                               <li role="menuitem" class="sidebar-group-li group-{{$group.id}}">
+                                       {{if ! $newgroup}}<span class="notify badge pull-right"></span>{{/if}}
+                                       {{if $group.cid}}
+                                               <input type="checkbox"
+                                                       class="{{if $group.selected}}ticked{{else}}unticked {{/if}} action"
+                                                       onclick="contactgroupChangeMember('{{$group.id}}','{{$group.cid}}');return true;"
+                                                       {{if $group.ismember}}checked="checked"{{/if}}
+                                               />
+                                       {{/if}}
+                                       {{if $group.edit}}
+                                               <a class="groupsideedit" href="{{$group.edit.href}}" title="{{$edittext}}">
+                                                       <span id="edit-sidebar-group-element-{{$group.id}}" class="group-edit-icon iconspacer small-pencil"><span class="sr-only">{{$edittext}}</span></span>
+                                               </a>
+                                       {{/if}}
+                                       <a id="sidebar-group-element-{{$group.id}}" class="sidebar-group-element {{if $group.selected}}group-selected{{/if}}" href="{{$group.href}}">{{$group.text}}</a>
+                               </li>
+                       {{/foreach}}
+               </ul>
        </div>
-  <div id="sidebar-new-group">
-  <a onclick="javascript:$('#group-new-form').fadeIn('fast');return false;">{{$createtext}}</a>
-  <form id="group-new-form" action="group/new" method="post" style="display:none;">
-   <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
-   <input name="groupname" id="id_groupname" placeholder="{{$creategroup}}">
-  </form>
-  </div>
-  {{if $ungrouped}}
-  <div id="sidebar-ungrouped">
-  <a href="nogroup">{{$ungrouped}}</a>
-  </div>
-  {{/if}}
+
+       {{if $newgroup}}
+       <div id="sidebar-new-group">
+               <a onclick="javascript:$('#group-new-form').fadeIn('fast');return false;">{{$createtext}}</a>
+               <form id="group-new-form" action="group/new" method="post" style="display:none;">
+                       <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
+                       <input name="groupname" id="id_groupname" placeholder="{{$creategroup}}">
+               </form>
+       </div>
+       {{else}}
+       <div id="sidebar-edit-groups"><a href="{{$grouppage}}">{{$editgroupstext}}</a></div>
+       {{/if}}
+
+       {{if $ungrouped}}<div id="sidebar-ungrouped"><a href="nogroup">{{$ungrouped}}</a></div>{{/if}}
 </div>
 
 
index e23c4027548212284f74df45226598c331fcab98..dd27092e9badb689925bc4bc940c5be704a2237e 100644 (file)
@@ -11,6 +11,7 @@
                        <div class="identity-match-photo" id="identity-match-photo-{{$id.uid}}">
                                <button name="identity" value="{{$id.uid}}" onclick="this.form.submit();" title="{{$id.username}}">
                                        <img src="{{$id.thumb}}" alt="{{$id.username}}" />
+                                       {{if $id.notifications}}<span class="manage-notify">{{$id.notifications}}</span>{{/if}}
                                </button>
                        </div>
 
@@ -22,7 +23,6 @@
                                </div>
                                <div class="identity-match-details" id="identity-match-nick-{{$id.uid}}">({{$id.nickname}})</div>
                        </div>
-
                        <div class="identity-match-end"></div>
                </div>
        {{/foreach}}
index fe5762973fbb0113c8d3b7b5283d85f2a1576d3b..fa209bf46fa35e83da9b1d1b631e5bbb9a80f3db 100644 (file)
@@ -3,7 +3,7 @@
 
        <div class="fn label p-name">{{$profile.name}}</div>
        
-                               
+       {{if $profile.faddr}}<div class="p-faddr">{{$profile.faddr}}</div>{{/if}}
        
        {{if $pdesc}}<div class="title">{{$profile.pdesc}}</div>{{/if}}
 
@@ -55,6 +55,9 @@
                        {{if $wallmessage}}
                                <li><a id="wallmessage-link" href="wallmessage/{{$profile.nickname}}">{{$wallmessage}}</a></li>
                        {{/if}}
+                       {{if $subscribe_feed}}
+                               <li><a id="subscribe-feed-link" href="dfrn_poll/{{$profile.nickname}}">{{$subscribe_feed}}</a></li>
+                       {{/if}}
                </ul>
        </div>
 </div>
index 455551c680acff6b2de283e32f4b42cb276ce127..205ad736d5c5065568977c8a244d139bc8c6fd86 100644 (file)
@@ -1,9 +1,11 @@
 
 {{include file="section_title.tpl"}}
 
+<div id="viewcontact_wrapper-{{$id}}">
 {{foreach $contacts as $contact}}
        {{include file="contact_template.tpl"}}
 {{/foreach}}
+</div>
 
 <div id="view-contact-end"></div>
 
index 44dcd8f1e884255b002bb1891248bf97da0b086f..32da71f816633b51fc3d08ad4bfa683238847714 100644 (file)
@@ -1,45 +1,46 @@
 <script>
 
 function showHideForumlist() {
-       if( $("div[id^='forum-widget-entry-extended-']").is(':visible')) {
-               $("div[id^='forum-widget-entry-extended-']").hide();
-               $('#forum-widget-collapse').html(window.showMore);
+       if( $("li[id^='forum-widget-entry-extended-']").is(':visible')) {
+               $("li[id^='forum-widget-entry-extended-']").hide();
+               $("li#forum-widget-collapse").html(window.showMore);
 
        }
        else {
-               $("div[id^='forum-widget-entry-extended-']").show();
-               $('#forum-widget-collapse').html(window.showFewer);
-       }
+               $("li[id^='forum-widget-entry-extended-']").show();
+               $("li#forum-widget-collapse").html(window.showFewer);
        }
+}
 </script>
 
 <div id="forumlist-sidebar" class="widget">
        <h3 id="forumlist">{{$title}}</h3>
 
-       {{foreach $forums as $forum}}
+       <ul id="forumlist-sidbar-ul" role="menu">
+               {{foreach $forums as $forum}}
                {{if $forum.id <= $visible_forums}}
-               <div class="forum-widget-entry" id="forum-widget-entry-{{$forum.id}}" role="menuitem">
+               <li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-{{$forum.id}}" role="menuitem">
+                       <span class="notify badge pull-right"></span>
                        <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
                                <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
                        </a>
-                       <a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
-               </div>
+                       <a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
+               </li>
                {{/if}}
        
                {{if $forum.id > $visible_forums}}
-               <div class="forum-widget-entry" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;">
+               <li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;">
+                       <span class="notify badge pull-right"></span>
                        <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
                                <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
                        </a>
-                       <a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
-               </div>
+                       <a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
+               </li>
                {{/if}}
-       {{/foreach}}
-
-       {{if $total > $visible_forums }}
-       <div id="forum-widget-showmore" class="forum-widget-entry" role="menuitem">
-               <a onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link">{{$showmore}}</a>
-       </div>
-       {{/if}}
+               {{/foreach}}
 
+               {{if $total > $visible_forums }}
+               <li onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link fakelink tool">{{$showmore}}</li>
+               {{/if}}
+       </ul>
 </div>
index fe2ad73cf2e84f8dac86a197bf50bb7434a1012d..908574f7064565105179372217e93e3bce7dc3ee 100644 (file)
@@ -20,6 +20,9 @@ div.wall-item-content-wrapper.shiny {  background-image: url('ingdarkzero/shiny.
 
 nav #banner #logo-text a { color: #ffffff; }
 
+/* Contact-Header for the Network Stream */
+#viewcontact_wrapper-network {background-image: url('imgdarkzero/head.jpg');}
+
 .wall-item-content-wrapper { 
        border: 1px solid #444444; 
        background: #444444;  
index 0619644eaf0323c16152fb8e8d32baab8d284081..34bf58f46055d73cce868b300f82dd5337a97e33 100644 (file)
@@ -25,8 +25,10 @@ section { background: #EEFFFF; }
 a, a:visited { color: #0000FF; text-decoration: none; }
 a:hover {text-decoration: underline; }
 
+/* Contact-Header for the Network Stream */
+#viewcontact_wrapper-network { background: #FFDDFF; }
 
-aside        background-image: url('imgeasterbunny/border.jpg'); }
+aside {        background-image: url('imgeasterbunny/border.jpg'); }
 .tabs {        background-image: url('imgeasterbunny/head.jpg'); }
 div.wall-item-content-wrapper.shiny {  background-image: url('imgeasterbunny/shiny.png'); }
 
index 0f6f7881edc26265930b60addddd82d29dd3c250..d446a616111490c9c8633f22636db7206aaaffa4 100644 (file)
@@ -21,6 +21,7 @@ body {        background-image: url('imggreenzero/head.jpg'); }
 aside { background-image: url('imggreenzero/border.jpg'); }
 section { background-image: url('imggreenzero/border.jpg'); }
 .tabs {        background-image: url('imggreenzero/head.jpg'); }
+#viewcontact_wrapper-network { background: #DBEAD7; }
 div.wall-item-content-wrapper.shiny {  background-image: url('imggreenzero/shiny.png'); }
 
 .fakelink, .fakelink:visited, .fakelink:hover, .fakelink:link {
index d59cf5dcabc4d13cea70d79d1b2419ef4704868b..29718576830f88094a2aaebc5d6055192e4e090d 100644 (file)
@@ -3,8 +3,9 @@ a:hover {text-decoration: underline; }
 
 
 body {         background-image: url('imgpurplezero/head.jpg'); }
-aside        background-image: url('imgpurplezero/border.jpg'); }
+aside {        background-image: url('imgpurplezero/border.jpg'); }
 section {      background-image: url('imgpurplezero/border.jpg'); }
+#viewcontact_wrapper-network { background: #ECCAEB; }
 .tabs {        background-image: url('imgpurplezero/head.jpg'); }
 div.wall-item-content-wrapper.shiny {  background-image: url('imgpurplezero/shiny.png'); }
 
index 0198431919bfc9759dcfb1b3a1dc1236532689f7..903846e694bed9c1ef75a973019c89ca4d7fff19 100644 (file)
@@ -205,6 +205,7 @@ aside {
        font-weight: bold;
        background: #3465a4 url('friendica-16.png') no-repeat 95% center;
 }
+#subscribe-feed-link,
 #wallmessage-link {
        display: block;
        color: #FFFFFF;
@@ -277,6 +278,31 @@ div.wall-item-content-wrapper.shiny {
        margin: 15px 0 15px 150px;
 }
 
+/* Contact-Header for the Network Stream */
+#viewcontact_wrapper-network {
+       width: 100%;
+       min-height: 100px;
+       background-color: #DBE6F1;
+       border-bottom: 1px solid #babdb6;
+}
+#contact-entry-wrapper-network {
+       float: none;
+       width: auto;
+       height: auto;
+       padding: 10px;
+       margin: 0px
+}
+#contact-entry-accounttype-network {
+       font-size: 20px;
+}
+#contact-entry-name-network {
+       font-size: 24.5px;
+}
+/*#contact-entry-name-network>.contact-entry-details, #contact-entry-url-network,
+#contact-entry-details-network, contact-entry-network-network {
+       color: #000;
+}*/
+
 /* from default */
 #jot-perms-icon,
 #profile-location,
@@ -340,7 +366,7 @@ div.wall-item-content-wrapper.shiny {
        margin-bottom: 10px;
 }
 
-.group-selected, .nets-selected, .fileas-selected, .categories-selected {
+.group-selected, .nets-selected, .fileas-selected, .categories-selected, .forum-selected {
        padding: 3px;
        -moz-border-radius: 3px;
        border-radius: 3px;
@@ -2039,7 +2065,7 @@ a.mail-list-link {
 #sidebar-group-list ul {
        list-style-type: none;
 }
-.sidebar-group-li .notify {
+.sidebar-group-li .notify, .forum-widget-entry .notify {
        display: none;
        font-size: 9px;
        border: 1px solid rgb(221, 221, 221);
@@ -2047,7 +2073,7 @@ a.mail-list-link {
        float: right;
        background-color: #BABDB6;
 }
-.sidebar-group-li .notify.show {
+.sidebar-group-li .notify.show, .forum-widget-entry .notify.show {
        display: block;
 }
 
@@ -2061,6 +2087,10 @@ a.mail-list-link {
        margin-top: 10px;
 }
 
+#forumlist-sidebar ul {
+       list-style: none;
+}
+
 .nets-ul, .fileas-ul, .categories-ul, .datebrowse-ul {
        list-style-type: none;
 }
@@ -2507,7 +2537,8 @@ aside input[type='text'] {
        font-weight: bold;
 }
 
-.vcard .title {
+.vcard .title,
+.vcard .p-faddr {
        margin-bottom: 5px;
        margin-left: 12px;
 }
@@ -3307,6 +3338,17 @@ div.jGrowl div.info {
 }
 
 /* notifications popup menu */
+.manage-notify {
+  font-size: 10px;
+  padding: 1px 3px;
+  top: 0px;
+  min-width: 15px;
+  text-align: center;
+  float: right;
+  margin-top: -14px;
+  margin-right: -20px;
+}
+
 .nav-notify {
        display: none;
        position: absolute;
index 9a34605732d223c8af688dfa16c743ca64e80840..fb5d4e420e68ca02c75127244a61be459f3a66f4 100644 (file)
@@ -3,7 +3,7 @@
 
        <div class="fn label">{{$profile.name}}</div>
        
-                               
+       {{if $profile.faddr}}<div class="p-faddr">{{$profile.faddr}}</div>{{/if}}
        
        {{if $pdesc}}<div class="title">{{$profile.pdesc}}</div>{{/if}}
        <div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="{{$profile.photo}}?rev={{$profile.picdate}}" alt="{{$profile.name}}"></div>
        <div id="profile-extra-links">
                <ul>
                        {{if $connect}}
-                                {{if $remoteconnect}}
-                                        <li><a id="dfrn-request-link" href="{{$remoteconnect}}">{{$connect}}</a></li>
-                                {{else}}
-                                        <li><a id="dfrn-request-link" href="dfrn_request/{{$profile.nickname}}">{{$connect}}</a></li>
-                                {{/if}}
-                        {{/if}}
+                               {{if $remoteconnect}}
+                                       <li><a id="dfrn-request-link" href="{{$remoteconnect}}">{{$connect}}</a></li>
+                               {{else}}
+                                       <li><a id="dfrn-request-link" href="dfrn_request/{{$profile.nickname}}">{{$connect}}</a></li>
+                               {{/if}}
+                       {{/if}}
                        {{if $wallmessage}}
                                <li><a id="wallmessage-link" href="wallmessage/{{$profile.nickname}}">{{$wallmessage}}</a></li>
                        {{/if}}
+                       {{if $subscribe_feed}}
+                               <li><a id="subscribe-feed-link" href="dfrn_poll/{{$profile.nickname}}">{{$subscribe_feed}}</a></li>
+                       {{/if}}
                </ul>
        </div>
 </div>
index f8b49df7c508d05a379cebf6cc75ccd6fc72cf6a..a4af7f907536b2170bed1e8954b11c75a700248c 100644 (file)
@@ -421,6 +421,27 @@ section {
        clear: both;\r
 }\r
 \r
+/* Contact-Header for the Network Stream */\r
+#viewcontact_wrapper-network {\r
+       width: 100%;\r
+       min-height: 100px;\r
+       background-color: #FAFAFA;\r
+       border: 1px solid #DDDDDD;\r
+       border-radius: 5px;\r
+}\r
+#contact-entry-wrapper-network {\r
+       float: none;\r
+       width: auto;\r
+       height: auto;\r
+       padding: 10px;\r
+       margin: 0;\r
+}\r
+#contact-entry-accounttype-network {\r
+       font-size: 0.9em;\r
+}\r
+#contact-entry-name-network {\r
+       font-size: 1.5em;\r
+}\r
 \r
 /* footer */\r
 footer {\r
@@ -511,7 +532,7 @@ footer {
        margin-bottom: 10px;\r
 }\r
 \r
-.group-selected, .nets-selected, .fileas-selected, .categories-selected {\r
+.group-selected, .nets-selected, .fileas-selected, .categories-selected, .forum-selected {\r
        padding: 3px;\r
        -moz-border-radius: 3px;\r
        -webkit-border-radius: 3px;\r
@@ -3105,7 +3126,8 @@ aside input[type='text'] {
        font-weight: bold;\r
 }\r
 \r
-.vcard .title {\r
+.vcard .title,\r
+.vcard .p-faddr {\r
        margin-bottom: 5px;\r
        margin-left: 12px;\r
 }\r
index 6e097c62bf07f8d978c091b86a2a0b87363c7499..515740871385e0951b5100fa77e4b9cbb51b5e94 100644 (file)
@@ -3,7 +3,7 @@
 
        <div class="fn label">{{$profile.name}}</div>
        
-                               
+       {{if $profile.faddr}}<div class="p-faddr">{{$profile.faddr}}</div>{{/if}}
        
        {{if $pdesc}}<div class="title">{{$profile.pdesc}}</div>{{/if}}
        <div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="{{$profile.photo}}?rev={{$profile.picdate}}" alt="{{$profile.name}}"></div>
index 35abed3c5d011d248509b421cbe8128c9eacc58b..7b2b1358c04c2a8c14b69697a17e5519e99ac47c 100644 (file)
@@ -284,6 +284,7 @@ aside {
 /*     float:left;*/
 }
 
+#subscribe-feed-link,
 #dfrn-request-link {
        display: block;
        color: #FFFFFF;
@@ -383,6 +384,27 @@ section {
        padding-top: 3em;
 }
 
+/* Contact-Header for the Network Stream */
+#viewcontact_wrapper-network {
+       width: 100%;
+       min-height: 100px;
+       background-color: #FAFAFA;
+       border: 1px solid #DDDDDD;
+       border-radius: 5px;
+}
+#contact-entry-wrapper-network {
+       float: none;
+       width: auto;
+       height: auto;
+       padding: 10px;
+       margin: 0;
+}
+#contact-entry-accounttype-network {
+       font-size: 0.9em;
+}
+#contact-entry-name-network {
+       font-size: 1.5em;
+}
 
 /* footer */
 footer {
@@ -489,7 +511,7 @@ div.wall-item-content-wrapper.shiny {
        margin-bottom: 10px;
 }
 
-.group-selected, .nets-selected, .fileas-selected, .categories-selected {
+.group-selected, .nets-selected, .fileas-selected, .categories-selected, .forum-selected {
        padding: 3px;
        -moz-border-radius: 3px;
        -webkit-border-radius: 3px;
@@ -2357,6 +2379,16 @@ a.mail-list-link {
        margin-top: 10px;
 }
 
+#forumlist-sidebar ul {
+       list-style: none;
+}
+
+.forumlist-img {
+       height: 20px;
+       width: 20px;
+       vertical-align: middle;
+}
+
 .nets-ul, .fileas-ul, .categories-ul, .datebrowse-ul {
        list-style-type: none;
 }
@@ -2880,7 +2912,8 @@ aside input[type='text'] {
        font-weight: bold;
 }
 
-.vcard .title {
+.vcard .title,
+.vcard .p-faddr {
        margin-bottom: 5px;
        margin-left: 12px;
 }
@@ -4029,6 +4062,22 @@ div.jGrowl-notification {
 }
 
 /* notifications popup menu */
+.manage-notify {
+       padding: 1px 3px;
+       top: 0px;
+       min-width: 15px;
+       text-align: center;
+       float: right;
+       margin-top: -14px;
+       margin-right: -20px;
+
+       font-size: 0.8em;
+       border-radius: 4px;
+       -moz-border-radius: 4px;
+       -webkit-border-radius: 4px;
+       background-color: gold !important;
+}
+
 .nav-notify {
        display: none;
        position: absolute;
index 6e097c62bf07f8d978c091b86a2a0b87363c7499..b8f59ccaa8cd084dc43913dd4dfa418cd6533d86 100644 (file)
@@ -3,7 +3,7 @@
 
        <div class="fn label">{{$profile.name}}</div>
        
-                               
+       {{if $profile.faddr}}<div class="p-faddr">{{$profile.faddr}}</div>{{/if}}
        
        {{if $pdesc}}<div class="title">{{$profile.pdesc}}</div>{{/if}}
        <div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="{{$profile.photo}}?rev={{$profile.picdate}}" alt="{{$profile.name}}"></div>
                        {{if $wallmessage}}
                                <li><a id="wallmessage-link" href="wallmessage/{{$profile.nickname}}">{{$wallmessage}}</a></li>
                        {{/if}}
+                       {{if $subscribe_feed}}
+                               <li><a id="subscribe-feed-link" href="dfrn_poll/{{$profile.nickname}}">{{$subscribe_feed}}</a></li>
+                       {{/if}}
                </ul>
        </div>
 </div>
 
 {{$contact_block}}
-
-
index 93ee1ccd58feefcf6014b4675c01bd77bae850eb..1ff2de70063cf0e336048c1b12ff64eaf627aa3b 100644 (file)
@@ -463,7 +463,7 @@ a:hover {
   text-decoration: underline;
 }
 blockquote {
-  background: #FFFFFF;
+  background: #ffffff;
   padding: 1em;
   margin-left: 1em;
   border-left: 1em solid #e6e6e6;
@@ -791,6 +791,29 @@ ul.menu-popup .toolbar a:hover {
   color: #9eabb0;
   display: block;
 }
+/* Contact-Header for the Network Stream */
+#viewcontact_wrapper-network {
+  width: 100%;
+  min-height: 100px;
+  background-color: #eff0f1;
+  border-bottom: 1px solid #cccccc;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network {
+  float: none;
+  width: auto;
+  height: auto;
+  padding: 10px;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network #contact-entry-accounttype-network {
+  font-size: 22px;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network #contact-entry-name-network {
+  font-size: 24.5px;
+  font-weight: normal;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network .contact-details {
+  font-size: 12px;
+}
 /* aside 230px*/
 aside {
   display: table-cell;
@@ -810,6 +833,9 @@ aside .vcard .fn {
 aside .vcard .title {
   margin-bottom: 5px;
 }
+aside .vcard .p-faddr {
+  margin-bottom: 5px;
+}
 aside .vcard dl {
   height: auto;
   overflow: auto;
@@ -866,6 +892,21 @@ aside #dfrn-request-link:hover {
   text-decoration: none;
   background-color: #19aeff;
 }
+aside #subscribe-feed-link {
+  display: block;
+  -moz-border-radius: 5px 5px 5px 5px;
+  -webkit-border-radius: 5px 5px 5px 5px;
+  border-radius: 5px 5px 5px 5px;
+  color: #ffffff;
+  background: #005c94 url('../../../images/connect-bg.png') no-repeat left center;
+  font-weight: bold;
+  text-transform: uppercase;
+  padding: 4px 2px 2px 35px;
+}
+aside #subscribe-feed-link:hover {
+  text-decoration: none;
+  background-color: #19aeff;
+}
 aside #profiles-menu {
   width: 20em;
 }
index ab50d93ae1b0ed8a72b0d41dd0c0b5cf38de9a69..2b05335e0f0df55bbff63757d9b971e3865a8eca 100644 (file)
@@ -463,7 +463,7 @@ a:hover {
   text-decoration: underline;
 }
 blockquote {
-  background: #FFFFFF;
+  background: #ffffff;
   padding: 1em;
   margin-left: 1em;
   border-left: 1em solid #e6e6e6;
@@ -791,6 +791,29 @@ ul.menu-popup .toolbar a:hover {
   color: #9eabb0;
   display: block;
 }
+/* Contact-Header for the Network Stream */
+#viewcontact_wrapper-network {
+  width: 100%;
+  min-height: 100px;
+  background-color: #eff0f1;
+  border-bottom: 1px solid #cccccc;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network {
+  float: none;
+  width: auto;
+  height: auto;
+  padding: 10px;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network #contact-entry-accounttype-network {
+  font-size: 22px;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network #contact-entry-name-network {
+  font-size: 24.5px;
+  font-weight: normal;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network .contact-details {
+  font-size: 12px;
+}
 /* aside 230px*/
 aside {
   display: table-cell;
@@ -810,6 +833,9 @@ aside .vcard .fn {
 aside .vcard .title {
   margin-bottom: 5px;
 }
+aside .vcard .p-faddr {
+  margin-bottom: 5px;
+}
 aside .vcard dl {
   height: auto;
   overflow: auto;
@@ -866,6 +892,21 @@ aside #dfrn-request-link:hover {
   text-decoration: none;
   background-color: #ccff42;
 }
+aside #subscribe-feed-link {
+  display: block;
+  -moz-border-radius: 5px 5px 5px 5px;
+  -webkit-border-radius: 5px 5px 5px 5px;
+  border-radius: 5px 5px 5px 5px;
+  color: #ffffff;
+  background: #009100 url('../../../images/connect-bg.png') no-repeat left center;
+  font-weight: bold;
+  text-transform: uppercase;
+  padding: 4px 2px 2px 35px;
+}
+aside #subscribe-feed-link:hover {
+  text-decoration: none;
+  background-color: #ccff42;
+}
 aside #profiles-menu {
   width: 20em;
 }
index c2573ebd1d5f726cf58e03c2895c7afe28499ca0..259874a299d4fb634852ead2c2fc19dc221bf90b 100644 (file)
@@ -11,6 +11,13 @@ $(document).ready(function(){
                        $(".group-"+gid+" .notify").addClass("on").text(gcount);
                });
 
+               $(".forum-widget-entry .notify").removeClass("on");
+               $(data).find("forum").each(function() {
+                       var fid = this.id;
+                       var fcount = this.innerHTML;
+                       $(".forum-"+fid+" .notify").addClass("on").text(fcount);
+               });
+
                console.log(intro,mail);
 
                if (notifCount > 0 ) {
index 510b2f7c8c6539548eebc63db6e65d483b16dcd4..ec0982a75e22e9f08055a6e4186b5dc709f7993b 100644 (file)
 body {
   font-family: Liberation Sans, helvetica, arial, clean, sans-serif;
   font-size: 11px;
-  background-color: #F6ECF9;
+  background-color: #f6ecf9;
   color: #2d2d2d;
   margin: 50px 0px 0px 0px;
   display: table;
@@ -463,7 +463,7 @@ a:hover {
   text-decoration: underline;
 }
 blockquote {
-  background: #FFFFFF;
+  background: #ffffff;
   padding: 1em;
   margin-left: 1em;
   border-left: 1em solid #e6e6e6;
@@ -791,6 +791,29 @@ ul.menu-popup .toolbar a:hover {
   color: #9eabb0;
   display: block;
 }
+/* Contact-Header for the Network Stream */
+#viewcontact_wrapper-network {
+  width: 100%;
+  min-height: 100px;
+  background-color: #eff0f1;
+  border-bottom: 1px solid #cccccc;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network {
+  float: none;
+  width: auto;
+  height: auto;
+  padding: 10px;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network #contact-entry-accounttype-network {
+  font-size: 22px;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network #contact-entry-name-network {
+  font-size: 24.5px;
+  font-weight: normal;
+}
+#viewcontact_wrapper-network #contact-entry-wrapper-network .contact-details {
+  font-size: 12px;
+}
 /* aside 230px*/
 aside {
   display: table-cell;
@@ -810,6 +833,9 @@ aside .vcard .fn {
 aside .vcard .title {
   margin-bottom: 5px;
 }
+aside .vcard .p-faddr {
+  margin-bottom: 5px;
+}
 aside .vcard dl {
   height: auto;
   overflow: auto;
@@ -866,6 +892,21 @@ aside #dfrn-request-link:hover {
   text-decoration: none;
   background-color: #86608e;
 }
+aside #subscribe-feed-link {
+  display: block;
+  -moz-border-radius: 5px 5px 5px 5px;
+  -webkit-border-radius: 5px 5px 5px 5px;
+  border-radius: 5px 5px 5px 5px;
+  color: #ffffff;
+  background: #521f5c url('../../../images/connect-bg.png') no-repeat left center;
+  font-weight: bold;
+  text-transform: uppercase;
+  padding: 4px 2px 2px 35px;
+}
+aside #subscribe-feed-link:hover {
+  text-decoration: none;
+  background-color: #86608e;
+}
 aside #profiles-menu {
   width: 20em;
 }
@@ -1704,7 +1745,7 @@ span[id^="showmore-wrap"] {
   height: 20px;
   width: 500px;
   font-weight: bold;
-  border: 1px solid #F6ECF9;
+  border: 1px solid #f6ecf9;
 }
 #jot #jot-title:-webkit-input-placeholder {
   font-weight: normal;
@@ -1731,7 +1772,7 @@ span[id^="showmore-wrap"] {
   margin: 0px;
   height: 20px;
   width: 200px;
-  border: 1px solid #F6ECF9;
+  border: 1px solid #f6ecf9;
 }
 #jot #jot-category:hover {
   border: 1px solid #999999;
index 2faa7966f06c38a875ec02aaa8c04ca08d530fc4..b6bed2c9cb6cf3560e3fd59fd2a3b5a3fa53f39c 100644 (file)
@@ -301,7 +301,22 @@ ul.menu-popup {
        .notif-when { font-size: 10px; color: @MenuItemDetail; display: block; }
 }
 
-
+/* Contact-Header for the Network Stream */
+#viewcontact_wrapper-network {
+       width: 100%;
+       min-height: 100px;
+       background-color: #eff0f1;
+       border-bottom: 1px solid #cccccc;
+       #contact-entry-wrapper-network {
+               float: none;
+               width: auto;
+               height: auto;
+               padding: 10px;
+               #contact-entry-accounttype-network { font-size: 22px; }
+               #contact-entry-name-network { font-size: 24.5px; font-weight: normal; }
+               .contact-details { font-size: 12px; }
+       }
+}
 
 
 /* aside 230px*/
@@ -317,6 +332,7 @@ aside {
        .vcard {
                .fn { font-size: 16px; font-weight: bold; margin-bottom: 5px; }
                .title { margin-bottom: 5px; }
+               .p-faddr{ margin-bottom: 5px; }
                dl { height: auto; overflow: auto; }
                dt {float: left; margin-left: 0px; width: 35%; text-align: right; color: @VCardLabelColor; }
                dd {float: left; margin-left: 4px; width: 60%;}
@@ -351,6 +367,17 @@ aside {
 
                &:hover { text-decoration: none; background-color: @AsideConnectHoverBg; }
        }
+       #subscribe-feed-link {
+               display: block;
+               .rounded();
+               color: @AsideConnect;
+               background: @AsideConnectBg url('../../../images/connect-bg.png') no-repeat left center;
+               font-weight: bold;
+               text-transform:uppercase;
+               padding: 4px 2px 2px 35px;
+
+               &:hover { text-decoration: none; background-color: @AsideConnectHoverBg; }
+       }
 
        #profiles-menu { width: 20em; }
 
index d57169dcc1781728d075bcd89e2023a37d217a38..7a06e7588f241e47602064f72491fa68b6bc7de3 100644 (file)
@@ -6,17 +6,17 @@
                        <div class="action">
                        <a class="icon s16 edit ttright" href="#" rel="#profiles-menu" title="{{$profile.edit.3}}"><span>{{$profile.edit.1}}</span></a>
                        <ul id="profiles-menu" class="menu-popup">
-                           {{if $profile.menu.entries}}
-                               {{foreach $profile.menu.entries as $e}}
-                               <li>
-                                       <a href="profiles/{{$e.id}}"><img src='{{$e.photo}}'>{{$e.profile_name}}</a>
-                               </li>
-                               {{/foreach}}
-                       {{else}}
-                               <li>
-                                       <a href="{{$profile.edit.0}}">{{$profile.edit.1}}</a>
-                               </li>
-                       {{/if}}
+                       {{if $profile.menu.entries}}
+                               {{foreach $profile.menu.entries as $e}}
+                               <li>
+                                       <a href="profiles/{{$e.id}}"><img src='{{$e.photo}}'>{{$e.profile_name}}</a>
+                               </li>
+                               {{/foreach}}
+                       {{else}}
+                               <li>
+                                       <a href="{{$profile.edit.0}}">{{$profile.edit.1}}</a>
+                               </li>
+                       {{/if}}
                                <li><a href="profile_photo" >{{$profile.menu.chg_photo}}</a></li>
                                {{if $profile.menu.cr_new }}
                                <li><a href="profiles/new" id="profile-listing-new-link">{{$profile.menu.cr_new}}</a></li>
@@ -26,6 +26,7 @@
                {{/if}}
        </div>
 
+       {{if $profile.faddr}}<div class="p-faddr">{{$profile.faddr}}</div>{{/if}}
 
        {{if $pdesc}}<div class="title">{{$profile.pdesc}}</div>{{/if}}
        <div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="{{$profile.photo}}?rev={{$profile.picdate}}" alt="{{$profile.name}}" /></div>
 
        {{if $marital}}<dl class="marital"><dt class="marital-label"><span class="heart">&hearts;</span>{{$marital}}</dt><dd class="marital-text">{{$profile.marital}}</dd></dl>{{/if}}
 
-       {{if $homepage}}<dl class="homepage"><dt
-        class="homepage-label">{{$homepage}}</dt><dd class="homepage-url"><a
-        href="{{$profile.homepage}}" target="external-link">{{$profile.homepage}}</a></dd></dl>{{/if}}
+       {{if $homepage}}
+       <dl class="homepage"><dt class="homepage-label">{{$homepage}}</dt>
+               <dd class="homepage-url"><a href="{{$profile.homepage}}" target="external-link">{{$profile.homepage}}</a></dd>
+       </dl>
+       {{/if}}
 
        {{include file="diaspora_vcard.tpl"}}
        
        <div id="profile-extra-links">
                <ul>
                        {{if $connect}}
-                                {{if $remoteconnect}}
-                                        <li><a id="dfrn-request-link" href="{{$remoteconnect}}">{{$connect}}</a></li>
-                                {{else}}
-                                        <li><a id="dfrn-request-link" href="dfrn_request/{{$profile.nickname}}">{{$connect}}</a></li>
-                                {{/if}}
-                        {{/if}}
+                               {{if $remoteconnect}}
+                                       <li><a id="dfrn-request-link" href="{{$remoteconnect}}">{{$connect}}</a></li>
+                               {{else}}
+                                       <li><a id="dfrn-request-link" href="dfrn_request/{{$profile.nickname}}">{{$connect}}</a></li>
+                               {{/if}}
+                       {{/if}}
                        {{if $wallmessage}}
                                <li><a id="wallmessage-link" href="wallmessage/{{$profile.nickname}}">{{$wallmessage}}</a></li>
                        {{/if}}
+                       {{if $subscribe_feed}}
+                               <li><a id="subscribe-feed-link" href="dfrn_poll/{{$profile.nickname}}">{{$subscribe_feed}}</a></li>
+                       {{/if}}
                </ul>
        </div>
 </div>
diff --git a/view/theme/quattro/templates/widget_forumlist.tpl b/view/theme/quattro/templates/widget_forumlist.tpl
new file mode 100644 (file)
index 0000000..35c54bc
--- /dev/null
@@ -0,0 +1,46 @@
+<script>
+
+function showHideForumlist() {
+       if( $("li[id^='forum-widget-entry-extended-']").is(':visible')) {
+               $("li[id^='forum-widget-entry-extended-']").hide();
+               $("li#forum-widget-collapse").html(window.showMore);
+
+       }
+       else {
+               $("li[id^='forum-widget-entry-extended-']").show();
+               $("li#forum-widget-collapse").html(window.showFewer);
+       }
+}
+</script>
+
+<div id="forumlist-sidebar" class="widget">
+       <h3 id="forumlist">{{$title}}</h3>
+
+       <ul id="forumlist-sidbar-ul" role="menu">
+               {{foreach $forums as $forum}}
+               {{if $forum.id <= $visible_forums}}
+               <li class="forum-widget-entry forum-{{$forum.cid}} tool {{if $forum.selected}}selected{{/if}}" id="forum-widget-entry-{{$forum.id}}" role="menuitem">
+                       <span class="notify badge pull-right"></span>
+                       <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
+                               <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
+                       </a>
+                       <a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
+               </li>
+               {{/if}}
+       
+               {{if $forum.id > $visible_forums}}
+               <li class="forum-widget-entry forum-{{$forum.cid}} tool {{if $forum.selected}}selected{{/if}}" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;">
+                       <span class="notify badge pull-right"></span>
+                       <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
+                               <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
+                       </a>
+                       <a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
+               </li>
+               {{/if}}
+               {{/foreach}}
+
+               {{if $total > $visible_forums }}
+               <li onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link fakelink tool">{{$showmore}}</li>
+               {{/if}}
+       </ul>
+</div>
index ba0c4bff6ec9ef2a4197b62191cc5f587467810d..45d2629dae0a09c8a0941ee029f0d60073d9f6a0 100644 (file)
@@ -149,6 +149,30 @@ section {
        padding-bottom: 2em;
 }
 
+/* Contact-Header for the Network Stream */
+#viewcontact_wrapper-network {
+       width: 100%;
+       min-height: 110px;
+       background-color: #FAFAFA;
+       box-shadow: 0 0 8px #BDBDBD;
+       border-bottom: 1px solid #dedede;
+       border: 1px solid #7C7D7B;
+       border-radius: 5px;
+}
+#contact-entry-wrapper-network {
+       float: none;
+       width: auto;
+       height: auto;
+       padding: 10px;
+       margin: 0;
+}
+#contact-entry-accounttype-network {
+       font-size: 20px;
+}
+#contact-entry-name-network {
+       font-size: 24.5px;
+}
+
 .lframe {
        border: 1px solid #7C7D7B;
        box-shadow: 3px 3px 6px #959494;
@@ -690,6 +714,7 @@ aside h4 {
        list-style: none;
 }
 
+#subscribe-feed-link,
 #dfrn-request-link {
        box-shadow: inset 0px 1px 0px 0px #a65151;
                -moz-box-shadow: inset 0px 1px 0px 0px #a65151;
@@ -725,6 +750,7 @@ aside h4 {
        background-color: #3465a4;
 }
 
+#subscribe-feed-link:hover,
 #dfrn-request-link:hover {
        background: -webkit-gradient( linear, left top, left bottom, color-stop(0.05, #1873a2), color-stop(1, #6da6c4) );
        background: -moz-linear-gradient( center top, #1873a2 5%, #6da6c4 100% );
@@ -732,6 +758,7 @@ aside h4 {
        background-color: #1873a2;
 }
 
+#subscribe-feed-link:active,
 #dfrn-request-link:active {
        position: relative;
        top: 1px;
@@ -854,7 +881,8 @@ li.widget-list {
        padding: 3px 24px;
 }
 
-#sidebar-new-group {
+#sidebar-new-group,
+#sidebar-edit-groups {
        padding: 7px;
        width: 165px;
        margin: auto;
@@ -4215,6 +4243,17 @@ a.active {
 }
 
 /* notifications popup menu */
+.manage-notify {
+       font-size: 10px;
+       padding: 1px 3px;
+       top: 0px;
+       min-width: 15px;
+       text-align: center;
+       float: right;
+       margin-top: -14px;
+       margin-right: -20px;
+}
+
 .nav-notify {
        display: none;
        position: absolute;
index 049c1bf4b6189eddbc3c9fce7981bbff5b43e48c..5a36de03e02418526e8f374e8e7d1fdadd671fbd 100644 (file)
@@ -122,3 +122,7 @@ div.pager, ul.tabs {
 .mail-list-wrapper {
   border-radius: 5px;
 }
+
+#viewcontact_wrapper-network {
+  border-radius: 5px;
+}
index 01045b6ff4a3cb519a8091c688b14babda91b7d3..8e128ae27fb5fd21288010266925824b135912a4 100644 (file)
@@ -57,5 +57,9 @@ input#side-peoplefind-submit, input#side-follow-submit {
 }
 
 li :hover {
-       color: #767676 !important;      
+       color: #767676 !important;
+}
+
+#viewcontact_wrapper-network {
+       background-color: #343434;
 }
index a00d19c39c767eb6ab6869885e5793206576b78b..03e18f1070f81c822860214f8a11b533192ddcf8 100644 (file)
@@ -16,3 +16,8 @@ aside {
 right_aside {
   border-left: 1px solid #D2D2D2;
 }
+
+#viewcontact_wrapper-network {
+  background-color: #FFF;
+  border-bottom: 1px solid #D2D2D2;
+}
\ No newline at end of file
index 5faf069c22ad94e1e2cbb3d19b3982c664838cac..8e1865a8692c93c38e57052c83c0f7352aa504d0 100644 (file)
@@ -17,6 +17,12 @@ nav a:hover,
   color: #000;
 }
 
+.manage-notify {
+  background-color: #CB4437;
+  border-radius: 10px;
+  font: bold 11px/16px Arial;
+}
+
 nav .nav-notify {
 /*  background-color: #427FED; */
   background-color: #CB4437;
index db96be9fb1c474557b32c173b1240836f38c0160..2892862daf6b331e0dd81ad64c2fcf6e9b7810c5 100644 (file)
@@ -343,6 +343,22 @@ code {
   margin-top: 20px;
   max-width: 640px;
 }
+.badge {
+  display: inline-block;
+  min-width: 10px;
+  padding: 3px 7px;
+  font-size: 10px;
+  font-weight: 700;
+  line-height: 1;
+  color: #fff;
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: baseline;
+  /* background-color: #737373*/;
+  background-color: #36C;
+  border-radius: 4px;
+  opacity: 0.3;
+}
 #panel {
   position: absolute;
   width: 10em;
@@ -366,7 +382,7 @@ code {
 #sidebar-group-list .tool:hover {
        background: #EEE;
 }
-#sidebar-group-list .notify {
+/*#sidebar-group-list .notify {
        min-width: 10px;
        text-align: center;
        color: #FFF;
@@ -375,6 +391,9 @@ code {
        padding: 3px;
        border-radius: 10px;
        display: none;
+}*/
+#sidebar-group-list .notify {
+  display: none;
 }
 #sidebar-group-list .notify.show { display: inline-block; }
 .tool .label {
@@ -386,7 +405,7 @@ code {
 .tool a {
 /*  color: #000; */
 }
-.tool a:hover, .widget a:hover, #nets-sidear a:hover, #hide-forum-list:hover, .admin.link a:hover, aside h4 a:hover, right_aside h4 a:hover {
+.tool a:hover, .widget a:hover, #nets-sidear a:hover, #forum-widget-collapse:hover, .admin.link a:hover, aside h4 a:hover, right_aside h4 a:hover {
   /* text-decoration: underline; */
   text-decoration: none;
   color: black;
@@ -400,8 +419,8 @@ code {
   opacity: 1;
 }
 
-.sidebar-group-li:hover, #sidebar-new-group:hover, #hide-forum-list:hover,
-#sidebar-ungrouped:hover, .side-link:hover, .nets-ul li:hover, #forumlist-sidebar div:hover, #forum-list-right div:hover,
+.sidebar-group-li:hover, #sidebar-new-group:hover, #sidebar-edit-groups:hover, #forum-widget-collapse:hover,
+#sidebar-ungrouped:hover, .side-link:hover, .nets-ul li:hover, #forumlist-sidebar li:hover, #forumlist-sidebar-right li:hover,
 .nets-all:hover, .saved-search-li:hover, li.tool:hover, .admin.link:hover, aside h4 a:hover, right_aside h4 a:hover, #message-new:hover {
   /* background-color: #ddd; */
 /*  background-color: #e5e5e5; */
@@ -416,11 +435,11 @@ code {
 /*  color: #000; */
 }
 
-.group-selected, .nets-selected, .fileas-selected {
+.group-selected, .nets-selected, .fileas-selected, .forum-selected {
   font-weight: bold;
 }
 
-#forum-widget-showmore, #sidebar-new-group, #hide-forum-list, #forum-list-right, #sidebar-ungrouped,
+#forum-widget-showmore, #sidebar-new-group, #sidebar-edit-groups, #forum-widget-collapse, #forumlist-rsidebar-right, #sidebar-ungrouped,
 .side-link, #peoplefind-desc, #connect-desc, .nets-all, .admin.link, #message-new {
   padding-left: 10px;
   padding-top: 3px;
@@ -440,7 +459,15 @@ code {
   padding-right: 5px;
 }
 
-a.nets-link, .side-link a, #sidebar-new-group a, a.savedsearchterm, a.fileas-link, aside h4 a, right_aside h4 a {
+#forumlist-sidebar .notify, #forumlist-sidebar-right .notify {
+  display: none;
+}
+
+#forumlist-sidebar .notify.show, #forumlist-sidebar-right .notify.show {
+  display: inline-block;
+}
+
+a.nets-link, .side-link a, #sidebar-new-group a, #sidebar-edit-groups a, a.savedsearchterm, a.fileas-link, aside h4 a, right_aside h4 a {
   display: block;
   color: #737373;
 }
@@ -467,11 +494,11 @@ a.sidebar-group-element {
   color: black;
 }
 
-#forumlist-sidebar a, #forum-list-right a, .tool a, .admin.link a {
+#forumlist-sidebar a, #forumlist-sidebar-right a, .tool a, .admin.link a {
   color: #737373;
 }
 
-#forumlist-sidebar, #forum-list-right {
+#forumlist-sidebar, #forumlist-sidebar-right {
   margin-top: 2px;
 }
 
@@ -640,6 +667,7 @@ nav .nav-menu img {
   margin-top: -3px;
   margin-right: 4px;
 }
+
 nav .nav-menu-icon .nav-notify {
   top: 3px;
 }
@@ -674,6 +702,23 @@ nav .nav-menu:hover {
 /*    background: #4c619c; */
     text-decoration: none;
 }
+
+.manage-notify {
+   background-color: #F80;
+  -moz-border-radius: 5px 5px 5px 5px;
+  -webkit-border-radius: 5px 5px 5px 5px;
+  border-radius: 5px 5px 5px 5px;
+  font-size: 10px;
+  padding: 1px 3px;
+  top: 0px;
+  min-width: 15px;
+  text-align: center;
+  color: white;
+  float: right;
+  margin-top: -14px;
+  margin-right: -20px;
+}
+
 nav .nav-notify {
   display: none;
   position: absolute;
@@ -693,6 +738,7 @@ nav .nav-notify {
   text-align: center;
   color: white;
 }
+
 nav .nav-notify.show {
   display: block;
 }
@@ -980,9 +1026,11 @@ aside #profile-extra-links ul {
 }
 aside #profile-extra-links li {
   padding: 0px;
+  padding-bottom: 4px;
   margin: 0px;
   list-style: none;
 }
+aside #subscribe-feed-link,
 aside #dfrn-request-link,
 aside #wallmessage-link {
   display: block;
@@ -995,6 +1043,7 @@ aside #wallmessage-link {
   text-transform: uppercase;
   padding: 4px 2px 2px 35px;
 }
+aside #subscribe-feed-link:hover,
 aside #dfrn-request-link:hover,
 aside #wallmessage-link:hover {
   text-decoration: none;
@@ -1172,6 +1221,31 @@ section.minimal {
   height: 100%;
 }
 
+/* Contact-Header for the Network Stream */
+#viewcontact_wrapper-network {
+  width: 100%;
+  min-height: 100px;
+  background-color: #FAFAFA;
+  box-shadow: 1px 2px 0px 0px #D8D8D8;
+  border-bottom: 1px solid #D2D2D2;
+}
+#contact-entry-wrapper-network {
+  float: none;
+  width: auto;
+  height: auto;
+  padding: 10px;
+  margin: 0;
+}
+#contact-entry-accounttype-network {
+  font-size: 20px;
+}
+#contact-entry-name-network {
+  font-size: 24.5px;
+}
+.contact-entry-photo img {
+  border-radius: 4px;
+}
+
 /* wall item */
 .tread-wrapper {
 /*    border-bottom: 1px solid #BDCDD4; */
index 3317d668ce69df45fb42e3891c3f0998de757844..1882c155833872d7edc2d3c79f3101569df2560c 100644 (file)
@@ -13,6 +13,8 @@
                {{/if}}
        </div>
 
+       {{if $profile.faddr}}<div class="p-faddr">{{$profile.faddr}}</div>{{/if}}
+
        {{if $pdesc}}<div class="title">{{$profile.pdesc}}</div>{{/if}}
 
        {{if $profile.picdate}}
@@ -20,6 +22,7 @@
        {{else}}
                <div id="profile-photo-wrapper"><a href="{{$profile.url}}"><img class="photo u-photo" src="{{$profile.photo}}" alt="{{$profile.name}}"></a></div>
        {{/if}}
+       
        {{if $profile.network_name}}<dl class="network"><dt class="network-label">{{$network}}</dt><dd class="x-network">{{$profile.network_name}}</dd></dl>{{/if}}
        {{if $location}}
                <dl class="location"><dt class="location-label">{{$location}}</dt> 
@@ -63,6 +66,9 @@
                        {{if $wallmessage}}
                                <li><a id="wallmessage-link" href="wallmessage/{{$profile.nickname}}">{{$wallmessage}}</a></li>
                        {{/if}}
+                       {{if $subscribe_feed}}
+                               <li><a id="subscribe-feed-link" href="dfrn_poll/{{$profile.nickname}}">{{$subscribe_feed}}</a></li>
+                       {{/if}}
                </ul>
        </div>
 </div>
diff --git a/view/theme/vier/templates/widget_forumlist_right.tpl b/view/theme/vier/templates/widget_forumlist_right.tpl
new file mode 100644 (file)
index 0000000..93f8e8f
--- /dev/null
@@ -0,0 +1,47 @@
+<script>
+
+function showHideForumlist() {
+       if( $("li[id^='forum-widget-entry-extended-']").is(':visible')) {
+               $("li[id^='forum-widget-entry-extended-']").hide();
+               $("li#forum-widget-collapse").html(window.showMore);
+
+       }
+       else {
+               $("li[id^='forum-widget-entry-extended-']").show();
+               $("li#forum-widget-collapse").html(window.showFewer);
+       }
+}
+</script>
+
+<div id="forumlist-sidebar-right" class="widget">
+       <h3 id="forumlist">{{$title}}</h3>
+
+       <ul id="forumlist-sidbar-ul" role="menu">
+               {{foreach $forums as $forum}}
+               {{if $forum.id <= $visible_forums}}
+               <li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-{{$forum.id}}" role="menuitem">
+                       <span class="notify badge pull-right"></span>
+                       <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
+                               <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
+                       </a>
+                       <a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
+               </li>
+               {{/if}}
+       
+               {{if $forum.id > $visible_forums}}
+               <li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;">
+                       <span class="notify padge pull-right"></span>
+                       <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
+                               <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
+                       </a>
+                       <a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
+               </li>
+               {{/if}}
+               {{/foreach}}
+
+               {{if $total > $visible_forums }}
+               <li onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link tool fakelink">{{$showmore}}</li>
+               {{/if}}
+       </ul>
+
+</div>
index 3c808b52af0ec8b97203370296b3cf76df26cf0b..91c384f805d1692253879f31a7bdb4dd3e0ef540 100644 (file)
@@ -220,35 +220,50 @@ function vier_community_info() {
        //Community_Pages at right_aside
        if($show_pages AND local_user()) {
 
-               $pagelist = array();
+               require_once('include/forums.php');
 
-               $contacts = q("SELECT `id`, `url`, `name`, `micro` FROM `contact`
-                               WHERE `network`= '%s' AND `uid` = %d AND (`forum` OR `prv`) AND
-                                       NOT `hidden` AND NOT `blocked` AND
-                                       NOT `archive` AND NOT `pending` AND
-                                       `success_update` > `failure_update`
-                               ORDER BY `name` ASC",
-                               dbesc(NETWORK_DFRN), intval($a->user['uid']));
+               if(x($_GET['cid']) && intval($_GET['cid']) != 0)
+                       $cid = $_GET['cid'];
 
-               $pageD = array();
+               //sort by last updated item
+               $lastitem = true;
 
-               // Look if the profile is a community page
-               foreach($contacts as $contact) {
-                       $pageD[] = array("url"=>$contact["url"], "name"=>$contact["name"], "id"=>$contact["id"], "micro"=>$contact['micro']);
-               };
+               $contacts = get_forumlist($a->user['uid'],true,$lastitem, true);
+               $total = count($contacts);
+               $visible_forums = 10;
 
-               $contacts = $pageD;
+               if(count($contacts)) {
 
-               if ($contacts) {
-                       $page = '
-                               <h3>'.t("Community Pages").'</h3>
-                               <div id="forum-list-right">';
+                       $id = 0;
 
                        foreach($contacts as $contact) {
-                               $page .= '<div role="menuitem"><a href="' . $a->get_baseurl() . '/redir/' . $contact["id"] . '" title="'.t('External link to forum').'" class="label sparkle" target="_blank"><img class="forumlist-img" height="20" width="20" src="' . $contact['micro'] .'" alt="'.t('External link to forum').'" /></a> <a href="' . $a->get_baseurl() . '/network?f=&cid=' . $contact['id'] . '" >' . $contact["name"]."</a></div>";
+
+                               $selected = (($cid == $contact['id']) ? ' forum-selected' : '');
+
+                               $entry = array(
+                                       'url' => z_root() . '/network?f=&cid=' . $contact['id'],
+                                       'external_url' => z_root() . '/redir/' . $contact['id'],
+                                       'name' => $contact['name'],
+                                       'cid' => $contact['id'],
+                                       'selected'      => $selected,
+                                       'micro' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO),
+                                       'id' => ++$id,
+                               );
+                               $entries[] = $entry;
                        }
 
-                       $page .= '</div>';
+
+                       $tpl = get_markup_template('widget_forumlist_right.tpl');
+
+                       $page .= replace_macros($tpl,array(
+                               '$title'        => t('Forums'),
+                               '$forums'       => $entries,
+                               '$link_desc'    => t('External link to forum'),
+                               '$total'        => $total,
+                               '$visible_forums' => $visible_forums,
+                               '$showmore'     => t('show more'),
+                       ));
+
                        $aside['$page'] = $page;
                }
        }