902 lines
28 KiB
PHP
902 lines
28 KiB
PHP
<?php
|
|
|
|
// This is a purely experimental module and is not yet generally useful.
|
|
|
|
// The eventual goal is to provide a json backend to fetch content and fill the current page.
|
|
// The page will be filled in on the frontend using javascript.
|
|
// At the present time this page is based on "network", but the hope is to extend to serving
|
|
// any content (wall, community, search, etc.).
|
|
// All search parameters, etc. will be managed in javascript and sent as request params.
|
|
// Security will be managed on the backend.
|
|
// There is no "pagination query", but we will manage the "current page" on the client
|
|
// and provide a link to fetch the next page - until there are no pages left to fetch.
|
|
|
|
// With the exception of complex tag and text searches, this prototype is incredibly
|
|
// fast - e.g. one or two milliseconds to fetch parent items for the current content,
|
|
// and 10-20 milliseconds to fetch all the child items.
|
|
|
|
|
|
function content_content(&$a, $update = 0) {
|
|
|
|
require_once('include/conversation.php');
|
|
|
|
|
|
// Currently security is based on the logged in user
|
|
|
|
if(! local_user()) {
|
|
return;
|
|
}
|
|
|
|
$arr = array('query' => $a->query_string);
|
|
|
|
call_hooks('content_content_init', $arr);
|
|
|
|
|
|
$datequery = $datequery2 = '';
|
|
|
|
$group = 0;
|
|
|
|
$nouveau = false;
|
|
|
|
if($a->argc > 1) {
|
|
for($x = 1; $x < $a->argc; $x ++) {
|
|
if(is_a_date_arg($a->argv[$x])) {
|
|
if($datequery)
|
|
$datequery2 = escape_tags($a->argv[$x]);
|
|
else {
|
|
$datequery = escape_tags($a->argv[$x]);
|
|
$_GET['order'] = 'post';
|
|
}
|
|
}
|
|
elseif($a->argv[$x] === 'new') {
|
|
$nouveau = true;
|
|
}
|
|
elseif(intval($a->argv[$x])) {
|
|
$group = intval($a->argv[$x]);
|
|
$def_acl = array('allow_gid' => '<' . $group . '>');
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
$o = '';
|
|
|
|
|
|
|
|
$contact_id = $a->cid;
|
|
|
|
require_once('include/acl_selectors.php');
|
|
|
|
$cid = ((x($_GET,'cid')) ? intval($_GET['cid']) : 0);
|
|
$star = ((x($_GET,'star')) ? intval($_GET['star']) : 0);
|
|
$bmark = ((x($_GET,'bmark')) ? intval($_GET['bmark']) : 0);
|
|
$order = ((x($_GET,'order')) ? notags($_GET['order']) : 'comment');
|
|
$liked = ((x($_GET,'liked')) ? intval($_GET['liked']) : 0);
|
|
$conv = ((x($_GET,'conv')) ? intval($_GET['conv']) : 0);
|
|
$spam = ((x($_GET,'spam')) ? intval($_GET['spam']) : 0);
|
|
$nets = ((x($_GET,'nets')) ? $_GET['nets'] : '');
|
|
$cmin = ((x($_GET,'cmin')) ? intval($_GET['cmin']) : 0);
|
|
$cmax = ((x($_GET,'cmax')) ? intval($_GET['cmax']) : 99);
|
|
$file = ((x($_GET,'file')) ? $_GET['file'] : '');
|
|
|
|
|
|
|
|
if(x($_GET,'search') || x($_GET,'file'))
|
|
$nouveau = true;
|
|
if($cid)
|
|
$def_acl = array('allow_cid' => '<' . intval($cid) . '>');
|
|
|
|
if($nets) {
|
|
$r = q("select id from contact where uid = %d and network = '%s' and self = 0",
|
|
intval(local_user()),
|
|
dbesc($nets)
|
|
);
|
|
|
|
$str = '';
|
|
if(count($r))
|
|
foreach($r as $rr)
|
|
$str .= '<' . $rr['id'] . '>';
|
|
if(strlen($str))
|
|
$def_acl = array('allow_cid' => $str);
|
|
}
|
|
|
|
|
|
$sql_options = (($star) ? " and starred = 1 " : '');
|
|
$sql_options .= (($bmark) ? " and bookmark = 1 " : '');
|
|
|
|
$sql_nets = (($nets) ? sprintf(" and `contact`.`network` = '%s' ", dbesc($nets)) : '');
|
|
|
|
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $sql_options ) ";
|
|
|
|
if($group) {
|
|
$r = q("SELECT `name`, `id` FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
|
intval($group),
|
|
intval($_SESSION['uid'])
|
|
);
|
|
if(! count($r)) {
|
|
if($update)
|
|
killme();
|
|
notice( t('No such group') . EOL );
|
|
goaway($a->get_baseurl(true) . '/network');
|
|
// NOTREACHED
|
|
}
|
|
|
|
$contacts = expand_groups(array($group));
|
|
if((is_array($contacts)) && count($contacts)) {
|
|
$contact_str = implode(',',$contacts);
|
|
}
|
|
else {
|
|
$contact_str = ' 0 ';
|
|
info( t('Group is empty'));
|
|
}
|
|
|
|
$sql_extra = " AND `item`.`parent` IN ( SELECT DISTINCT(`parent`) FROM `item` WHERE 1 $sql_options AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` like '" . protect_sprintf('%<' . intval($group) . '>%') . "' ) and deleted = 0 ) ";
|
|
$o = replace_macros(get_markup_template("section_title.tpl"),array(
|
|
'$title' => sprintf( t('Group: %s'), $r[0][ |