Version 4.0.13.1

This commit is contained in:
Neo committed 2025-12-19 04:57:54 -08:00
1 parent f9e857d255
commit c6a86f0d9b
7517 files changed
+597400 -668041

No files matched your search

@@ -0,0 +1,11 @@
<ips:template parameters="$apps" />
<p class="ipsType_large">{lang="apps_will_be_disabled"}</p>
<ul class="ipsPad ipsType_large ipsList_checks">
{{foreach $apps as $name}}
<li class="fail">{$name}</li>
{{endforeach}}
</ul>
<div class='ipsPad_double ipsType_center'>
<a href='{url="controller=applications&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="go_back"}</a>
<a href='{url="controller=customoptions&key={$_SESSION['uniqueKey']}"}&disable={expression="\IPS\Request::i()->warnings"}' class='ipsButton ipsButton_large ipsButton_alternate'>{lang="continue_anyway"}</a>
</div>
@@ -0,0 +1,25 @@
<ips:template parameters="$html, $title=NULL" />
<!DOCTYPE html>
<html lang="en">
<head>
<title>{$title}</title>
<link rel='stylesheet' href='css/reset.css' media='all'>
<link rel='stylesheet' href='css/fonts.css' media='all'>
<link rel='stylesheet' href='css/global.css' media='all'>
<link rel='stylesheet' href='css/layout.css' media='all'>
<link rel='stylesheet' href='css/messages.css' media='all'>
<link rel='stylesheet' href='css/misc.css' media='all'>
<link rel='stylesheet' href='css/forms.css' media='all'>
<link rel='stylesheet' href='css/typography.css' media='all'>
<link rel='stylesheet' href='css/buttons.css' media='all'>
<link rel='stylesheet' href='css/installer.css' media='all'>
<script type="text/javascript">
var IPS_TIMEOUT = 30;
</script>
<script src="js/jquery.min.js"></script>
<script src="js/multipleRedirect.js"></script>
</head>
<body class="ipsApp ipsApp_front ipsJS_none ipsClearfix ipsLayout_noBackground">
{$html|raw}
</body>
</html>
+2
View File
@@ -0,0 +1,2 @@
<ips:template parameters="$title, $content, $margins=TRUE" />
{$content|raw}
+7
View File
@@ -0,0 +1,7 @@
<ips:template parameters="" />
<div class='ipsPad_double ipsType_center'>
<a href='{url="controller=upgrade&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary'>Start Upgrade</a>
</div>
<div class='ipsType_large'>
{lang="upgrade_confirm"}
</div>
@@ -0,0 +1,8 @@
<ips:template parameters="" />
<section>
<p class='ipsMessage ipsMessage_warning'>Your community suite data or database configuration is saved in an encoding other than UTF-8. Before your site can be upgraded to the 4.0.0 Community Suite, we must convert the encoding to UTF-8.</p>
</section>
<div class='ipsPad_double ipsType_center'>
<a href='../convertutf8' class='ipsButton ipsButton_large ipsButton_primary'>Convert character set</a>
</div>
+16
View File
@@ -0,0 +1,16 @@
<ips:template parameters="$title, $message, $code, $backtrace, $showContinueUrl=false, $retryUrl=false" />
{{$mr = isset( \IPS\Request::i()->mr ) ? json_decode( urldecode( base64_decode( \IPS\Request::i()->mr ) ), true ) : array();}}
<div class='ipsMessage ipsMessage_error'>
<span class="ipsMessage_code">{$code}</span>
{lang="$message"}
<br />
{{if is_array($mr) and count($mr)}}
<small>{lang="location"}: {lang="step" sprintf="\IPS\Dispatcher::i()->step ?: 1"} {$mr[0]}. {lang="application"}: {expression="ucfirst($mr[1])"}</small>
{{endif}}
</div>
{{if $retryUrl}}
<a href="$retryUrl" class='ipsButton'>Retry?</a>
{{endif}}
{{if $showContinueUrl}}
<a href="$showContinueUrl" class='ipsButton'>Continue</a>
{{endif}}
@@ -0,0 +1,86 @@
<ips:template parameters="$title,$html,$initError=FALSE,$path=null" />
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{$title}</title>
<link rel='stylesheet' href='css/reset.css' media='all'>
<link rel='stylesheet' href='css/fonts.css' media='all'>
<link rel='stylesheet' href='css/global.css' media='all'>
<link rel='stylesheet' href='css/layout.css' media='all'>
<link rel='stylesheet' href='css/messages.css' media='all'>
<link rel='stylesheet' href='css/misc.css' media='all'>
<link rel='stylesheet' href='css/forms.css' media='all'>
<link rel='stylesheet' href='css/typography.css' media='all'>
<link rel='stylesheet' href='css/buttons.css' media='all'>
<link rel='stylesheet' href='css/installer.css' media='all'>
<script type="text/javascript">
var IPS_TIMEOUT = 30;
</script>
<script src="js/jquery.min.js"></script>
<script src="js/multipleRedirect.js"></script>
</head>
<body class='ipsApp ipsApp_installer'>
<div id='elInstaller_wrap'>
<div id='ipsLayout_header' class='ipsClearfix' role='banner'>
<header>
<a href='/' id='elSiteTitle'><span id='elLogo'><img src='img/logo.png' alt=''></span> Upgrade IPS Community Suite 4</a>
</header>
</div>
<main id='elInstaller_body'>
{{if !$initError and ( ( \IPS\Dispatcher::i()->step != 1 AND \IPS\Dispatcher::i()->step != 8 ) || \IPS\Request::i()->start )}}
<div class='ipsPad ipsAreaBackground_light'>
<h1 class='ipsType_pageTitle'>
{lang="step" sprintf="\IPS\Dispatcher::i()->step ?: 1"}: {$title}
</h1>
</div>
<div class='ipsColumns ipsPad'>
<div class='ipsColumn ipsColumn_wide ipsPad' id='elInstaller_stepsWrap'>
<ul id='elInstaller_steps'>
{{foreach array( 1 => 'Login', 2 => 'System Check', 3 => 'License', 4 => 'Applications', 5 => 'Upgrade Options', 6 => 'Confirm', 7 => 'Upgrade' ) as $i => $lang}}
<li class='{{if \IPS\Dispatcher::i()->step == $i}}elInstaller_stepActive{{elseif \IPS\Dispatcher::i()->step > $i}}elInstaller_stepDone{{endif}}'>
<i class='{{if \IPS\Dispatcher::i()->step == $i or ( !\IPS\Dispatcher::i()->step and $i == 1 )}}fa fa-circle{{elseif \IPS\Dispatcher::i()->step > $i}}fa fa-check{{else}}fa fa-circle-o{{endif}}'></i>&nbsp;&nbsp;{$lang}
</li>
{{endforeach}}
</ul>
</div>
<div class='ipsColumn ipsColumn_fluid'>
<div class='ipsPad'>
{$html|raw}
</div>
</div>
</div>
{{elseif \IPS\Request::i()->controller === 'done'}}
<div class='ipsPad_double ipsType_center'>
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>Your IPS Community Suite 4 is ready</h1>
<p class='ipsType_normal ipsType_light'>
{lang="upgrade_complete"}
</p>
<br><br>
<a href='{expression="\IPS\Settings::i()->base_url"}' class='ipsButton ipsButton_large ipsButton_primary'>Go to the suite</a>
<br><br>
<a href="{expression="\IPS\Http\Url::ips('docs/docs')"}" target="_blank">Suite Documentation</a>
</div>
{{else}}
<div class='ipsPad_double ipsType_center'>
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>Welcome to IPS Community Suite 4</h1>
<p class='ipsType_normal ipsType_light'>
{{if $initError}}
{$initError}
{{else}}
This process will install your software for you. Be sure you have your license key and MySQL database details to hand.
{{endif}}
</p>
{{if !$initError}}
<br><br>
<a href='{url="&start=1"}' class='ipsButton ipsButton_large ipsButton_primary'>Start Upgrade</a>
{{endif}}
<br><br>
<a href="{expression="\IPS\Http\Url::ips('docs/install_guide')"}" target="_blank">Install Guide</a>
</div>
{{endif}}
</main>
</div>
</body>
</html>
@@ -0,0 +1,44 @@
<ips:template parameters="$requirements, $designerMode" />
{{$canProceed = TRUE;}}
<section>
{{if $designerMode}}
<h2 class="ipsType_sectionHead">Designers' Mode On</h2>
<ul class="ipsPad ipsType_large ipsList_checks">
{{$canProceed = FALSE;}}
<li class="fail inline">
Designers' Mode is currently enabled.
</li>
<li class='ipsType_normal'>
<a href="{url="controller=systemcheck&key={$_SESSION['uniqueKey']}&disableDesignersMode=1"}" class="ipsButton ipsButton_negative">Disable Designers' Mode now</a>
<div class='ipsType_light ipsType_small'>Disabling Designers' Mode now will <strong>not</strong> synchronize your templates.<br>If you need to save your edited files, please synchronize them via the ACP &gt; Customization &gt; Themes before disabling Designer's Mode.</div>
</li>
</ul>
{{endif}}
{{foreach $requirements['requirements'] as $k => $_requirements}}
<h2 class="ipsType_sectionHead">{$k} Requirements</h2>
<ul class="ipsPad ipsType_large ipsList_checks">
{{foreach $_requirements as $item}}
{{if !$item['success']}}{{$canProceed = FALSE;}}{{endif}}
<li class="{{if $item['success']}}success{{else}}fail{{endif}}">{$item['message']}</li>
{{endforeach}}
</ul>
{{endforeach}}
{{if isset( $requirements['advice'] ) and count( $requirements['advice'] )}}
<h2 class="ipsType_sectionHead">Recommendations</h2>
<br><br>
<p class="ipsType_normal">None of these items are required in order to continue with the upgrade right now. However, they will be required in a future version of IPS Community Suite. You should make a note of them and contact your hosting provider or system administrator after the upgrade to address them. You can re-run these checks later from the <em>Support</em> section of the Administrator Control Panel.</p>
<ul class="ipsPad ipsType_large ipsList_checks">
{{foreach $requirements['advice'] as $item}}
<li class="advisory">{$item}</li>
{{endforeach}}
</ul>
{{endif}}
</section>
<div class='ipsPad_double ipsType_center'>
{{if $canProceed}}
<a href='{url="controller=license&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary'>Continue</a>
{{else}}
<a href='' class='ipsButton ipsButton_large ipsButton_primary ipsButton_disabled'>You must correct any issues listed above before you can proceed</a>
{{endif}}
</div>
Whitespace-only changes.
+12
View File
@@ -0,0 +1,12 @@
<ips:template parameters="$form, $active" />
<section>
<h2 class="ipsType_sectionHead">License</h2>
<ul class="ipsPad ipsType_large ipsList_checks">
{{if $active === NULL}}
<li class="fail">{lang="lkey_not_providen"}</li>
<li>{$form|raw}</li>
{{else}}
<li class="fail">{lang="license_inactive"}</li>
{{endif}}
</ul>
</section>
@@ -0,0 +1,6 @@
<ips:template parameters=" " />
<div class='ipsPad_double ipsType_center'>
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>{lang="install_ready"}</h1>
<br><br>
<a href='{url="controller=install"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="install_start"}</a>
</div>
@@ -0,0 +1,17 @@
<ips:template parameters="$url, $continue_mr=0" />
<div class="ipsMultipleRedirect" data-url="{$url}" data-continue="{$continue_mr|raw}">
<noscript>
<a href='{$url->setQueryString( 'mr', $continue_mr )}' class="button">{lang="start"}</a>
</noscript>
<div class="no_js_hide">
<div class="ipsRedirect ipsRedirect_loading">
<img src="img/loading.gif" alt="" />
</div>
<div class="ipsRedirect_progress">
<div class="ipsProgressBar ipsProgressBar_animated">
<div class="ipsProgressBar_progress"></div>
</div>
</div>
<span class='ipsRedirect_message'></span>
</div>
</div>
+26
View File
@@ -0,0 +1,26 @@
<ips:template parameters="$url, $message" />
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{lang="redirecting"}</title>
<link rel='stylesheet' href='css/reset.css' media='all'>
<link rel='stylesheet' href='css/fonts.css' media='all'>
<link rel='stylesheet' href='css/global.css' media='all'>
<link rel='stylesheet' href='css/layout.css' media='all'>
<link rel='stylesheet' href='css/messages.css' media='all'>
<link rel='stylesheet' href='css/misc.css' media='all'>
<link rel='stylesheet' href='css/forms.css' media='all'>
<link rel='stylesheet' href='css/typography.css' media='all'>
<link rel='stylesheet' href='css/buttons.css' media='all'>
<link rel='stylesheet' href='css/installer.css' media='all'>
<meta http-equiv="refresh" content="2; url={$url}" />
</head>
<body>
<p class="ipsMessage ipsMessage_info ipsRedirectMessage">
<strong>{lang="$message"}</strong><br />
<br />
{lang="redirecting_wait"}
</p>
</body>
</html>
@@ -0,0 +1,27 @@
<ips:template parameters="$json, $time" />
<section>
<h2 class="ipsType_sectionHead">{lang="upgrade_unfinished"}</h2>
<ul class="ipsPad ipsType_large ipsList_checks">
<li class="advisory">You have an unfinished upgrade from {datetime="$time" norelative="true"}</li>
<li>
<strong>{lang="upgrade_applications"}</strong>
<ul>
{{foreach( $json['session']['apps'] ) as $app}}
<li>{expression="ucfirst( $app )"}</li>
{{endforeach}}
</ul>
</li>
<li>
<strong>{lang="upgrade_status"}</strong>
<ul>
<li>{lang="status"}: {$json['step']}</li>
<li>{lang="application"}: {{if isset( $json['data'][1] )}}{$json['data'][1]}{{else}}<em>Not set</em>{{endif}}
<li>{lang="current_version"}: {{if isset( $json['data']['extra']['_current'] )}}{$json['data']['extra']['_current']}{{else}}<em>Not set</em>{{endif}}
</ul>
</li>
</ul>
</section>
<div class='ipsPad_double ipsType_center'>
<a href='{url="controller=continueupgrade&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary ipsButton_positive'>Continue Upgrade</a>
<a href='{url="controller=systemcheck&key={$_SESSION['uniqueKey']}&skippreviousupgrade=1"}' class='ipsButton ipsButton_large ipsButton_primary'>Start Fresh Upgrade</a>
</div>
@@ -0,0 +1,28 @@
<ips:template parameters="$exception, $showContinueUrl=false, $retryUrl=false" />
<div class='ipsMessage ipsMessage_error'>
<span class="ipsMessage_code">{$exception->getCode()}</span>
{$exception->getMessage()}
<br />
{{if $exception instanceof \IPS\Db\Exception}}
{{$trace = $exception->getTrace();}}
{{if $trace[3]['function'] == 'installDatabaseUpdates'}}
<small>
{expression="\IPS\ROOT_PATH"}/applications/{$trace[4]['args'][0][1]}/setup/upg_{$trace[3]['args'][0]}/queries.json{{if isset($_SESSION['lastJsonIndex'])}} - query #{$_SESSION['lastJsonIndex']}{{endif}}<br>
<pre>{$exception->query}</pre>
</small>
{{else}}
<small>
{$trace[1]['file']}::{$trace[1]['line']}<br>
<pre>{$exception->query}</pre>
</small>
{{endif}}
{{else}}
<small>{$exception->getFile()}::{$exception->getLine()}</small>
{{endif}}
</div>
{{if $retryUrl}}
<a href="$retryUrl" class='ipsButton'>Retry?</a>
{{endif}}
{{if $showContinueUrl}}
<a href="$showContinueUrl" class='ipsButton'>Continue</a>
{{endif}}