]> git.mxchange.org Git - friendica.git/blobdiff - mod/admin.php
bugs #312, #313
[friendica.git] / mod / admin.php
index e444040973a996812daa8e65d8de834b043b5285..93714bb5f9079c695da18bdb63333df38a84ea0a 100755 (executable)
@@ -6,10 +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]){
@@ -50,6 +59,9 @@ function admin_content(&$a) {
                return login(false);
        }
 
+       if(x($_SESSION,'submanage') && intval($_SESSION['submanage']))
+               return;
+
        /**
         * Side bar links
         */
@@ -59,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")
        );
        
@@ -101,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;
@@ -129,9 +145,10 @@ function admin_page_summary(&$a) {
                Array( t('Automatic Friend Account'), 0)
        );
        $users=0;
-       foreach ($r as $u){ $accounts[$u['page-flags']][1] = $u['count']; $users+=$u['count']; }
+       foreach ($r as $u){ $accounts[$u['page-flags']][1] = $u['count']; $users+= $u['count']; }
+
+       logger('accounts: ' . print_r($accounts,true));
 
-       
        $r = q("SELECT COUNT(id) as `count` FROM `register`");
        $pending = $r[0]['count'];
        
@@ -304,32 +321,32 @@ function admin_page_site(&$a) {
                '$sitename'             => array('sitename', t("Site name"), htmlentities($a->config['sitename'], ENT_QUOTES), ""),
                '$banner'                       => array('banner', t("Banner/Logo"), $banner, ""),
                '$language'             => array('language', t("System language"), get_config('system','language'), "", $lang_choices),
-               '$theme'                        => array('theme', t("System theme"), get_config('system','theme'), "Default system theme (which may be over-ridden by user profiles)", $theme_choices),
+               '$theme'                        => array('theme', t("System theme"), get_config('system','theme'), t("Default system theme - may be over-ridden by user profiles"), $theme_choices),
 
-               '$maximagesize'         => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), "Maximum size in bytes of uploaded images. Default is 0, which means no limits."),
+               '$maximagesize'         => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")),
 
                '$register_policy'      => array('register_policy', t("Register policy"), $a->config['register_policy'], "", $register_choices),
-               '$register_text'        => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES), "Will be displayed prominently on the registration page."),
+               '$register_text'        => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES), t("Will be displayed prominently on the registration page.")),
                '$abandon_days'     => array('abandon_days', t('Accounts abandoned after x days'), get_config('system','account_abandon_days'), t('Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.')),
-               '$allowed_sites'        => array('allowed_sites', t("Allowed friend domains"), get_config('system','allowed_sites'), "Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"),
-               '$allowed_email'        => array('allowed_email', t("Allowed email domains"), get_config('system','allowed_email'), "Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"),
-               '$block_public'         => array('block_public', t("Block public"), get_config('system','block_public'), "Check to block public access to all otherwise public personal pages on this site unless you are currently logged in."),
-               '$force_publish'        => array('publish_all', t("Force publish"), get_config('system','publish_all'), "Check to force all profiles on this site to be listed in the site directory."),
-               '$global_directory'     => array('directory_submit_url', t("Global directory update URL"), get_config('system','directory_submit_url'), "URL to update the global directory. If this is not set, the global directory is completely unavailable to the application."),
+               '$allowed_sites'        => array('allowed_sites', t("Allowed friend domains"), get_config('system','allowed_sites'), t("Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains")),
+               '$allowed_email'        => array('allowed_email', t("Allowed email domains"), get_config('system','allowed_email'), t("Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains")),
+               '$block_public'         => array('block_public', t("Block public"), get_config('system','block_public'), t("Check to block public access to all otherwise public personal pages on this site unless you are currently logged in.")),
+               '$force_publish'        => array('publish_all', t("Force publish"), get_config('system','publish_all'), t("Check to force all profiles on this site to be listed in the site directory.")),
+               '$global_directory'     => array('directory_submit_url', t("Global directory update URL"), get_config('system','directory_submit_url'), t("URL to update the global directory. If this is not set, the global directory is completely unavailable to the application.")),
                        
-               '$no_multi_reg'         => array('no_multi_reg', t("Block multiple registrations"),  get_config('system','block_extended_register'), "Disallow users to register additional accounts for use as pages."),
-               '$no_openid'            => array('no_openid', t("OpenID support"), !get_config('system','no_openid'), "OpenID support for registration and logins."),
-               '$no_gravatar'          => array('no_gravatar', t("Gravatar support"), !get_config('system','no_gravatar'), "Search new user's photo on Gravatar."),
-               '$no_regfullname'       => array('no_regfullname', t("Fullname check"), !get_config('system','no_regfullname'), "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'), "Use PHP UTF8 regular expressions"),
-               '$no_community_page' => array('no_community_page', t("Show Community Page"), !get_config('system','no_community_page'), "Display a Community page showing all recent public postings on this site."),
-               '$ostatus_disabled' => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disable'), "Provide built-in OStatus \x28identi.ca, status.net, etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed."),    
-               '$diaspora_enabled' => array('diaspora_enabled', t("Enable Diaspora support"), get_config('system','diaspora_enabled'), "Provide built-in Diaspora network compatibility."),    
-               '$dfrn_only'        => array('dfrn_only', t('Only allow Friendica contacts'), get_config('system','dfrn_only'), "All contacts must use Friendica protocols. All other built-in communication protocols disabled."),
-               '$verifyssl'            => array('verifyssl', t("Verify SSL"), get_config('system','verifyssl'), "If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites."),
+               '$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_gravatar'          => array('no_gravatar', t("Gravatar support"), !get_config('system','no_gravatar'), t("Search new user's photo on Gravatar.")),
+               '$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")),
+               '$no_community_page' => array('no_community_page', t("Show Community Page"), !get_config('system','no_community_page'), t("Display a Community page showing all recent public postings on this site.")),
+               '$ostatus_disabled' => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disable'), t("Provide built-in OStatus \x28identi.ca, status.net, etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")), 
+               '$diaspora_enabled' => array('diaspora_enabled', t("Enable Diaspora support"), get_config('system','diaspora_enabled'), t("Provide built-in Diaspora network compatibility.")), 
+               '$dfrn_only'        => array('dfrn_only', t('Only allow Friendica contacts'), get_config('system','dfrn_only'), t("All contacts must use Friendica protocols. All other built-in communication protocols disabled.")),
+               '$verifyssl'            => array('verifyssl', t("Verify SSL"), get_config('system','verifyssl'), t("If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.")),
                '$proxyuser'            => array('proxyuser', t("Proxy user"), get_config('system','proxyuser'), ""),
                '$proxy'                        => array('proxy', t("Proxy URL"), get_config('system','proxy'), ""),
-               '$timeout'                      => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), "Value is in seconds. Set to 0 for unlimited (not recommended)."),
+               '$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).")),
 
                        
        ));
@@ -350,7 +367,7 @@ function admin_page_users_post(&$a){
                                intval( $uid )
                        );
                }
-               notice( sprintf( tt("%s user blocked", "%s users blocked/unblocked", count($users)), count($users)) );
+               notice( sprintf( tt("%s user blocked/unblocked", "%s users blocked/unblocked", count($users)), count($users)) );
        }
        if (x($_POST,'page_users_delete')){
                require_once("include/Contact.php");
@@ -412,6 +429,7 @@ function admin_page_users(&$a){
                                 LEFT JOIN `contact` ON `register`.`uid` = `contact`.`uid`
                                 LEFT JOIN `user` ON `register`.`uid` = `user`.`uid`;");
        
+       
        /* get users */
 
        $total = q("SELECT count(*) as total FROM `user` where 1");
@@ -419,7 +437,8 @@ function admin_page_users(&$a){
                $a->set_pager_total($total[0]['total']);
                $a->set_pager_itemspage(100);
        }
-
+       
+       
        $users = q("SELECT `user` . * , `contact`.`name` , `contact`.`url` , `contact`.`micro`, `lastitem`.`lastitem_date`
                                FROM
                                        (SELECT MAX(`item`.`changed`) as `lastitem_date`, `item`.`uid`
@@ -453,6 +472,7 @@ function admin_page_users(&$a){
        }
        $users = array_map("_setup_users", $users);
        
+       
        $t = get_markup_template("admin_users.tpl");
        $o = replace_macros($t, array(
                // strings //
@@ -555,9 +575,11 @@ function admin_page_plugins(&$a){
                        '$status' => $status,
                        '$action' => $action,
                        '$info' => get_plugin_info($plugin),
+                       '$str_author' => t('Author: '),
+                       '$str_maintainer' => t('Maintainer: '),                 
                
                        '$admin_form' => $admin_form,
-                       
+                       '$function' => 'plugins',
                        '$readme' => $readme
                ));
        } 
@@ -586,11 +608,180 @@ 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 theme 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 = "<pre>". file_get_contents("view/$theme/README") ."</pre>";
+               } 
+               
+               $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' => get_theme_info($theme),
+                       '$function' => 'themes',                
+                       '$admin_form' => $admin_form,
+                       '$str_author' => t('Author: '),
+                       '$str_maintainer' => t('Maintainer: '),                 
+                       '$readme' => $readme
+               ));
+       } 
+        
+        
+       
+       /**
+        * List plugins
+        */
+       
+       $xthemes = array();
+       if($themes) {
+               foreach($themes as $th) {
+                       $xthemes[] = array($th['name'],(($th['allowed']) ? "on" : "off"), get_theme_info($th['name']));
+               }
+       }
+       
+       $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,
+               '$experimental' => t('[Experimental]'),
+               '$unsupported' => t('[Unsupported]')
+       ));
+}
+
 
 /**
  * Logs admin page
@@ -628,23 +819,36 @@ function admin_page_logs(&$a){
        $t = get_markup_template("admin_logs.tpl");
 
        $f = get_config('system','logfile');
-       $size = filesize($f);
-       if($size > 5000000 || $size < 0)
-               $size = 5000000;
 
        $data = '';
-       $fp = fopen($f,'r');
-       if($fp) {
-               $seek = fseek($fp,0-$size,SEEK_END);
-               if($seek === 0) {
-                       fgets($fp); // throw away the first partial line
-                       $data = escape_tags(fread($fp,$size));
-                       while(! feof($fp))
-                               $data .= escape_tags(fread($fp,4096));
-               }
-               fclose($fp);
-       }
 
+       if(!file_exists($f)) {
+               $data = t("Error trying to open <strong>$f</strong> log file.\r\n<br/>Check to see if file $f exist and is 
+readable.");
+       }
+       else {
+               $fp = fopen($f, 'r');
+               if(!$fp) {
+                       $data = t("Couldn't open <strong>$f</strong> log file.\r\n<br/>Check to see if file $f is readable.");
+               }
+               else {
+                       $fstat = fstat($fp);
+                       $size = $fstat['size'];
+                       if($size != 0)
+                       {
+                               if($size > 5000000 || $size < 0)
+                                       $size = 5000000;
+                               $seek = fseek($fp,0-$size,SEEK_END);
+                               if($seek === 0) {
+                                       fgets($fp); // throw away the first partial line
+                                       $data = escape_tags(fread($fp,$size));
+                                       while(! feof($fp))
+                                               $data .= escape_tags(fread($fp,4096));
+                               }
+                       }
+                       fclose($fp);
+               }
+       }                       
 
        return replace_macros($t, array(
                '$title' => t('Administration'),