+{{$all}} +
+
+ +
{{$field.field_name}} | {{$field.field_desc}} | {{$drop}} |
diff --git a/CHANGELOG b/CHANGELOG index 819347552..9e9156fbc 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,46 @@ +Hubzilla 1.3 + Admin Security configuration page created which consolidates several previously hidden settings: + Communication white/black lists + Channel white/black lists + OEmbed white/black lists + Admin Profile Fields page created which manages the availability and order of standard profile fields and allows new fields to be created/managed + "Poke" module reworked - page UI updated and "poke basic" setting introduced which limits the available poke "verbs". + "Mood" module UI reworked + "profile_photo" module UI reworked + "cover_photo" module UI reworked + "new_channel" module UI reworked + "register" module UI reworked + "pubsites" module UI reworked + item-meta ("iconfig") created which implements arbitrary storage for item metadata for plugins + abook-meta ("abconfig") created which implements arbitrary storage for connection metadata for plugins + "Strict transport security header" made optional as it conflicts with some existing Apache/nginx configurations + "Hubzilla UNO" (Hubzilla with radically simplified and locked site settings) implemented as an install configuration. + .well-known directory conflict worked out to support LetsEncrypt cert ownership checks without disrupting webfinger and other internal uses of .well-known + Lots of work on 'zcards' which are self-contained HTML representations of a channel including cover photos, profile photos, and some text information + Long standing bug uncovered which failed to properly restrict the lower time limit for public feed requests + A number of fixes to "readmore" to fix page jumping + Bugfix: persons other than the channel owner who have permission to upload photos to a channel could not do so if the js_upload plugin/addon was enabled + Siteinfo incorrectly identifying secondary directory servers + Allow admin to set and lock features when UNO is configured + Atom feeds: alter how events are formatted to be compatible with GNU-social + Allow guest/visitor access to view personal calendar + Moved several more classes to "composer format" and provided an autoloader. + Bugfix: require existing password to change password + Bugfix: allow relative_date() to be translated to Polish which has more than two plural forms. + Plugin API: add "requires" keyword to module header to indicate dependent addons + ActivityStreams improvements and cleanup: photo and file activities + UI cleanup for editing profile when multiple profiles enabled + Removed the "markdown" feature as there are numerous issues and no maintainer. + Provide "footer" bbcode to ease theming of post footer content + Bugfix: install issues caused by composer code refactor and typo in postgres load file + Plugins: + keepout - "block public on steroids" + pubsubhubbub - provides PuSH support to Atom feeds, required for GNU-social federation + GNUsocial protocol - under development + Diaspora protocol - some work to ease migration to the new signing format + Diaspost - disabled; numerous issues and no maintainer + smileybutton - theme work and fixed compatibility with other jot-tools plugins + Hubzilla 1.2 Provide extra HTTP security headers (several of them). diff --git a/doc/to_do_code.bb b/doc/to_do_code.bb index a7c3c94b4..d0860cf3a 100644 --- a/doc/to_do_code.bb +++ b/doc/to_do_code.bb @@ -32,8 +32,6 @@ We need much more than this, but here are areas where developers can help. Pleas [li]API extensions, for Twitter API - search, friending, threading. For Red API, lots of stuff[/li] [li]Import channel from Diaspora/Friendica (Diaspora partially done)[/li] [li]MediaGoblin photo "crosspost" connector[/li] -[li]Create management page/UI for extensible profile fields[/li] -[li]Create interface to include/exclude and re-order standard profile fields[/li] [li]App taxonomy[/li] [li]Customisable App collection pages[/li] [li]replace the tinymce visual editor and/or make the visual editor pluggable and responsive to different output formats. We probably want library/bbedit for bbcode. This needs a fair bit of work to catch up with our "enhanced bbcode", but start with images, links, bold and highlight and work from there.[/li] diff --git a/include/features.php b/include/features.php index 1ef070b00..ff6b71d4c 100644 --- a/include/features.php +++ b/include/features.php @@ -66,7 +66,7 @@ function get_features($filtered = true) { 'composition' => array( t('Post Composition Features'), // array('richtext', t('Richtext Editor'), t('Enable richtext editor'),falseget_config('feature_lock','richtext')), - array('markdown', t('Use Markdown'), t('Allow use of "Markdown" to format posts'),false,get_config('feature_lock','markdown')), +// array('markdown', t('Use Markdown'), t('Allow use of "Markdown" to format posts'),false,get_config('feature_lock','markdown')), array('large_photos', t('Large Photos'), t('Include large (1024px) photo thumbnails in posts. If not enabled, use small (640px) photo thumbnails'),false,get_config('feature_lock','large_photos')), array('channel_sources', t('Channel Sources'), t('Automatically import channel content from other channels or feeds'),false,get_config('feature_lock','channel_sources')), array('content_encrypt', t('Even More Encryption'), t('Allow optional encryption of content end-to-end with a shared secret key'),false,get_config('feature_lock','content_encrypt')), diff --git a/include/notifier.php b/include/notifier.php index 93cc77a1c..628847d54 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -68,7 +68,6 @@ require_once('include/html2plain.php'); require_once('include/cli_startup.php'); require_once('include/zot.php'); require_once('include/queue_fn.php'); -require_once('include/session.php'); require_once('include/datetime.php'); require_once('include/items.php'); require_once('include/bbcode.php'); diff --git a/include/ratenotif.php b/include/ratenotif.php index e94f30247..2c636c710 100644 --- a/include/ratenotif.php +++ b/include/ratenotif.php @@ -11,7 +11,6 @@ function ratenotif_run($argv, $argc){ $a = get_app(); - require_once("session.php"); require_once("datetime.php"); require_once('include/items.php'); require_once('include/Contact.php'); diff --git a/include/widgets.php b/include/widgets.php index aa0be87d6..ad54cb59e 100644 --- a/include/widgets.php +++ b/include/widgets.php @@ -982,28 +982,48 @@ function widget_cover_photo($arr) { require_once('include/identity.php'); $o = ''; + $a = get_app(); + $channel_id = 0; if(array_key_exists('channel_id', $arr) && intval($arr['channel_id'])) $channel_id = intval($arr['channel_id']); if(! $channel_id) - $channel_id = get_app()->profile_uid; + $channel_id = $a->profile_uid; if(! $channel_id) return ''; + $channel = channelx_by_n($channel_id); + if(array_key_exists('style', $arr) && isset($arr['style'])) $style = $arr['style']; else - $style = 'width:100%; padding-right: 10px; height: auto;'; + $style = 'width:100%; height: auto;'; // ensure they can't sneak in an eval(js) function if(strpbrk($style,'(\'"<>') !== false) $style = ''; + if(array_key_exists('title', $arr) && isset($arr['title'])) + $title = $arr['title']; + else + $title = $channel['channel_name']; + + if(array_key_exists('subtitle', $arr) && isset($arr['subtitle'])) + $subtitle = $arr['subtitle']; + else + $subtitle = $channel['xchan_addr']; + $c = get_cover_photo($channel_id,'html'); if($c) { - $o = '
'; + $photo_html = (($style) ? str_replace('alt=',' style="' . $style . '" alt=',$c) : $c); + + $o = replace_macros(get_markup_template('cover_photo_widget.tpl'),array( + '$photo_html' => $photo_html, + '$title' => $title, + '$subtitle' => $subtitle, + )); } return $o; } @@ -1297,7 +1317,7 @@ function widget_admin($arr) { 'plugins' => array(z_root() . '/admin/plugins/', t('Plugins'), 'plugins'), 'themes' => array(z_root() . '/admin/themes/', t('Themes'), 'themes'), 'queue' => array(z_root() . '/admin/queue', t('Inspect queue'), 'queue'), - 'profs' => array(z_root() . '/admin/profs', t('Profile Config'), 'profs'), + 'profs' => array(z_root() . '/admin/profs', t('Profile Fields'), 'profs'), 'dbsync' => array(z_root() . '/admin/dbsync/', t('DB updates'), 'dbsync') ); diff --git a/mod/admin.php b/mod/admin.php index 292a4e66a..6300ac027 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -1620,26 +1620,47 @@ readable."); function admin_page_profs_post(&$a) { - if($_REQUEST['id']) { - $r = q("update profdef set field_name = '%s', field_type = '%s', field_desc = '%s' field_help = '%s', field_inputs = '%s' where id = %d", - dbesc($_REQUEST['field_name']), - dbesc($_REQUEST['field_type']), - dbesc($_REQUEST['field_desc']), - dbesc($_REQUEST['field_help']), - dbesc($_REQUEST['field_inputs']), - intval($_REQUEST['id']) - ); + if(array_key_exists('basic',$_REQUEST)) { + $arr = explode(',',$_REQUEST['basic']); + for($x = 0; $x < count($arr); $x ++) + if(trim($arr[$x])) + $arr[$x] = trim($arr[$x]); + set_config('system','profile_fields_basic',$arr); + + if(array_key_exists('advanced',$_REQUEST)) { + $arr = explode(',',$_REQUEST['advanced']); + for($x = 0; $x < count($arr); $x ++) + if(trim($arr[$x])) + $arr[$x] = trim($arr[$x]); + set_config('system','profile_fields_advanced',$arr); + } + goaway(z_root() . '/admin/profs'); } - else { - $r = q("insert into profdef ( field_name, field_type, field_desc, field_help, field_inputs ) values ( '%s' , '%s', '%s', '%s', '%s' )", - dbesc($_REQUEST['field_name']), - dbesc($_REQUEST['field_type']), - dbesc($_REQUEST['field_desc']), - dbesc($_REQUEST['field_help']), - dbesc($_REQUEST['field_inputs']) - ); + + + if(array_key_exists('field_name',$_REQUEST)) { + if($_REQUEST['id']) { + $r = q("update profdef set field_name = '%s', field_type = '%s', field_desc = '%s' field_help = '%s', field_inputs = '%s' where id = %d", + dbesc($_REQUEST['field_name']), + dbesc($_REQUEST['field_type']), + dbesc($_REQUEST['field_desc']), + dbesc($_REQUEST['field_help']), + dbesc($_REQUEST['field_inputs']), + intval($_REQUEST['id']) + ); + } + else { + $r = q("insert into profdef ( field_name, field_type, field_desc, field_help, field_inputs ) values ( '%s' , '%s', '%s', '%s', '%s' )", + dbesc($_REQUEST['field_name']), + dbesc($_REQUEST['field_type']), + dbesc($_REQUEST['field_desc']), + dbesc($_REQUEST['field_help']), + dbesc($_REQUEST['field_inputs']) + ); + } } + // add to chosen array basic or advanced goaway(z_root() . '/admin/profs'); @@ -1686,4 +1707,70 @@ function admin_page_profs(&$a) { '$submit' => t('Save') )); } + + $basic = ''; + $barr = array(); + $fields = get_profile_fields_basic(); + if(! $fields) + $fields = get_profile_fields_basic(1); + if($fields) { + foreach($fields as $k => $v) { + if($basic) + $basic .= ', '; + $basic .= trim($k); + $barr[] = trim($k); + } + } + + $advanced = ''; + $fields = get_profile_fields_advanced(); + if(! $fields) + $fields = get_profile_fields_advanced(1); + if($fields) { + foreach($fields as $k => $v) { + if(in_array(trim($k),$barr)) + continue; + if($advanced) + $advanced .= ', '; + $advanced .= trim($k); + } + } + + $all = ''; + $fields = get_profile_fields_advanced(1); + if($fields) { + foreach($fields as $k => $v) { + if($all) + $all .= ', '; + $all .= trim($k); + } + } + + $r = q("select * from profdef where true"); + if($r) { + foreach($r as $rr) { + if($all) + $all .= ', '; + $all .= $rr['field_name']; + } + } + + + $o = replace_macros(get_markup_template('admin_profiles.tpl'),array( + '$title' => t('Profile Fields'), + '$basic' => array('basic',t('Basic Profile Fields'),$basic,''), + '$advanced' => array('advanced',t('Advanced Profile Fields'),$advanced,t('(In addition to basic fields)')), + '$all' => $all, + '$all_desc' => t('All available fields'), + '$cust_field_desc' => t('Custom Fields'), + '$cust_fields' => $r, + '$edit' => t('Edit'), + '$drop' => t('Delete'), + '$new' => t('Create Custom Field'), + '$submit' => t('Submit') + )); + + return $o; + + } diff --git a/mod/item.php b/mod/item.php index f23bff3ac..038a967b2 100644 --- a/mod/item.php +++ b/mod/item.php @@ -477,15 +477,28 @@ function item_post(&$a) { if($mimetype === 'text/bbcode') { require_once('include/text.php'); - if($uid && $uid == $profile_uid && feature_enabled($uid,'markdown')) { - require_once('include/bb2diaspora.php'); - $body = escape_tags(trim($body)); - $body = str_replace("\n",'{{$field.field_name}} | {{$field.field_desc}} | {{$drop}} |