コード例 #1
0
ファイル: page.php プロジェクト: Mauru/red
function page_content(&$a)
{
    $observer = $a->get_observer();
    $ob_hash = $observer ? $observer['xchan_hash'] : '';
    $perms = get_all_perms($a->profile['profile_uid'], $ob_hash);
    if (!$perms['view_pages']) {
        notice(t('Permission denied.') . EOL);
        return;
    }
    if (argc() < 3) {
        notice(t('Invalid item.') . EOL);
        return;
    }
    $channel_address = argv(1);
    $page_id = argv(2);
    $u = q("select channel_id from channel where channel_address = '%s' limit 1", dbesc($channel_address));
    if (!$u) {
        notice(t('Channel not found.') . EOL);
        return;
    }
    if ($_REQUEST['rev']) {
        $revision = " and revision = " . intval($_REQUEST['rev']) . " ";
    } else {
        $revision = " order by revision desc ";
    }
    require_once 'include/security.php';
    $sql_options = item_permissions_sql($u[0]['channel_id']);
    $r = q("select item.* from item left join item_id on item.id = item_id.iid\n\t\twhere item.uid = %d and sid = '%s' and service = 'WEBPAGE' and \n\t\titem_restrict = %d {$sql_options} {$revision} limit 1", intval($u[0]['channel_id']), dbesc($page_id), intval(ITEM_WEBPAGE));
    if (!$r) {
        // Check again with no permissions clause to see if it is a permissions issue
        $x = q("select item.* from item left join item_id on item.id = item_id.iid\n\t\twhere item.uid = %d and sid = '%s' and service = 'WEBPAGE' and \n\t\titem_restrict = %d {$revision} limit 1", intval($u[0]['channel_id']), dbesc($page_id), intval(ITEM_WEBPAGE));
        if ($x) {
            // Yes, it's there. You just aren't allowed to see it.
            notice(t('Permission denied.') . EOL);
        } else {
            notice(t('Page not found.') . EOL);
        }
        return;
    }
    if ($r[0]['layout_mid']) {
        $l = q("select body from item where mid = '%s' and uid = %d limit 1", dbesc($r[0]['layout_mid']), intval($u[0]['channel_id']));
        if ($l) {
            require_once 'include/comanche.php';
            comanche_parser(get_app(), $l[0]['body']);
        }
    }
    // logger('layout: ' . print_r($a->layout,true));
    // Use of widgets should be determined by Comanche, but we don't have it on system pages yet, so...
    if ($perms['write_pages']) {
        $chan = $a->channel['channel_id'];
        $who = $channel_address;
        $which = $r[0]['id'];
        $o .= writepages_widget($who, $which);
    }
    xchan_query($r);
    $r = fetch_post_tags($r, true);
    $o .= prepare_page($r[0]);
    return $o;
}
コード例 #2
0
ファイル: page.php プロジェクト: redmatrix/red
function page_init(&$a)
{
    // We need this to make sure the channel theme is always loaded.
    $which = argv(1);
    $profile = 0;
    profile_load($a, $which, $profile);
    if ($a->profile['profile_uid']) {
        head_set_icon($a->profile['thumb']);
    }
    // load the item here in the init function because we need to extract
    // the page layout and initialise the correct theme.
    $observer = $a->get_observer();
    $ob_hash = $observer ? $observer['xchan_hash'] : '';
    $perms = get_all_perms($a->profile['profile_uid'], $ob_hash);
    if (!$perms['view_pages']) {
        notice(t('Permission denied.') . EOL);
        return;
    }
    if (argc() < 3) {
        notice(t('Invalid item.') . EOL);
        return;
    }
    $channel_address = argv(1);
    $page_id = argv(2);
    $u = q("select channel_id from channel where channel_address = '%s' limit 1", dbesc($channel_address));
    if (!$u) {
        notice(t('Channel not found.') . EOL);
        return;
    }
    if ($_REQUEST['rev']) {
        $revision = " and revision = " . intval($_REQUEST['rev']) . " ";
    } else {
        $revision = " order by revision desc ";
    }
    require_once 'include/security.php';
    $sql_options = item_permissions_sql($u[0]['channel_id']);
    $r = q("select item.* from item left join item_id on item.id = item_id.iid\n\t\twhere item.uid = %d and sid = '%s' and service = 'WEBPAGE' and \n\t\titem_restrict = %d {$sql_options} {$revision} limit 1", intval($u[0]['channel_id']), dbesc($page_id), intval(ITEM_WEBPAGE));
    if (!$r) {
        // Check again with no permissions clause to see if it is a permissions issue
        $x = q("select item.* from item left join item_id on item.id = item_id.iid\n\t\twhere item.uid = %d and sid = '%s' and service = 'WEBPAGE' and \n\t\titem_restrict = %d {$revision} limit 1", intval($u[0]['channel_id']), dbesc($page_id), intval(ITEM_WEBPAGE));
        if ($x) {
            // Yes, it's there. You just aren't allowed to see it.
            notice(t('Permission denied.') . EOL);
        } else {
            notice(t('Page not found.') . EOL);
        }
        return;
    }
    if ($r[0]['layout_mid']) {
        $l = q("select body from item where mid = '%s' and uid = %d limit 1", dbesc($r[0]['layout_mid']), intval($u[0]['channel_id']));
        if ($l) {
            require_once 'include/comanche.php';
            comanche_parser(get_app(), $l[0]['body']);
            get_app()->pdl = $l[0]['body'];
        }
    }
    $a->data['webpage'] = $r;
}
コード例 #3
0
ファイル: boot.php プロジェクト: HaakonME/redmatrix
function exec_pdl(&$a)
{
    require_once 'include/comanche.php';
    if ($a->pdl) {
        comanche_parser($a, $a->pdl, 1);
    }
}
コード例 #4
0
ファイル: page.php プロジェクト: kenrestivo/hubzilla
function page_init(&$a)
{
    // We need this to make sure the channel theme is always loaded.
    $which = argv(1);
    $profile = 0;
    profile_load($a, $which, $profile);
    if ($a->profile['profile_uid']) {
        head_set_icon($a->profile['thumb']);
    }
    // load the item here in the init function because we need to extract
    // the page layout and initialise the correct theme.
    $observer = $a->get_observer();
    $ob_hash = $observer ? $observer['xchan_hash'] : '';
    // perm_is_allowed is denied unconditionally when 'site blocked to unauthenticated members'.
    // This bypasses that restriction for sys channel (public) content
    if (!perm_is_allowed($a->profile['profile_uid'], $ob_hash, 'view_pages') && !is_sys_channel($a->profile['profile_uid'])) {
        notice(t('Permission denied.') . EOL);
        return;
    }
    if (argc() < 3) {
        notice(t('Invalid item.') . EOL);
        return;
    }
    $channel_address = argv(1);
    // The page link title was stored in a urlencoded format
    // php or the browser may/will have decoded it, so re-encode it for our search
    $page_id = urlencode(argv(2));
    $u = q("select channel_id from channel where channel_address = '%s' limit 1", dbesc($channel_address));
    if (!$u) {
        notice(t('Channel not found.') . EOL);
        return;
    }
    if ($_REQUEST['rev']) {
        $revision = " and revision = " . intval($_REQUEST['rev']) . " ";
    } else {
        $revision = " order by revision desc ";
    }
    require_once 'include/security.php';
    $sql_options = item_permissions_sql($u[0]['channel_id']);
    $r = q("select item.* from item left join item_id on item.id = item_id.iid\n\t\twhere item.uid = %d and sid = '%s' and (( service = 'WEBPAGE' and item_type = %d ) \n\t\tOR ( service = 'PDL' AND item_type = %d )) {$sql_options} {$revision} limit 1", intval($u[0]['channel_id']), dbesc($page_id), intval(ITEM_TYPE_WEBPAGE), intval(ITEM_TYPE_PDL));
    if (!$r) {
        // Check again with no permissions clause to see if it is a permissions issue
        $x = q("select item.* from item left join item_id on item.id = item_id.iid\n\t\twhere item.uid = %d and sid = '%s' and service = 'WEBPAGE' and \n\t\titem_type = %d {$revision} limit 1", intval($u[0]['channel_id']), dbesc($page_id), intval(ITEM_TYPE_WEBPAGE));
        if ($x) {
            // Yes, it's there. You just aren't allowed to see it.
            notice(t('Permission denied.') . EOL);
        } else {
            notice(t('Page not found.') . EOL);
        }
        return;
    }
    if ($r[0]['item_type'] == ITEM_TYPE_PDL) {
        require_once 'include/comanche.php';
        comanche_parser(get_app(), $r[0]['body']);
        get_app()->pdl = $r[0]['body'];
    } elseif ($r[0]['layout_mid']) {
        $l = q("select body from item where mid = '%s' and uid = %d limit 1", dbesc($r[0]['layout_mid']), intval($u[0]['channel_id']));
        if ($l) {
            require_once 'include/comanche.php';
            comanche_parser(get_app(), $l[0]['body']);
            get_app()->pdl = $l[0]['body'];
        }
    }
    $a->data['webpage'] = $r;
}
コード例 #5
0
ファイル: boot.php プロジェクト: Mauru/red
function construct_page(&$a)
{
    require_once 'include/comanche.php';
    // in case a page has overloaded a module, see if we already have a layout defined
    // otherwise, if a pdl file exists for this module, use it
    if (!count($a->layout)) {
        $n = 'mod_' . $a->module . '.pdl';
        $u = comanche_get_channel_id();
        if ($u) {
            $s = get_pconfig($u, 'system', $n);
        }
        if (!$s && ($p = theme_include($n)) != '') {
            $s = @file_get_contents($p);
        }
        if ($s) {
            comanche_parser($a, $s);
        }
    }
    $comanche = count($a->layout) ? true : false;
    /**
     * Build the page - now that we have all the components
     */
    require_once theme_include('theme_init.php');
    $installing = false;
    if ($a->module == 'setup') {
        $installing = true;
    } else {
        nav($a);
    }
    if ($comanche) {
        if ($a->layout['nav']) {
            $a->page['nav'] = get_custom_nav($a->layout['nav']);
        }
    }
    if (($p = theme_include(current_theme() . '.js')) != '') {
        head_add_js($p);
    }
    if (($p = theme_include('mod_' . $a->module . '.php')) != '') {
        require_once $p;
    }
    require_once 'include/js_strings.php';
    if (x($a->page, 'template_style')) {
        head_add_css($a->page['template_style'] . '.css');
    } else {
        head_add_css((x($a->page, 'template') ? $a->page['template'] : 'default') . '.css');
    }
    head_add_css('mod_' . $a->module . '.css');
    head_add_css(current_theme_url($installing));
    head_add_js('mod_' . $a->module . '.js');
    $a->build_pagehead();
    $arr = $a->get_widgets();
    ksort($arr, SORT_NUMERIC);
    if (count($arr)) {
        foreach ($arr as $x) {
            if (!array_key_exists($x['location'], $a->page)) {
                $a->page[$x['location']] = '';
            }
            $a->page[$x['location']] .= $x['html'];
        }
    }
    // Let's say we have a comanche declaration '[region=nav][/region][region=content]$nav $content[/region]'.
    // The text 'region=' identifies a section of the layout by that name. So what we want to do here is leave
    // $a->page['nav'] empty and put the default content from $a->page['nav'] and $a->page['section']
    // into a new region called $a->data['content']. It is presumed that the chosen layout file for this comanche page
    // has a '<content>' element instead of a '<section>'.
    // This way the Comanche layout can include any existing content, alter the layout by adding stuff around it or changing the
    // layout completely with a new layout definition, or replace/remove existing content.
    if ($comanche) {
        $arr = array('module' => $a->module, 'layout' => $a->layout);
        call_hooks('construct_page', $arr);
        $a->layout = $arr['layout'];
        foreach ($a->layout as $k => $v) {
            if (strpos($k, 'region_') === 0 && strlen($v)) {
                if (strpos($v, '$region_') !== false) {
                    $v = preg_replace_callback('/\\$region_([a-zA-Z0-9]+)/ism', 'comanche_replace_region', $v);
                }
                // And a couple of convenience macros
                if (strpos($v, '$nav') !== false) {
                    $v = str_replace('$nav', $a->page['nav'], $v);
                }
                if (strpos($v, '$content') !== false) {
                    $v = str_replace('$content', $a->page['content'], $v);
                }
                $a->page[substr($k, 7)] = $v;
            }
        }
    }
    if ($a->is_mobile || $a->is_tablet) {
        if (isset($_SESSION['show_mobile']) && !$_SESSION['show_mobile']) {
            $link = $a->get_baseurl() . '/toggle_mobile?f=&address=' . curPageURL();
        } else {
            $link = $a->get_baseurl() . '/toggle_mobile?f=&off=1&address=' . curPageURL();
        }
        if (isset($_SESSION) && $_SESSION['mobile_theme'] != '' && $_SESSION['mobile_theme'] != '---' || isset($a->config['system']['mobile_theme']) && !isset($_SESSION['mobile_theme'])) {
            $a->page['footer'] .= replace_macros(get_markup_template("toggle_mobile_footer.tpl"), array('$toggle_link' => $link, '$toggle_text' => t('toggle mobile')));
        }
    }
    $page = $a->page;
    $profile = $a->profile;
    header("Content-type: text/html; charset=utf-8");
    require_once theme_include((x($a->page, 'template') ? $a->page['template'] : 'default') . '.php');
    return;
}
コード例 #6
0
ファイル: home.php プロジェクト: redmatrix/red
function home_content(&$a, $update = 0, $load = false)
{
    $o = '';
    if ($load) {
        $_SESSION['loadtime'] = datetime_convert();
    }
    if (x($_SESSION, 'theme')) {
        unset($_SESSION['theme']);
    }
    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 - &quot;The Network&quot;');
        return $o;
    }
    // Deprecated
    $channel_address = get_config("system", "site_channel");
    // 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'];
        }
    }
    if ($channel_address) {
        $page_id = 'home';
        $u = q("select channel_id from channel where channel_address = '%s' limit 1", dbesc($channel_address));
        $r = q("select item.* from item left join item_id on item.id = item_id.iid\n\t\t\twhere item.uid = %d and sid = '%s' and service = 'WEBPAGE' and \n\t\t\titem_restrict = %d limit 1", intval($u[0]['channel_id']), dbesc($page_id), intval(ITEM_WEBPAGE));
        if ($r) {
            xchan_query($r);
            $r = fetch_post_tags($r, true);
            if ($r[0]['layout_mid']) {
                $l = q("select body from item where mid = '%s' and uid = %d limit 1", dbesc($r[0]['layout_mid']), intval($u[0]['channel_id']));
                if ($l) {
                    require_once 'include/comanche.php';
                    comanche_parser($a, $l[0]['body']);
                    $a->pdl = $l[0]['body'];
                }
            }
            $a->profile = array('profile_uid' => $u[0]['channel_id']);
            $a->profile_uid = $u[0]['channel_id'];
            $o .= prepare_page($r[0]);
            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 {
        $sitename = get_config('system', 'sitename');
        if ($sitename) {
            $o .= '<h1>' . sprintf(t("Welcome to %s"), $sitename) . '</h1>';
        }
        if (intval(get_config('system', 'block_public')) && !local_channel() && !remote_channel()) {
            // 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 (get_config('system', 'disable_discover_tab')) {
                call_hooks('home_content', $o);
                return $o;
            }
            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_channel()) ? local_channel() : -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_channel() ? local_channel() : '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' => '', '$verb' => '', '$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';
            if (get_config('system', 'site_firehose')) {
                require_once 'include/security.php';
                $uids = " and item.uid in ( " . stream_perms_api_uids(PERMS_PUBLIC) . " ) and item_private = 0  and (item_flags & " . intval(ITEM_WALL) . " ) > 0 ";
            } else {
                $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_unseen = 1 " : '';
            if ($update && $_SESSION['loadtime']) {
                $simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC', 'UTC', $_SESSION['loadtime']) . "' )  OR item.changed > '" . datetime_convert('UTC', 'UTC', $_SESSION['loadtime']) . "' ) ";
            }
            if ($load) {
                $simple_update = '';
            }
            //logger('update: ' . $update . ' load: ' . $load);
            if ($update) {
                $ordering = "commented";
                if ($load) {
                    // Fetch a page full of parent items for this page
                    $r = q("SELECT distinct item.id AS item_id, {$ordering} FROM item\n\t\t\t\t\t\tleft join abook on item.author_xchan = abook.abook_xchan\n\t\t\t\t\t\tWHERE true {$uids} AND item.item_restrict = 0\n\t\t\t\t\t\tAND item.parent = item.id\n\t\t\t\t\t\tand ((abook.abook_flags & %d) = 0 or abook.abook_flags is null)\n\t\t\t\t\t\t{$sql_extra3} {$sql_extra} {$sql_nets}\n\t\t\t\t\t\tORDER BY {$ordering} DESC {$pager_sql} ", intval(ABOOK_FLAG_BLOCKED));
                } elseif ($update) {
                    $r = q("SELECT distinct item.id AS item_id, {$ordering} FROM item\n\t\t\t\t\t\tleft join abook on item.author_xchan = abook.abook_xchan\n\t\t\t\t\t\tWHERE true {$uids} AND item.item_restrict = 0\n\t\t\t\t\t\tAND item.parent = item.id {$simple_update}\n\t\t\t\t\t\tand ((abook.abook_flags & %d) = 0 or abook.abook_flags is null)\n\t\t\t\t\t\t{$sql_extra3} {$sql_extra} {$sql_nets}", intval(ABOOK_FLAG_BLOCKED));
                    $_SESSION['loadtime'] = datetime_convert();
                }
                // 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\n\t\t\t\t\t\tWHERE true {$uids} AND item.item_restrict = 0\n\t\t\t\t\t\tAND item.parent IN ( %s )\n\t\t\t\t\t\t{$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;
    }
    return $o;
}