X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fconversation.php;h=36ac57f17d5d938213723e03ba576d4ccf08d27b;hb=dbf51229d9014089eba0da41a55f23c507f7e2ea;hp=1bdde5e9ffe38b9216f3d57641f84adfc5bf9048;hpb=c44d068adf9e31f7931cc54a787692bcf60b70ea;p=friendica.git diff --git a/include/conversation.php b/include/conversation.php index 1bdde5e9ff..36ac57f17d 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -1,6 +1,7 @@ get_baseurl($ssl_state) . '/redir/' . $item['cid'] ; - $shareable = ((($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; - - $drop = array( - 'dropping' => $dropping, - 'select' => t('Select'), - 'delete' => t('Delete'), - ); - - $filer = (($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($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)); - - $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']) : ''); - - if($toplevelpost) { - if((! $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_template; - $commentww = 'ww'; - } - else if($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_template; - $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); - } - } - } - if($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'), - 'tagger' => t("add tag"), - 'classtagger' => "", - ); - } - } else { - $indent = 'comment'; - // Collapse comments - if(($nb_items > 2) || ($thread_level > 2)) { - if($items_seen == 1) { - $firstcollapsed = true; - } - if($thread_level > 2) { - if($items_seen == $nb_items) - $lastcollapsed = true; - } - else if($items_seen == ($nb_items - 2)) { - $lastcollapsed = true; - } - } - } - - if(intval(get_config('system','thread_allow')) && $a->theme_thread_allow) { - $comments_threaded = true; - } - else { - $comments_threaded = false; - } - - if($page_writeable) { - $buttons = array( - 'like' => array( t("I like this \x28toggle\x29"), t("like")), - 'dislike' => array( t("I don't like this \x28toggle\x29"), t("dislike")), - ); - if ($shareable) $buttons['share'] = array( t('Share this'), t('share')); - - - if($show_comment_box) { - $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); - } - $comment = replace_macros($cmnt_tpl,array( - '$return_path' => '', - '$threaded' => $comments_threaded, - '$jsreload' => (($mode === 'display') ? $_SESSION['return_url'] : ''), - '$type' => (($mode === 'profile') ? 'wall-comment' : 'net-comment'), - '$id' => $item['item_id'], - '$parent' => $item['item_id'], - '$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'), - '$indent' => $indent, - '$sourceapp' => t($a->sourcename), - '$ww' => (($mode === 'network') ? $commentww : '') - )); - } - } - - if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0) - $indent .= ' shiny'; - - - localize_item($item); - - $body = prepare_body($item,true); - - list($categories,$folders) = get_cats_and_terms($item); - - $tmp_item = array( - // collapse comments in template. I don't like this much... - 'comment_firstcollapsed' => $firstcollapsed, - 'comment_lastcollapsed' => $lastcollapsed, - // template to use to render item (wall, walltowall, search) - 'template' => $template, - - 'type' => implode("",array_slice(explode("/",$item['verb']),-1)), - 'tags' => template_escape($tags), - 'hashtags' => template_escape($hashtags), - 'mentions' => template_escape($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' => template_escape($body), - 'text' => strip_tags(template_escape($body)), - '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'), $owner_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' => template_escape($profile_name), - 'thumb' => $profile_avatar, - 'osparkle' => $osparkle, - 'sparkle' => $sparkle, - 'title' => template_escape($item['title']), - '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'])), - 'lock' => $lock, - 'location' => template_escape($location), - 'indent' => $indent, - 'owner_url' => $owner_url, - 'owner_photo' => $owner_photo, - 'owner_name' => template_escape($owner_name), - 'plink' => get_plink($item), - 'edpost' => $edpost, - 'isstarred' => $isstarred, - 'star' => $star, - 'filer' => $filer, - 'drop' => $drop, - 'vote' => $buttons, - 'like' => $like, - 'dislike' => $dislike, - 'comment' => $comment, - 'previewing' => $previewing, - 'wait' => t('Please wait'), - 'thread_level' => $thread_level, - ); - - $arr = array('item' => $item, 'output' => $tmp_item); - call_hooks('display_item', $arr); - - $item_result = $arr['output']; - if($firstcollapsed) { - $item_result['num_comments'] = sprintf( tt('%d comment','%d comments',$total_children),$total_children ); - $item_result['hidden_comments_num'] = $total_children; - $item_result['hidden_comments_text'] = tt('comment', 'comments', $total_children); - $item_result['hide_text'] = t('show more'); - } - - $item_result['children'] = array(); - if(count($item['children'])) { - $item_result['children'] = prepare_threads_body($a, $item['children'], $cmnt_tpl, $page_writeable, $mode, $profile_owner, $alike, $dlike, $previewing, ($thread_level + 1)); - } - $item_result['private'] = $item['private']; - $item_result['toplevel'] = ($toplevelpost ? 'toplevel_item' : ''); - - /* - * I don't like this very much... - */ - if(get_config('system','thread_allow') && $a->theme_thread_allow) { - $item_result['flatten'] = false; - $item_result['threaded'] = true; - } - else { - $item_result['flatten'] = true; - $item_result['threaded'] = false; - if(!$toplevelpost) { - $item_result['comment'] = false; - } - } - - $result[] = $item_result; - } - - return $result; + return true; } + /** * "Render" a conversation or list of items for HTML display. * There are two major forms of display: @@ -742,39 +369,89 @@ function prepare_threads_body($a, $items, $cmnt_tpl, $page_writeable, $mode, $pr if(!function_exists('conversation')) { function conversation(&$a, $items, $mode, $update, $preview = false) { - - require_once('bbcode.php'); + require_once('include/bbcode.php'); $ssl_state = ((local_user()) ? true : false); $profile_owner = 0; - $page_writeable = false; + $page_writeable = false; + $live_update_div = ''; $previewing = (($preview) ? ' preview ' : ''); if($mode === 'network') { $profile_owner = local_user(); $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 = '
' . "\r\n" + . "\r\n"; + } } - - if($mode === 'profile') { + else if($mode === 'profile') { $profile_owner = $a->profile['profile_uid']; $page_writeable = can_write_wall($a,$profile_owner); - } - if($mode === 'notes') { + if(!$update) { + $tab = notags(trim($_GET['tab'])); + $tab = ( $tab ? $tab : 'posts' ); + 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 = '
' . "\r\n" + . "\r\n"; + } + } + } + else if($mode === 'notes') { $profile_owner = local_user(); $page_writeable = true; + if(!$update) { + $live_update_div = '
' . "\r\n" + . "\r\n"; + } } - - if($mode === 'display') { + else if($mode === 'display') { $profile_owner = $a->profile['uid']; $page_writeable = can_write_wall($a,$profile_owner); + if(!$update) { + $live_update_div = '
' . "\r\n" + . ""; + } } - - if($mode === 'community') { + else if($mode === 'community') { $profile_owner = 0; $page_writeable = false; + if(!$update) { + $live_update_div = '
' . "\r\n" + . "\r\n"; + } + } + else if($mode === 'search') { + $live_update_div = '' . "\r\n"; } $page_dropping = ((local_user() && local_user() == $profile_owner) ? true : false); @@ -793,8 +470,6 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $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(); @@ -814,7 +489,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { // "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 = get_markup_template('search_item.tpl'); $tpl = 'search_item.tpl'; foreach($items as $item) { @@ -848,7 +523,26 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $tags=array(); $hashtags = array(); $mentions = array(); - foreach(explode(',',$item['tag']) as $tag){ + + $taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d) ORDER BY `tid`", + intval(TERM_OBJ_POST), intval($item['id']), intval(TERM_HASHTAG), intval(TERM_MENTION)); + + foreach($taglist as $tag) { + + if ($tag["url"] == "") + $tag["url"] = $searchpath.strtolower($tag["term"]); + + if ($tag["type"] == TERM_HASHTAG) { + $hashtags[] = "#".$tag["term"].""; + $prefix = "#"; + } elseif ($tag["type"] == TERM_MENTION) { + $mentions[] = "@".$tag["term"].""; + $prefix = "@"; + } + $tags[] = $prefix."".$tag["term"].""; + } + + /*foreach(explode(',',$item['tag']) as $tag){ $tag = trim($tag); if ($tag!="") { $t = bbcode($tag); @@ -858,7 +552,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { elseif($t[0] == '@') $mentions[] = $t; } - } + }*/ $sp = false; $profile_link = best_link_url($item,$sp); @@ -889,6 +583,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $drop = array( 'dropping' => $dropping, + 'pagedrop' => $page_dropping, 'select' => t('Select'), 'delete' => t('Delete'), ); @@ -904,34 +599,55 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { list($categories, $folders) = get_cats_and_terms($item); - //$tmp_item = replace_macros($tpl,array( + + if($a->theme['template_engine'] === 'internal') { + $profile_name_e = template_escape($profile_name); + $item['title_e'] = template_escape($item['title']); + $body_e = template_escape($body); + $tags_e = template_escape($tags); + $hashtags_e = template_escape($hashtags); + $mentions_e = template_escape($mentions); + $location_e = template_escape($location); + $owner_name_e = template_escape($owner_name); + } + else { + $profile_name_e = $profile_name; + $item['title_e'] = $item['title']; + $body_e = $body; + $tags_e = $tags; + $hashtags_e = $hashtags; + $mentions_e = $mentions; + $location_e = $location; + $owner_name_e = $owner_name; + } + $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' => template_escape($profile_name), + 'name' => $profile_name_e, 'sparkle' => $sparkle, 'lock' => $lock, 'thumb' => $profile_avatar, - 'title' => template_escape($item['title']), - 'body' => template_escape($body), - 'tags' => template_escape($tags), - 'hashtags' => template_escape($hashtags), - 'mentions' => template_escape($mentions), + 'title' => $item['title_e'], + 'body' => $body_e, + 'tags' => $tags_e, + 'hashtags' => $hashtags_e, + 'mentions' => $mentions_e, '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(template_escape($body)), + 'text' => strip_tags($body_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'])), - 'location' => template_escape($location), + 'location' => $location_e, 'indent' => '', - 'owner_name' => template_escape($owner_name), + 'owner_name' => $owner_name_e, 'owner_url' => $owner_url, 'owner_photo' => $owner_photo, 'plink' => get_plink($item), @@ -987,6 +703,10 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { continue; } + call_hooks('display_item', $arr); + + $item['pagedrop'] = $page_dropping; + if($item['id'] == $item['parent']) { $item_object = new Item($item); $conv->add_thread($item_object); @@ -1003,11 +723,13 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $o = replace_macros($page_template, array( '$baseurl' => $a->get_baseurl($ssl_state), - '$remove' => t('remove'), + '$return_path' => $a->query_string, + '$live_update' => $live_update_div, + '$remove' => t('remove'), '$mode' => $mode, '$user' => $a->user, '$threads' => $threads, - '$dropping' => ($page_dropping?t('Delete Selected Items'):False), + '$dropping' => ($page_dropping && feature_enabled(local_user(),'multi_delete') ? t('Delete Selected Items') : False), )); return $o; @@ -1054,6 +776,7 @@ function item_photo_menu($item){ if(! count($a->contacts)) load_contact_links(local_user()); } + $sub_link=""; $poke_link=""; $contact_url=""; $pm_url=""; @@ -1061,6 +784,10 @@ function item_photo_menu($item){ $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') @@ -1086,7 +813,7 @@ function item_photo_menu($item){ 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/?cid=' . $cid; + $posts_link = $a->get_baseurl($ssl_state) . '/network/0?nets=all&cid=' . $cid; $clean_url = normalise_link($item['author-link']); @@ -1101,6 +828,7 @@ function item_photo_menu($item){ } $menu = Array( + t("Follow Thread") => $sub_link, t("View Status") => $status_link, t("View Profile") => $profile_link, t("View Photos") => $photos_link, @@ -1119,7 +847,11 @@ function item_photo_menu($item){ $o = ""; foreach($menu as $k=>$v){ - if ($v!="") $o .= "
  • $k
  • \n"; + if(strpos($v,'javascript:') === 0) { + $v = substr($v,11); + $o .= "
  • $k
  • \n"; + } + elseif ($v!="") $o .= "
  • $k
  • \n"; } return $o; }} @@ -1167,22 +899,36 @@ function format_like($cnt,$arr,$type,$id) { if($cnt == 1) $o .= (($type === 'like') ? sprintf( t('%s likes this.'), $arr[0]) : sprintf( t('%s doesn\'t like this.'), $arr[0])) . EOL ; else { - $spanatts = 'class="fakelink" onclick="openClose(\'' . $type . 'list-' . $id . '\');"'; - $o .= (($type === 'like') ? - sprintf( t('%2$d people like this.'), $spanatts, $cnt) - : - sprintf( t('%2$d people don\'t like this.'), $spanatts, $cnt) ); - $o .= EOL ; + $spanatts = "class=\"fakelink\" onclick=\"openClose('{$type}list-$id');\""; + switch($type) { + case 'like': + $phrase = sprintf( t('%2$d people like this'), $spanatts, $cnt); + break; + case 'dislike': + $phrase = sprintf( t('%2$d people don\'t like this'), $spanatts, $cnt); + break; + } + $phrase .= EOL ; + $o .= replace_macros(get_markup_template('voting_fakelink.tpl'), array( + '$phrase' => $phrase, + '$type' => $type, + '$id' => $id + )); + $total = count($arr); if($total >= MAX_LIKERS) $arr = array_slice($arr, 0, MAX_LIKERS - 1); - if($total < MAX_LIKERS) - $arr[count($arr)-1] = t('and') . ' ' . $arr[count($arr)-1]; - $str = implode(', ', $arr); - if($total >= MAX_LIKERS) + if($total < MAX_LIKERS) { + $last = t('and') . ' ' . $arr[count($arr)-1]; + $arr2 = array_slice($arr, 0, -1); + $str = implode(', ', $arr2) . ' ' . $last; + } + if($total >= MAX_LIKERS) { + $str = implode(', ', $arr); $str .= sprintf( t(', and %d other people'), $total - MAX_LIKERS ); + } $str = (($type === 'like') ? sprintf( t('%s like this.'), $str) : sprintf( t('%s don\'t like this.'), $str)); - $o .= "\t" . ''; + $o .= "\t" . ''; } return $o; }} @@ -1192,11 +938,14 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { $o = ''; - $geotag = (($x['allow_location']) ? get_markup_template('jot_geotag.tpl') : ''); + $geotag = (($x['allow_location']) ? replace_macros(get_markup_template('jot_geotag.tpl'), array()) : ''); - $plaintext = false; - if(local_user() && intval(get_pconfig(local_user(),'system','plaintext'))) - $plaintext = true; +/* $plaintext = false; + if( local_user() && (intval(get_pconfig(local_user(),'system','plaintext')) || !feature_enabled(local_user(),'richtext')) ) + $plaintext = true;*/ + $plaintext = true; + if( local_user() && feature_enabled(local_user(),'richtext') ) + $plaintext = false; $tpl = get_markup_template('jot-header.tpl'); $a->page['htmlhead'] .= replace_macros($tpl, array( @@ -1211,7 +960,8 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { '$audurl' => t("Please enter an audio link/URL:"), '$term' => t('Tag term:'), '$fileas' => t('Save to Folder:'), - '$whereareu' => t('Where are you right now?') + '$whereareu' => t('Where are you right now?'), + '$delitems' => t('Delete item(s)?') )); @@ -1232,8 +982,6 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { )); - $tpl = get_markup_template("jot.tpl"); - $jotplugins = ''; $jotnets = ''; @@ -1264,10 +1012,31 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { if($notes_cid) $jotnets .= ''; - $tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins)); + + // Private/public post links for the non-JS ACL form + $private_post = 1; + if($_REQUEST['public']) + $private_post = 0; + + $query_str = $a->query_string; + if(strpos($query_str, 'public=1') !== false) + $query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str); + + // I think $a->query_string may never have ? in it, but I could be wrong + // It looks like it's from the index.php?q=[etc] rewrite that the web + // server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61 + if(strpos($query_str, '?') === false) + $public_post_link = '?public=1'; + else + $public_post_link = '&public=1'; + + + +// $tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins)); + $tpl = get_markup_template("jot.tpl"); $o .= replace_macros($tpl,array( - '$return_path' => $a->query_string, + '$return_path' => $query_str, '$action' => $a->get_baseurl(true) . '/item', '$share' => (x($x,'button') ? $x['button'] : t('Share')), '$upload' => t('Upload photo'), @@ -1287,7 +1056,7 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { '$title' => "", '$placeholdertitle' => t('Set title'), '$category' => "", - '$placeholdercategory' => t('Categories (comma-separated list)'), + '$placeholdercategory' => (feature_enabled(local_user(),'categories') ? t('Categories (comma-separated list)') : ''), '$wait' => t('Please wait'), '$permset' => t('Permission settings'), '$shortpermset' => t('permissions'), @@ -1303,12 +1072,22 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { '$jotnets' => $jotnets, '$emtitle' => t('Example: bob@example.com, mary@example.com'), '$lockstate' => $x['lockstate'], - '$acl' => $x['acl'], '$bang' => $x['bang'], '$profile_uid' => $x['profile_uid'], - '$preview' => t('Preview'), + '$preview' => ((feature_enabled($x['profile_uid'],'preview')) ? t('Preview') : ''), + '$jotplugins' => $jotplugins, '$sourceapp' => t($a->sourcename), - '$cancel' => t('Cancel') + '$cancel' => t('Cancel'), + '$rand_num' => random_digits(12), + + // ACL permissions box + '$acl' => $x['acl'], + '$acl_data' => $x['acl_data'], + '$group_perms' => t('Post to Groups'), + '$contact_perms' => t('Post to Contacts'), + '$private' => t('Private post'), + '$is_private' => $private_post, + '$public_link' => $public_post_link, )); @@ -1323,9 +1102,10 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) { function get_item_children($arr, $parent) { $children = array(); + $a = get_app(); foreach($arr as $item) { if($item['id'] != $item['parent']) { - if(get_config('system','thread_allow')) { + if(get_config('system','thread_allow') && $a->theme_thread_allow) { // Fallback to parent-uri if thr-parent is not set $thr_parent = $item['thr-parent']; if($thr_parent == '')