aboutsummaryrefslogtreecommitdiffstats
path: root/Zotlabs/Module/Chanview.php
diff options
context:
space:
mode:
Diffstat (limited to 'Zotlabs/Module/Chanview.php')
-rw-r--r--Zotlabs/Module/Chanview.php110
1 files changed, 110 insertions, 0 deletions
diff --git a/Zotlabs/Module/Chanview.php b/Zotlabs/Module/Chanview.php
new file mode 100644
index 000000000..f70444816
--- /dev/null
+++ b/Zotlabs/Module/Chanview.php
@@ -0,0 +1,110 @@
+<?php
+namespace Zotlabs\Module;
+
+require_once('include/Contact.php');
+require_once('include/zot.php');
+
+
+class Chanview extends \Zotlabs\Web\Controller {
+
+ function get() {
+
+ $observer = \App::get_observer();
+ $xchan = null;
+
+ $r = null;
+
+ if($_REQUEST['hash']) {
+ $r = q("select * from xchan where xchan_hash = '%s' limit 1",
+ dbesc($_REQUEST['hash'])
+ );
+ }
+ if($_REQUEST['address']) {
+ $r = q("select * from xchan where xchan_addr = '%s' limit 1",
+ dbesc($_REQUEST['address'])
+ );
+ }
+ elseif(local_channel() && intval($_REQUEST['cid'])) {
+ $r = q("SELECT abook.*, xchan.*
+ FROM abook left join xchan on abook_xchan = xchan_hash
+ WHERE abook_channel = %d and abook_id = %d LIMIT 1",
+ intval(local_channel()),
+ intval($_REQUEST['cid'])
+ );
+ }
+ elseif($_REQUEST['url']) {
+
+ // if somebody re-installed they will have more than one xchan, use the most recent name date as this is
+ // the most useful consistently ascending table item we have.
+
+ $r = q("select * from xchan where xchan_url = '%s' order by xchan_name_date desc limit 1",
+ dbesc($_REQUEST['url'])
+ );
+ }
+ if($r) {
+ \App::$poi = $r[0];
+ }
+
+
+ // Here, let's see if we have an xchan. If we don't, how we proceed is determined by what
+ // info we do have. If it's a URL, we can offer to visit it directly. If it's a webbie or
+ // address, we can and should try to import it. If it's just a hash, we can't continue, but we
+ // probably wouldn't have a hash if we don't already have an xchan for this channel.
+
+ if(! \App::$poi) {
+ logger('mod_chanview: fallback');
+ // This is hackish - construct a zot address from the url
+ if($_REQUEST['url']) {
+ if(preg_match('/https?\:\/\/(.*?)(\/channel\/|\/profile\/)(.*?)$/ism',$_REQUEST['url'],$matches)) {
+ $_REQUEST['address'] = $matches[3] . '@' . $matches[1];
+ }
+ logger('mod_chanview: constructed address ' . print_r($matches,true));
+ }
+
+ if($_REQUEST['address']) {
+ $ret = zot_finger($_REQUEST['address'],null);
+ if($ret['success']) {
+ $j = json_decode($ret['body'],true);
+ if($j)
+ import_xchan($j);
+ $r = q("select * from xchan where xchan_addr = '%s' limit 1",
+ dbesc($_REQUEST['address'])
+ );
+ if($r)
+ \App::$poi = $r[0];
+ }
+
+ }
+ }
+
+ if(! \App::$poi) {
+ // We don't know who this is, and we can't figure it out from the URL
+ // On the plus side, there's a good chance we know somebody else at that
+ // hub so sending them there with a Zid will probably work anyway.
+ $url = ($_REQUEST['url']);
+ if($observer)
+ $url = zid($url);
+ }
+
+ if (\App::$poi) {
+ $url = \App::$poi['xchan_url'];
+ if($observer)
+ $url = zid($url);
+ }
+ // let somebody over-ride the iframed viewport presentation
+ // or let's just declare this a failed experiment.
+
+ // if((! local_channel()) || (get_pconfig(local_channel(),'system','chanview_full')))
+
+ goaway($url);
+
+ // $o = replace_macros(get_markup_template('chanview.tpl'),array(
+ // '$url' => $url,
+ // '$full' => t('toggle full screen mode')
+ // ));
+
+ // return $o;
+
+ }
+
+}