Merge branch 'dev' of https://framagit.org/hubzilla/core into dev
This commit is contained in:
@@ -1521,6 +1521,17 @@ function attach_drop_photo($channel_id,$resource) {
|
||||
if($x) {
|
||||
drop_item($x[0]['id'],false,(($x[0]['item_hidden']) ? DROPITEM_NORMAL : DROPITEM_PHASE1),true);
|
||||
}
|
||||
|
||||
$r = q("SELECT content FROM photo WHERE resource_id = '%s' AND uid = %d AND os_storage = 1",
|
||||
dbesc($resource),
|
||||
intval($channel_id)
|
||||
);
|
||||
if($r) {
|
||||
foreach($r as $i) {
|
||||
@unlink(dbunescbin($i['content']));
|
||||
}
|
||||
}
|
||||
|
||||
q("DELETE FROM photo WHERE uid = %d AND resource_id = '%s'",
|
||||
intval($channel_id),
|
||||
dbesc($resource)
|
||||
|
||||
@@ -19,7 +19,7 @@ class dba_pdo extends dba_driver {
|
||||
$this->driver_dbtype = $scheme;
|
||||
|
||||
if(strpbrk($server,':;')) {
|
||||
$dsn = $server;
|
||||
$dsn = $this->driver_dbtype . ':unix_socket=' . trim($server, ':;');
|
||||
}
|
||||
else {
|
||||
$dsn = $this->driver_dbtype . ':host=' . $server . (intval($port) ? ';port=' . $port : '');
|
||||
|
||||
@@ -1345,6 +1345,7 @@ function sync_files($channel, $files) {
|
||||
logger('attachment store failed',LOGGER_NORMAL,LOG_ERR);
|
||||
}
|
||||
if($f['photo']) {
|
||||
|
||||
foreach($f['photo'] as $p) {
|
||||
unset($p['id']);
|
||||
$p['aid'] = $channel['channel_account_id'];
|
||||
@@ -1366,6 +1367,7 @@ function sync_files($channel, $files) {
|
||||
dbesc($p['resource_id']),
|
||||
intval($channel['channel_id'])
|
||||
);
|
||||
$update_xchan = $p['edited'];
|
||||
}
|
||||
|
||||
// same for cover photos
|
||||
@@ -1385,19 +1387,20 @@ function sync_files($channel, $files) {
|
||||
else
|
||||
$p['content'] = (($p['content'])? base64_decode($p['content']) : '');
|
||||
|
||||
if(intval($p['imgscale']) && (! $p['content'])) {
|
||||
if(intval($p['imgscale']) && (! empty($p['content']))) {
|
||||
|
||||
$time = datetime_convert();
|
||||
|
||||
$parr = array('hash' => $channel['channel_hash'],
|
||||
$parr = array(
|
||||
'hash' => $channel['channel_hash'],
|
||||
'time' => $time,
|
||||
'resource' => $att['hash'],
|
||||
'resource' => $p['resource_id'],
|
||||
'revision' => 0,
|
||||
'signature' => base64url_encode(rsa_sign($channel['channel_hash'] . '.' . $time, $channel['channel_prvkey'])),
|
||||
'resolution' => $p['imgscale']
|
||||
'resolution' => intval($p['imgscale'])
|
||||
);
|
||||
|
||||
$stored_image = $newfname . '-' . intval($p['imgscale']);
|
||||
$stored_image = $newfname . '-' . $p['imgscale'];
|
||||
|
||||
$fp = fopen($stored_image,'w');
|
||||
if(! $fp) {
|
||||
@@ -1406,7 +1409,6 @@ function sync_files($channel, $files) {
|
||||
}
|
||||
$redirects = 0;
|
||||
|
||||
|
||||
$headers = [];
|
||||
$headers['Accept'] = 'application/x-zot+json' ;
|
||||
$headers['Sigtoken'] = random_string();
|
||||
@@ -1414,8 +1416,18 @@ function sync_files($channel, $files) {
|
||||
|
||||
$x = z_post_url($fetch_url,$parr,$redirects,[ 'filep' => $fp, 'headers' => $headers]);
|
||||
fclose($fp);
|
||||
$p['content'] = file_get_contents($stored_image);
|
||||
unlink($stored_image);
|
||||
|
||||
// Override remote hub thumbnails storage settings
|
||||
if(! boolval(get_config('system','filesystem_storage_thumbnails', 0))) {
|
||||
$p['os_storage'] = 0;
|
||||
$p['content'] = file_get_contents($stored_image);
|
||||
@unlink($stored_image);
|
||||
}
|
||||
else {
|
||||
$p['os_storage'] = 1;
|
||||
$p['content'] = $stored_image;
|
||||
$p['os_syspath'] = $stored_image;
|
||||
}
|
||||
}
|
||||
|
||||
if(!isset($p['display_path']))
|
||||
@@ -1447,6 +1459,16 @@ function sync_files($channel, $files) {
|
||||
create_table_from_array('photo',$p, [ 'content' ] );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Set xchan photo date to prevent thumbnails fetch for clones on profile update packet recieve
|
||||
if(isset($update_xchan)) {
|
||||
|
||||
$x = q("UPDATE xchan SET xchan_photo_date = '%s' WHERE xchan_hash = '%s'",
|
||||
dbescdate($update_xchan),
|
||||
dbesc($channel['channel_hash'])
|
||||
);
|
||||
}
|
||||
|
||||
\Zotlabs\Daemon\Master::Summon([ 'Thumbnail' , $att['hash'] ]);
|
||||
|
||||
@@ -277,8 +277,7 @@ function photo_upload($channel, $observer, $args) {
|
||||
if(($width > 1024 || $height > 1024) && (! $errors))
|
||||
$ph->scaleImage(1024);
|
||||
|
||||
$p['imgscale'] = 1;
|
||||
$r1 = $ph->save($p);
|
||||
$r1 = $ph->storeThumbnail($p, PHOTO_RES_1024);
|
||||
$link[1] = array(
|
||||
'rel' => 'alternate',
|
||||
'type' => 'text/html',
|
||||
@@ -292,8 +291,7 @@ function photo_upload($channel, $observer, $args) {
|
||||
if(($width > 640 || $height > 640) && (! $errors))
|
||||
$ph->scaleImage(640);
|
||||
|
||||
$p['imgscale'] = 2;
|
||||
$r2 = $ph->save($p);
|
||||
$r2 = $ph->storeThumbnail($p, PHOTO_RES_640);
|
||||
$link[2] = array(
|
||||
'rel' => 'alternate',
|
||||
'type' => 'text/html',
|
||||
@@ -307,8 +305,7 @@ function photo_upload($channel, $observer, $args) {
|
||||
if(($width > 320 || $height > 320) && (! $errors))
|
||||
$ph->scaleImage(320);
|
||||
|
||||
$p['imgscale'] = 3;
|
||||
$r3 = $ph->save($p);
|
||||
$r3 = $ph->storeThumbnail($p, PHOTO_RES_320);
|
||||
$link[3] = array(
|
||||
'rel' => 'alternate',
|
||||
'type' => 'text/html',
|
||||
|
||||
@@ -925,46 +925,62 @@ function import_xchan($arr, $ud_flags = UPDATE_FLAGS_UPDATED, $ud_arr = null) {
|
||||
$local = q("select channel_account_id, channel_id from channel where channel_hash = '%s' limit 1",
|
||||
dbesc($xchan_hash)
|
||||
);
|
||||
|
||||
if($local) {
|
||||
// @FIXME This should be removed in future when profile photo update by file sync procedure will be applied
|
||||
// on most hubs in the network
|
||||
// <---
|
||||
$ph = z_fetch_url($arr['photo'], true);
|
||||
|
||||
if($ph['success']) {
|
||||
|
||||
// Do not fetch already received thumbnails
|
||||
$x = q("SELECT resource_id FROM photo WHERE uid = %d AND imgscale = %d AND filesize = %d LIMIT 1",
|
||||
intval($local[0]['channel_id']),
|
||||
intval(PHOTO_RES_PROFILE_300),
|
||||
strlen($ph['body'])
|
||||
);
|
||||
|
||||
$hash = import_channel_photo($ph['body'], $arr['photo_mimetype'], $local[0]['channel_account_id'], $local[0]['channel_id']);
|
||||
if($x)
|
||||
$hash = $x[0]['resource_id'];
|
||||
else
|
||||
$hash = import_channel_photo($ph['body'], $arr['photo_mimetype'], $local[0]['channel_account_id'], $local[0]['channel_id']);
|
||||
}
|
||||
|
||||
if($hash) {
|
||||
// unless proven otherwise
|
||||
$is_default_profile = 1;
|
||||
|
||||
if($hash) {
|
||||
// unless proven otherwise
|
||||
$is_default_profile = 1;
|
||||
$profile = q("select is_default from profile where aid = %d and uid = %d limit 1",
|
||||
intval($local[0]['channel_account_id']),
|
||||
intval($local[0]['channel_id'])
|
||||
);
|
||||
if($profile) {
|
||||
if(! intval($profile[0]['is_default']))
|
||||
$is_default_profile = 0;
|
||||
}
|
||||
|
||||
$profile = q("select is_default from profile where aid = %d and uid = %d limit 1",
|
||||
// If setting for the default profile, unset the profile photo flag from any other photos I own
|
||||
if($is_default_profile) {
|
||||
q("UPDATE photo SET photo_usage = %d WHERE photo_usage = %d AND resource_id != '%s' AND aid = %d AND uid = %d",
|
||||
intval(PHOTO_NORMAL),
|
||||
intval(PHOTO_PROFILE),
|
||||
dbesc($hash),
|
||||
intval($local[0]['channel_account_id']),
|
||||
intval($local[0]['channel_id'])
|
||||
);
|
||||
if($profile) {
|
||||
if(! intval($profile[0]['is_default']))
|
||||
$is_default_profile = 0;
|
||||
}
|
||||
|
||||
// If setting for the default profile, unset the profile photo flag from any other photos I own
|
||||
if($is_default_profile) {
|
||||
q("UPDATE photo SET photo_usage = %d WHERE photo_usage = %d AND resource_id != '%s' AND aid = %d AND uid = %d",
|
||||
intval(PHOTO_NORMAL),
|
||||
intval(PHOTO_PROFILE),
|
||||
dbesc($hash),
|
||||
intval($local[0]['channel_account_id']),
|
||||
intval($local[0]['channel_id'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// reset the names in case they got messed up when we had a bug in this function
|
||||
$photos = array(
|
||||
z_root() . '/photo/profile/l/' . $local[0]['channel_id'],
|
||||
z_root() . '/photo/profile/m/' . $local[0]['channel_id'],
|
||||
z_root() . '/photo/profile/s/' . $local[0]['channel_id'],
|
||||
$arr['photo_mimetype'],
|
||||
false
|
||||
);
|
||||
}
|
||||
// --->
|
||||
|
||||
// reset the names in case they got messed up when we had a bug in this function
|
||||
$photos = array(
|
||||
z_root() . '/photo/profile/l/' . $local[0]['channel_id'],
|
||||
z_root() . '/photo/profile/m/' . $local[0]['channel_id'],
|
||||
z_root() . '/photo/profile/s/' . $local[0]['channel_id'],
|
||||
$arr['photo_mimetype'],
|
||||
false
|
||||
);
|
||||
}
|
||||
else {
|
||||
$photos = import_xchan_photo($arr['photo'], $xchan_hash);
|
||||
|
||||
Reference in New Issue
Block a user