Merge remote-tracking branch 'friendika/master' into newui

This commit is contained in:
fabrixxm 2011-09-08 20:15:27 +02:00
commit d284f8017c
20 changed files with 5733 additions and 45 deletions

View file

@ -274,7 +274,7 @@ function facebook_post(&$a) {
$no_linking = get_pconfig($uid,'facebook','no_linking'); $no_linking = get_pconfig($uid,'facebook','no_linking');
$no_wall = ((x($_POST,'facebook_no_wall')) ? intval($_POST['facebook_no_wall']) : 0); $no_wall = ((x($_POST,'facebook_no_wall')) ? intval($_POST['facebook_no_wall']) : 0);
set__pconfig($uid,'facebook','no_wall',$no_wall); set_pconfig($uid,'facebook','no_wall',$no_wall);
$linkvalue = ((x($_POST,'facebook_linking')) ? intval($_POST['facebook_linking']) : 0); $linkvalue = ((x($_POST,'facebook_linking')) ? intval($_POST['facebook_linking']) : 0);

View file

@ -8,7 +8,7 @@ require_once("include/pgettext.php");
require_once('include/nav.php'); require_once('include/nav.php');
define ( 'FRIENDIKA_VERSION', '2.2.1093' ); define ( 'FRIENDIKA_VERSION', '2.2.1096' );
define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
define ( 'DB_UPDATE_VERSION', 1087 ); define ( 'DB_UPDATE_VERSION', 1087 );

View file

@ -18,7 +18,7 @@ Please provide your full name as you would like it to be displayed on this syste
*Email Address* *Email Address*
Please provide a valid email address. Your email address is **never** published. We need this to send you account information and your login details. You may also occasionally receive notifications of incoming messages or items requiring your attention, but you have the ability to completely disable these once from your Settings page once you have logged in. Please provide a valid email address. Your email address is **never** published. We need this to send you account information and your login details. You may also occasionally receive notifications of incoming messages or items requiring your attention, but you have the ability to completely disable these from your Settings page once you have logged in.
*Nickname* *Nickname*

View file

@ -20,6 +20,12 @@ Instructions For Connecting To People On Specific Services
You may connect by providing your Identity Address on the 'Connect' page of any Friendika member. You may also put their Identity Address into the Connect box on your [Contacts](contacts) page. You may connect by providing your Identity Address on the 'Connect' page of any Friendika member. You may also put their Identity Address into the Connect box on your [Contacts](contacts) page.
**Diaspora**
Add the Diaspora 'handle' to the 'Connect/Follow' text box on your [Contacts](contacts) page.
**Identi.ca/StatusNet/GNU-Social** **Identi.ca/StatusNet/GNU-Social**
These are described as the "federated social web" or OStatus contacts. These are described as the "federated social web" or OStatus contacts.
@ -45,10 +51,6 @@ This will allow you to _connect_ with millions of pages on the internet. All tha
To follow a Twitter member, put the URL of the Twitter member's main page into the Connect box on your [Contacts](contacts) page. To reply, you must have the Twitter connector installed, and reply using your own status editor. Begin the message with @twitterperson replacing with the Twitter username. To follow a Twitter member, put the URL of the Twitter member's main page into the Connect box on your [Contacts](contacts) page. To reply, you must have the Twitter connector installed, and reply using your own status editor. Begin the message with @twitterperson replacing with the Twitter username.
**Diaspora**
To follow a Diaspora member, put either the URL or the pod address (Identity Address) of the Diaspora member into the Connect box on your [Contacts](contacts) page. It is not currently possible to reply to Diaspora members. This will be provided in a future release (once the Diaspora communication protocols stabilise and are published).
**Email** **Email**
Configure the email connector from your [Settings](settings) page. Once this has been done, you may enter an email addres to connect with using the Connect box on your [Contacts](contacts) page. They must be the sender of a message which is currently in your INBOX for the connect to succeed. You may include email contacts in private conversations. Configure the email connector from your [Settings](settings) page. Once this has been done, you may enter an email addres to connect with using the Connect box on your [Contacts](contacts) page. They must be the sender of a message which is currently in your INBOX for the connect to succeed. You may include email contacts in private conversations.

View file

@ -29,19 +29,21 @@ You can also use your Identity Address or other people's Identity Addresses to b
If you have supplied your mailbox connection information on your Settings page, you can enter the email address of anybody that has sent you a message recently and have their email messages show up in your social stream. You can also reply to them from within Friendika. If you have supplied your mailbox connection information on your Settings page, you can enter the email address of anybody that has sent you a message recently and have their email messages show up in your social stream. You can also reply to them from within Friendika.
People can also become friends with you from other networks. If a friend of yours has an identi.ca account, they can become friends with you by putting your Friendika Identity Address into their identi.ca subscription dialog box. People can also become friends with you from other networks. If a friend of yours has an identi.ca account, they can become friends with you by putting your Friendika Identity Address into their identi.ca subscription dialog box. A similar mechanism is available for Diaspora members, by putting your iendtity address into their search bar.
If this happens you will receive a notification. You will need to approve this before the friendship is complete. Note: Some versions of StatusNet software may require the full URL to your profile and may not work with the identity address.
Some networks allow people to send you messages without being friends and without your approval. Friendika does not allow this by default, as it would open a gateway for spam. So when you've approved a friend request from one of these networks, look at your contact page for that person (this will be displayed as soon as you approve the relationship). They might be marked as an "Ignored" contact. When somebody requests friendship you will receive a notification. You will need to approve this before the friendship is complete.
This means they can see some of your posts (your public posts), but they aren't permitted to send you anything. You can "Un-ignore" them if you desire to allow them to contact you directly and to have their status updates appear in your Network feed. Some networks allow people to send you messages without being friends and without your approval. Friendika does not allow this by default, as it would open a gateway for spam.
When you receive a friendship notification from another Friendika member, you will have the option of allowing them as a "fan" or as a "friend". If they are a fan, they can see what you have to say, including private communications that you send to them, but not vice versa. As a friend, you can both communicate with each other. When you receive a friendship notification from another Friendika member, you will have the option of allowing them as a "fan" or as a "friend". If they are a fan, they can see what you have to say, including private communications that you send to them, but not vice versa. As a friend, you can both communicate with each other.
Diaspora uses a different terminology, and you are given the option of allowing them to "share with you", or being full friends.
Once you have become friends, if you find the person constantly sends you spam or worthless information, you can "Ignore" them - without breaking off the friendship or even alerting them to the fact that you aren't interested in anything they are saying. In many ways they are like a "fan" - but they don't know this. They think they are a friend. Once you have become friends, if you find the person constantly sends you spam or worthless information, you can "Ignore" them - without breaking off the friendship or even alerting them to the fact that you aren't interested in anything they are saying. In many ways they are like a "fan" - but they don't know this. They think they are a friend.
You can also "block" a person. This completely blocks communications with that person. They may still be able to see your public posts, as can anybody in the world, but they cannot communicate with you directly in any way. They will know or be able to discover that they have been blocked but there's nothing they can do about it. You can also "block" a person. This completely blocks communications with that person. They may still be able to see your public posts, as can anybody in the world, but they cannot communicate with you directly.
You can also delete a friend no matter what the friendship status - which complete removes everything relating to that person from your website. You can also delete a friend no matter what the friendship status - which complete removes everything relating to that person from your website.

View file

@ -43,7 +43,7 @@ Although you may have multiple profiles, you only have one profile photo. This i
On the site Directory page, you may search for people with published profiles who are on this site. The search is typically for your nickname or part of your full name. However this search will also match against other profile fields - such as gender, location, "about", work, and education. You may also include "Keywords" in your default profile - which may be used to search for common interests with other members. You have two sets of keywords available - public and private. Private keywords are *not* visible to anybody. You could use these keywords to locate people who share membership in secret societies, or that share a love of fishing (for example) - without making this information visible on your public profile. Public keywords are used in the friend suggestion tool and although they aren't readily visible, they may be seen by viewing the HTML of your profile page. On the site Directory page, you may search for people with published profiles who are on this site. The search is typically for your nickname or part of your full name. However this search will also match against other profile fields - such as gender, location, "about", work, and education. You may also include "Keywords" in your default profile - which may be used to search for common interests with other members. You have two sets of keywords available - public and private. Private keywords are *not* visible to anybody. You could use these keywords to locate people who share membership in secret societies, or that share a love of fishing (for example) - without making this information visible on your public profile. Public keywords are used in the friend suggestion tool and although they aren't readily visible, they may be seen by viewing the HTML of your profile page.
Directory searches are also able to use "boolean" logic so that you can search for "+lesbian +Florida" and find those who's sexual preference (or keywords) contain the world "lesbian" and that live in Florida. See the section on "Topical Tags" on the [[Tags-and-Mentions]] page for more information on performing boolean searches. Directory searches are also able to use "boolean" logic so that you can search for "+lesbian +Florida" and find those who's sexual preference (or keywords) contain the world "lesbian" and that live in Florida. See the section on "Topical Tags" on the [Tags-and-Mentions](help/Tags-and-Mentions) page for more information on performing boolean searches.
On your Contacts page is a link to "Find People with Shared Interests" (unless your site administrator has disabled the global directory). This will combine both your public and private keywords, and find people in the global directory who have matching and/or similar keywords. (Your private keywords are not identified or stored on the global directory). The more keywords you provide, the more relevant the search results that are returned. These are sorted by relevance. You may discover that you are the first person on the list - because you are very likely the most relevant match for your keywords in the directory. On your Contacts page is a link to "Find People with Shared Interests" (unless your site administrator has disabled the global directory). This will combine both your public and private keywords, and find people in the global directory who have matching and/or similar keywords. (Your private keywords are not identified or stored on the global directory). The more keywords you provide, the more relevant the search results that are returned. These are sorted by relevance. You may discover that you are the first person on the list - because you are very likely the most relevant match for your keywords in the directory.

View file

@ -471,7 +471,7 @@ function probe_url($url, $mode = PROBE_NORMAL) {
} }
if(strlen($dfrn)) { if(strlen($dfrn)) {
$ret = scrape_dfrn($dfrn); $ret = scrape_dfrn(($hcard) ? $hcard : $dfrn);
if(is_array($ret) && x($ret,'dfrn-request')) { if(is_array($ret) && x($ret,'dfrn-request')) {
$network = NETWORK_DFRN; $network = NETWORK_DFRN;
$request = $ret['dfrn-request']; $request = $ret['dfrn-request'];

View file

@ -8,6 +8,10 @@ require_once('include/event.php');
function diaspora2bb($s) { function diaspora2bb($s) {
// bug #127
$s = preg_replace('/\[(.+?)\]\((.+?)[^\\\]_(.+?)\)/','[$1]($2\\_$3)',$s);
$s = str_replace(array('\\**','\\__','\\*','\\_'), array('-^doublestar^-','-^doublescore-^','-^star^-','-^score^-'),$s); $s = str_replace(array('\\**','\\__','\\*','\\_'), array('-^doublestar^-','-^doublescore-^','-^star^-','-^score^-'),$s);
$s = preg_replace("/\*\*\*(.+?)\*\*\*/", '[b][i]$1[/i][/b]', $s); $s = preg_replace("/\*\*\*(.+?)\*\*\*/", '[b][i]$1[/i][/b]', $s);
$s = preg_replace("/\_\_\_(.+?)\_\_\_/", '[b][i]$1[/i][/b]', $s); $s = preg_replace("/\_\_\_(.+?)\_\_\_/", '[b][i]$1[/i][/b]', $s);
@ -15,6 +19,7 @@ function diaspora2bb($s) {
$s = preg_replace("/\_\_(.+?)\_\_/", '[b]$1[/b]', $s); $s = preg_replace("/\_\_(.+?)\_\_/", '[b]$1[/b]', $s);
$s = preg_replace("/\*(.+?)\*/", '[i]$1[/i]', $s); $s = preg_replace("/\*(.+?)\*/", '[i]$1[/i]', $s);
$s = preg_replace("/\_(.+?)\_/", '[i]$1[/i]', $s); $s = preg_replace("/\_(.+?)\_/", '[i]$1[/i]', $s);
$s = str_replace(array('-^doublestar^-','-^doublescore-^','-^star^-','-^score^-'), array('**','__','*','_'), $s); $s = str_replace(array('-^doublestar^-','-^doublescore-^','-^star^-','-^score^-'), array('**','__','*','_'), $s);
$s = preg_replace('/\!\[(.+?)\]\((.+?)\)/','[img]$2[/img]',$s); $s = preg_replace('/\!\[(.+?)\]\((.+?)\)/','[img]$2[/img]',$s);
$s = preg_replace('/\[(.+?)\]\((.+?)\)/','[url=$2]$1[/url]',$s); $s = preg_replace('/\[(.+?)\]\((.+?)\)/','[url=$2]$1[/url]',$s);

View file

@ -259,22 +259,29 @@ function convert_xml_element_to_array($xml_element, &$recursion_depth=0) {
// or if the resultant personal XRD doesn't contain a supported // or if the resultant personal XRD doesn't contain a supported
// subscription/friend-request attribute. // subscription/friend-request attribute.
// amended 7/9/2011 to return an hcard which could save potentially loading
// a lengthy content page to scrape dfrn attributes
if(! function_exists('webfinger_dfrn')) { if(! function_exists('webfinger_dfrn')) {
function webfinger_dfrn($s) { function webfinger_dfrn($s,&$hcard) {
if(! strstr($s,'@')) { if(! strstr($s,'@')) {
return $s; return $s;
} }
$profile_link = '';
$links = webfinger($s); $links = webfinger($s);
logger('webfinger_dfrn: ' . $s . ':' . print_r($links,true), LOGGER_DATA); logger('webfinger_dfrn: ' . $s . ':' . print_r($links,true), LOGGER_DATA);
if(count($links)) { if(count($links)) {
foreach($links as $link) foreach($links as $link) {
if($link['@attributes']['rel'] === NAMESPACE_DFRN) if($link['@attributes']['rel'] === NAMESPACE_DFRN)
return $link['@attributes']['href']; $profile_link = $link['@attributes']['href'];
foreach($links as $link)
if($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) if($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB)
return 'stat:' . $link['@attributes']['template']; $profile_link = 'stat:' . $link['@attributes']['template'];
if($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard')
$hcard = $link['@attributes']['href'];
}
} }
return ''; return $profile_link;
}} }}
// Given an email style address, perform webfinger lookup and // Given an email style address, perform webfinger lookup and

View file

@ -1,5 +1,6 @@
<?php <?php
class Template { class Template {
var $r; var $r;
var $search; var $search;
@ -8,6 +9,8 @@
var $nodes = array(); var $nodes = array();
var $done = false; var $done = false;
var $d = false; var $d = false;
var $lang = null;
private function _preg_error(){ private function _preg_error(){
switch(preg_last_error()){ switch(preg_last_error()){
@ -156,8 +159,24 @@
krsort($this->nodes); krsort($this->nodes);
return $s; return $s;
} }
private function _get_lang(){
if ($this->lang!=null) return $this->lang;
$a = get_app();
$this->lang=array();
foreach ($a->strings as $k=>$v){
$k = preg_replace("/[^a-z0-9-]/", "", str_replace(" ","-", strtolower($k)));
$this->lang[$k] = $v;
}
return $this->lang;
}
public function replace($s, $r) { public function replace($s, $r) {
if (!x($r,'$lang')){
$r['$lang'] = &$this->_get_lang();
}
$this->r = $r; $this->r = $r;
$this->search = array(); $this->search = array();
$this->replace = array(); $this->replace = array();
@ -171,7 +190,7 @@
// remove comments block // remove comments block
$s = preg_replace('/{#[^#]*#}/', "" , $s); $s = preg_replace('/{#[^#]*#}/', "" , $s);
// replace strings recursively (limit to 10 loops) // replace strings recursively (limit to 10 loops)
$os = ""; $count=0; $os = ""; $count=0;
while($os!=$s && $count<10){ while($os!=$s && $count<10){

View file

@ -566,7 +566,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
dbesc($newurl), dbesc($newurl),
intval($local_uid) intval($local_uid)
); );
if(! count($r)) { if(! count($ret)) {
// this is either a bogus confirmation (?) or we deleted the original introduction. // this is either a bogus confirmation (?) or we deleted the original introduction.
$message = t('Contact record was not found for you on our site.'); $message = t('Contact record was not found for you on our site.');
xml_status(3,$message); xml_status(3,$message);
@ -581,6 +581,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$foreign_pubkey = $ret[0]['site-pubkey']; $foreign_pubkey = $ret[0]['site-pubkey'];
$dfrn_record = $ret[0]['id']; $dfrn_record = $ret[0]['id'];
if(! $foreign_pubkey) {
$message = sprintf( t('Site public key not available in contact record for URL %s.'), $newurl);
xml_status(3,$message);
}
$decrypted_dfrn_id = ""; $decrypted_dfrn_id = "";
openssl_public_decrypt($dfrn_id,$decrypted_dfrn_id,$foreign_pubkey); openssl_public_decrypt($dfrn_id,$decrypted_dfrn_id,$foreign_pubkey);

View file

@ -277,14 +277,15 @@ function dfrn_request_post(&$a) {
// Canonicalise email-style profile locator // Canonicalise email-style profile locator
$url = webfinger_dfrn($url); $hcard = '';
$url = webfinger_dfrn($url,$hcard);
if(substr($url,0,5) === 'stat:') { if(substr($url,0,5) === 'stat:') {
$network = 'stat'; $network = NETWORK_OSTATUS;
$url = substr($url,5); $url = substr($url,5);
} }
else { else {
$network = 'dfrn'; $network = NETWORK_DFRN;
} }
logger('dfrn_request: url: ' . $url); logger('dfrn_request: url: ' . $url);
@ -342,7 +343,7 @@ function dfrn_request_post(&$a) {
require_once('Scrape.php'); require_once('Scrape.php');
$parms = scrape_dfrn($url); $parms = scrape_dfrn(($hcard) ? $hcard : $url);
if(! count($parms)) { if(! count($parms)) {
notice( t('Profile location is not valid or does not contain profile information.') . EOL ); notice( t('Profile location is not valid or does not contain profile information.') . EOL );
@ -611,6 +612,9 @@ function dfrn_request_content(&$a) {
$myaddr = ((x($_GET,'address')) ? $_GET['address'] : ''); $myaddr = ((x($_GET,'address')) ? $_GET['address'] : '');
} }
$target_addr = $a->profile['nickname'] . '@' . substr(z_root(), strpos(z_root(),'://') + 3 );
/** /**
* *
* The auto_request form only has the profile address * The auto_request form only has the profile address
@ -624,6 +628,11 @@ function dfrn_request_content(&$a) {
else else
$tpl = get_markup_template('auto_request.tpl'); $tpl = get_markup_template('auto_request.tpl');
$page_desc = sprintf( t('Diaspora members: Please do not use this form. Instead, enter "%s" into your Diaspora search bar.'),
$target_addr) . EOL . EOL;
$page_desc .= t("Please enter your 'Identity Address' from one of the following supported social networks:");
$o .= replace_macros($tpl,array( $o .= replace_macros($tpl,array(
'$header' => t('Friend/Connection Request'), '$header' => t('Friend/Connection Request'),
'$desc' => t('Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca'), '$desc' => t('Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca'),
@ -632,11 +641,11 @@ function dfrn_request_content(&$a) {
'$yes' => t('Yes'), '$yes' => t('Yes'),
'$no' => t('No'), '$no' => t('No'),
'$add_note' => t('Add a personal note:'), '$add_note' => t('Add a personal note:'),
'$page_desc' => t("Please enter your 'Identity Address' from one of the following supported social networks:"), '$page_desc' => $page_desc,
'$friendika' => t('Friendika'), '$friendika' => t('Friendika'),
'$statusnet' => t('StatusNet/Federated Social Web'), '$statusnet' => t('StatusNet/Federated Social Web'),
'$private_net' => t("Private \x28secure\x29 network"), '$diaspora' => t('Diaspora'),
'$public_net' => t("Public \x28insecure\x29 network"), '$diasnote' => t('- please share from your own site as noted above'),
'$your_address' => t('Your Identity Address:'), '$your_address' => t('Your Identity Address:'),
'$submit' => t('Submit Request'), '$submit' => t('Submit Request'),
'$cancel' => t('Cancel'), '$cancel' => t('Cancel'),

View file

@ -14,6 +14,9 @@ function network_init(&$a) {
$a->page['aside'] = ''; $a->page['aside'] = '';
$search = ((x($_GET,'search')) ? escape_tags($_GET['search']) : ''); $search = ((x($_GET,'search')) ? escape_tags($_GET['search']) : '');
// We need a better way of managing a growing argument list
$srchurl = '/network' $srchurl = '/network'
. ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '')
. ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '') . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '')
@ -44,8 +47,9 @@ function network_init(&$a) {
$a->page['aside'] .= '<div id="network-view-link">'; $a->page['aside'] .= '<div id="network-view-link">';
if(($a->argc > 1 && $a->argv[1] === 'new') || ($a->argc > 2 && $a->argv[2] === 'new') || x($_GET,'search')) if(($a->argc > 1 && $a->argv[1] === 'new') || ($a->argc > 2 && $a->argv[2] === 'new') || x($_GET,'search')) {
$a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') . '">' . t('View Conversations') . '</a></div>'; $a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') . '">' . t('View Conversations') . '</a></div>';
}
else { else {
$a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . $a->cmd . '/new' . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '">' . t('View New Items') . '</a></div>'; $a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . $a->cmd . '/new' . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '">' . t('View New Items') . '</a></div>';
@ -65,6 +69,14 @@ function network_init(&$a) {
. '<span class="network-star icon starred"></span>' . '<span class="network-star icon starred"></span>'
. '<div class="clear"></div></div>'; . '<div class="clear"></div></div>';
if(! $_GET['bmark'])
$a->page['aside'] .= '<div id="network-bmark-link">'
. '<a class="network-bmark" href="' . $a->get_baseurl() . '/' . $a->cmd
. ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '&bmark=1" >'
. t('View Bookmarks') . '</a>'
. '<div class="clear"></div></div>';
} }
$a->page['aside'] .= '</div>'; $a->page['aside'] .= '</div>';
@ -299,21 +311,29 @@ function network_content(&$a, $update = 0) {
else { else {
// Normal conversation view // Normal conversation view
// Show conversation by activity date
// First fetch a known number of parent items // First fetch a known number of parent items
$r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact_uid` $r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact_uid`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 , (SELECT `_com`.`parent`,max(`_com`.`created`) as `created`
FROM `item` AS `_com`
WHERE `_com`.`uid`=%d AND
(`_com`.`parent`!=`_com`.`id` OR `_com`.`id` NOT IN (SELECT `__com`.`parent` FROM `item` as `__com` WHERE `__com`.`parent`!=`__com`.`id`))
GROUP BY `_com`.`parent` ORDER BY `created` DESC) AS `com`
WHERE `item`.`id`=`com`.`parent` AND
`item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `item`.`parent` = `item`.`id`
$sql_extra $sql_extra
ORDER BY `item`.`created` DESC LIMIT %d ,%d ", ORDER BY `com`.`created` DESC LIMIT %d ,%d ",
intval(local_user()),
intval(local_user()), intval(local_user()),
intval($a->pager['start']), intval($a->pager['start']),
intval($a->pager['itemspage']) intval($a->pager['itemspage'])
); );
// Then fetch all the children of the parents that are on this page // Then fetch all the children of the parents that are on this page
$parents_arr = array(); $parents_arr = array();
@ -328,13 +348,19 @@ function network_content(&$a, $update = 0) {
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`, `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`, `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid` `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item`, (SELECT `p`.`id`,`p`.`created` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact` FROM `item`, `contact`,
(SELECT `_com`.`parent`,max(`_com`.`created`) as `created`
FROM `item` AS `_com`
WHERE `_com`.`uid`=%d AND
(`_com`.`parent`!=`_com`.`id` OR `_com`.`id` NOT IN (SELECT `__com`.`parent` FROM `item` as `__com` WHERE `__com`.`parent`!=`__com`.`id`))
GROUP BY `_com`.`parent` ORDER BY `created` DESC) AS `com`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
AND `contact`.`id` = `item`.`contact-id` AND `contact`.`id` = `item`.`contact-id`
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `item`.`parent` = `parentitem`.`id` AND `item`.`parent` IN ( %s ) AND `item`.`parent` = `com`.`parent` AND `item`.`parent` IN ( %s )
$sql_extra $sql_extra
ORDER BY `parentitem`.`created` DESC, `item`.`gravity` ASC, `item`.`created` ASC ", ORDER BY `com`.`created` DESC, `item`.`gravity` ASC, `item`.`created` ASC ",
intval(local_user()),
intval(local_user()), intval(local_user()),
dbesc($parents_str) dbesc($parents_str)
); );

View file

@ -4,8 +4,9 @@
<p id="dfrn-request-intro"> <p id="dfrn-request-intro">
$page_desc<br /> $page_desc<br />
<ul id="dfrn-request-networks"> <ul id="dfrn-request-networks">
<li><a href="http://friendika.com" title="$private_net">$friendika</a> <img src="images/lock_icon.gif" alt="$private_net" title="$private_net" /></li> <li><a href="http://friendika.com" title="$friendika">$friendika</a></li>
<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a> <img src="images/unlock_icon.gif" alt="$public_net" title="$public_net"/></li> <li><a href="http://joindiaspora.com" title="$diaspora">$diaspora</a> $diasnote</li>
<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a></li>
</ul> </ul>
</p> </p>

View file

@ -4,8 +4,9 @@
<p id="dfrn-request-intro"> <p id="dfrn-request-intro">
$page_desc<br /> $page_desc<br />
<ul id="dfrn-request-networks"> <ul id="dfrn-request-networks">
<li><a href="http://friendika.com" title="$private_net">$friendika</a> <img src="images/lock_icon.gif" alt="$private_net" title="$private_net" /></li> <li><a href="http://friendika.com" title="$friendika">$friendika</a></li>
<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a> <img src="images/unlock_icon.gif" alt="$public_net" title="$public_net"/></li> <li><a href="http://joindiaspora.com" title="$diaspora">$diaspora</a> $diasnote</li>
<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a></li>
</ul> </ul>
$desc $desc
</p> </p>

4561
view/ru/messages.po Normal file

File diff suppressed because it is too large Load diff

1043
view/ru/strings.php Normal file

File diff suppressed because it is too large Load diff

View file

@ -803,6 +803,9 @@ input#dfrn-url {
float: left; float: left;
margin-right: 5px; margin-right: 5px;
} }
#network-bmark-link {
margin-top: 10px;
}
.wall-item-content-wrapper { .wall-item-content-wrapper {
margin-top: 10px; margin-top: 10px;

View file

@ -1019,6 +1019,10 @@ input#dfrn-url {
float: left; float: left;
margin-right: 5px; margin-right: 5px;
} }
#network-bmark-link {
margin-top: 10px;
}
.wall-item-info.wallwall { .wall-item-info.wallwall {

View file

@ -228,8 +228,8 @@ Messages MAY be imported from other networks and systems which have no
knowledge of salmon signatures. The salmon signature in this case MUST be the knowledge of salmon signatures. The salmon signature in this case MUST be the
exact string 'NOTSIGNED' to indicate that the author (From address) cannot be exact string 'NOTSIGNED' to indicate that the author (From address) cannot be
validated using salmon verification. This message MUST be relayed by a Sender validated using salmon verification. This message MUST be relayed by a Sender
who can provide a valid salmon signature of the message. Delivery systems MAY who can provide a valid salmon signature of the message via zot:sig. Delivery
reject foreign messages. systems MAY reject foreign messages.