aboutsummaryrefslogtreecommitdiffstats
path: root/mod/home.php
diff options
context:
space:
mode:
Diffstat (limited to 'mod/home.php')
-rw-r--r--mod/home.php209
1 files changed, 174 insertions, 35 deletions
diff --git a/mod/home.php b/mod/home.php
index bc352976d..b2538795f 100644
--- a/mod/home.php
+++ b/mod/home.php
@@ -9,9 +9,10 @@ function home_init(&$a) {
$ret = array();
call_hooks('home_init',$ret);
- $channel = $a->get_channel();
+ $splash = ((argc() > 1 && argv(1) === 'splash') ? true : false);
- if(local_user() && $channel && $channel['xchan_url']) {
+ $channel = $a->get_channel();
+ if(local_user() && $channel && $channel['xchan_url'] && ! $splash) {
$dest = $channel['channel_startpage'];
if(! $dest)
$dest = get_pconfig(local_user(),'system','startpage');
@@ -23,14 +24,14 @@ function home_init(&$a) {
goaway($dest);
}
- if(get_account_id()) {
+ if(get_account_id() && ! $splash) {
goaway(z_root() . '/new_channel');
}
}
-function home_content(&$a) {
+function home_content(&$a, $update = 0, $load = false) {
$o = '';
@@ -39,10 +40,31 @@ function home_content(&$a) {
if(x($_SESSION,'mobile_theme'))
unset($_SESSION['mobile_theme']);
+ $splash = ((argc() > 1 && argv(1) === 'splash') ? true : false);
+
+ if(get_config('system','projecthome')) {
+ $o .= file_get_contents('assets/home.html');
+ $a->page['template'] = 'full';
+ $a->page['title'] = t('Red Matrix - "The Network"');
+ return $o;
+ }
+
+
+ // Deprecated
$channel_address = get_config("system", "site_channel" );
- if ($channel_address){
+
+ // See if the sys channel set a homepage
+ if (! $channel_address) {
+ require_once('include/identity.php');
+ $u = get_sys_channel();
+ if ($u) {
+ $u = array($u);
+ // change to channel_id when below deprecated and skip the $u=...
+ $channel_address = $u[0]['channel_address'];
+ }
+ }
- // We can do better, but until we figure out auto-linkification, let's keep things simple
+ if($channel_address) {
$page_id = 'home';
@@ -50,11 +72,6 @@ function home_content(&$a) {
dbesc($channel_address)
);
- if(! $u) {
- notice( t('Channel not found.') . EOL);
- return;
- }
-
$r = q("select item.* from item left join item_id on item.id = item_id.iid
where item.uid = %d and sid = '%s' and service = 'WEBPAGE' and
item_restrict = %d limit 1",
@@ -63,39 +80,161 @@ function home_content(&$a) {
intval(ITEM_WEBPAGE)
);
- if(! $r) {
- notice( t('Item not found.') . EOL);
- return;
+ if($r) {
+ xchan_query($r);
+ $r = fetch_post_tags($r,true);
+ $a->profile = array('profile_uid' => $u[0]['channel_id']);
+ $a->profile_uid = $u[0]['channel_id'];
+ $o .= prepare_page($r[0]);
+ return $o;
}
-
- xchan_query($r);
- $r = fetch_post_tags($r,true);
- $a->profile = array('profile_uid' => $u[0]['channel_id']);
- $o .= prepare_page($r[0]);
- return $o;
}
- if(get_config('system','projecthome')) {
- $o .= file_get_contents('assets/home.html');
- $a->page['template'] = 'full';
- $a->page['title'] = t('Red Matrix - "The Network"');
- return $o;
- }
+ // Nope, we didn't find an item. Let's see if there's any html
if(file_exists('home.html')) {
$o .= file_get_contents('home.html');
}
else {
-
- // If there's no site channel or home contents configured, fallback to the old behaviour
-
$sitename = get_config('system','sitename');
if($sitename)
$o .= '<h1>' . sprintf( t("Welcome to %s") ,$sitename) . '</h1>';
- if (! $a->config['system']['no_login_on_homepage'])
- $o .= login(($a->config['system']['register_policy'] == REGISTER_CLOSED) ? 0 : 1);
+
+ if(intval(get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ // If there's nothing special happening, just spit out a login box
+
+ if (! $a->config['system']['no_login_on_homepage'])
+ $o .= login(($a->config['system']['register_policy'] == REGISTER_CLOSED) ? 0 : 1);
+ return $o;
+ }
+ else {
+
+ if(! $update) {
+
+ $maxheight = get_config('system','home_divmore_height');
+ if(! $maxheight)
+ $maxheight = 75;
+
+ $o .= '<div id="live-home"></div>' . "\r\n";
+ $o .= "<script> var profile_uid = " . ((intval(local_user())) ? local_user() : (-1))
+ . "; var profile_page = " . $a->pager['page']
+ . "; divmore_height = " . intval($maxheight) . "; </script>\r\n";
+
+ $a->page['htmlhead'] .= replace_macros(get_markup_template("build_query.tpl"),array(
+ '$baseurl' => z_root(),
+ '$pgtype' => 'home',
+ '$uid' => ((local_user()) ? local_user() : '0'),
+ '$gid' => '0',
+ '$cid' => '0',
+ '$cmin' => '0',
+ '$cmax' => '99',
+ '$star' => '0',
+ '$liked' => '0',
+ '$conv' => '0',
+ '$spam' => '0',
+ '$fh' => '1',
+ '$nouveau' => '0',
+ '$wall' => '0',
+ '$list' => '0',
+ '$page' => (($a->pager['page'] != 1) ? $a->pager['page'] : 1),
+ '$search' => '',
+ '$order' => 'comment',
+ '$file' => '',
+ '$cats' => '',
+ '$tags' => '',
+ '$dend' => '',
+ '$mid' => '',
+ '$dbegin' => ''
+ ));
+ }
+
+ if($update && ! $load) {
+ // only setup pagination on initial page view
+ $pager_sql = '';
+ }
+ else {
+ $a->set_pager_itemspage(20);
+ $pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval($a->pager['itemspage']), intval($a->pager['start']));
+ }
+
+ require_once('include/identity.php');
+ $sys = get_sys_channel();
+ $uids = " and item.uid = " . intval($sys['channel_id']) . " ";
+ $a->data['firehose'] = intval($sys['channel_id']);
+
+ $page_mode = 'list';
+
+ $simple_update = (($update) ? " and ( item.item_flags & " . intval(ITEM_UNSEEN) . " ) > 0 " : '');
+
+ if($update && $_SESSION['loadtime'])
+ $simple_update .= " and item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ";
+ if($load)
+ $simple_update = '';
+
+ //logger('update: ' . $update . ' load: ' . $load);
+
+ if($update) {
+
+ $ordering = "commented";
+
+ if($load) {
+
+ $_SESSION['loadtime'] = datetime_convert();
+
+ // Fetch a page full of parent items for this page
+
+ $r = q("SELECT distinct item.id AS item_id, $ordering FROM item
+ left join abook on item.author_xchan = abook.abook_xchan
+ WHERE true $uids AND item.item_restrict = 0
+ AND item.parent = item.id
+ and ((abook.abook_flags & %d) = 0 or abook.abook_flags is null)
+ $sql_extra3 $sql_extra $sql_nets
+ ORDER BY $ordering DESC $pager_sql ",
+ intval(ABOOK_FLAG_BLOCKED)
+ );
+
+ }
+
+ // Then fetch all the children of the parents that are on this page
+ $parents_str = '';
+ $update_unseen = '';
+
+ if($r) {
+
+ $parents_str = ids_to_querystr($r,'item_id');
+
+ $items = q("SELECT item.*, item.id AS item_id FROM item
+ WHERE true $uids AND item.item_restrict = 0
+ AND item.parent IN ( %s )
+ $sql_extra ",
+ dbesc($parents_str)
+ );
+
+ xchan_query($items,true,(-1));
+ $items = fetch_post_tags($items,true);
+ $items = conv_sort($items,$ordering);
+ }
+ else {
+ $items = array();
+ }
+
+ }
+
+ // fake it
+ $mode = ('network');
+
+ $o .= conversation($a,$items,$mode,$update,$page_mode);
+
+ if(($items) && (! $update))
+ $o .= alt_pager($a,count($items));
+
+ return $o;
+
+ }
+ call_hooks('home_content',$o);
+ return $o;
}
-
- call_hooks('home_content',$o);
- return $o;
-}
+
+ return $o;
+
+} \ No newline at end of file