Browse Source

New avatar picture fields to better cope with changing avatars

pull/2299/head
Michael Vogel 5 years ago
parent
commit
6f662b8c74
15 changed files with 143 additions and 59 deletions
  1. +2
    -1
      include/Contact.php
  2. +68
    -42
      include/Photo.php
  3. +4
    -0
      include/dbstructure.php
  4. +7
    -2
      include/diaspora.php
  5. +1
    -0
      include/discover_poco.php
  6. +4
    -1
      include/follow.php
  7. +3
    -1
      include/gprobe.php
  8. +4
    -4
      include/ostatus.php
  9. +28
    -5
      include/socgraph.php
  10. +4
    -1
      mod/contacts.php
  11. +4
    -1
      mod/crepair.php
  12. +4
    -0
      mod/dfrn_confirm.php
  13. +1
    -0
      mod/item.php
  14. +4
    -1
      mod/poco.php
  15. +5
    -0
      mod/wall_upload.php

+ 2
- 1
include/Contact.php View File

@ -488,9 +488,10 @@ function get_contact($url, $uid = 0) {
$photos = import_profile_photo($data["photo"],$uid,$contactid);
q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s',
q("UPDATE `contact` SET `avatar` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s',
`addr` = '%s', `alias` = '%s', `name` = '%s', `nick` = '%s',
`name-date` = '%s', `uri-date` = '%s', `avatar-date` = '%s' WHERE `id` = %d",
dbesc($data["photo"]),
dbesc($photos[0]),
dbesc($photos[1]),
dbesc($photos[2]),


+ 68
- 42
include/Photo.php View File

@ -720,65 +720,91 @@ function guess_image_type($filename, $fromcurl=false) {
}
function import_profile_photo($photo,$uid,$cid) {
function update_contact_avatar($avatar,$uid,$cid) {
$a = get_app();
$r = q("SELECT `avatar`, `photo`, `thumb`, `micro` FROM `contact` WHERE `id` = %d LIMIT 1", intval($cid));
if (!$r)
return false;
else
$data = array($r[0]["photo"], $r[0]["thumb"], $r[0]["micro"]);
$r = q("select `resource-id` from photo where `uid` = %d and `contact-id` = %d and `scale` = 4 and `album` = 'Contact Photos' limit 1",
intval($uid),
intval($cid)
);
if(count($r) && strlen($r[0]['resource-id'])) {
$hash = $r[0]['resource-id'];
}
else {
$hash = photo_new_resource();
}
if ($r[0]["avatar"] != $avatar) {
$photos = import_profile_photo($avatar,$uid,$cid, true);
if ($photos) {
q("UPDATE `contact` SET `avatar` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' WHERE `id` = %d",
dbesc($avatar), dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]),
dbesc(datetime_convert()), intval($cid));
return $photos;
}
}
return $data;
}
function import_profile_photo($photo,$uid,$cid, $quit_on_error = false) {
$a = get_app();
$photo_failure = false;
$r = q("select `resource-id` from photo where `uid` = %d and `contact-id` = %d and `scale` = 4 and `album` = 'Contact Photos' limit 1",
intval($uid),
intval($cid)
);
if(count($r) && strlen($r[0]['resource-id'])) {
$hash = $r[0]['resource-id'];
} else {
$hash = photo_new_resource();
}
$filename = basename($photo);
$img_str = fetch_url($photo,true);
$photo_failure = false;
$type = guess_image_type($photo,true);
$img = new Photo($img_str, $type);
if($img->is_valid()) {
$filename = basename($photo);
$img_str = fetch_url($photo,true);
$img->scaleImageSquare(175);
if ($quit_on_error AND ($img_str == ""))
return false;
$r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 4 );
$type = guess_image_type($photo,true);
$img = new Photo($img_str, $type);
if($img->is_valid()) {
if($r === false)
$photo_failure = true;
$img->scaleImageSquare(175);
$img->scaleImage(80);
$r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 4 );
$r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 5 );
if($r === false)
$photo_failure = true;
if($r === false)
$photo_failure = true;
$img->scaleImage(80);
$img->scaleImage(48);
$r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 5 );
$r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 6 );
if($r === false)
$photo_failure = true;
if($r === false)
$photo_failure = true;
$img->scaleImage(48);
$photo = $a->get_baseurl() . '/photo/' . $hash . '-4.' . $img->getExt();
$thumb = $a->get_baseurl() . '/photo/' . $hash . '-5.' . $img->getExt();
$micro = $a->get_baseurl() . '/photo/' . $hash . '-6.' . $img->getExt();
}
else
$photo_failure = true;
$r = $img->store($uid, $cid, $hash, $filename, 'Contact Photos', 6 );
if($photo_failure) {
$photo = $a->get_baseurl() . '/images/person-175.jpg';
$thumb = $a->get_baseurl() . '/images/person-80.jpg';
$micro = $a->get_baseurl() . '/images/person-48.jpg';
}
if($r === false)
$photo_failure = true;
$photo = $a->get_baseurl() . '/photo/' . $hash . '-4.' . $img->getExt();
$thumb = $a->get_baseurl() . '/photo/' . $hash . '-5.' . $img->getExt();
$micro = $a->get_baseurl() . '/photo/' . $hash . '-6.' . $img->getExt();
} else
$photo_failure = true;
if($photo_failure AND $quit_on_error)
return false;
if($photo_failure) {
$photo = $a->get_baseurl() . '/images/person-175.jpg';
$thumb = $a->get_baseurl() . '/images/person-80.jpg';
$micro = $a->get_baseurl() . '/images/person-48.jpg';
}
return(array($photo,$thumb,$micro));
return(array($photo,$thumb,$micro));
}


+ 4
- 0
include/dbstructure.php View File

@ -453,6 +453,7 @@ function db_definition() {
"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" => ""),
"avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"photo" => array("type" => "text", "not null" => "1"),
"thumb" => array("type" => "text", "not null" => "1"),
"micro" => array("type" => "text", "not null" => "1"),
@ -656,7 +657,10 @@ function db_definition() {
"nick" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"nurl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"avatar" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"thumb" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"micro" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"connect" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"),
"updated" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"),


+ 7
- 2
include/diaspora.php View File

@ -740,6 +740,7 @@ function diaspora_request($importer,$xml) {
$new_relation = CONTACT_IS_FOLLOWER;
$r = q("UPDATE `contact` SET
`avatar` = '%s',
`photo` = '%s',
`thumb` = '%s',
`micro` = '%s',
@ -752,6 +753,7 @@ function diaspora_request($importer,$xml) {
`writable` = 1
WHERE `id` = %d
",
dbesc($contact_record['photo']),
dbesc($photos[0]),
dbesc($photos[1]),
dbesc($photos[2]),
@ -2491,12 +2493,15 @@ 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', `nick` = '%s', `addr` = '%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",
$r = q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `addr` = '%s', `name-date` = '%s',
`avatar` = '%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($nick),
dbesc($diaspora_handle),
dbesc(datetime_convert()),
dbesc($image_url),
dbesc($images[0]),
dbesc($images[1]),
dbesc($images[2]),
dbesc(datetime_convert()),
@ -2516,7 +2521,7 @@ function diaspora_profile($importer,$xml,$msg) {
}
update_gcontact(array("url" => $contact['url'], "network" => NETWORK_DIASPORA, "generation" => 2,
"photo" => $image_url, "name" => $name, "location" => $location,
"avatar" => $image_url, "name" => $name, "location" => $location,
"about" => $about, "birthday" => $birthday, "gender" => $gender,
"addr" => $diaspora_handle, "nick" => $nick, "keywords" => $keywords,
"hide" => !$searchable, "nsfw" => $nsfw));


+ 1
- 0
include/discover_poco.php View File

@ -222,6 +222,7 @@ function gs_search_user($search) {
$contact = probe_url($user->site_address."/".$user->name);
if ($contact["network"] != NETWORK_PHANTOM) {
$contact["about"] = $user->description;
$contact["avatar"] = $contact["photo"];
update_gcontact($contact);
}
}


+ 4
- 1
include/follow.php View File

@ -266,13 +266,16 @@ function new_contact($uid,$url,$interactive = false) {
$photos = import_profile_photo($ret['photo'],$uid,$contact_id);
$r = q("UPDATE `contact` SET `photo` = '%s',
$r = q("UPDATE `contact` SET
`avatar` = '%s',
`photo` = '%s',
`thumb` = '%s',
`micro` = '%s',
`name-date` = '%s',
`uri-date` = '%s',
`avatar-date` = '%s'
WHERE `id` = %d",
dbesc($ret['photo']),
dbesc($photos[0]),
dbesc($photos[1]),
dbesc($photos[2]),


+ 3
- 1
include/gprobe.php View File

@ -58,8 +58,10 @@ function gprobe_run(&$argv, &$argc){
if (is_null($result))
Cache::set("gprobe:".$urlparts["host"],serialize($arr));
if (!in_array($result["network"], array(NETWORK_FEED, NETWORK_PHANTOM)))
if (!in_array($result["network"], array(NETWORK_FEED, NETWORK_PHANTOM))) {
$arr["avatar"] = $arr["photo"];
update_gcontact($arr);
}
$r = q("SELECT `id`, `url`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 1",
dbesc(normalise_link($url))


+ 4
- 4
include/ostatus.php View File

@ -166,13 +166,13 @@ function ostatus_fetchauthor($xpath, $context, $importer, &$contact, $onlyfetch)
"", "", "", datetime_convert(), 2, $contact["id"], $contact["uid"]);
}
if (isset($author["author-avatar"]) AND ($author["author-avatar"] != $r[0]['photo'])) {
if (isset($author["author-avatar"]) AND ($author["author-avatar"] != $r[0]['avatar'])) {
logger("Update profile picture for contact ".$contact["id"], LOGGER_DEBUG);
$photos = import_profile_photo($author["author-avatar"], $importer["uid"], $contact["id"]);
q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' WHERE `id` = %d AND `network` = '%s'",
dbesc($author["author-avatar"]), dbesc($photos[1]), dbesc($photos[2]),
q("UPDATE `contact` SET `avatar` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' WHERE `id` = %d AND `network` = '%s'",
dbesc($author["author-avatar"]), dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]),
dbesc(datetime_convert()), intval($contact["id"]), dbesc(NETWORK_OSTATUS));
}
@ -180,7 +180,7 @@ function ostatus_fetchauthor($xpath, $context, $importer, &$contact, $onlyfetch)
if ($contact["network"] == NETWORK_OSTATUS) {
/// @todo Add the "addr" field
$contact["generation"] = 2;
$contact["photo"] = $author["author-avatar"];
$contact["avatar"] = $author["author-avatar"];
update_gcontact($contact);
}
}


+ 28
- 5
include/socgraph.php View File

@ -10,7 +10,7 @@
require_once('include/datetime.php');
require_once("include/Scrape.php");
require_once("include/html2bbcode.php");
require_once("include/Contact.php");
/*
* poco_load
@ -294,7 +294,7 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca
"alias" => $alias,
"name" => $name,
"network" => $network,
"photo" => $profile_photo,
"avatar" => $profile_photo,
"about" => $about,
"location" => $location,
"gender" => $gender,
@ -1517,7 +1517,7 @@ function update_gcontact($contact) {
if (!$gcontact_id)
return false;
$r = q("SELECT `name`, `nick`, `photo`, `location`, `about`, `addr`, `generation`, `birthday`, `gender`, `keywords`,
$r = q("SELECT `name`, `nick`, `avatar`, `photo`, `thumb`, `micro`, `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));
@ -1552,14 +1552,37 @@ function update_gcontact($contact) {
if ($contact["generation"] < $r[0]["generation"])
$update = true;
if (isset($contact["avatar"]) AND (($contact["avatar"] != $r[0]["avatar"]) OR
($r[0]["photo"] == $r[0]["avatar"]) OR ($r[0]["thumb"] == "") OR ($r[0]["micro"] == ""))) {
$cid = get_contact($contact["url"]);
// We always store avatar picture with a contact-id.
// We don't have a contact-id when we use the gcontact table.
// Solution is to use a matching entry in the contact table. (Which is not totally clean)
if (($cid == 0) AND isset($contact["uid"]))
$cid = get_contact($contact["url"], $contact["uid"]);
$photos = update_contact_avatar($contact["avatar"], 0, $cid);
if ($photos) {
$contact["photo"] = $photos[0];
$contact["thumb"] = $photos[1];
$contact["micro"] = $photos[2];
}
}
if ($update) {
q("UPDATE `gcontact` SET `photo` = '%s', `name` = '%s', `nick` = '%s', `addr` = '%s', `network` = '%s',
q("UPDATE `gcontact` SET `avatar` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%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',
`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["avatar"]), dbesc($contact["photo"]), dbesc($contact["thumb"]),
dbesc($contact["micro"]), 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"]),


+ 4
- 1
mod/contacts.php View File

@ -295,7 +295,9 @@ function _contact_update_profile($contact_id) {
$photos = import_profile_photo($data['photo'], local_user(), $contact_id);
$r = q("UPDATE `contact` SET `photo` = '%s',
$r = q("UPDATE `contact` SET
`avatar` = '%s',
`photo` = '%s',
`thumb` = '%s',
`micro` = '%s',
`name-date` = '%s',
@ -303,6 +305,7 @@ function _contact_update_profile($contact_id) {
`avatar-date` = '%s'
WHERE `id` = %d",
dbesc($data["photo"]),
dbesc($photos[0]),
dbesc($photos[1]),
dbesc($photos[2]),
dbesc(datetime_convert()),


+ 4
- 1
mod/crepair.php View File

@ -82,7 +82,9 @@ function crepair_post(&$a) {
$photos = import_profile_photo($photo,local_user(),$contact['id']);
$x = q("UPDATE `contact` SET `photo` = '%s',
$x = q("UPDATE `contact` SET
`avatar` = '%s',
`photo` = '%s',
`thumb` = '%s',
`micro` = '%s',
`name-date` = '%s',
@ -90,6 +92,7 @@ function crepair_post(&$a) {
`avatar-date` = '%s'
WHERE `id` = %d
",
dbesc($photo),
dbesc($photos[0]),
dbesc($photos[1]),
dbesc($photos[2]),


+ 4
- 0
mod/dfrn_confirm.php View File

@ -329,6 +329,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$duplex = 0;
$r = q("UPDATE `contact` SET
`avatar` = '%s',
`photo` = '%s',
`thumb` = '%s',
`micro` = '%s',
@ -342,6 +343,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
`hidden` = %d,
`network` = '%s' WHERE `id` = %d
",
dbesc($contact['photo']),
dbesc($photos[0]),
dbesc($photos[1]),
dbesc($photos[2]),
@ -695,6 +697,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$duplex = 0;
$r = q("UPDATE `contact` SET
`avatar` = '%s',
`photo` = '%s',
`thumb` = '%s',
`micro` = '%s',
@ -709,6 +712,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
`prv` = %d,
`network` = '%s' WHERE `id` = %d
",
dbesc($photo),
dbesc($photos[0]),
dbesc($photos[1]),
dbesc($photos[2]),


+ 1
- 0
mod/item.php View File

@ -1146,6 +1146,7 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag, $netwo
if (!$r) {
$probed = probe_url($name);
if (isset($probed["url"])) {
$probed["avatar"] = $probed["photo"];
update_gcontact($probed);
$r = q("SELECT `url`, `name`, `nick`, `network`, `alias`, `notify` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
dbesc(normalise_link($probed["url"])));


+ 4
- 1
mod/poco.php View File

@ -179,6 +179,9 @@ function poco_init(&$a) {
$rr['generation'] = 2;
}
if ($rr["avatar"] == "")
$rr["avatar"] = $rr["photo"];
if (($rr['about'] == "") AND isset($rr['pabout']))
$rr['about'] = $rr['pabout'];
@ -258,7 +261,7 @@ function poco_init(&$a) {
$entry['updated'] = date("c", strtotime($entry['updated']));
}
if($fields_ret['photos'])
$entry['photos'] = array(array('value' => $rr['photo'], 'type' => 'profile'));
$entry['photos'] = array(array('value' => $rr['avatar'], 'type' => 'profile'));
if($fields_ret['network']) {
$entry['network'] = $rr['network'];
if ($entry['network'] == NETWORK_STATUSNET)


+ 5
- 0
mod/wall_upload.php View File

@ -158,6 +158,7 @@ function wall_upload_post(&$a, $desktopmode = true) {
killme();
}
logger("Check size of picture.", LOGGER_DEBUG);
$r = q("select sum(octet_length(data)) as total from photo where uid = %d and scale = 0 and album != 'Contact Photos' ",
intval($page_owner_uid)
);
@ -176,6 +177,7 @@ function wall_upload_post(&$a, $desktopmode = true) {
}
logger("Picture will be processed.", LOGGER_DEBUG);
$imagedata = @file_get_contents($src);
$ph = new Photo($imagedata, $filetype);
@ -210,6 +212,7 @@ function wall_upload_post(&$a, $desktopmode = true) {
$defperm = '<' . $default_cid . '>';
logger("Picture will be stored", LOGGER_DEBUG);
$r = $ph->store($page_owner_uid, $visitor, $hash, $filename, t('Wall Photos'), 0, 0, $defperm);
if(! $r) {
@ -266,6 +269,8 @@ function wall_upload_post(&$a, $desktopmode = true) {
return $picture;
}
logger("Picture is stored.", LOGGER_DEBUG);
if ($r_json) {
echo json_encode(array('ok'=>true));
killme();


Loading…
Cancel
Save