diff --git a/boot.php b/boot.php index 04e14ac4d3..15dfec48b8 100644 --- a/boot.php +++ b/boot.php @@ -36,7 +36,6 @@ require_once 'include/text.php'; require_once 'include/datetime.php'; require_once 'include/pgettext.php'; require_once 'include/nav.php'; -require_once 'include/features.php'; require_once 'include/identity.php'; require_once 'update.php'; require_once 'include/dbstructure.php'; diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 5ae30d5633..f971d462b2 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -1,10 +1,9 @@ t('Permissions'), '$aclModalDismiss' => t('Close'), '$features' => array( - 'aclautomention' => (feature_enabled($user['uid'], "aclautomention") ? "true" : "false") + 'aclautomention' => (Feature::isEnabled($user['uid'], "aclautomention") ? "true" : "false") ), )); diff --git a/include/api.php b/include/api.php index 12380f4b84..ea804b18ba 100644 --- a/include/api.php +++ b/include/api.php @@ -6,6 +6,7 @@ * @todo Automatically detect if incoming data is HTML or BBCode */ use Friendica\App; +use Friendica\Content\Feature; use Friendica\Core\System; use Friendica\Core\Config; use Friendica\Core\NotificationsManager; @@ -5100,7 +5101,7 @@ function api_friendica_profile_show($type) $profileid = (x($_REQUEST, 'profile_id') ? $_REQUEST['profile_id'] : 0); // retrieve general information about profiles for user - $multi_profiles = feature_enabled(api_user(), 'multi_profiles'); + $multi_profiles = Feature::isEnabled(api_user(), 'multi_profiles'); $directory = Config::get('system', 'directory'); // get data of the specified profile id or all profiles of the user if not specified diff --git a/include/contact_widgets.php b/include/contact_widgets.php index 5108eaf723..31e57ea839 100644 --- a/include/contact_widgets.php +++ b/include/contact_widgets.php @@ -1,5 +1,8 @@ profile['profile_uid'], 'categories')) { + if (! Feature::isEnabled($a->profile['profile_uid'], 'categories')) { return ''; } diff --git a/include/conversation.php b/include/conversation.php index bba852e7ad..4b9459a3f7 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -3,6 +3,7 @@ * @file include/conversation.php */ use Friendica\App; +use Friendica\Content\Feature; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Core\System; @@ -915,7 +916,7 @@ function conversation(App $a, $items, $mode, $update, $preview = false) { '$mode' => $mode, '$user' => $a->user, '$threads' => $threads, - '$dropping' => ($page_dropping && feature_enabled(local_user(), 'multi_delete') ? t('Delete Selected Items') : False), + '$dropping' => ($page_dropping && Feature::isEnabled(local_user(), 'multi_delete') ? t('Delete Selected Items') : False), )); return $o; @@ -1305,7 +1306,7 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) { '$title' => $x['title'], '$placeholdertitle' => t('Set title'), '$category' => $x['category'], - '$placeholdercategory' => (feature_enabled(local_user(), 'categories') ? t('Categories (comma-separated list)') : ''), + '$placeholdercategory' => (Feature::isEnabled(local_user(), 'categories') ? t('Categories (comma-separated list)') : ''), '$wait' => t('Please wait'), '$permset' => t('Permission settings'), '$shortpermset' => t('permissions'), @@ -1321,7 +1322,7 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) { '$lockstate' => $x['lockstate'], '$bang' => $x['bang'], '$profile_uid' => $x['profile_uid'], - '$preview' => ((feature_enabled($x['profile_uid'],'preview')) ? t('Preview') : ''), + '$preview' => ((Feature::isEnabled($x['profile_uid'],'preview')) ? t('Preview') : ''), '$jotplugins' => $jotplugins, '$notes_cid' => $notes_cid, '$sourceapp' => t($a->sourcename), diff --git a/include/event.php b/include/event.php index a0509aa0fe..4795867b12 100644 --- a/include/event.php +++ b/include/event.php @@ -5,6 +5,7 @@ */ use Friendica\App; +use Friendica\Content\Feature; use Friendica\Core\PConfig; use Friendica\Core\System; use Friendica\Database\DBM; @@ -899,7 +900,7 @@ function widget_events() { * for exporting the cal is enabled (otherwise the widget would appear for logged in users * on foreigen profile pages even if the widget is disabled). */ - if (intval($owner_uid) && local_user() !== $owner_uid && ! feature_enabled($owner_uid, "export_calendar")) { + if (intval($owner_uid) && local_user() !== $owner_uid && ! Feature::isEnabled($owner_uid, "export_calendar")) { return; } @@ -907,7 +908,7 @@ function widget_events() { * If it's a kind of profile page (intval($owner_uid)) return if the user not logged in and * export feature isn't enabled. */ - if (intval($owner_uid) && ! local_user() && ! feature_enabled($owner_uid, "export_calendar")) { + if (intval($owner_uid) && ! local_user() && ! Feature::isEnabled($owner_uid, "export_calendar")) { return; } diff --git a/include/features.php b/include/features.php deleted file mode 100644 index e03dc4a5be..0000000000 --- a/include/features.php +++ /dev/null @@ -1,144 +0,0 @@ - $uid, 'feature' => $feature, 'enabled' => $x); - call_hooks('feature_enabled',$arr); - return($arr['enabled']); -} - -/** - * @brief check if feature is enabled or disabled by default - * - * @param string $feature - * @return boolean - */ -function get_feature_default($feature) { - $f = get_features(); - foreach ($f as $cat) { - foreach ($cat as $feat) { - if (is_array($feat) && $feat[0] === $feature) - return $feat[3]; - } - } - return false; -} - -/** - * @brief Get a list of all available features - * - * The array includes the setting group, the setting name, - * explainations for the setting and if it's enabled or disabled - * by default - * - * @param bool $filtered True removes any locked features - * - * @return array - */ -function get_features($filtered = true) { - - $arr = array( - - // General - 'general' => array( - t('General Features'), - //array('expire', t('Content Expiration'), t('Remove old posts/comments after a period of time')), - array('multi_profiles', t('Multiple Profiles'), t('Ability to create multiple profiles'), false, Config::get('feature_lock','multi_profiles', false)), - array('photo_location', t('Photo Location'), t('Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map.'), false, Config::get('feature_lock','photo_location', false)), - array('export_calendar', t('Export Public Calendar'), t('Ability for visitors to download the public calendar'), false, Config::get('feature_lock','export_calendar', false)), - ), - - // Post composition - 'composition' => array( - t('Post Composition Features'), - array('preview', t('Post Preview'), t('Allow previewing posts and comments before publishing them'), false, Config::get('feature_lock','preview', false)), - array('aclautomention', t('Auto-mention Forums'), t('Add/remove mention when a forum page is selected/deselected in ACL window.'), false, Config::get('feature_lock','aclautomention', false)), - ), - - // Network sidebar widgets - 'widgets' => array( - t('Network Sidebar Widgets'), - array('archives', t('Search by Date'), t('Ability to select posts by date ranges'), false, Config::get('feature_lock','archives', false)), - array('forumlist_widget', t('List Forums'), t('Enable widget to display the forums your are connected with'), true, Config::get('feature_lock','forumlist_widget', false)), - array('groups', t('Group Filter'), t('Enable widget to display Network posts only from selected group'), false, Config::get('feature_lock','groups', false)), - array('networks', t('Network Filter'), t('Enable widget to display Network posts only from selected network'), false, Config::get('feature_lock','networks', false)), - array('savedsearch', t('Saved Searches'), t('Save search terms for re-use'), false, Config::get('feature_lock','savedsearch', false)), - ), - - // Network tabs - 'net_tabs' => array( - t('Network Tabs'), - array('personal_tab', t('Network Personal Tab'), t('Enable tab to display only Network posts that you\'ve interacted on'), false, Config::get('feature_lock','personal_tab', false)), - array('new_tab', t('Network New Tab'), t('Enable tab to display only new Network posts (from the last 12 hours)'), false, Config::get('feature_lock','new_tab', false)), - array('link_tab', t('Network Shared Links Tab'), t('Enable tab to display only Network posts with links in them'), false, Config::get('feature_lock','link_tab', false)), - ), - - // Item tools - 'tools' => array( - t('Post/Comment Tools'), - array('multi_delete', t('Multiple Deletion'), t('Select and delete multiple posts/comments at once'), false, Config::get('feature_lock','multi_delete', false)), - array('edit_posts', t('Edit Sent Posts'), t('Edit and correct posts and comments after sending'), false, Config::get('feature_lock','edit_posts', false)), - array('commtag', t('Tagging'), t('Ability to tag existing posts'), false, Config::get('feature_lock','commtag', false)), - array('categories', t('Post Categories'), t('Add categories to your posts'), false, Config::get('feature_lock','categories', false)), - array('filing', t('Saved Folders'), t('Ability to file posts under folders'), false, Config::get('feature_lock','filing', false)), - array('dislike', t('Dislike Posts'), t('Ability to dislike posts/comments'), false, Config::get('feature_lock','dislike', false)), - array('star_posts', t('Star Posts'), t('Ability to mark special posts with a star indicator'), false, Config::get('feature_lock','star_posts', false)), - array('ignore_posts', t('Mute Post Notifications'), t('Ability to mute notifications for a thread'), false, Config::get('feature_lock','ignore_posts', false)), - ), - - // Advanced Profile Settings - 'advanced_profile' => array( - t('Advanced Profile Settings'), - array('forumlist_profile', t('List Forums'), t('Show visitors public community forums at the Advanced Profile Page'), false, Config::get('feature_lock','forumlist_profile', false)), - array('tagadelic', t('Tag Cloud'), t('Provide a personal tag cloud on your profile page'), false, Config::get('feature_lock', 'tagadelic', false)), - ), - ); - - // removed any locked features and remove the entire category if this makes it empty - - if ($filtered) { - foreach ($arr as $k => $x) { - $has_items = false; - $kquantity = count($arr[$k]); - for ($y = 0; $y < $kquantity; $y ++) { - if (is_array($arr[$k][$y])) { - if ($arr[$k][$y][4] === false) { - $has_items = true; - } else { - unset($arr[$k][$y]); - } - } - } - if (! $has_items) { - unset($arr[$k]); - } - } - } - - call_hooks('get_features',$arr); - return $arr; -} diff --git a/include/identity.php b/include/identity.php index 3066b71130..a3a007cc18 100644 --- a/include/identity.php +++ b/include/identity.php @@ -4,6 +4,7 @@ */ use Friendica\App; +use Friendica\Content\Feature; use Friendica\Content\ForumManager; use Friendica\Core\Cache; use Friendica\Core\Config; @@ -309,7 +310,7 @@ function profile_sidebar($profile, $block = 0) } // show edit profile to yourself - if (!$is_contact && $profile['uid'] == local_user() && feature_enabled(local_user(), 'multi_profiles')) { + if (!$is_contact && $profile['uid'] == local_user() && Feature::isEnabled(local_user(), 'multi_profiles')) { $profile['edit'] = array(System::baseUrl(). '/profiles', t('Profiles'),"", t('Manage/edit profiles')); $r = q( "SELECT * FROM `profile` WHERE `uid` = %d", @@ -336,7 +337,7 @@ function profile_sidebar($profile, $block = 0) } } } - if (!$is_contact && $profile['uid'] == local_user() && !feature_enabled(local_user(), 'multi_profiles')) { + if (!$is_contact && $profile['uid'] == local_user() && !Feature::isEnabled(local_user(), 'multi_profiles')) { $profile['edit'] = array(System::baseUrl(). '/profiles/'.$profile['id'], t('Edit profile'),"", t('Edit profile')); $profile['menu'] = array( 'chg_photo' => t('Change profile photo'), @@ -790,7 +791,7 @@ function advanced_profile(App $a) } //show subcribed forum if it is enabled in the usersettings - if (feature_enabled($uid, 'forumlist_profile')) { + if (Feature::isEnabled($uid, 'forumlist_profile')) { $profile['forumlist'] = array( t('Forums:'), ForumManager::profileAdvanced($uid)); } diff --git a/include/items.php b/include/items.php index 98149dea59..cbc7af5655 100644 --- a/include/items.php +++ b/include/items.php @@ -4,6 +4,7 @@ */ use Friendica\App; use Friendica\ParseUrl; +use Friendica\Content\Feature; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Core\Worker; @@ -2355,7 +2356,7 @@ function posted_dates($uid, $wall) { function posted_date_widget($url, $uid, $wall) { $o = ''; - if (! feature_enabled($uid, 'archives')) { + if (! Feature::isEnabled($uid, 'archives')) { return $o; } diff --git a/include/nav.php b/include/nav.php index 411f0ac5da..f2bf161f9e 100644 --- a/include/nav.php +++ b/include/nav.php @@ -1,6 +1,9 @@ profile['profile_uid'], 'tagadelic')) { + if(Feature::isEnabled($a->profile['profile_uid'], 'tagadelic')) { $owner_id = Contact::getIdForURL($a->profile['url']); if(!$owner_id) { diff --git a/include/text.php b/include/text.php index 9a3d24bd1e..b2e0ac30d4 100644 --- a/include/text.php +++ b/include/text.php @@ -1,6 +1,9 @@ $url, '$search_label' => t('Search'), '$save_label' => t('Save'), - '$savedsearch' => feature_enabled(local_user(),'savedsearch'), + '$savedsearch' => Feature::isEnabled(local_user(),'savedsearch'), '$search_hint' => t('@name, !forum, #tags, content'), ); diff --git a/mod/admin.php b/mod/admin.php index 1b6975ab89..29e10bda83 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -1,11 +1,11 @@ $fdata) { foreach (array_slice($fdata, 1) as $f) { @@ -2336,7 +2336,7 @@ function admin_page_features(App $a) { if ((argc() > 1) && (argv(1) === 'features')) { $arr = array(); - $features = get_features(false); + $features = Feature::get(false); foreach ($features as $fname => $fdata) { $arr[$fname] = array(); diff --git a/mod/cal.php b/mod/cal.php index 170e7ea4c2..7eb31905b8 100644 --- a/mod/cal.php +++ b/mod/cal.php @@ -5,8 +5,8 @@ * This calendar is for profile visitors and contains only the events * of the profile owner */ - use Friendica\App; +use Friendica\Content\Feature; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Core\System; @@ -301,7 +301,7 @@ function cal_content(App $a) { // Test permissions // Respect the export feature setting for all other /cal pages if it's not the own profile - if( ((local_user() !== intval($owner_uid))) && ! feature_enabled($owner_uid, "export_calendar")) { + if( ((local_user() !== intval($owner_uid))) && ! Feature::isEnabled($owner_uid, "export_calendar")) { notice( t('Permission denied.') . EOL); goaway('cal/' . $nick); } diff --git a/mod/editpost.php b/mod/editpost.php index 57c9339047..a9cdfe9bbb 100644 --- a/mod/editpost.php +++ b/mod/editpost.php @@ -1,6 +1,9 @@ htmlspecialchars($itm[0]['title']), '$placeholdertitle' => t('Set title'), '$category' => file_tag_file_to_list($itm[0]['file'], 'category'), - '$placeholdercategory' => (feature_enabled(local_user(),'categories') ? t('Categories (comma-separated list)') : ''), + '$placeholdercategory' => (Feature::isEnabled(local_user(),'categories') ? t('Categories (comma-separated list)') : ''), '$emtitle' => t('Example: bob@example.com, mary@example.com'), '$lockstate' => $lockstate, '$acl' => '', // populate_acl((($group) ? $group_acl : $a->user)), diff --git a/mod/network.php b/mod/network.php index e74df1633a..7e61d083f6 100644 --- a/mod/network.php +++ b/mod/network.php @@ -3,6 +3,7 @@ * @file mod/network.php */ use Friendica\App; +use Friendica\Content\Feature; use Friendica\Content\ForumManager; use Friendica\Core\System; use Friendica\Core\Config; @@ -156,8 +157,8 @@ function network_init(App $a) { $a->page['aside'] = ''; } - $a->page['aside'] .= (feature_enabled(local_user(),'groups') ? group_side('network/0','network','standard',$group_id) : ''); - $a->page['aside'] .= (feature_enabled(local_user(), 'forumlist_widget') ? ForumManager::widget(local_user(), $cid) : ''); + $a->page['aside'] .= (Feature::isEnabled(local_user(),'groups') ? group_side('network/0','network','standard',$group_id) : ''); + $a->page['aside'] .= (Feature::isEnabled(local_user(), 'forumlist_widget') ? ForumManager::widget(local_user(), $cid) : ''); $a->page['aside'] .= posted_date_widget('network',local_user(),false); $a->page['aside'] .= networks_widget('network',(x($_GET, 'nets') ? $_GET['nets'] : '')); $a->page['aside'] .= saved_searches($search); @@ -166,7 +167,7 @@ function network_init(App $a) { function saved_searches($search) { - if (!feature_enabled(local_user(),'savedsearch')) { + if (!Feature::isEnabled(local_user(),'savedsearch')) { return ''; } @@ -918,7 +919,7 @@ function network_tabs(App $a) ), ); - if (feature_enabled(local_user(),'personal_tab')) { + if (Feature::isEnabled(local_user(),'personal_tab')) { $tabs[] = array( 'label' => t('Personal'), 'url' => str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&conv=1', @@ -929,7 +930,7 @@ function network_tabs(App $a) ); } - if (feature_enabled(local_user(),'new_tab')) { + if (Feature::isEnabled(local_user(),'new_tab')) { $tabs[] = array( 'label' => t('New'), 'url' => 'network/new' . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : ''), @@ -940,7 +941,7 @@ function network_tabs(App $a) ); } - if (feature_enabled(local_user(),'link_tab')) { + if (Feature::isEnabled(local_user(),'link_tab')) { $tabs[] = array( 'label' => t('Shared Links'), 'url' => str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&bmark=1', @@ -951,7 +952,7 @@ function network_tabs(App $a) ); } - if (feature_enabled(local_user(),'star_posts')) { + if (Feature::isEnabled(local_user(),'star_posts')) { $tabs[] = array( 'label' => t('Starred'), 'url' => str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&star=1', diff --git a/mod/photos.php b/mod/photos.php index 504f0ff146..3e2c44e3cd 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -3,6 +3,7 @@ * @file mod/photos.php */ use Friendica\App; +use Friendica\Content\Feature; use Friendica\Core\System; use Friendica\Core\Config; use Friendica\Core\Worker; @@ -895,7 +896,7 @@ function photos_post(App $a) { /// @TODO merge these 2 if() into one? if ($exif && $exif['GPS']) { - if (feature_enabled($channel_id,'photo_location')) { + if (Feature::isEnabled($channel_id,'photo_location')) { $lat = getGps($exif['GPS']['GPSLatitude'], $exif['GPS']['GPSLatitudeRef']); $lon = getGps($exif['GPS']['GPSLongitude'], $exif['GPS']['GPSLongitudeRef']); } @@ -1584,7 +1585,7 @@ function photos_content(App $a) { $likebuttons = replace_macros($like_tpl, array( '$id' => $link_item['id'], '$likethis' => t("I like this \x28toggle\x29"), - '$nolike' => (feature_enabled(local_user(), 'dislike') ? t("I don't like this \x28toggle\x29") : ''), + '$nolike' => (Feature::isEnabled(local_user(), 'dislike') ? t("I don't like this \x28toggle\x29") : ''), '$wait' => t('Please wait'), '$return_path' => $a->query_string, )); @@ -1735,7 +1736,7 @@ function photos_content(App $a) { $response_verbs = array('like'); - if (feature_enabled($owner_uid, 'dislike')) { + if (Feature::isEnabled($owner_uid, 'dislike')) { $response_verbs[] = 'dislike'; } $responses = get_responses($conv_responses,$response_verbs, '', $link_item); diff --git a/mod/ping.php b/mod/ping.php index 99d5777ea0..0f2a9584b8 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -3,6 +3,7 @@ * @file include/ping.php */ use Friendica\App; +use Friendica\Content\Feature; use Friendica\Content\ForumManager; use Friendica\Core\Cache; use Friendica\Core\System; @@ -149,7 +150,7 @@ function ping_init(App $a) } if ($network_count) { - if (intval(feature_enabled(local_user(), 'groups'))) { + if (intval(Feature::isEnabled(local_user(), 'groups'))) { // Find out how unseen network posts are spread across groups $group_counts = groups_count_unseen(); if (DBM::is_result($group_counts)) { @@ -161,7 +162,7 @@ function ping_init(App $a) } } - if (intval(feature_enabled(local_user(), 'forumlist_widget'))) { + if (intval(Feature::isEnabled(local_user(), 'forumlist_widget'))) { $forum_counts = ForumManager::countUnseenItems(); if (DBM::is_result($forums_counts)) { foreach ($forums_counts as $forum_count) { diff --git a/mod/profiles.php b/mod/profiles.php index 75023beb64..eca13bf10c 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -3,6 +3,7 @@ * @file mod/profiles.php */ use Friendica\App; +use Friendica\Content\Feature; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Core\System; @@ -673,10 +674,10 @@ function profiles_content(App $a) { array(t('No'), t('Yes')) //Off - On strings ), - '$multi_profiles' => feature_enabled(local_user(), 'multi_profiles'), + '$multi_profiles' => Feature::isEnabled(local_user(), 'multi_profiles'), '$form_security_token' => get_form_security_token("profile_edit"), '$form_security_token_photo' => get_form_security_token("profile_photo"), - '$profile_clone_link' => ((feature_enabled(local_user(), 'multi_profiles')) ? 'profiles/clone/' . $r[0]['id'] . '?t=' . get_form_security_token("profile_clone") : ""), + '$profile_clone_link' => ((Feature::isEnabled(local_user(), 'multi_profiles')) ? 'profiles/clone/' . $r[0]['id'] . '?t=' . get_form_security_token("profile_clone") : ""), '$profile_drop_link' => 'profiles/drop/' . $r[0]['id'] . '?t=' . get_form_security_token("profile_drop"), '$profile_action' => t('Profile Actions'), @@ -754,7 +755,7 @@ function profiles_content(App $a) { return $o; } else { // If we don't support multi profiles, don't display this list. - if (!feature_enabled(local_user(), 'multi_profiles')) { + if (!Feature::isEnabled(local_user(), 'multi_profiles')) { $r = q("SELECT * FROM `profile` WHERE `uid` = %d AND `is-default`=1", local_user() ); diff --git a/mod/search.php b/mod/search.php index 984167fd78..c17b11c5d9 100644 --- a/mod/search.php +++ b/mod/search.php @@ -1,20 +1,23 @@ t('Additional features'), 'url' => 'settings/features', @@ -784,12 +785,12 @@ function settings_content(App $a) { if (($a->argc > 1) && ($a->argv[1] === 'features')) { $arr = array(); - $features = get_features(); + $features = Feature::get(); foreach ($features as $fname => $fdata) { $arr[$fname] = array(); $arr[$fname][0] = $fdata[0]; foreach (array_slice($fdata,1) as $f) { - $arr[$fname][1][] = array('feature_' .$f[0], $f[1],((intval(feature_enabled(local_user(), $f[0]))) ? "1" : ''), $f[2],array(t('Off'), t('On'))); + $arr[$fname][1][] = array('feature_' .$f[0], $f[1],((intval(Feature::isEnabled(local_user(), $f[0]))) ? "1" : ''), $f[2],array(t('Off'), t('On'))); } } diff --git a/src/Content/Feature.php b/src/Content/Feature.php new file mode 100644 index 0000000000..864c07a0d8 --- /dev/null +++ b/src/Content/Feature.php @@ -0,0 +1,154 @@ + $uid, 'feature' => $feature, 'enabled' => $x); + call_hooks('isEnabled', $arr); + return($arr['enabled']); + } + + /** + * @brief check if feature is enabled or disabled by default + * + * @param string $feature feature + * @return boolean + */ + private static function getDefault($feature) + { + $f = self::get(); + foreach ($f as $cat) { + foreach ($cat as $feat) { + if (is_array($feat) && $feat[0] === $feature) { + return $feat[3]; + } + } + } + return false; + } + + /** + * @brief Get a list of all available features + * + * The array includes the setting group, the setting name, + * explainations for the setting and if it's enabled or disabled + * by default + * + * @param bool $filtered True removes any locked features + * + * @return array + */ + public static function get($filtered = true) + { + $arr = array( + + // General + 'general' => array( + t('General Features'), + //array('expire', t('Content Expiration'), t('Remove old posts/comments after a period of time')), + array('multi_profiles', t('Multiple Profiles'), t('Ability to create multiple profiles'), false, Config::get('feature_lock', 'multi_profiles', false)), + array('photo_location', t('Photo Location'), t('Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map.'), false, Config::get('feature_lock', 'photo_location', false)), + array('export_calendar', t('Export Public Calendar'), t('Ability for visitors to download the public calendar'), false, Config::get('feature_lock', 'export_calendar', false)), + ), + + // Post composition + 'composition' => array( + t('Post Composition Features'), + array('preview', t('Post Preview'), t('Allow previewing posts and comments before publishing them'), false, Config::get('feature_lock', 'preview', false)), + array('aclautomention', t('Auto-mention Forums'), t('Add/remove mention when a forum page is selected/deselected in ACL window.'), false, Config::get('feature_lock', 'aclautomention', false)), + ), + + // Network sidebar widgets + 'widgets' => array( + t('Network Sidebar Widgets'), + array('archives', t('Search by Date'), t('Ability to select posts by date ranges'), false, Config::get('feature_lock', 'archives', false)), + array('forumlist_widget', t('List Forums'), t('Enable widget to display the forums your are connected with'), true, Config::get('feature_lock', 'forumlist_widget', false)), + array('groups', t('Group Filter'), t('Enable widget to display Network posts only from selected group'), false, Config::get('feature_lock', 'groups', false)), + array('networks', t('Network Filter'), t('Enable widget to display Network posts only from selected network'), false, Config::get('feature_lock', 'networks', false)), + array('savedsearch', t('Saved Searches'), t('Save search terms for re-use'), false, Config::get('feature_lock', 'savedsearch', false)), + ), + + // Network tabs + 'net_tabs' => array( + t('Network Tabs'), + array('personal_tab', t('Network Personal Tab'), t('Enable tab to display only Network posts that you\'ve interacted on'), false, Config::get('feature_lock', 'personal_tab', false)), + array('new_tab', t('Network New Tab'), t('Enable tab to display only new Network posts (from the last 12 hours)'), false, Config::get('feature_lock', 'new_tab', false)), + array('link_tab', t('Network Shared Links Tab'), t('Enable tab to display only Network posts with links in them'), false, Config::get('feature_lock', 'link_tab', false)), + ), + + // Item tools + 'tools' => array( + t('Post/Comment Tools'), + array('multi_delete', t('Multiple Deletion'), t('Select and delete multiple posts/comments at once'), false, Config::get('feature_lock', 'multi_delete', false)), + array('edit_posts', t('Edit Sent Posts'), t('Edit and correct posts and comments after sending'), false, Config::get('feature_lock', 'edit_posts', false)), + array('commtag', t('Tagging'), t('Ability to tag existing posts'), false, Config::get('feature_lock', 'commtag', false)), + array('categories', t('Post Categories'), t('Add categories to your posts'), false, Config::get('feature_lock', 'categories', false)), + array('filing', t('Saved Folders'), t('Ability to file posts under folders'), false, Config::get('feature_lock', 'filing', false)), + array('dislike', t('Dislike Posts'), t('Ability to dislike posts/comments'), false, Config::get('feature_lock', 'dislike', false)), + array('star_posts', t('Star Posts'), t('Ability to mark special posts with a star indicator'), false, Config::get('feature_lock', 'star_posts', false)), + array('ignore_posts', t('Mute Post Notifications'), t('Ability to mute notifications for a thread'), false, Config::get('feature_lock', 'ignore_posts', false)), + ), + + // Advanced Profile Settings + 'advanced_profile' => array( + t('Advanced Profile Settings'), + array('forumlist_profile', t('List Forums'), t('Show visitors public community forums at the Advanced Profile Page'), false, Config::get('feature_lock', 'forumlist_profile', false)), + array('tagadelic', t('Tag Cloud'), t('Provide a personal tag cloud on your profile page'), false, Config::get('feature_lock', 'tagadelic', false)), + ), + ); + + // removed any locked features and remove the entire category if this makes it empty + + if ($filtered) { + foreach ($arr as $k => $x) { + $has_items = false; + $kquantity = count($arr[$k]); + for ($y = 0; $y < $kquantity; $y ++) { + if (is_array($arr[$k][$y])) { + if ($arr[$k][$y][4] === false) { + $has_items = true; + } else { + unset($arr[$k][$y]); + } + } + } + if (! $has_items) { + unset($arr[$k]); + } + } + } + + call_hooks('get', $arr); + return $arr; + } +} diff --git a/src/Content/ForumManager.php b/src/Content/ForumManager.php index e5d153f759..d619db42b2 100644 --- a/src/Content/ForumManager.php +++ b/src/Content/ForumManager.php @@ -6,6 +6,7 @@ namespace Friendica\Content; use Friendica\App; +use Friendica\Content\Feature; use Friendica\Core\System; use Friendica\Database\DBM; use dba; @@ -82,7 +83,7 @@ class ForumManager */ public static function widget($uid, $cid = 0) { - if (! intval(feature_enabled(local_user(), 'forumlist_widget'))) { + if (! intval(Feature::isEnabled(local_user(), 'forumlist_widget'))) { return; } @@ -141,7 +142,7 @@ class ForumManager */ public static function profileAdvanced($uid) { - $profile = intval(feature_enabled($uid, 'forumlist_profile')); + $profile = intval(Feature::isEnabled($uid, 'forumlist_profile')); if (! $profile) { return; } diff --git a/src/Object/Item.php b/src/Object/Item.php index cd05b91cf9..1533908aeb 100644 --- a/src/Object/Item.php +++ b/src/Object/Item.php @@ -5,6 +5,7 @@ namespace Friendica\Object; use Friendica\BaseObject; +use Friendica\Content\Feature; use Friendica\Core\Config; use Friendica\Core\PConfig; use Friendica\Database\DBM; @@ -161,7 +162,7 @@ class Item extends BaseObject $drop = array( 'dropping' => $dropping, - 'pagedrop' => ((feature_enabled($conv->getProfileOwner(), 'multi_delete')) ? $item['pagedrop'] : ''), + 'pagedrop' => ((Feature::isEnabled($conv->getProfileOwner(), 'multi_delete')) ? $item['pagedrop'] : ''), 'select' => t('Select'), 'delete' => t('Delete'), ); @@ -279,7 +280,7 @@ class Item extends BaseObject } $tagger = ''; - if (feature_enabled($conv->getProfileOwner(), 'commtag')) { + if (Feature::isEnabled($conv->getProfileOwner(), 'commtag')) { $tagger = array( 'add' => t("add tag"), 'class' => "", @@ -293,7 +294,7 @@ class Item extends BaseObject if ($conv->isWritable()) { $buttons = array( 'like' => array( t("I like this \x28toggle\x29"), t("like")), - 'dislike' => ((feature_enabled($conv->getProfileOwner(), 'dislike')) ? array( t("I don't like this \x28toggle\x29"), t("dislike")) : ''), + 'dislike' => ((Feature::isEnabled($conv->getProfileOwner(), 'dislike')) ? array( t("I don't like this \x28toggle\x29"), t("dislike")) : ''), ); if ($shareable) { $buttons['share'] = array( t('Share this'), t('share')); @@ -378,12 +379,12 @@ class Item extends BaseObject 'owner_photo' => $a->remove_baseurl(proxy_url($item['owner-thumb'], false, PROXY_SIZE_THUMB)), 'owner_name' => htmlentities($owner_name_e), 'plink' => get_plink($item), - 'edpost' => ((feature_enabled($conv->getProfileOwner(), 'edit_posts')) ? $edpost : ''), + 'edpost' => ((Feature::isEnabled($conv->getProfileOwner(), 'edit_posts')) ? $edpost : ''), 'isstarred' => $isstarred, - 'star' => ((feature_enabled($conv->getProfileOwner(), 'star_posts')) ? $star : ''), - 'ignore' => ((feature_enabled($conv->getProfileOwner(), 'ignore_posts')) ? $ignore : ''), + 'star' => ((Feature::isEnabled($conv->getProfileOwner(), 'star_posts')) ? $star : ''), + 'ignore' => ((Feature::isEnabled($conv->getProfileOwner(), 'ignore_posts')) ? $ignore : ''), 'tagger' => $tagger, - 'filer' => ((feature_enabled($conv->getProfileOwner(), 'filing')) ? $filer : ''), + 'filer' => ((Feature::isEnabled($conv->getProfileOwner(), 'filing')) ? $filer : ''), 'drop' => $drop, 'vote' => $buttons, 'like' => $responses['like']['output'], @@ -791,7 +792,7 @@ class Item extends BaseObject '$edimg' => t('Image'), '$edurl' => t('Link'), '$edvideo' => t('Video'), - '$preview' => ((feature_enabled($conv->getProfileOwner(), 'preview')) ? t('Preview') : ''), + '$preview' => ((Feature::isEnabled($conv->getProfileOwner(), 'preview')) ? t('Preview') : ''), '$indent' => $indent, '$sourceapp' => t($a->sourcename), '$ww' => (($conv->getMode() === 'network') ? $ww : ''),