aboutsummaryrefslogblamecommitdiffstats
path: root/Zotlabs/Module/Share.php
blob: 5c4811c59377f9049af21b38e2a788ca1f5bff39 (plain) (tree)

















































                                                                                                                
                                                                 


























                                                                                                 
                                                                                                                                  













                                                                                                   
<?php
namespace Zotlabs\Module;

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() || remote_channel()))
			killme();
	
		$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();
	
		/** @FIXME eventually we want to post remotely via rpost on your home site */
		// When that works remove this next bit:
	
		if(! local_channel())
			killme();
	
		xchan_query($r);
	
		$is_photo = (($r[0]['obj_type'] === ACTIVITY_OBJ_PHOTO) ? true : false);
		if($is_photo) {
			$object = json_decode($r[0]['obj'],true);
			$photo_bb = $object['body'];
		}
	
		if (strpos($r[0]['body'], "[/share]") !== false) {
			$pos = strpos($r[0]['body'], "[share");
			$o = substr($r[0]['body'], $pos);
		} else {
			$o = "[share author='".urlencode($r[0]['author']['xchan_name']).
				"' profile='".$r[0]['author']['xchan_url'] .
				"' avatar='".$r[0]['author']['xchan_photo_s'].
				"' link='".$r[0]['plink'].
				"' posted='".$r[0]['created'].
				"' message_id='".$r[0]['mid']."']";
			if($r[0]['title'])
				$o .= '[b]'.$r[0]['title'].'[/b]'."\r\n";
			$o .= (($is_photo) ? $photo_bb . "\r\n" . $r[0]['body'] : $r[0]['body']);
			$o .= "[/share]";
		}
	
		if(local_channel()) {
			echo $o;
			killme();
		}
	
		$observer = \App::get_observer();
		$parsed = $observer['xchan_url'];
		if($parsed) {
			$post_url = $parsed['scheme'] . '://' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : '')
				. '/rpost';
	
			/**
			 * @FIXME we were probably called from JS so we don't know the return page.
			 * In fact we won't be able to load the remote page.
			 * we might need an iframe
			 */
	
			$x = z_post_url($post_url, array('f' => '', 'body' => $o ));
			killme();
		}
	}
	
}