示例#1
0
function fncDisplay()
{
    global $_CONF;
    global $LANG_ASSIST_ADMIN;
    global $_ASSIST_CONF;
    global $_DB_dbms;
    $retval = "";
    $pi_name = "assist";
    $tmplfld = assist_templatePath('admin', 'default', $pi_name);
    $T = new Template($tmplfld);
    $lang = COM_getLanguageName();
    $path = $_CONF['site_admin_url'] . '/plugins/assist/docs/';
    //$path = 'docs/';
    if (!file_exists($path . $lang . '/')) {
        $lang = 'japanese';
        //'english';
    }
    $document_url = $path . $lang . '/';
    $T->set_file('admin', 'information.thtml');
    $T->set_var('pi_name', $pi_name);
    $T->set_var('version', $_ASSIST_CONF['version']);
    $T->set_var('dbms', $_DB_dbms);
    $T->set_var('dbversion', DB_getVersion());
    $T->set_var('php_os', PHP_OS);
    $T->set_var('phpversion', phpversion());
    if ($_CONF['facebook_consumer_key'] == "") {
        $T->set_var('fbid', $LANG_ASSIST_ADMIN['err_fbid']);
    } else {
        $T->set_var('fbid', $_CONF['facebook_consumer_key']);
    }
    $T->set_var('piname', $LANG_ASSIST_ADMIN['piname']);
    $T->set_var('about_thispage', $LANG_ASSIST_ADMIN['about_admin_information']);
    $T->set_var('lang_document', $LANG_ASSIST_ADMIN['document']);
    $T->set_var('document_url', $document_url);
    $T->set_var('online', $LANG_ASSIST_ADMIN['online']);
    $T->set_var('lang_configuration', $LANG_ASSIST_ADMIN['configuration']);
    $T->set_var('lang_autotags', $LANG_ASSIST_ADMIN['autotags']);
    $T->set_var('lang_templatesetvar', $LANG_ASSIST_ADMIN['templatesetvar']);
    $T->set_var('site_url', $_CONF['site_url']);
    $T->set_var('site_admin_url', $_CONF['site_admin_url']);
    $T->parse('output', 'admin');
    $retval .= $T->finish($T->get_var('output'));
    return $retval;
}
示例#2
0
/**
* Returns true if the database server version matches the criteria and the required
* file is available in the plugin, false otherwise.
*
* @param    $db              string     The name of the dbms to check for
* @param    $pi_name         string     The short name of the plugin for which to check support
* @param    $version         string     A version to ask for, the default operator is '>='
* @param    $operator        string     Optional operator to override the default
*                                       See COM_versionCompare() for all valid operators
* @return                    bool
*
* @since    Geeklog 1.8.0
*
*/
function PLG_checkAvailableDb($db, $pi_name, $version, $operator = '>=')
{
    global $_CONF;
    // check if the plugin supports the dbms
    $dbFile = $_CONF['path'] . 'plugins/' . $pi_name . '/sql/' . strtolower($db) . '_install.php';
    // if both requirements are satisfied, return true
    if (file_exists($dbFile) && COM_versionCompare(DB_getVersion(), $version, $operator)) {
        return true;
    }
    return false;
}
示例#3
0
function _checkVersion()
{
    global $_CONF, $_USER, $_PLUGIN_INFO;
    // build XML request
    require_once $_CONF['path'] . 'lib/http/http.php';
    $result = '';
    $http = new http_class();
    $http->timeout = 5;
    $http->data_timeout = 5;
    $http->debug = 0;
    $http->html_debug = 0;
    $http->user_agent = 'glFusion/' . GVERSION;
    $url = "http://www.glfusion.org/versions/index.php";
    $error = $http->GetRequestArguments($url, $arguments);
    $arguments["RequestMethod"] = "POST";
    $arguments["PostValues"] = array("v" => GVERSION . PATCHLEVEL, "p" => PHP_VERSION, "d" => urlencode(DB_getVersion()));
    if ($_CONF['send_site_data']) {
        $arguments["PostValues"]['s'] = $_CONF['site_url'];
    }
    $error = $http->Open($arguments);
    if ($error == "") {
        $error = $http->SendRequest($arguments);
        if ($error == "") {
            for (;;) {
                $error = $http->ReadReplyBody($body, 1000);
                if ($error != "" || strlen($body) == 0) {
                    break;
                }
                $result = $result . $body;
            }
        }
    }
    if (!$result) {
        return array(-1, -1, array());
    }
    // parse XML response
    $response = xml2array($result);
    if (isset($response['response'])) {
        if (isset($response['response']['glfusion'])) {
            $latest = $response['response']['glfusion']['version'];
        } else {
            $latest = 'unknown';
        }
        if (isset($response['response']['glfusion']['date'])) {
            $releaseDate = $response['response']['glfusion']['date'];
        } else {
            $releaseDate = 'unknown';
        }
    }
    // check glFusion CMS version
    $current = GVERSION . PATCHLEVEL;
    list($latestMajor, $latestMinor, $latestRev, $latestExtra) = explode('.', $latest . '....');
    list($currentMajor, $currentMinor, $currentRev, $currentExtra) = explode('.', $current . '....');
    $glFusionUpToDate = 0;
    if ($currentMajor >= $latestMajor) {
        if ($currentMajor > $latestMajor) {
            $glFusionUpToDate = 2;
        } else {
            if ($currentMinor >= $latestMinor) {
                if ($currentMinor > $latestMinor) {
                    $glFusionUpToDate = 2;
                } else {
                    if ($currentRev >= $latestRev) {
                        if ($currentRev > $latestRev) {
                            $glFusionUpToDate = 2;
                        } else {
                            if ($currentExtra != '' || $latestExtra != '') {
                                if (strcmp($currentExtra, $latestExtra) == 0) {
                                    $glFusionUpToDate = 1;
                                }
                            } else {
                                $glFusionUpToDate = 1;
                            }
                        }
                    }
                }
            }
        }
    }
    // run through all our active plugins and see if any are out of date
    $pluginsUpToDate = 1;
    $done = 0;
    if (is_array($response['response']['plugin'])) {
        foreach ($_PLUGIN_INFO as $iPlugin => $iPluginVer) {
            $upToDate = 0;
            foreach ($response['response']['plugin'] as $plugin) {
                if (strcmp($plugin['name'], $iPlugin) == 0) {
                    if (_upToDate($plugin['version'], $iPluginVer) == 0) {
                        $pluginsUpToDate = 0;
                        $done = 1;
                        break;
                    }
                }
            }
            if ($done) {
                break;
            }
        }
    }
    // build data if we need it...
    $pluginData = array();
    $pluginData['glfusioncms']['plugin'] = 'glfusioncms';
    $pluginData['glfusioncms']['installed_version'] = $current;
    $pluginData['glfusioncms']['display_name'] = '';
    $pluginData['glfusioncms']['latest_version'] = $latest;
    $pluginData['glfusioncms']['release_date'] = $releaseDate;
    $pluginData['glfusioncms']['url'] = '';
    if (is_array($response['response']['plugin'])) {
        foreach ($_PLUGIN_INFO as $iPlugin => $iPluginVer) {
            $upToDate = 0;
            $pluginData[$iPlugin]['plugin'] = $iPlugin;
            $pluginData[$iPlugin]['installed_version'] = $iPluginVer;
            $pluginData[$iPlugin]['display_name'] = $iPlugin;
            $pluginData[$iPlugin]['latest_version'] = 0;
            $pluginData[$iPlugin]['release_date'] = 0;
            $pluginData[$iPlugin]['url'] = '';
            foreach ($response['response']['plugin'] as $plugin) {
                if (strcmp($plugin['name'], $iPlugin) == 0) {
                    $pluginData[$iPlugin]['display_name'] = $plugin['displayname'];
                    $pluginData[$iPlugin]['latest_version'] = $plugin['version'];
                    $pluginData[$iPlugin]['release_date'] = $plugin['date'];
                    if (isset($plugin['url'])) {
                        $pluginData[$iPlugin]['url'] = $plugin['url'];
                    }
                }
            }
        }
    }
    return array($glFusionUpToDate, $pluginsUpToDate, $pluginData);
}
示例#4
0
 /**
  * Remove 4-6 byte UTF-8 characters, including emoji icons used on mobile phones
  *
  * @param  string $text
  * @param  string $replace
  * @return string
  */
 public static function remove4byteUtf8Chars($text, $replace = '')
 {
     global $_CONF, $_DB_dbms;
     static $isRemove = null;
     if ($isRemove === null) {
         if (!isset($_CONF['remove_4byte_chars']) || $_CONF['remove_4byte_chars']) {
             $isRemove = true;
         } else {
             // in case $_CONF['remove_4byte_chars'] is set to false
             if (strcasecmp($_DB_dbms, 'mysql') === 0) {
                 $isRemove = version_compare('5.5.3', DB_getVersion(), '>');
             } else {
                 $isRemove = false;
             }
         }
     }
     if ($isRemove) {
         $text = preg_replace('/[\\xf0-\\xfd][\\x80-\\xbf]{2}[\\x80-\\xbf]{1,3}/', $replace, $text);
     }
     return $text;
 }
示例#5
0
function _checkEnvironment()
{
    global $_CONF, $_TABLES, $_PLUGINS, $_SYSTEM, $LANG_ADMIN, $LANG01, $filemgmt_FileStore, $filemgmt_SnapStore, $filemgmt_SnapCat, $_FF_CONF, $_MG_CONF, $LANG_FILECHECK;
    $retval = '';
    $permError = 0;
    $T = new Template($_CONF['path_layout'] . 'admin');
    $T->set_file('page', 'envcheck.thtml');
    $menu_arr = array(array('url' => $_CONF['site_admin_url'] . '/envcheck.php', 'text' => $LANG01['recheck']), array('url' => $_CONF['site_admin_url'] . '/filecheck.php', 'text' => $LANG_FILECHECK['filecheck']), array('url' => $_CONF['site_admin_url'], 'text' => $LANG_ADMIN['admin_home']));
    $retval .= COM_startBlock($LANG01['hosting_env'], '', COM_getBlockTemplate('_admin_block', 'header'));
    $retval .= ADMIN_createMenu($menu_arr, $LANG01['php_warning'], $_CONF['layout_url'] . '/images/icons/envcheck.png');
    $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'));
    /*
     * First we will validate the general environment..
     */
    $T->set_block('page', 'envs', 'env');
    // PHP Version
    $T->set_var('item', $LANG01['php_version']);
    $classCounter = 0;
    if (_phpOutOfDate()) {
        $T->set_var('status', '<span class="notok">' . phpversion() . '</span>');
    } else {
        $T->set_var('status', '<span class="yes">' . phpversion() . '</span>');
    }
    $T->set_var('recommended', '5.6.0+');
    $T->set_var('notes', $LANG01['php_req_version']);
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('env', 'envs', true);
    $classCounter++;
    $rg = ini_get('register_globals');
    $sm = ini_get('safe_mode');
    $ob = ini_get('open_basedir');
    $rg = ini_get('register_globals');
    $T->set_var('item', 'register_globals');
    $T->set_var('status', $rg == 1 ? '<span class="notok">' . $LANG01['on'] . '</span>' : '<span class="yes">' . $LANG01['off'] . '</span>');
    $T->set_var('recommended', $LANG01['off']);
    $T->set_var('notes', $LANG01['register_globals']);
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('env', 'envs', true);
    $classCounter++;
    $sm = ini_get('safe_mode');
    $T->set_var('item', 'safe_mode');
    $T->set_var('status', $sm == 1 ? '<span class="notok">' . $LANG01['on'] . '</span>' : '<span class="yes">' . $LANG01['off'] . '</span>');
    $T->set_var('recommended', $LANG01['off']);
    $T->set_var('notes', $LANG01['safe_mode']);
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('env', 'envs', true);
    $classCounter++;
    $ob = ini_get('open_basedir');
    if ($ob == '') {
        $open_basedir_restriction = 0;
    } else {
        $open_basedir_restriction = 1;
        $open_basedir_directories = $ob;
    }
    $T->set_var('item', 'open_basedir');
    $T->set_var('status', $ob == '' ? '<span class="yes">' . $LANG01['off'] . '</span>' : '<span class="notok">' . $LANG01['enabled'] . '</span>');
    $T->set_var('notes', $LANG01['open_basedir']);
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('env', 'envs', true);
    $classCounter++;
    $memory_limit = _return_bytes(ini_get('memory_limit'));
    $memory_limit_print = _bytes_to_mg($memory_limit);
    //  / 1024) / 1024;
    $T->set_var('item', 'memory_limit');
    // check for at least 48M
    $T->set_var('status', $memory_limit < 50331648 ? '<span class="notok">' . $memory_limit_print . '</span>' : '<span class="yes">' . $memory_limit_print . '</span>');
    $T->set_var('recommended', '64M');
    $T->set_var('notes', $LANG01['memory_limit']);
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('env', 'envs', true);
    $classCounter++;
    $fu = ini_get('file_uploads');
    $T->set_var('item', 'file_uploads');
    $T->set_var('status', $fu == 1 ? '<span class="yes">' . $LANG01['on'] . '</span>' : '<span class="notok">' . $LANG01['off'] . '</span>');
    $T->set_var('recommended', $LANG01['on']);
    $T->set_var('notes', $LANG01['file_uploads']);
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('env', 'envs', true);
    $classCounter++;
    $upload_limit = _return_bytes(ini_get('upload_max_filesize'));
    $upload_limit_print = _bytes_to_mg($upload_limit);
    $T->set_var('item', 'upload_max_filesize');
    // check for at least 8M
    $T->set_var('status', $upload_limit < 8388608 ? '<span class="notok">' . $upload_limit_print . '</span>' : '<span class="yes">' . $upload_limit_print . '</span>');
    $T->set_var('recommended', '8M');
    $T->set_var('notes', $LANG01['upload_max_filesize']);
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('env', 'envs', true);
    $classCounter++;
    $post_limit = _return_bytes(ini_get('post_max_size'));
    if ($post_limit == 0) {
        $post_limit_print = 'unlimited';
        $T->set_var('status', '<span class="yes">' . $post_limit_print . '</span>');
    } else {
        $post_limit_print = _bytes_to_mg($post_limit);
        $T->set_var('status', $post_limit < 8388608 ? '<span class="notok">' . $post_limit_print . '</span>' : '<span class="yes">' . $post_limit_print . '</span>');
    }
    $T->set_var('item', 'post_max_size');
    $T->set_var('recommended', '8M');
    $T->set_var('notes', $LANG01['post_max_size']);
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('env', 'envs', true);
    $classCounter++;
    $max_execution_time = ini_get('max_execution_time');
    $T->set_var('item', 'max_execution_time');
    $T->set_var('status', $max_execution_time < 30 ? '<span class="notok">' . $max_execution_time . ' secs</span>' : '<span class="yes">' . $max_execution_time . ' secs</span>');
    $T->set_var('recommended', '30 secs');
    $T->set_var('notes', $LANG01['max_execution_time']);
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('env', 'envs', true);
    $classCounter++;
    $mysql_version = DB_getVersion();
    $T->set_var('mysql', 'MySQL Version');
    $T->set_var('mysql_version', $mysql_version);
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $classCounter++;
    $T->set_block('page', 'libs', 'lib');
    if (extension_loaded('mbstring')) {
        $T->set_var(array('item' => $LANG01['mbstring_library'], 'status' => '<span class="yes">' . $LANG01['ok'] . '</span>', 'notes' => $LANG01['mbstring_ok']));
    } else {
        $T->set_var(array('item' => $LANG01['mbstring_library'], 'status' => '<span class="notok">' . $LANG01['not_found'] . '</span>', 'notes' => $LANG01['mbstring_not_found']));
    }
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('lib', 'libs', true);
    $classCounter++;
    if (extension_loaded('openssl')) {
        $T->set_var(array('item' => $LANG01['openssl_library'], 'status' => '<span class="yes">' . $LANG01['ok'] . '</span>', 'notes' => $LANG01['openssl_ok']));
    } else {
        $T->set_var(array('item' => $LANG01['openssl_library'], 'status' => '<span class="notok">' . $LANG01['not_found'] . '</span>', 'notes' => $LANG01['openssl_not_found']));
    }
    $T->set_var('rowclass', $classCounter % 2 + 1);
    $T->parse('lib', 'libs', true);
    $classCounter++;
    if ($sm != 1 && $open_basedir_restriction != 1) {
        switch ($_CONF['image_lib']) {
            case 'imagemagick':
                // ImageMagick
                if (PHP_OS == "WINNT") {
                    $binary = "/convert.exe";
                } else {
                    $binary = "/convert";
                }
                clearstatcache();
                if (!@file_exists($_CONF['path_to_mogrify'] . $binary)) {
                    $T->set_var(array('item' => $LANG01['imagemagick'], 'status' => '<span class="notok">' . $LANG01['not_found'] . '</span>', 'notes' => $LANG01['im_not_found']));
                } else {
                    $T->set_var(array('item' => $LANG01['imagemagick'], 'status' => '<span class="yes">' . $LANG01['ok'] . '</span>', 'notes' => $LANG01['im_ok']));
                }
                break;
            case 'gdlib':
                // GD Libs
                if ($gdv = gdVersion()) {
                    if ($gdv >= 2) {
                        $T->set_var(array('item' => $LANG01['gd_lib'], 'status' => '<span class="yes">' . $LANG01['ok'] . '</span>', 'notes' => $LANG01['gd_ok']));
                    } else {
                        $T->set_var(array('item' => $LANG01['gd_lib'], 'status' => '<span class="yes">' . $LANG01['ok'] . '</span>', 'notes' => $LANG01['gd_v1']));
                    }
                } else {
                    $T->set_var(array('item' => $LANG01['gd_lib'], 'status' => '<span class="notok">' . $LANG01['not_found'] . '</span>', 'notes' => $LANG01['gd_not_found']));
                }
                break;
            case 'netpbm':
                // NetPBM
                if (PHP_OS == "WINNT") {
                    $binary = "/jpegtopnm.exe";
                } else {
                    $binary = "/jpegtopnm";
                }
                clearstatcache();
                if (!@file_exists($_CONF['path_to_netpbm'] . $binary)) {
                    $T->set_var(array('item' => $LANG01['netpbm'], 'status' => '<span class="notok">' . $LANG01['not_found'] . '</span>', 'notes' => $LANG01['np_not_found']));
                } else {
                    $T->set_var(array('item' => $LANG01['netpbm'], 'status' => '<span class="yes">' . $LANG01['ok'] . '</span>', 'notes' => $LANG01['np_ok']));
                }
                break;
        }
        $T->set_var('rowclass', $classCounter % 2 + 1);
        $T->parse('lib', 'libs', true);
        $classCounter++;
        if ($_CONF['jhead_enabled']) {
            if (PHP_OS == "WINNT") {
                $binary = "/jhead.exe";
            } else {
                $binary = "/jhead";
            }
            clearstatcache();
            if (!@file_exists($_CONF['path_to_jhead'] . $binary)) {
                $T->set_var(array('item' => $LANG01['jhead'], 'status' => '<span class="notok">' . $LANG01['not_found'] . '</span>', 'notes' => $LANG01['jhead_not_found']));
            } else {
                $T->set_var(array('item' => $LANG01['jhead'], 'status' => '<span class="yes">' . $LANG01['ok'] . '</span>', 'notes' => $LANG01['jhead_ok']));
            }
            $T->set_var('rowclass', $classCounter % 2 + 1);
            $T->parse('lib', 'libs', true);
            $classCounter++;
        }
        if ($_CONF['jpegtrans_enabled']) {
            if (PHP_OS == "WINNT") {
                $binary = "/jpegtran.exe";
            } else {
                $binary = "/jpegtran";
            }
            clearstatcache();
            if (!@file_exists($_CONF['path_to_jpegtrans'] . $binary)) {
                $T->set_var(array('item' => $LANG01['jpegtran'], 'status' => '<span class="notok">' . $LANG01['not_found'] . '</span>', 'notes' => $LANG01['jpegtran_not_found']));
            } else {
                $T->set_var(array('item' => $LANG01['jpegtran'], 'status' => '<span class="yes">' . $LANG01['ok'] . '</span>', 'notes' => $LANG01['jpegtran_ok']));
            }
            $T->set_var('rowclass', $classCounter % 2 + 1);
            $T->parse('lib', 'libs', true);
            $classCounter++;
        }
    } else {
        $T->set_var(array('item' => $LANG01['graphics'], 'status' => $LANG01['not_checked'], 'notes' => $LANG01['bypass_note']));
    }
    // extract syndication storage path
    $feedpath = $_CONF['rdf_file'];
    $pos = strrpos($feedpath, '/');
    $feedPath = substr($feedpath, 0, $pos + 1);
    $file_list = array($_CONF['path_data'], $_CONF['path_log'] . 'error.log', $_CONF['path_log'] . 'access.log', $_CONF['path_log'] . 'captcha.log', $_CONF['path_log'] . 'spamx.log', $_CONF['path_data'] . 'layout_cache/', $_CONF['path_data'] . 'temp/', $_CONF['path_html'], $feedPath, $_CONF['rdf_file'], $_CONF['path_html'] . 'images/articles/', $_CONF['path_html'] . 'images/topics/', $_CONF['path_html'] . 'images/userphotos/', $_CONF['path_html'] . 'images/library/File/', $_CONF['path_html'] . 'images/library/Flash/', $_CONF['path_html'] . 'images/library/Image/', $_CONF['path_html'] . 'images/library/Media/', $_CONF['path_html'] . 'images/library/userfiles/');
    $mg_file_list = array($_CONF['path'] . 'plugins/mediagallery/tmp/', $_MG_CONF['path_mediaobjects'], $_MG_CONF['path_mediaobjects'] . 'covers/', $_MG_CONF['path_mediaobjects'] . 'orig/', $_MG_CONF['path_mediaobjects'] . 'disp/', $_MG_CONF['path_mediaobjects'] . 'tn/', $_MG_CONF['path_mediaobjects'] . 'orig/0/', $_MG_CONF['path_mediaobjects'] . 'disp/0/', $_MG_CONF['path_mediaobjects'] . 'tn/0/', $_MG_CONF['path_mediaobjects'] . 'orig/1/', $_MG_CONF['path_mediaobjects'] . 'disp/1/', $_MG_CONF['path_mediaobjects'] . 'tn/1/', $_MG_CONF['path_mediaobjects'] . 'orig/2/', $_MG_CONF['path_mediaobjects'] . 'disp/2/', $_MG_CONF['path_mediaobjects'] . 'tn/2/', $_MG_CONF['path_mediaobjects'] . 'orig/3/', $_MG_CONF['path_mediaobjects'] . 'disp/3/', $_MG_CONF['path_mediaobjects'] . 'tn/3/', $_MG_CONF['path_mediaobjects'] . 'orig/4/', $_MG_CONF['path_mediaobjects'] . 'disp/4/', $_MG_CONF['path_mediaobjects'] . 'tn/4/', $_MG_CONF['path_mediaobjects'] . 'orig/5/', $_MG_CONF['path_mediaobjects'] . 'disp/5/', $_MG_CONF['path_mediaobjects'] . 'tn/5/', $_MG_CONF['path_mediaobjects'] . 'orig/6/', $_MG_CONF['path_mediaobjects'] . 'disp/6/', $_MG_CONF['path_mediaobjects'] . 'tn/6/', $_MG_CONF['path_mediaobjects'] . 'orig/7/', $_MG_CONF['path_mediaobjects'] . 'disp/7/', $_MG_CONF['path_mediaobjects'] . 'tn/7/', $_MG_CONF['path_mediaobjects'] . 'orig/8/', $_MG_CONF['path_mediaobjects'] . 'disp/8/', $_MG_CONF['path_mediaobjects'] . 'tn/8/', $_MG_CONF['path_mediaobjects'] . 'orig/9/', $_MG_CONF['path_mediaobjects'] . 'disp/9/', $_MG_CONF['path_mediaobjects'] . 'tn/9/', $_MG_CONF['path_mediaobjects'] . 'orig/a/', $_MG_CONF['path_mediaobjects'] . 'disp/a/', $_MG_CONF['path_mediaobjects'] . 'tn/a/', $_MG_CONF['path_mediaobjects'] . 'orig/b/', $_MG_CONF['path_mediaobjects'] . 'disp/b/', $_MG_CONF['path_mediaobjects'] . 'tn/b/', $_MG_CONF['path_mediaobjects'] . 'orig/c/', $_MG_CONF['path_mediaobjects'] . 'disp/c/', $_MG_CONF['path_mediaobjects'] . 'tn/c/', $_MG_CONF['path_mediaobjects'] . 'orig/d/', $_MG_CONF['path_mediaobjects'] . 'disp/d/', $_MG_CONF['path_mediaobjects'] . 'tn/d/', $_MG_CONF['path_mediaobjects'] . 'orig/e/', $_MG_CONF['path_mediaobjects'] . 'disp/e/', $_MG_CONF['path_mediaobjects'] . 'tn/e/', $_MG_CONF['path_mediaobjects'] . 'orig/f/', $_MG_CONF['path_mediaobjects'] . 'disp/f/', $_MG_CONF['path_mediaobjects'] . 'tn/f/', $_MG_CONF['path_html'] . 'watermarks/');
    $fm_file_list = array($filemgmt_FileStore, $filemgmt_FileStore . 'tmp/', $filemgmt_SnapStore, $filemgmt_SnapStore . 'tmp/', $filemgmt_SnapCat, $filemgmt_SnapCat . 'tmp/');
    $forum_file_list = array($_FF_CONF['uploadpath'] . '/', $_FF_CONF['uploadpath'] . '/tn/');
    if (in_array('mediagallery', $_PLUGINS)) {
        $file_list = array_merge($file_list, $mg_file_list);
    }
    if (in_array('filemgmt', $_PLUGINS)) {
        $file_list = array_merge($file_list, $fm_file_list);
    }
    if (in_array('forum', $_PLUGINS)) {
        $file_list = array_merge($file_list, $forum_file_list);
    }
    $T->set_block('page', 'perms', 'perm');
    $classCounter = 0;
    foreach ($file_list as $path) {
        $ok = _isWritable($path);
        if (!$ok) {
            $T->set_var('location', $path);
            $T->set_var('status', $ok ? '<span class="yes">' . $LANG01['ok'] . '</span>' : '<span class="notwriteable">' . $LANG01['not_writable'] . '</span>');
            $T->set_var('rowclass', $classCounter % 2 + 1);
            $classCounter++;
            $T->parse('perm', 'perms', true);
            if (!$ok) {
                $permError = 1;
            }
        }
        /* --- debug code ---
                else {
                    $T->set_var('location',$path);
                    $T->set_var('status', $ok ? '<span class="yes">'.$LANG01['ok'].'</span>' : '<span class="notwriteable">'.$LANG01['not_writable'].'</span>');
                    $T->set_var('rowclass',($classCounter % 2)+1);
                    $classCounter++;
                    $T->parse('perm','perms',true);
                }
        ----------------------- */
    }
    // special test to see if we can create a directory under layout_cache...
    $rc = @mkdir($_CONF['path_data'] . 'layout_cache/test/');
    if (!$rc) {
        $T->set_var('location', $_CONF['path_data'] . 'layout_cache/<br /><strong>' . $_GLFUSION['errstr'] . '</strong>');
        $T->set_var('status', '<span class="notwriteable">' . $LANG01['unable_mkdir'] . '</span>');
        $T->set_var('rowclass', $classCounter % 2 + 1);
        $classCounter++;
        $T->parse('perm', 'perms', true);
        $permError = 1;
        @rmdir($_CONF['path_data'] . 'layout_cache/test/');
    } else {
        $ok = _isWritable($_CONF['path_data'] . 'layout_cache/test/');
        if (!$ok) {
            $T->set_var('location', $path);
            $T->set_var('status', $ok ? '<span class="yes">' . $LANG01['ok'] . '</span>' : '<span class="notwriteable">' . $LANG01['not_writable'] . '</span>');
            $T->set_var('rowclass', $classCounter % 2 + 1);
            $classCounter++;
            $T->parse('perm', 'perms', true);
            if (!$ok) {
                $permError = 1;
            }
        }
        @rmdir($_CONF['path_data'] . 'layout_cache/test/');
    }
    // special test to see if existing cache files exist and are writable...
    $rc = _checkCacheDir($_CONF['path_data'] . 'layout_cache/', $T, $classCounter);
    if ($rc > 0) {
        $permError = 1;
    }
    if ($permError) {
        $button = $LANG01['recheck'];
        $action = 'checkenvironment';
        $T->set_var('error_message', $LANG01['correct_perms']);
        $recheck = '<button type="submit" name="submit" onclick="submitForm( checkenv, \'checkenvironment\' );">' . LB;
        $recheck .= $LANG01['recheck'] . LB;
        $recheck .= '<img src="layout/arrow-recheck.gif" alt=""/>' . LB;
        $recheck .= '</button>' . LB;
    } else {
        $classCounter = 0;
        $recheck = '';
        $T->set_var('location', $LANG01['directory_permissions']);
        $T->set_var('status', 1 ? '<span class="yes">' . $LANG01['ok'] . '</span>' : '<span class="notwriteable">' . $LANG01['not_writable'] . '</span>');
        $T->set_var('rowclass', $classCounter % 2 + 1);
        $classCounter++;
        $T->parse('perm', 'perms', true);
        $T->set_var('location', $LANG01['file_permissions']);
        $T->set_var('status', 1 ? '<span class="yes">' . $LANG01['ok'] . '</span>' : '<span class="notwriteable">' . $LANG01['not_writable'] . '</span>');
        $T->set_var('rowclass', $classCounter % 2 + 1);
        $classCounter++;
        $T->parse('perm', 'perms', true);
    }
    $T->set_var(array('lang_host_env' => $LANG01['hosting_env'], 'lang_setting' => $LANG01['setting'], 'lang_current' => $LANG01['current'], 'lang_recommended' => $LANG01['recommended'], 'lang_notes' => $LANG01['notes'], 'lang_filesystem' => $LANG01['filesystem_check'], 'lang_php_settings' => $LANG01['php_settings'], 'lang_php_warning' => $LANG01['php_warning'], 'lang_current_php_settings' => $LANG01['current_php_settings'], 'lang_show_phpinfo' => $LANG01['show_phpinfo'], 'lang_hide_phpinfo' => $LANG01['hide_phpinfo'], 'lang_graphics' => $LANG01['graphics'], 'lang_extensions' => $LANG01['extensions'], 'lang_recheck' => $LANG01['recheck'], 'phpinfo' => _phpinfo()));
    if (!defined('DEMO_MODE')) {
        $T->set_var(array('phpinfo' => _phpinfo()));
    } else {
        $T->set_var('phpinfo', '');
    }
    $T->parse('output', 'page');
    $retval .= $T->finish($T->get_var('output'));
    return $retval;
}