extensible profiles - add the input form elements. Still needs styling and we're not yet storing the results. And right now we're ignoring the type and only doing type=string. Oh yeah - and I split off starting the second delivery chain into its own function in tag_deliver since it was largely duplicate code.
This commit is contained in:
parent
af45b34ee0
commit
b4aed12129
@ -1340,6 +1340,12 @@ function get_atom_elements($feed,$item,&$author) {
|
|||||||
$res['body'] = str_replace(array(' ',"\t","\r","\n"), array('','','',''),$res['body']);
|
$res['body'] = str_replace(array(' ',"\t","\r","\n"), array('','','',''),$res['body']);
|
||||||
// make sure nobody is trying to sneak some html tags by us
|
// make sure nobody is trying to sneak some html tags by us
|
||||||
$res['body'] = notags(base64url_decode($res['body']));
|
$res['body'] = notags(base64url_decode($res['body']));
|
||||||
|
|
||||||
|
// We could probably turn these old Friendica bbcode bookmarks into bookmark tags but we'd have to
|
||||||
|
// create a term table item for them. For now just make sure they stay as links.
|
||||||
|
|
||||||
|
$res['body'] = preg_replace('/\[bookmark(.*?)\](.*?)\[\/bookmark\]','[url$1]$2[/url]',$res['body']);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2346,8 +2352,9 @@ function tag_deliver($uid,$item_id) {
|
|||||||
|
|
||||||
$item = $i[0];
|
$item = $i[0];
|
||||||
|
|
||||||
if(($item['source_xchan']) && ($item['item_flags'] & ITEM_UPLINK) && ($item['item_flags'] & ITEM_THREAD_TOP) && ($item['edited'] != $item['created'])) {
|
if(($item['source_xchan']) && ($item['item_flags'] & ITEM_UPLINK)
|
||||||
// this is an update to a post which was already processed by us and has a second delivery chain
|
&& ($item['item_flags'] & ITEM_THREAD_TOP) && ($item['edited'] != $item['created'])) {
|
||||||
|
// this is an update (edit) to a post which was already processed by us and has a second delivery chain
|
||||||
// Just start the second delivery chain to deliver the updated post
|
// Just start the second delivery chain to deliver the updated post
|
||||||
proc_run('php','include/notifier.php','tgroup',$item['id']);
|
proc_run('php','include/notifier.php','tgroup',$item['id']);
|
||||||
return;
|
return;
|
||||||
@ -2444,78 +2451,14 @@ function tag_deliver($uid,$item_id) {
|
|||||||
// This might be a followup (e.g. comment) by the original post author to a tagged forum
|
// This might be a followup (e.g. comment) by the original post author to a tagged forum
|
||||||
// If so setup a second delivery chain
|
// If so setup a second delivery chain
|
||||||
|
|
||||||
$r = null;
|
|
||||||
|
|
||||||
if( ! ($item['item_flags'] & ITEM_THREAD_TOP)) {
|
if( ! ($item['item_flags'] & ITEM_THREAD_TOP)) {
|
||||||
$x = q("select * from item where id = parent and parent = %d and uid = %d limit 1",
|
$x = q("select * from item where id = parent and parent = %d and uid = %d limit 1",
|
||||||
intval($item['parent']),
|
intval($item['parent']),
|
||||||
intval($uid)
|
intval($uid)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
if(($x) && ($x[0]['item_flags'] & ITEM_UPLINK)) {
|
if(($x) && ($x[0]['item_flags'] & ITEM_UPLINK)) {
|
||||||
|
start_delivery_chain($u[0],$item,$item_id,$x[0]);
|
||||||
logger('tag_deliver: creating second delivery chain for comment to tagged post.');
|
|
||||||
|
|
||||||
// now change this copy of the post to a forum head message and deliver to all the tgroup members
|
|
||||||
// also reset all the privacy bits to the forum default permissions
|
|
||||||
|
|
||||||
$private = (($u[0]['channel_allow_cid'] || $u[0]['channel_allow_gid'] || $u[0]['channel_deny_cid'] || $u[0]['channel_deny_gid']) ? 1 : 0);
|
|
||||||
|
|
||||||
$new_public_policy = map_scope($u[0]['channel_r_stream'],true);
|
|
||||||
|
|
||||||
if((! $private) && $new_public_policy)
|
|
||||||
$private = 1;
|
|
||||||
|
|
||||||
$flag_bits = $item['item_flags'] | ITEM_WALL|ITEM_ORIGIN;
|
|
||||||
|
|
||||||
// maintain the original source, which will be the original item owner and was stored in source_xchan
|
|
||||||
// when we created the delivery fork
|
|
||||||
|
|
||||||
$r = q("update item set source_xchan = '%s' where id = %d limit 1",
|
|
||||||
dbesc($x[0]['source_xchan']),
|
|
||||||
intval($item_id)
|
|
||||||
);
|
|
||||||
|
|
||||||
$title = $item['title'];
|
|
||||||
$body = $item['body'];
|
|
||||||
|
|
||||||
if($private) {
|
|
||||||
if(!($flag_bits & ITEM_OBSCURED)) {
|
|
||||||
$key = get_config('system','pubkey');
|
|
||||||
$flag_bits = $flag_bits|ITEM_OBSCURED;
|
|
||||||
$title = json_encode(aes_encapsulate($title,$key));
|
|
||||||
$body = json_encode(aes_encapsulate($body,$key));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if($flag_bits & ITEM_OBSCURED) {
|
|
||||||
$key = get_config('system','prvkey');
|
|
||||||
$flag_bits = $flag_bits ^ ITEM_OBSCURED;
|
|
||||||
$title = json_encode(aes_unencapsulate($title,$key));
|
|
||||||
$body = json_encode(aes_unencapsulate($body,$key));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$r = q("update item set item_flags = %d, owner_xchan = '%s', allow_cid = '%s', allow_gid = '%s',
|
|
||||||
deny_cid = '%s', deny_gid = '%s', item_private = %d, public_policy = '%s', comment_policy = '%s', title = '%s', body = '%s' where id = %d limit 1",
|
|
||||||
intval($flag_bits),
|
|
||||||
dbesc($u[0]['channel_hash']),
|
|
||||||
dbesc($u[0]['channel_allow_cid']),
|
|
||||||
dbesc($u[0]['channel_allow_gid']),
|
|
||||||
dbesc($u[0]['channel_deny_cid']),
|
|
||||||
dbesc($u[0]['channel_deny_gid']),
|
|
||||||
intval($private),
|
|
||||||
dbesc($new_public_policy),
|
|
||||||
dbesc(map_scope($u[0]['channel_w_comment'])),
|
|
||||||
dbesc($title),
|
|
||||||
dbesc($body),
|
|
||||||
intval($item_id)
|
|
||||||
);
|
|
||||||
if($r)
|
|
||||||
proc_run('php','include/notifier.php','tgroup',$item_id);
|
|
||||||
else
|
|
||||||
logger('tag_deliver: failed to update item');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2549,8 +2492,6 @@ function tag_deliver($uid,$item_id) {
|
|||||||
intval($item_id)
|
intval($item_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// At this point we've determined that the person receiving this post was mentioned in it or it is a union.
|
// At this point we've determined that the person receiving this post was mentioned in it or it is a union.
|
||||||
// Now let's check if this mention was inside a reshare so we don't spam a forum
|
// Now let's check if this mention was inside a reshare so we don't spam a forum
|
||||||
// If it's private we may have to unobscure it momentarily so that we can parse it.
|
// If it's private we may have to unobscure it momentarily so that we can parse it.
|
||||||
@ -2622,81 +2563,20 @@ function tag_deliver($uid,$item_id) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// tgroup delivery - setup a second delivery chain
|
// tgroup delivery - setup a second delivery chain
|
||||||
// prevent delivery looping - only proceed
|
// prevent delivery looping - only proceed
|
||||||
// if the message originated elsewhere and is a top-level post
|
// if the message originated elsewhere and is a top-level post
|
||||||
|
|
||||||
if(($item['item_flags'] & ITEM_WALL) || ($item['item_flags'] & ITEM_ORIGIN) || (!($item['item_flags'] & ITEM_THREAD_TOP)) || ($item['id'] != $item['parent'])) {
|
if(($item['item_flags'] & ITEM_WALL)
|
||||||
|
|| ($item['item_flags'] & ITEM_ORIGIN)
|
||||||
|
|| (!($item['item_flags'] & ITEM_THREAD_TOP))
|
||||||
|
|| ($item['id'] != $item['parent'])) {
|
||||||
logger('tag_deliver: item was local or a comment. rejected.');
|
logger('tag_deliver: item was local or a comment. rejected.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* At this point we're committed to setting up a second delivery chain. We just have to mangle some bits first.
|
|
||||||
*/
|
|
||||||
|
|
||||||
logger('tag_deliver: creating second delivery chain.');
|
logger('tag_deliver: creating second delivery chain.');
|
||||||
|
start_delivery_chain($u[0],$item,$item_id,null);
|
||||||
// now change this copy of the post to a forum head message and deliver to all the tgroup members
|
|
||||||
// also reset all the privacy bits to the forum default permissions
|
|
||||||
|
|
||||||
$private = (($u[0]['channel_allow_cid'] || $u[0]['channel_allow_gid'] || $u[0]['channel_deny_cid'] || $u[0]['channel_deny_gid']) ? 1 : 0);
|
|
||||||
|
|
||||||
$new_public_policy = map_scope($u[0]['channel_r_stream'],true);
|
|
||||||
|
|
||||||
if((! $private) && $new_public_policy)
|
|
||||||
$private = 1;
|
|
||||||
|
|
||||||
$flag_bits = $item['item_flags'] | ITEM_WALL|ITEM_ORIGIN|ITEM_UPLINK;
|
|
||||||
|
|
||||||
// preserve the source
|
|
||||||
|
|
||||||
$r = q("update item set source_xchan = owner_xchan where id = %d limit 1",
|
|
||||||
intval($item_id)
|
|
||||||
);
|
|
||||||
|
|
||||||
// make sure encryption matches the new scope
|
|
||||||
|
|
||||||
$title = $item['title'];
|
|
||||||
$body = $item['body'];
|
|
||||||
|
|
||||||
if($private) {
|
|
||||||
if(!($flag_bits & ITEM_OBSCURED)) {
|
|
||||||
$key = get_config('system','pubkey');
|
|
||||||
$flag_bits = $flag_bits|ITEM_OBSCURED;
|
|
||||||
$title = json_encode(aes_encapsulate($title,$key));
|
|
||||||
$body = json_encode(aes_encapsulate($body,$key));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if($flag_bits & ITEM_OBSCURED) {
|
|
||||||
$key = get_config('system','prvkey');
|
|
||||||
$flag_bits = $flag_bits ^ ITEM_OBSCURED;
|
|
||||||
$title = json_encode(aes_unencapsulate($title,$key));
|
|
||||||
$body = json_encode(aes_unencapsulate($body,$key));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$r = q("update item set item_flags = %d, owner_xchan = '%s', allow_cid = '%s', allow_gid = '%s',
|
|
||||||
deny_cid = '%s', deny_gid = '%s', item_private = %d, public_policy = '%s', comment_policy = '%s', title = '%s', body = '%s' where id = %d limit 1",
|
|
||||||
intval($flag_bits),
|
|
||||||
dbesc($u[0]['channel_hash']),
|
|
||||||
dbesc($u[0]['channel_allow_cid']),
|
|
||||||
dbesc($u[0]['channel_allow_gid']),
|
|
||||||
dbesc($u[0]['channel_deny_cid']),
|
|
||||||
dbesc($u[0]['channel_deny_gid']),
|
|
||||||
intval($private),
|
|
||||||
dbesc($new_public_policy),
|
|
||||||
dbesc(map_scope($u[0]['channel_w_comment'])),
|
|
||||||
dbesc($title),
|
|
||||||
dbesc($body),
|
|
||||||
intval($item_id)
|
|
||||||
);
|
|
||||||
if($r)
|
|
||||||
proc_run('php','include/notifier.php','tgroup',$item_id);
|
|
||||||
else
|
|
||||||
logger('tag_deliver: failed to update item');
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2780,6 +2660,90 @@ function tgroup_check($uid,$item) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sourced and tag-delivered posts are re-targetted for delivery to the connections of the channel
|
||||||
|
* receiving the post. This starts the second delivery chain, by resetting permissions and ensuring
|
||||||
|
* that ITEM_UPLINK is set on the parent post, and storing the current owner_xchan as the source_xchan.
|
||||||
|
* We'll become the new owner. If called without $parent, this *is* the parent post.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function start_delivery_chain($channel,$item,$item_id,$parent) {
|
||||||
|
|
||||||
|
|
||||||
|
// Change this copy of the post to a forum head message and deliver to all the tgroup members
|
||||||
|
// also reset all the privacy bits to the forum default permissions
|
||||||
|
|
||||||
|
$private = (($channel['channel_allow_cid'] || $channel['channel_allow_gid']
|
||||||
|
|| $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 1 : 0);
|
||||||
|
|
||||||
|
$new_public_policy = map_scope($channel['channel_r_stream'],true);
|
||||||
|
|
||||||
|
if((! $private) && $new_public_policy)
|
||||||
|
$private = 1;
|
||||||
|
|
||||||
|
$flag_bits = $item['item_flags'] | ITEM_WALL|ITEM_ORIGIN;
|
||||||
|
|
||||||
|
// maintain the original source, which will be the original item owner and was stored in source_xchan
|
||||||
|
// when we created the delivery fork
|
||||||
|
|
||||||
|
if($parent) {
|
||||||
|
$r = q("update item set source_xchan = '%s' where id = %d limit 1",
|
||||||
|
dbesc($parent['source_xchan']),
|
||||||
|
intval($item_id)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$flag_bits = $flag_bits | ITEM_UPLINK;
|
||||||
|
$r = q("update item set source_xchan = owner_xchan where id = %d limit 1",
|
||||||
|
intval($item_id)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$title = $item['title'];
|
||||||
|
$body = $item['body'];
|
||||||
|
|
||||||
|
if($private) {
|
||||||
|
if(!($flag_bits & ITEM_OBSCURED)) {
|
||||||
|
$key = get_config('system','pubkey');
|
||||||
|
$flag_bits = $flag_bits|ITEM_OBSCURED;
|
||||||
|
$title = json_encode(aes_encapsulate($title,$key));
|
||||||
|
$body = json_encode(aes_encapsulate($body,$key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if($flag_bits & ITEM_OBSCURED) {
|
||||||
|
$key = get_config('system','prvkey');
|
||||||
|
$flag_bits = $flag_bits ^ ITEM_OBSCURED;
|
||||||
|
$title = json_encode(aes_unencapsulate($title,$key));
|
||||||
|
$body = json_encode(aes_unencapsulate($body,$key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$r = q("update item set item_flags = %d, owner_xchan = '%s', allow_cid = '%s', allow_gid = '%s',
|
||||||
|
deny_cid = '%s', deny_gid = '%s', item_private = %d, public_policy = '%s', comment_policy = '%s', title = '%s', body = '%s' where id = %d limit 1",
|
||||||
|
intval($flag_bits),
|
||||||
|
dbesc($channel['channel_hash']),
|
||||||
|
dbesc($channel['channel_allow_cid']),
|
||||||
|
dbesc($channel['channel_allow_gid']),
|
||||||
|
dbesc($channel['channel_deny_cid']),
|
||||||
|
dbesc($channel['channel_deny_gid']),
|
||||||
|
intval($private),
|
||||||
|
dbesc($new_public_policy),
|
||||||
|
dbesc(map_scope($channel['channel_w_comment'])),
|
||||||
|
dbesc($title),
|
||||||
|
dbesc($body),
|
||||||
|
intval($item_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
if($r)
|
||||||
|
proc_run('php','include/notifier.php','tgroup',$item_id);
|
||||||
|
else
|
||||||
|
logger('start_delivery_chain: failed to update item');
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function check_item_source($uid,$item)
|
* @function check_item_source($uid,$item)
|
||||||
|
@ -568,6 +568,24 @@ function profiles_content(&$a) {
|
|||||||
'$no_selected' => (($r[0]['hide_friends'] == 0) ? " checked=\"checked\" " : "")
|
'$no_selected' => (($r[0]['hide_friends'] == 0) ? " checked=\"checked\" " : "")
|
||||||
));
|
));
|
||||||
|
|
||||||
|
$q = q("select * from profdef where true");
|
||||||
|
if($q) {
|
||||||
|
$extra_fields = array();
|
||||||
|
|
||||||
|
foreach($q as $qq) {
|
||||||
|
$mine = q("select v from profext where k = '%s' and hash = '%s' and channel_id = %d limit 1",
|
||||||
|
dbesc($qq['field_name']),
|
||||||
|
dbesc($r[0]['profile_guid']),
|
||||||
|
intval(local_user())
|
||||||
|
);
|
||||||
|
|
||||||
|
if(array_key_exists($qq['field_name'],$fields)) {
|
||||||
|
$extra_fields[] = array($qq['field_name'],$qq['field_desc'],(($mine) ? $mine[0]['v'] : ''), $qq['field_help']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logger('extra_fields: ' . print_r($extra_fields,true));
|
||||||
|
|
||||||
$f = get_config('system','birthday_input_format');
|
$f = get_config('system','birthday_input_format');
|
||||||
if(! $f)
|
if(! $f)
|
||||||
@ -674,6 +692,7 @@ function profiles_content(&$a) {
|
|||||||
'$education' => $r[0]['education'],
|
'$education' => $r[0]['education'],
|
||||||
'$contact' => $r[0]['contact'],
|
'$contact' => $r[0]['contact'],
|
||||||
'$channels' => $r[0]['channels'],
|
'$channels' => $r[0]['channels'],
|
||||||
|
'$extra_fields' => $extra_fields,
|
||||||
));
|
));
|
||||||
|
|
||||||
$arr = array('profile' => $r[0], 'entry' => $o);
|
$arr = array('profile' => $r[0], 'entry' => $o);
|
||||||
|
@ -349,6 +349,11 @@
|
|||||||
<div id="education-jot-end"></div>
|
<div id="education-jot-end"></div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
{{if $extra_fields}}
|
||||||
|
{{foreach $extra_fields as $field }}
|
||||||
|
{{include file="field_input.tpl" field=$field}}
|
||||||
|
{{/foreach}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
<div class="profile-edit-submit-wrapper" >
|
<div class="profile-edit-submit-wrapper" >
|
||||||
<input type="submit" name="submit" class="profile-edit-submit-button" value="{{$submit}}" />
|
<input type="submit" name="submit" class="profile-edit-submit-button" value="{{$submit}}" />
|
||||||
|
Reference in New Issue
Block a user