diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/connections.php | 9 | ||||
-rw-r--r-- | include/conversation.php | 12 | ||||
-rw-r--r-- | include/features.php | 29 | ||||
-rw-r--r-- | include/group.php | 2 | ||||
-rw-r--r-- | include/import.php | 13 | ||||
-rw-r--r-- | include/nav.php | 28 | ||||
-rw-r--r-- | include/network.php | 2 | ||||
-rwxr-xr-x | include/plugin.php | 2 | ||||
-rw-r--r-- | include/text.php | 80 |
9 files changed, 129 insertions, 48 deletions
diff --git a/include/connections.php b/include/connections.php index 32baa94bd..5a9e31950 100644 --- a/include/connections.php +++ b/include/connections.php @@ -374,14 +374,19 @@ function contact_remove($channel_id, $abook_id) { return false; - $r = q("select id from item where (owner_xchan = '%s' or author_xchan = '%s') and uid = %d", + $r = q("select id from item where (owner_xchan = '%s' or author_xchan = '%s') and uid = %d and item_retained = 0 and item_starred = 0", dbesc($abook['abook_xchan']), dbesc($abook['abook_xchan']), intval($channel_id) ); if($r) { + $r = fetch_post_tags($r,true); + foreach($r as $rr) { - drop_item($rr['id'],false); + $terms = get_terms_oftype($item['term'],TERM_FILE); + if(! $terms) { + drop_item($rr['id'],false); + } } } diff --git a/include/conversation.php b/include/conversation.php index 4a1cdc7da..4997bc2b7 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -509,6 +509,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa . ((x($_GET,'cmax')) ? '&cmax=' . $_GET['cmax'] : '') . ((x($_GET,'file')) ? '&file=' . $_GET['file'] : '') . ((x($_GET,'uri')) ? '&uri=' . $_GET['uri'] : '') + . ((x($_GET,'pf')) ? '&pf=' . $_GET['pf'] : '') . "'; var profile_page = " . App::$pager['page'] . "; </script>\r\n"; } } @@ -690,8 +691,10 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa 'delete' => t('Delete'), ); - $star = false; - $isstarred = "unstarred fa-star-o"; + $star = array( + 'toggle' => t("Toggle Star Status"), + 'isstarred' => ((intval($item['item_starred'])) ? true : false), + ); $lock = (($item['item_private'] || strlen($item['allow_cid']) || strlen($item['allow_gid']) || strlen($item['deny_cid']) || strlen($item['deny_gid'])) ? t('Private Message') @@ -773,8 +776,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa 'owner_photo' => $owner_photo, 'plink' => get_plink($item,false), 'edpost' => false, - 'isstarred' => $isstarred, - 'star' => $star, + 'star' => ((feature_enabled(local_channel(),'star_posts')) ? $star : ''), 'drop' => $drop, 'vote' => $likebuttons, 'like' => '', @@ -1162,7 +1164,7 @@ function builtin_activity_puller($item, &$conv_responses) { if((activity_match($item['verb'], $verb)) && ($item['id'] != $item['parent'])) { $name = (($item['author']['xchan_name']) ? $item['author']['xchan_name'] : t('Unknown')); $url = (($item['author_xchan'] && $item['author']['xchan_photo_s']) - ? '<a class="dropdown-item" href="' . chanlink_hash($item['author_xchan']) . '">' . '<img class="menu-img-1" src="' . zid($item['author']['xchan_photo_s']) . '" alt="' . urlencode($name) . '" />' . $name . '</a>' + ? '<a class="dropdown-item" href="' . chanlink_hash($item['author_xchan']) . '">' . '<img class="menu-img-1" src="' . zid($item['author']['xchan_photo_s']) . '" alt="' . urlencode($name) . '" /> ' . $name . '</a>' : '<a class="dropdown-item" href="#" class="disabled">' . $name . '</a>' ); diff --git a/include/features.php b/include/features.php index 616e3f6c5..bcdea73e0 100644 --- a/include/features.php +++ b/include/features.php @@ -386,21 +386,30 @@ function get_features($filtered = true, $level = (-1)) { ], [ - 'personal_tab', - t('Network Personal Tab'), - t('Enable tab to display only Network posts that you\'ve interacted on'), + 'order_tab', + t('Alternate Stream Order'), + t('Ability to order the stream by last post date, last comment date or unthreaded activities'), false, - get_config('feature_lock','personal_tab'), - feature_level('personal_tab',1), + get_config('feature_lock','order_tab'), + feature_level('order_tab',2), + ], + + [ + 'forums_tab', + t('Forum Filter'), + t('Ability to display only posts of a specific forum'), + false, + get_config('feature_lock','forums_tab'), + feature_level('forums_tab',1), ], [ - 'new_tab', - t('Network New Tab'), - t('Enable tab to display all new Network activity'), + 'personal_tab', + t('Personal Posts Filter'), + t('Ability to display only Network posts that you\'ve interacted on'), false, - get_config('feature_lock','new_tab'), - feature_level('new_tab',2), + get_config('feature_lock','personal_tab'), + feature_level('personal_tab',1), ], [ diff --git a/include/group.php b/include/group.php index 8c95f6224..03ebf7ee5 100644 --- a/include/group.php +++ b/include/group.php @@ -284,7 +284,7 @@ function group_side($every="connections",$each="group",$edit = false, $group_id 'text' => t('All Channels'), 'id' => 0, 'selected' => (($group_id == 0) ? 'group-selected' : ''), - 'href' => $every . (($every === 'network') ? '?f=&gid=0' : '') . ((x($_GET,'order')) ? '&order=' . $_GET['order'] : ''), + 'href' => $every . (($every === 'network') ? '?f=&gid=0' : ''), ); diff --git a/include/import.php b/include/import.php index ae6a0ab6a..91a26b23b 100644 --- a/include/import.php +++ b/include/import.php @@ -1326,20 +1326,23 @@ function sync_files($channel, $files) { ); if($exists) { - if(! dbesc_array($p)) - continue; $str = ''; foreach($p as $k => $v) { + $matches = false; + if(preg_match('/([^a-zA-Z0-9\-\_\.])/',$k,$matches)) { + continue; + } + if($str) $str .= ","; - - $str .= " " . TQUOT . $k . TQUOT . " = '" . $v . "' "; + + $str .= " " . TQUOT . $k . TQUOT . " = '" . (($k === 'content') ? dbescbin($v) : dbesc($v)) . "' "; } $r = dbq("update photo set " . $str . " where id = " . intval($exists[0]['id']) ); } else { - create_table_from_array('photo',$p); + create_table_from_array('photo',$p, [ 'content' ] ); } } } diff --git a/include/nav.php b/include/nav.php index c5ceb97c5..5642f438f 100644 --- a/include/nav.php +++ b/include/nav.php @@ -91,8 +91,10 @@ function nav($template = 'default') { if(local_channel()) { if(! $_SESSION['delegate']) { - $nav['manage'] = array('manage', t('Channel Manager'), "", t('Manage Your Channels'),'manage_nav_btn'); + $nav['manage'] = array('manage', t('Channel Manager'), "", t('Manage your channels'),'manage_nav_btn'); } + if(feature_enabled(local_channel(),'groups')) + $nav['group'] = array('group', t('Privacy Groups'),"", t('Manage your privacy groups'),'group_nav_btn'); $nav['settings'] = array('settings', t('Settings'),"", t('Account/Channel Settings'),'settings_nav_btn'); @@ -168,21 +170,19 @@ function nav($template = 'default') { $nav['help'] = [$help_url, t('Help'), "", t('Help and documentation'), 'help_nav_btn', $context_help, $enable_context_help]; } - $nav['search'] = ['search', t('Search'), "", t('Search site @name, !forum, #tag, ?docs, content')]; - + switch(App::$module) { + case 'network': + $search_form_action = 'network'; + break; + case 'channel': + $search_form_action = 'channel'; + break; + default: + $search_form_action = 'search'; + } - /** - * - * The following nav links are only show to logged in users - * - */ - if(local_channel()) { - if(! $_SESSION['delegate']) { - $nav['manage'] = array('manage', t('Channel Manager'), "", t('Manage Your Channels'),'manage_nav_btn'); - } - $nav['settings'] = array('settings', t('Settings'),"", t('Account/Channel Settings'),'settings_nav_btn'); - } + $nav['search'] = ['search', t('Search'), "", t('Search site @name, !forum, #tag, ?docs, content'), $search_form_action]; /** * Admin page diff --git a/include/network.php b/include/network.php index 4b2d2f93f..91a39a6cb 100644 --- a/include/network.php +++ b/include/network.php @@ -1740,7 +1740,7 @@ function deliverable_singleton($channel_id,$xchan) { function get_repository_version($branch = 'master') { - $path = "https://raw.githubusercontent.com/redmatrix/hubzilla/$branch/boot.php"; + $path = "https://framagit.org/hubzilla/core/raw/$branch/boot.php"; $x = z_fetch_url($path); if($x['success']) { diff --git a/include/plugin.php b/include/plugin.php index 28d27619f..734c20d79 100755 --- a/include/plugin.php +++ b/include/plugin.php @@ -559,7 +559,7 @@ function get_widget_info($widget){ $checkpaths = [ "Zotlabs/SiteWidget/$ucwidget.php", - "Zotlibs/Widget/$ucwidget.php", + "Zotlabs/Widget/$ucwidget.php", "addon/$ucwidget/$ucwidget.php", "addon/$widget.php" ]; diff --git a/include/text.php b/include/text.php index 34063cdd7..a8c28d7bd 100644 --- a/include/text.php +++ b/include/text.php @@ -3186,21 +3186,33 @@ function array2XML($obj, $array) { * * @param string $table * @param array $arr + * @param array $binary_fields - fields which will be cleansed with dbescbin rather than dbesc; this is critical for postgres * @return boolean|PDOStatement */ -function create_table_from_array($table, $arr) { +function create_table_from_array($table, $arr, $binary_fields = []) { if(! ($arr && $table)) return false; - if(dbesc_array($arr)) { - $r = dbq("INSERT INTO " . TQUOT . $table . TQUOT . " (" . TQUOT - . implode(TQUOT . ', ' . TQUOT, array_keys($arr)) - . TQUOT . ") VALUES ('" - . implode("', '", array_values($arr)) - . "')" - ); + $clean = []; + foreach($arr as $k => $v) { + $matches = false; + if(preg_match('/([^a-zA-Z0-9\-\_\.])/',$k,$matches)) { + return false; + } + if(in_array($k,$binary_fields)) { + $clean[$k] = dbescbin($v); + } + else { + $clean[$k] = dbesc($v); + } } + $r = dbq("INSERT INTO " . TQUOT . $table . TQUOT . " (" . TQUOT + . implode(TQUOT . ', ' . TQUOT, array_keys($clean)) + . TQUOT . ") VALUES ('" + . implode("', '", array_values($clean)) + . "')" + ); return $r; } @@ -3333,4 +3345,54 @@ function unique_multidim_array($array, $key) { $i++; } return $temp_array; -} +} + +function get_forum_channels($uid) { + + if(! $uid) + return; + + $xf = false; + + $x1 = q("select xchan from abconfig where chan = %d and cat = 'their_perms' and k = 'send_stream' and v = '0'", + intval($uid) + ); + if($x1) { + $xc = ids_to_querystr($x1,'xchan',true); + + $x2 = q("select xchan from abconfig where chan = %d and cat = 'their_perms' and k = 'tag_deliver' and v = '1' and xchan in (" . $xc . ") ", + intval($uid) + ); + + if($x2) { + $xf = ids_to_querystr($x2,'xchan',true); + + // private forums + $x3 = q("select xchan from abconfig where chan = %d and cat = 'their_perms' and k = 'post_wall' and v = '1' and xchan in (" . $xc . ") and not xchan in (" . $xf . ") ", + intval(local_channel()) + ); + if($x3) { + $xf = ids_to_querystr(array_merge($x2,$x3),'xchan',true); + } + } + } + + $sql_extra = (($xf) ? " and ( xchan_hash in (" . $xf . ") or xchan_pubforum = 1 ) " : " and xchan_pubforum = 1 "); + + $r = q("select abook_id, xchan_hash, xchan_name, xchan_url, xchan_photo_s from abook left join xchan on abook_xchan = xchan_hash where xchan_deleted = 0 and abook_channel = %d and abook_pending = 0 and abook_ignored = 0 and abook_blocked = 0 and abook_archived = 0 $sql_extra order by xchan_name", + intval($uid) + ); + + for($x = 0; $x < count($r); $x ++) { + if($x3) { + foreach($x3 as $xx) { + if($r[$x]['xchan_hash'] == $xx['xchan']) { + $r[$x]['private_forum'] = 1; + } + } + } + } + + return $r; + +} |