Version 4.1.2

This commit is contained in:
Neo committed 2025-12-19 05:32:19 -08:00
1 parent 3ba79295ee
commit 28bd025b35
1131 files changed
+63658 -20579

No files matched your search

+1
View File
@@ -76,6 +76,7 @@ class IPSUtf8
'FORCE_CONVERT_CHARSET' => NULL,
'FORCE_CONVERT_METHOD' => NULL,
'SOURCE_DB_CHARSET' => NULL, /* If set, will force the source database connection to use this charset */
'UTF8_INSERT_ONLY' => FALSE, /* If true, and sql_charset is present and set to utf8 in conf_global.php, then the "fast" method will simply insert without converting. Useful for mixed collation databases where the utf8 tables are real utf8 */
);
}
+1
View File
@@ -113,6 +113,7 @@ var ips = {};
data: data,
url: url,
timeout: ips.getSetting('maxExecTime') !== false ? parseInt( ips.getSetting('maxExecTime') * 1000 ) : 30000,
cache: false,
success: function( data, textStatus, jqXHR )
{
success( data, textStatus, jqXHR );
@@ -32,7 +32,15 @@ class archive extends \IPSUtf8\Dispatcher\Controller
$this->welcome();
break;
case 'completed':
$this->completed();
/* Regardless of current status, if the archive table is not utf8 we need to convert it */
if ( \IPSUtf8\Convert\Archive::i()->getNonUtf8Tables( TRUE ) !== NULL )
{
$this->welcome();
}
else
{
$this->completed();
}
break;
}
}
@@ -58,7 +58,7 @@ class browser extends \IPSUtf8\Dispatcher\Controller
$json = \IPSUtf8\Session::i()->json;
$percent = round( ($json['convertedCount'] / \IPSUtf8\Convert::i()->getTotalRowsToConvert()) * 100, 2 );
$msg = "Processing " . \IPSUtf8\Session::i()->current_table . ' (Total: ' . $percent . '%)';
$msg = "Processing " . \IPSUtf8\Session::i()->current_table . '<br>Row: ' . \IPSUtf8\Session::i()->current_row . ' of ' . \IPSUtf8\Session::i()->tables[ \IPSUtf8\Session::i()->current_table ]['count'] . ' - Total: ' . $percent . '%';
if ( ! \IPSUtf8\Request::i()->isAjax() )
{
@@ -169,14 +169,14 @@ class browser extends \IPSUtf8\Dispatcher\Controller
exit();
}
if ( \IPSUtf8\Convert::i()->databaseIsUtf8() )
if ( \IPSUtf8\Convert::i()->databaseIsUtf8() AND !count( \IPSUtf8\Convert::i()->getNonUtf8CollationTables() ) )
{
\IPSUtf8\Output\Browser::i()->error( 'The database tables are UTF-8, collations are correct and there is nothing to convert. You can <strong><a href="../upgrade">proceed with the upgrade</strong>.' );
exit();
}
$json = \IPSUtf8\Session::i()->json;
$percent = ( \IPSUtf8\Convert::i()->getTotalRowsToConvert() ) ? round( ($json['convertedCount'] / \IPSUtf8\Convert::i()->getTotalRowsToConvert() ) * 100, 2 ) : 100;
$percent = ( \IPSUtf8\Convert::i()->getTotalRowsToConvert() ) ? sprintf ("%6.2f", round( ($json['convertedCount'] / \IPSUtf8\Convert::i()->getTotalRowsToConvert() ) * 100, 2 ) ) : 100;
$isUtf8 = (boolean) ( \IPSUtf8\Convert::i()->databaseIsUtf8() );
$processing = (boolean) ( \IPSUtf8\Session::i()->status === 'processing' );
+1 -1
View File
@@ -55,7 +55,7 @@
</p>
<p><a class="btn btn-lg btn-info" href="index.php?controller=browser">Start Web Converter</a></p>
<div class="footer">
<p>&copy; 2015 Invision Power Services, Inc.</p>
<p>&copy; <script type="text/javascript">document.write( new Date().getFullYear() );</script><noscript>2015</noscript> Invision Power Services, Inc.</p>
</div>
</div>
<script src="js/jquery.min.js"></script>
+88 -38
View File
@@ -16,7 +16,7 @@ namespace IPSUtf8;
*/
class Convert
{
const VERSION_ID = '1.1.17';
const VERSION_ID = '1.1.18';
/**
* @brief Data Store
@@ -301,9 +301,13 @@ class Convert
/* Even if the current charset is set to UTF-8, if the Table Charset is latin1, we need to use this method */
/* ... but only if the actual column isn't using utf8 */
$columnCollation = $schematic['definition']['columns'][$col]['collation'];
if ( \IPSUtf8\Session::i()->current_charset != 'utf-8' OR ( $tableCharSet != 'utf8' AND ! in_array( $columnCollation, array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) ) OR ( $tableCharSet == 'utf8' AND mb_substr( $columnCollation, 0, 6 ) == 'latin1' ) )
if ( defined( 'UTF8_INSERT_ONLY' ) AND UTF8_INSERT_ONLY === TRUE AND $tableCharSet == 'utf8' )
{
if ( \IPSUtf8\Session::i()->current_charset == 'iso-8859-1' AND $tableCharSet == 'latin1' )
$select[] = 'CAST( `' . $col . '` AS BINARY )';
}
else if ( \IPSUtf8\Session::i()->current_charset != 'utf-8' OR ( $tableCharSet != 'utf8' AND ! in_array( $columnCollation, array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) ) OR ( $tableCharSet == 'utf8' AND mb_substr( $columnCollation, 0, 5 ) == 'latin' ) )
{
if ( \IPSUtf8\Session::i()->current_charset == 'iso-8859-1' OR mb_substr( $columnCollation, 0, 5 ) == 'latin' )
{
/* Casting as binary truncates non-latin characters, so if we are using real Latin1, just convert */
$select[] = 'CONVERT( `' . $col . '` USING utf8 )';
@@ -317,17 +321,19 @@ class Convert
else
{
/**
* @note This looks a little weird but bare with me. Semi-old databases (post-2.x but pre-4.x) can have UTF8 Tables and Columns, but contain Latin1 data.
* We need to try and sniff this out and apply a different type of conversion, because in this instance you cannot just extract
* as BINARY and then insert into the source. Instead, you need to convert to latin1, then to binary, then to utf8. But you can't
* do that on actual UTF8 data because it will then truncate multibyte characters so we need to compare the conversion against what
* is stored.
*/
This looks a little weird but bare with me. Semi-old databases (post-2.x but pre-4.x) can have UTF8 Tables and Columns, but contain Latin1 data.
We need to try and sniff this out and apply a different type of conversion, because in this instance you cannot just extract
as BINARY and then insert into the source. Instead, you need to convert to latin1, then to binary, then to utf8. But you can't
do that on actual UTF8 data because it will then truncate multibyte characters so we need to compare the conversion against what
is stored.
Mind = blown.
*/
$collation = 'utf8_unicode_ci';
if ( $tableCharSet == 'utf8mb4' OR $columnCollation == 'utf8mb4_unicode_ci' )
$using = 'utf8';
if ( $columnCollation == 'utf8mb4_unicode_ci' )
{
$collation = 'utf8mb4_unicode_ci';
$using = 'utf8mb4';
}
$source_charset = 'latin1';
@@ -336,7 +342,7 @@ class Convert
$source_charset = SOURCE_DB_CHARSET;
}
$select[] = 'CASE WHEN STRCMP(CONVERT(CONVERT(CONVERT(`' . $col . '` USING ' . $source_charset . ') USING BINARY) USING utf8), `' . $col . '` COLLATE ' . $collation . ') = 0 THEN CONVERT(`' . $col . '` USING BINARY) ELSE CONVERT(CONVERT(CONVERT(`' . $col . '` USING ' . $source_charset . ') USING BINARY) USING utf8) END';
$select[] = 'CASE WHEN STRCMP(CONVERT(CONVERT(CONVERT(`' . $col . '` USING ' . $source_charset . ') USING BINARY) USING ' . $using . '), `' . $col . '` COLLATE ' . $collation . ') = 0 THEN CONVERT(`' . $col . '` USING BINARY) ELSE CONVERT(CONVERT(CONVERT(`' . $col . '` USING ' . $source_charset . ') USING BINARY) USING ' . $using . ') END';
}
}
else
@@ -452,6 +458,7 @@ class Convert
{
if ( isset( $row[ $col ] ) AND ! empty( $row[ $col ] ) )
{
$currentCharSet = ( defined( 'FORCE_CONVERT_CHARSET' ) AND FORCE_CONVERT_CHARSET != NULL ) ? FORCE_CONVERT_CHARSET : $currentCharSet;
if ( static::isSerialized( $row[ $col ] ) AND \IPSUtf8\Text\Charset::i()->needsConverting( $row[ $col ], $currentCharSet, 'UTF-8' ) )
{
/* Store a copy in case it doesn't work */
@@ -513,10 +520,13 @@ class Convert
$tmp = $row; // Use a copy so the reference in array_walk doesn't overwrite the row to be inserted
/* Make sure it's an associative array as topic_views only has 1 column so DB driver returns an indexed array only */
array_walk_recursive( $tmp, function( &$input, $key )
if ( is_array( $tmp ) )
{
$input = htmlentities( (string) $input, ENT_QUOTES | ENT_IGNORE, 'utf-8', false );
} );
array_walk_recursive( $tmp, function( &$input, $key )
{
$input = htmlentities( (string) $input, ENT_QUOTES | ENT_IGNORE, 'utf-8', false );
} );
}
$batchBytes += mb_strlen( @json_encode( $tmp ), '8bit');
unset( $tmp );
@@ -649,13 +659,14 @@ class Convert
{
static::log( "Pre inserts for InnoDB table " . $table['name'] );
/* This doesn't seem necessary
try
{
static::$utf->query("SET autocommit=0");
static::$utf->query("SET unique_checks=0");
static::$utf->query("SET foreign_key_checks=0");
}
catch ( Exception $e ) { }
catch ( Exception $e ) { }*/
}
}
@@ -683,14 +694,15 @@ class Convert
else if ( \strtolower( static::$utfTableEngine ) === 'innodb' )
{
static::log( "Post inserts for InnoDB table " . $table['name'] );
/* This doesn't seem necessary
try
{
static::$utf->query("SET autocommit=1");
static::$utf->query("SET unique_checks=1");
static::$utf->query("SET foreign_key_checks=1");
}
catch ( Exception $e ) { }
catch ( Exception $e ) { }*/
}
}
@@ -881,27 +893,45 @@ class Convert
while ( $stmt->fetch() === true )
{
if( mb_substr( $name, 0, 6 ) === 'x_utf_' )
{
$tables[] = $name;
}
$tables[] = $name;
}
foreach( $tables as $name )
{
$tableNameNoPrefix = $name;
$tableName = mb_substr( $name, mb_strlen( static::$utf->prefix ) );
$isConvertedTable = ( mb_substr( $name, 0, 6 ) === 'x_utf_' );
$isOrigTable = ( mb_substr( $name, 0, 5 ) === 'orig_' );
if ( $tableName !== 'convert_session' AND $tableName !== 'convert_session_tables' )
if ( $isOrigTable )
{
if( static::$utf->checkForTable( $tableName ) )
{
static::$db->query( "DROP TABLE IF EXISTS `" . $origPrefix . $tableName . '`' );
static::log( "DROP TABLE IF EXISTS `" . $origPrefix . $tableName . '`' );
}
continue;
}
static::$utf->query( "RENAME TABLE `" . $tableNameNoPrefix . '` TO `' . $origPrefix . $tableName . '`' );
static::log( "RENAME TABLE `" . $tableNameNoPrefix . '` TO `' . $origPrefix . $tableName . '`' );
if ( ! $isConvertedTable and $origPrefix )
{
$tableNameNoPrefix = mb_substr( $name, mb_strlen( $origPrefix ) );
}
/* Rename original tables */
if ( ( ! $isConvertedTable ) and mb_substr( $name, 0, mb_strlen( $origPrefix ) ) === $origPrefix )
{
static::$db->query( "RENAME TABLE `" . $origPrefix . $tableNameNoPrefix . '` TO `orig_' . $origPrefix . $tableNameNoPrefix . '`' );
static::log( "RENAME TABLE `" . $origPrefix . $tableNameNoPrefix . '` TO `orig_' . $origPrefix . $tableNameNoPrefix . '`' );
}
/* Grab x_utf_ prefixed tables */
if ( $isConvertedTable )
{
$tableName = mb_substr( $name, mb_strlen( static::$utf->prefix ) );
/* Rename the new one */
if ( $tableName !== 'convert_session' AND $tableName !== 'convert_session_tables' )
{
static::$utf->query( "RENAME TABLE `" . $name . '` TO `' . $origPrefix . $tableName . '`' );
static::log( "RENAME TABLE `" . $name . '` TO `' . $origPrefix . $tableName . '`' );
}
}
}
@@ -984,13 +1014,33 @@ class Convert
/* We don't need to drop any indexes - just create a copy of the table and insert ignore */
if ( $hasUnique === TRUE )
{
static::$utf->query( "RENAME TABLE `" . static::$db->prefix . $name . "` TO `" . static::$db->prefix . $name . "_temp`" );
static::$utf->query( "CREATE TABLE `" . static::$db->prefix . $name . "` LIKE `" . static::$db->prefix . $name . "_temp`" );
static::$utf->query( "INSERT IGNORE INTO `" . static::$db->prefix . $name . "` SELECT * FROM `" . static::$db->prefix . $name . "_temp`" );
static::$utf->query( "DROP TABLE `" . static::$db->prefix . $name . "_temp`" );
/* Let's try an alter first - below may not be necessary */
try
{
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
}
catch( \IPSUtf8\Db\Exception $e )
{
/* Did not work - try the long way */
static::$utf->query( "RENAME TABLE `" . static::$db->prefix . $name . "` TO `" . static::$db->prefix . $name . "_temp`" );
static::log( $name . " has Unique Index - temp table created from main." );
static::$utf->query( "CREATE TABLE `" . static::$db->prefix . $name . "` LIKE `" . static::$db->prefix . $name . "_temp`" );
static::log( $name . " created from temp table." );
static::$utf->query( "REPLACE INTO `" . static::$db->prefix . $name . "` SELECT * FROM `" . static::$db->prefix . $name . "_temp`" );
static::log( $name . " data copied to new table." );
static::$utf->query( "DROP TABLE `" . static::$db->prefix . $name . "_temp`" );
static::log( $name . "_temp dropped" );
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
}
}
else
{
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
}
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
if ( count( $cols ) )
{
@@ -1565,7 +1615,7 @@ class Convert
foreach( \IPSUtf8\Session::i()->tables as $table => $definition )
{
/* If the table itself is not utf8_unicode_ci, don't bother check columns */
if ( $definition['collation'] AND !in_array( $definition['collation'], array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) )
if ( $definition['definition']['collation'] AND !in_array( $definition['definition']['collation'], array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) )
{
static::$nonUtf8Collations[] = $table;
continue;
+29 -7
View File
@@ -61,6 +61,11 @@ class Db extends \mysqli
* @brief Multiton Store
*/
protected static $multitons;
/**
* @brief Return Query
*/
public $returnQuery = FALSE;
/**
* Get instance
@@ -111,7 +116,30 @@ class Db extends \mysqli
{
throw new \IPSUtf8\Db\Exception( $error, self::$multitons[ $identifier ]->connect_errno );
}
/* If we succeeded, set the charset */
if ( mb_substr( $identifier, 0, 4 ) == 'utf8' )
{
/* UTF8MB4? */
if ( isset( $connectionSettings['sql_utf8mb4'] ) and $connectionSettings['sql_utf8mb4'] )
{
self::$multitons[ $identifier ]->charset = 'utf8mb4';
self::$multitons[ $identifier ]->collation = 'utf8mb4_unicode_ci';
self::$multitons[ $identifier ]->binaryCollation = 'utf8mb4_bin';
}
/* If we succeeded, set the charset */
if ( !self::$multitons[ $identifier ]->set_charset( self::$multitons[ $identifier ]->charset ) )
{
/* Fallback to UTF8 */
self::$multitons[ $identifier ]->charset = 'utf8';
self::$multitons[ $identifier ]->collation = 'utf8_unicode_ci';
self::$multitons[ $identifier ]->binaryCollation = 'utf8_bin';
self::$multitons[ $identifier ]->set_charset( 'utf8' );
}
}
/* Set the prefix */
if ( isset( $connectionSettings['sql_tbl_prefix'] ) )
{
@@ -148,12 +176,6 @@ class Db extends \mysqli
*/
public $prefix = '';
/**
* @brief Return the query instead of executing it
* @note Only designed to work with methods that call query() vs prepared statements
*/
public $returnQuery = FALSE;
/**
* Run a query
*
@@ -103,6 +103,7 @@ class Browser extends \IPSUtf8\Output
/* Flush and exit */
@ob_end_flush();
@flush();
exit;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

+84 -21
View File
@@ -1,23 +1,86 @@
{
">:(": "angry.png",
":D": "biggrin.png",
"O.o": "blink.png",
":$": "blush.png",
"B|": "cool.png",
"¬¬": "dry.png",
"^_^": "happy.png",
"o.O": "huh.png",
"xD": "laugh.png",
":|": "mellow.png",
":o": "ohmy.png",
":ph34r:": "ph34r.png",
"9_9": "rolleyes.gif",
":(": "sad.png",
"-_-": "sleep.png",
":)": "smile.png",
":P": "tongue.png",
":/": "unsure.png",
":S": "wacko.png",
";)": "wink.png",
":x": "wub.png"
">:(": {
"image": "angry.png",
"image_2x": "angry@2x.png"
},
":D": {
"image": "biggrin.png",
"image_2x": "biggrin@2x.png"
},
"O.o": {
"image": "blink.png",
"image_2x": "blink@2x.png"
},
":$": {
"image": "blush.png",
"image_2x": "blush@2x.png"
},
"B|": {
"image": "cool.png",
"image_2x": "cool@2x.png"
},
"¬¬": {
"image": "dry.png",
"image_2x": "dry@2x.png"
},
"^_^": {
"image": "happy.png",
"image_2x": "happy@2x.png"
},
"o.O": {
"image": "huh.png",
"image_2x": "huh@2x.png"
},
"xD": {
"image": "laugh.png",
"image_2x": "laugh@2x.png"
},
":|": {
"image": "mellow.png",
"image_2x": "mellow@2x.png"
},
":o": {
"image": "ohmy.png",
"image_2x": "ohmy@2x.png"
},
":ph34r:": {
"image": "ph34r.png",
"image_2x": "ph34r@2x.png"
},
"9_9": {
"image": "rolleyes.gif",
"image_2x": "rolleyes@2x.png"
},
":(": {
"image": "sad.png",
"image_2x": "sad@2x.png"
},
"-_-": {
"image": "sleep.png",
"image_2x": "sleep@2x.png"
},
":)": {
"image": "smile.png",
"image_2x": "smile@2x.png"
},
":P": {
"image": "tongue.png",
"image_2x": "tongue@2x.png"
},
":/": {
"image": "unsure.png",
"image_2x": "unsure@2x.png"
},
":S": {
"image": "wacko.png",
"image_2x": "wacko@2x.png"
},
";)": {
"image": "wink.png",
"image_2x": "wink@2x.png"
},
":x": {
"image": "wub.png",
"image_2x": "wub@2x.png"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

+27 -1
View File
@@ -1 +1,27 @@
=============================[NOTE]============================= This software is Nulled! Nulled by IAF ================================================================ IPS 4.0.13.1 Release (100045) =============================[NOTE]============================= Invision Power Services End User License Agreement 1. Acceptance This software license agreement (the “Agreement”) is between you (either an individual or entity, hereinafter referred to as “You” or “Your”) and Invision Power Services, Inc. (“IPS”, “We”, “Our” or “Us”) and pertains to the IPS Community Suite software, its components, features, enhancements, updates and modifications (collectively the “Software” or “Suite”) and any related services (“Services”) provided by IPS under this Agreement. By purchasing, downloading, accessing, installing, facilitating the installation or using the Software or Services (or allowing or authorizing any other person to do so) you are warranting that you have the authority provided by your state, country or jurisdiction to enter into a legally binding contract and that you have read and agree to be bound by the terms of this Agreement. You understand and acknowledge that this Agreement comprises the entire agreement between You and IPS. This Agreement supersedes any prior agreements, promises, representations or descriptions. If you do not agree with the terms and conditions set forth hereinafter, you may not purchase, download, access, install or use the Software or Services. This Agreement may only be modified in writing, signed by an officer of IPS and You. 2. License Scope and Grant In consideration for payment of all applicable license fees and subject to the terms and conditions of this Agreement, IPS grants you a revocable, limited and non-exclusive license to install and use the Software and Services on a single installation, accessible via one URL. Access to services, components, software updates and technical support require an active license. All rights in and to the Software and Services are reserved to the use and benefit of IPS and/or its licensors, successors and assigners. (a) Test Installation. You may install and test one additional instance of the Software for the purpose of development and testing. This installation must be and remain isolated and inaccessible to the general public at all times. 3. Restrictions Your license to use the Software and Services is subject to the following terms, conditions and restrictions on use: (a) You may alter and modify the Software’s source code for Your use, subject to this Agreement, however, you may not distribute, publish, resell, or otherwise share the Software or derivative works based on the Software without prior express written consent from IPS. (b) You may not utilize the Software or Services to engage in, facilitate, or otherwise allow others to engage in any activity that violates any law or regulation or the terms and conditions within this Agreement. (c) You are solely responsible for complying with all governmental regulations and policies. You agree to indemnify Us from any loss, action or damage arising from Your failure to use the Software in a manner inconsistent with applicable legislation. (d) You may not remove any copyright or proprietary notices on or within the software’s source code at any time. A copyright removal license may be purchased to remove the public display of the Software’s publicly displayed copyright notice. 4. Intellectual Property We have the sole and exclusive right to the Software which is being licensed, not sold, to you by IPS under the terms and conditions of this agreement. The Software is protected by copyright, trademark and other intellectual property laws. IPS reserves any rights not expressly granted herein. 5. Assignment You may not rent, lease, sell, share or authorize or temporarily assign your rights to the license or this Agreement to another individual or entity except as expressly permitted herein. (a) You may, after six months from the original purchase date, permanently transfer your licensing rights and interest in this Agreement to a third party, provided the license is active and in good standing. Any transfer and reassignment must occur via the mechanisms provided within the invisionpower.com client area and all applicable fees must be paid for the reassignment to be considered valid. (b) You agree to provide this Agreement in its entirety to the assignee prior to reassignment and the assignee must agree to be bound to the terms of this Agreement. (c) You acknowledge that account and non license specific materials and purchases, including, but not limited to: account credits and third party (“marketplace”) add-ons and purchases are non-transferrable under any circumstances. (d) We reserve the right to refuse or reject reassignment at our sole discretion. 6. Termination This Agreement shall remain in effLine truncated
Invision Power Services End User License Agreement
1. Acceptance
This software license agreement (the “Agreement”) is between you (either an individual or entity, hereinafter referred to as “You” or “Your”) and Invision Power Services, Inc. (“IPS”, “We”, “Our” or “Us”) and pertains to the IPS Community Suite software, its components, features, enhancements, updates and modifications (collectively the “Software” or “Suite”) and any related services (“Services”) provided by IPS under this Agreement.␍␍By purchasing, downloading, accessing, installing, facilitating the installation or using the Software or Services (or allowing or authorizing any other person to do so) you are warranting that you have the authority provided by your state, country or jurisdiction to enter into a legally binding contract and that you have read and agree to be bound by the terms of this Agreement. You understand and acknowledge that this Agreement comprises the entire agreement between You and IPS. This Agreement supersedes any prior agreements, promises, representations or descriptions. If you do not agree with the terms and conditions set forth hereinafter, you may not purchase, download, access, install or use the Software or Services. This Agreement may only be modified in writing, signed by an officer of IPS and You.␍␍␍2. License Scope and Grant
In consideration for payment of all applicable license fees and subject to the terms and conditions of this Agreement, IPS grants you a revocable, limited and non-exclusive license to install and use the Software and Services on a single installation, accessible via one URL. Access to services, components, software updates and technical support require an active license. All rights in and to the Software and Services are reserved to the use and benefit of IPS and/or its licensors, successors and assigners.␍␍(a) Test Installation. You may install and test one additional instance of the Software for the purpose of development and testing. This installation must be and remain isolated and inaccessible to the general public at all times.␍␍␍3. Restrictions␍␍Your license to use the Software and Services is subject to the following terms, conditions and restrictions on use: ␍␍(a) You may alter and modify the Software’s source code for Your use, subject to this Agreement, however, you may not distribute, publish, resell, or otherwise share the Software or derivative works based on the Software without prior express written consent from IPS.
(b) You may not utilize the Software or Services to engage in, facilitate, or otherwise allow others to engage in any activity that violates any law or regulation or the terms and conditions within this Agreement. ␍␍(c) You are solely responsible for complying with all governmental regulations and policies. You agree to indemnify Us from any loss, action or damage arising from Your failure to use the Software in a manner inconsistent with applicable legislation. ␍␍(d) You may not remove any copyright or proprietary notices on or within the software’s source code at any time. A copyright removal license may be purchased to remove the public display of the Software’s publicly displayed copyright notice.
4. Intellectual Property
We have the sole and exclusive right to the Software which is being licensed, not sold, to you by IPS under the terms and conditions of this agreement. The Software is protected by copyright, trademark and other intellectual property laws. IPS reserves any rights not expressly granted herein.␍␍␍5. Assignment␍␍You may not rent, lease, sell, share or authorize or temporarily assign your rights to the license or this Agreement to another individual or entity except as expressly permitted herein.␍␍(a) You may, after six months from the original purchase date, permanently transfer your licensing rights and interest in this Agreement to a third party, provided the license is active and in good standing. Any transfer and reassignment must occur via the mechanisms provided within the invisionpower.com client area and all applicable fees must be paid for the reassignment to be considered valid. ␍␍(b) You agree to provide this Agreement in its entirety to the assignee prior to reassignment and the assignee must agree to be bound to the terms of this Agreement. ␍␍(c) You acknowledge that account and non license specific materials and purchases, including, but not limited to: account credits and third party (“marketplace”) add-ons and purchases are non-transferrable under any circumstances. ␍␍(d) We reserve the right to refuse or reject reassignment at our sole discretion.
6. Termination
␍This Agreement shall remain in effect until terminated. Your rights under this Agreement will automatically terminate without notice from Us in the event you fail to comply with any term or condition within this Agreement. Upon termination of this Agreement, you shall immediately cease all use of the Software and destroy all copies, full or partial, of the Software that may be in your possession or otherwise under your control.
␍7. Modification
␍We reserve the right to amend or modify the terms of this Agreement at any time, and to change, discontinue or impose conditions on any aspect of the Software or related Service and to provide notification solely by posting an updated version of the Agreement on the invisionpower.com website. You acknowledge that you are solely responsible for regularly reviewing this Agreement and our policies. Continued use of the Software after modification to the Agreement constitutes your binding consent to such changes.
␍8. Disclaimer of Warranty
␍THE SOFTWARE IS PROVIDED “AS-IS” AND TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, WE DISCLAIM ALL OTHER WARRANTIES, CONDITIONS, REPRESENTATIONS OR TERMS, EXPRESS OR IMPLIED, BY STATUTE, COMMON LAW, USAGE OR OTHERWISE, REGARDING THE SOFTWARE AND ANY RELATED SERVICES, INCLUDING THEIR FITNESS FOR A PARTICULAR PURPOSE, THEIR QUALITY, THEIR MERCHANTABILITY, OR THEIR NON-INFRINGEMENT. WE DO NOT WARRANT THAT THE SOFTWARE OR ANY RELATED SERVICES IS SECURE, OR IS FREE FROM BUGS, VIRUSES, ERRORS, OR OTHER PROGRAM LIMITATIONS, OR THAT DEFECTS WILL BE CORRECTED. SOME JURISDICTIONS DO NOT ALLOW EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSIONS MAY NOT APPLY TO YOU. THE ENTIRE RISK AS TO THE RESULTS, QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM US OR OUR EMPLOYEES, REPRESENTATIVE OR AGENTS OR THROUGH OR FROM THE SOFTWARE OR OUR WEBSITE SHALL CREATE ANY WARRANTY NOT EXPRESSLY STATED WITHIN. THIS SECTION WILL SURVIVE THE TERMINATION OF THIS AGREEMENT.
␍9. Limitation of Liability␍␍TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL WE, OUR SUBSIDIARIES, OFFICERS, DIRECTORS, SHAREHOLDERS, PARTNERS, EMPLOYEES, AGENTS, CONTRACTORS OR OUR SUCCESSORS BE LIABLE FOR ANY DAMAGES WHATSOEVER, INCLUDING, BUT NOT LIMITED TO PERSONAL INJURY OR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, EXEMPLARY, PUNITIVE, COVER, CONSEQUENTIAL OR OTHER DAMAGES, INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, LOSS OF DATA, LOSS OF USE, COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, LOSS OF GOODWILL OR ANY OTHER COMMERCIAL DAMAGES OR LOSSES, ARISING OUT OF OR RELATED TO THE USE OF, OR INABILITY TO USE, THE SOFTWARE OR ANY RELATED SERVICES OR CONTENT, HOWEVER CAUSED, REGARDLESS OF THE THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, TORT (INCLUDING NEGLIGENCE), PRODUCT LIABILITY OR OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND EVEN IF A REMEDY SET FORTH HEREIN IS FOUND TO HAVE FAILED OF ITS ESSENTIAL PURPOSE. WITHOUT LIMITING THE FOREGOING, IN NO EVENT SHALL OUR TOTAL LIABILITY TO YOU FOR ACTUAL DAMAGES FOR ANY CAUSE WHATSOEVER EXCEED THE AMOUNT PAID BY YOU TO LICENSE THE SOFTWARE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE FOREGOING LIMITATION OR EXCLUSION MAY NOT APPLY TO YOU. THESE LIMITATIONS WILL SURVIVE THE TERMINATION OF THIS AGREEMENT.␍␍␍10. Indemnification␍␍You agree to fully indemnify and hold us, our successors, officers, directors, shareholders, partners, employees, agents, contracts and our successors harmless from and against any claim, suit, hearing, action, expense or demand, including without limitation to: all claims for damages, fees or costs (including attorneys’ fees), arising out of or related to the use of the Software and/or any related Services by you, your agents or representatives, anyone under your control, or by any third party using your equipment or accounts to use the Software or Services (for purposes of this section, collectively, “you”); the violation by you of any provision of this Agreement; the violation by you and any laws or regulations; or the infringement or misappropriation by you any copyright, trademark or any other intellectual property right, proprietary right, property right or any other right of ours or any third party. We reserve the right to assume the exclusive defense and control of any matter otherwise subject to indemnification by you, in which event you will cooperate with us in asserting any available defenses and, as set forth above, be fully responsible for our attorneys’ fees.␍␍␍11. Governing Law␍␍The license and this Agreement are governed by and construed in accordance with the laws of the State of Virginia, United States of America. You hereby consent to exclusive jurisdiction and venue in the County of Bedford and State of Virginia. By agreeing to the terms of this Agreement, you are waiving any claims that you might otherwise have against IPS based on the laws of other jurisdictions.␍␍␍12. Severability␍␍If, for any reason, a court of competent jurisdiction deems any provision or part of this Agreement to be unlawful or unenforceable, the remainder of the Agreement shall remain in full force and effect.␍
@@ -21,7 +21,7 @@
<script src="js/multipleRedirect.js"></script>
</head>
<body class='ipsApp ipsApp_installer'>
<!-- Nulled by IAF -->
<div id='elInstaller_wrap'>
<div id='ipsLayout_header' class='ipsClearfix' role='banner'>
<header>
@@ -63,7 +63,8 @@
The installation process is now complete and your IPS Community Suite is now ready!
</p>
<br><br>
<a href='{url="&" base="front"}' class='ipsButton ipsButton_large ipsButton_primary'>Go to the suite</a>
<a href='{expression="\IPS\Settings::i()->base_url"}' class='ipsButton ipsButton_large ipsButton_primary'>Go to the suite</a>
<a href='{expression="rtrim( \IPS\Settings::i()->base_url, '/' ) . '/' . \IPS\CP_DIRECTORY"}' class='ipsButton ipsButton_large ipsButton_normal'>Go to the AdminCP</a>
<br><br>
<a href="{expression="\IPS\Http\Url::ips('docs/docs')"}" target="_blank">Suite Documentation</a>
</div>
@@ -85,7 +86,6 @@
<a href="{expression="\IPS\Http\Url::ips('docs/install_guide')"}" target="_blank">Install Guide</a>
</div>
{{endif}}
<p style="text-align: right">Nulled by IAF</p>
</main>
</div>
</body>
+2 -2
View File
@@ -15,8 +15,8 @@
<br><br>
<p class="ipsType_normal">None of these items are required in order to continue with the installation 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 installation 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>
{{foreach $requirements['advice'] as $key => $item}}
<li class="{{if $key === 'php'}}ipsMessage ipsMessage_error{{else}}advisory{{endif}}">{$item}</li>
{{endforeach}}
</ul>
{{endif}}
+1
View File
@@ -6,6 +6,7 @@ $(function(){
$.ajax( url, {
dataType: 'json',
cache: false,
timeout: IPS_TIMEOUT !== false ? parseInt( IPS_TIMEOUT * 1000 ) : 30000,
complete: function( jqXHR, textStatus )
{
+2 -1
View File
@@ -32,8 +32,9 @@ $lang = array(
'err_password_length' => "Passwords must be at least 3 characters",
'requirements_php_version_success' => "PHP version %s.",
'requirements_php_version_success_53x' => "PHP version %s. <strong>Please see advice below</strong>",
'requirements_php_version_fail' => "You are running PHP version %s. You need PHP 5.3.0 or above. You should contact your hosting provider or system administrator to ask for an upgrade.",
'requirements_php_version_advice' => "You are running PHP version %s. While this version is compatible, we recommend version 5.4.0 or above.",
'requirements_php_version_advice' => "You are running PHP version %s which is now end of life.<br>Please note that IPS Community Suite 4.1.1 and newer <strong>will require PHP 5.4.0</strong> as a minimum.<br>You can continue to install IPS Community Suite 4.1.0 using your current PHP version.",
'requirements_curl_success' => "cURL extension loaded.",
'requirements_curl_fopen' => "fsockopen function available",
'requirements_curl_advice' => "You do not have the cURL PHP extension loaded or it is running a version less than 7.36. While this is not required, it is recommended.",
+2 -1
View File
@@ -6,7 +6,8 @@
<pre class="ipsCode prettyprint lang-sql">{$query}{{if mb_substr( $query, -1 ) != ';'}};{{endif}}</pre>
{{endforeach}}
<div class="ipsAreaBackground ipsPad ipsType_center">
<a href="{$url->setQueryString( array( 'key' => $_SESSION['uniqueKey'], 'mr_continue' => NULL, 'run_anyway' => 1, 'mr' => \IPS\Request::i()->mr ) )}" data-action="redirectContinue" class="ipsButton ipsButton_primary">{lang="manual_query_auto"}</a>
{{$mr = \IPS\core\Setup\Upgrade::adjustMultipleRedirect( array( 'extra' => array( 'lastSqlId' => $_SESSION['lastJsonIndex'] - 0.1 ) ) );}}
<a href="{$url->setQueryString( array( 'key' => $_SESSION['uniqueKey'], 'mr_continue' => NULL, 'run_anyway' => 1, 'mr' => $mr ) )}" data-action="redirectContinue" class="ipsButton ipsButton_primary">{lang="manual_query_auto"}</a>
&nbsp;{lang="or"}&nbsp;
<a href="{$url}" data-action="redirectContinue" class="ipsButton ipsButton_primary">{lang="manual_query_manual"}</a>
</div>
@@ -21,7 +21,7 @@
<script src="js/multipleRedirect.js"></script>
</head>
<body class='ipsApp ipsApp_installer'>
<!-- Nulled by IAF -->
<div id='elInstaller_wrap'>
<div id='ipsLayout_header' class='ipsClearfix' role='banner'>
<header>
@@ -59,6 +59,7 @@
</p>
<br><br>
<a href='{expression="\IPS\Settings::i()->base_url"}' class='ipsButton ipsButton_large ipsButton_primary'>Go to the suite</a>
<a href='{expression="rtrim( \IPS\Settings::i()->base_url, '/' ) . '/' . \IPS\CP_DIRECTORY"}' class='ipsButton ipsButton_large ipsButton_normal'>Go to the AdminCP</a>
<br><br>
<a href="{expression="\IPS\Http\Url::ips('docs/docs')"}" target="_blank">Suite Documentation</a>
</div>
@@ -80,7 +81,6 @@
<a href="{expression="\IPS\Http\Url::ips('docs/install_guide')"}" target="_blank">Install Guide</a>
</div>
{{endif}}
<p style="text-align: right">Nulled by IAF</p>
</main>
</div>
</body>
+2 -2
View File
@@ -28,8 +28,8 @@
<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>
{{foreach $requirements['advice'] as $key => $item}}
<li class="{{if $key === 'php'}}ipsMessage ipsMessage_warning{{else}}advisory{{endif}}">{$item}</li>
{{endforeach}}
</ul>
{{endif}}
+1
View File
@@ -6,6 +6,7 @@ $(function(){
$.ajax( url, {
dataType: 'json',
cache: false,
timeout: IPS_TIMEOUT !== false ? parseInt( IPS_TIMEOUT * 1000 ) : 30000,
complete: function( jqXHR, textStatus )
{
+12 -2
View File
@@ -43,7 +43,7 @@ $lang = array(
'login_err_bad_password' => "The password you entered is incorrect. Please try again (make sure your caps lock is off).",
'login_err_locked_unlock' => "Your account has been locked. Try again in {# [1:minute][?:minutes]}.",
'login_err_locked_nounlock' => "Your account has been locked. Try again later.",
'login_err_no_cookies' => "Your browser does not accept cookies which is required in order to log in.",
'login_err_no_cookies' => "Your browser does not accept cookies which are required in order to log in.",
'sign_in_with_these' => "Or sign in with one of these services",
'login_err_remote_validate' => "You must validate your account at another site before you can log in successfully. Please <a href='%s' target='_blank'>click here</a> to validate your account.",
'login_connect_generic_error' => "There was an error processing your login request at one of the sites in our network.",
@@ -58,8 +58,9 @@ $lang = array(
'login_live' => "Sign in with Microsoft",
'requirements_php_version_success' => "PHP version %s.",
'requirements_php_version_success_53x' => "PHP version %s. <strong>Please see advice below</strong>",
'requirements_php_version_fail' => "You are running PHP version %s. You need PHP 5.3.0 or above. You should contact your hosting provider or system administrator to ask for an upgrade.",
'requirements_php_version_advice' => "You are running PHP version %s. While this version is compatible, we recommend version 5.4.0 or above.",
'requirements_php_version_advice' => "You are running PHP version %s which is now end of life.<br>Please note that IPS Community Suite 4.1.1 and newer <strong>will require PHP 5.4.0</strong> as a minimum.<br>You can continue to upgrade to IPS Community Suite 4.1.0 using your current PHP version.",
'requirements_curl_success' => "cURL extension loaded.",
'requirements_curl_fopen' => "fsockopen function available",
'requirements_curl_advice' => "You do not have the cURL PHP extension loaded or it is running a version less than 7.36. While this is not required, it is recommended.",
@@ -487,4 +488,13 @@ $lang = array(
'100003_no_convert' => "Don't convert",
'100003_convert' => "Convert",
'100003_convert_desc' => "In this version of IPS Community Suite, members can no longer add other members as friends. However members can follow other members and receive notifications when the members they are following post. You can convert friends to followers, so any members who are friends with another member will now be following them, however this will mean they will start receiving notifications which may be undesired. It is recommended you do not convert.",
/* ! 101000 revert globalTemplate */
'101000_globalTemplate_revert' => "Revert custom themes which contain out of date globalTemplate templates?",
'101000_globalTemplate_revert_desc' => "In IPS Community Suite 4.1, the template 'utilitiesMenu' has been removed. This is used within the globalTemplate. After upgrading, you may see a message about the theme being out of date if you do not revert.<br><strong>Reverting templates will lose any customizations</strong>",
'101000_yes' => "Yes, revert losing customiztions",
'101000_no' => "No, I will manually adjust the templates after upgrading",
/* ! CMS 101000 Options */
'40000_cms_htmlconversion' => "Pages HTML",
);