diff options
author | redmatrix <git@macgirvin.com> | 2016-01-31 15:55:27 -0800 |
---|---|---|
committer | redmatrix <git@macgirvin.com> | 2016-01-31 15:55:27 -0800 |
commit | a341c889b751055e90eba9b7a14da5b7cd0e8032 (patch) | |
tree | c42867ffbcac204c664522cb1559b7169c797cc1 /mod | |
parent | 1f87fef9684a29da91fcb41a5d1d3bd4fb9a4619 (diff) | |
download | volse-hubzilla-a341c889b751055e90eba9b7a14da5b7cd0e8032.tar.gz volse-hubzilla-a341c889b751055e90eba9b7a14da5b7cd0e8032.tar.bz2 volse-hubzilla-a341c889b751055e90eba9b7a14da5b7cd0e8032.zip |
add oembed provider for photos
Diffstat (limited to 'mod')
-rw-r--r-- | mod/oep.php | 93 | ||||
-rw-r--r-- | mod/photos.php | 2 |
2 files changed, 95 insertions, 0 deletions
diff --git a/mod/oep.php b/mod/oep.php new file mode 100644 index 000000000..d0f4bd193 --- /dev/null +++ b/mod/oep.php @@ -0,0 +1,93 @@ +<?php + +// oembed provider + + + +function oep_init(&$a) { + + + + $url = $_REQUEST['url']; + if(! $url) + http_status_exit(404, 'Not found'); + + $maxwidth = $_REQUEST['maxwidth']; + $maxheight = $_REQUEST['maxheight']; + $format = $_REQUEST['format']; + if($format && $format !== 'json') + http_status_exit(501, 'Not implemented'); + + if(fnmatch('*/photos/*/album/*',$url)) + $arr = oep_album_reply($_REQUEST); + elseif(fnmatch('*/photos/*',$url)) + $arr = oep_photo_reply($_REQUEST); + + + if($arr) { + header('Content-Type: application/json+oembed'); + echo json_encode($arr); + killme(); + } + + http_status_exit(404,'Not found'); + +} + + +function oep_album_reply() { + +} + +function oep_photo_reply($args) { + + $ret = array(); + $url = $args['url']; + $maxwidth = intval($args['maxwidth']); + $maxheight = intval($args['maxheight']); + + if(preg_match('|//(.*?)/(.*?)/(.*?)/image/|',$url,$matches)) { + $chn = $matches[3]; + $res = basename($url); + } + + if(! ($chn && $res)) + return; + $c = q("select * from channel where channel_address = '%s' limit 1", + dbesc($chn) + ); + + if(! $c) + return; + + $sql_extra = permissions_sql($c[0]['channel_id']); + + + $r = q("select height, width, scale, resource_id from photo where uid = %d and resource_id = '%s' $sql_extra order by scale asc", + intval($c[0]['channel_id']), + dbesc($res) + ); + + if($r) { + foreach($r as $rr) { + $foundres = false; + if($maxheight && $rr['height'] > $maxheight) + continue; + if($maxwidth && $rr['width'] > $maxwidth) + continue; + $foundres = true; + break; + } + + if($foundres) { + $ret['type'] = 'link'; + $ret['thumbnail_url'] = z_root() . '/photo/' . '/' . $rr['resource_id'] . '-' . $rr['scale']; + $ret['thumbnail_width'] = $rr['width']; + $ret['thumbnail_height'] = $rr['height']; + } + + + } + return $ret; + +}
\ No newline at end of file diff --git a/mod/photos.php b/mod/photos.php index f1b7aceed..d187e1d45 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -804,6 +804,8 @@ function photos_content(&$a) { if($datatype === 'image') { + $a->page['htmlhead'] .= "\r\n" . '<link rel="alternate" type="application/json+oembed" href="' . z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . $a->cmd) . '" title="oembed" />' . "\r\n"; + // fetch image, item containing image, then comments $ph = q("SELECT id,aid,uid,xchan,resource_id,created,edited,title,`description`,album,filename,`type`,height,width,`size`,scale,photo_usage,is_nsfw,allow_cid,allow_gid,deny_cid,deny_gid FROM `photo` WHERE `uid` = %d AND `resource_id` = '%s' |