Exemplo n.º 1
0
 function item_photo_menu($item)
 {
     $a = get_app();
     $ssl_state = false;
     if (local_user()) {
         $ssl_state = true;
         if (!count($a->contacts)) {
             load_contact_links(local_user());
         }
     }
     $sub_link = "";
     $poke_link = "";
     $contact_url = "";
     $pm_url = "";
     $status_link = "";
     $photos_link = "";
     $posts_link = "";
     if (local_user() && local_user() == $item['uid'] && $item['parent'] == $item['id'] && !$item['self']) {
         $sub_link = 'javascript:dosubthread(' . $item['id'] . '); return false;';
     }
     $sparkle = false;
     $profile_link = best_link_url($item, $sparkle, $ssl_state);
     if ($profile_link === 'mailbox') {
         $profile_link = '';
     }
     if ($sparkle) {
         $cid = intval(basename($profile_link));
         $status_link = $profile_link . "?url=status";
         $photos_link = $profile_link . "?url=photos";
         $profile_link = $profile_link . "?url=profile";
         $pm_url = $a->get_baseurl($ssl_state) . '/message/new/' . $cid;
         $zurl = '';
     } else {
         $profile_link = zrl($profile_link);
         if (local_user() && local_user() == $item['uid'] && link_compare($item['url'], $item['author-link'])) {
             $cid = $item['contact-id'];
         } else {
             $cid = 0;
         }
     }
     if ($cid && !$item['self']) {
         $poke_link = $a->get_baseurl($ssl_state) . '/poke/?f=&c=' . $cid;
         $contact_url = $a->get_baseurl($ssl_state) . '/contacts/' . $cid;
         $posts_link = $a->get_baseurl($ssl_state) . '/network/0?nets=all&cid=' . $cid;
         $clean_url = normalise_link($item['author-link']);
         if (local_user() && local_user() == $item['uid']) {
             if (isset($a->contacts) && x($a->contacts, $clean_url)) {
                 if ($a->contacts[$clean_url]['network'] === NETWORK_DIASPORA) {
                     $pm_url = $a->get_baseurl($ssl_state) . '/message/new/' . $cid;
                 }
             }
         }
     }
     $menu = array(t("Follow Thread") => $sub_link, t("View Status") => $status_link, t("View Profile") => $profile_link, t("View Photos") => $photos_link, t("Network Posts") => $posts_link, t("Edit Contact") => $contact_url, t("Send PM") => $pm_url, t("Poke") => $poke_link);
     $args = array('item' => $item, 'menu' => $menu);
     call_hooks('item_photo_menu', $args);
     $menu = $args['menu'];
     $o = "";
     foreach ($menu as $k => $v) {
         if (strpos($v, 'javascript:') === 0) {
             $v = substr($v, 11);
             $o .= "<li><a href=\"#\" onclick=\"{$v}\">{$k}</a></li>\n";
         } elseif ($v != "") {
             $o .= "<li><a href=\"{$v}\">{$k}</a></li>\n";
         }
     }
     return $o;
 }
Exemplo n.º 2
0
/**
 * @brief "Render" a conversation or list of items for HTML display.
 *
 * There are two major forms of display:
 *  - Sequential or unthreaded ("New Item View" or search results)
 *  - conversation view
 *
 * The $mode parameter decides between the various renderings and also
 * figures out how to determine page owner and other contextual items
 * that are based on unique features of the calling module.
 *
 * @param App &$a
 * @param array $items
 * @param string $mode
 * @param boolean $update
 * @param string $page_mode default traditional
 * @param string $prepared_item
 * @return string
 */
function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $prepared_item = '')
{
    $content_html = '';
    $o = '';
    require_once 'bbcode.php';
    $ssl_state = local_channel() ? true : false;
    if (local_channel()) {
        load_pconfig(local_channel(), '');
    }
    $arr_blocked = null;
    if (local_channel()) {
        $str_blocked = get_pconfig(local_channel(), 'system', 'blocked');
    }
    if (!local_channel() && $mode == 'network') {
        $sys = get_sys_channel();
        $id = $sys['channel_id'];
        $str_blocked = get_pconfig($id, 'system', 'blocked');
    }
    if ($str_blocked) {
        $arr_blocked = explode(',', $str_blocked);
        for ($x = 0; $x < count($arr_blocked); $x++) {
            $arr_blocked[$x] = trim($arr_blocked[$x]);
        }
    }
    $profile_owner = 0;
    $page_writeable = false;
    $live_update_div = '';
    $preview = $page_mode === 'preview' ? true : false;
    $previewing = $preview ? ' preview ' : '';
    if ($mode === 'network') {
        $profile_owner = local_channel();
        $page_writeable = true;
        if (!$update) {
            // The special div is needed for liveUpdate to kick in for this page.
            // We only launch liveUpdate if you aren't filtering in some incompatible
            // way and also you aren't writing a comment (discovered in javascript).
            $live_update_div = '<div id="live-network"></div>' . "\r\n" . "<script> var profile_uid = " . $_SESSION['uid'] . "; var netargs = '" . substr($a->cmd, 8) . '?f=' . (x($_GET, 'cid') ? '&cid=' . $_GET['cid'] : '') . (x($_GET, 'search') ? '&search=' . $_GET['search'] : '') . (x($_GET, 'star') ? '&star=' . $_GET['star'] : '') . (x($_GET, 'order') ? '&order=' . $_GET['order'] : '') . (x($_GET, 'bmark') ? '&bmark=' . $_GET['bmark'] : '') . (x($_GET, 'liked') ? '&liked=' . $_GET['liked'] : '') . (x($_GET, 'conv') ? '&conv=' . $_GET['conv'] : '') . (x($_GET, 'spam') ? '&spam=' . $_GET['spam'] : '') . (x($_GET, 'nets') ? '&nets=' . $_GET['nets'] : '') . (x($_GET, 'cmin') ? '&cmin=' . $_GET['cmin'] : '') . (x($_GET, 'cmax') ? '&cmax=' . $_GET['cmax'] : '') . (x($_GET, 'file') ? '&file=' . $_GET['file'] : '') . (x($_GET, 'uri') ? '&uri=' . $_GET['uri'] : '') . "'; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
        }
    } elseif ($mode === 'channel') {
        $profile_owner = $a->profile['profile_uid'];
        $page_writeable = $profile_owner == local_channel();
        if (!$update) {
            $tab = notags(trim($_GET['tab']));
            if ($tab === 'posts') {
                // This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
                // because browser prefetching might change it on us. We have to deliver it with the page.
                $live_update_div = '<div id="live-channel"></div>' . "\r\n" . "<script> var profile_uid = " . $a->profile['profile_uid'] . "; var netargs = '?f='; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
            }
        }
    } elseif ($mode === 'display') {
        $profile_owner = local_channel();
        $page_writeable = false;
        $live_update_div = '<div id="live-display"></div>' . "\r\n";
    } elseif ($mode === 'page') {
        $profile_owner = $a->profile['uid'];
        $page_writeable = $profile_owner == local_channel();
        $live_update_div = '<div id="live-page"></div>' . "\r\n";
    } elseif ($mode === 'search') {
        $live_update_div = '<div id="live-search"></div>' . "\r\n";
    } elseif ($mode === 'photos') {
        $profile_onwer = $a->profile['profile_uid'];
        $page_writeable = $profile_owner == local_channel();
        $live_update_div = '<div id="live-photos"></div>' . "\r\n";
        // for photos we've already formatted the top-level item (the photo)
        $content_html = $a->data['photo_html'];
    }
    $page_dropping = local_channel() && local_channel() == $profile_owner ? true : false;
    if (!feature_enabled($profile_owner, 'multi_delete')) {
        $page_dropping = false;
    }
    $channel = $a->get_channel();
    $observer = $a->get_observer();
    if ($update) {
        $return_url = $_SESSION['return_url'];
    } else {
        $return_url = $_SESSION['return_url'] = $a->query_string;
    }
    load_contact_links(local_channel());
    $cb = array('items' => $items, 'mode' => $mode, 'update' => $update, 'preview' => $preview);
    call_hooks('conversation_start', $cb);
    $items = $cb['items'];
    $conv_responses = array('like' => array('title' => t('Likes', 'title')), 'dislike' => array('title' => t('Dislikes', 'title')), 'agree' => array('title' => t('Agree', 'title')), 'disagree' => array('title' => t('Disagree', 'title')), 'abstain' => array('title' => t('Abstain', 'title')), 'attendyes' => array('title' => t('Attending', 'title')), 'attendno' => array('title' => t('Not attending', 'title')), 'attendmaybe' => array('title' => t('Might attend', 'title')));
    // array with html for each thread (parent+comments)
    $threads = array();
    $threadsid = -1;
    $page_template = get_markup_template("conversation.tpl");
    if ($items) {
        if ($mode === 'network-new' || $mode === 'search' || $mode === 'community') {
            // "New Item View" on network page or search page results
            // - just loop through the items and format them minimally for display
            //$tpl = get_markup_template('search_item.tpl');
            $tpl = 'search_item.tpl';
            foreach ($items as $item) {
                if ($arr_blocked) {
                    $blocked = false;
                    foreach ($arr_blocked as $b) {
                        if ($b && $item['author_xchan'] == $b) {
                            $blocked = true;
                            break;
                        }
                    }
                    if ($blocked) {
                        continue;
                    }
                }
                $threadsid++;
                $comment = '';
                $owner_url = '';
                $owner_photo = '';
                $owner_name = '';
                $sparkle = '';
                if ($mode === 'search' || $mode === 'community') {
                    if ((activity_match($item['verb'], ACTIVITY_LIKE) || activity_match($item['verb'], ACTIVITY_DISLIKE)) && $item['id'] != $item['parent']) {
                        continue;
                    }
                    $nickname = $item['nickname'];
                } else {
                    $nickname = $a->user['nickname'];
                }
                $profile_name = strlen($item['author-name']) ? $item['author-name'] : $item['name'];
                if ($item['author-link'] && !$item['author-name']) {
                    $profile_name = $item['author-link'];
                }
                $tags = array();
                $hashtags = array();
                $mentions = array();
                $sp = false;
                $profile_link = best_link_url($item, $sp);
                if ($sp) {
                    $sparkle = ' sparkle';
                } else {
                    $profile_link = zid($profile_link);
                }
                $normalised = normalise_link(strlen($item['author-link']) ? $item['author-link'] : $item['url']);
                $profile_name = $item['author']['xchan_name'];
                $profile_link = $item['author']['xchan_url'];
                $profile_avatar = $item['author']['xchan_photo_m'];
                $location = format_location($item);
                localize_item($item);
                if ($mode === 'network-new') {
                    $dropping = true;
                } else {
                    $dropping = false;
                }
                $drop = array('pagedropping' => $page_dropping, 'dropping' => $dropping, 'select' => t('Select'), 'delete' => t('Delete'));
                $star = false;
                $isstarred = "unstarred icon-star-empty";
                $lock = $item['item_private'] || strlen($item['allow_cid']) || strlen($item['allow_gid']) || strlen($item['deny_cid']) || strlen($item['deny_gid']) ? t('Private Message') : false;
                $likebuttons = false;
                $shareable = false;
                $verified = $item['item_flags'] & ITEM_VERIFIED ? t('Message signature validated') : '';
                $forged = $item['sig'] && !($item['item_flags'] & ITEM_VERIFIED) ? t('Message signature incorrect') : '';
                $unverified = '';
                $tags = array();
                $terms = get_terms_oftype($item['term'], array(TERM_HASHTAG, TERM_MENTION, TERM_UNKNOWN));
                if (count($terms)) {
                    foreach ($terms as $tag) {
                        $tags[] = format_term_for_display($tag);
                    }
                }
                $body = prepare_body($item, true);
                $tmp_item = array('template' => $tpl, 'toplevel' => 'toplevel_item', 'mode' => $mode, 'id' => $preview ? 'P0' : $item['item_id'], 'linktitle' => sprintf(t('View %s\'s profile @ %s'), $profile_name, $profile_url), 'profile_url' => $profile_link, 'item_photo_menu' => item_photo_menu($item), 'name' => $profile_name, 'sparkle' => $sparkle, 'lock' => $lock, 'thumb' => $profile_avatar, 'title' => $item['title'], 'body' => $body, 'tags' => $tags, 'hashtags' => $hashtags, 'mentions' => $mentions, 'verified' => $verified, 'unverified' => $unverified, 'forged' => $forged, 'txt_cats' => t('Categories:'), 'txt_folders' => t('Filed under:'), 'has_cats' => count($categories) ? 'true' : '', 'has_folders' => count($folders) ? 'true' : '', 'categories' => $categories, 'folders' => $folders, 'text' => strip_tags($body), 'ago' => relative_date($item['created']), 'app' => $item['app'], 'str_app' => sprintf(t(' from %s'), $item['app']), 'isotime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'c'), 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'), 'editedtime' => $item['edited'] != $item['created'] ? sprintf(t('last edited: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['edited'], 'r')) : '', 'expiretime' => $item['expires'] !== NULL_DATE ? sprintf(t('Expires: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['expires'], 'r')) : '', 'location' => $location, 'indent' => '', 'owner_name' => $owner_name, 'owner_url' => $owner_url, 'owner_photo' => $owner_photo, 'plink' => get_plink($item, false), 'edpost' => false, 'isstarred' => $isstarred, 'star' => $star, 'drop' => $drop, 'vote' => $likebuttons, 'like' => '', 'dislike' => '', 'comment' => '', 'conv' => $preview ? '' : array('href' => z_root() . '/display/' . $item['mid'], 'title' => t('View in context')), 'previewing' => $previewing, 'wait' => t('Please wait'), 'thread_level' => 1);
                $arr = array('item' => $item, 'output' => $tmp_item);
                call_hooks('display_item', $arr);
                //				$threads[$threadsid]['id'] = $item['item_id'];
                $threads[] = $arr['output'];
            }
        } else {
            // Normal View
            //			logger('conv: items: ' . print_r($items,true));
            require_once 'include/ConversationObject.php';
            require_once 'include/ItemObject.php';
            $conv = new Conversation($mode, $preview, $prepared_item);
            // In the display mode we don't have a profile owner.
            if ($mode === 'display' && $items) {
                $conv->set_profile_owner($items[0]['uid']);
            }
            // get all the topmost parents
            // this shouldn't be needed, as we should have only them in our array
            // But for now, this array respects the old style, just in case
            $threads = array();
            foreach ($items as $item) {
                // Check for any blocked authors
                if ($arr_blocked) {
                    $blocked = false;
                    foreach ($arr_blocked as $b) {
                        if ($b && $item['author_xchan'] == $b) {
                            $blocked = true;
                            break;
                        }
                    }
                    if ($blocked) {
                        continue;
                    }
                }
                // Check all the kids too
                if ($arr_blocked && $item['children']) {
                    for ($d = 0; $d < count($item['children']); $d++) {
                        foreach ($arr_blocked as $b) {
                            if ($b && $item['children'][$d]['author_xchan'] == $b) {
                                $item['children'][$d]['author_blocked'] = true;
                            }
                        }
                    }
                }
                builtin_activity_puller($item, $conv_responses);
                if (!visible_activity($item)) {
                    continue;
                }
                $item['pagedrop'] = $page_dropping;
                if ($item['id'] == $item['parent']) {
                    $item_object = new Item($item);
                    $conv->add_thread($item_object);
                    if ($page_mode === 'list') {
                        $item_object->set_template('conv_list.tpl');
                        $item_object->set_display_mode('list');
                    }
                }
            }
            $threads = $conv->get_template_data($conv_responses);
            if (!$threads) {
                logger('[ERROR] conversation : Failed to get template data.', LOGGER_DEBUG);
                $threads = array();
            }
        }
    }
    if ($page_mode === 'traditional' || $page_mode === 'preview') {
        $page_template = get_markup_template("threaded_conversation.tpl");
    } elseif ($update) {
        $page_template = get_markup_template("convobj.tpl");
    } else {
        $page_template = get_markup_template("conv_frame.tpl");
        $threads = null;
    }
    //	if($page_mode === 'preview')
    //		logger('preview: ' . print_r($threads,true));
    //  Do not un-comment if smarty3 is in use
    //	logger('page_template: ' . $page_template);
    //	logger('nouveau: ' . print_r($threads,true));
    $o .= replace_macros($page_template, array('$baseurl' => $a->get_baseurl($ssl_state), '$photo_item' => $content_html, '$live_update' => $live_update_div, '$remove' => t('remove'), '$mode' => $mode, '$user' => $a->user, '$threads' => $threads, '$wait' => t('Loading...'), '$dropping' => $page_dropping ? t('Delete Selected Items') : False));
    return $o;
}
Exemplo n.º 3
0
 function item_photo_menu($item)
 {
     $a = get_app();
     if (local_user() && !count($a->contacts)) {
         load_contact_links(local_user());
     }
     $contact_url = "";
     $pm_url = "";
     $status_link = "";
     $photos_link = "";
     $posts_link = "";
     $sparkle = false;
     $profile_link = best_link_url($item, $sparkle);
     if ($profile_link === 'mailbox') {
         $profile_link = '';
     }
     if ($sparkle) {
         $cid = intval(basename($profile_link));
         $status_link = $profile_link . "?url=status";
         $photos_link = $profile_link . "?url=photos";
         $profile_link = $profile_link . "?url=profile";
         $pm_url = $a->get_baseurl() . '/message/new/' . $cid;
     } else {
         if (local_user() && local_user() == $item['uid'] && link_compare($item['url'], $item['author-link'])) {
             $cid = $item['contact-id'];
         } else {
             $cid = 0;
         }
     }
     if ($cid && !$item['self']) {
         $contact_url = $a->get_baseurl() . '/contacts/' . $cid;
         $posts_link = $a->get_baseurl() . '/network/?cid=' . $cid;
     }
     $menu = array(t("View status") => $status_link, t("View profile") => $profile_link, t("View photos") => $photos_link, t("View recent") => $posts_link, t("Edit contact") => $contact_url, t("Send PM") => $pm_url);
     $args = array($item, &$menu);
     call_hooks('item_photo_menu', $args);
     $o = "";
     foreach ($menu as $k => $v) {
         if ($v != "") {
             $o .= "<li><a href='{$v}'>{$k}</a></li>\n";
         }
     }
     return $o;
 }
Exemplo n.º 4
0
 /**
  * Get data in a form usable by a conversation template
  *
  * Returns:
  *      _ The data requested on success
  *      _ false on failure
  */
 public function get_template_data($alike, $dlike, $thread_level = 1)
 {
     require_once "mod/proxy.php";
     $result = array();
     $a = $this->get_app();
     $item = $this->get_data();
     $edited = false;
     if (strcmp($item['created'], $item['edited']) != 0) {
         $edited = array('label' => t('This entry was edited'), 'date' => datetime_convert('UTC', date_default_timezone_get(), $item['edited'], 'r'), 'relative' => relative_date($item['edited']));
     }
     $commentww = '';
     $sparkle = '';
     $buttons = '';
     $dropping = false;
     $star = false;
     $ignore = false;
     $isstarred = "unstarred";
     $indent = '';
     $shiny = '';
     $osparkle = '';
     $total_children = $this->count_descendants();
     $conv = $this->get_conversation();
     $lock = $item['private'] == 1 || $item['uid'] == local_user() && (strlen($item['allow_cid']) || strlen($item['allow_gid']) || strlen($item['deny_cid']) || strlen($item['deny_gid'])) ? t('Private Message') : false;
     $shareable = $conv->get_profile_owner() == local_user() && $item['private'] != 1 ? true : false;
     if (local_user() && link_compare($a->contact['url'], $item['author-link'])) {
         $edpost = array($a->get_baseurl($ssl_state) . "/editpost/" . $item['id'], t("Edit"));
     } else {
         $edpost = false;
     }
     if ($this->get_data_value('uid') == local_user() || $this->is_visiting()) {
         $dropping = true;
     }
     $drop = array('dropping' => $dropping, 'pagedrop' => feature_enabled($conv->get_profile_owner(), 'multi_delete') ? $item['pagedrop'] : '', 'select' => t('Select'), 'delete' => t('Delete'));
     $filer = $conv->get_profile_owner() == local_user() ? t("save to folder") : false;
     $diff_author = link_compare($item['url'], $item['author-link']) ? false : true;
     $profile_name = strlen($item['author-name']) && $diff_author ? $item['author-name'] : $item['name'];
     if ($item['author-link'] && !$item['author-name']) {
         $profile_name = $item['author-link'];
     }
     $sp = false;
     $profile_link = best_link_url($item, $sp);
     if ($profile_link === 'mailbox') {
         $profile_link = '';
     }
     if ($sp) {
         $sparkle = ' sparkle';
     } else {
         $profile_link = zrl($profile_link);
     }
     $normalised = normalise_link(strlen($item['author-link']) ? $item['author-link'] : $item['url']);
     if ($normalised != 'mailbox' && x($a->contacts, $normalised)) {
         $profile_avatar = $a->contacts[$normalised]['thumb'];
     } else {
         $profile_avatar = strlen($item['author-avatar']) && $diff_author ? $item['author-avatar'] : $a->get_cached_avatar_image($this->get_data_value('thumb'));
     }
     $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
     call_hooks('render_location', $locate);
     $location = strlen($locate['html']) ? $locate['html'] : render_location_google($locate);
     $searchpath = $a->get_baseurl() . "/search?tag=";
     $tags = array();
     $hashtags = array();
     $mentions = array();
     /*foreach(explode(',',$item['tag']) as $tag){
     			$tag = trim($tag);
     			if ($tag!="") {
     				$t = bbcode($tag);
     				$tags[] = $t;
     				if($t[0] == '#')
     					$hashtags[] = $t;
     				elseif($t[0] == '@')
     					$mentions[] = $t;
     			}
     		}*/
     $like = x($alike, $item['uri']) ? format_like($alike[$item['uri']], $alike[$item['uri'] . '-l'], 'like', $item['uri']) : '';
     $dislike = x($dlike, $item['uri']) ? format_like($dlike[$item['uri']], $dlike[$item['uri'] . '-l'], 'dislike', $item['uri']) : '';
     /*
      * We should avoid doing this all the time, but it depends on the conversation mode
      * And the conv mode may change when we change the conv, or it changes its mode
      * Maybe we should establish a way to be notified about conversation changes
      */
     $this->check_wall_to_wall();
     if ($this->is_wall_to_wall() && $this->get_owner_url() == $this->get_redirect_url()) {
         $osparkle = ' sparkle';
     }
     if ($this->is_toplevel()) {
         if ($conv->get_profile_owner() == local_user()) {
             $isstarred = $item['starred'] ? "starred" : "unstarred";
             $star = array('do' => t("add star"), 'undo' => t("remove star"), 'toggle' => t("toggle star status"), 'classdo' => $item['starred'] ? "hidden" : "", 'classundo' => $item['starred'] ? "" : "hidden", 'starred' => t('starred'));
             $r = q("SELECT `ignored` FROM `thread` WHERE `uid` = %d AND `iid` = %d LIMIT 1", intval($item['uid']), intval($item['id']));
             if (count($r)) {
                 $ignore = array('do' => t("ignore thread"), 'undo' => t("unignore thread"), 'toggle' => t("toggle ignore status"), 'classdo' => $r[0]['ignored'] ? "hidden" : "", 'classundo' => $r[0]['ignored'] ? "" : "hidden", 'ignored' => t('ignored'));
             }
             $tagger = '';
             if (feature_enabled($conv->get_profile_owner(), 'commtag')) {
                 $tagger = array('add' => t("add tag"), 'class' => "");
             }
         }
     } else {
         $indent = 'comment';
     }
     if ($conv->is_writable()) {
         $buttons = array('like' => array(t("I like this (toggle)"), t("like")), 'dislike' => feature_enabled($conv->get_profile_owner(), 'dislike') ? array(t("I don't like this (toggle)"), t("dislike")) : '');
         if ($shareable) {
             $buttons['share'] = array(t('Share this'), t('share'));
         }
     }
     if (strcmp(datetime_convert('UTC', 'UTC', $item['created']), datetime_convert('UTC', 'UTC', 'now - 12 hours')) > 0) {
         $shiny = 'shiny';
     }
     localize_item($item);
     if ($item["postopts"] and !get_config("system", "suppress_language")) {
         //$langdata = explode(";", $item["postopts"]);
         //$langstr = substr($langdata[0], 5)." (".round($langdata[1]*100, 1)."%)";
         $langstr = "";
         if (substr($item["postopts"], 0, 5) == "lang=") {
             $postopts = substr($item["postopts"], 5);
             $languages = explode(":", $postopts);
             if (sizeof($languages) == 1) {
                 $languages = array();
                 $languages[] = $postopts;
             }
             foreach ($languages as $language) {
                 $langdata = explode(";", $language);
                 if ($langstr != "") {
                     $langstr .= ", ";
                 }
                 //$langstr .= $langdata[0]." (".round($langdata[1]*100, 1)."%)";
                 $langstr .= round($langdata[1] * 100, 1) . "% " . $langdata[0];
             }
         }
     }
     $body = prepare_body($item, true);
     list($categories, $folders) = get_cats_and_terms($item);
     if ($a->theme['template_engine'] === 'internal') {
         $body_e = template_escape($body);
         $text_e = strip_tags(template_escape($body));
         $name_e = template_escape($profile_name);
         $title_e = template_escape($item['title']);
         $location_e = template_escape($location);
         $owner_name_e = template_escape($this->get_owner_name());
     } else {
         $body_e = $body;
         $text_e = strip_tags($body);
         $name_e = $profile_name;
         $title_e = $item['title'];
         $location_e = $location;
         $owner_name_e = $this->get_owner_name();
     }
     // Disable features that aren't available in several networks
     if ($item["item_network"] != "dfrn" and isset($buttons["dislike"])) {
         unset($buttons["dislike"]);
         $tagger = '';
     }
     if ($item["item_network"] == "feed" and isset($buttons["like"])) {
         unset($buttons["like"]);
     }
     if ($item["item_network"] == "mail" and isset($buttons["like"])) {
         unset($buttons["like"]);
     }
     if ($item["item_network"] == "dspr" and $indent == 'comment' and isset($buttons["like"])) {
         unset($buttons["like"]);
     }
     // Facebook can like comments - but it isn't programmed in the connector yet.
     if ($item["item_network"] == "face" and $indent == 'comment' and isset($buttons["like"])) {
         unset($buttons["like"]);
     }
     $tmp_item = array('template' => $this->get_template(), 'type' => implode("", array_slice(explode("/", $item['verb']), -1)), 'tags' => $item['tags'], 'hashtags' => $item['hashtags'], 'mentions' => $item['mentions'], 'txt_cats' => t('Categories:'), 'txt_folders' => t('Filed under:'), 'has_cats' => count($categories) ? 'true' : '', 'has_folders' => count($folders) ? 'true' : '', 'categories' => $categories, 'folders' => $folders, 'body' => $body_e, 'text' => $text_e, 'id' => $this->get_id(), 'guid' => $item['guid'], 'linktitle' => sprintf(t('View %s\'s profile @ %s'), $profile_name, strlen($item['author-link']) ? $item['author-link'] : $item['url']), 'olinktitle' => sprintf(t('View %s\'s profile @ %s'), $this->get_owner_name(), strlen($item['owner-link']) ? $item['owner-link'] : $item['url']), 'to' => t('to'), 'via' => t('via'), 'wall' => t('Wall-to-Wall'), 'vwall' => t('via Wall-To-Wall:'), 'profile_url' => $profile_link, 'item_photo_menu' => item_photo_menu($item), 'name' => $name_e, 'thumb' => proxy_url($profile_avatar), 'osparkle' => $osparkle, 'sparkle' => $sparkle, 'title' => $title_e, 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'), 'ago' => $item['app'] ? sprintf(t('%s from %s'), relative_date($item['created']), $item['app']) : relative_date($item['created']), 'app' => $item['app'], 'created' => relative_date($item['created']), 'lock' => $lock, 'location' => $location_e, 'indent' => $indent, 'shiny' => $shiny, 'owner_url' => $this->get_owner_url(), 'owner_photo' => proxy_url($this->get_owner_photo()), 'owner_name' => $owner_name_e, 'plink' => get_plink($item), 'edpost' => feature_enabled($conv->get_profile_owner(), 'edit_posts') ? $edpost : '', 'isstarred' => $isstarred, 'star' => feature_enabled($conv->get_profile_owner(), 'star_posts') ? $star : '', 'ignore' => feature_enabled($conv->get_profile_owner(), 'ignore_posts') ? $ignore : '', 'tagger' => $tagger, 'filer' => feature_enabled($conv->get_profile_owner(), 'filing') ? $filer : '', 'drop' => $drop, 'vote' => $buttons, 'like' => $like, 'dislike' => $dislike, 'switchcomment' => t('Comment'), 'comment' => $this->get_comment_box($indent), 'previewing' => $conv->is_preview() ? ' preview ' : '', 'wait' => t('Please wait'), 'thread_level' => $thread_level, 'postopts' => $langstr, 'edited' => $edited, 'network' => $item["item_network"], 'network_name' => network_to_name($item['item_network']));
     $arr = array('item' => $item, 'output' => $tmp_item);
     call_hooks('display_item', $arr);
     $result = $arr['output'];
     $result['children'] = array();
     $children = $this->get_children();
     $nb_children = count($children);
     if ($nb_children > 0) {
         foreach ($children as $child) {
             $result['children'][] = $child->get_template_data($alike, $dlike, $thread_level + 1);
         }
         // Collapse
         if ($nb_children > 2 || $thread_level > 1) {
             $result['children'][0]['comment_firstcollapsed'] = true;
             $result['children'][0]['num_comments'] = sprintf(tt('%d comment', '%d comments', $total_children), $total_children);
             $result['children'][0]['hidden_comments_num'] = $total_children;
             $result['children'][0]['hidden_comments_text'] = tt('comment', 'comments', $total_children);
             $result['children'][0]['hide_text'] = t('show more');
             if ($thread_level > 1) {
                 $result['children'][$nb_children - 1]['comment_lastcollapsed'] = true;
             } else {
                 $result['children'][$nb_children - 3]['comment_lastcollapsed'] = true;
             }
         }
     }
     if ($this->is_toplevel()) {
         $result['total_comments_num'] = "{$total_children}";
         $result['total_comments_text'] = tt('comment', 'comments', $total_children);
     }
     $result['private'] = $item['private'];
     $result['toplevel'] = $this->is_toplevel() ? 'toplevel_item' : '';
     if ($this->is_threaded()) {
         $result['flatten'] = false;
         $result['threaded'] = true;
     } else {
         $result['flatten'] = true;
         $result['threaded'] = false;
     }
     return $result;
 }
Exemplo n.º 5
0
function render_content(&$a, $items, $mode, $update, $preview = false)
{
    require_once 'include/bbcode.php';
    require_once 'mod/proxy.php';
    $ssl_state = local_user() ? true : false;
    $profile_owner = 0;
    $page_writeable = false;
    $previewing = $preview ? ' preview ' : '';
    if ($mode === 'network') {
        $profile_owner = local_user();
        $page_writeable = true;
    }
    if ($mode === 'profile') {
        $profile_owner = $a->profile['profile_uid'];
        $page_writeable = can_write_wall($a, $profile_owner);
    }
    if ($mode === 'notes') {
        $profile_owner = local_user();
        $page_writeable = true;
    }
    if ($mode === 'display') {
        $profile_owner = $a->profile['uid'];
        $page_writeable = can_write_wall($a, $profile_owner);
    }
    if ($mode === 'community') {
        $profile_owner = 0;
        $page_writeable = false;
    }
    if ($update) {
        $return_url = $_SESSION['return_url'];
    } else {
        $return_url = $_SESSION['return_url'] = $a->query_string;
    }
    load_contact_links(local_user());
    $cb = array('items' => $items, 'mode' => $mode, 'update' => $update, 'preview' => $preview);
    call_hooks('conversation_start', $cb);
    $items = $cb['items'];
    $cmnt_tpl = get_markup_template('comment_item.tpl');
    $tpl = 'wall_item.tpl';
    $wallwall = 'wallwall_item.tpl';
    $hide_comments_tpl = get_markup_template('hide_comments.tpl');
    $alike = array();
    $dlike = array();
    // array with html for each thread (parent+comments)
    $threads = array();
    $threadsid = -1;
    if ($items && count($items)) {
        if ($mode === 'network-new' || $mode === 'search' || $mode === 'community') {
            // "New Item View" on network page or search page results
            // - just loop through the items and format them minimally for display
            //$tpl = get_markup_template('search_item.tpl');
            $tpl = 'search_item.tpl';
            foreach ($items as $item) {
                $threadsid++;
                $comment = '';
                $owner_url = '';
                $owner_photo = '';
                $owner_name = '';
                $sparkle = '';
                if ($mode === 'search' || $mode === 'community') {
                    if ((activity_match($item['verb'], ACTIVITY_LIKE) || activity_match($item['verb'], ACTIVITY_DISLIKE)) && $item['id'] != $item['parent']) {
                        continue;
                    }
                    $nickname = $item['nickname'];
                } else {
                    $nickname = $a->user['nickname'];
                }
                // prevent private email from leaking.
                if ($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) {
                    continue;
                }
                $profile_name = strlen($item['author-name']) ? $item['author-name'] : $item['name'];
                if ($item['author-link'] && !$item['author-name']) {
                    $profile_name = $item['author-link'];
                }
                $sp = false;
                $profile_link = best_link_url($item, $sp);
                if ($profile_link === 'mailbox') {
                    $profile_link = '';
                }
                if ($sp) {
                    $sparkle = ' sparkle';
                } else {
                    $profile_link = zrl($profile_link);
                }
                $normalised = normalise_link(strlen($item['author-link']) ? $item['author-link'] : $item['url']);
                if ($normalised != 'mailbox' && x($a->contacts[$normalised])) {
                    $profile_avatar = $a->contacts[$normalised]['thumb'];
                } else {
                    $profile_avatar = strlen($item['author-avatar']) ? $a->get_cached_avatar_image($item['author-avatar']) : $item['thumb'];
                }
                $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
                call_hooks('render_location', $locate);
                $location = strlen($locate['html']) ? $locate['html'] : render_location_dummy($locate);
                localize_item($item);
                if ($mode === 'network-new') {
                    $dropping = true;
                } else {
                    $dropping = false;
                }
                $drop = array('dropping' => $dropping, 'select' => t('Select'), 'delete' => t('Delete'));
                $star = false;
                $isstarred = "unstarred";
                $lock = false;
                $likebuttons = false;
                $shareable = false;
                $body = prepare_body($item, true);
                if ($a->theme['template_engine'] === 'internal') {
                    $name_e = template_escape($profile_name);
                    $title_e = template_escape($item['title']);
                    $body_e = template_escape($body);
                    $text_e = strip_tags(template_escape($body));
                    $location_e = template_escape($location);
                    $owner_name_e = template_escape($owner_name);
                } else {
                    $name_e = $profile_name;
                    $title_e = $item['title'];
                    $body_e = $body;
                    $text_e = strip_tags($body);
                    $location_e = $location;
                    $owner_name_e = $owner_name;
                }
                //$tmp_item = replace_macros($tpl,array(
                $tmp_item = array('template' => $tpl, 'id' => $preview ? 'P0' : $item['item_id'], 'linktitle' => sprintf(t('View %s\'s profile @ %s'), $profile_name, strlen($item['author-link']) ? $item['author-link'] : $item['url']), 'profile_url' => $profile_link, 'item_photo_menu' => item_photo_menu($item), 'name' => $name_e, 'sparkle' => $sparkle, 'lock' => $lock, 'thumb' => proxy_url($profile_avatar), 'title' => $title_e, 'body' => $body_e, 'text' => $text_e, 'ago' => $item['app'] ? sprintf(t('%s from %s'), relative_date($item['created']), $item['app']) : relative_date($item['created']), 'location' => $location_e, 'indent' => '', 'owner_name' => $owner_name_e, 'owner_url' => $owner_url, 'owner_photo' => proxy_url($owner_photo), 'plink' => get_plink($item), 'edpost' => false, 'isstarred' => $isstarred, 'star' => $star, 'drop' => $drop, 'vote' => $likebuttons, 'like' => '', 'dislike' => '', 'comment' => '', 'conv' => $preview ? '' : array('href' => $a->get_baseurl($ssl_state) . '/display/' . $item['guid'], 'title' => t('View in context')), 'previewing' => $previewing, 'wait' => t('Please wait'));
                $arr = array('item' => $item, 'output' => $tmp_item);
                call_hooks('display_item', $arr);
                $threads[$threadsid]['id'] = $item['item_id'];
                $threads[$threadsid]['items'] = array($arr['output']);
            }
        } else {
            // Normal View
            // Figure out how many comments each parent has
            // (Comments all have gravity of 6)
            // Store the result in the $comments array
            $comments = array();
            foreach ($items as $item) {
                if (intval($item['gravity']) == 6 && $item['id'] != $item['parent']) {
                    if (!x($comments, $item['parent'])) {
                        $comments[$item['parent']] = 1;
                    } else {
                        $comments[$item['parent']] += 1;
                    }
                } elseif (!x($comments, $item['parent'])) {
                    $comments[$item['parent']] = 0;
                }
                // avoid notices later on
            }
            // map all the like/dislike activities for each parent item
            // Store these in the $alike and $dlike arrays
            foreach ($items as $item) {
                like_puller($a, $item, $alike, 'like');
                like_puller($a, $item, $dlike, 'dislike');
            }
            $comments_collapsed = false;
            $comments_seen = 0;
            $comment_lastcollapsed = false;
            $comment_firstcollapsed = false;
            $blowhard = 0;
            $blowhard_count = 0;
            foreach ($items as $item) {
                $comment = '';
                $template = $tpl;
                $commentww = '';
                $sparkle = '';
                $owner_url = $owner_photo = $owner_name = '';
                // We've already parsed out like/dislike for special treatment. We can ignore them now
                if ((activity_match($item['verb'], ACTIVITY_LIKE) || activity_match($item['verb'], ACTIVITY_DISLIKE)) && $item['id'] != $item['parent']) {
                    continue;
                }
                $toplevelpost = $item['id'] == $item['parent'] ? true : false;
                // Take care of author collapsing and comment collapsing
                // (author collapsing is currently disabled)
                // If a single author has more than 3 consecutive top-level posts, squash the remaining ones.
                // If there are more than two comments, squash all but the last 2.
                if ($toplevelpost) {
                    $item_writeable = $item['writable'] || $item['self'] ? true : false;
                    $comments_seen = 0;
                    $comments_collapsed = false;
                    $comment_lastcollapsed = false;
                    $comment_firstcollapsed = false;
                    $threadsid++;
                    $threads[$threadsid]['id'] = $item['item_id'];
                    $threads[$threadsid]['private'] = $item['private'];
                    $threads[$threadsid]['items'] = array();
                } else {
                    // prevent private email reply to public conversation from leaking.
                    if ($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) {
                        continue;
                    }
                    $comments_seen++;
                    $comment_lastcollapsed = false;
                    $comment_firstcollapsed = false;
                }
                $override_comment_box = $page_writeable && $item_writeable ? true : false;
                $show_comment_box = $page_writeable && $item_writeable && $comments_seen == $comments[$item['parent']] ? true : false;
                if ($comments[$item['parent']] > 2 && $comments_seen <= $comments[$item['parent']] - 2 && $item['gravity'] == 6) {
                    if (!$comments_collapsed) {
                        $threads[$threadsid]['num_comments'] = sprintf(tt('%d comment', '%d comments', $comments[$item['parent']]), $comments[$item['parent']]);
                        $threads[$threadsid]['hidden_comments_num'] = $comments[$item['parent']];
                        $threads[$threadsid]['hidden_comments_text'] = tt('comment', 'comments', $comments[$item['parent']]);
                        $threads[$threadsid]['hide_text'] = t('show more');
                        $comments_collapsed = true;
                        $comment_firstcollapsed = true;
                    }
                }
                if ($comments[$item['parent']] > 2 && $comments_seen == $comments[$item['parent']] - 1) {
                    $comment_lastcollapsed = true;
                }
                $redirect_url = $a->get_baseurl($ssl_state) . '/redir/' . $item['cid'];
                $lock = $item['private'] == 1 || $item['uid'] == local_user() && (strlen($item['allow_cid']) || strlen($item['allow_gid']) || strlen($item['deny_cid']) || strlen($item['deny_gid'])) ? t('Private Message') : false;
                // Top-level wall post not written by the wall owner (wall-to-wall)
                // First figure out who owns it.
                $osparkle = '';
                if ($toplevelpost && !$item['self'] && $mode !== 'profile') {
                    if ($item['wall']) {
                        // On the network page, I am the owner. On the display page it will be the profile owner.
                        // This will have been stored in $a->page_contact by our calling page.
                        // Put this person as the wall owner of the wall-to-wall notice.
                        $owner_url = zrl($a->page_contact['url']);
                        $owner_photo = $a->page_contact['thumb'];
                        $owner_name = $a->page_contact['name'];
                        $template = $wallwall;
                        $commentww = 'ww';
                    }
                    if (!$item['wall'] && $item['owner-link']) {
                        $owner_linkmatch = $item['owner-link'] && link_compare($item['owner-link'], $item['author-link']);
                        $alias_linkmatch = $item['alias'] && link_compare($item['alias'], $item['author-link']);
                        $owner_namematch = $item['owner-name'] && $item['owner-name'] == $item['author-name'];
                        if (!$owner_linkmatch && !$alias_linkmatch && !$owner_namematch) {
                            // The author url doesn't match the owner (typically the contact)
                            // and also doesn't match the contact alias.
                            // The name match is a hack to catch several weird cases where URLs are
                            // all over the park. It can be tricked, but this prevents you from
                            // seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn
                            // well that it's the same Bob Smith.
                            // But it could be somebody else with the same name. It just isn't highly likely.
                            $owner_url = $item['owner-link'];
                            $owner_photo = $item['owner-avatar'];
                            $owner_name = $item['owner-name'];
                            $template = $wallwall;
                            $commentww = 'ww';
                            // If it is our contact, use a friendly redirect link
                            if (link_compare($item['owner-link'], $item['url']) && $item['network'] === NETWORK_DFRN) {
                                $owner_url = $redirect_url;
                                $osparkle = ' sparkle';
                            } else {
                                $owner_url = zrl($owner_url);
                            }
                        }
                    }
                }
                $likebuttons = '';
                $shareable = $profile_owner == local_user() && $item['private'] != 1 ? true : false;
                if ($page_writeable) {
                    /*					if($toplevelpost) {  */
                    $likebuttons = array('like' => array(t("I like this (toggle)"), t("like")), 'dislike' => array(t("I don't like this (toggle)"), t("dislike")));
                    if ($shareable) {
                        $likebuttons['share'] = array(t('Share this'), t('share'));
                    }
                    /*					} */
                    $qc = $qcomment = null;
                    if (in_array('qcomment', $a->plugins)) {
                        $qc = local_user() ? get_pconfig(local_user(), 'qcomment', 'words') : null;
                        $qcomment = $qc ? explode("\n", $qc) : null;
                    }
                    if ($show_comment_box || $show_comment_box == false && $override_comment_box == false && $item['last-child']) {
                        $comment = replace_macros($cmnt_tpl, array('$return_path' => '', '$jsreload' => $mode === 'display' ? $_SESSION['return_url'] : '', '$type' => $mode === 'profile' ? 'wall-comment' : 'net-comment', '$id' => $item['item_id'], '$parent' => $item['parent'], '$qcomment' => $qcomment, '$profile_uid' => $profile_owner, '$mylink' => $a->contact['url'], '$mytitle' => t('This is you'), '$myphoto' => $a->contact['thumb'], '$comment' => t('Comment'), '$submit' => t('Submit'), '$edbold' => t('Bold'), '$editalic' => t('Italic'), '$eduline' => t('Underline'), '$edquote' => t('Quote'), '$edcode' => t('Code'), '$edimg' => t('Image'), '$edurl' => t('Link'), '$edvideo' => t('Video'), '$preview' => t('Preview'), '$sourceapp' => t($a->sourcename), '$ww' => $mode === 'network' ? $commentww : '', '$rand_num' => random_digits(12)));
                    }
                }
                if (local_user() && link_compare($a->contact['url'], $item['author-link'])) {
                    $edpost = array($a->get_baseurl($ssl_state) . "/editpost/" . $item['id'], t("Edit"));
                } else {
                    $edpost = false;
                }
                $drop = '';
                $dropping = false;
                if (intval($item['contact-id']) && $item['contact-id'] == remote_user() || $item['uid'] == local_user()) {
                    $dropping = true;
                }
                $drop = array('dropping' => $dropping, 'select' => t('Select'), 'delete' => t('Delete'));
                $star = false;
                $filer = false;
                $isstarred = "unstarred";
                if ($profile_owner == local_user()) {
                    if ($toplevelpost) {
                        $isstarred = $item['starred'] ? "starred" : "unstarred";
                        $star = array('do' => t("add star"), 'undo' => t("remove star"), 'toggle' => t("toggle star status"), 'classdo' => $item['starred'] ? "hidden" : "", 'classundo' => $item['starred'] ? "" : "hidden", 'starred' => t('starred'), 'tagger' => t("add tag"), 'classtagger' => "");
                    }
                    $filer = t("save to folder");
                }
                $photo = $item['photo'];
                $thumb = $item['thumb'];
                // Post was remotely authored.
                $diff_author = link_compare($item['url'], $item['author-link']) ? false : true;
                $profile_name = strlen($item['author-name']) && $diff_author ? $item['author-name'] : $item['name'];
                if ($item['author-link'] && !$item['author-name']) {
                    $profile_name = $item['author-link'];
                }
                $sp = false;
                $profile_link = best_link_url($item, $sp);
                if ($profile_link === 'mailbox') {
                    $profile_link = '';
                }
                if ($sp) {
                    $sparkle = ' sparkle';
                } else {
                    $profile_link = zrl($profile_link);
                }
                $normalised = normalise_link(strlen($item['author-link']) ? $item['author-link'] : $item['url']);
                if ($normalised != 'mailbox' && x($a->contacts, $normalised)) {
                    $profile_avatar = $a->contacts[$normalised]['thumb'];
                } else {
                    $profile_avatar = strlen($item['author-avatar']) && $diff_author ? $item['author-avatar'] : $a->get_cached_avatar_image($thumb);
                }
                $like = x($alike, $item['uri']) ? format_like($alike[$item['uri']], $alike[$item['uri'] . '-l'], 'like', $item['uri']) : '';
                $dislike = x($dlike, $item['uri']) ? format_like($dlike[$item['uri']], $dlike[$item['uri'] . '-l'], 'dislike', $item['uri']) : '';
                $locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
                call_hooks('render_location', $locate);
                $location = strlen($locate['html']) ? $locate['html'] : render_location_dummy($locate);
                $indent = $toplevelpost ? '' : ' comment';
                $shiny = "";
                if (strcmp(datetime_convert('UTC', 'UTC', $item['created']), datetime_convert('UTC', 'UTC', 'now - 12 hours')) > 0) {
                    $shiny = 'shiny';
                }
                //
                localize_item($item);
                $tags = array();
                foreach (explode(',', $item['tag']) as $tag) {
                    $tag = trim($tag);
                    if ($tag != "") {
                        $tags[] = bbcode($tag);
                    }
                }
                // Build the HTML
                $body = prepare_body($item, true);
                //$tmp_item = replace_macros($template,
                if ($a->theme['template_engine'] === 'internal') {
                    $body_e = template_escape($body);
                    $text_e = strip_tags(template_escape($body));
                    $name_e = template_escape($profile_name);
                    $title_e = template_escape($item['title']);
                    $location_e = template_escape($location);
                    $owner_name_e = template_escape($owner_name);
                } else {
                    $body_e = $body;
                    $text_e = strip_tags($body);
                    $name_e = $profile_name;
                    $title_e = $item['title'];
                    $location_e = $location;
                    $owner_name_e = $owner_name;
                }
                $tmp_item = array('comment_firstcollapsed' => $comment_firstcollapsed, 'comment_lastcollapsed' => $comment_lastcollapsed, 'template' => $template, 'type' => implode("", array_slice(explode("/", $item['verb']), -1)), 'tags' => $tags, 'body' => $body_e, 'text' => $text_e, 'id' => $item['item_id'], 'linktitle' => sprintf(t('View %s\'s profile @ %s'), $profile_name, strlen($item['author-link']) ? $item['author-link'] : $item['url']), 'olinktitle' => sprintf(t('View %s\'s profile @ %s'), $profile_name, strlen($item['owner-link']) ? $item['owner-link'] : $item['url']), 'to' => t('to'), 'wall' => t('Wall-to-Wall'), 'vwall' => t('via Wall-To-Wall:'), 'profile_url' => $profile_link, 'item_photo_menu' => item_photo_menu($item), 'name' => $name_e, 'thumb' => proxy_url($profile_avatar), 'osparkle' => $osparkle, 'sparkle' => $sparkle, 'title' => $title_e, 'ago' => $item['app'] ? sprintf(t('%s from %s'), relative_date($item['created']), $item['app']) : relative_date($item['created']), 'lock' => $lock, 'location' => $location_e, 'indent' => $indent, 'shiny' => $shiny, 'owner_url' => $owner_url, 'owner_photo' => proxy_url($owner_photo), 'owner_name' => $owner_name_e, 'plink' => get_plink($item), 'edpost' => $edpost, 'isstarred' => $isstarred, 'star' => $star, 'filer' => $filer, 'drop' => $drop, 'vote' => $likebuttons, 'like' => $like, 'dislike' => $dislike, 'comment' => $comment, 'previewing' => $previewing, 'wait' => t('Please wait'));
                $arr = array('item' => $item, 'output' => $tmp_item);
                call_hooks('display_item', $arr);
                $threads[$threadsid]['items'][] = $arr['output'];
            }
        }
    }
    return $threads;
}
Exemplo n.º 6
0
 function item_photo_menu($item)
 {
     $a = get_app();
     $ssl_state = false;
     if (local_user()) {
         $ssl_state = true;
         if (!count($a->contacts)) {
             load_contact_links(local_user());
         }
     }
     $sub_link = "";
     $poke_link = "";
     $contact_url = "";
     $pm_url = "";
     $status_link = "";
     $photos_link = "";
     $posts_link = "";
     if (local_user() && local_user() == $item['uid'] && $item['parent'] == $item['id'] && !$item['self']) {
         $sub_link = 'javascript:dosubthread(' . $item['id'] . '); return false;';
     }
     $sparkle = false;
     $profile_link = best_link_url($item, $sparkle, $ssl_state);
     if ($profile_link === 'mailbox') {
         $profile_link = '';
     }
     if ($sparkle) {
         $cid = intval(basename($profile_link));
         $status_link = $profile_link . "?url=status";
         $photos_link = $profile_link . "?url=photos";
         $profile_link = $profile_link . "?url=profile";
         $pm_url = $a->get_baseurl($ssl_state) . '/message/new/' . $cid;
         $zurl = '';
     } else {
         $profile_link = zrl($profile_link);
         if (local_user() && local_user() == $item['uid'] && link_compare($item['url'], $item['author-link'])) {
             $cid = $item['contact-id'];
         } else {
             $r = q("SELECT `id`, `network` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' ORDER BY `uid` DESC LIMIT 1", intval(local_user()), dbesc(normalise_link($item['author-link'])));
             if ($r) {
                 $cid = $r[0]["id"];
                 if ($r[0]["network"] == NETWORK_DIASPORA) {
                     $pm_url = $a->get_baseurl($ssl_state) . '/message/new/' . $cid;
                 }
             } else {
                 $cid = 0;
             }
         }
     }
     if ($cid && !$item['self']) {
         $poke_link = $a->get_baseurl($ssl_state) . '/poke/?f=&c=' . $cid;
         $contact_url = $a->get_baseurl($ssl_state) . '/contacts/' . $cid;
         $posts_link = $a->get_baseurl($ssl_state) . '/contacts/' . $cid . '/posts';
         $clean_url = normalise_link($item['author-link']);
         if (local_user() && local_user() == $item['uid']) {
             if (isset($a->contacts) && x($a->contacts, $clean_url)) {
                 if ($a->contacts[$clean_url]['network'] === NETWORK_DIASPORA) {
                     $pm_url = $a->get_baseurl($ssl_state) . '/message/new/' . $cid;
                 }
             }
         }
     }
     if (local_user()) {
         $menu = array(t("Follow Thread") => $sub_link, t("View Status") => $status_link, t("View Profile") => $profile_link, t("View Photos") => $photos_link, t("Network Posts") => $posts_link, t("Edit Contact") => $contact_url, t("Send PM") => $pm_url);
         if ($a->contacts[$clean_url]['network'] === NETWORK_DFRN) {
             $menu[t("Poke")] = $poke_link;
         }
         if (($cid == 0 or $a->contacts[$clean_url]['rel'] == CONTACT_IS_FOLLOWER) and in_array($item['network'], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA))) {
             $menu[t("Connect/Follow")] = $a->get_baseurl($ssl_state) . "/follow?url=" . urlencode($item['author-link']);
         }
     } else {
         $menu = array(t("View Profile") => $item['author-link']);
     }
     $args = array('item' => $item, 'menu' => $menu);
     call_hooks('item_photo_menu', $args);
     $menu = $args['menu'];
     $o = "";
     foreach ($menu as $k => $v) {
         if (strpos($v, 'javascript:') === 0) {
             $v = substr($v, 11);
             $o .= "<li role=\"menuitem\"><a onclick=\"{$v}\">{$k}</a></li>\n";
         } elseif ($v != "") {
             $o .= "<li role=\"menuitem\"><a href=\"{$v}\">{$k}</a></li>\n";
         }
     }
     return $o;
 }