* @brief Friendica admin
*/
-use \Friendica\Core\Config;
+use Friendica\App;
+use Friendica\Core\System;
+use Friendica\Core\Config;
require_once("include/enotify.php");
require_once("include/text.php");
+require_once('include/items.php');
/**
* @brief Process send data from the admin panels subpages
case 'dbsync':
admin_page_dbsync_post($a);
break;
+ case 'blocklist':
+ admin_page_blocklist_post($a);
+ break;
+ case 'deleteitem':
+ admin_page_deleteitem_post($a);
+ break;
}
}
'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"),
+ 'deleteitem' => array("admin/deleteitem/", t('Delete Item'), 'deleteitem'),
);
/* get plugins admin page */
case 'federation':
$o = admin_page_federation($a);
break;
+ case 'blocklist':
+ $o = admin_page_blocklist($a);
+ break;
+ case 'deleteitem':
+ $o = admin_page_deleteitem($a);
+ break;
default:
notice(t("Item not found."));
}
}
}
+/**
+ * @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 , t("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' => System::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 where the admin can delete an item from their node given the GUID
+ *
+ * This subpage of the admin panel offers the nodes admin to delete an item from
+ * the node, given the GUID or the display URL such as http://example.com/display/123456.
+ * The item will then be marked as deleted in the database and processed accordingly.
+ *
+ * @param App $a
+ * @return string
+ */
+function admin_page_deleteitem(App $a) {
+ $t = get_markup_template("admin_deleteitem.tpl");
+
+ return replace_macros($t, array(
+ '$title' => t('Administration'),
+ '$page' => t('Delete Item'),
+ '$submit' => t('Delete this Item'),
+ '$intro1' => t('On this page you can delete an item from your node. If the item is a top level posting, the entire thread will be deleted.'),
+ '$intro2' => t('You need to know the GUID of the item. You can find it e.g. by looking at the display URL. The last part of http://example.com/display/123456 is the GUID, here 123456.'),
+ '$deleteitemguid' => array('deleteitemguid', t("GUID"), '', t("The GUID of the item you want to delete."), 'required', 'autofocus'),
+ '$baseurl' => System::baseUrl(),
+ '$form_security_token' => get_form_security_token("admin_deleteitem")
+ ));
+}
+/**
+ * @brief Process send data from Admin Delete Item Page
+ *
+ * The GUID passed through the form should be only the GUID. But we also parse
+ * URLs like the full /display URL to make the process more easy for the admin.
+ *
+ * @param App $a
+ */
+function admin_page_deleteitem_post(App $a) {
+ if (!x($_POST['page_deleteitem_submit'])) {
+ return;
+ }
+
+ check_form_security_token_redirectOnErr('/admin/deleteitem/', 'admin_deleteitem');
+
+ if (x($_POST['page_deleteitem_submit'])) {
+ $guid = trim(notags($_POST['deleteitemguid']));
+ // The GUID should not include a "/", so if there is one, we got an URL
+ // and the last part of it is most likely the GUID.
+ if (strpos($guid, '/')) {
+ $guid = substr($guid, strrpos($guid, '/')+1);
+ }
+ // Now that we have the GUID get all IDs of the associated entries in the
+ // item table of the DB and drop those items, which will also delete the
+ // associated threads.
+ $r = dba::select('item', array('id'), array('guid'=>$guid));
+ while ($row = dba::fetch($r)) {
+ drop_item($row['id'], false);
+ }
+ dba::close($r);
+ }
+
+ info(t('Item marked for deletion.').EOL);
+ goaway('admin/deleteitem');
+ return; // NOTREACHED
+}
+
/**
* @brief Subpage with some stats about "the federation" network
*
// off one % two of them are needed in the query
// Add more platforms if you like, when one returns 0 known nodes it is not
// displayed on the stats page.
- $platforms = array('Friendi%%a', 'Diaspora', '%%red%%', 'Hubzilla', 'BlaBlaNet', 'GNU Social', 'StatusNet', 'Mastodon');
+ $platforms = array('Friendi%%a', 'Diaspora', '%%red%%', 'Hubzilla', 'BlaBlaNet', 'GNU Social', 'StatusNet', 'Mastodon', 'Pleroma');
$colors = array('Friendi%%a' => '#ffc018', // orange from the logo
'Diaspora' => '#a1a1a1', // logo is black and white, makes a gray
'%%red%%' => '#c50001', // fire red from the logo
'BlaBlaNet' => '#3B5998', // blue from the navbar at blablanet-dot-com
'GNU Social'=> '#a22430', // dark red from the logo
'StatusNet' => '#789240', // the green from the logo (red and blue have already others
- 'Mastodon' => '#1a9df9'); // blue from the Mastodon logo
+ 'Mastodon' => '#1a9df9', // blue from the Mastodon logo
+ 'Pleroma' => '#E46F0F'); // Orange from the text that is used on Pleroma instances
$counts = array();
$total = 0;
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`, ANY_VALUE(`platform`) AS `platform`,
+ $c = q('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);
// what versions for that platform do we know at all?
// again only the active nodes
- $v = qu('SELECT COUNT(*) AS `total`, `version` FROM `gserver`
+ $v = q('SELECT COUNT(*) AS `total`, `version` FROM `gserver`
WHERE `last_contact` >= `last_failure` AND `platform` LIKE "%s"
GROUP BY `version`
ORDER BY `version`;', $p);
'$counts' => $counts,
'$version' => FRIENDICA_VERSION,
'$legendtext' => sprintf(t('Currently this node is aware of %d nodes from the following platforms:'), $total),
- '$baseurl' => App::get_baseurl(),
+ '$baseurl' => System::baseUrl(),
));
}
$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
- !(strpos($db->server_info(), 'MariaDB') !== false)) {
- $warningtext[] = t('You are using a MySQL version which does not support all features that Friendica uses. You should consider switching to MariaDB.');
+
+ if (Config::get('system', 'dbupdate', DB_UPDATE_NOT_CHECKED) == DB_UPDATE_NOT_CHECKED) {
+ require_once("include/dbstructure.php");
+ update_structure(false, true);
}
+ if (Config::get('system', 'dbupdate') == DB_UPDATE_FAILED) {
+ $showwarning = true;
+ $warningtext[] = t('The database update failed. Please run "php include/dbstructure.php update" from the command line and have a look at the errors that might appear.');
+ }
+
$r = q("SELECT `page-flags`, COUNT(`uid`) AS `count` FROM `user` GROUP BY `page-flags`");
$accounts = array(
array(t('Normal Account'), 0),
- array(t('Soapbox Account'), 0),
- array(t('Community/Celebrity Account'), 0),
+ array(t('Automatic Follower Account'), 0),
+ array(t('Public Forum Account'), 0),
array(t('Automatic Friend Account'), 0),
array(t('Blog Account'), 0),
- array(t('Private Forum'), 0)
+ array(t('Private Forum Account'), 0)
);
$users=0;
logger('accounts: '.print_r($accounts,true),LOGGER_DATA);
- $r = qu("SELECT COUNT(`id`) AS `count` FROM `register`");
+ $r = q("SELECT COUNT(`id`) AS `count` FROM `register`");
$pending = $r[0]['count'];
- $r = qu("SELECT COUNT(*) AS `total` FROM `queue` WHERE 1");
+ $r = q("SELECT COUNT(*) AS `total` FROM `queue` WHERE 1");
$queue = (($r) ? $r[0]['total'] : 0);
- $r = qu("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE 1");
+ $r = q("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE NOT `done`");
$workerqueue = (($r) ? $r[0]['total'] : 0);
// We can do better, but this is a quick queue status
'$accounts' => $accounts,
'$pending' => array(t('Pending registrations'), $pending),
'$version' => array(t('Version'), FRIENDICA_VERSION),
- '$baseurl' => App::get_baseurl(),
+ '$baseurl' => System::baseUrl(),
'$platform' => FRIENDICA_PLATFORM,
'$codename' => FRIENDICA_CODENAME,
'$build' => get_config('system','build'),
* send relocate for every local user
* */
- $old_url = App::get_baseurl(true);
+ $old_url = System::baseUrl(true);
// Generate host names for relocation the addresses in the format user@address.tld
$new_host = str_replace("http://", "@", normalise_link($new_url));
$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);
$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 != '')) {
+ if ($global_directory != Config::get('system', 'directory') && ($global_directory != '')) {
Config::set('system', 'directory', $global_directory);
proc_run(PRIORITY_LOW, 'include/directory.php');
}
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);
set_config('system', 'force_ssl', $force_ssl);
set_config('system', 'hide_help', $hide_help);
+
+ if ($itemcache != '') {
+ $itemcache = App::realpath($itemcache);
+ }
+
set_config('system', 'itemcache', $itemcache);
set_config('system', 'itemcache_duration', $itemcache_duration);
set_config('system', 'max_comments', $max_comments);
+
+ if ($temppath != '') {
+ $temppath = App::realpath($temppath);
+ }
+
set_config('system', 'temppath', $temppath);
+
+ if ($basepath != '') {
+ $basepath = App::realpath($basepath);
+ }
+
set_config('system', 'basepath', $basepath);
set_config('system', 'proxy_disabled', $proxy_disabled);
set_config('system', 'only_tag_search', $only_tag_search);
/* Installed langs */
$lang_choices = get_available_languages();
- if (strlen(get_config('system','directory_submit_url')) AND
+ if (strlen(get_config('system','directory_submit_url')) &&
!strlen(get_config('system','directory'))) {
set_config('system','directory', dirname(get_config('system','directory_submit_url')));
del_config('system','directory_submit_url');
$f = basename($file);
// Only show allowed themes here
- if (($allowed_theme_list != '') AND !strstr($allowed_theme_list, $f)) {
+ if (($allowed_theme_list != '') && !strstr($allowed_theme_list, $f)) {
continue;
}
'$performance' => t('Performance'),
'$worker_title' => t('Worker'),
'$relocate'=> t('Relocate - WARNING: advanced function. Could make this server unreachable.'),
- '$baseurl' => App::get_baseurl(true),
+ '$baseurl' => System::baseUrl(true),
// name, label, value, help string, extra data...
'$sitename' => array('sitename', t("Site name"), $a->config['sitename'],''),
'$hostname' => array('hostname', t("Host name"), $a->config['hostname'], ""),
'$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%.")),
'$proxy_disabled' => array('proxy_disabled', t("Disable picture proxy"), get_config('system','proxy_disabled'), t("The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith.")),
'$only_tag_search' => array('only_tag_search', t("Only search in tags"), get_config('system','only_tag_search'), t("On large systems the text search can slow down the system extremely.")),
- '$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.")),
+ '$relocate_url' => array('relocate_url', t("New base url"), System::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")),
'$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.")),
'$worker_fastlane' => array('worker_fastlane', t("Enable fastlane"), get_config('system','worker_fastlane'), t("When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority.")),
- '$worker_frontend' => array('worker_frontend', t('Enable frontend worker'), get_config('system','frontend_worker'), t('When enabled the Worker process is triggered when backend access is performed (e.g. messages being delivered). On smaller sites you might want to call yourdomain.tld/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server. The worker background process needs to be activated for this.')),
+ '$worker_frontend' => array('worker_frontend', t('Enable frontend worker'), get_config('system','frontend_worker'), sprintf(t('When enabled the Worker process is triggered when backend access is performed (e.g. messages being delivered). On smaller sites you might want to call %s/worker on a regular basis via an external cron job. You should only enable this option if you cannot utilize cron/scheduled jobs on your server.'), System::baseUrl())),
'$form_security_token' => get_form_security_token("admin_site")
goaway('admin/dbsync');
}
- if (($a->argc > 2) AND (intval($a->argv[2]) OR ($a->argv[2] === 'check'))) {
+ if (($a->argc > 2) && (intval($a->argv[2]) || ($a->argv[2] === 'check'))) {
require_once("include/dbstructure.php");
$retval = update_structure(false, true);
if (!$retval) {
}
if (! count($failed)) {
$o = replace_macros(get_markup_template('structure_check.tpl'),array(
- '$base' => App::get_baseurl(true),
+ '$base' => System::baseUrl(true),
'$banner' => t('No failed updates.'),
'$check' => t('Check database structure'),
));
} else {
$o = replace_macros(get_markup_template('failed_updates.tpl'),array(
- '$base' => App::get_baseurl(true),
+ '$base' => System::baseUrl(true),
'$banner' => t('Failed Updates'),
'$desc' => t('This does not include updates prior to 1139, which did not return a status.'),
'$mark' => t('Mark success (if update was manually applied)'),
Thank you and welcome to %4$s.'));
$preamble = sprintf($preamble, $nu['username'], $a->config['sitename']);
- $body = sprintf($body, App::get_baseurl(), $nu['email'], $result['password'], $a->config['sitename']);
+ $body = sprintf($body, System::baseUrl(), $nu['email'], $result['password'], $a->config['sitename']);
notification(array(
- 'type' => "SYSTEM_EMAIL",
+ 'type' => SYSTEM_EMAIL,
'to_email' => $nu['email'],
'subject'=> sprintf(t('Registration details for %s'), $a->config['sitename']),
'preamble'=> $preamble,
/* get users */
- $total = qu("SELECT COUNT(*) AS `total` FROM `user` WHERE 1");
+ $total = q("SELECT COUNT(*) AS `total` FROM `user` WHERE 1");
if (count($total)) {
$a->set_pager_total($total[0]['total']);
$a->set_pager_itemspage(100);
$sql_order = "`".str_replace('.','`.`',$order)."`";
$sql_order_direction = ($order_direction === "+")?"ASC":"DESC";
- $users = qu("SELECT `user`.*, `contact`.`name`, `contact`.`url`, `contact`.`micro`, `user`.`account_expired`, `contact`.`last-item` AS `lastitem_date`
+ $users = q("SELECT `user`.*, `contact`.`name`, `contact`.`url`, `contact`.`micro`, `user`.`account_expired`, `contact`.`last-item` AS `lastitem_date`
FROM `user`
INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self`
WHERE `user`.`verified`
$_setup_users = function ($e) use ($adminlist) {
$accounts = array(
t('Normal Account'),
- t('Soapbox Account'),
- t('Community/Celebrity Account'),
+ t('Automatic Follower Account'),
+ t('Public Forum Account'),
t('Automatic Friend Account')
);
$e['page-flags'] = $accounts[$e['page-flags']];
'$form_security_token' => get_form_security_token("admin_users"),
// values //
- '$baseurl' => App::get_baseurl(true),
+ '$baseurl' => System::baseUrl(true),
'$pending' => $pending,
'deleted' => $deleted,
$readme=Null;
if (is_file("addon/$plugin/README.md")) {
$readme = file_get_contents("addon/$plugin/README.md");
- $readme = Markdown($readme);
+ $readme = Markdown($readme, false);
} elseif (is_file("addon/$plugin/README")) {
$readme = "<pre>". file_get_contents("addon/$plugin/README") ."</pre>";
}
'$page' => t('Plugins'),
'$toggle' => t('Toggle'),
'$settings' => t('Settings'),
- '$baseurl' => App::get_baseurl(true),
+ '$baseurl' => System::baseUrl(true),
'$plugin' => $plugin,
'$status' => $status,
*/
if (x($_GET,"a") && $_GET['a']=="r") {
- check_form_security_token_redirectOnErr(App::get_baseurl().'/admin/plugins', 'admin_themes', 't');
+ check_form_security_token_redirectOnErr(System::baseUrl().'/admin/plugins', 'admin_themes', 't');
reload_plugins();
info("Plugins reloaded");
- goaway(App::get_baseurl().'/admin/plugins');
+ goaway(System::baseUrl().'/admin/plugins');
}
$plugins = array();
$show_plugin = true;
// If the addon is unsupported, then only show it, when it is enabled
- if ((strtolower($info["status"]) == "unsupported") AND !in_array($id, $a->plugins)) {
+ if ((strtolower($info["status"]) == "unsupported") && !in_array($id, $a->plugins)) {
$show_plugin = false;
}
'$page' => t('Plugins'),
'$submit' => t('Save Settings'),
'$reload' => t('Reload active plugins'),
- '$baseurl' => App::get_baseurl(true),
+ '$baseurl' => System::baseUrl(true),
'$function' => 'plugins',
'$plugins' => $plugins,
'$pcount' => count($plugins),
$is_supported = 1-(intval(file_exists($file.'/unsupported')));
$is_allowed = intval(in_array($f,$allowed_themes));
- if ($is_allowed OR $is_supported OR get_config("system", "show_unsupported_themes")) {
+ if ($is_allowed || $is_supported || get_config("system", "show_unsupported_themes")) {
$themes[] = array('name' => $f, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed);
}
}
$readme = Null;
if (is_file("view/theme/$theme/README.md")) {
$readme = file_get_contents("view/theme/$theme/README.md");
- $readme = Markdown($readme);
+ $readme = Markdown($readme, false);
} elseif (is_file("view/theme/$theme/README")) {
$readme = "<pre>". file_get_contents("view/theme/$theme/README") ."</pre>";
}
'$page' => t('Themes'),
'$toggle' => t('Toggle'),
'$settings' => t('Settings'),
- '$baseurl' => App::get_baseurl(true),
+ '$baseurl' => System::baseUrl(true),
'$plugin' => $theme,
'$status' => $status,
'$action' => $action,
// reload active themes
if (x($_GET,"a") && $_GET['a']=="r") {
- check_form_security_token_redirectOnErr(App::get_baseurl().'/admin/themes', 'admin_themes', 't');
+ check_form_security_token_redirectOnErr(System::baseUrl().'/admin/themes', 'admin_themes', 't');
if ($themes) {
foreach ($themes as $th) {
if ($th['allowed']) {
}
}
info("Themes reloaded");
- goaway(App::get_baseurl().'/admin/themes');
+ goaway(System::baseUrl().'/admin/themes');
}
/*
'$page' => t('Themes'),
'$submit' => t('Save Settings'),
'$reload' => t('Reload active themes'),
- '$baseurl' => App::get_baseurl(true),
+ '$baseurl' => System::baseUrl(true),
'$function' => 'themes',
'$plugins' => $xthemes,
'$pcount' => count($themes),
'$page' => t('Logs'),
'$submit' => t('Save Settings'),
'$clear' => t('Clear'),
- '$baseurl' => App::get_baseurl(true),
+ '$baseurl' => System::baseUrl(true),
'$logname' => get_config('system','logfile'),
// name, label, value, help string, extra data...