137 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace Zotlabs\Module;
 | |
| 
 | |
| use App;
 | |
| use Zotlabs\Daemon\Master;
 | |
| use Zotlabs\Lib\Activity;
 | |
| 
 | |
| 
 | |
| require_once('include/security.php');
 | |
| require_once('include/bbcode.php');
 | |
| 
 | |
| 
 | |
| class Share extends \Zotlabs\Web\Controller {
 | |
| 
 | |
| 	function init() {
 | |
| 	
 | |
| 		$post_id = ((argc() > 1) ? intval(argv(1)) : 0);
 | |
| 	
 | |
| 		if(! $post_id)
 | |
| 			killme();
 | |
| 	
 | |
| 		if(! local_channel()) {
 | |
| 			killme();
 | |
| 		}
 | |
| 
 | |
| 		$observer = App::get_observer();	
 | |
| 
 | |
| 		$channel = App::get_channel();
 | |
| 
 | |
| 		$r = q("SELECT * from item left join xchan on author_xchan = xchan_hash WHERE id = %d  LIMIT 1",
 | |
| 			intval($post_id)
 | |
| 		);
 | |
| 		if(! $r)
 | |
| 			killme();
 | |
| 
 | |
| 		
 | |
| 
 | |
| 
 | |
| 		if(($r[0]['item_private']) && ($r[0]['xchan_network'] !== 'rss'))
 | |
| 			killme();
 | |
| 	
 | |
| 		$sql_extra = item_permissions_sql($r[0]['uid']);
 | |
| 	
 | |
| 		$r = q("select * from item where id = %d $sql_extra",
 | |
| 			intval($post_id)
 | |
| 		);
 | |
| 		if(! $r)
 | |
| 			killme();
 | |
| 	
 | |
| 		/** @FIXME we only share bbcode */
 | |
| 	
 | |
| 		if($r[0]['mimetype'] !== 'text/bbcode')
 | |
| 			killme();
 | |
| 		
 | |
| 		xchan_query($r);
 | |
| 	
 | |
| 		$arr = [];
 | |
| 
 | |
| 		$item = $r[0];
 | |
| 
 | |
| 		$owner_uid = $r[0]['uid'];
 | |
| 		$owner_aid = $r[0]['aid'];
 | |
| 
 | |
| 		$can_comment = false;
 | |
| 		if((array_key_exists('owner',$item)) && intval($item['owner']['abook_self']))
 | |
| 			$can_comment = perm_is_allowed($item['uid'],$observer['xchan_hash'],'post_comments');
 | |
| 		else
 | |
| 			$can_comment = can_comment_on_post($observer['xchan_hash'],$item);
 | |
| 
 | |
| 		if(! $can_comment) {
 | |
| 			notice( t('Permission denied') . EOL);
 | |
| 			killme();
 | |
| 		}
 | |
| 
 | |
| 		$r = q("select * from xchan where xchan_hash = '%s' limit 1",
 | |
| 			dbesc($item['owner_xchan'])
 | |
| 		);
 | |
| 
 | |
| 		if($r)
 | |
| 			$thread_owner = $r[0];
 | |
| 		else
 | |
| 			killme();
 | |
| 	
 | |
| 		$r = q("select * from xchan where xchan_hash = '%s' limit 1",
 | |
| 			dbesc($item['author_xchan'])
 | |
| 		);
 | |
| 		if($r)
 | |
| 			$item_author = $r[0];
 | |
| 		else
 | |
| 			killme();
 | |
| 	
 | |
| 
 | |
| 		$arr['aid'] = $owner_aid;
 | |
| 		$arr['uid'] = $owner_uid;
 | |
| 
 | |
| 		$arr['item_origin'] = 1;
 | |
| 		$arr['item_wall'] = $item['item_wall'];
 | |
| 		$arr['uuid'] = item_message_id();
 | |
| 		$arr['mid'] = z_root() . '/activity/' . $arr['uuid'];
 | |
| 		$arr['parent_mid'] = $item['mid'];
 | |
| 
 | |
| 		$mention = '@[zrl=' . $item['author']['xchan_url'] . ']' . $item['author']['xchan_name'] . '[/zrl]';
 | |
| 		$arr['body'] = sprintf( t('🔁 Repeated %1$s\'s %2$s'), $mention, Activity::activity_obj_mapper($item['obj_type']));
 | |
| 
 | |
| 		$arr['author_xchan'] = $channel['channel_hash'];
 | |
| 		$arr['owner_xchan']  = $item['author_xchan'];
 | |
| 		$arr['obj'] = Activity::encode_item($item);
 | |
| 		$arr['obj_type'] = $item['obj_type'];
 | |
| 		$arr['verb'] = 'Announce';
 | |
| 
 | |
| 		$post = item_store($arr);	
 | |
| 
 | |
| 		$post_id = $post['item_id'];
 | |
| 
 | |
| 		$arr['id'] = $post_id;
 | |
| 	
 | |
| 		call_hooks('post_local_end', $arr);
 | |
| 
 | |
| 		info( t('Post repeated') . EOL);
 | |
| 
 | |
| 		$r = q("select * from item where id = %d",
 | |
| 			intval($post_id)
 | |
| 		);
 | |
| 		if($r) {
 | |
| 			xchan_query($r);
 | |
| 			$sync_item = fetch_post_tags($r);
 | |
| 			build_sync_packet($channel['channel_id'], [ 'item' => [ encode_item($sync_item[0],true) ] ]);
 | |
| 		}
 | |
| 
 | |
| 		Master::Summon([ 'Notifier','like',$post_id ]);
 | |
| 	
 | |
| 		killme();
 | |
| 	
 | |
| 	}
 | |
| 	
 | |
| }
 |