diff --git a/boot.php b/boot.php
index 9219d5cfa0..3cf8f8e3cb 100755
--- a/boot.php
+++ b/boot.php
@@ -11,7 +11,7 @@ require_once('include/cache.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_VERSION', '2.3.1261' );
define ( 'DFRN_PROTOCOL_VERSION', '2.22' );
-define ( 'DB_UPDATE_VERSION', 1123 );
+define ( 'DB_UPDATE_VERSION', 1124 );
define ( 'EOL', "
\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
diff --git a/htconfig.php b/htconfig.php
index cb6e7b7840..01f56f2c42 100755
--- a/htconfig.php
+++ b/htconfig.php
@@ -32,6 +32,9 @@ $a->config['sitename'] = "Friendica Social Network";
// to the email address of an already registered person who can authorise
// and/or approve/deny the request.
+// In order to perform system administration via the admin panel, admin_email
+// must precisely match the email address of the person logged in.
+
$a->config['register_policy'] = REGISTER_OPEN;
$a->config['register_text'] = '';
$a->config['admin_email'] = '';
@@ -64,6 +67,10 @@ $a->config['system']['huburl'] = 'http://pubsubhubbub.appspot.com';
$a->config['system']['rino_encrypt'] = true;
+// allowed themes (change this from admin panel after installation)
+
+$a->config['system']['allowed_themes'] = 'dispy,quattro,testbubble,vier,darkbubble,darkzero,duepuntozero,greenzero,purplezero,quattro-green,slackr';
+
// default system theme
$a->config['system']['theme'] = 'duepuntozero';
diff --git a/mod/admin.php b/mod/admin.php
index 028ed8624d..d9864dc6af 100755
--- a/mod/admin.php
+++ b/mod/admin.php
@@ -6,14 +6,19 @@
require_once("include/remoteupdate.php");
function admin_post(&$a){
+
+
if(!is_site_admin()) {
return;
}
+ // do not allow a page manager to access the admin panel at all.
if(x($_SESSION,'submanage') && intval($_SESSION['submanage']))
return;
+
+
// urls
if ($a->argc > 1){
switch ($a->argv[1]){
@@ -66,6 +71,7 @@ function admin_content(&$a) {
'site' => Array($a->get_baseurl()."/admin/site/", t("Site") , "site"),
'users' => Array($a->get_baseurl()."/admin/users/", t("Users") , "users"),
'plugins'=> Array($a->get_baseurl()."/admin/plugins/", t("Plugins") , "plugins"),
+ 'themes' => Array($a->get_baseurl()."/admin/themes/", t("Themes") , "themes"),
'update' => Array($a->get_baseurl()."/admin/update/", t("Update") , "update")
);
@@ -108,6 +114,9 @@ function admin_content(&$a) {
case 'plugins':
$o = admin_page_plugins($a);
break;
+ case 'themes':
+ $o = admin_page_themes($a);
+ break;
case 'logs':
$o = admin_page_logs($a);
break;
@@ -564,7 +573,7 @@ function admin_page_plugins(&$a){
'$info' => get_plugin_info($plugin),
'$admin_form' => $admin_form,
-
+ '$function' => $plugins,
'$readme' => $readme
));
}
@@ -593,11 +602,177 @@ function admin_page_plugins(&$a){
'$page' => t('Plugins'),
'$submit' => t('Submit'),
'$baseurl' => $a->get_baseurl(),
-
+ '$function' => 'plugins',
'$plugins' => $plugins
));
}
+function toggle_theme(&$themes,$th,&$result) {
+ for($x = 0; $x < count($themes); $x ++) {
+ if($themes[$x]['name'] === $th) {
+ if($themes[$x]['allowed']) {
+ $themes[$x]['allowed'] = 0;
+ $result = 0;
+ }
+ else {
+ $themes[$x]['allowed'] = 1;
+ $result = 1;
+ }
+ }
+ }
+}
+
+function theme_status($themes,$th) {
+ for($x = 0; $x < count($themes); $x ++) {
+ if($themes[$x]['name'] === $th) {
+ if($themes[$x]['allowed']) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+ return 0;
+}
+
+
+
+function rebuild_theme_table($themes) {
+ $o = '';
+ if(count($themes)) {
+ foreach($themes as $th) {
+ if($th['allowed']) {
+ if(strlen($o))
+ $o .= ',';
+ $o .= $th['name'];
+ }
+ }
+ }
+ return $o;
+}
+
+
+/*
+ * Themes admin page
+ */
+
+function admin_page_themes(&$a){
+
+ $allowed_themes_str = get_config('system','allowed_themes');
+ $allowed_themes_raw = explode(',',$allowed_themes_str);
+ $allowed_themes = array();
+ if(count($allowed_themes_raw))
+ foreach($allowed_themes_raw as $x)
+ if(strlen(trim($x)))
+ $allowed_themes[] = trim($x);
+
+ $themes = array();
+ $files = glob('view/theme/*');
+ if($files) {
+ foreach($files as $file) {
+ $f = basename($file);
+ $is_experimental = intval(file_exists($file . '/experimental'));
+ $is_unsupported = 1-(intval(file_exists($file . '/unsupported')));
+ $is_allowed = intval(in_array($f,$allowed_themes));
+ $themes[] = array('name' => $f, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed);
+ }
+ }
+
+ if(! count($themes)) {
+ notice( t('No themes found.'));
+ return;
+ }
+
+ /**
+ * Single theme
+ */
+
+ if ($a->argc == 3){
+ $theme = $a->argv[2];
+ if(! is_dir("view/theme/$theme")){
+ notice( t("Item not found.") );
+ return;
+ }
+
+ if (x($_GET,"a") && $_GET['a']=="t"){
+
+ // Toggle theme status
+
+ toggle_theme($themes,$theme,$result);
+ $s = rebuild_theme_table($themes);
+ if($result)
+ info( sprintf('Theme %s enabled.',$theme));
+ else
+ info( sprintf('Theme %s disabled.',$theme));
+
+ set_config('system','allowed_themes',$s);
+ goaway($a->get_baseurl() . '/admin/themes' );
+ return; // NOTREACHED
+ }
+
+ // display plugin details
+ require_once('library/markdown.php');
+
+ if (theme_status($themes,$theme)) {
+ $status="on"; $action= t("Disable");
+ } else {
+ $status="off"; $action= t("Enable");
+ }
+
+ $readme=Null;
+ if (is_file("view/$theme/README.md")){
+ $readme = file_get_contents("view/$theme/README.md");
+ $readme = Markdown($readme);
+ } else if (is_file("view/$theme/README")){
+ $readme = "
". file_get_contents("view/$theme/README") .""; + } + + $admin_form=""; + + $t = get_markup_template("admin_plugins_details.tpl"); + return replace_macros($t, array( + '$title' => t('Administration'), + '$page' => t('Themes'), + '$toggle' => t('Toggle'), + '$settings' => t('Settings'), + '$baseurl' => $a->get_baseurl(), + + '$plugin' => $theme, + '$status' => $status, + '$action' => $action, + '$info' => array('name' => $theme,'version' => '','description' => ''), + '$function' => 'themes', + '$admin_form' => $admin_form, + + '$readme' => $readme + )); + } + + + + /** + * List plugins + */ + + $xthemes = array(); + if($themes) { + foreach($themes as $th) { + $xthemes[] = array($th['name'],(($th['allowed']) ? "on" : "off"),array('name' => $th['name'],'version' => '','description' => '')); + } + } + + $t = get_markup_template("admin_plugins.tpl"); + return replace_macros($t, array( + '$title' => t('Administration'), + '$page' => t('Themes'), + '$submit' => t('Submit'), + '$baseurl' => $a->get_baseurl(), + '$function' => 'themes', + '$plugins' => $xthemes + )); +} + /** * Logs admin page diff --git a/mod/follow.php b/mod/follow.php index f8964885e1..ae8cb200c7 100755 --- a/mod/follow.php +++ b/mod/follow.php @@ -49,6 +49,11 @@ function follow_init(&$a) { goaway($_SESSION['return_url']); } } + + // This just confuses things, remove it + if($ret['network'] === NETWORK_DIASPORA) + $ret['url'] = str_replace('?absolute=true','',$ret['url']); + // do we have enough information? diff --git a/mod/settings.php b/mod/settings.php index 57a4e6db03..91f4325dad 100755 --- a/mod/settings.php +++ b/mod/settings.php @@ -210,7 +210,7 @@ function settings_post(&$a) { } } - $theme = ((x($_POST,'theme')) ? notags(trim($_POST['theme'])) : ''); + $theme = ((x($_POST,'theme')) ? notags(trim($_POST['theme'])) : $a->user['theme']); $username = ((x($_POST,'username')) ? notags(trim($_POST['username'])) : ''); $email = ((x($_POST,'email')) ? notags(trim($_POST['email'])) : ''); $timezone = ((x($_POST,'timezone')) ? notags(trim($_POST['timezone'])) : ''); @@ -728,13 +728,23 @@ function settings_content(&$a) { $default_theme = get_config('system','theme'); if(! $default_theme) $default_theme = 'default'; + + $allowed_themes_str = get_config('system','allowed_themes'); + $allowed_themes_raw = explode(',',$allowed_themes_str); + $allowed_themes = array(); + if(count($allowed_themes_raw)) + foreach($allowed_themes_raw as $x) + if(strlen(trim($x))) + $allowed_themes[] = trim($x); + $themes = array(); $files = glob('view/theme/*'); - if($files) { - foreach($files as $file) { - $f = basename($file); - $is_experimental = file_exists($file . '/experimental'); + if($allowed_themes) { + foreach($allowed_themes as $th) { + $f = $th; + $is_experimental = file_exists('view/theme/' . $th . '/experimental'); + $unsupported = file_exists('view/theme/' . $th . '/unsupported'); if (!$is_experimental or ($is_experimental && (get_config('experimentals','exp_themes')==1 or get_config('experimentals','exp_themes')===false))){ $theme_name = (($is_experimental) ? sprintf("%s - \x28Experimental\x29", $f) : $f); $themes[$f]=$theme_name; diff --git a/update.php b/update.php index 16c1d78488..07555bc019 100755 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ $admin.site.1