"nsfw" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"network" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"addr" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
+ "notify" => array("type" => "text", "not null" => "1"),
+ "alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"generation" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"),
"server_url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
),
$server_url = $x[0]["server_url"];
$nick = $x[0]["nick"];
$addr = $x[0]["addr"];
+ $alias = $x[0]["alias"];
+ $notify = $x[0]["notify"];
} else {
$created = "0000-00-00 00:00:00";
$server_url = "";
$urlparts = parse_url($profile_url);
$nick = end(explode("/", $urlparts["path"]));
$addr = "";
+ $alias = "";
+ $notify = "";
}
if ((($network == "") OR ($name == "") OR ($addr == "") OR ($profile_photo == "") OR ($server_url == "") OR $alternate)
$name = $data["name"];
$nick = $data["nick"];
$addr = $data["addr"];
+ $alias = $data["alias"];
+ $notify = $data["notify"];
$profile_url = $data["url"];
$profile_photo = $data["photo"];
$server_url = $data["baseurl"];
if (($addr == "") AND ($x[0]['addr'] != ""))
$addr = $x[0]['addr'];
+ if (($alias == "") AND ($x[0]['alias'] != ""))
+ $alias = $x[0]['alias'];
+
+ if (($notify == "") AND ($x[0]['notify'] != ""))
+ $notify = $x[0]['notify'];
+
if (($generation == 0) AND ($x[0]['generation'] > 0))
$generation = $x[0]['generation'];
if($x[0]['name'] != $name || $x[0]['photo'] != $profile_photo || $x[0]['updated'] < $updated) {
q("UPDATE `gcontact` SET `name` = '%s', `addr` = '%s', `network` = '%s', `photo` = '%s', `connect` = '%s', `url` = '%s', `server_url` = '%s',
- `updated` = '%s', `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s', `generation` = %d
+ `updated` = '%s', `location` = '%s', `about` = '%s', `keywords` = '%s', `gender` = '%s', `generation` = %d,
+ `alias` = '$s', `notify` = '%s'
WHERE (`generation` >= %d OR `generation` = 0) AND `nurl` = '%s'",
dbesc($name),
dbesc($addr),
dbesc($about),
dbesc($keywords),
dbesc($gender),
+ dbesc($alias),
+ dbesc($notify),
intval($generation),
intval($generation),
dbesc(normalise_link($profile_url))
dbesc(normalise_link($profile_url))
);
if(!$x) {
- q("INSERT INTO `gcontact` (`name`, `nick`, `addr`, `network`, `url`, `nurl`, `photo`, `connect`, `server_url`, `created`, `updated`, `location`, `about`, `keywords`, `gender`, `generation`)
- VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)",
+ q("INSERT INTO `gcontact` (`name`, `nick`, `addr`, `network`, `url`, `nurl`, `photo`, `connect`, `server_url`, `created`, `updated`, `location`, `about`, `keywords`, `gender`, `alias`, `notify`, `generation`)
+ VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)",
dbesc($name),
dbesc($nick),
dbesc($addr),
dbesc($about),
dbesc($keywords),
dbesc($gender),
+ dbesc($alias),
+ dbesc($notify),
intval($generation)
);
$x = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
if (!$gcontact_id)
return false;
- $r = q("SELECT `name`, `nick`, `photo`, `location`, `about`, `addr`, `generation`, `birthday`, `gender`, `keywords`, `hide`, `nsfw`, `network`
+ $r = q("SELECT `name`, `nick`, `photo`, `location`, `about`, `addr`, `generation`, `birthday`, `gender`, `keywords`, `hide`, `nsfw`, `network`, `alias`, `notify`
FROM `gcontact` WHERE `id` = %d LIMIT 1",
intval($gcontact_id));
if ($contact["network"] =="")
$contact["network"] = $r[0]["network"];
+ if ($contact["alias"] =="")
+ $contact["alias"] = $r[0]["alias"];
+
+ if ($contact["notify"] =="")
+ $contact["notify"] = $r[0]["notify"];
+
if ($contact["network"] == NETWORK_STATUSNET)
$contact["network"] = NETWORK_OSTATUS;
if (($contact["photo"] != $r[0]["photo"]) OR ($contact["name"] != $r[0]["name"]) OR ($contact["nick"] != $r[0]["nick"]) OR ($contact["addr"] != $r[0]["addr"]) OR
($contact["birthday"] != $r[0]["birthday"]) OR ($contact["gender"] != $r[0]["gender"]) OR ($contact["keywords"] != $r[0]["keywords"]) OR
($contact["hide"] != $r[0]["hide"]) OR ($contact["nsfw"] != $r[0]["nsfw"]) OR ($contact["network"] != $r[0]["network"]) OR
+ ($contact["alias"] != $r[0]["alias"]) OR ($contact["notify"] != $r[0]["notify"]) OR
($contact["location"] != $r[0]["location"]) OR ($contact["about"] != $r[0]["about"]) OR ($contact["generation"] < $r[0]["generation"])) {
q("UPDATE `gcontact` SET `photo` = '%s', `name` = '%s', `nick` = '%s', `addr` = '%s', `network` = '%s',
`birthday` = '%s', `gender` = '%s', `keywords` = %d, `hide` = %d, `nsfw` = %d,
+ `alias` = '%s', `notify` = '%s',
`location` = '%s', `about` = '%s', `generation` = %d, `updated` = '%s'
WHERE `nurl` = '%s' AND (`generation` = 0 OR `generation` >= %d)",
dbesc($contact["photo"]), dbesc($contact["name"]), dbesc($contact["nick"]),
dbesc($contact["addr"]), dbesc($contact["network"]),
dbesc($contact["birthday"]), dbesc($contact["gender"]), dbesc($contact["keywords"]),
- intval($contact["hide"]), intval($contact["nsfw"]),
+ intval($contact["hide"]), intval($contact["nsfw"]), dbesc($contact["alias"]), dbesc($contact["notify"]),
dbesc($contact["location"]), dbesc($contact["about"]), intval($contact["generation"]), dbesc(datetime_convert()),
dbesc(normalise_link($contact["url"])), intval($contact["generation"]));
}
}
// Fetching profile data from global contacts
+ // @todo: should override everything else (but not Feeds)
$r = q("SELECT `photo`, `nick`, `addr`, `location`, `about`, `gender` FROM `gcontact` WHERE `nurl` = '%s'", dbesc(normalise_link($profiledata["url"])));
if (count($r)) {
if ($profiledata["photo"] == "")
AND (normalise_link($parent_contact["url"]) != normalise_link($thrparent[0]["author-link"]))) {
$parent_contact = null;
- // @todo: Use gcontact
- require_once("include/Scrape.php");
- $probed_contact = probe_url($thrparent[0]["author-link"]);
- if ($probed_contact["network"] != NETWORK_FEED) {
- $parent_contact = $probed_contact;
- $parent_contact["nurl"] = normalise_link($probed_contact["url"]);
- $parent_contact["thumb"] = $probed_contact["photo"];
- $parent_contact["micro"] = $probed_contact["photo"];
- $parent_contact["addr"] = $probed_contact["addr"];
+ $r = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
+ dbesc(normalise_link($thrparent[0]["author-link"])));
+ if (count($r)) {
+ $parent_contact = $r[0];
+ $parent_contact["thumb"] = $parent_contact["photo"];
+ $parent_contact["micro"] = $parent_contact["photo"];
+ unset($parent_contact["id"]);
+ }
+
+ if (!isset($parent_contact["nick"])) {
+ require_once("include/Scrape.php");
+ $probed_contact = probe_url($thrparent[0]["author-link"]);
+ if ($probed_contact["network"] != NETWORK_FEED) {
+ $parent_contact = $probed_contact;
+ $parent_contact["nurl"] = normalise_link($probed_contact["url"]);
+ $parent_contact["thumb"] = $probed_contact["photo"];
+ $parent_contact["micro"] = $probed_contact["photo"];
+ $parent_contact["addr"] = $probed_contact["addr"];
+ }
}
logger('no contact found: '.print_r($thrparent, true), LOGGER_DEBUG);
} else
* @return boolean true if replaced, false if not replaced
*/
function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $network = "") {
+ require_once("include/Scrape.php");
+ require_once("include/socgraph.php");
$replaced = false;
$r = null;
$stat = false;
//get the person's name
$name = substr($tag,1);
+
+ // Try to detect the contact in various ways
+ if ((strpos($name,'@')) || (strpos($name,'http://'))) {
+ // Is it in format @user@domain.tld or @http://domain.tld/...?
+
+ // First check the contact table for the address
+ $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network`, `notify` FROM `contact` WHERE `addr` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($name),
+ intval($profile_uid)
+ );
+
+ // Then check in the contact table for the url
+ if (!$r)
+ $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `notify`, `network` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc(normalise_link($name)),
+ intval($profile_uid)
+ );
+
+ // Then check in the global contacts for the address
+ if (!$r)
+ $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `addr` = '%s' LIMIT 1", dbesc($name));
+
+ // Then check in the global contacts for the url
+ if (!$r)
+ $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", dbesc(normalise_link($name)));
+
+ // If the data isn't complete then refetch the data
+ if ($r AND ($r[0]["network"] == NETWORK_OSTATUS) AND (($r[0]["notify"] == "") OR ($r[0]["alias"] == "")))
+ $r = false;
+
+ if (!$r) {
+ $probed = probe_url($name);
+ if (isset($probed["url"])) {
+ update_gcontact($probed);
+ $r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
+ dbesc(normalise_link($probed["url"])));
+ }
+ }
+ } elseif (!$r) {
+ $newname = str_replace('_',' ',$name);
+ $r = false;
+ if (strrpos($name,'+')) {
+ // Is it in format @nick+number?
+ $tagcid = intval(substr($name,strrpos($name,'+') + 1));
+
+ $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($tagcid),
+ intval($profile_uid)
+ );
+ }
+
+ //select someone by attag or nick and the name passed in the current network
+ if(!$r AND ($network != ""))
+ $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `network` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1",
+ dbesc($name),
+ dbesc($name),
+ dbesc($network),
+ intval($profile_uid)
+ );
+
+ //select someone from this user's contacts by name in the current network
+ if (!$r AND ($network != ""))
+ $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `name` = '%s' AND `network` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($newname),
+ dbesc($network),
+ intval($profile_uid)
+ );
+
+ //select someone by attag or nick and the name passed in
+ if(!$r)
+ $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `attag` = '%s' OR `nick` = '%s' AND `uid` = %d ORDER BY `attag` DESC LIMIT 1",
+ dbesc($name),
+ dbesc($name),
+ intval($profile_uid)
+ );
+
+
+ //select someone from this user's contacts by name
+ if(!$r)
+ $r = q("SELECT `id`, `url`, `nick`, `name`, `alias`, `network` FROM `contact` WHERE `name` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($newname),
+ intval($profile_uid)
+ );
+ }
+
+ if ($r) {
+ if(strlen($inform) AND (isset($r[0]["notify"]) OR isset($r[0]["id"])))
+ $inform .= ',';
+
+ if (isset($r[0]["id"]))
+ $inform .= 'cid:' . $r[0]["id"];
+ elseif (isset($r[0]["notify"]))
+ $inform .= $r[0]["notify"];
+
+ $profile = $r[0]["url"];
+ $alias = $r[0]["alias"];
+ $newname = $r[0]["nick"];
+ if (($newname == "") OR (($r[0]["network"] != NETWORK_OSTATUS) AND ($r[0]["network"] != NETWORK_TWITTER)
+ AND ($r[0]["network"] != NETWORK_STATUSNET) AND ($r[0]["network"] != NETWORK_APPNET)))
+ $newname = $r[0]["name"];
+ }
+
+/*
//is it a link or a full dfrn address?
if((strpos($name,'@')) || (strpos($name,'http://'))) {
$newname = $name;
-
//get the profile links
$links = @lrdd($name);
if(count($links)) {
);
}
}
+*/
+
/* } elseif(strstr($name,'_') || strstr($name,' ')) { //no id
//get the real name
$newname = str_replace('_',' ',$name);
intval($profile_uid)
);
}*/
+
+/*
//$r is set, if someone could be selected
if(count($r)) {
$profile = $r[0]['url'];
$inform .= 'cid:' . $r[0]['id'];
}
}
-
- if(!isset($profile)) {
- $r = q("SELECT `url` FROM `gcontact` WHERE `addr` = '%s' LIMIT 1",
- dbesc($name));
- if ($r)
- $profile = $r[0]["url"];
- }
-
+*/
//if there is an url for this persons profile
if(isset($profile)) {
- $r = q("SELECT `nick`, `name`, `network` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
- dbesc(normalise_link($profile)));
- if ($r) {
- $newname = $r[0]["name"];
-
- //set newname to nick
- if(($r[0]['network'] === NETWORK_OSTATUS) OR ($r[0]['network'] === NETWORK_TWITTER)
- OR ($r[0]['network'] === NETWORK_STATUSNET) OR ($r[0]['network'] === NETWORK_APPNET)) {
- $newname = $r[0]['nick'];
- }
- }
-
$replaced = true;
//create profile link
$profile = str_replace(',','%2c',$profile);