]> git.mxchange.org Git - friendica.git/blobdiff - mod/admin.php
Merge remote branch 'upstream/master'
[friendica.git] / mod / admin.php
old mode 100644 (file)
new mode 100755 (executable)
index f178e67..94bf445
@@ -1,15 +1,24 @@
 <?php
 
  /**
-  * Friendika admin
+  * Friendica admin
   */
 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;
@@ -146,7 +162,7 @@ function admin_page_summary(&$a) {
                '$users' => Array( t('Registered users'), $users),
                '$accounts' => $accounts,
                '$pending' => Array( t('Pending registrations'), $pending),
-               '$version' => Array( t('Version'), FRIENDIKA_VERSION),
+               '$version' => Array( t('Version'), FRIENDICA_VERSION),
                '$build' =>  get_config('system','build'),
                '$plugins' => Array( t('Active plugins'), $a->plugins )
        ));
@@ -277,7 +293,7 @@ function admin_page_site(&$a) {
        /* Banner */
        $banner = get_config('system','banner');
        if($banner == false) 
-               $banner = '<a href="http://project.friendika.com"><img id="logo-img" src="images/friendika-32.png" alt="logo" /></a><span id="logo-text"><a href="http://project.friendika.com">Friendika</a></span>';
+               $banner = '<a href="http://friendica.com"><img id="logo-img" src="images/friendica-32.png" alt="logo" /></a><span id="logo-text"><a href="http://friendica.com">Friendica</a></span>';
        $banner = htmlspecialchars($banner);
        
        //echo "<pre>"; var_dump($lang_choices); die("</pre>");
@@ -325,7 +341,7 @@ function admin_page_site(&$a) {
                '$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 Friendika contacts'), get_config('system','dfrn_only'), "All contacts must use Friendika protocols. All other built-in communication protocols disabled."),
+               '$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."),
                '$proxyuser'            => array('proxyuser', t("Proxy user"), get_config('system','proxyuser'), ""),
                '$proxy'                        => array('proxy', t("Proxy URL"), get_config('system','proxy'), ""),
@@ -350,7 +366,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 +428,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 +436,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 +471,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 //
@@ -506,7 +525,7 @@ function admin_page_plugins(&$a){
                if (x($_GET,"a") && $_GET['a']=="t"){
                        // Toggle plugin status
                        $idx = array_search($plugin, $a->plugins);
-                       if ($idx){
+                       if ($idx !== false){
                                unset($a->plugins[$idx]);
                                uninstall_plugin($plugin);
                                info( sprintf( t("Plugin %s disabled."), $plugin ) );
@@ -557,7 +576,7 @@ function admin_page_plugins(&$a){
                        '$info' => get_plugin_info($plugin),
                
                        '$admin_form' => $admin_form,
-                       
+                       '$function' => 'plugins',
                        '$readme' => $readme
                ));
        } 
@@ -586,11 +605,179 @@ 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,
+                       
+                       '$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 +815,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'),
@@ -657,7 +857,7 @@ function admin_page_logs(&$a){
                
                                                                        // name, label, value, help string, extra data...
                '$debugging'            => array('debugging', t("Debugging"),get_config('system','debugging'), ""),
-               '$logfile'                      => array('logfile', t("Log file"), get_config('system','logfile'), t("Must be writable by web server. Relative to your Friendika index.php.")),
+               '$logfile'                      => array('logfile', t("Log file"), get_config('system','logfile'), t("Must be writable by web server. Relative to your Friendica top-level directory.")),
                '$loglevel'             => array('loglevel', t("Log level"), get_config('system','loglevel'), "", $log_choices),
        ));
 }
@@ -700,7 +900,7 @@ function admin_page_remoteupdate(&$a) {
                '$baseurl' => $a->get_baseurl(),
                '$submit' => t("Update now"),
                '$close' => t("Close"),
-               '$localversion' => FRIENDIKA_VERSION,
+               '$localversion' => FRIENDICA_VERSION,
                '$remoteversion' => $u[1],
                '$needupdate' => $needupdate,
                '$canwrite' => $canwrite,