]> git.mxchange.org Git - friendica.git/blobdiff - mod/admin.php
Cleanup /format pre-move
[friendica.git] / mod / admin.php
index b1bc8de5f20393b8c707cc549196b950f28a14ac..4c27c48f0f62e94165cef155af4d44353fa6c583 100644 (file)
@@ -6,7 +6,7 @@
  * @brief Friendica admin
  */
 
-use \Friendica\Core\Config;
+use Friendica\Core\Config;
 
 require_once("include/enotify.php");
 require_once("include/text.php");
@@ -109,6 +109,9 @@ function admin_post(App $a) {
                        case 'dbsync':
                                admin_page_dbsync_post($a);
                                break;
+                       case 'blocklist':
+                               admin_page_blocklist_post($a);
+                               break;
                }
        }
 
@@ -166,6 +169,7 @@ function admin_content(App $a) {
                'features' =>   array("admin/features/", t("Additional features") , "features"),
                'dbsync' =>     array("admin/dbsync/", t('DB updates'), "dbsync"),
                'queue'  =>     array("admin/queue/", t('Inspect Queue'), "queue"),
+               'blocklist' => array("admin/blocklist/", t('Server Blocklist'), "blocklist"),
                'federation' => array("admin/federation/", t('Federation Statistics'), "federation"),
        );
 
@@ -236,6 +240,9 @@ function admin_content(App $a) {
                        case 'federation':
                                $o = admin_page_federation($a);
                                break;
+                       case 'blocklist':
+                               $o = admin_page_blocklist($a);
+                               break;
                        default:
                                notice(t("Item not found."));
                }
@@ -252,6 +259,94 @@ function admin_content(App $a) {
        }
 }
 
+/**
+ * @brief Subpage to modify the server wide block list via the admin panel.
+ *
+ * This function generates the subpage of the admin panel to allow the
+ * modification of the node wide block/black list to block entire
+ * remote servers from communication with this node. The page allows
+ * adding, removing and editing of entries from the blocklist.
+ *
+ * @param App $a
+ * @return string
+ */
+function admin_page_blocklist(App $a) {
+       $blocklist = Config::get('system', 'blocklist');
+       $blocklistform = array();
+       if (is_array($blocklist)) {
+               foreach($blocklist as $id => $b) {
+                       $blocklistform[] = array(
+                               'domain' => array("domain[$id]", t('Blocked domain'), $b['domain'], '', t('The blocked domain'), 'required', '', ''),
+                               'reason' => array("reason[$id]", t("Reason for the block"), $b['reason'], t('The reason why you blocked this domain.').'('.$b['domain'].')', 'required', '', ''),
+                               'delete' => array("delete[$id]", t("Delete domain").' ('.$b['domain'].')', False , "Check to delete this entry from the blocklist")
+                       );
+               }
+       }
+       $t = get_markup_template("admin_blocklist.tpl");
+       return replace_macros($t, array(
+               '$title' => t('Administration'),
+               '$page' => t('Server Blocklist'),
+               '$intro' => t('This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server.'),
+               '$public' => t('The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily.'),
+               '$addtitle' => t('Add new entry to block list'),
+               '$newdomain' => array('newentry_domain', t('Server Domain'), '', t('The domain of the new server to add to the block list. Do not include the protocol.'), 'required', '', ''),
+               '$newreason' => array('newentry_reason', t('Block reason'), '', t('The reason why you blocked this domain.'), 'required', '', ''),
+               '$submit' => t('Add Entry'),
+               '$savechanges' => t('Save changes to the blocklist'),
+               '$currenttitle' => t('Current Entries in the Blocklist'),
+               '$thurl' => t('Blocked domain'),
+               '$threason' => t('Reason for the block'),
+               '$delentry' => t('Delete entry from blocklist'),
+               '$entries' => $blocklistform,
+               '$baseurl' => App::get_baseurl(true),
+               '$confirm_delete' => t('Delete entry from blocklist?'),
+               '$form_security_token'  => get_form_security_token("admin_blocklist")
+       ));
+}
+
+/**
+ * @brief Process send data from Admin Blocklist Page
+ *
+ * @param App $a
+ */
+function admin_page_blocklist_post(App $a) {
+       if (!x($_POST,"page_blocklist_save") && (!x($_POST['page_blocklist_edit']))) {
+               return;
+       }
+
+       check_form_security_token_redirectOnErr('/admin/blocklist', 'admin_blocklist');
+
+       if (x($_POST['page_blocklist_save'])) {
+               //  Add new item to blocklist
+               $blocklist = get_config('system', 'blocklist');
+               $blocklist[] = array(
+                       'domain' => notags(trim($_POST['newentry_domain'])),
+                       'reason' => notags(trim($_POST['newentry_reason']))
+               );
+               Config::set('system', 'blocklist', $blocklist);
+               info(t('Server added to blocklist.').EOL);
+       } else {
+               // Edit the entries from blocklist
+               $blocklist = array();
+               foreach ($_POST['domain'] as $id => $domain) {
+                       // Trimming whitespaces as well as any lingering slashes
+                       $domain = notags(trim($domain, "\x00..\x1F/"));
+                       $reason = notags(trim($_POST['reason'][$id]));
+                       if (!x($_POST['delete'][$id])) {
+                               $blocklist[] = array(
+                                       'domain' => $domain,
+                                       'reason' => $reason
+                               );
+                       }
+               }
+               Config::set('system', 'blocklist', $blocklist);
+               info(t('Site blocklist updated.').EOL);
+       }
+       goaway('admin/blocklist');
+
+       return; // NOTREACHED
+}
+
 /**
  * @brief Subpage with some stats about "the federation" network
  *
@@ -290,7 +385,8 @@ function admin_page_federation(App $a) {
        foreach ($platforms as $p) {
                // get a total count for the platform, the name and version of the
                // highest version and the protocol tpe
-               $c = qu('SELECT COUNT(*) AS `total`, `platform`, `network`, `version` FROM `gserver`
+               $c = qu('SELECT COUNT(*) AS `total`, ANY_VALUE(`platform`) AS `platform`,
+                               ANY_VALUE(`network`) AS `network`, MAX(`version`) AS `version` FROM `gserver`
                                WHERE `platform` LIKE "%s" AND `last_contact` >= `last_failure`
                                ORDER BY `version` ASC;', $p);
                $total = $total + $c[0]['total'];
@@ -446,7 +542,7 @@ function admin_page_summary(App $a) {
        $warningtext = array();
        if (dbm::is_result($r)) {
                $showwarning = true;
-               $warningtext[] = sprintf(t('Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href="%s">here</a> for a guide that may be helpful converting the table engines. You may also use the <tt>convert_innodb.sql</tt> in the <tt>/util</tt> directory of your Friendica installation.<br />'), 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html');
+               $warningtext[] = sprintf(t('Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href="%s">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php include/dbstructure.php toinnodb</tt> of your Friendica installation for an automatic conversion.<br />'), 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html');
        }
        // MySQL >= 5.7.4 doesn't support the IGNORE keyword in ALTER TABLE statements
        if ((version_compare($db->server_info(), '5.7.4') >= 0) AND
@@ -474,9 +570,6 @@ function admin_page_summary(App $a) {
        $r = qu("SELECT COUNT(`id`) AS `count` FROM `register`");
        $pending = $r[0]['count'];
 
-       $r = qu("SELECT COUNT(*) AS `total` FROM `deliverq` WHERE 1");
-       $deliverq = (($r) ? $r[0]['total'] : 0);
-
        $r = qu("SELECT COUNT(*) AS `total` FROM `queue` WHERE 1");
        $queue = (($r) ? $r[0]['total'] : 0);
 
@@ -485,7 +578,7 @@ function admin_page_summary(App $a) {
 
        // We can do better, but this is a quick queue status
 
-       $queues = array('label' => t('Message queues'), 'deliverq' => $deliverq, 'queue' => $queue, 'workerq' => $workerqueue);
+       $queues = array('label' => t('Message queues'), 'queue' => $queue, 'workerq' => $workerqueue);
 
 
        $t = get_markup_template("admin_summary.tpl");
@@ -629,7 +722,6 @@ function admin_page_site_post(App $a) {
        $no_multi_reg           =       ((x($_POST,'no_multi_reg'))             ? True                                          : False);
        $no_openid              =       !((x($_POST,'no_openid'))               ? True                                          : False);
        $no_regfullname         =       !((x($_POST,'no_regfullname'))          ? True                                          : False);
-       $no_utf                 =       !((x($_POST,'no_utf'))                  ? True                                          : False);
        $community_page_style   =       ((x($_POST,'community_page_style'))     ? intval(trim($_POST['community_page_style']))  : 0);
        $max_author_posts_community_page        =       ((x($_POST,'max_author_posts_community_page'))  ? intval(trim($_POST['max_author_posts_community_page']))       : 0);
 
@@ -639,6 +731,7 @@ function admin_page_site_post(App $a) {
        $timeout                =       ((x($_POST,'timeout'))                  ? intval(trim($_POST['timeout']))               : 60);
        $maxloadavg             =       ((x($_POST,'maxloadavg'))               ? intval(trim($_POST['maxloadavg']))            : 50);
        $maxloadavg_frontend    =       ((x($_POST,'maxloadavg_frontend'))      ? intval(trim($_POST['maxloadavg_frontend']))   : 50);
+       $min_memory             =       ((x($_POST,'min_memory'))               ? intval(trim($_POST['min_memory']))            : 0);
        $optimize_max_tablesize =       ((x($_POST,'optimize_max_tablesize'))   ? intval(trim($_POST['optimize_max_tablesize'])): 100);
        $optimize_fragmentation =       ((x($_POST,'optimize_fragmentation'))   ? intval(trim($_POST['optimize_fragmentation'])): 30);
        $poco_completion        =       ((x($_POST,'poco_completion'))          ? intval(trim($_POST['poco_completion']))       : false);
@@ -656,7 +749,6 @@ function admin_page_site_post(App $a) {
        $force_ssl              =       ((x($_POST,'force_ssl'))                ? True                                          : False);
        $hide_help              =       ((x($_POST,'hide_help'))                ? True                                          : False);
        $suppress_tags          =       ((x($_POST,'suppress_tags'))            ? True                                          : False);
-       $use_fulltext_engine    =       ((x($_POST,'use_fulltext_engine'))      ? True                                          : False);
        $itemcache              =       ((x($_POST,'itemcache'))                ? notags(trim($_POST['itemcache']))             : '');
        $itemcache_duration     =       ((x($_POST,'itemcache_duration'))       ? intval($_POST['itemcache_duration'])          : 0);
        $max_comments           =       ((x($_POST,'max_comments'))             ? intval($_POST['max_comments'])                : 0);
@@ -666,12 +758,17 @@ function admin_page_site_post(App $a) {
        $proxy_disabled         =       ((x($_POST,'proxy_disabled'))           ? True                                          : False);
        $only_tag_search        =       ((x($_POST,'only_tag_search'))          ? True                                          : False);
        $rino                   =       ((x($_POST,'rino'))                     ? intval($_POST['rino'])                        : 0);
-       $embedly                =       ((x($_POST,'embedly'))                  ? notags(trim($_POST['embedly']))               : '');
        $worker_queues          =       ((x($_POST,'worker_queues'))            ? intval($_POST['worker_queues'])               : 4);
        $worker_dont_fork       =       ((x($_POST,'worker_dont_fork'))         ? True                                          : False);
        $worker_fastlane        =       ((x($_POST,'worker_fastlane'))          ? True                                          : False);
        $worker_frontend        =       ((x($_POST,'worker_frontend'))          ? True                                          : False);
 
+       // Has the directory url changed? If yes, then resubmit the existing profiles there
+       if ($global_directory != Config::get('system', 'directory') AND ($global_directory != '')) {
+               Config::set('system', 'directory', $global_directory);
+               proc_run(PRIORITY_LOW, 'include/directory.php');
+       }
+
        if ($a->get_path() != "") {
                $diaspora_enabled = false;
        }
@@ -720,6 +817,7 @@ function admin_page_site_post(App $a) {
        set_config('system','ssl_policy',$ssl_policy);
        set_config('system','maxloadavg',$maxloadavg);
        set_config('system','maxloadavg_frontend',$maxloadavg_frontend);
+       set_config('system','min_memory',$min_memory);
        set_config('system','optimize_max_tablesize',$optimize_max_tablesize);
        set_config('system','optimize_fragmentation',$optimize_fragmentation);
        set_config('system','poco_completion',$poco_completion);
@@ -763,66 +861,55 @@ function admin_page_site_post(App $a) {
                } else {
                        set_config('system','singleuser', $singleuser);
                }
-       set_config('system','maximagesize', $maximagesize);
-       set_config('system','max_image_length', $maximagelength);
-       set_config('system','jpeg_quality', $jpegimagequality);
-
-       set_config('config','register_policy', $register_policy);
-       set_config('system','max_daily_registrations', $daily_registrations);
-       set_config('system','account_abandon_days', $abandon_days);
-       set_config('config','register_text', $register_text);
-       set_config('system','allowed_sites', $allowed_sites);
-       set_config('system','allowed_email', $allowed_email);
-       set_config('system','block_public', $block_public);
-       set_config('system','publish_all', $force_publish);
-       set_config('system','directory', $global_directory);
-       set_config('system','thread_allow', $thread_allow);
-       set_config('system','newuser_private', $newuser_private);
-       set_config('system','enotify_no_content', $enotify_no_content);
-       set_config('system','disable_embedded', $disable_embedded);
-       set_config('system','allow_users_remote_self', $allow_users_remote_self);
-
-       set_config('system','block_extended_register', $no_multi_reg);
-       set_config('system','no_openid', $no_openid);
-       set_config('system','no_regfullname', $no_regfullname);
-       set_config('system','community_page_style', $community_page_style);
-       set_config('system','max_author_posts_community_page', $max_author_posts_community_page);
-       set_config('system','no_utf', $no_utf);
-       set_config('system','verifyssl', $verifyssl);
-       set_config('system','proxyuser', $proxyuser);
-       set_config('system','proxy', $proxy);
-       set_config('system','curl_timeout', $timeout);
-       set_config('system','dfrn_only', $dfrn_only);
-       set_config('system','ostatus_disabled', $ostatus_disabled);
-       set_config('system','ostatus_poll_interval', $ostatus_poll_interval);
-       set_config('system','ostatus_full_threads', $ostatus_full_threads);
-       set_config('system','diaspora_enabled', $diaspora_enabled);
-
-       set_config('config','private_addons', $private_addons);
-
-       set_config('system','force_ssl', $force_ssl);
-       set_config('system','hide_help', $hide_help);
-       set_config('system','use_fulltext_engine', $use_fulltext_engine);
-       set_config('system','itemcache', $itemcache);
-       set_config('system','itemcache_duration', $itemcache_duration);
-       set_config('system','max_comments', $max_comments);
-       set_config('system','temppath', $temppath);
-       set_config('system','basepath', $basepath);
-       set_config('system','proxy_disabled', $proxy_disabled);
-       set_config('system','only_tag_search', $only_tag_search);
-       set_config('system','worker_queues', $worker_queues);
-       set_config('system','worker_dont_fork', $worker_dont_fork);
-       set_config('system','worker_fastlane', $worker_fastlane);
-       set_config('system','frontend_worker', $worker_frontend);
-
-       if (($rino == 2) and !function_exists('mcrypt_create_iv')) {
-               notice(t("RINO2 needs mcrypt php extension to work."));
-       } else {
-               set_config('system','rino_encrypt', $rino);
-       }
-
-       set_config('system','embedly', $embedly);
-
+       set_config('system', 'maximagesize', $maximagesize);
+       set_config('system', 'max_image_length', $maximagelength);
+       set_config('system', 'jpeg_quality', $jpegimagequality);
+
+       set_config('config', 'register_policy', $register_policy);
+       set_config('system', 'max_daily_registrations', $daily_registrations);
+       set_config('system', 'account_abandon_days', $abandon_days);
+       set_config('config', 'register_text', $register_text);
+       set_config('system', 'allowed_sites', $allowed_sites);
+       set_config('system', 'allowed_email', $allowed_email);
+       set_config('system', 'block_public', $block_public);
+       set_config('system', 'publish_all', $force_publish);
+       set_config('system', 'thread_allow', $thread_allow);
+       set_config('system', 'newuser_private', $newuser_private);
+       set_config('system', 'enotify_no_content', $enotify_no_content);
+       set_config('system', 'disable_embedded', $disable_embedded);
+       set_config('system', 'allow_users_remote_self', $allow_users_remote_self);
+
+       set_config('system', 'block_extended_register', $no_multi_reg);
+       set_config('system', 'no_openid', $no_openid);
+       set_config('system', 'no_regfullname', $no_regfullname);
+       set_config('system', 'community_page_style', $community_page_style);
+       set_config('system', 'max_author_posts_community_page', $max_author_posts_community_page);
+       set_config('system', 'verifyssl', $verifyssl);
+       set_config('system', 'proxyuser', $proxyuser);
+       set_config('system', 'proxy', $proxy);
+       set_config('system', 'curl_timeout', $timeout);
+       set_config('system', 'dfrn_only', $dfrn_only);
+       set_config('system', 'ostatus_disabled', $ostatus_disabled);
+       set_config('system', 'ostatus_poll_interval', $ostatus_poll_interval);
+       set_config('system', 'ostatus_full_threads', $ostatus_full_threads);
+       set_config('system', 'diaspora_enabled', $diaspora_enabled);
+
+       set_config('config', 'private_addons', $private_addons);
+
+       set_config('system', 'force_ssl', $force_ssl);
+       set_config('system', 'hide_help', $hide_help);
+       set_config('system', 'itemcache', $itemcache);
+       set_config('system', 'itemcache_duration', $itemcache_duration);
+       set_config('system', 'max_comments', $max_comments);
+       set_config('system', 'temppath', $temppath);
+       set_config('system', 'basepath', $basepath);
+       set_config('system', 'proxy_disabled', $proxy_disabled);
+       set_config('system', 'only_tag_search', $only_tag_search);
+       set_config('system', 'worker_queues', $worker_queues);
+       set_config('system', 'worker_dont_fork', $worker_dont_fork);
+       set_config('system', 'worker_fastlane', $worker_fastlane);
+       set_config('system', 'frontend_worker', $worker_frontend);
+       set_config('system', 'rino_encrypt', $rino);
 
        info(t('Site settings updated.').EOL);
        goaway('admin/site');
@@ -982,7 +1069,7 @@ function admin_page_site(App $a) {
                '$banner'               => array('banner', t("Banner/Logo"), $banner, ""),
                '$shortcut_icon'        => array('shortcut_icon', t("Shortcut icon"), get_config('system','shortcut_icon'),  t("Link to an icon that will be used for browsers.")),
                '$touch_icon'           => array('touch_icon', t("Touch icon"), get_config('system','touch_icon'),  t("Link to an icon that will be used for tablets and mobiles.")),
-               '$info'                 => array('info',t('Additional Info'), $info, sprintf(t('For public servers: you can add additional information here that will be listed at %s/siteinfo.'), get_server())),
+               '$info'                 => array('info', t('Additional Info'), $info, sprintf(t('For public servers: you can add additional information here that will be listed at %s/siteinfo.'), get_server())),
                '$language'             => array('language', t("System language"), get_config('system','language'), "", $lang_choices),
                '$theme'                => array('theme', t("System theme"), get_config('system','theme'), t("Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"), $theme_choices),
                '$theme_mobile'         => array('theme_mobile', t("Mobile system theme"), get_config('system','mobile-theme'), t("Theme for mobile devices"), $theme_choices_mobile),
@@ -1012,7 +1099,6 @@ function admin_page_site(App $a) {
                '$no_multi_reg'         => array('no_multi_reg', t("Block multiple registrations"),  get_config('system','block_extended_register'), t("Disallow users to register additional accounts for use as pages.")),
                '$no_openid'            => array('no_openid', t("OpenID support"), !get_config('system','no_openid'), t("OpenID support for registration and logins.")),
                '$no_regfullname'       => array('no_regfullname', t("Fullname check"), !get_config('system','no_regfullname'), t("Force users to register with a space between firstname and lastname in Full name, as an antispam measure")),
-               '$no_utf'               => array('no_utf', t("UTF-8 Regular expressions"), !get_config('system','no_utf'), t("Use PHP UTF8 regular expressions")),
                '$community_page_style' => array('community_page_style', t("Community Page Style"), get_config('system','community_page_style'), t("Type of community page to show. 'Global community' shows every public posting from an open distributed network that arrived on this server."), $community_page_style_choices),
                '$max_author_posts_community_page' => array('max_author_posts_community_page', t("Posts per user on community page"), get_config('system','max_author_posts_community_page'), t("The maximum number of posts per user on the community page. (Not valid for 'Global Community')")),
                '$ostatus_disabled'     => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disabled'), t("Provide built-in OStatus \x28StatusNet, GNU Social etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")),
@@ -1029,6 +1115,7 @@ function admin_page_site(App $a) {
                '$timeout'              => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")),
                '$maxloadavg'           => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
                '$maxloadavg_frontend'  => array('maxloadavg_frontend', t("Maximum Load Average (Frontend)"), ((intval(get_config('system','maxloadavg_frontend')) > 0)?get_config('system','maxloadavg_frontend'):50), t("Maximum system load before the frontend quits service - default 50.")),
+               '$min_memory'           => array('min_memory', t("Minimal Memory"), ((intval(get_config('system','min_memory')) > 0)?get_config('system','min_memory'):0), t("Minimal free memory in MB for the poller. Needs access to /proc/meminfo - default 0 (deactivated).")),
                '$optimize_max_tablesize'=> array('optimize_max_tablesize', t("Maximum table size for optimization"), $optimize_max_tablesize, t("Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it.")),
                '$optimize_fragmentation'=> array('optimize_fragmentation', t("Minimum level of fragmentation"), ((intval(get_config('system','optimize_fragmentation')) > 0)?get_config('system','optimize_fragmentation'):30), t("Minimum fragmenation level to start the automatic optimization - default value is 30%.")),
 
@@ -1040,7 +1127,6 @@ function admin_page_site(App $a) {
 
                '$nodeinfo'             => array('nodeinfo', t("Publish server information"), get_config('system','nodeinfo'), t("If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See <a href='http://the-federation.info/'>the-federation.info</a> for details.")),
 
-               '$use_fulltext_engine'  => array('use_fulltext_engine', t("Use MySQL full text engine"), get_config('system','use_fulltext_engine'), t("Activates the full text engine. Speeds up search - but can only search for four and more characters.")),
                '$suppress_tags'        => array('suppress_tags', t("Suppress Tags"), get_config('system','suppress_tags'), t("Suppress showing a list of hashtags at the end of the posting.")),
                '$itemcache'            => array('itemcache', t("Path to item cache"), get_config('system','itemcache'), t("The item caches buffers generated bbcode and external images.")),
                '$itemcache_duration'   => array('itemcache_duration', t("Cache duration in seconds"), get_config('system','itemcache_duration'), t("How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1.")),
@@ -1053,7 +1139,6 @@ function admin_page_site(App $a) {
                '$relocate_url'         => array('relocate_url', t("New base url"), App::get_baseurl(), t("Change base url for this server. Sends relocate message to all DFRN contacts of all users.")),
 
                '$rino'                 => array('rino', t("RINO Encryption"), intval(get_config('system','rino_encrypt')), t("Encryption layer between nodes."), array("Disabled", "RINO1 (deprecated)", "RINO2")),
-               '$embedly'              => array('embedly', t("Embedly API key"), get_config('system','embedly'), t("<a href='http://embed.ly'>Embedly</a> is used to fetch additional data for web pages. This is an optional parameter.")),
 
                '$worker_queues'        => array('worker_queues', t("Maximum number of parallel workers"), get_config('system','worker_queues'), t("On shared hosters set this to 2. On larger systems, values of 10 are great. Default value is 4.")),
                '$worker_dont_fork'     => array('worker_dont_fork', t("Don't use 'proc_open' with the worker"), get_config('system','worker_dont_fork'), t("Enable this if your system doesn't allow the use of 'proc_open'. This can happen on shared hosters. If this is enabled you should increase the frequency of poller calls in your crontab.")),
@@ -2017,22 +2102,22 @@ function admin_page_features_post(App $a) {
        $features = get_features(false);
 
        foreach ($features as $fname => $fdata) {
-               foreach (array_slice($fdata,1) as $f) {
+               foreach (array_slice($fdata, 1) as $f) {
                        $feature = $f[0];
-                       $feature_state = 'feature_'.$feature;
-                       $featurelock = 'featurelock_'.$feature;
+                       $feature_state = 'feature_' . $feature;
+                       $featurelock = 'featurelock_' . $feature;
 
-                       if (x($_POST[$feature_state])) {
-                               $val = intval($_POST['feature_'.$feature]);
+                       if (x($_POST, $feature_state)) {
+                               $val = intval($_POST[$feature_state]);
                        } else {
                                $val = 0;
                        }
                        set_config('feature',$feature,$val);
 
-                       if (x($_POST[$featurelock])) {
-                               set_config('feature_lock',$feature,$val);
+                       if (x($_POST, $featurelock)) {
+                               set_config('feature_lock', $feature, $val);
                        } else {
-                               del_config('feature_lock',$feature);
+                               del_config('feature_lock', $feature);
                        }
                }
        }
@@ -2071,8 +2156,8 @@ function admin_page_features(App $a) {
                                        $set = $f[3];
                                }
                                $arr[$fname][1][] = array(
-                                       array('feature_' .$f[0],$f[1],$set,$f[2],array(t('Off'),t('On'))),
-                                       array('featurelock_' .$f[0],sprintf(t('Lock feature %s'),$f[1]),(($f[4] !== false) ? "1" : ''),'',array(t('Off'),t('On')))
+                                       array('feature_' .$f[0],$f[1],$set,$f[2],array(t('Off'), t('On'))),
+                                       array('featurelock_' .$f[0],sprintf(t('Lock feature %s'),$f[1]),(($f[4] !== false) ? "1" : ''),'',array(t('Off'), t('On')))
                                );
                        }
                }