Ejemplo n.º 1
0
function ical_wrapper($ev)
{
    if (!(is_array($ev) && count($ev))) {
        return '';
    }
    $o .= "BEGIN:VCALENDAR";
    $o .= "\r\nVERSION:2.0";
    $o .= "\r\nMETHOD:PUBLISH";
    $o .= "\r\nPRODID:-//" . get_config('system', 'sitename') . "//" . get_platform_name() . "//" . strtoupper(get_app()->language) . "\r\n";
    if (array_key_exists('start', $ev)) {
        $o .= format_event_ical($ev);
    } else {
        foreach ($ev as $e) {
            $o .= format_event_ical($e);
        }
    }
    $o .= "\r\nEND:VCALENDAR\r\n";
    return $o;
}
Ejemplo n.º 2
0
function get_site_info()
{
    global $db;
    global $a;
    $register_policy = array('REGISTER_CLOSED', 'REGISTER_APPROVE', 'REGISTER_OPEN');
    $directory_mode = array('DIRECTORY_MODE_NORMAL', 'DIRECTORY_MODE_SECONDARY', 'DIRECTORY_MODE_PRIMARY', 256 => 'DIRECTORY_MODE_STANDALONE');
    $sql_extra = '';
    $r = q("select * from channel left join account on account_id = channel_account_id where ( account_roles & 4096 )>0 and account_default_channel = channel_id");
    if ($r) {
        $admin = array();
        foreach ($r as $rr) {
            if ($rr['channel_pageflags'] & PAGE_HUBADMIN) {
                $admin[] = array('name' => $rr['channel_name'], 'address' => $rr['channel_address'] . '@' . get_app()->get_hostname(), 'channel' => z_root() . '/channel/' . $rr['channel_address']);
            }
        }
        if (!$admin) {
            foreach ($r as $rr) {
                $admin[] = array('name' => $rr['channel_name'], 'address' => $rr['channel_address'] . '@' . get_app()->get_hostname(), 'channel' => z_root() . '/channel/' . $rr['channel_address']);
            }
        }
    } else {
        $admin = false;
    }
    $def_service_class = get_config('system', 'default_service_class');
    if ($def_service_class) {
        $service_class = get_config('service_class', $def_service_class);
    } else {
        $service_class = false;
    }
    $visible_plugins = array();
    if (is_array($a->plugins) && count($a->plugins)) {
        $r = q("select * from addon where hidden = 0");
        if (count($r)) {
            foreach ($r as $rr) {
                $visible_plugins[] = $rr['name'];
            }
        }
    }
    sort($visible_plugins);
    if (@is_dir('.git') && function_exists('shell_exec')) {
        $commit = trim(@shell_exec('git log -1 --format="%h"'));
    }
    if (!isset($commit) || strlen($commit) > 16) {
        $commit = '';
    }
    $site_info = get_config('system', 'info');
    $site_name = get_config('system', 'sitename');
    if (!get_config('system', 'hidden_version_siteinfo')) {
        $version = get_project_version();
        $tag = get_std_version();
        if (@is_dir('.git') && function_exists('shell_exec')) {
            $commit = trim(@shell_exec('git log -1 --format="%h"'));
        }
        if (!isset($commit) || strlen($commit) > 16) {
            $commit = '';
        }
    } else {
        $version = $commit = '';
    }
    //Statistics
    $channels_total_stat = intval(get_config('system', 'channels_total_stat'));
    $channels_active_halfyear_stat = intval(get_config('system', 'channels_active_halfyear_stat'));
    $channels_active_monthly_stat = intval(get_config('system', 'channels_active_monthly_stat'));
    $local_posts_stat = intval(get_config('system', 'local_posts_stat'));
    $hide_in_statistics = intval(get_config('system', 'hide_in_statistics'));
    $site_expire = intval(get_config('system', 'default_expire_days'));
    load_config('feature_lock');
    $locked_features = array();
    if (is_array($a->config['feature_lock']) && count($a->config['feature_lock'])) {
        foreach ($a->config['feature_lock'] as $k => $v) {
            if ($k === 'config_loaded') {
                continue;
            }
            $locked_features[$k] = intval($v);
        }
    }
    $data = array('version' => $version, 'version_tag' => $tag, 'commit' => $commit, 'url' => z_root(), 'plugins' => $visible_plugins, 'register_policy' => $register_policy[get_config('system', 'register_policy')], 'invitation_only' => intval(get_config('system', 'invitation_only')), 'directory_mode' => $directory_mode[get_config('system', 'directory_mode')], 'language' => get_config('system', 'language'), 'rss_connections' => intval(get_config('system', 'feed_contacts')), 'expiration' => $site_expire, 'default_service_restrictions' => $service_class, 'locked_features' => $locked_features, 'admin' => $admin, 'site_name' => $site_name ? $site_name : '', 'platform' => get_platform_name(), 'dbdriver' => $db->getdriver(), 'lastpoll' => get_config('system', 'lastpoll'), 'info' => $site_info ? $site_info : '', 'channels_total' => $channels_total_stat, 'channels_active_halfyear' => $channels_active_halfyear_stat, 'channels_active_monthly' => $channels_active_monthly_stat, 'local_posts' => $local_posts_stat, 'hide_in_statistics' => $hide_in_statistics);
    return $data;
}
Ejemplo n.º 3
0
/**
 * @brief
 *
 * @param array $channel
 * @param string $observer_hash
 * @param array $params
 * @return string
 */
function get_feed_for($channel, $observer_hash, $params)
{
    if (!channel) {
        http_status_exit(401);
    }
    if ($params['pages']) {
        if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'view_pages')) {
            http_status_exit(403);
        }
    } else {
        if (!perm_is_allowed($channel['channel_id'], $observer_hash, 'view_stream')) {
            http_status_exit(403);
        }
    }
    $items = items_fetch(array('wall' => '1', 'datequery' => $params['begin'], 'datequery2' => $params['end'], 'start' => $params['start'], 'records' => $params['records'], 'direction' => $params['direction'], 'pages' => $params['pages'], 'order' => 'post', 'top' => $params['top'], 'cat' => $params['cat']), $channel, $observer_hash, CLIENT_MODE_NORMAL, get_app()->module);
    $feed_template = get_markup_template('atom_feed.tpl');
    $atom = '';
    $atom .= replace_macros($feed_template, array('$version' => xmlify(get_project_version()), '$red' => xmlify(get_platform_name()), '$feed_id' => xmlify($channel['xchan_url']), '$feed_title' => xmlify($channel['channel_name']), '$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', 'now', ATOM_TIME)), '$hub' => '', '$salmon' => '', '$name' => xmlify($channel['channel_name']), '$profile_page' => xmlify($channel['xchan_url']), '$mimephoto' => xmlify($channel['xchan_photo_mimetype']), '$photo' => xmlify($channel['xchan_photo_l']), '$thumb' => xmlify($channel['xchan_photo_m']), '$picdate' => '', '$uridate' => '', '$namdate' => '', '$birthday' => '', '$community' => ''));
    call_hooks('atom_feed', $atom);
    if ($items) {
        $type = 'html';
        foreach ($items as $item) {
            if ($item['item_private']) {
                continue;
            }
            /** @BUG $owner is undefined in this call */
            $atom .= atom_entry($item, $type, null, $owner, true);
        }
    }
    call_hooks('atom_feed_end', $atom);
    $atom .= '</feed>' . "\r\n";
    return $atom;
}
Ejemplo n.º 4
0
function help_content(&$a)
{
    nav_set_selected('help');
    if ($_REQUEST['search']) {
        $o .= '<div id="help-content" class="generic-content-wrapper">';
        $o .= '<h2>' . t('Documentation Search') . ' - ' . htmlspecialchars($_REQUEST['search']) . '</h2>';
        $r = search_doc_files($_REQUEST['search']);
        if ($r) {
            $o .= '<ul class="help-searchlist">';
            foreach ($r as $rr) {
                $dirname = dirname($rr['sid']);
                $fname = basename($rr['sid']);
                $fname = substr($fname, 0, strrpos($fname, '.'));
                $path = trim(substr($dirname, 4), '/');
                $o .= '<li><a href="help/' . ($path ? $path . '/' : '') . $fname . '" >' . ucwords(str_replace('_', ' ', notags($fname))) . '</a><br />' . str_replace('$Projectname', get_platform_name(), substr($rr['text'], 0, 200)) . '...<br /><br /></li>';
            }
            $o .= '</ul>';
            $o .= '</div>';
        }
        return $o;
    }
    global $lang;
    $doctype = 'markdown';
    $text = '';
    if (argc() > 1) {
        $path = '';
        for ($x = 1; $x < argc(); $x++) {
            if (strlen($path)) {
                $path .= '/';
            }
            $path .= argv($x);
        }
        $title = basename($path);
        $text = load_doc_file('doc/' . $path . '.md');
        $a->page['title'] = t('Help:') . ' ' . ucwords(str_replace('-', ' ', notags($title)));
        if (!$text) {
            $text = load_doc_file('doc/' . $path . '.bb');
            if ($text) {
                $doctype = 'bbcode';
            }
            $a->page['title'] = t('Help:') . ' ' . ucwords(str_replace('_', ' ', notags($title)));
        }
        if (!$text) {
            $text = load_doc_file('doc/' . $path . '.html');
            if ($text) {
                $doctype = 'html';
            }
            $a->page['title'] = t('Help:') . ' ' . ucwords(str_replace('-', ' ', notags($title)));
        }
    }
    if (!$text) {
        $text = load_doc_file('doc/Site.md');
        $a->page['title'] = t('Help');
    }
    if (!$text) {
        $doctype = 'bbcode';
        $text = load_doc_file('doc/main.bb');
        $a->page['title'] = t('Help');
    }
    if (!strlen($text)) {
        header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found'));
        $tpl = get_markup_template("404.tpl");
        return replace_macros($tpl, array('$message' => t('Page not found.')));
    }
    if ($doctype === 'html') {
        $content = $text;
    }
    if ($doctype === 'markdown') {
        require_once 'library/markdown.php';
        # escape #include tags
        $text = preg_replace('/#include/ism', '%%include', $text);
        $content = Markdown($text);
        $content = preg_replace('/%%include/ism', '#include', $content);
    }
    if ($doctype === 'bbcode') {
        require_once 'include/bbcode.php';
        $content = bbcode($text);
        // bbcode retargets external content to new windows. This content is internal.
        $content = str_replace(' target="_blank"', '', $content);
    }
    $content = preg_replace_callback("/#include (.*?)\\;/ism", 'preg_callback_help_include', $content);
    return replace_macros(get_markup_template("help.tpl"), array('$title' => t('$Projectname Documentation'), '$content' => translate_projectname($content)));
}
Ejemplo n.º 5
0
function zotinfo($arr)
{
    $ret = array('success' => false);
    $zhash = x($arr, 'guid_hash') ? $arr['guid_hash'] : '';
    $zguid = x($arr, 'guid') ? $arr['guid'] : '';
    $zguid_sig = x($arr, 'guid_sig') ? $arr['guid_sig'] : '';
    $zaddr = x($arr, 'address') ? $arr['address'] : '';
    $ztarget = x($arr, 'target') ? $arr['target'] : '';
    $zsig = x($arr, 'target_sig') ? $arr['target_sig'] : '';
    $zkey = x($arr, 'key') ? $arr['key'] : '';
    $mindate = x($arr, 'mindate') ? $arr['mindate'] : '';
    $feed = x($arr, 'feed') ? intval($arr['feed']) : 0;
    if ($ztarget) {
        if (!$zkey || !$zsig || !rsa_verify($ztarget, base64url_decode($zsig), $zkey)) {
            logger('zfinger: invalid target signature');
            $ret['message'] = t("invalid target signature");
            return $ret;
        }
    }
    $r = null;
    if (strlen($zhash)) {
        $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash \n\t\t\twhere channel_hash = '%s' limit 1", dbesc($zhash));
    } elseif (strlen($zguid) && strlen($zguid_sig)) {
        $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash \n\t\t\twhere channel_guid = '%s' and channel_guid_sig = '%s' limit 1", dbesc($zguid), dbesc($zguid_sig));
    } elseif (strlen($zaddr)) {
        if (strpos($zaddr, '[system]') === false) {
            /* normal address lookup */
            $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash\n\t\t\t\twhere ( channel_address = '%s' or xchan_addr = '%s' ) limit 1", dbesc($zaddr), dbesc($zaddr));
        } else {
            /**
             * The special address '[system]' will return a system channel if one has been defined,
             * Or the first valid channel we find if there are no system channels. 
             *
             * This is used by magic-auth if we have no prior communications with this site - and
             * returns an identity on this site which we can use to create a valid hub record so that
             * we can exchange signed messages. The precise identity is irrelevant. It's the hub
             * information that we really need at the other end - and this will return it.
             *
             */
            $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash\n\t\t\t\twhere channel_system = 1 order by channel_id limit 1");
            if (!$r) {
                $r = q("select channel.*, xchan.* from channel left join xchan on channel_hash = xchan_hash\n\t\t\t\t\twhere channel_removed = 0 order by channel_id limit 1");
            }
        }
    } else {
        $ret['message'] = 'Invalid request';
        return $ret;
    }
    if (!$r) {
        $ret['message'] = 'Item not found.';
        return $ret;
    }
    $e = $r[0];
    $id = $e['channel_id'];
    $sys_channel = intval($e['channel_system']) ? true : false;
    $special_channel = $e['channel_pageflags'] & PAGE_PREMIUM ? true : false;
    $adult_channel = $e['channel_pageflags'] & PAGE_ADULT ? true : false;
    $censored = $e['channel_pageflags'] & PAGE_CENSORED ? true : false;
    $searchable = $e['channel_pageflags'] & PAGE_HIDDEN ? false : true;
    $deleted = intval($e['xchan_deleted']) ? true : false;
    if ($deleted || $censored || $sys_channel) {
        $searchable = false;
    }
    $public_forum = false;
    $role = get_pconfig($e['channel_id'], 'system', 'permissions_role');
    if ($role === 'forum' || $role === 'repository') {
        $public_forum = true;
    } else {
        // check if it has characteristics of a public forum based on custom permissions.
        $t = q("select abook_my_perms from abook where abook_channel = %d and abook_self = 1 limit 1", intval($e['channel_id']));
        if ($t && ($t[0]['abook_my_perms'] & PERMS_W_TAGWALL && !($t[0]['abook_my_perms'] & PERMS_W_STREAM))) {
            $public_forum = true;
        }
    }
    //  This is for birthdays and keywords, but must check access permissions
    $p = q("select * from profile where uid = %d and is_default = 1", intval($e['channel_id']));
    $profile = array();
    if ($p) {
        if (!intval($p[0]['publish'])) {
            $searchable = false;
        }
        $profile['description'] = $p[0]['pdesc'];
        $profile['birthday'] = $p[0]['dob'];
        if ($profile['birthday'] != '0000-00-00' && ($bd = z_birthday($p[0]['dob'], $e['channel_timezone'])) !== '') {
            $profile['next_birthday'] = $bd;
        }
        if ($age = age($p[0]['dob'], $e['channel_timezone'], '')) {
            $profile['age'] = $age;
        }
        $profile['gender'] = $p[0]['gender'];
        $profile['marital'] = $p[0]['marital'];
        $profile['sexual'] = $p[0]['sexual'];
        $profile['locale'] = $p[0]['locality'];
        $profile['region'] = $p[0]['region'];
        $profile['postcode'] = $p[0]['postal_code'];
        $profile['country'] = $p[0]['country_name'];
        $profile['about'] = $p[0]['about'];
        $profile['homepage'] = $p[0]['homepage'];
        $profile['hometown'] = $p[0]['hometown'];
        if ($p[0]['keywords']) {
            $tags = array();
            $k = explode(' ', $p[0]['keywords']);
            if ($k) {
                foreach ($k as $kk) {
                    if (trim($kk, " \t\n\r\v,")) {
                        $tags[] = trim($kk, " \t\n\r\v,");
                    }
                }
            }
            if ($tags) {
                $profile['keywords'] = $tags;
            }
        }
    }
    $ret['success'] = true;
    // Communication details
    $ret['guid'] = $e['xchan_guid'];
    $ret['guid_sig'] = $e['xchan_guid_sig'];
    $ret['key'] = $e['xchan_pubkey'];
    $ret['name'] = $e['xchan_name'];
    $ret['name_updated'] = $e['xchan_name_date'];
    $ret['address'] = $e['xchan_addr'];
    $ret['photo_mimetype'] = $e['xchan_photo_mimetype'];
    $ret['photo'] = $e['xchan_photo_l'];
    $ret['photo_updated'] = $e['xchan_photo_date'];
    $ret['url'] = $e['xchan_url'];
    $ret['connections_url'] = $e['xchan_connurl'] ? $e['xchan_connurl'] : z_root() . '/poco/' . $e['channel_address'];
    $ret['target'] = $ztarget;
    $ret['target_sig'] = $zsig;
    $ret['searchable'] = $searchable;
    $ret['adult_content'] = $adult_channel;
    $ret['public_forum'] = $public_forum;
    if ($deleted) {
        $ret['deleted'] = $deleted;
    }
    if (intval($e['channel_removed'])) {
        $ret['deleted_locally'] = true;
    }
    // premium or other channel desiring some contact with potential followers before connecting.
    // This is a template - %s will be replaced with the follow_url we discover for the return channel.
    if ($special_channel) {
        $ret['connect_url'] = z_root() . '/connect/' . $e['channel_address'];
    }
    // This is a template for our follow url, %s will be replaced with a webbie
    $ret['follow_url'] = z_root() . '/follow?f=&url=%s';
    $ztarget_hash = $ztarget && $zsig ? make_xchan_hash($ztarget, $zsig) : '';
    $permissions = get_all_perms($e['channel_id'], $ztarget_hash, false);
    if ($ztarget_hash) {
        $permissions['connected'] = false;
        $b = q("select * from abook where abook_xchan = '%s' and abook_channel = %d limit 1", dbesc($ztarget_hash), intval($e['channel_id']));
        if ($b) {
            $permissions['connected'] = true;
        }
    }
    $ret['permissions'] = $ztarget && $zkey ? crypto_encapsulate(json_encode($permissions), $zkey) : $permissions;
    if ($permissions['view_profile']) {
        $ret['profile'] = $profile;
    }
    // array of (verified) hubs this channel uses
    $x = zot_encode_locations($e);
    if ($x) {
        $ret['locations'] = $x;
    }
    $ret['site'] = array();
    $ret['site']['url'] = z_root();
    $ret['site']['url_sig'] = base64url_encode(rsa_sign(z_root(), $e['channel_prvkey']));
    $ret['site']['zot_auth'] = z_root() . '/magic';
    $dirmode = get_config('system', 'directory_mode');
    if ($dirmode === false || $dirmode == DIRECTORY_MODE_NORMAL) {
        $ret['site']['directory_mode'] = 'normal';
    }
    if ($dirmode == DIRECTORY_MODE_PRIMARY) {
        $ret['site']['directory_mode'] = 'primary';
    } elseif ($dirmode == DIRECTORY_MODE_SECONDARY) {
        $ret['site']['directory_mode'] = 'secondary';
    } elseif ($dirmode == DIRECTORY_MODE_STANDALONE) {
        $ret['site']['directory_mode'] = 'standalone';
    }
    if ($dirmode != DIRECTORY_MODE_NORMAL) {
        $ret['site']['directory_url'] = z_root() . '/dirsearch';
    }
    // hide detailed site information if you're off the grid
    if ($dirmode != DIRECTORY_MODE_STANDALONE) {
        $register_policy = intval(get_config('system', 'register_policy'));
        if ($register_policy == REGISTER_CLOSED) {
            $ret['site']['register_policy'] = 'closed';
        }
        if ($register_policy == REGISTER_APPROVE) {
            $ret['site']['register_policy'] = 'approve';
        }
        if ($register_policy == REGISTER_OPEN) {
            $ret['site']['register_policy'] = 'open';
        }
        $access_policy = intval(get_config('system', 'access_policy'));
        if ($access_policy == ACCESS_PRIVATE) {
            $ret['site']['access_policy'] = 'private';
        }
        if ($access_policy == ACCESS_PAID) {
            $ret['site']['access_policy'] = 'paid';
        }
        if ($access_policy == ACCESS_FREE) {
            $ret['site']['access_policy'] = 'free';
        }
        if ($access_policy == ACCESS_TIERED) {
            $ret['site']['access_policy'] = 'tiered';
        }
        $ret['site']['accounts'] = account_total();
        require_once 'include/identity.php';
        $ret['site']['channels'] = channel_total();
        $ret['site']['version'] = get_platform_name() . ' ' . RED_VERSION . '[' . DB_UPDATE_VERSION . ']';
        $ret['site']['admin'] = get_config('system', 'admin_email');
        $a = get_app();
        $visible_plugins = array();
        if (is_array($a->plugins) && count($a->plugins)) {
            $r = q("select * from addon where hidden = 0");
            if ($r) {
                foreach ($r as $rr) {
                    $visible_plugins[] = $rr['name'];
                }
            }
        }
        $ret['site']['plugins'] = $visible_plugins;
        $ret['site']['sitehash'] = get_config('system', 'location_hash');
        $ret['site']['sitename'] = get_config('system', 'sitename');
        $ret['site']['sellpage'] = get_config('system', 'sellpage');
        $ret['site']['location'] = get_config('system', 'site_location');
        $ret['site']['realm'] = get_directory_realm();
        $ret['site']['project'] = get_platform_name();
    }
    check_zotinfo($e, $x, $ret);
    call_hooks('zot_finger', $ret);
    return $ret;
}
Ejemplo n.º 6
0
/**
 * @brief translate product name
 *  Merging strings from different project names is problematic so we'll do that with a string replacement
 */
function translate_projectname($s)
{
    return str_replace(array('$projectname', '$Projectname'), array(get_platform_name(), ucfirst(get_platform_name())), $s);
}
Ejemplo n.º 7
0
 function build_pagehead()
 {
     $user_scalable = local_channel() ? get_pconfig(local_channel(), 'system', 'user_scalable') : 1;
     if ($user_scalable === false) {
         $user_scalable = 1;
     }
     $interval = local_channel() ? get_pconfig(local_channel(), 'system', 'update_interval') : 80000;
     if ($interval < 10000) {
         $interval = 80000;
     }
     if (!x($this->page, 'title')) {
         $this->page['title'] = $this->config['system']['sitename'];
     }
     /* put the head template at the beginning of page['htmlhead']
      * since the code added by the modules frequently depends on it
      * being first
      */
     $tpl = get_markup_template('head.tpl');
     $this->page['htmlhead'] = replace_macros($tpl, array('$user_scalable' => $user_scalable, '$baseurl' => $this->get_baseurl(), '$local_channel' => local_channel(), '$generator' => get_platform_name() . (get_project_version() ? ' ' . get_project_version() : ''), '$update_interval' => $interval, '$icon' => head_get_icon(), '$head_css' => head_get_css(), '$head_js' => head_get_js(), '$js_strings' => js_strings(), '$zid' => get_my_address(), '$channel_id' => $this->profile['uid'])) . $this->page['htmlhead'];
     // always put main.js at the end
     $this->page['htmlhead'] .= head_get_main_js();
 }
Ejemplo n.º 8
0
function api_statusnet_config(&$a, $type)
{
    load_config('system');
    $name = get_config('system', 'sitename');
    $server = $a->get_hostname();
    $logo = $a->get_baseurl() . '/images/rm-64.png';
    $email = get_config('system', 'admin_email');
    $closed = get_config('system', 'register_policy') == REGISTER_CLOSED ? 'true' : 'false';
    $private = get_config('system', 'block_public') ? 'true' : 'false';
    $textlimit = (string) (get_config('system', 'max_import_size') ? get_config('system', 'max_import_size') : 200000);
    if (get_config('system', 'api_import_size')) {
        $texlimit = string(get_config('system', 'api_import_size'));
    }
    $ssl = get_config('system', 'have_ssl') ? 'true' : 'false';
    $sslserver = $ssl === 'true' ? str_replace('http:', 'https:', $a->get_baseurl()) : '';
    $config = array('site' => array('name' => $name, 'server' => $server, 'theme' => 'default', 'path' => '', 'logo' => $logo, 'fancy' => 'true', 'language' => 'en', 'email' => $email, 'broughtby' => '', 'broughtbyurl' => '', 'timezone' => 'UTC', 'closed' => $closed, 'inviteonly' => 'false', 'private' => $private, 'textlimit' => $textlimit, 'sslserver' => $sslserver, 'ssl' => $ssl, 'shorturllength' => '30', 'hubzilla' => array('PLATFORM_NAME' => get_platform_name(), 'RED_VERSION' => get_project_version(), 'ZOT_REVISION' => ZOT_REVISION, 'DB_UPDATE_VERSION' => get_update_version())));
    return api_apply_template('config', $type, array('$config' => $config));
}
Ejemplo n.º 9
0
function linkinfo_content(&$a)
{
    logger('linkinfo: ' . print_r($_REQUEST, true));
    $text = null;
    $str_tags = '';
    $br = "\n";
    if (x($_GET, 'binurl')) {
        $url = trim(hex2bin($_GET['binurl']));
    } else {
        $url = trim($_GET['url']);
    }
    if (substr($url, 0, 1) != '/' && substr($url, 0, 4) != 'http') {
        $url = 'http://' . $url;
    }
    if ($_GET['title']) {
        $title = strip_tags(trim($_GET['title']));
    }
    if ($_GET['description']) {
        $text = strip_tags(trim($_GET['description']));
    }
    if ($_GET['tags']) {
        $arr_tags = str_getcsv($_GET['tags']);
        if (count($arr_tags)) {
            array_walk($arr_tags, 'arr_add_hashes');
            $str_tags = $br . implode(' ', $arr_tags) . $br;
        }
    }
    logger('linkinfo: ' . $url);
    $result = z_fetch_url($url, false, 0, array('novalidate' => true, 'nobody' => true));
    if ($result['success']) {
        $hdrs = array();
        $h = explode("\n", $result['header']);
        foreach ($h as $l) {
            list($k, $v) = array_map("trim", explode(":", trim($l), 2));
            $hdrs[$k] = $v;
        }
        if (array_key_exists('Content-Type', $hdrs)) {
            $type = $hdrs['Content-Type'];
        }
        if ($type) {
            $zrl = is_matrix_url($url);
            if (stripos($type, 'image/') !== false) {
                if ($zrl) {
                    echo $br . '[zmg]' . $url . '[/zmg]' . $br;
                } else {
                    echo $br . '[img]' . $url . '[/img]' . $br;
                }
                killme();
            }
            if (stripos($type, 'video/') !== false) {
                if ($zrl) {
                    echo $br . '[zvideo]' . $url . '[/zvideo]' . $br;
                } else {
                    echo $br . '[video]' . $url . '[/video]' . $br;
                }
                killme();
            }
            if (stripos($type, 'audio/') !== false) {
                if ($zrl) {
                    echo $br . '[zaudio]' . $url . '[/zaudio]' . $br;
                } else {
                    echo $br . '[audio]' . $url . '[/audio]' . $br;
                }
                killme();
            }
        }
    }
    $template = $br . '#^[url=%s]%s[/url]%s' . $br;
    $arr = array('url' => $url, 'text' => '');
    call_hooks('parse_link', $arr);
    if (strlen($arr['text'])) {
        echo $arr['text'];
        killme();
    }
    $x = oembed_process($url);
    if ($x) {
        echo $x;
        killme();
    }
    if ($url && $title && $text) {
        $text = $br . '[quote]' . trim($text) . '[/quote]' . $br;
        $title = str_replace(array("\r", "\n"), array('', ''), $title);
        $result = sprintf($template, $url, $title ? $title : $url, $text) . $str_tags;
        logger('linkinfo (unparsed): returns: ' . $result);
        echo $result;
        killme();
    }
    $siteinfo = parseurl_getsiteinfo($url);
    // If this is a Red site, use zrl rather than url so they get zids sent to them by default
    if (x($siteinfo, 'generator') && strpos($siteinfo['generator'], get_platform_name() . ' ') === 0) {
        $template = str_replace('url', 'zrl', $template);
    }
    if ($siteinfo["title"] == "") {
        echo sprintf($template, $url, $url, '') . $str_tags;
        killme();
    } else {
        $text = $siteinfo["text"];
        $title = $siteinfo["title"];
    }
    $image = "";
    if (sizeof($siteinfo["images"]) > 0) {
        /* Execute below code only if image is present in siteinfo */
        $total_images = 0;
        $max_images = get_config('system', 'max_bookmark_images');
        if ($max_images === false) {
            $max_images = 2;
        } else {
            $max_images = intval($max_images);
        }
        foreach ($siteinfo["images"] as $imagedata) {
            if ($url) {
                $image .= sprintf('[url=%s]', $url);
            }
            $image .= '[img=' . $imagedata["width"] . 'x' . $imagedata["height"] . ']' . $imagedata["src"] . '[/img]';
            if ($url) {
                $image .= '[/url]';
            }
            $image .= "\n";
            $total_images++;
            if ($max_images && $max_images >= $total_images) {
                break;
            }
        }
    }
    if (strlen($text)) {
        $text = $br . '[quote]' . trim($text) . '[/quote]' . $br;
    }
    if ($image) {
        $text = $br . $br . $image . $text;
    }
    $title = str_replace(array("\r", "\n"), array('', ''), $title);
    $result = sprintf($template, $url, $title ? $title : $url, $text) . $str_tags;
    logger('linkinfo: returns: ' . $result, LOGGER_DEBUG);
    echo trim($result);
    killme();
}