poco_check_server($server_url, $network);
- 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 (($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,
- `alias` = '$s', `notify` = '%s'
- WHERE (`generation` >= %d OR `generation` = 0) AND `nurl` = '%s'",
- dbesc($name),
- dbesc($addr),
- dbesc($network),
- dbesc($profile_photo),
- dbesc($connect_url),
- dbesc($profile_url),
- dbesc($server_url),
- dbesc($updated),
- dbesc($location),
- dbesc($about),
- dbesc($keywords),
- dbesc($gender),
- dbesc($alias),
- dbesc($notify),
- intval($generation),
- intval($generation),
- dbesc(normalise_link($profile_url))
- );
- }
- } else {
- // Maybe another process had inserted the entry after the first check, so it again
- $x = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
- 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`, `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($network),
- dbesc($profile_url),
- dbesc(normalise_link($profile_url)),
- dbesc($profile_photo),
- dbesc($connect_url),
- dbesc($server_url),
- dbesc(datetime_convert()),
- dbesc($updated),
- dbesc($location),
- dbesc($about),
- dbesc($keywords),
- dbesc($gender),
- dbesc($alias),
- dbesc($notify),
- intval($generation)
- );
- $x = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
- dbesc(normalise_link($profile_url))
- );
- }
- if(count($x))
- $gcid = $x[0]['id'];
- }
-
- if(! $gcid)
+ $gcontact = array("url" => $profile_url,
+ "addr" => $addr,
+ "alias" => $alias,
+ "name" => $name,
+ "network" => $network,
+ "photo" => $profile_photo,
+ "about" => $about,
+ "location" => $location,
+ "gender" => $gender,
+ "keywords" => $keywords,
+ "server_url" => $server_url,
+ "connect" => $connect_url,
+ "notify" => $notify,
+ "updated" => $updated,
+ "generation" => $generation);
+
+ $gcid = update_gcontact($gcontact);
+
+ if(!$gcid)
return $gcid;
$r = q("SELECT * FROM `glink` WHERE `cid` = %d AND `uid` = %d AND `gcid` = %d AND `zcid` = %d LIMIT 1",
);
}
- // For unknown reasons there are sometimes duplicates
- //q("DELETE FROM `gcontact` WHERE `nurl` = '%s' AND `id` != %d AND
- // NOT EXISTS (SELECT `gcid` FROM `glink` WHERE `gcid` = `gcontact`.`id`)",
- // dbesc(normalise_link($profile_url)),
- // intval($gcid)
- //);
-
return $gcid;
}
if ($contact["network"] == NETWORK_STATUSNET)
$contact["network"] = NETWORK_OSTATUS;
- $r = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
+ $r = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 2",
dbesc(normalise_link($contact["url"])));
if ($r)
intval($contact["generation"])
);
- $r = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
+ $r = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 2",
dbesc(normalise_link($contact["url"])));
if ($r)
$gcontact_id = $r[0]["id"];
}
+ if ((count($r) > 1) AND ($gcontact_id > 0) AND ($contact["url"] != ""))
+ q("DELETE FROM `gcontact` WHERE `nurl` = '%s' AND `id` != %d",
+ dbesc(normalise_link($contact["url"])),
+ intval($gcontact_id));
+
return $gcontact_id;
}
if (!$gcontact_id)
return false;
- $r = q("SELECT `name`, `nick`, `photo`, `location`, `about`, `addr`, `generation`, `birthday`, `gender`, `keywords`, `hide`, `nsfw`, `network`, `alias`, `notify`, `url`
+ $r = q("SELECT `name`, `nick`, `photo`, `location`, `about`, `addr`, `generation`, `birthday`, `gender`, `keywords`,
+ `hide`, `nsfw`, `network`, `alias`, `notify`, `server_url`, `connect`, `updated`, `url`
FROM `gcontact` WHERE `id` = %d LIMIT 1",
intval($gcontact_id));
- if ($contact["generation"] == 0)
- $contact["generation"] = $r[0]["generation"];
-
- if ($contact["photo"] == "")
- $contact["photo"] = $r[0]["photo"];
-
- if ($contact["name"] == "")
- $contact["name"] = $r[0]["name"];
+ // Get all field names
+ $fields = array();
+ foreach ($r[0] AS $field => $data)
+ $fields[$field] = $data;
- if ($contact["nick"] == "")
- $contact["nick"] = $r[0]["nick"];
+ unset($fields["url"]);
+ unset($fields["updated"]);
- if ($contact["addr"] == "")
- $contact["addr"] = $r[0]["addr"];
+ // assign all unassigned fields from the database entry
+ foreach ($fields AS $field => $data)
+ if (!isset($contact[$field]))
+ $contact[$field] = $r[0][$field];
- if ($contact["location"] =="")
- $contact["location"] = $r[0]["location"];
-
- if ($contact["about"] =="")
- $contact["about"] = $r[0]["about"];
-
- if ($contact["birthday"] =="")
- $contact["birthday"] = $r[0]["birthday"];
-
- if ($contact["gender"] =="")
- $contact["gender"] = $r[0]["gender"];
-
- if ($contact["keywords"] =="")
- $contact["keywords"] = $r[0]["keywords"];
-
- if (!isset($contact["hide"]))
- $contact["hide"] = $r[0]["hide"];
-
- if (!isset($contact["nsfw"]))
- $contact["nsfw"] = $r[0]["nsfw"];
-
- if ($contact["network"] =="")
- $contact["network"] = $r[0]["network"];
-
- if ($contact["alias"] =="")
- $contact["alias"] = $r[0]["alias"];
+ if ($contact["network"] == NETWORK_STATUSNET)
+ $contact["network"] = NETWORK_OSTATUS;
- if ($contact["url"] =="")
- $contact["url"] = $r[0]["url"];
+ if (!isset($contact["updated"]))
+ $contact["updated"] = datetime_convert();
- if ($contact["notify"] =="")
- $contact["notify"] = $r[0]["notify"];
+ // Check if any field changed
+ $update = false;
+ unset($fields["generation"]);
- if ($contact["network"] == NETWORK_STATUSNET)
- $contact["network"] = NETWORK_OSTATUS;
+ foreach ($fields AS $field => $data)
+ if ($contact[$field] != $r[0][$field])
+ $update = true;
- 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["url"] != $r[0]["url"]) OR
- ($contact["location"] != $r[0]["location"]) OR ($contact["about"] != $r[0]["about"]) OR ($contact["generation"] < $r[0]["generation"])) {
+ if ($contact["generation"] < $r[0]["generation"])
+ $update = true;
+ if ($update) {
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', `url` = '%s',
- `location` = '%s', `about` = '%s', `generation` = %d, `updated` = '%s'
+ `location` = '%s', `about` = '%s', `generation` = %d, `updated` = '%s',
+ `server_url` = '%s', `connect` = '%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"]), dbesc($contact["alias"]), dbesc($contact["notify"]),
dbesc($contact["url"]), dbesc($contact["location"]), dbesc($contact["about"]),
- intval($contact["generation"]), dbesc(datetime_convert()),
+ intval($contact["generation"]), dbesc($contact["updated"]),
+ dbesc($contact["server_url"]), dbesc($contact["connect"]),
dbesc(normalise_link($contact["url"])), intval($contact["generation"]));
}