<?php // utf8-marker = äöü

/*
================================================== 
This file is a part of CMSimple 5.17
Released: 2025-02-18
Project website: www.cmsimple.org
================================================== 
CMSimple COPYRIGHT INFORMATION

(c) Gert Ebersbach - mail@ge-webdesign.de

CMSimple is released under the GPL3 licence. 
You may not remove copyright information from the files. 
Any modifications will fall under the copyleft conditions of GPL3.

GPL 3 Deutsch: http://www.gnu.de/documents/gpl.de.html
GPL 3 English: http://www.gnu.org/licenses/gpl.html

HISTORY:
-------------------------------------------------- 
2020-04-21 CMSimple 5 - www.cmsimple.org
(c) Gert Ebersbach - mail@ge-webdesign.de
-------------------------------------------------- 
2012-11-11 CMSimple 4 - www.cmsimple.org
(c) Gert Ebersbach - mail@ge-webdesign.de
-------------------------------------------------- 
CMSimple_XH 1.5.3
2012-03-19
based on CMSimple version 3.3 - December 31. 2009
For changelog, downloads and information please see http://www.cmsimple-xh.com
-------------------------------------------------- 
CMSimple version 3.3 - December 31. 2009
Small - simple - smart
(c) 1999-2009 Peter Andreas Harteg - peter@harteg.dk 

END CMSimple COPYRIGHT INFORMATION
================================================== 
*/

if (preg_match('/adm.php/i', $_SERVER['SCRIPT_NAME'])){die('Access Denied');}

$pth['folder']['toolbars'] = $pth['folder']['base'] . 'plugins/' . $cf['editor']['external'] . '/inits/';
$pth['folder']['jquery'] = $pth['folder']['base'] . 'plugins/jquery/lib/jquery';
$pth['folder']['jquery_ui'] = $pth['folder']['base'] . 'plugins/jquery/lib/jquery_ui';
$pth['folder']['jquery_ui_css'] = $pth['folder']['base'] . 'plugins/jquery/lib/jquery_ui/css';


// delete old config variables

if(isset($cf['security']['type'])) unset($cf['security']['type']);
if(isset($cf['filebrowser']['show_images_permanent'])) unset($cf['filebrowser']['show_images_permanent']);
if(isset($cf['meta']['publisher'])) unset($cf['meta']['publisher']);
if(isset($cf['site']['full_settings_menu'])) unset($cf['site']['full_settings_menu']);
if(isset($cf['filebrowser']['extensions_downloads'])) unset($cf['filebrowser']['extensions_downloads']);
if(isset($cf['filebrowser']['extensions_images'])) unset($cf['filebrowser']['extensions_images']);
if(isset($cf['filebrowser']['extensions_media'])) unset($cf['filebrowser']['extensions_media']);


// Functions used for adm

function selectlist($fn, $regm, $regr) 
{
    global $k1, $k2, $v2, $o, $pth, $cf, $tx;
	
	$options = array();
    $o .= "\n" . '<select name="' . $k1 . '_' . $k2 . '" style="border: 1px solid #ccc; margin: 2px 0;">';
    if (is_dir($pth['folder'][$fn]) && $fd = opendir($pth['folder'][$fn])) 
	{
        while (($p = readdir($fd)) == true) 
		{
            if (preg_match($regm, $p)) 
			{
                $v = preg_replace($regr, "\\1", $p);
				
				if ($k1 . $k2 == 'editortinymce_toolbar')
				{
					$v = str_replace('init_', '', $v);
				}
				
                $options[$v] = ($v == $v2);
            }
        }
        closedir($fd);
    }
    
	if(is_array($options))ksort($options, SORT_STRING);

    foreach ($options as $option => $selected)
    {
		if
		(
		 // template fallback (hide standard templates) and hide default.php in languages
			$option != '__fallback__' 
			&& $option != '__maintenance__' 
			&& $option != '__cmsimple_backend__' 
			&& $option != '__cmsimple_filebrowser__' 
			&& $option != 'default'
		)
		{
			$o .= "\n" . '<option style="padding: 1px 8px 1px 3px;" value="' . $option . '"';
			if ($selected)
			{
				$o .= ' selected="selected"';
			}
		$o .= '>' . $option . '</option>';
		}
        
    }
    $o .= "\n" . '</select>';
}

// Adm functionality

// restore backup
if (isset($_GET['restore']) && isset($_GET['restore_pf']) && $_GET['securityCode'] == $_SESSION[$csrfSession])
{
	$o = '
<h4>Restore Backup</h4>
';

	if (file_exists('./backups/cmsimple/' . $_GET['restore_cf'] . '.php'))
	{
		$restoreDate = date("Ymd_His");
		
		// creates backup of content.php and pagedata.php
		copy ($pth['file']['content'], './backups/cmsimple/' . $restoreDate . '-backup-by-restore' . '_content.php');
		copy ($pth['file']['pagedata'], './backups/cmsimple/' . $restoreDate . '-backup-by-restore' . '_pagedata.php');
		
		// restore chosen backup
		copy ('./backups/cmsimple/' . $_GET['restore_cf'] . '.php', $pth['folder']['content'] . 'content.php');
		copy ('./backups/cmsimple/' . $_GET['restore_pf'] . '.php', $pth['folder']['content'] . 'pagedata.php');
		
		if(strstr($_GET['restore_cf'], '-backup-by-restore_'))
		{
			// delete chosen backup
			unlink ('./backups/cmsimple/' . $_GET['restore_cf'] . '.php');
			if(file_exists('./backups/cmsimple/' . $_GET['restore_pf'] . '.php'))unlink ('./backups/cmsimple/' . $_GET['restore_pf'] . '.php');
		}

		$o .= '<hr>

<a href="./?backups">&laquo; ' . $tx['restore']['back_to'] . '</a>
';

		header("Location: ./?restored&restore_cf=" . $_GET['restore_cf'] . "&restore_pf=" . $_GET['restore_pf']);
	}
}

if (isset($_GET['restored']))
{
	$o = '
<h4>' . $tx['restore']['restore_backups'] . '</h4>
';

	$o .= '<br><p><b>' . $tx['restore']['backups_created'] . ':</b></p>
<ul>
<li>content.php</li>
<li>pagedata.php</li>
</ul>

<br><p><b>' . $tx['restore']['backups_restored'] . ':</b></p>
<ul>
<li>' . $_GET['restore_cf'] . '.php => content.php</li>
<li>' . $_GET['restore_pf'] . '.php => pagedata.php</li>
</ul>

<br>

<p><a href="./?backups"><b>&laquo; ' . $tx['restore']['back_to'] . '</b></a></p>
<hr>
';
}
// END restore backup


// delete backup
if (isset($_GET['delete_pfbackup']) && isset($_GET['delete_cfbackup']) && $_GET['securityCode'] == $_SESSION[$csrfSession])
{
	$o = '
<h4>' . $tx['restore']['headline_deleted_backup'] . '</h4>
';

	if (file_exists('./backups/cmsimple/' . $_GET['delete_pfbackup'] . '.php')) unlink ('./backups/cmsimple/' . $_GET['delete_pfbackup'] . '.php');
	if (file_exists('./backups/cmsimple/' . $_GET['delete_cfbackup'] . '.php')) unlink ('./backups/cmsimple/' . $_GET['delete_cfbackup'] . '.php');

		$o .= '<hr>

<a href="./?backups">&laquo; ' . $tx['restore']['back_to'] . '</a>
';

		header("Location: ./?backup_deleted&deleted_cfbackup=" . $_GET['delete_cfbackup'] . "&deleted_pfbackup=" . $_GET['delete_pfbackup']);
}

if (isset($_GET['backup_deleted']))
{
	$o = '
<h4>' . $tx['restore']['headline_deleted_backup'] . ':</h4>
';

	$o .= '
<div class="cmsimplecore_warning" style="float: left; padding: 2px 16px;">
<p><b>' . $_GET['deleted_cfbackup'] . '.php</b> ' . $tx['result']['deleted'] . '</p>
<p><b>' . $_GET['deleted_pfbackup'] . '.php</b> ' . $tx['result']['deleted'] . '</p>
</div>

<br style="clear: both;">

<p><a href="./?backups"><b>&laquo; ' . $tx['restore']['back_to'] . '</b></a></p>
<hr>
';
}
// END delete backup


// delete other file in content folder
if (isset($_GET['delete_of']) && $_GET['securityCode'] == $_SESSION[$csrfSession])
{
	$o = '
<h4>' . $tx['restore']['headline_delete_file'] . '</h4>
';

	if (file_exists('./backups/cmsimple/' . $_GET['delete_of']))
	{
		unlink ('./backups/cmsimple/' . $_GET['delete_of']);
	}

$o = '<a href="./?backups">&laquo; ' . $tx['restore']['back_to'] . '</a>
<br style="clear: both;">
<hr>
';

	header("Location: ./?deleted_of&deleted_of=" . $_GET['delete_of']);
}

if (isset($_GET['deleted_of']))
{
	$o .= '
<h4>' . $tx['restore']['headline_delete_file'] . '</h4>
<p class="cmsimplecore_warning" style="float: left; padding: 5px 16px;"><b>' . $_GET['deleted_of'] . ' </b> ' . $tx['result']['deleted'] . '</p>
<br style="clear: both;">
<br>
<p><a href="./?backups"><b>&laquo; ' . $tx['restore']['back_to'] . '</b></a></p>
<hr>
';
}
// END delete other file in content folder


if ($adm) 
{

    if ($validate)
        $f = 'validate';
    if ($settings)
        $f = 'settings';
    if (isset($sysinfo))
        $f = 'sysinfo';
    if (isset($phpinfo))
        $f = 'phpinfo';
    if ($file)
        $f = 'file';
    if ($userfiles)
        $f = 'userfiles';
    if ($images || $function == 'images')
        $f = 'images';
    if ($downloads || $function == 'downloads')
        $f = 'downloads';
    if ($function == 'save')
        $f = 'save';

    if ($f == 'settings' || $f == 'images' || $f == 'downloads' || $f == 'validate' || $f == 'sysinfo' || $f == 'phpinfo') 
    {
        $title = $tx['title'][$f];
        $o .= "\n\n" . '<h1>' . $title . '</h1>' . "\n";
    }


// System Info, Version Check and Help Links

	if($cmsimple_pwHasher->CheckPassword('test', $cf['security']['password']))
	{
		$o = '
<div class="cmsimplecore_warning" style="clear: both; text-align: center;">
<p>' . $tx['message']['password_default'] . ' ' . $tx['adminmenu']['settings'] . '&nbsp;=>&nbsp;<a href="./?file=config&action=array"><b>' . $tx['adminmenu']['configuration'] . '</b></a></p>
</div>
' . $o;
	}

	// CMSimple info

	if ($f == 'sysinfo') 
	{
		if($cf['site']['allow_versionsinfo'] == 'true')
		{
			if (function_exists('curl_version'))
			{
				$curl = curl_init();
				curl_setopt($curl, CURLOPT_URL, str_replace('http://','https://',CMSIMPLE_VERSIONSINFO));
				curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
				curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
				curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
				$cmsimple_current_version = explode(',', curl_exec($curl));
				curl_close($curl);
			}
			else
			{
				$cmsimple_current_version = explode(',', file_get_contents(str_replace('http://','https://',CMSIMPLE_VERSIONSINFO)));
			}
		}
		
		$o.='<hr />' . "\n";
		
		// CMSimple versioninfo output
		
        $o.= '<h4>' . $tx['sysinfo']['version'] . ':</h4>' . "\n";
        $o.= '<ul>' . "\n" . '<li>' . CMSIMPLE_VERSION . '&nbsp;&nbsp;Released: ' . CMSIMPLE_DATE . '</li>' . "\n" . '</ul>' . "\n" . "\n";
		
		if($cf['site']['allow_versionsinfo'] == 'true')
		{
			if ($cmsimple_current_version[1] == CMSIMPLE_RELEASE)
			{
				$o.='<p style="font-weight: 700; color: #060;">' . $tx['version']['cmsimple_ok'] . '</p>' . "\n";
			}
			
			if ($cmsimple_current_version[1] > CMSIMPLE_RELEASE)
			{
				$o.='<p style="font-weight: 700; color: #c60;">' . $tx['version']['update_available'] . ': &nbsp; <a href="https://www.cmsimple.org/en/?Downloads___CMSimple">' . $tx['version']['info_download'] . '&nbsp;&raquo;</a></p>' . "\n";
			}
			
			if ($cmsimple_current_version[1] < CMSIMPLE_RELEASE)
			{
				$o.='<p style="font-weight: 700; color: #c00;">' . $tx['version']['version_check_failed'] . '</p>' . "\n";
			}
		}

		$o.='<hr />' . "\n";
		
		// plugins versioninfo

		$o.='<h4>' . $tx['sysinfo']['plugins'] . ':</h4>' . "\n" . "\n";
		$o.='<p><span style="background: #090; color: #fff; border: 3px solid #fff; padding: 0 6px;">&nbsp;</span> = ' . $tx['sysinfo']['active'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
		$o.='<span style="background: #eb0; color: #fff; border: 3px solid #fff; padding: 0 6px;">&nbsp;</span> = ' . $tx['sysinfo']['hidden'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
		$o.='<span style="background: #f00; color: #fff; border: 3px solid #fff; padding: 0 6px;">&nbsp;</span> = ' . $tx['sysinfo']['disabled'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
		$o.='<a href="./?&amp;cmsimple_pluginmanager"><b>Pluginmanager &raquo;</b></a></p>';
		
		$o.= '<table class="sysinfo">' . "\n";
		
		foreach($pluginlist_array as $pluginlist_item)
		{
			$o.= '<tr>' . "\n" . '<td>';
			
			if(stristr(file_get_contents('./content/_disabled_plugins.txt'), '|||' . $pluginlist_item . '|||'))
			{
				$o.= '<span style="background: #f00; color: #fff; border: 3px solid #fff; padding: 0 6px; margin: 0 8px 0 0;">&nbsp;</span>';
			}
			elseif(stristr(file_get_contents('./content/_disabled_plugins.txt'), '§' . $pluginlist_item . '§'))
			{
				$o.= '<span style="background: #eb0; color: #fff; border: 3px solid #fff; padding: 0 6px; margin: 0 8px 0 0;">&nbsp;</span>';
			}
			else
			{
				$o.= '<span style="background: #090; color: #fff; border: 3px solid #fff; padding: 0 6px; margin: 0 8px 0 0;">&nbsp;</span>';
			}
			
			$o.= '<b>' . $pluginlist_item . '</b></td>' . "\n";
			
			if (file_exists($pth['folder']['plugins'] . $pluginlist_item . '/version.nfo') && 
			$pluginlist_item != 'jquery' && 
			$pluginlist_item != 'filebrowser' && 
			$pluginlist_item != 'pagemanager' && 
			$pluginlist_item != 'page_params' && 
			$pluginlist_item != 'meta_tags' && 
			$pluginlist_item != 'tinymce' &&
			$cf['site']['allow_versionsinfo'] == 'true')
			{
				// define pluginversion user array
				$cmsimple_pluginversion_user = explode(',', trim(file_get_contents($pth['folder']['plugins'] . $pluginlist_item . '/version.nfo')));
				
				
				// define pluginversion provider array
				if (function_exists('curl_version'))
				{
					$curl = curl_init();
					
					if(strpos($cmsimple_pluginversion_user[6],'ge-webdesign.de'))
					{
						curl_setopt($curl, CURLOPT_URL, str_replace('http://','https://',$cmsimple_pluginversion_user[6]));
					}
					else
					{
						curl_setopt($curl, CURLOPT_URL, $cmsimple_pluginversion_user[6]);
					}
					
					curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
					curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
					curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
					$cmsimple_pluginversion_provider = explode(',', curl_exec($curl));
					curl_close($curl);
				}
				else
				{
					if(strpos($cmsimple_pluginversion_user[6],'ge-webdesign.de'))
					{
						$cmsimple_pluginversion_provider = explode(',', file_get_contents(str_replace('http://','https://',$cmsimple_pluginversion_user[6])));
					}
					else
					{
						$cmsimple_pluginversion_provider = explode(',', file_get_contents($cmsimple_pluginversion_user[6]));
					}
				}
				
				if($cmsimple_pluginversion_user[1] == $cmsimple_pluginversion_provider[1])
				{
					$o.= '<td><span style="color: #060;"> ' . $tx['version']['current_version_installed'] . ' </span>(' . $cmsimple_pluginversion_provider[2] . ')</td>' . "\n" . '<td></td>' . "\n";
				}
				
				if($cmsimple_pluginversion_user[1] < $cmsimple_pluginversion_provider[1])
				{
					$o.= '<td><span style="color: #c60;"><b> ' . $tx['version']['update_available'] . ' </b></span></td>' . "\n" . '<td><a href="' . htmlspecialchars(strip_tags($cmsimple_pluginversion_provider[5]), ENT_QUOTES, 'UTF-8') . '">' . $tx['version']['info_download'] . '&nbsp;&raquo;</a></td>' . "\n";
				}
				
				if($cmsimple_pluginversion_user[1] > $cmsimple_pluginversion_provider[1])
				{
					$o.= '<td><span style="color: #c00;"> ' . $tx['version']['version_check_failed'] . ' </span></td>' . "\n" . '<td></td>' . "\n";
				}
			}
			else
			{
				if($pluginlist_item == 'jquery' || $pluginlist_item == 'filebrowser' || $pluginlist_item == 'pagemanager' || $pluginlist_item == 'page_params' || $pluginlist_item == 'meta_tags' || $pluginlist_item == 'tinymce')
				{
					$o.= '<td><span style="font-style: italic; color: #909;">' . $tx['version']['standard_plugin'] . '</span></td>' . "\n" . '<td></td>' . "\n";
				}
				else
				{
					if($cf['site']['allow_versionsinfo'] == 'true')
					{
						$o.= '<td> ' . $tx['version']['no_versionsinfo'] . '</td>' . "\n" . '<td></td>' . "\n";
					}
					else
					{
						$o.= '<td>&nbsp;</td>' . "\n" . '<td></td>' . "\n";
					}
				}
			}
			$o.= '</tr>' . "\n" . "\n";
		}
		
		$o.='</table>' . "\n";

		$o.='<hr />' . "\n";
		
		// php version info
		
        $o.= '<p><b>' . $tx['sysinfo']['php_version'] . '</b></p>' . "\n" . '<ul>' . "\n" . '<li>' . phpversion() . '</li>' . "\n" . '<li><a href="./?&phpinfo" target="blank"><b>' . $tx['sysinfo']['phpinfo_link'] . '</b></a> &nbsp; ' . $tx['sysinfo']['phpinfo_hint'] . '</li>' . "\n" . '</ul>' . "\n" . "\n";

		$o.='<hr />' . "\n";
		
		// help and info links
		
        $o.='<h4>' . $tx['sysinfo']['helplinks'] . '</h4>' . "\n" . "\n";
        $o.='<ul>
<li><a href="https://www.cmsimple.org/">cmsimple.org &raquo;</a></li>
<li><a href="https://www.cmsimple.org/forum/">CMSimple Forum &raquo;</a></li>
</ul>' . "\n" . "\n";
		$o.='<hr />' . "\n";
    }

// PHP Info

    if ($f == 'phpinfo') {
        phpinfo();
        exit;
    }


// SETTINGS

	$cmsimpleAdmin = '';
	if(file_exists('./content/cmsimpleAdmin.php'))
	{
		include('./content/cmsimpleAdmin.php');
		$cmsimpleAdmin = md5($cmsimpleAdminUser); 
		if(isset($_POST['user'])){$_SESSION['cmsimpleAdmin'] = md5($_POST['user']);}
	}

	if ($f == 'settings') 
	{
		// CoAuthors
		if($cf['site']['allow_config'] == 'true' || isset($_SESSION['cmsimpleAdmin']) && $_SESSION['cmsimpleAdmin'] == $cmsimpleAdmin)
		{
			$o .= '
<p>' . $tx['settings']['warning'] . '</p>
<ul>
<li><a href="./?file=config&amp;action=array">' . $tx['action']['edit'] . ' ' . $tx['filetype']['config'] . ' &raquo;</a></li>
<li><a href="./?file=language&amp;action=array">' . $tx['action']['edit'] . ' ' . $tx['filetype']['language'] . ' &raquo;</a></li>
<li><a href="./?file=template&amp;action=edit">' . $tx['action']['edit'] . ' ' . $tx['filetype']['template'] . ' &raquo;</a></li>
<li><a href="./?file=stylesheet&amp;action=edit">' . $tx['action']['edit'] . ' ' . $tx['filetype']['stylesheet'] . ' &raquo;</a></li>
<li><a href="?backups">' . $tx['restore']['headline_backups'] . ' &raquo;</a></li>
<li><a href="./?file=log&amp;action=view" target="_blank">' . $tx['action']['view'] . ' ' . $tx['filetype']['log'] . ' &raquo;</a> ' . $tx['sysinfo']['phpinfo_hint'] . '</li>';
			if($cf['site']['allow_linkcheck'] == 'true')
			$o .= '<li><a href="./?&amp;validate">' . ucfirst($tx['adminmenu']['validate']) . '</a></li>';
			$o .= '<li><a href="./?&amp;sysinfo">' . ucfirst($tx['adminmenu']['sysinfo']) . '</a></li>
</ul>
';
		}
		else
		{
			$o .= '
<p class="cmsimplecore_warning" style="text-align: center;">No permission - keine Berechtigung</p>
';
		}
	}


// changed backup-area, added pagedata.php download, removed edit-funktion, added backupexplain3

	if (isset($backups))
	{
		$o .= '
<h4>' . $tx['restore']['headline_backups'] . '</h4>
<p>' . $tx['settings']['backupexplain3'] . '</p>
';

		// restore - show content.php and pagedata.php
		foreach (array('content', 'pagedata') as $i)
		{
			$o .= '
<p><a href="./?file=' . $i . amp() . 'action=view" title="' . $tx['restore']['view_file'] . '">' . ucfirst($tx['filetype'][$i]) . '</a>' . ' (' . (round((filesize($pth['folder']['content'] . $i . '.php')) / 102.4) / 10) . ' KB) | 
<a href="./?file=' . $i . amp() . 'action=download"><b>' . $tx['action']['download'] . ' &raquo;</b></a> 
</p>' . "\n";
		}
		$o .= '
<hr>
<br>
<b>' . $tx['restore']['backup_files'] . ':</b>
<p>' . $tx['settings']['backupexplain1'] . '</p>
<p>' . $tx['settings']['backupexplain2'] . '</p>
<p>' . $tx['settings']['warning'] . '</p>
<hr>
';

		// show backup files
		$fs = sortdir('./backups/cmsimple/');
		$backup_files = array();

		// create backup files array
		foreach ($fs as $bf_elements)
		{
			if (preg_match("/\d{3}_content\.php/", $bf_elements))
			{
				$backup_files[] = $bf_elements;
				$backup_files[] = str_ireplace('content','pagedata',$bf_elements);
			}
		}

		if(count($backup_files) > 0)
		{
			foreach ($backup_files as $p)
			{
				$o .= '
<p>
<a href="./?file=' . $p . amp() . 'action=view" title="' . $tx['restore']['view_file'] . '">' . $p . '</a> (' . (round((filesize('./backups/cmsimple/' . $p)) / 102.4) / 10) . ' KB)
</p>';

				if (preg_match("/\d{3}_pagedata\.php/", $p))
				{
					$o .= '
<p>
<a href="?delete_backup&delete_pfbackup=' . str_ireplace('.php','',$p) . '&delete_cfbackup=' . str_ireplace('pagedata','content',str_ireplace('.php','',$p)) . '&securityCode=' . $_SESSION[$csrfSession] . '" onClick="return confirm(\'' . $tx['restore']['confirm_delete_backup'] . '\')"> <img src="' . $pth['folder']['base'] . 'css/icons/delete.gif" style="margin-bottom: -3px;" alt=""> <b>' . $tx['restore']['delete_backup'] . '</b></a> &nbsp;|&nbsp; <a href="?restore&restore_pf=' . str_ireplace('.php','',$p) . '&restore_cf=' . str_ireplace('pagedata','content',str_ireplace('.php','',$p)) . '&securityCode=' . $_SESSION[$csrfSession] . '" onClick="return confirm(\'' . $tx['restore']['confirm_restore_backup'] . '\')"> <img src="' . $pth['folder']['base'] . 'css/icons/restore.gif" style="margin-bottom: -3px;" alt=""> <b>' . $tx['restore']['restore_backup'] . '</b></a>
</p>
';
				}

				if (preg_match("/\d{3}_pagedata/", $p)) $o .= '<hr>' . "\n";
			}
		}
		else
		{
			$o .= '
<p>' . $tx['restore']['no_backups_in_content_folder'] . '</p>
<hr>';
		}

		// create other files array
		$other_files = array();
		foreach ($fs as $of_elements)
		{
			if (!preg_match("/\d{3}_content\.php|\d{3}_pagedata\.php|.htaccess/", $of_elements) && !is_dir('./backups/cmsimple/' . $of_elements) && $of_elements != 'content.php' && $of_elements != 'pagedata.php' && strpos($of_elements, '.') != 0)
			{
				$other_files[] = $of_elements;
			}
		}
		
		$o .= '
<br>
<b>' . $tx['restore']['other_files'] . ':</b>'; 

		if (count($other_files) > 0)
		{
			$o .= '
<hr>
';

			foreach ($other_files as $of)
			{
				if(preg_match("/\d{3}-backup-by-restore_content\.php/", $of) && file_exists('./backups/cmsimple/' . str_replace('content','pagedata',$of)))
				{
					$o .= '
<div style="background: #d6d6d0; padding: 1px 12px 3px 12px; margin: 6px 0;">';
				}

				$o .= '
<p>
<a href="?delete_of&delete_of=' . $of . '&securityCode=' . $_SESSION[$csrfSession] . '" title="' . $tx['restore']['delete_file'] . '" onClick="return confirm(\'' . $tx['restore']['confirm_delete_file'] . '\')"><img src="' . $pth['folder']['base'] . 'css/icons/delete.gif" style="margin-bottom: -3px;" alt=""></a>&nbsp; 
<a href="./?restoreFileView&file=' . $of . amp() . 'action=view" title="' . $tx['restore']['view_file'] . '">' . $of . '</a> (' . (round((filesize('./backups/cmsimple/' . $of)) / 102.4) / 10) . ' KB)';

				$o .= '
</p>
';
				if (preg_match("/\d{3}-backup-by-restore_pagedata\.php/", $of) && file_exists('./backups/cmsimple/' . str_replace('pagedata','content',$of)))
				{
					$o .= '
<p><a href="?delete_backup&delete_pfbackup=' . str_ireplace('.php','',$of) . '&delete_cfbackup=' . str_ireplace('pagedata','content',str_ireplace('.php','',$of)) . '&securityCode=' . $_SESSION[$csrfSession] . '" onClick="return confirm(\'' . $tx['restore']['confirm_delete_backup'] . '\')"> <img src="' . $pth['folder']['base'] . 'css/icons/delete.gif" style="margin-bottom: -3px;" alt=""> <b>' . $tx['restore']['delete_backup'] . '</b></a> 
&nbsp;|&nbsp;<a href="?restore&restore_pf=' . str_ireplace('.php','',$of) . '&restore_cf=' . str_ireplace('pagedata','content',str_ireplace('.php','',$of)) . '&securityCode=' . $_SESSION[$csrfSession] . '" onClick="return confirm(\'' . $tx['restore']['confirm_restore_backup'] . '\')"> <img src="' . $pth['folder']['base'] . 'css/icons/restore.gif" style="margin-bottom: -3px;" alt=""> <b>' . $tx['restore']['restore_backup'] . '</b></a>
</p>';
				}

				if(preg_match("/\d{3}-backup-by-restore_pagedata\.php/", $of) && file_exists('./backups/cmsimple/' . str_replace('pagedata','content',$of)))
				{
					$o .= '
</div>
';
				}
			}
		$o .= '<hr>
';
		}
		else
		{
			$o .= '
<p>' . $tx['restore']['no_other_files_in_content_folder'] . '</p>
<hr>
';
		}
	}

// END modified backup-area

    if ($f == 'file') 
	{
        if (preg_match("/\d{3}_content\.php|\d{3}_pagedata\.php/", $file) || isset($restoreFileView))
            $pth['file'][$file] = $pth['folder']['content'] . $file;
		if (isset($pth['file'][$file]) && $pth['file'][$file] != '') 
		{
            if ($action == 'view' && $cf['site']['allow_config'] == 'true' || $action == 'view' && isset($_SESSION['cmsimpleAdmin']) && $cmsimpleAdmin == $_SESSION['cmsimpleAdmin']) 
			{
                header('Content-Type: text/plain');
                echo rmnl(rf($pth['file'][$file]));
                exit;
            }
            if ($action == 'download') 
			{
                download($pth['file'][$file]);
            } 
			else 
			{
                initvar('form');
                if ($action == 'array')
                    $form = 'array';
                if ($form == 'array') 
				{
                    if ($file == 'language')
                        $a = 'tx';

                    if ($file == 'config') 
					{
                        $a = 'cf';
                    }
					
                    if ($file == 'plugin_config') 
					{
                        $a = 'plugin_cf';
                    }
					
                    if ($file == 'plugin_language') 
					{
                        $a = 'plugin_tx';
                    }
                }
                if ($action == 'save') 
				{
					// csrf protection
					csrfProtection();
					
					if ($form == 'array') 
					{
                        $text = "<?php\n";
                        $text.= "/* utf8-marker = äöüß */\n";
                        foreach ($GLOBALS[$a] as $k1 => $v1) 
						{
                            if (is_array($v1)) 
							{
                                foreach ($v1 as $k2 => $v2) 
								{
                                    if (!is_array($v2)) 
									{
                                        initvar($k1 . '_' . $k2);
                                        $GLOBALS[$a][$k1][$k2] = stsl($GLOBALS[$k1 . '_' . $k2]);
                                        if (($k1 == 'security' && $GLOBALS[$a][$k1][$k2] != '') && $k2 == 'password') 
										{
                                            if ($GLOBALS[$a][$k1][$k2] != stsl($_POST[$k1 . '_password_old'])) 
											{
                                                $GLOBALS[$a][$k1][$k2] = $cmsimple_pwHasher->HashPassword($GLOBALS[$a][$k1][$k2]);
                                            }
                                        }
                                        $text .= '$' . $a . '[\'' . $k1 . '\'][\'' . $k2 . '\']="' . addcslashes($GLOBALS[$a][$k1][$k2], "\0..\37\"\$\\") . '";' . "\n";
                                    }
                                }
                            }
                        }
                        $text .= '?>';
                    }
                    else
					{
                        $text = stsl($text);
					}
					
                    if ($fh = fopen($pth['file'][$file], "w")) 
					{
                        fwrite($fh, $text);
                        fclose($fh);
						if (!include($pth['file']['language']))
						{
							die('Language file ' . $pth['file']['language'] . ' missing');
						}
                    }
                    else
                        e('cntwriteto', $file, $pth['file'][$file]);
                }
                $title = ucfirst($tx['action']['edit']) . ' ' . (isset($tx['filetype'][$file]) ? $tx['filetype'][$file] : $file);
				
				
                $o .= '<p style="width: 100%; float: left; height: 1px;"></p><br /><h1>' . $title . '</h1>' . "\n";
				
				if (isset($_SESSION['cmsimpleAdmin']) && $_SESSION['cmsimpleAdmin'] == $cmsimpleAdmin)
				{
					$o.= '<p style="color: #900;"><b>Logged in as Admin</b></p>';
				}
				
				// warning if not exists own config.php of a subsite or second language
				if($file == 'config' && !file_exists('./config.php') && !file_exists('./cmsimple/config.php'))
				{
					$o.='<p class="cmsimplecore_warning" style="text-align: center;">' . $tx['message']['own_configfile'] . '</p>';
				}
				
				if(isset($_POST['cmsimpleDataStored']))
				{
					$o.='<p class="cmsimplecore_warning" style="text-align: center; max-width: 320px; margin-bottom: 16px;">' . $tx['message']['file_saved'] . '</p>' . "\n";
					$o .= '<ul style="font-weight: 700;">' . "\n";
					$o .= '<li><a href="./?file=config&amp;action=array">' . $tx['action']['edit'] . ' ' . $tx['filetype']['config'] . ' &raquo;</a></li>' . "\n";
					$o .= '<li><a href="./?file=language&amp;action=array">' . $tx['action']['edit'] . ' ' . $tx['filetype']['language'] . ' &raquo;</a></li>' . "\n";
					$o .= '<li><a href="./?file=template&amp;action=edit">' . $tx['action']['edit'] . ' ' . $tx['filetype']['template'] . ' &raquo;</a></li>' . "\n";
					$o .= '<li><a href="./?file=stylesheet&amp;action=edit">' . $tx['action']['edit'] . ' ' . $tx['filetype']['stylesheet'] . ' &raquo;</a></li>' . "\n";
					$o .= '</ul>' . "\n";
				}
				else
				{
					$o .= '<form action="./' . (isset($plugin) ? '?' . amp() . $plugin : '') . '" method="post" autocomplete="off">';
					
					$o .= '<input type="hidden" name="cmsimpleDataStored" value="cmsimpleDataStored">' . "\n";
					if($cf['use']['csrf_protection'] == 'true') $o .= '<input type="hidden" name="csrf_token" value="' . $_SESSION[$csrfSession] . '">' . "\n";
					
					// CoAuthors
					if (($form == 'array' && $cf['site']['allow_config'] == 'true') || ($form == 'array' && isset($_SESSION['cmsimpleAdmin']) && $cmsimpleAdmin == $_SESSION['cmsimpleAdmin'])) 
					{
						$o .= '<input type="submit" class="submit" value="' . ucfirst($tx['action']['save']) . '">' . "\n";
						$o .= '<table width="100%" cellpadding="1" cellspacing="0" border="0">' . "\n";
						foreach ($GLOBALS[$a] as $k1 => $v1) 
						{
							if (!isset($plugin) || $k1 == $plugin) 
							{
								if($file=='config' || $file=='language')
								{
									$o .= '<tr>' . "\n" . '<td colspan="2"><h4>' . ucfirst($k1) . '</h4></td>' . "\n" . '</tr>' . "\n";
								}
								if (is_array($v1))
								{
									foreach ($v1 as $k2 => $v2)
									{
										if (!is_array($v2)) 
										{
											$o .= '<tr>' . "\n" . '<td valign="top" style="min-width: 250px;">';
											if (isset($tx['help'][$k1 . '_' . $k2]) && ($a == 'cf'))
											$o .= '<a href="#" class="pl_tooltip">' . '<img src = "' . $pluginloader_cfg['folder_pluginloader'] . 'css/help_icon.png" alt="" class="helpicon">' . '<span style="padding: 10px 9px 12px 9px;">' . str_replace('<br><br><br><br>','<br><br>', str_replace("\r",'<br>',str_replace("\n",'<br>',$tx['help'][$k1 . '_' . $k2]))) . '</span></a>' . "\n";
											$o .= "\n" . ucfirst($k2) . ':</td>' . "\n" . '<td style="width: 90%;">';
											if ($k1 == 'security' && $k2 == 'password') 
											{
												$o .= '<input type="hidden" name="' . $k1 . '_' . $k2 . '_old" value="' . $v2 . '">';
											}
											if ($k1 . $k2 == 'securitytype') 
											{
												$o .= 'Deprecated - not in use anymore.';
											}
											
											else if ($k1 . $k2 == 'securitypassword')
											{
												$o .='<input type="password" class="cmsimplecore_settings" name="' . $k1 . '_' . $k2 . '" value="' . $cf['security']['password'] . '">';
											}
											
											else if ($k1 . $k2 == 'languagedefault')
											{
												selectlist('language', "/.php/i", "/.php/i");
											}
											else if ($k1 . $k2 == 'sitetemplate')
											{
												selectlist('templates', "/^[^\.]*$/i", "/^([^\.]*)$/i");
											}
											else if ($k1 . $k2 == 'editortinymce_toolbar')
											{
												selectlist('toolbars', "/.js/i", "/.js/i");
											}
											else if ($k1 . $k2 == 'jqueryfile_core')
											{
												selectlist('jquery', "/.js/i", "/nothing/i");
											}
											else if ($k1 . $k2 == 'jqueryfile_ui')
											{
												selectlist('jquery_ui', "/.js/i", "/nothing/i");
											}

											// use input fields only in CMS config
											else if ($a == 'cf')
											{
												$o .= '<input type="text" class="cmsimplecore_settings" name="' . $k1 . '_' . $k2 . '" value="' . htmlspecialchars($v2, ENT_COMPAT, 'UTF-8') . '" size="30">' . "\n";
											}

											// height of textarea depending on text length
											else if (strlen($v2) < 50)
											{
												$o .= '<textarea rows="2" cols="30" class="cmsimplecore_settings cmsimplecore_settings_short" name="' . $k1 . '_' . $k2 . '">' . htmlspecialchars($v2, ENT_NOQUOTES, 'UTF-8') . "</textarea>\n";
											}
											else
											{
												$o .= '<textarea rows="2" cols="30" class="cmsimplecore_settings" name="' . $k1 . '_' . $k2 . '">' . htmlspecialchars($v2, ENT_NOQUOTES, 'UTF-8') . "</textarea>\n";
											}
											$o .= '</td>' . "\n" . '</tr>' . "\n";
										}
									}
								}
							}
						}
						$o .= '</table>' . "\n" . '<input type="hidden" name="form" value="' . $form . '">' . "\n";
					}
					else
					{
						if($cf['site']['allow_config'] == 'true' || isset($_SESSION['cmsimpleAdmin']) && $cmsimpleAdmin == $_SESSION['cmsimpleAdmin']) // CoAuthors
						{
							$o.= '<p><b>' . $tx['adminmenu']['template'] . ':</b> ' . $cf['site']['template'] . '</p>';
							$o.= '<textarea rows="25" cols="50" name="text" class="cmsimplecore_file_edit">' . rf($pth['file'][$file]) . '</textarea>';
						}
						else
						{
							$o .= '<p class="cmsimplecore_warning" style="text-align: center;">No permission - keine Berechtigung</p>' . "\n";
						}
					}
					
					
					if (isset($admin) && $admin && $cf['site']['allow_config'] == 'true' || (isset($admin) && $admin && $cmsimpleAdmin == $_SESSION['cmsimpleAdmin'])) // CoAuthors
					{
						$o .= '<input type="hidden" name="admin" value="' . $admin . '">' . "\n";
					}
					
					if ($cf['site']['allow_config'] == 'true' || isset($_SESSION['cmsimpleAdmin']) && $cmsimpleAdmin == $_SESSION['cmsimpleAdmin']) // CoAuthors
					{
						$o .= '<input type="hidden" name="file" value="' . $file . '">' . "\n" . '<input type="hidden" name="action" value="save">' . "\n" . ' <input type="submit" class="submit" style="margin-top:1em;" value="' . ucfirst($tx['action']['save']) . '">' . "\n" . '</form>' . "\n";
					}
				}
            }
        }
    }

// linkcheck

    if ($f == 'validate') 
	{
        $o .= check_links();
    }
}


if ($s == -1 && !$f && $o == '' && $su == '') 
{
    $s = 0;
    $hs = 0;
}
// END linkcheck

// SAVE

if ($adm && $f == 'save') 
{
	csrfProtection();

    $ss = $s;
    $text = preg_replace('/<p>({{{PLUGIN:.*?|{{{function:.*?|{{{f:.*?|{{{p:.*?|#CMSimple .*?)<\/p>/is', '<div>$1</div>', $text);
    $c[$s] = $text;

    if ($s == 0)
	{
		if($cf['use']['h1only_pagesplitting'] == 'true')
		{
			if (!preg_match("~^<h1.*?class=\"_level[1-6]_page_\"[^>]*?>.*?</h1>~i", rmanl($c[0])) && !preg_match("/^(<p[^>]*>)?(\&nbsp;| |<br \/>)?(<\/p>)?$/i", rmanl($c[0])))
			{
				$c[0] = '<h1>' . $tx['toc']['missing'] . '</h1>' . "\n" . $c[0];
			}
		}
		else
		{
			if (!preg_match("/^<h1[^>]*>.*<\/h1>/i", rmanl($c[0])) && !preg_match("/^(<p[^>]*>)?(\&nbsp;| |<br \/>)?(<\/p>)?$/i", rmanl($c[0])))
			{
				$c[0] = '<h1>' . $tx['toc']['missing'] . '</h1>' . "\n" . $c[0];
			}
		}
	}

    $title = ucfirst($tx['filetype']['content']);

// 4.5
    if ($fh = fopen($pth['file']['content'], "w")) 
	{
        fwrite($fh, '<?php // utf8-marker = äöü
if(!defined(\'CMSIMPLE_VERSION\') || preg_match(\'/content.php/i\', $_SERVER[\'SCRIPT_NAME\']))
{
	die(\'No direct access\');
}
?>
');
// END 4.5

        foreach ($c as $i) 
		{
			fwrite($fh, rmnl($i . "\n"));
		}
		fclose($fh);
		
		if($cf['use']['h1only_pagesplitting'] == 'true')
		{
			preg_match('~<h1.*?class=".*?_level([1-6])_page_.*?".*?>(.*?)</h1>~isu', $c[$s], $matches);
		}
		else
		{
			preg_match('~<h([1-'.$cf['menu']['levels'].'])[^>]*>(.+?)</h[1-'.$cf['menu']['levels'].']>~isu', $c[$s], $matches);
		}

		if (count($matches) > 0) 
		{
            $temp = explode($cf['uri']['seperator'], $selected);
            array_splice($temp, -1, 1, uenc(rmnl(trim(strip_tags($matches[2])))));
            $su = implode($cf['uri']['seperator'], $temp);
        } 
		else 
		{
            $su = $u[max($s - 1, 0)];
        }
		header("Location: ./?" . $su);
    }
    else
	{
        e('cntwriteto', 'content', $pth['file']['content']);
	}
    $title = '';
}


if ($adm && $edit && (!$f || $f == 'save') && !$download) {
    if (isset($ss))
        if ($s < 0 && $ss < $cl)
            $s = $ss;
    if ($s > -1) {
        $su = $u[$s];

        $editor = $cf['editor']['external'] == '' || init_editor();
        if (!$editor) 
		{
            $e .= '<li>'.sprintf('External editor %s missing', $cf['editor']['external']).'</li>'."\n";
        }
        $o .= '<form method="post" id="ta" action="./">'; 
		if($cf['use']['csrf_protection'] == 'true') $o .= '<input type="hidden" name="csrf_token" value="' . $_SESSION[$csrfSession] . '">' . "\n";
		$o .= '<input type="hidden" name="selected" value="' . $u[$s] . '">'
. '<input type="hidden" name="function" value="save">'
. '<textarea name="text" id="text" class="cmsimple-editor" style="height: ' . $cf['editor']['height'] . 'px; width: 100%;" rows="30" cols="80">'
. htmlspecialchars($c[$s], ENT_NOQUOTES, 'UTF-8')
. '</textarea>';
        if ($cf['editor']['external'] == '' || !$editor) 
		{
            $o .= '<input type="submit" value="' . ucfirst($tx['action']['save']) . '">';
        }
        $o .= '
               </form>
               ';
    }
    else
	{
		if(!isset($pagemanager))$o .= '<p>' . $tx['error']['cntlocateheading'] . '</p>' . "\n";
	}
}

// edit logfile not allowed

if($file == 'log' && $action == 'edit')
{
	$o = '<p><b>No permission to edit logfile!</b></p>';
}

if ($adm && ((isset($images) && $images) 
|| (isset($downloads) && $downloads) 
|| (isset($userfiles) && $userfiles) 
|| (isset($media) && $media) 
|| $edit && (!$f || $f == 'save') && !$download)) 
{
    if ($cf['filebrowser']['external'] && !file_exists($pth['folder']['plugins'].$cf['filebrowser']['external'])) 
	{
        $e .= '<li>'.sprintf('External filebrowser %s missing', $cf['filebrowser']['external']).'</li>'."\n";
    }
}

if ($adm && $f == 'xhpages') 
{
    if ($cf['pagemanager']['external'] && !file_exists($pth['folder']['plugins'].$cf['pagemanager']['external'])) 
	{
        $e .= '<li>'.sprintf('External pagemanager %s missing', $cf['pagemanager']['external']).'</li>'."\n";
    }
}

// CoAuthors - create textfiles from h1 pages

if($cf['use']['h1only_pagesplitting'] == 'true')
{
	$menulevel1_identifierSearchTerm = '_level1_page_';
}
else
{
	$menulevel1_identifierSearchTerm = '</h1>';
}

if($cf['site']['create_content_textfiles'] == 'true' && $f == 'save' && stristr($c[$s],$menulevel1_identifierSearchTerm))
{
	csrfProtection();

	if(is_writable('./userfiles/co_author/'))
	{
		$handle = fopen('./userfiles/co_author/' . $su . '.txt', "w");
		fwrite($handle, $c[$s]);
		fclose($handle);
	}
	else
	{
		if($cf['language']['default'] == $sl)
		{
			$e.='<ul><li>Folder <b>./userfiles/co_author/"</b> not exists or not writable</li></ul>';
		}
		else
		{
			$e.='<ul><li>Folder <b>../' . $sl . '/userfiles/co_author/"</b> not exists or not writable</li></ul>';
		}
	}
}

// END CoAuthors - create textfiles from h1 pages

// pluginmanager (added)

if(isset($_GET['pm_data_saved']))
{
	csrfProtection();
	
	$displug = implode(' ', $_POST);
	if(isset($_SESSION[$csrfSession]))
	{
		$displug = str_replace($_SESSION[$csrfSession],'',$displug);
		$displug = str_replace('  ','',$displug);
		$displug = str_replace($_SESSION[$csrfSession],' ',$displug);
	}
	$handle = fopen($pm_datafile_path, 'w');
	fwrite($handle, $displug);
	fclose($handle);

	$o='<p class="cmsimplecore_warning" style="text-align: center;">' . $pluginloader_tx['pluginmanager']['message_data_saved'] . '</p>';
	$o.='<p>' . $pluginloader_tx['pluginmanager']['linktext_back_to'] . ' <a href="./?&amp;normal&amp;cmsimple_pluginmanager"><b>Pluginmanager &raquo;</b></a></p>';
}

if($adm && isset($cmsimple_pluginmanager))
{
	$o .= cmsimple_pluginmanager();
}

// END pluginmanager (added)

/* 
###################################
   A D M I N   F U N C T I O N S
################################### 
*/

/**
 * collects the links
 * calls the appropriate fucntion to check each link
 * passes the results to
 *
 *
 * @global <array> $c - the cmsimple pages
 * @global <array> $u - the urls
 * @global <array> $h - the headings
 * @global <int> $cl  - the number of pages
 * @global <string> $o - the output string
 */
function check_links() 
{
    global $c, $u, $h, $cl, $o;
    $checkedLinks = 0;
    for ($i = 0; $i < $cl; $i++) 
	{
        preg_match_all('/<a.*?href=["]*([^"]*)["]*.*?>(.*?)<\/a>/i', $c[$i], $pageLinks);
        if (count($pageLinks[1]) > 0) 
		{

// First change for linkcheck page-internal anchors
            foreach ($pageLinks[1] as $link) 
			{
                if (strpos($link, '#') === 0) 
				{
                    $hrefs[$i][] = '?' . $u[$i] . $link;
                } 
				else 
				{
                    $hrefs[$i][] = $link;
                }
            }
// END first change for linkcheck page-internal anchors

            $texts[$i] = $pageLinks[2];
            $checkedLinks += count($pageLinks[1]);
        }
    }
    $hints = array();
    $i = 0;
    foreach ($hrefs as $index => $currentLinks) 
	{
        foreach ($currentLinks as $counter => $link) 
		{
            $parts = parse_url($link);
            
			if(!isset($parts["scheme"])) $parts["scheme"] = '';
//			print_r($parts);
			switch ($parts["scheme"]) 
			{
                case 'http': $status = check_external_link($parts);
                    break;
				case 'https': $status = check_external_httpslink($parts);
                    break;
                case 'mailto': $status = 'mailto';
                    break;
                case '': $status = check_internal_link($parts);
                    break;
                default: $status = 'unknown';
            }
			
			
            if ($status == '200') 
			{
                continue;
            }
            if ($status == '400' || $status == '404' 
			|| $status == '500' || $status == 'internalfail' 
            || $status == 'externalfail' 
			|| $status == 'content not found' 
			|| $status == 'file not found') 
			{
                $hints[$index]['errors'][] = array($status, $link, $texts[$index][$counter]);
                continue;
            }
            $hints[$index]['caveats'][] = array($status, $link, $texts[$index][$counter]);
        }
        $i++;
    }
    return linkcheck_message($checkedLinks, $hints);
}


// new GE 2022-05
function check_internal_link($test) 
{
	global $c,$u,$cl,$sn,$pth,$sl,$cf,$s;  // add $pth to globals
//	echo $s;
//	$s=2;
	if(empty($_SERVER['HTTPS'])) $htpLinkcheck = 'http://'; else $htpLinkcheck = 'https://';

	if(!isset($test['path'])){$testpath = '';}else{$testpath = $test['path'];}
	if(!isset($test['query'])){$testquery = '';}else{$testquery = $test['query'];}

	$urlLinkcheck = fopen ($htpLinkcheck . $_SERVER['SERVER_NAME'] . str_replace($testpath,'',$sn) . $testpath . '?' . $testquery, "r");
	if($urlLinkcheck)
	{
		fclose($urlLinkcheck);
		return 200;
	}
	else return 'internalfail';
}

/**
 * checks web links and returns the status code
 *
 * @param <array> $parts (parsed url)
 * @return <string> status code
 */
function check_external_link($parts) 
{
	set_time_limit(60);
	if(!isset($parts['path'])){$partspath = '';}else{$partspath = $parts['path'];}
	if(!isset($parts['query'])){$partsquery = '';}else{$partsquery = '?' . $parts['query'];}
    $host = $parts['host'] . $partspath . $partsquery;
    $fh = get_headers('http://' . $host);
	if(!isset($fh[0])){$fhnull = '';}else{$fhnull = $fh[0];}
    return substr($fhnull, 9, 3);
}

function check_external_httpslink($parts) 
{
	set_time_limit(60);
	if(!isset($parts['path'])){$partspath = '';}else{$partspath = $parts['path'];}
	if(!isset($parts['query'])){$partsquery = '';}else{$partsquery = '?' . $parts['query'];}
    $host = $parts['host'] . $partspath . $partsquery;
    $fh = get_headers('https://' . $host);
	if(!isset($fh[0])){$fhnull = '';}else{$fhnull = $fh[0];}
	return substr($fhnull, 9, 3);
}

// new linkcheck
/**
 * prepares the html output for the linkcheck results
 *
 * @todo internalization
 *
 * @global <array> $tx
 * @global <array> $h
 * @global <array> $u
 * @param <int> $checkedLinks - number of checked links
 * @param <array> $hints - the errors an warnings
 * @return <string>
 */
function linkcheck_message($checkedLinks, $hints) 
{
    global $tx, $h, $u;
    $html = "\n" . '<p>' . $checkedLinks . ' ' . $tx['link']['checked'] . '</p>' . "\n";
    if (count($hints) == 0) 
	{
        $html .= '<p><b>' . $tx['link']['check_ok'] . '</b></p>' . "\n";
        return $html;
    }
    $html .= '<p><b>' . $tx['link']['check_errors'] . '</b></p>' . "\n";
    $html .= '<p>' . $tx['link']['check'] . '</p>' . "\n";
    foreach ($hints as $page => $problems) 
	{
        $html .= '<hr>' . "\n\n" . '<h4>' . $tx['link']['page'] . '<a href="?' . $u[$page] . '">' . $h[$page] . '</a></h4>' . "\n";
        if (isset($problems['errors'])) 
		{
            $html .= '<h4>' . $tx['link']['errors'] . '</h4>' . "\n" . '<ul>' . "\n";
            foreach ($problems['errors'] as $error) 
			{
                $html .= '<li>' . "\n" . '<b>' . $tx['link']['link'] . '</b><a href="' . $error[1] . '">' . $error[2] . '</a><br>' . "\n";
                $html .= '<b>' . $tx['link']['linked_page'] . '</b>' . $error[1] . '<br>' . "\n";
                if ((int) $error[0]) 
				{
                    $html .= '<b>' . $tx['link']['error'] . '</b>' . $tx['link']['ext_error_page'] . '<br>' . "\n";
                    $html .= '<b>' . $tx['link']['returned_status'] . '</b>' . $error[0];
                }
                if ($error[0] == 'internalfail') 
				{
                    $html .= '<b>' . $tx['link']['error'] . '</b>' . $tx['link']['int_error'];
                }
                if ($error[0] == 'externalfail') 
				{
                    $html .= '<b>' . $tx['link']['error'] . '</b>' . $tx['link']['ext_error_domain'];
                }
                if ($error[0] == 'content not found') 
				{
                    $html .= '<b>' . $tx['link']['error'] . '</b>' . $tx['link']['int_error'];
                }
                $html .= "\n" . '</li>' . "\n";
            }
            $html .= '</ul>' . "\n" . "\n";
        }
        if (isset($problems['caveats'])) 
		{
            $html .= '<h4>' . $tx['link']['hints'] . '</h4>' . "\n" . '<ul>' . "\n";
            foreach ($problems['caveats'] as $notice) 
			{
                $html .= '<li>' . "\n" . '<b>' . $tx['link']['link'] . '</b>' . '<a href="' . $notice[1] . '">' . $notice[2] . '</a><br>' . "\n";
                $html .= '<b>' . $tx['link']['linked_page'] . '</b>' . $notice[1] . '<br>' . "\n";
                if ((int) $notice[0]) 
				{
                    if ((int) $notice[0] >= 300 && (int) $notice[0] < 400) 
					{
                        $html .= '<b>' . $tx['link']['error'] . '</b>' . $tx['link']['redirect'] . '<br>' . "\n";
                    }
                    $html .= '<b>' . $tx['link']['returned_status'] . '</b>' . $notice[0] . "\n";
                } 
				else 
				{
                    if ($notice[0] == 'mailto') 
					{
                        $html .= $tx['link']['email'] . "\n";
                    } 
					else 
					{
                        $html .= $tx['link']['unknown'] . "\n";
                    }
                    $html .= '</li>' . "\n";
                }
            }
            $html .= '</ul>' . "\n";
        }
    }
    return $html;
}

/*
@global <array> $cf
@param <string> $path
@return <array> - contains <array> $urls, <array> $pages, <array> $headings, <array> $levels
*/

function read_content_file($path) 
{

    global $cf, $sl;
    $path = basename($path);
    if ($sl == $cf['language']['default']) 
	{
        $path = './' . $path;
    } 
	else 
	{
        $path = '../' . $path;
    }
    $sep = $cf['uri']['seperator'];
    
	if($cf['use']['h1only_pagesplitting'] == 'true')
	{
		$pattern = '~h1.*?class=".*?_level([1-6])_page_.*?"[^>]*>(.*?)</h~i';
	}
	else
	{
		$pattern = '/<h([1-' . $cf['menu']['levels'] . '])[^>]*>(.*)<\/h/i';
	}

    $content = file_get_contents($path . '/content/content.php');
    if (!$content) 
	{
        return false;
    }
    preg_match_all($pattern, $content, $matches);

    $headings = array();
    $levels = array();
    $urls = array();

    if (count($matches[0]) == 0) 
	{
        return;
    }
    $ancestors = array();
    foreach ($matches[1] as $level) 
	{
        $levels[] = (int) $level;
    }
    $i = 0;
    foreach ($matches[2] as $chapter) 
	{
        $heading = trim(strip_tags($chapter));
        $url = uenc($heading); //in cms.php: handles $tx['urichar']
        $headings[] = $heading;
        $level = $levels[$i];
        $ancestors[$level] = $url;
        $myself = array_slice($ancestors, 0, $level);
        $urls[] = implode($sep, $myself);
        $i++;
    }
    $pages = preg_split($pattern, $content);
    $pages = array_slice($pages, 1); // $pages[0] is the header part - drop it!
    return array($urls, $pages, $headings, $levels);
}


// pluginmanager (added function)

function cmsimple_pluginmanager() 
{
	global $cf, $tx, $pth, $pm_datafile_path, $pluginloader_tx, $disabled_plugins, $csrfSession;

	$pm_output = '<h4>PluginManager</h4>' . "\n";
	
	$pm_output .= '<p class="cmsimplecore_warning" style="text-align: center">' . $pluginloader_tx['pluginmanager']['warning_pluginmanager'] . '</p>' . "\n";
		
	if(!is_writable($pm_datafile_path))
	{
		$pm_output.='<p class="cmsimplecore_warning" style="font-weight: 400; text-align: center;">' . $pluginloader_tx['pluginmanager']['message_datafile1'] . ' <b>./content/_disabled_plugins.txt</b> ' . $pluginloader_tx['pluginmanager']['message_datafile2'] . '</p>';
	}

	// create pluginmanager plugins array

	$all_plugins=opendir($pth['folder']['plugins']);
	if(!$all_plugins) die('Could not open folder' . $all_plugins);
	$pm_plugins_array=array();
	while(false!==($plugin_array_element=readdir($all_plugins)))
	{
		if(!stristr($plugin_array_element, '.') && !stristr($plugin_array_element, '..') && !stristr($plugin_array_element, 'pluginloader'))
		{
			$pm_plugins_array[]='|||'.$plugin_array_element.'|||';
		}
	}
	closedir($all_plugins);
	sort($pm_plugins_array);

	$pm_output.= "\n" . '<form method="post" action="?&pm_data_saved">' . "\n";
	
	if($cf['use']['csrf_protection'] == 'true') $pm_output.= '<input type="hidden" name="csrf_token" value="' . $_SESSION[$csrfSession] . '">' . "\n";
	
	if(count($pm_plugins_array) != 0 && file_exists($pm_datafile_path) && is_writable($pm_datafile_path))
	{
		$pm_output.='<input type="submit" class="submit" value="' . $pluginloader_tx['pluginmanager']['button_save'] . '">' . "\n";
	}

	if(count($pm_plugins_array) == 0)
	{
		$pm_output.='<p class="cmsimplecore_warning" style="font-weight: 700; text-align: center;">No additional Plugin installed.</p>';
	}
	else
	{
		$pm_output.= "\n" . '<div id="cmsimple_pm">' . "\n";
		$pm_output.='<p><span style="background: #090; color: #fff; border: 3px solid #fff; padding: 0 6px;">&nbsp;</span> = ' . $tx['sysinfo']['active'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
		$pm_output.='<span style="background: #eb0; color: #fff; border: 3px solid #fff; padding: 0 6px;">&nbsp;</span> = ' . $tx['sysinfo']['hidden'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
		$pm_output.='<span style="background: #f00; color: #fff; border: 3px solid #fff; padding: 0 6px;">&nbsp;</span> = ' . $tx['sysinfo']['disabled'] . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
		$pm_output.='<table>' . "\n";
		$pm_output.='<tr>' . "\n";
		$pm_output.='<th>' . $pluginloader_tx['pluginmanager']['tablehead_plugin'] . '</th>' . "\n";
		$pm_output.='<th>' . $pluginloader_tx['pluginmanager']['tablehead_disable'] . '</th>' . "\n";
		$pm_output.='<th colspan="2">' . $pluginloader_tx['pluginmanager']['tablehead_enable'] . '</th>' . "\n";
		$pm_output.='</tr>' . "\n\n";
		
		foreach($pm_plugins_array as $pluggy)
		{
			if(stristr($disabled_plugins, $pluggy))
			{
				$disable = 'true';
			}
			
			if(!stristr($disabled_plugins, $pluggy))
			{
				$disable = 'false';
			}
			
			if(stristr($disabled_plugins, str_replace('|||', '§', $pluggy)))
			{
				$disable = 'hidden';
			}
			
			$pm_output.='<tr>' . "\n";
			$pm_output.='<td>';
			
			if($disable == 'true')
			{
				$pm_output.= '<span style="background: #f00; color: #fff; border: 3px solid #fff; padding: 0 6px; margin: 0 8px 0 0;">&nbsp;</span>';
			}
			if($disable == 'hidden')
			{
				$pm_output.= '<span style="background: #eb0; color: #fff; border: 3px solid #fff; padding: 0 6px; margin: 0 8px 0 0;">&nbsp;</span>';
			}
			if($disable == 'false')
			{
				$pm_output.= '<span style="background: #090; color: #fff; border: 3px solid #fff; padding: 0 6px; margin: 0 8px 0 0;">&nbsp;</span>';
			}
			
			$pm_output.='<b>';
			$pm_output.='<a href="?' . str_replace('|||', '', $pluggy) . '&amp;normal">' . str_replace('|||', '', $pluggy) . '</a>';
			$pm_output.='</b>';
			
			$pm_output.='</td>' . "\n";
			
			if(!stristr($pluggy, '|||pluginloader|||') 
			&& !stristr($pluggy, '|||page_params|||') 
			&& !stristr($pluggy, '|||meta_tags|||') 
//			&& !stristr($pluggy, '|||filebrowser|||') // austauschbar
//			&& !stristr($pluggy, '|||pagemanager|||')  // austauschbar
			&& !stristr($pluggy, '|||jquery|||') 
//				&& !stristr($pluggy, '|||tinymce|||') // austauschbar
			&& !file_exists($pth['folder']['plugins'] . str_replace('|||', '', $pluggy) . '/no_disable.txt'))
			{
				$pm_output.='<td><input type="radio" id="' . $pluggy . '" name="' . $pluggy . '" value="' . $pluggy . '" style="width: 16px; margin: 2px 0 6px 0;" ';
				if($disable == 'true')
				{
					$pm_output.='checked="checked"';
				}
				$pm_output.='> <label for="' . $pluggy . '">' . $pluginloader_tx['pluginmanager']['button_disable'] . '</label></td>' . "\n";
			}
			else
			{
				$pm_output.='<td style="color: #909;"><i>' . $pluginloader_tx['pluginmanager']['hint_standard_plugin'] . '</i></td>' . "\n";
			}
			
			$pm_output.='<td><input type="radio" id="' . $pluggy . '3" name="' . $pluggy . '" value="' . str_replace('|||', '§', $pluggy) . '" style="width: 16px; margin: 2px 0 6px 0;" ';
			if($disable == 'hidden')
			{
				$pm_output.='checked="checked"';
			}
			$pm_output.='> <label for="' . $pluggy . '3">' . $pluginloader_tx['pluginmanager']['button_hide'] . '</label></td>' . "\n";
			
			$pm_output.='<td><input type="radio" id="' . $pluggy . '2" name="' . $pluggy . '" value="" style="width: 16px; margin: 2px 0 6px 0;" ';
			if($disable == 'false')
			{
				$pm_output.='checked="checked"';
			}
			$pm_output.='> <label for="' . $pluggy . '2">' . $pluginloader_tx['pluginmanager']['button_enable'] . '</label></td>' . "\n";
			
			$pm_output.='</tr>' . "\n\n";
		}
		$pm_output.='</table>' . "\n";
		$pm_output .= '</div>' . "\n";
	}
	
	if(count($pm_plugins_array) != 0 && file_exists($pm_datafile_path) && is_writable($pm_datafile_path))
	{
		$pm_output.='<input type="submit" class="submit" value="' . $pluginloader_tx['pluginmanager']['button_save'] . '">' . "\n";
	}
	$pm_output.='</form>' . "\n";

	return $pm_output;
}

// END pluginmanager (added function)

?>