Merge pull request #1318 from annando/1501-global-contacts
Many enhacenments to the global contacts
This commit is contained in:
commit
cd7d29d13e
9 changed files with 292 additions and 47 deletions
2
boot.php
2
boot.php
|
@ -18,7 +18,7 @@ define ( 'FRIENDICA_PLATFORM', 'Friendica');
|
|||
define ( 'FRIENDICA_CODENAME', 'Ginger');
|
||||
define ( 'FRIENDICA_VERSION', '3.3.2' );
|
||||
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
|
||||
define ( 'DB_UPDATE_VERSION', 1177 );
|
||||
define ( 'DB_UPDATE_VERSION', 1178 );
|
||||
define ( 'EOL', "<br />\r\n" );
|
||||
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
|
||||
|
||||
|
|
|
@ -345,7 +345,7 @@ function probe_url($url, $mode = PROBE_NORMAL) {
|
|||
|
||||
$result = Cache::get("probe_url:".$mode.":".$url);
|
||||
if (!is_null($result)) {
|
||||
$result = unserialize($result);
|
||||
$result = unserialize($result);
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
@ -356,6 +356,23 @@ function probe_url($url, $mode = PROBE_NORMAL) {
|
|||
$diaspora_key = '';
|
||||
$has_lrdd = false;
|
||||
$email_conversant = false;
|
||||
$connectornetworks = false;
|
||||
$appnet = false;
|
||||
|
||||
if (strpos($url,'twitter.com')) {
|
||||
$connectornetworks = true;
|
||||
$network = NETWORK_TWITTER;
|
||||
}
|
||||
|
||||
if (strpos($url,'www.facebook.com')) {
|
||||
$connectornetworks = true;
|
||||
$network = NETWORK_FACEBOOK;
|
||||
}
|
||||
|
||||
if (strpos($url,'alpha.app.net')) {
|
||||
$appnet = true;
|
||||
$network = NETWORK_APPNET;
|
||||
}
|
||||
|
||||
// Twitter is deactivated since twitter closed its old API
|
||||
//$twitter = ((strpos($url,'twitter.com') !== false) ? true : false);
|
||||
|
@ -363,7 +380,7 @@ function probe_url($url, $mode = PROBE_NORMAL) {
|
|||
|
||||
$at_addr = ((strpos($url,'@') !== false) ? true : false);
|
||||
|
||||
if((! $twitter) && (! $lastfm)) {
|
||||
if((!$appnet) && (!$lastfm) && !$connectornetworks) {
|
||||
|
||||
if(strpos($url,'mailto:') !== false && $at_addr) {
|
||||
$url = str_replace('mailto:','',$url);
|
||||
|
@ -606,13 +623,16 @@ function probe_url($url, $mode = PROBE_NORMAL) {
|
|||
// Will leave it to others to figure out how to grab the avatar, which is on the $url page in the open graph meta links
|
||||
}
|
||||
|
||||
if($twitter || ! $poll)
|
||||
if($appnet || ! $poll)
|
||||
$check_feed = true;
|
||||
if((! isset($vcard)) || (! x($vcard,'fn')) || (! $profile))
|
||||
$check_feed = true;
|
||||
if(($at_addr) && (! count($links)))
|
||||
$check_feed = false;
|
||||
|
||||
if ($connectornetworks)
|
||||
$check_feed = false;
|
||||
|
||||
if($check_feed) {
|
||||
|
||||
$feedret = scrape_feed(($poll) ? $poll : $url);
|
||||
|
|
|
@ -415,6 +415,8 @@ function db_definition() {
|
|||
"nick" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"about" => array("type" => "text", "not null" => "1"),
|
||||
"keywords" => array("type" => "text", "not null" => "1"),
|
||||
"gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
|
||||
"attag" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"photo" => array("type" => "text", "not null" => "1"),
|
||||
"thumb" => array("type" => "text", "not null" => "1"),
|
||||
|
@ -619,6 +621,10 @@ function db_definition() {
|
|||
"photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"connect" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"updated" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"),
|
||||
"location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
"about" => array("type" => "text", "not null" => "1"),
|
||||
"keywords" => array("type" => "text", "not null" => "1"),
|
||||
"gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
|
||||
"network" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
|
||||
),
|
||||
"indexes" => array(
|
||||
|
|
|
@ -2252,7 +2252,19 @@ function diaspora_profile($importer,$xml,$msg) {
|
|||
$birthday = unxmlify($xml->birthday);
|
||||
$location = diaspora2bb(unxmlify($xml->location));
|
||||
$about = diaspora2bb(unxmlify($xml->bio));
|
||||
$gender = unxmlify($xml->gender);
|
||||
$tags = unxmlify($xml->tag_string);
|
||||
|
||||
$tags = explode("#", $tags);
|
||||
|
||||
$keywords = array();
|
||||
foreach ($tags as $tag) {
|
||||
$tag = trim(strtolower($tag));
|
||||
if ($tag != "")
|
||||
$keywords[] = $tag;
|
||||
}
|
||||
|
||||
$keywords = implode(", ", $keywords);
|
||||
|
||||
$handle_parts = explode("@", $diaspora_handle);
|
||||
if($name === '') {
|
||||
|
@ -2288,7 +2300,7 @@ function diaspora_profile($importer,$xml,$msg) {
|
|||
// TODO: update name on item['author-name'] if the name changed. See consume_feed()
|
||||
// Not doing this currently because D* protocol is scheduled for revision soon.
|
||||
|
||||
$r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' , `bd` = '%s', `location` = '%s', `about` = '%s' WHERE `id` = %d AND `uid` = %d",
|
||||
$r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' , `bd` = '%s', `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s' WHERE `id` = %d AND `uid` = %d",
|
||||
dbesc($name),
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($images[0]),
|
||||
|
@ -2298,10 +2310,18 @@ function diaspora_profile($importer,$xml,$msg) {
|
|||
dbesc($birthday),
|
||||
dbesc($location),
|
||||
dbesc($about),
|
||||
dbesc($keywords),
|
||||
dbesc($gender),
|
||||
intval($contact['id']),
|
||||
intval($importer['uid'])
|
||||
);
|
||||
|
||||
if (unxmlify($xml->searchable) == "true") {
|
||||
require_once('include/socgraph.php');
|
||||
poco_check($contact['url'], $name, NETWORK_DIASPORA, $images[0], $about, $location, $gender, $keywords, "",
|
||||
datetime_convert(), $contact['id'], $importer['uid']);
|
||||
}
|
||||
|
||||
$profileurl = "";
|
||||
$author = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1",
|
||||
dbesc(normalise_link($contact['url'])));
|
||||
|
|
|
@ -1350,6 +1350,9 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
|||
return 0;
|
||||
}
|
||||
|
||||
// Store the unescaped version
|
||||
$unescaped = $arr;
|
||||
|
||||
dbesc_array($arr);
|
||||
|
||||
logger('item_store: ' . print_r($arr,true), LOGGER_DATA);
|
||||
|
@ -1360,10 +1363,12 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
|||
. implode("', '", array_values($arr))
|
||||
. "')" );
|
||||
|
||||
// find the item we just created
|
||||
// And restore it
|
||||
$arr = $unescaped;
|
||||
|
||||
// find the item we just created
|
||||
$r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC ",
|
||||
$arr['uri'], // already dbesc'd
|
||||
dbesc($arr['uri']),
|
||||
intval($arr['uid'])
|
||||
);
|
||||
|
||||
|
@ -1374,8 +1379,12 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
|||
// Add every contact to the global contact table
|
||||
// Contacts from the statusnet connector are also added since you could add them in OStatus as well.
|
||||
if (!$arr['private'] AND in_array($arr["network"],
|
||||
array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_STATUSNET, "")))
|
||||
poco_check($arr["author-link"], $arr["author-name"], $arr["network"], $arr["author-avatar"], "", $arr["received"], $arr['contact-id'], $arr['uid']);
|
||||
array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_STATUSNET, ""))) {
|
||||
poco_check($arr["author-link"], $arr["author-name"], $arr["network"], $arr["author-avatar"], "", "", "", "", "", $arr["received"], $arr["contact-id"], $arr["uid"]);
|
||||
|
||||
// Maybe its a body with a shared item? Then extract a global contact from it.
|
||||
poco_contact_from_body($arr["body"], $arr["received"], $arr["contact-id"], $arr["uid"]);
|
||||
}
|
||||
|
||||
// Set "success_update" to the date of the last time we heard from this contact
|
||||
// This can be used to filter for inactive contacts and poco.
|
||||
|
@ -1437,7 +1446,7 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
|||
if(count($r) > 1) {
|
||||
logger('item_store: duplicated post occurred. Removing duplicates.');
|
||||
q("DELETE FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `id` != %d ",
|
||||
$arr['uri'],
|
||||
dbesc($arr['uri']),
|
||||
intval($arr['uid']),
|
||||
intval($current_post)
|
||||
);
|
||||
|
|
|
@ -39,7 +39,7 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
|
|||
if(! $url)
|
||||
return;
|
||||
|
||||
$url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network' : '?fields=displayName,urls,photos,updated,network') ;
|
||||
$url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender') ;
|
||||
|
||||
logger('poco_load: ' . $url, LOGGER_DEBUG);
|
||||
|
||||
|
@ -69,6 +69,10 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
|
|||
$name = '';
|
||||
$network = '';
|
||||
$updated = '0000-00-00 00:00:00';
|
||||
$location = '';
|
||||
$about = '';
|
||||
$keywords = '';
|
||||
$gender = '';
|
||||
|
||||
$name = $entry->displayName;
|
||||
|
||||
|
@ -99,8 +103,31 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
|
|||
if(isset($entry->network))
|
||||
$network = $entry->network;
|
||||
|
||||
poco_check($profile_url, $name, $network, $profile_photo, $connect_url, $updated, $cid, $uid, $zcid);
|
||||
if(isset($entry->currentLocation))
|
||||
$location = $entry->currentLocation;
|
||||
|
||||
if(isset($entry->aboutMe))
|
||||
$about = $entry->aboutMe;
|
||||
|
||||
if(isset($entry->gender))
|
||||
$gender = $entry->gender;
|
||||
|
||||
if(isset($entry->tags))
|
||||
foreach($entry->tags as $tag)
|
||||
$keywords = implode(", ", $tag);
|
||||
|
||||
poco_check($profile_url, $name, $network, $profile_photo, $about, $location, $gender, $keywords, $connect_url, $updated, $cid, $uid, $zcid);
|
||||
|
||||
// Update the Friendica contacts. Diaspora is doing it via a message. (See include/diaspora.php)
|
||||
if (($location != "") OR ($about != "") OR ($keywords != "") OR ($gender != ""))
|
||||
q("UPDATE `contact` SET `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s'
|
||||
WHERE `nurl` = '%s' AND NOT `self` AND `network` = '%s'",
|
||||
dbesc($location),
|
||||
dbesc($about),
|
||||
dbesc($keywords),
|
||||
dbesc($gender),
|
||||
dbesc(normalise_link($profile_url)),
|
||||
dbesc(NETWORK_DFRN));
|
||||
}
|
||||
logger("poco_load: loaded $total entries",LOGGER_DEBUG);
|
||||
|
||||
|
@ -112,23 +139,60 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
|
|||
|
||||
}
|
||||
|
||||
function poco_check($profile_url, $name, $network, $profile_photo, $connect_url, $updated, $cid = 0, $uid = 0, $zcid = 0) {
|
||||
function poco_check($profile_url, $name, $network, $profile_photo, $about, $location, $gender, $keywords, $connect_url, $updated, $cid = 0, $uid = 0, $zcid = 0) {
|
||||
$gcid = "";
|
||||
|
||||
if (($profile_url == "") OR ($name == "") OR ($profile_photo == ""))
|
||||
if ($profile_url == "")
|
||||
return $gcid;
|
||||
|
||||
logger("profile-check URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG);
|
||||
|
||||
$x = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
|
||||
dbesc(normalise_link($profile_url))
|
||||
);
|
||||
if(count($x))
|
||||
$network = $x[0]["network"];
|
||||
|
||||
if (($network == "") OR ($name == "") OR ($profile_photo == "")) {
|
||||
require_once("include/Scrape.php");
|
||||
|
||||
$data = probe_url($profile_url, PROBE_DIASPORA);
|
||||
$network = $data["network"];
|
||||
$name = $data["name"];
|
||||
$profile_photo = $data["photo"];
|
||||
}
|
||||
|
||||
if (count($x) AND ($x[0]["network"] == "") AND ($network != "")) {
|
||||
q("UPDATE `gcontact` SET `network` = '%s' WHERE `nurl` = '%s'",
|
||||
dbesc($network),
|
||||
dbesc(normalise_link($profile_url))
|
||||
);
|
||||
}
|
||||
|
||||
if (($name == "") OR ($profile_photo == ""))
|
||||
return $gcid;
|
||||
|
||||
if (!in_array($network, array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA, NETWORK_STATUSNET)))
|
||||
return $gcid;
|
||||
|
||||
logger("profile-check URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG);
|
||||
|
||||
if(count($x)) {
|
||||
$gcid = $x[0]['id'];
|
||||
|
||||
if (($location == "") AND ($x[0]['location'] != ""))
|
||||
$location = $x[0]['location'];
|
||||
|
||||
if (($about == "") AND ($x[0]['about'] != ""))
|
||||
$about = $x[0]['about'];
|
||||
|
||||
if (($gender == "") AND ($x[0]['gender'] != ""))
|
||||
$gender = $x[0]['gender'];
|
||||
|
||||
if (($keywords == "") AND ($x[0]['keywords'] != ""))
|
||||
$keywords = $x[0]['keywords'];
|
||||
|
||||
if($x[0]['name'] != $name || $x[0]['photo'] != $profile_photo || $x[0]['updated'] < $updated) {
|
||||
q("update gcontact set `name` = '%s', `network` = '%s', `photo` = '%s', `connect` = '%s', `url` = '%s', `updated` = '%s'
|
||||
q("update gcontact set `name` = '%s', `network` = '%s', `photo` = '%s', `connect` = '%s', `url` = '%s',
|
||||
`updated` = '%s', `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s'
|
||||
where `nurl` = '%s'",
|
||||
dbesc($name),
|
||||
dbesc($network),
|
||||
|
@ -136,19 +200,27 @@ function poco_check($profile_url, $name, $network, $profile_photo, $connect_url,
|
|||
dbesc($connect_url),
|
||||
dbesc($profile_url),
|
||||
dbesc($updated),
|
||||
dbesc($location),
|
||||
dbesc($about),
|
||||
dbesc($keywords),
|
||||
dbesc($gender),
|
||||
dbesc(normalise_link($profile_url))
|
||||
);
|
||||
}
|
||||
} else {
|
||||
q("insert into `gcontact` (`name`,`network`, `url`,`nurl`,`photo`,`connect`, `updated`)
|
||||
values ('%s', '%s', '%s', '%s', '%s','%s', '%s')",
|
||||
q("insert into `gcontact` (`name`,`network`, `url`,`nurl`,`photo`,`connect`, `updated`, `location`, `about`, `keywords`, `gender`)
|
||||
values ('%s', '%s', '%s', '%s', '%s','%s', '%s', '%s', '%s', '%s', '%s')",
|
||||
dbesc($name),
|
||||
dbesc($network),
|
||||
dbesc($profile_url),
|
||||
dbesc(normalise_link($profile_url)),
|
||||
dbesc($profile_photo),
|
||||
dbesc($connect_url),
|
||||
dbesc($updated)
|
||||
dbesc($updated),
|
||||
dbesc($location),
|
||||
dbesc($about),
|
||||
dbesc($keywords),
|
||||
dbesc($gender)
|
||||
);
|
||||
$x = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
|
||||
dbesc(normalise_link($profile_url))
|
||||
|
@ -194,6 +266,30 @@ function poco_check($profile_url, $name, $network, $profile_photo, $connect_url,
|
|||
return $gcid;
|
||||
}
|
||||
|
||||
function poco_contact_from_body($body, $created, $cid, $uid) {
|
||||
preg_replace_callback("/\[share(.*?)\].*?\[\/share\]/ism",
|
||||
function ($match) use ($created, $cid, $uid){
|
||||
return(sub_poco_from_share($match, $created, $cid, $uid));
|
||||
}, $body);
|
||||
}
|
||||
|
||||
function sub_poco_from_share($share, $created, $cid, $uid) {
|
||||
$profile = "";
|
||||
preg_match("/profile='(.*?)'/ism", $share[1], $matches);
|
||||
if ($matches[1] != "")
|
||||
$profile = $matches[1];
|
||||
|
||||
preg_match('/profile="(.*?)"/ism', $share[1], $matches);
|
||||
if ($matches[1] != "")
|
||||
$profile = $matches[1];
|
||||
|
||||
if ($profile == "")
|
||||
return;
|
||||
|
||||
logger("prepare poco_check for profile ".$profile, LOGGER_DEBUG);
|
||||
poco_check($profile, "", "", "", "", "", "", "", "", $created, $cid, $uid);
|
||||
}
|
||||
|
||||
function count_common_friends($uid,$cid) {
|
||||
|
||||
$r = q("SELECT count(*) as `total`
|
||||
|
|
100
mod/poco.php
100
mod/poco.php
|
@ -22,7 +22,12 @@ function poco_init(&$a) {
|
|||
$format = (($_GET['format']) ? $_GET['format'] : 'json');
|
||||
|
||||
$justme = false;
|
||||
$global = false;
|
||||
|
||||
if($a->argc > 1 && $a->argv[1] === '@global') {
|
||||
$global = true;
|
||||
$update_limit = date("Y-m-d H:i:s", time() - 30 * 86400);
|
||||
}
|
||||
if($a->argc > 2 && $a->argv[2] === '@me')
|
||||
$justme = true;
|
||||
if($a->argc > 3 && $a->argv[3] === '@all')
|
||||
|
@ -33,7 +38,7 @@ function poco_init(&$a) {
|
|||
$cid = intval($a->argv[4]);
|
||||
|
||||
|
||||
if(! $system_mode) {
|
||||
if(!$system_mode AND !$global) {
|
||||
$r = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid`
|
||||
where `user`.`nickname` = '%s' and `profile`.`is-default` = 1 limit 1",
|
||||
dbesc($user)
|
||||
|
@ -46,13 +51,21 @@ function poco_init(&$a) {
|
|||
|
||||
if($justme)
|
||||
$sql_extra = " AND `contact`.`self` = 1 ";
|
||||
else
|
||||
$sql_extra = " AND `contact`.`self` = 0 ";
|
||||
// else
|
||||
// $sql_extra = " AND `contact`.`self` = 0 ";
|
||||
|
||||
if($cid)
|
||||
$sql_extra = sprintf(" AND `contact`.`id` = %d ",intval($cid));
|
||||
|
||||
if($system_mode) {
|
||||
if(x($_GET,'updatedSince'))
|
||||
$update_limit = date("Y-m-d H:i:s",strtotime($_GET['updatedSince']));
|
||||
|
||||
if ($global) {
|
||||
$r = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND `network` IN ('%s')",
|
||||
dbesc($update_limit),
|
||||
dbesc(NETWORK_DFRN)
|
||||
);
|
||||
} elseif($system_mode) {
|
||||
$r = q("SELECT count(*) AS `total` FROM `contact` WHERE `self` = 1 AND `network` IN ('%s', '%s', '%s', '%s', '')
|
||||
AND `uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) ",
|
||||
dbesc(NETWORK_DFRN),
|
||||
|
@ -60,8 +73,7 @@ function poco_init(&$a) {
|
|||
dbesc(NETWORK_OSTATUS),
|
||||
dbesc(NETWORK_STATUSNET)
|
||||
);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$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', '%s', '') $sql_extra",
|
||||
intval($user['uid']),
|
||||
|
@ -82,9 +94,18 @@ function poco_init(&$a) {
|
|||
$itemsPerPage = ((x($_GET,'count') && intval($_GET['count'])) ? intval($_GET['count']) : $totalResults);
|
||||
|
||||
|
||||
if($system_mode) {
|
||||
$r = q("SELECT * FROM `contact` WHERE `self` = 1 AND `network` IN ('%s', '%s', '%s', '%s', '')
|
||||
AND `uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) LIMIT %d, %d",
|
||||
if ($global) {
|
||||
$r = q("SELECT * FROM `gcontact` WHERE `updated` > '%s' AND `network` IN ('%s') LIMIT %d, %d",
|
||||
dbesc($update_limit),
|
||||
dbesc(NETWORK_DFRN),
|
||||
intval($startIndex),
|
||||
intval($itemsPerPage)
|
||||
);
|
||||
} elseif($system_mode) {
|
||||
$r = q("SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`, `profile`.`gender` AS `pgender`
|
||||
FROM `contact` INNER JOIN `profile` ON `profile`.`uid` = `contact`.`uid`
|
||||
WHERE `self` = 1 AND `network` IN ('%s', '%s', '%s', '%s', '') AND `profile`.`is-default`
|
||||
AND `contact`.`uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) LIMIT %d, %d",
|
||||
dbesc(NETWORK_DFRN),
|
||||
dbesc(NETWORK_DIASPORA),
|
||||
dbesc(NETWORK_OSTATUS),
|
||||
|
@ -92,8 +113,7 @@ function poco_init(&$a) {
|
|||
intval($startIndex),
|
||||
intval($itemsPerPage)
|
||||
);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$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', '%s', '') $sql_extra LIMIT %d, %d",
|
||||
intval($user['uid']),
|
||||
|
@ -105,13 +125,14 @@ function poco_init(&$a) {
|
|||
intval($itemsPerPage)
|
||||
);
|
||||
}
|
||||
|
||||
$ret = array();
|
||||
if(x($_GET,'sorted'))
|
||||
$ret['sorted'] = 'false';
|
||||
$ret['sorted'] = false;
|
||||
if(x($_GET,'filtered'))
|
||||
$ret['filtered'] = 'false';
|
||||
if(x($_GET,'updatedSince'))
|
||||
$ret['updateSince'] = 'false';
|
||||
$ret['filtered'] = false;
|
||||
if(x($_GET,'updatedSince') AND !$global)
|
||||
$ret['updatedSince'] = false;
|
||||
|
||||
$ret['startIndex'] = (string) $startIndex;
|
||||
$ret['itemsPerPage'] = (string) $itemsPerPage;
|
||||
|
@ -128,7 +149,9 @@ function poco_init(&$a) {
|
|||
'photos' => false,
|
||||
'aboutMe' => false,
|
||||
'currentLocation' => false,
|
||||
'network' => false
|
||||
'network' => false,
|
||||
'gender' => false,
|
||||
'tags' => false
|
||||
);
|
||||
|
||||
if((! x($_GET,'fields')) || ($_GET['fields'] === '@all'))
|
||||
|
@ -143,6 +166,18 @@ function poco_init(&$a) {
|
|||
if(is_array($r)) {
|
||||
if(count($r)) {
|
||||
foreach($r as $rr) {
|
||||
if (($rr['about'] == "") AND isset($rr['pabout']))
|
||||
$rr['about'] = $rr['pabout'];
|
||||
|
||||
if (($rr['location'] == "") AND isset($rr['plocation']))
|
||||
$rr['location'] = $rr['plocation'];
|
||||
|
||||
if (($rr['gender'] == "") AND isset($rr['pgender']))
|
||||
$rr['gender'] = $rr['pgender'];
|
||||
|
||||
if (($rr['keywords'] == "") AND isset($rr['pub_keywords']))
|
||||
$rr['keywords'] = $rr['pub_keywords'];
|
||||
|
||||
$entry = array();
|
||||
if($fields_ret['id'])
|
||||
$entry['id'] = $rr['id'];
|
||||
|
@ -152,6 +187,8 @@ function poco_init(&$a) {
|
|||
$entry['aboutMe'] = bbcode($rr['about'], false, false);
|
||||
if($fields_ret['currentLocation'])
|
||||
$entry['currentLocation'] = $rr['location'];
|
||||
if($fields_ret['gender'])
|
||||
$entry['gender'] = $rr['gender'];
|
||||
if($fields_ret['urls']) {
|
||||
$entry['urls'] = array(array('value' => $rr['url'], 'type' => 'profile'));
|
||||
if($rr['addr'] && ($rr['network'] !== NETWORK_MAIL))
|
||||
|
@ -160,16 +197,19 @@ function poco_init(&$a) {
|
|||
if($fields_ret['preferredUsername'])
|
||||
$entry['preferredUsername'] = $rr['nick'];
|
||||
if($fields_ret['updated']) {
|
||||
$entry['updated'] = $rr['success_update'];
|
||||
if (!$global) {
|
||||
$entry['updated'] = $rr['success_update'];
|
||||
|
||||
if ($rr['name-date'] > $entry['updated'])
|
||||
$entry['updated'] = $rr['name-date'];
|
||||
if ($rr['name-date'] > $entry['updated'])
|
||||
$entry['updated'] = $rr['name-date'];
|
||||
|
||||
if ($rr['uri-date'] > $entry['updated'])
|
||||
$entry['updated'] = $rr['uri-date'];
|
||||
if ($rr['uri-date'] > $entry['updated'])
|
||||
$entry['updated'] = $rr['uri-date'];
|
||||
|
||||
if ($rr['avatar-date'] > $entry['updated'])
|
||||
$entry['updated'] = $rr['avatar-date'];
|
||||
if ($rr['avatar-date'] > $entry['updated'])
|
||||
$entry['updated'] = $rr['avatar-date'];
|
||||
} else
|
||||
$entry['updated'] = $rr['updated'];
|
||||
|
||||
$entry['updated'] = date("c", strtotime($entry['updated']));
|
||||
}
|
||||
|
@ -182,6 +222,20 @@ function poco_init(&$a) {
|
|||
if (($entry['network'] == "") AND ($rr['self']))
|
||||
$entry['network'] = NETWORK_DFRN;
|
||||
}
|
||||
if($fields_ret['tags']) {
|
||||
$tags = str_replace(","," ",$rr['keywords']);
|
||||
$tags = explode(" ", $tags);
|
||||
|
||||
$cleaned = array();
|
||||
foreach ($tags as $tag) {
|
||||
$tag = trim(strtolower($tag));
|
||||
if ($tag != "")
|
||||
$cleaned[] = $tag;
|
||||
}
|
||||
|
||||
$entry['tags'] = array($cleaned);
|
||||
}
|
||||
|
||||
$ret['entry'][] = $entry;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -142,6 +142,23 @@ function profiles_init(&$a) {
|
|||
|
||||
}
|
||||
|
||||
function profile_clean_keywords($keywords) {
|
||||
$keywords = str_replace(","," ",$keywords);
|
||||
$keywords = explode(" ", $keywords);
|
||||
|
||||
$cleaned = array();
|
||||
foreach ($keywords as $keyword) {
|
||||
$keyword = trim(strtolower($keyword));
|
||||
$keyword = trim($keyword, "#");
|
||||
if ($keyword != "")
|
||||
$cleaned[] = $keyword;
|
||||
}
|
||||
|
||||
$keywords = implode(", ", $cleaned);
|
||||
|
||||
return $keywords;
|
||||
}
|
||||
|
||||
function profiles_post(&$a) {
|
||||
|
||||
if(! local_user()) {
|
||||
|
@ -212,8 +229,8 @@ function profiles_post(&$a) {
|
|||
$region = notags(trim($_POST['region']));
|
||||
$postal_code = notags(trim($_POST['postal_code']));
|
||||
$country_name = notags(trim($_POST['country_name']));
|
||||
$pub_keywords = notags(trim($_POST['pub_keywords']));
|
||||
$prv_keywords = notags(trim($_POST['prv_keywords']));
|
||||
$pub_keywords = profile_clean_keywords(notags(trim($_POST['pub_keywords'])));
|
||||
$prv_keywords = profile_clean_keywords(notags(trim($_POST['prv_keywords'])));
|
||||
$marital = notags(trim($_POST['marital']));
|
||||
$howlong = notags(trim($_POST['howlong']));
|
||||
|
||||
|
@ -469,9 +486,11 @@ function profiles_post(&$a) {
|
|||
|
||||
if($is_default) {
|
||||
|
||||
$r = q("UPDATE `contact` SET `about` = '%s', `location` = '%s' WHERE `self` = 1 AND `uid` = %d",
|
||||
$r = q("UPDATE `contact` SET `about` = '%s', `location` = '%s', `keywords` = '%s', `gender` = '%s' WHERE `self` = 1 AND `uid` = %d",
|
||||
dbesc($about),
|
||||
dbesc($locality),
|
||||
dbesc($pub_keywords),
|
||||
dbesc($gender),
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
|
|
23
update.php
23
update.php
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
define( 'UPDATE_VERSION' , 1177 );
|
||||
define( 'UPDATE_VERSION' , 1178 );
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -1609,3 +1609,24 @@ All following update functions are ONLY for jobs that need to run AFTER the data
|
|||
|
||||
Database changes are ONLY applied in the file include/dbstructure.php.
|
||||
*/
|
||||
|
||||
function update_1177() {
|
||||
require_once("mod/profiles.php");
|
||||
|
||||
$profiles = q("SELECT `uid`, `about`, `locality`, `pub_keywords`, `gender` FROM `profile` WHERE `is-default`");
|
||||
|
||||
foreach ($profiles AS $profile) {
|
||||
if ($profile["about"].$profile["locality"].$profile["pub_keywords"].$profile["gender"] == "")
|
||||
continue;
|
||||
|
||||
$profile["pub_keywords"] = profile_clean_keywords($profile["pub_keywords"]);
|
||||
|
||||
$r = q("UPDATE `contact` SET `about` = '%s', `location` = '%s', `keywords` = '%s', `gender` = '%s' WHERE `self` AND `uid` = %d",
|
||||
dbesc($profile["about"]),
|
||||
dbesc($profile["locality"]),
|
||||
dbesc($profile["pub_keywords"]),
|
||||
dbesc($profile["gender"]),
|
||||
intval($profile["uid"])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue