file sync work
This commit is contained in:
parent
a20ef706fd
commit
29363a185d
@ -1843,16 +1843,27 @@ function attach_export_data($channel,$resource_id) {
|
|||||||
$paths[] = $r[0];
|
$paths[] = $r[0];
|
||||||
} while($hash_ptr);
|
} while($hash_ptr);
|
||||||
|
|
||||||
|
|
||||||
|
$ret['fetch_url'] = z_root() . '/getfile';
|
||||||
|
$ret['original_channel'] = $channel['channel_address'];
|
||||||
|
|
||||||
|
|
||||||
$paths = array_reverse($paths);
|
$paths = array_reverse($paths);
|
||||||
|
|
||||||
$ret['attach'] = $paths;
|
$ret['attach'] = $paths;
|
||||||
|
|
||||||
|
|
||||||
if($attach_ptr['is_photo']) {
|
if($attach_ptr['is_photo']) {
|
||||||
$r = q("select * from photo where resource_id = '%s' and uid = %d order by scale asc",
|
$r = q("select * from photo where resource_id = '%s' and uid = %d order by scale asc",
|
||||||
dbesc($resource_id),
|
dbesc($resource_id),
|
||||||
intval($channel['channel_id'])
|
intval($channel['channel_id'])
|
||||||
);
|
);
|
||||||
|
if($r) {
|
||||||
|
foreach($r as $rr) {
|
||||||
|
$rr['data'] = base64_encode($rr['data']);
|
||||||
|
}
|
||||||
$ret['photo'] = $r;
|
$ret['photo'] = $r;
|
||||||
|
}
|
||||||
|
|
||||||
$r = q("select * from item where resource_id = '%s' and resource_type = 'photo' and uid = %d ",
|
$r = q("select * from item where resource_id = '%s' and resource_type = 'photo' and uid = %d ",
|
||||||
dbesc($resource_id),
|
dbesc($resource_id),
|
||||||
@ -1875,3 +1886,15 @@ function attach_export_data($channel,$resource_id) {
|
|||||||
return $ret;
|
return $ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* strip off 'store/nickname/' from the provided path */
|
||||||
|
|
||||||
|
function get_attach_binname($s) {
|
||||||
|
$p = $s;
|
||||||
|
if(strpos($s,'store/') === 0) {
|
||||||
|
$p = substr($s,6);
|
||||||
|
$p = substr($p,strpos($p,'/')+1);
|
||||||
|
}
|
||||||
|
return $p;
|
||||||
|
}
|
@ -870,6 +870,132 @@ function import_mail($channel,$mails) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function sync_files($channel,$files) {
|
||||||
|
|
||||||
|
require_once('include/attach.php');
|
||||||
|
|
||||||
|
if($channel && $files) {
|
||||||
|
foreach($files as $f) {
|
||||||
|
if(! $f)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$fetch_url = $f['fetch_url'];
|
||||||
|
$oldbase = dirname($fetch_url);
|
||||||
|
$original_channel = $f['original_channel'];
|
||||||
|
|
||||||
|
if(! ($fetch_url && $original_channel))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if($f['attach']) {
|
||||||
|
$attachment_stored = false;
|
||||||
|
foreach($f['attach'] as $att) {
|
||||||
|
$x = attach_by_hash($att['hash']);
|
||||||
|
if($x && $x['uid'] == $channel['channel_id'])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$newfname = 'store/' . $channel['channel_address'] . '/' . get_attach_binname($att['data']);
|
||||||
|
|
||||||
|
if($att['filetype'] === 'multipart/mixed' && $att['is_dir']) {
|
||||||
|
os_mkdir($newfname, STORAGE_DEFAULT_PERMISSIONS,true);
|
||||||
|
$att['data'] = $newfname;
|
||||||
|
dbesc_array($att);
|
||||||
|
$r = dbq("INSERT INTO attach (`"
|
||||||
|
. implode("`, `", array_keys($att))
|
||||||
|
. "`) VALUES ('"
|
||||||
|
. implode("', '", array_values($att))
|
||||||
|
. "')" );
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$time = datetime_convert();
|
||||||
|
|
||||||
|
$parr = array('hash' => $channel['channel_hash'],
|
||||||
|
'time' => $time,
|
||||||
|
'resource' => $att['hash'],
|
||||||
|
'revision' => 0,
|
||||||
|
'sig' => rsa_sign($channel['channel_hash'] . '.' . $time, $channel['channel_prvkey'])
|
||||||
|
);
|
||||||
|
|
||||||
|
$store_path = $newfname;
|
||||||
|
|
||||||
|
$fp = fopen($newfname,'w');
|
||||||
|
if(! $fp) {
|
||||||
|
logger('failed to open file.');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$redirects = 0;
|
||||||
|
$x = z_post_url($fetch_url,$parr,$redirects,array('filep' => $fp));
|
||||||
|
fclose($fp);
|
||||||
|
|
||||||
|
if($x['success']) {
|
||||||
|
$attachment_stored = true;
|
||||||
|
|
||||||
|
dbesc_array($att);
|
||||||
|
$r = dbq("INSERT INTO attach (`"
|
||||||
|
. implode("`, `", array_keys($att))
|
||||||
|
. "`) VALUES ('"
|
||||||
|
. implode("', '", array_values($att))
|
||||||
|
. "')" );
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(! $attachment_stored) {
|
||||||
|
// should we queue this and retry or what?
|
||||||
|
logger('attachment store failed');
|
||||||
|
}
|
||||||
|
if($f['photo']) {
|
||||||
|
foreach($f['photo'] as $p) {
|
||||||
|
unset($p['id']);
|
||||||
|
$p['aid'] = $channel['channel_account_id'];
|
||||||
|
$p['uid'] = $channel['channel_id'];
|
||||||
|
|
||||||
|
if($p['scale'] === 0 && $p['os_storage'])
|
||||||
|
$p['data'] = $store_path;
|
||||||
|
else
|
||||||
|
$p['data'] = base64_decode($p['data']);
|
||||||
|
|
||||||
|
dbesc_array($p);
|
||||||
|
$r = dbq("INSERT INTO photo (`"
|
||||||
|
. implode("`, `", array_keys($p))
|
||||||
|
. "`) VALUES ('"
|
||||||
|
. implode("', '", array_values($p))
|
||||||
|
. "')" );
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($f['item']) {
|
||||||
|
sync_items($channel,$f['item']);
|
||||||
|
foreach($f['item'] as $i) {
|
||||||
|
if($i['message_id'] !== $i['message_parent'])
|
||||||
|
continue;
|
||||||
|
$r = q("select * from item where mid = '%s' and uid = %d limit 1",
|
||||||
|
dbesc($i['message_id']),
|
||||||
|
intval($channel['channel_id'])
|
||||||
|
);
|
||||||
|
if($r) {
|
||||||
|
$item = $r[0];
|
||||||
|
item_url_replace($channel,$item,$oldbase,z_root(),$original_channel);
|
||||||
|
|
||||||
|
dbesc_array($item);
|
||||||
|
$item_id = $item['id'];
|
||||||
|
unset($item['id']);
|
||||||
|
$str = '';
|
||||||
|
foreach($item as $k => $v) {
|
||||||
|
if($str)
|
||||||
|
$str .= ",";
|
||||||
|
$str .= " `" . $k . "` = '" . $v . "' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
$r = dbq("update `item` set " . $str . " where id = " . $item_id );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ function photo_upload($channel, $observer, $args) {
|
|||||||
'title' => $title,
|
'title' => $title,
|
||||||
'created' => $p['created'],
|
'created' => $p['created'],
|
||||||
'edited' => $p['edited'],
|
'edited' => $p['edited'],
|
||||||
'id' => rawurlencode(z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo_hash),
|
'id' => z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo_hash,
|
||||||
'link' => $link,
|
'link' => $link,
|
||||||
'body' => $obj_body
|
'body' => $obj_body
|
||||||
);
|
);
|
||||||
@ -320,7 +320,7 @@ function photo_upload($channel, $observer, $args) {
|
|||||||
$target = array(
|
$target = array(
|
||||||
'type' => ACTIVITY_OBJ_ALBUM,
|
'type' => ACTIVITY_OBJ_ALBUM,
|
||||||
'title' => (($album) ? $album : '/'),
|
'title' => (($album) ? $album : '/'),
|
||||||
'id' => rawurlencode(z_root() . '/photos/' . $channel['channel_address'] . '/album/' . bin2hex($album))
|
'id' => z_root() . '/photos/' . $channel['channel_address'] . '/album/' . bin2hex($album)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Create item container
|
// Create item container
|
||||||
|
@ -2730,14 +2730,23 @@ function json_url_replace($old,$new,&$s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function item_url_replace($channel,&$item,$old,$new) {
|
function item_url_replace($channel,&$item,$old,$new,$oldnick = '') {
|
||||||
|
|
||||||
if($item['attach'])
|
if($item['attach']) {
|
||||||
json_url_replace($old,$new,$item['attach']);
|
json_url_replace($old,$new,$item['attach']);
|
||||||
if($item['object'])
|
if($oldnick)
|
||||||
|
json_url_replace('/' . $oldnick . '/' ,'/' . $channel['channel_address'] . '/' ,$item['attach']);
|
||||||
|
}
|
||||||
|
if($item['object']) {
|
||||||
json_url_replace($old,$new,$item['object']);
|
json_url_replace($old,$new,$item['object']);
|
||||||
if($item['target'])
|
if($oldnick)
|
||||||
|
json_url_replace('/' . $oldnick . '/' ,'/' . $channel['channel_address'] . '/' ,$item['object']);
|
||||||
|
}
|
||||||
|
if($item['target']) {
|
||||||
json_url_replace($old,$new,$item['target']);
|
json_url_replace($old,$new,$item['target']);
|
||||||
|
if($oldnick)
|
||||||
|
json_url_replace('/' . $oldnick . '/' ,'/' . $channel['channel_address'] . '/' ,$item['target']);
|
||||||
|
}
|
||||||
|
|
||||||
if(string_replace($old,$new,$item['body'])) {
|
if(string_replace($old,$new,$item['body'])) {
|
||||||
$item['sig'] = base64url_encode(rsa_sign($item['body'],$channel['channel_prvkey']));
|
$item['sig'] = base64url_encode(rsa_sign($item['body'],$channel['channel_prvkey']));
|
||||||
@ -2746,6 +2755,14 @@ function item_url_replace($channel,&$item,$old,$new) {
|
|||||||
|
|
||||||
// @fixme item['plink'] and item['llink']
|
// @fixme item['plink'] and item['llink']
|
||||||
|
|
||||||
|
str_replace($old,$new,$item['plink']);
|
||||||
|
if($oldnick)
|
||||||
|
str_replace('/' . $oldnick . '/' ,'/' . $channel['channel_address'] . '/' ,$item['plink']);
|
||||||
|
|
||||||
|
str_replace($old,$new,$item['llink']);
|
||||||
|
if($oldnick)
|
||||||
|
str_replace('/' . $oldnick . '/' ,'/' . $channel['channel_address'] . '/' ,$item['llink']);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user