The Red Matrix
 All Classes Namespaces Files Functions Variables Pages
items.php File Reference

Functions

 collect_recipients ($item, &$private_envelope)
 
 filter_insecure ($channel_id, $arr)
 
 comments_are_now_closed ($item)
 
 can_comment_on_post ($observer_xchan, $item)
 
 add_source_route ($iid, $hash)
 
 red_zrl_callback ($matches)
 
 red_escape_zrl_callback ($matches)
 
 red_escape_codeblock ($m)
 
 red_unescape_codeblock ($m)
 
 red_zrlify_img_callback ($matches)
 
 post_activity_item ($arr)
 
 get_public_feed ($channel, $params)
 
 get_feed_for ($channel, $observer_hash, $params)
 
 construct_verb ($item)
 
 construct_activity_object ($item)
 
 construct_activity_target ($item)
 
 limit_body_size ($body)
 
 title_is_body ($title, $body)
 
 get_item_elements ($x)
 
 import_author_xchan ($x)
 
 import_author_diaspora ($x)
 
 import_author_rss ($x)
 
 import_author_unknown ($x)
 
 encode_item ($item, $mirror=false)
 
 map_scope ($scope, $strip=false)
 
 translate_scope ($scope)
 
 encode_item_xchan ($xchan)
 
 encode_item_terms ($terms)
 
 termtype ($t)
 
 decode_tags ($t)
 
 activity_sanitise ($arr)
 
 array_sanitise ($arr)
 
 encode_item_flags ($item)
 
 encode_mail ($item)
 
 get_mail_elements ($x)
 
 get_profile_elements ($x)
 
 get_atom_elements ($feed, $item, &$author)
 
 encode_rel_links ($links)
 
 item_store ($arr, $allow_exec=false)
 
 item_store_update ($arr, $allow_exec=false)
 
 store_diaspora_comment_sig ($datarray, $channel, $parent_item, $post_id, $walltowall=false)
 
 send_status_notifications ($post_id, $item)
 
 get_item_contact ($item, $contacts)
 
 tag_deliver ($uid, $item_id)
 
 tgroup_check ($uid, $item)
 
 start_delivery_chain ($channel, $item, $item_id, $parent)
 
 check_item_source ($uid, $item)
 
 mail_store ($arr)
 
 consume_feed ($xml, $importer, &$contact, $pass=0)
 
 update_feed_item ($uid, $datarray)
 
 handle_feed ($uid, $abook_id, $url)
 
 atom_author ($tag, $name, $uri, $h, $w, $type, $photo)
 
 atom_entry ($item, $type, $author, $owner, $comment=false, $cid=0)
 
 fix_private_photos ($s, $uid, $item=null, $cid=0)
 
 has_permissions ($obj)
 
 compare_permissions ($obj1, $obj2)
 
 enumerate_permissions ($obj)
 
 item_getfeedtags ($item)
 
 item_getfeedattach ($item)
 
 item_expire ($uid, $days)
 
 retain_item ($id)
 
 drop_items ($items)
 
 drop_item ($id, $interactive=true, $stage=DROPITEM_NORMAL)
 
 delete_item_lowlevel ($item, $stage=DROPITEM_NORMAL)
 
 first_post_date ($uid, $wall=false)
 
 list_post_dates ($uid, $wall)
 
 posted_dates ($uid, $wall)
 
 fetch_post_tags ($items, $link=false)
 
 zot_feed ($uid, $observer_xchan, $mindate)
 
 items_fetch ($arr, $channel=null, $observer_hash=null, $client_mode=CLIENT_MODE_NORMAL, $module= 'network')
 
 update_remote_id ($channel, $post_id, $webpage, $pagetitle, $namespace, $remote_id, $mid)
 
 item_add_cid ($xchan_hash, $mid, $uid)
 
 item_remove_cid ($xchan_hash, $mid, $uid)
 

Function Documentation

activity_sanitise (   $arr)
add_source_route (   $iid,
  $hash 
)

add_source_route($iid,$hash) Adds $hash to the item source route specified by $iid

Parameters
integer$iiditem['id'] of target item
string$hashxchan_hash of the channel that sent the item Modifies item pointed to by $iid

$item['route'] contains a comma-separated list of xchans that sent the current message, somewhat analogous to the * Received: header line in email. We can use this to perform loop detection and to avoid sending a particular item to any "upstream" sender (they already have a copy because they sent it to us).

Referenced by process_delivery().

array_sanitise (   $arr)

Referenced by get_profile_elements().

atom_author (   $tag,
  $name,
  $uri,
  $h,
  $w,
  $type,
  $photo 
)

Referenced by atom_entry().

atom_entry (   $item,
  $type,
  $author,
  $owner,
  $comment = false,
  $cid = 0 
)

Referenced by get_feed_for().

can_comment_on_post (   $observer_xchan,
  $item 
)

can_comment_on_post($observer_xchan,$item);

This function examines the comment_policy attached to an item and decides if the current observer has sufficient privileges to comment. This will normally be called on a remote site where perm_is_allowed() will not be suitable because the post owner does not have a local channel_id. Generally we should look at the item - in particular the author['book_flags'] and see if ABOOK_FLAG_SELF is set. If it is, you should be able to use perm_is_allowed( ... 'post_comments'), and if it isn't you need to call can_comment_on_post() We also check the comments_closed date/time on the item if this is set.

Referenced by Conversation\add_thread(), and item_post().

check_item_source (   $uid,
  $item 
)

check_item_source($uid,$item)

Parameters
$uid
$itemChecks to see if this item owner is referenced as a source for this channel and if the post matches the rules for inclusion in this channel. Returns true if we should create a second delivery chain and false if none of the rules apply, or if the item is private.

Referenced by tag_deliver().

collect_recipients (   $item,
$private_envelope 
)

Referenced by notifier_run().

comments_are_now_closed (   $item)
compare_permissions (   $obj1,
  $obj2 
)

Referenced by fix_private_photos().

construct_activity_object (   $item)

Referenced by atom_entry().

construct_activity_target (   $item)

Referenced by atom_entry().

construct_verb (   $item)

Referenced by atom_entry().

consume_feed (   $xml,
  $importer,
$contact,
  $pass = 0 
)

consume_feed - process atom feed and update anything/everything we might need to update

$xml = the (atom) feed to consume - RSS isn't as fully supported but may work for simple feeds.

$importer = the contact_record (joined to user_record) of the local user who owns this relationship. It is this person's stuff that is going to be updated. $contact = the person who is sending us stuff. If not set, we MAY be processing a "follow" activity from an external network and MAY create an appropriate contact record. Otherwise, we MUST have a contact record. $hub = should we find a hub declation in the feed, pass it back to our calling process, who might (or might not) try and subscribe to it. $datedir sorts in reverse order $pass - by default ($pass = 0) we cannot guarantee that a parent item has been imported prior to its children being seen in the stream unless we are certain of how the feed is arranged/ordered. With $pass = 1, we only pull parent items out of the stream. With $pass = 2, we only pull children (comments/likes).

So running this twice, first with pass 1 and then with pass 2 will do the right thing regardless of feed ordering. This won't be adequate in a fully-threaded model where comments can have sub-threads. That would require some massive sorting to get all the feed items into a mostly linear ordering, and might still require recursion.

Referenced by handle_feed().

decode_tags (   $t)

Referenced by get_item_elements().

delete_item_lowlevel (   $item,
  $stage = DROPITEM_NORMAL 
)

Referenced by drop_item().

drop_items (   $items)

Referenced by item_post().

encode_item (   $item,
  $mirror = false 
)
encode_item_flags (   $item)

Referenced by encode_item().

encode_item_terms (   $terms)

Referenced by encode_item().

encode_item_xchan (   $xchan)

Referenced by encode_item(), and encode_mail().

encode_mail (   $item)

Referenced by notifier_run().

encode_rel_links (   $links)

Referenced by get_atom_elements().

enumerate_permissions (   $obj)
filter_insecure (   $channel_id,
  $arr 
)

If channel is configured to filter insecure members of privacy groups (those whose networks leak privacy via email notifications or other criteria) remove them from any privacy groups (collections) that were included in a post. They can still be addressed individually. Networks may need to be added or removed from this list as circumstances change.

Update: this may need to be the default, which will force people to opt-in to sending stuff privately to insecure platforms.

Referenced by collect_recipients().

first_post_date (   $uid,
  $wall = false 
)

Referenced by list_post_dates(), and posted_dates().

fix_private_photos (   $s,
  $uid,
  $item = null,
  $cid = 0 
)

Referenced by atom_entry().

get_atom_elements (   $feed,
  $item,
$author 
)

If there's a copy of the body content which is guaranteed to have survived mangling in transit, use it.

Referenced by consume_feed().

get_feed_for (   $channel,
  $observer_hash,
  $params 
)

Referenced by get_public_feed().

get_item_contact (   $item,
  $contacts 
)
get_item_elements (   $x)
get_mail_elements (   $x)

Referenced by zot_import().

get_profile_elements (   $x)

Referenced by zot_import().

get_public_feed (   $channel,
  $params 
)

get_public_feed($channel,$params) generate an Atom feed

Referenced by feed_init().

handle_feed (   $uid,
  $abook_id,
  $url 
)

Referenced by onepoll_run().

has_permissions (   $obj)

Referenced by fix_private_photos().

import_author_diaspora (   $x)

Referenced by import_author_xchan(), and poco_load().

import_author_rss (   $x)

Referenced by import_author_xchan().

import_author_unknown (   $x)
import_author_xchan (   $x)
item_add_cid (   $xchan_hash,
  $mid,
  $uid 
)

change access control for item with message_id $mid and channel_id $uid

item_expire (   $uid,
  $days 
)

Referenced by expire_run().

item_getfeedattach (   $item)
item_getfeedtags (   $item)
item_remove_cid (   $xchan_hash,
  $mid,
  $uid 
)
item_store_update (   $arr,
  $allow_exec = false 
)
items_fetch (   $arr,
  $channel = null,
  $observer_hash = null,
  $client_mode = CLIENT_MODE_NORMAL,
  $module = 'network' 
)
limit_body_size (   $body)

Referenced by get_atom_elements().

list_post_dates (   $uid,
  $wall 
)

modified posted_dates() {below} to arrange the list in years, which we'll eventually use to make a menu of years with collapsible sub-menus for the months instead of the current flat list of all representative dates.

Referenced by widget_archive().

mail_store (   $arr)

Referenced by process_mail_delivery().

map_scope (   $scope,
  $strip = false 
)
post_activity_item (   $arr)

post_activity_item($arr)

post an activity
Parameters
array$arrIn its simplest form one needs only to set $arr['body'] to post a note to the logged in channel's wall. Much more complex activities can be created. Permissions are checked. No filtering, tag expansion or other processing is performed.
Returns
array 'success' => true or false 'activity' => the resulting activity if successful

Referenced by api_channel_stream(), connedit_post(), poke_init(), tagger_content(), and thing_init().

posted_dates (   $uid,
  $wall 
)
red_escape_codeblock (   $m)
red_escape_zrl_callback (   $matches)
red_unescape_codeblock (   $m)
red_zrl_callback (   $matches)

red_zrl_callback preg_match function when fixing 'naked' links in mod item.php Check if we've got a hubloc for the site and use a zrl if we do, a url if we don't. Remove any existing zid= param which may have been pasted by mistake - and will have the author's credentials. zid's are dynamic and can't really be passed around like that.

red_zrlify_img_callback (   $matches)
retain_item (   $id)

Referenced by item_expire().

send_status_notifications (   $post_id,
  $item 
)
start_delivery_chain (   $channel,
  $item,
  $item_id,
  $parent 
)

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.

Referenced by tag_deliver().

store_diaspora_comment_sig (   $datarray,
  $channel,
  $parent_item,
  $post_id,
  $walltowall = false 
)

Referenced by item_post().

tag_deliver (   $uid,
  $item_id 
)

Fetch stuff we need - a channel and an item

Seems like a good place to plug in a poke notification.

Do community tagging

A "union" is a message which our channel has sourced from another channel. This sets up a second delivery chain just like forum tags do. Find out if this is a source-able post.

Now we've got those out of the way. Let's see if this is a post that's tagged for re-delivery

Kill two birds with one stone. As long as we're here, send a mention notification.

Referenced by delete_imported_item(), item_content(), item_store(), and item_store_update().

termtype (   $t)

Referenced by encode_item_terms().

tgroup_check (   $uid,
  $item 
)

tgroup_check($uid,$item)

This function is called pre-deliver to see if a post matches the criteria to be tag delivered. We don't actually do anything except check that it matches the criteria. This is so that the channel with tag_delivery enabled can receive the post even if they turn off permissions for the sender to send their stream. tag_deliver() can't be called until the post is actually stored. By then it would be too late to reject it.

Referenced by process_delivery().

title_is_body (   $title,
  $body 
)

Referenced by get_atom_elements().

translate_scope (   $scope)
update_feed_item (   $uid,
  $datarray 
)

Referenced by consume_feed().

update_remote_id (   $channel,
  $post_id,
  $webpage,
  $pagetitle,
  $namespace,
  $remote_id,
  $mid 
)

Referenced by impel_init(), and item_post().

zot_feed (   $uid,
  $observer_xchan,
  $mindate 
)

Referenced by zotfeed_init().