Version 5.0.13

This commit is contained in:
Neo committed 2025-12-19 19:04:57 -08:00
1 parent b89858b2ff
commit 5efe744c5f
1407 files changed
+69690 -30177

No files matched your search

@@ -1,63 +0,0 @@
<?php
/**
* @brief Converter Library <#CLASS#> Class
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
* @copyright (c) Invision Power Services, Inc.
* @package Invision Community
* @subpackage Converter
* @since 21 Jan 2015
*/
namespace <#NAMESPACE#>;
/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
exit;
}
class <#CLASS#> extends \IPS\convert\Library
{
/**
* @brief Application
*/
public $app = '<#CLASS_LOWER#>';
/**
* Returns an array of items that we can convert, including the amount of rows stored in the Community Suite as well as the recommend value of rows to convert per cycle
*
* @param bool $rowCounts enable row counts
* @return array
*/
public function menuRows( $rowCounts=FALSE )
{
return array();
}
/**
* Returns an array of tables that need to be truncated when Empty Local Data is used
*
* @param string The method to truncate.
* @return array
*/
protected function truncate( $method )
{
return array();
}
/**
* This is how the insert methods will work - basically like 3.x, but we should be using the actual classes to insert the data unless there is a real world reason not too.
* Using the actual routines to insert data will help to avoid having to resynchronize and rebuild things later on, thus resulting in less conversion time being needed overall.
* Anything that parses content, for example, may need to simply insert directly then rebuild via a task over time, as HTML Purifier is slow when mass inserting content.
*/
/**
* A note on logging -
* If the data is missing and it is unlikely that any source software would be able to provide this, we do not need to log anything and can use default data (for example, group_layout in convertLeaderGroups).
* If the data is missing and it is likely that a majority of the source software can provide this, we should log a NOTICE and use default data (for example, a_casesensitive in convertAcronyms).
* If the data is missing and it is required to convert the item, we should log a WARNING and return FALSE.
* If the conversion absolutely cannot proceed at all (filestorage locations not writable, for example), then we should log an ERROR and throw an \IPS\convert\Exception to completely halt the process and redirect to an error screen showing the last logged error.
*/
}
@@ -1,153 +0,0 @@
<?php
/**
* @brief Converter <#CLASS#> Class
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
* @copyright (c) Invision Power Services, Inc.
* @package Invision Community
* @subpackage Converter
* @since 21 Jan 2015
*/
namespace <#NAMESPACE#>;
/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
exit;
}
class <#CLASS#> extends \IPS\convert\Software
{
/**
* Software Name
*
* @return string
*/
public static function softwareName()
{
/* Child classes must override this method */
return "<#CLASS#>";
}
/**
* Software Key
*
* @return string
*/
public static function softwareKey()
{
/* Child classes must override this method */
return "<#CLASS_LOWER#>";
}
/**
* Content we can convert from this software.
*
* @return array|NULL
* @note NULL indicates this converter cannot be used yet, useful to move redirect scripts into the 4.x framework
*/
public static function canConvert()
{
return array(
);
}
/**
* Can we convert passwords from this software.
*
* @return boolean
*/
public static function loginEnabled()
{
return FALSE;
}
/**
* Can we convert settings?
*
* @return boolean
*/
public static function canConvertSettings()
{
return FALSE;
}
/**
* Settings Map
*
* @return array
*/
public function settingsMap()
{
return array();
}
/**
* Settings Map Listing
*
* @return array
*/
public function settingsMapList()
{
return array();
}
/**
* Returns a block of text, or a language string, that explains what the admin must do to start this conversion
*
* @return string|NULL
*/
public static function getPreConversionInformation()
{
return NULL;
}
/**
* List of conversion methods that require additional information
*
* @return array
*/
public static function checkConf()
{
return array();
}
/**
* Get More Information
*
* @param string $method Conversion method
* @return array
*/
public function getMoreInfo( $method )
{
return array();
}
/**
* Finish - Adds everything it needs to the queues and clears data store
*
* @return array Messages to display
*/
public function finish()
{
return array();
}
/**
* Pre-process content for the Invision Community text parser
*
* @param string The post
* @param string|null Content Classname passed by post-conversion rebuild
* @param int|null Content ID passed by post-conversion rebuild
* @return string The converted post
*/
public static function fixPostData( string $post, ?string $className=null, ?int $contentId=null ): string
{
return $post;
}
// Insert convertX methods here
}
+1 -3
View File
@@ -13,9 +13,7 @@
"RebuildNonContent": "IPS\\convert\\extensions\\core\\Queue\\RebuildNonContent",
"RebuildProfilePhotos": "IPS\\convert\\extensions\\core\\Queue\\RebuildProfilePhotos",
"RebuildTagCache": "IPS\\convert\\extensions\\core\\Queue\\RebuildTagCache",
"RecountAnswerRatings": "IPS\\convert\\extensions\\core\\Queue\\RecountAnswerRatings",
"RecountClubMembers": "IPS\\convert\\extensions\\core\\Queue\\RecountClubMembers",
"RecountQuestionRatings": "IPS\\convert\\extensions\\core\\Queue\\RecountQuestionRatings"
"RecountClubMembers": "IPS\\convert\\extensions\\core\\Queue\\RecountClubMembers"
}
}
}
+4 -4
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<javascript app="convert">
<file javascript_app="convert" javascript_location="admin" javascript_path="controllers/convert" javascript_name="ips.convert.menu.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100">/**
<file javascript_app="convert" javascript_location="admin" javascript_path="controllers/convert" javascript_name="ips.convert.menu.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000100">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -45,7 +45,7 @@
}
} );
}(jQuery, _));</file>
<file javascript_app="convert" javascript_location="admin" javascript_path="controllers/forms" javascript_name="ips.forms.reactionmapper.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000050">/**
<file javascript_app="convert" javascript_location="admin" javascript_path="controllers/forms" javascript_name="ips.forms.reactionmapper.js" javascript_type="controller" javascript_version="5001302" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -61,7 +61,7 @@
initialize: function () {
var id = $(this.scope).data( 'reactionid' );
this.on( document, 'click', &quot;#elReactionMapper&quot; + id + &quot;_menu .ipsMenu_item&quot;, this.selectReaction );
this.on( document, 'click', &quot;#elReactionMapper&quot; + id + &quot;_menu [data-action='selectReaction']&quot;, this.selectReaction );
this.setup();
},
@@ -72,7 +72,7 @@
* @returns {void}
*/
setup: function () {
this.scope.find('a[data-default=&quot;true&quot;]').click();
this.scope.find('[data-default=&quot;true&quot;]').click();
},
/**
+1 -7
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="convert" version="5000074">
<app key="convert" version="5001302">
<word key="__app_convert" js="0">Converter</word>
<word key="menu__convert_manage" js="0">Conversions</word>
<word key="menu__convert_manage_manage_start" js="0">Start New Conversion</word>
@@ -275,10 +275,6 @@
<word key="convert_forum_password_desc" js="0"><![CDATA[This forum has a password set, however we are unable to decrypt the password for conversion into Invision Community. Please enter the password you wish to use for this forum. <strong>Note:</strong> Not entering a password here will result in no password being set for the forum.]]></word>
<word key="convert_forums_topics_multimods" js="0">Convert Multi-moderation Settings</word>
<word key="_convert_forums_topics_multimods" js="0">Multi-moderation Settings</word>
<word key="convert_forums_question_ratings" js="0">Convert Question Ratings</word>
<word key="convert_forums_answer_ratings" js="0">Convert Answer Ratings</word>
<word key="_convert_forums_question_ratings" js="0">Question Ratings</word>
<word key="_convert_forums_answer_ratings" js="0">Answer Ratings</word>
<word key="convert_forums_topics" js="0">Convert Topics</word>
<word key="convert_forums_topics_followers" js="0">Convert Topic Followers</word>
<word key="_convert_forums_topics" js="0">Topics</word>
@@ -416,8 +412,6 @@
<word key="queue_rebuilding_profile_photos" js="0">Rebuilding Profile Photo Thumbnails</word>
<word key="queue_rebuilding_conversation_first_id" js="0">Rebuilding Personal Conversation first post ids</word>
<word key="queue_rebuilding_tag_cache" js="0">Rebuilding %s tags</word>
<word key="queue_recounting_question_ratings" js="0">Rebuilding Question Ratings</word>
<word key="queue_recounting_answer_ratings" js="0">Rebuilding Answer Ratings</word>
<word key="queue_recounting_club_members" js="0">Recounting Club Members</word>
<word key="continue_conversion" js="0">Continue Conversion</word>
<word key="convert_nexus_customers" js="0">Convert Customers</word>
+10 -6
View File
@@ -13,13 +13,17 @@
<input type="hidden" value="0" name="{$name}[{$id}]" />
<p class='i-text-align_center'>{$cReaction['title']|raw}</p>
<div>
<a href='#elReactionMapper{$id}_menu' id='elReactionMapper{$id}' class='ipsButton ipsButton--secondary ipsButton--small ipsButton--wide' data-ipsMenu><span class="elMenuSelect_replace">{lang="convert_reaction_choose"}</span> &nbsp;<i class='fa-solid fa-caret-down'></i></a>
<button type="button" id="elReactionMapper{$id}" popovertarget="elReactionMapper{$id}_menu" class='ipsButton ipsButton--secondary ipsButton--small ipsButton--wide'><span class="elMenuSelect_replace">{lang="convert_reaction_choose"}</span><i class='fa-solid fa-caret-down'></i></button>
</div>
<ul id='elReactionMapper{$id}_menu' role='menu' class='ipsMenu ipsMenu_auto ipsMenu_withStem ipsHide'>
{{foreach $ipsReactions as $reactionId => $reaction}}
<li class='ipsMenu_item'><a role='menuitem' href='#' data-id="{$reactionId}" {{if(isset($value[$id]) aND $value[$id] ==$reactionId)}}data-default="true"{{endif}}>{{if( !empty( $reaction ))}}<img src="{$reaction}" alt="" class="cReactionSmall"/> {{endif}}{$descriptions[ $reactionId ]}</a></li>
{{endforeach}}
</ul>
<i-dropdown popover id="elReactionMapper{$id}_menu">
<div class="iDropdown">
<ul class="iDropdown__items" role='menu'>
{{foreach $ipsReactions as $reactionId => $reaction}}
<li><button type="button" data-action="selectReaction" role='menuitem' data-id="{$reactionId}" {{if(isset($value[$id]) AND $value[$id] ==$reactionId)}}data-default="true"{{endif}}>{{if( !empty( $reaction ))}}<img src="{$reaction}" alt="" class="cReactionSmall"/> {{endif}}{$descriptions[ $reactionId ]}</button></li>
{{endforeach}}
</ul>
</div>
</i-dropdown>
</div>
</div>
{{endforeach}}
+50 -1
View File
@@ -348,5 +348,54 @@
"5000071": "5.0.6 Beta 2",
"5000072": "5.0.6 Beta 3",
"5000073": "5.0.6 Beta 4",
"5000074": "5.0.6"
"5000074": "5.0.6",
"5000075": "5.0.7 Beta 1",
"5000076": "5.0.7 Beta 2",
"5000077": "5.0.7 Beta 2",
"5000078": "5.0.7 Beta 3",
"5000079": "5.0.7 Beta 4",
"5000080": "5.0.7",
"5000081": "5.0.7",
"5000082": "5.0.7",
"5000800": "5.0.8 Alpha 1",
"5000801": "5.0.8 Alpha 2",
"5000802": "5.0.8 Beta 1",
"5000803": "5.0.8 Beta 2",
"5000804": "5.0.8 Beta 3",
"5000805": "5.0.8",
"5000900": "5.0.9 Beta 1",
"5000901": "5.0.9 Beta 1",
"5000902": "5.0.9 Beta 1",
"5000903": "5.0.9 Beta 2",
"5000904": "5.0.9",
"5000905": "5.0.9",
"5000906": "5.0.10 Beta 1",
"5000907": "5.0.10 Beta 1",
"5000908": "5.0.10 Beta 1",
"5000909": "5.0.10 Beta 1",
"5000910": "5.0.10 Beta 2",
"5000911": "5.0.10 Beta 3",
"5000912": "5.0.10 Beta 4",
"5000913": "5.0.10 Beta 4",
"5000914": "5.0.10",
"5000915": "5.0.10",
"5000916": "5.0.10",
"5000917": "5.0.10",
"5000918": "5.0.10",
"5000919": "5.0.10",
"5000920": "5.0.10",
"5001100": "5.0.11 Beta 1",
"5001101": "5.0.11 Beta 1",
"5001102": "5.0.11 Beta 2",
"5001103": "5.0.11",
"5001104": "5.0.11",
"5001105": "5.0.11",
"5001200": "5.0.12 Beta 1",
"5001201": "5.0.12 Beta 2",
"5001202": "5.0.12 Beta 3",
"5001203": "5.0.12",
"5001204": "5.0.12",
"5001300": "5.0.13 Beta 1",
"5001301": "5.0.13 Beta 2",
"5001302": "5.0.13"
}
@@ -15,6 +15,7 @@ namespace IPS\convert\extensions\core\Queue;
use Exception;
use IPS\Application;
use IPS\Content\Taggable;
use IPS\convert\App;
use IPS\Db;
use IPS\Extensions\QueueAbstract;
@@ -84,7 +85,7 @@ class RebuildTagCache extends QueueAbstract
{
$classname = $data['class'];
$exploded = explode( '\\', $classname );
if ( !class_exists( $classname ) or !Application::appIsEnabled( $exploded[1] ) OR !in_array( 'IPS\Content\Taggable', class_implements( $classname ) ) )
if ( !class_exists( $classname ) or !Application::appIsEnabled( $exploded[1] ) OR !IPS::classUsesTrait( $classname, Taggable::class ) )
{
throw new QueueOutOfRangeException;
}
@@ -1,125 +0,0 @@
<?php
/**
* @brief Background Task
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
* @copyright (c) Invision Power Services, Inc.
* @license https://www.invisioncommunity.com/legal/standards/
* @package Invision Community
* @subpackage convert
* @since 19 Nov 2016
*/
namespace IPS\convert\extensions\core\Queue;
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\Application;
use IPS\convert\App;
use IPS\Db;
use IPS\Extensions\QueueAbstract;
use IPS\Member;
use IPS\Task\Queue\OutOfRangeException;
use function defined;
use const IPS\REBUILD_NORMAL;
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
header( ( $_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.0' ) . ' 403 Forbidden' );
exit;
}
/**
* Background Task
*/
class RecountAnswerRatings extends QueueAbstract
{
/**
* Parse data before queuing
*
* @param array $data Data
* @return array|null
*/
public function preQueueData( array $data ): ?array
{
$data['count'] = Db::i()->select( 'count(pid)', 'forums_posts' )->first();
if( $data['count'] == 0 )
{
return NULL;
}
$data['completed'] = 0;
return $data;
}
/**
* Run Background Task
*
* @param mixed $data Data as it was passed to \IPS\Task::queue()
* @param int $offset Offset
* @return int New offset
* @throws OutOfRangeException Indicates offset doesn't exist and thus task is complete
*/
public function run( mixed &$data, int $offset ): int
{
if ( !class_exists( 'IPS\forums\Topic\Post' ) OR !Application::appisEnabled( 'forums' ) )
{
throw new OutOfRangeException;
}
$last = NULL;
/* If the app doesn't exist, stop now */
try
{
$app = App::load( $data['app'] );
}
catch( \OutOfRangeException $e )
{
throw new OutOfRangeException;
}
/* Loop over distinct post IDs in forums_answer_ratings - while using the DISTINCT flag can be slower, there generally aren't many of these */
foreach( Db::i()->select( 'post', 'forums_answer_ratings', array( "post>?", $offset ), "post ASC", array( 0, REBUILD_NORMAL ), NULL, NULL, Db::SELECT_DISTINCT ) AS $pid )
{
$last = $pid;
$data['completed']++;
/* Is this converted content? */
try
{
/* Just checking, we don't actually need anything */
$app->checkLink( $pid, 'forums_posts' );
}
catch( \OutOfRangeException $e )
{
continue;
}
/* Rebuild count */
Db::i()->update( 'forums_posts', array(
'post_field_int' => (int) Db::i()->select( 'SUM(rating)', 'forums_answer_ratings', array( 'post=?', $pid ) )->first()
), array( 'pid=?', $pid ) );
}
if( $last === NULL )
{
throw new OutOfRangeException;
}
return $last;
}
/**
* Get Progress
*
* @param mixed $data Data as it was passed to \IPS\Task::queue()
* @param int $offset Offset
* @return array Text explaining task and percentage complete
*/
public function getProgress( mixed $data, int $offset ): array
{
return array( 'text' => Member::loggedIn()->language()->addToStack( 'queue_recounting_answer_ratings' ), 'complete' => $data['count'] ? ( round( 100 / $data['count'] * $data['completed'], 2 ) ) : 100 );
}
}
@@ -1,125 +0,0 @@
<?php
/**
* @brief Background Task
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
* @copyright (c) Invision Power Services, Inc.
* @license https://www.invisioncommunity.com/legal/standards/
* @package Invision Community
* @subpackage convert
* @since 19 Nov 2016
*/
namespace IPS\convert\extensions\core\Queue;
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\Application;
use IPS\convert\App;
use IPS\Db;
use IPS\Extensions\QueueAbstract;
use IPS\Member;
use IPS\Task\Queue\OutOfRangeException;
use function defined;
use const IPS\REBUILD_NORMAL;
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
header( ( $_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.0' ) . ' 403 Forbidden' );
exit;
}
/**
* Background Task
*/
class RecountQuestionRatings extends QueueAbstract
{
/**
* Parse data before queuing
*
* @param array $data Data
* @return array|null
*/
public function preQueueData( array $data ): ?array
{
$data['count'] = Db::i()->select( 'count(tid)', 'forums_topics' )->first();
if( $data['count'] == 0 )
{
return NULL;
}
$data['completed'] = 0;
return $data;
}
/**
* Run Background Task
*
* @param mixed $data Data as it was passed to \IPS\Task::queue()
* @param int $offset Offset
* @return int New offset
* @throws OutOfRangeException Indicates offset doesn't exist and thus task is complete
*/
public function run( mixed &$data, int $offset ): int
{
if ( !class_exists( 'IPS\forums\Topic' ) OR !Application::appisEnabled( 'forums' ) )
{
throw new OutOfRangeException;
}
$last = NULL;
/* If the app doesn't exist, stop now */
try
{
$app = App::load( $data['app'] );
}
catch( \OutOfRangeException $e )
{
throw new OutOfRangeException;
}
/* Loop over distinct topic IDs in forums_question_ratings - while using the DISTINCT flag can be slower, there generally aren't many of these */
foreach( Db::i()->select( 'topic', 'forums_question_ratings', array( "topic>?", $offset ), "topic ASC", array( 0, REBUILD_NORMAL ), NULL, NULL, Db::SELECT_DISTINCT ) AS $topic )
{
$last = $topic;
$data['completed']++;
/* Is this converted content? */
try
{
/* Just checking, we don't actually need anything */
$app->checkLink( $topic, 'forums_topics' );
}
catch( \OutOfRangeException $e )
{
continue;
}
/* Rebuild count */
Db::i()->update( 'forums_topics', array(
'question_rating' => (int) Db::i()->select( 'SUM(rating)', 'forums_question_ratings', array( 'topic=?', $topic ) )->first()
), array( 'tid=?', $topic ) );
}
if( $last === NULL )
{
throw new OutOfRangeException;
}
return $last;
}
/**
* Get Progress
*
* @param mixed $data Data as it was passed to \IPS\Task::queue()
* @param int $offset Offset
* @return array Text explaining task and percentage complete
*/
public function getProgress( mixed $data, int $offset ): array
{
return array( 'text' => Member::loggedIn()->language()->addToStack( 'queue_recounting_question_ratings' ), 'complete' => $data['count'] ? ( round( 100 / $data['count'] * $data['completed'], 2 ) ) : 100 );
}
}
-37
View File
@@ -1,37 +0,0 @@
//<?php
use IPS\Db\Select;
class convert_hook_Db extends _HOOK_CLASS_
{
/**
* Build SELECT statement
*
* @param array|string $columns The columns (as an array) to select or an expression
* @param array|string $table The table to select from. Either (string) table_name or (array) ( name, alias ) or \IPS\Db\Select object
* @param array|string|null $where WHERE clause - see \IPS\Db::compileWhereClause() for details
* @param string|null $order ORDER BY clause
* @param int|array|null $limit Rows to fetch or array( offset, limit )
* @param string|NULL|array $group Column(s) to GROUP BY
* @param array|string|null $having HAVING clause (same format as WHERE clause)
* @param int $flags Bitwise flags
* @return Select
* @li \IPS\Db::SELECT_DISTINCT Will use SELECT DISTINCT
* @li \IPS\Db::SELECT_MULTIDIMENSIONAL_JOINS Will return the result as a multidimensional array, with each joined table separately
*/
public function select( array|string $columns, array|string|Select $table, array|string $where=NULL, string $order=NULL, int|array $limit=NULL, array|string $group=NULL, array|string $having=NULL, int $flags=0 ): Select
{
switch( $table )
{
case 'custom_bbcode':
$table = 'convert_custom_bbcode';
break;
case 'bbcode_mediatag':
$table = 'convert_bbcode_mediatag';
break;
}
return parent::select( $columns, $table, $where, $order, $limit, $group, $having, $flags );
}
}
@@ -1,36 +0,0 @@
//<?php
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\Application;
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
exit;
}
class convert_hook_FrontDispatcher extends _HOOK_CLASS_
{
/**
* Check whether the URL we visited is correct and route appropriately
*
* @return void
*/
protected function checkUrl()
{
/* Let the parent do its thing first */
try
{
parent::checkUrl();
}
/* If we are here, the URL was not valid. Let's see if we need to do anything for converted sites */
catch(OutOfRangeException $e )
{
$application = Application::load('convert');
$application::checkRedirects();
/* If we are still here, let the exception bubble up */
throw $e;
}
}
}
@@ -1,72 +0,0 @@
//<?php
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\Member;
use IPS\Settings;
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
exit;
}
class convert_hook_LegacyParser extends _HOOK_CLASS_
{
/**
* Parse
*
* @param string $value Text to parse
* @return string
*/
public function parse( $value )
{
$result = parent::parse( $value );
/* Parse [mention=id]name[/URL] bbcode */
preg_match_all( '#\[mention=(\d+)\](.+?)\[\/mention\]#is', $result, $matches );
foreach( $matches[0] as $idx => $m )
{
$member = Member::load( $matches[1][ $idx ] );
if ( $member->member_id )
{
$result = str_ireplace( $m, "<a contenteditable=\"false\" rel=\"\" href=\"{$member->url()}\" data-mentionid=\"{$matches[1][ $idx ]}\" data-ipshover-target=\"{$member->url()->setQueryString( 'do', 'hovercard' )}\" data-ipshover=\"\">@{$matches[2][ $idx ]}</a>", $result );
}
else
{
$result = str_ireplace( $m, "@{$matches[2][ $idx ]}", $result );
}
}
return str_replace( Settings::i()->base_url, '<___base_url___>/', $result );
}
/**
* Parse statically
*
* @param string $value The value to parse
* @param Member|null $member The member posting. NULL will use currently logged in member.
* @param bool $allowHtml Allow HTML
* @param string $attachClass Key to use for attachments
* @param int $id1 ID1 to use for attachments
* @param int $id2 ID2 to use for attachments
* @param int|NULL $id3 ID3 to use for attachments
* @param string $itemClass The *item* classname (e.g. IPS\forums\Topic)
* @return string
* @see __construct
*/
public static function parseStatic( $value, $member=NULL, $allowHtml=FALSE, $attachClass=null, $id1=0, $id2=0, $id3=NULL, $itemClass=NULL )
{
/* This content has previously been parsed, don't do it again
* -- This can occur with the rebuildNonContent background tasks as they cannot confirm if
* -- content was converted, or already present
*/
if( mb_stristr( $value, '<___base_url___>' ) OR mb_stristr( $value, 'data-ips' ) )
{
return $value;
}
return parent::parseStatic( $value, $member, $allowHtml, $attachClass, $id1, $id2, $id3, $itemClass );
}
}
@@ -1,20 +0,0 @@
//<?php
/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
exit;
}
abstract class convert_hook_LoginHandler extends _HOOK_CLASS_
{
/**
* Get all handler classes
*/
public static function handlerClasses(): array
{
$handlers = parent::handlerClasses();
$handlers[] = 'IPS\convert\Login';
return $handlers;
}
}
Whitespace-only changes.
@@ -0,0 +1,22 @@
{
"id": 5000075,
"name": "5.0.7 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000076,
"name": "5.0.7 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000077,
"name": "5.0.7 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000078,
"name": "5.0.7 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000079,
"name": "5.0.7 Beta 4",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000080,
"name": "5.0.7",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000081,
"name": "5.0.7",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000082,
"name": "5.0.7",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000800,
"name": "5.0.8 Alpha 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000801,
"name": "5.0.8 Alpha 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000802,
"name": "5.0.8 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000803,
"name": "5.0.8 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000804,
"name": "5.0.8 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000805,
"name": "5.0.8",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000900,
"name": "5.0.9 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000901,
"name": "5.0.9 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000902,
"name": "5.0.9 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000903,
"name": "5.0.9 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000904,
"name": "5.0.9",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000905,
"name": "5.0.9",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000906,
"name": "5.0.10 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000907,
"name": "5.0.10 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000908,
"name": "5.0.10 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000909,
"name": "5.0.10 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000910,
"name": "5.0.10 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000911,
"name": "5.0.10 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000912,
"name": "5.0.10 Beta 4",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000913,
"name": "5.0.10 Beta 4",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000914,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000915,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000916,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000917,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000918,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000919,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5000920,
"name": "5.0.10",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001100,
"name": "5.0.11 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001101,
"name": "5.0.11 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001102,
"name": "5.0.11 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001103,
"name": "5.0.11",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001104,
"name": "5.0.11",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001105,
"name": "5.0.11",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001200,
"name": "5.0.12 Beta 1",
"steps": {
"queries": false,
"lang": false,
"theme": true,
"themeeditor": false,
"javascript": true,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,14 @@
{
"files": {
"added": [],
"edited": [
"convert\/admin\/controllers\/forms\/ips.forms.reactionmapper.js"
],
"removed": []
},
"orders": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [
"admin\/forms\/reactionmapper"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5001201,
"name": "5.0.12 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001202,
"name": "5.0.12 Beta 3",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001203,
"name": "5.0.12",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001204,
"name": "5.0.12",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001300,
"name": "5.0.13 Beta 1",
"steps": {
"queries": false,
"lang": true,
"theme": true,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,19 @@
{
"normal": {
"added": [],
"edited": [],
"removed": [
"convert_forums_question_ratings",
"convert_forums_answer_ratings",
"_convert_forums_question_ratings",
"_convert_forums_answer_ratings",
"queue_recounting_question_ratings",
"queue_recounting_answer_ratings"
]
},
"js": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,19 @@
{
"html": {
"added": [],
"edited": [
"admin\/forms\/reactionmapper"
],
"removed": []
},
"css": {
"added": [],
"edited": [],
"removed": []
},
"resources": {
"added": [],
"edited": [],
"removed": []
}
}
@@ -0,0 +1,22 @@
{
"id": 5001301,
"name": "5.0.13 Beta 2",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -0,0 +1,22 @@
{
"id": 5001302,
"name": "5.0.13",
"steps": {
"queries": false,
"lang": false,
"theme": false,
"themeeditor": false,
"javascript": false,
"emailTemplates": false,
"acpSearchKeywords": false,
"settings": false,
"tasks": false,
"modules": false,
"widgets": false,
"customOptions": false,
"customRoutines": false
},
"forceMainUpgrader": false,
"forceManualDownloadNoCiC": false,
"forceManualDownloadCiC": false
}
@@ -154,30 +154,6 @@ class Forums extends Core
);
break;
case 'convertForumsQuestionRatings':
$return[ $k ] = array(
'step_title' => 'convert_forums_question_ratings',
'step_method' => 'convertForumsQuestionRatings',
'ips_rows' => Db::i()->select( 'COUNT(*)', 'forums_question_ratings' ),
'source_rows' => array( 'table' => $v['table'], 'where' => $v['where'] ),
'per_cycle' => 200,
'dependencies' => array( 'convertForumsTopics' ),
'link_type' => 'forums_question_ratings',
);
break;
case 'convertForumsAnswerRatings':
$return[ $k ] = array(
'step_title' => 'convert_forums_answer_ratings',
'step_method' => 'convertForumsAnswerRatings',
'ips_rows' => Db::i()->select( 'COUNT(*)', 'forums_answer_ratings' ),
'source_rows' => array( 'table' => $v['table'], 'where' => $v['where'] ),
'per_cycle' => 200,
'dependencies' => array( 'convertForumsPosts' ),
'link_type' => 'forums_answer_ratings',
);
break;
case 'convertAttachments':
$return[ $k ] = array(
'step_title' => 'convert_forums_attachments',
@@ -302,7 +278,6 @@ class Forums extends Core
'core_ratings' => array( 'class=?', 'IPS\\forums\\Topic\\Post' ),
'core_tags' => array( 'tag_meta_app=? AND tag_meta_area=?', 'forums', 'forums' ),
'core_voters' => NULL,
'forums_question_ratings' => NULL,
'forums_topics' => NULL
);
break;
@@ -311,7 +286,6 @@ class Forums extends Core
$return['convertForumsPosts'] = array(
'core_edit_history' => array( 'class=?', 'IPS\\forums\\Topic\\Post' ),
'core_reputation_index' => array( 'app=? AND type=?', 'forums', 'pid' ),
'forums_answer_ratings' => NULL,
'forums_posts' => NULL
);
break;
@@ -332,14 +306,6 @@ class Forums extends Core
$return['convertForumsRssImported'] = array( 'forums_rss_imported' => NULL );
break;
case 'convertForumsQuestionRatings':
$return['convertForumsQuestionRatings'] = array( 'forums_question_ratings' => NULL );
break;
case 'convertForumsAnswerRatings':
$return['convertForumsAnswerRatings'] = array( 'forums_answer_ratings' => NULL );
break;
case 'convertAttachments':
$attachIds = array();
foreach( Db::i()->select( 'attachment_id', 'core_attachments_map', array( 'location_key=?', 'forums_Forums' ) ) AS $attachment )
@@ -1158,11 +1124,6 @@ class Forums extends Core
$info['featured'] = 0;
}
if ( !isset( $info['question_rating'] ) )
{
$info['question_rating'] = NULL;
}
if ( !isset( $info['topic_hiddenposts'] ) )
{
$info['topic_hiddenposts'] = 0;
@@ -1652,246 +1613,6 @@ class Forums extends Core
return parent::convertRssImported( $info, 'forums_rss_import', 'forums_topics' );
}
/**
* Convert a question rating
*
* @param array $info Data to insert
* @return int|bool The ID of the newly inserted rating, or FALSE on failure.
*/
public function convertForumsQuestionRating( array $info=array() ) : bool|int
{
/* We do not need to store an ID if one isn't present */
$hasId = TRUE;
if ( !isset( $info['id'] ) )
{
$hasId = FALSE;
}
/* Everything but the date is required */
if ( isset( $info['topic'] ) )
{
try
{
$info['topic'] = $this->software->app->getLink( $info['topic'], 'forums_topics' );
}
catch( OutOfRangeException $e )
{
$this->software->app->log( 'question_rating_missing_question', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
}
else
{
$this->software->app->log( 'question_rating_missing_question', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
if ( isset( $info['forum'] ) )
{
try
{
$info['forum'] = $this->software->app->getLink( $info['forum'], 'forums_forums' );
}
catch( OutOfRangeException $e )
{
$this->software->app->log( 'question_rating_missing_forum', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
}
else
{
$this->software->app->log( 'question_rating_missing_forum', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
if ( isset( $info['member'] ) )
{
try
{
$info['member'] = $this->software->app->getLink( $info['member'], 'core_members', TRUE );
}
catch( OutOfRangeException $e )
{
$this->software->app->log( 'question_rating_missing_member', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
}
else
{
$this->software->app->log( 'question_rating_missing_member', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
if ( !isset( $info['rating'] ) )
{
$this->software->app->log( 'question_rating_missing_rating', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
else
{
if ( $info['rating'] >= 1 )
{
$info['rating'] = 1;
}
else if ( $info['rating'] <= -1 ) # that always looks so weird
{
$info['rating'] = -1;
}
else
{
$this->software->app->log( 'question_rating_invalid_rating', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
}
if ( isset( $info['date'] ) )
{
if ( $info['date'] instanceof DateTime )
{
$info['date'] = $info['date']->getTimestamp();
}
}
else
{
$info['date'] = time();
}
if ( $hasId )
{
$id = $info['id'];
unset( $info['id'] );
}
$inserted_id = Db::i()->insert( 'forums_question_ratings', $info, TRUE );
if ( $hasId )
{
$this->software->app->addLink( $inserted_id, $id, 'forums_question_ratings' );
}
return $inserted_id;
}
/**
* Convert an Answer Rating
*
* @param array $info Data to insert
* @return int|bool The ID of the newly inserted rating, or FALSE on failure.
*/
public function convertForumsAnswerRating( array $info=array() ) : bool|int
{
/* We do not need to store an ID if one is not present */
$hasId = TRUE;
if ( !isset( $info['id'] ) )
{
$hasId = FALSE;
}
/* Everything but the date is required */
if ( isset( $info['post'] ) )
{
try
{
$info['post'] = $this->software->app->getLink( $info['post'], 'forums_posts' );
}
catch( OutOfRangeException $e )
{
$this->software->app->log( 'answer_rating_missing_answer', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
}
else
{
$this->software->app->log( 'answer_rating_missing_answer', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
if ( isset( $info['member'] ) )
{
try
{
$info['member'] = $this->software->app->getLink( $info['member'], 'core_members', TRUE );
}
catch( OutOfRangeException $e )
{
$this->software->app->log( 'answer_rating_missing_member', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
}
else
{
$this->software->app->log( 'answer_rating_missing_member', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
if ( !isset( $info['rating'] ) )
{
$this->software->app->log( 'answer_rating_missing_rating', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
else
{
if ( $info['rating'] >= 1 )
{
$info['rating'] = 1;
}
else if ( $info['rating'] <= -1 )
{
$info['rating'] = -1;
}
else
{
$this->software->app->log( 'answer_rating_invalid_rating', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
}
if ( isset( $info['date'] ) )
{
if ( $info['date'] instanceof DateTime )
{
$info['date'] = $info['date']->getTimestamp();
}
}
else
{
$info['date'] = time();
}
if ( isset( $info['topic'] ) )
{
try
{
$info['topic'] = $this->software->app->getLink( $info['topic'], 'forums_topics' );
}
catch( OutOfRangeException $e )
{
$this->software->app->log( 'answer_rating_missing_topic', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
}
else
{
$this->software->app->log( 'answer_rating_missing_topic', __METHOD__, App::LOG_WARNING, ( $hasId ) ? $info['id'] : NULL );
return FALSE;
}
if ( $hasId )
{
$id = $info['id'];
unset( $info['id'] );
}
$inserted_id = Db::i()->insert( 'forums_answer_ratings', $info, TRUE );
if ( $hasId )
{
$this->software->app->addLink( $inserted_id, $id, 'forums_answer_ratings' );
}
return $inserted_id;
}
/**
* Convert an Attachment
*
@@ -149,14 +149,6 @@ class Invisioncommunity extends Software
'table' => 'core_rss_imported',
'where' => NULL,
),
'convertForumsQuestionRatings' => array(
'table' => 'forums_question_ratings',
'where' => NULL,
),
'convertForumsAnswerRatings' => array(
'table' => 'forums_answer_ratings',
'where' => NULL,
),
'convertAttachments' => array(
'table' => 'core_attachments',
'where' => NULL
@@ -279,26 +271,6 @@ class Invisioncommunity extends Software
return array( "f_forum_last_post_data", "f_rebuild_posts", "f_recounting_forums", "f_recounting_topics", "f_topic_tags_recount" );
}
/**
* Convert question ratings
*
* @return void
*/
public function convertForumsAnswerRatings() : void
{
$libraryClass = $this->getLibrary();
$libraryClass::setKey( 'id' );
foreach( $this->fetch( 'forums_answer_ratings', 'id' ) AS $row )
{
/* Remove non-standard columns */
$this->parent->unsetNonStandardColumns( $row, 'forums_answer_ratings', 'forums' );
$libraryClass->convertForumsAnswerRating( $row );
$libraryClass->setLastKeyValue( $row['id'] );
}
}
/**
* Convert forums
*
@@ -437,26 +409,6 @@ class Invisioncommunity extends Software
}
}
/**
* Convert question ratings
*
* @return void
*/
public function convertForumsQuestionRatings() : void
{
$libraryClass = $this->getLibrary();
$libraryClass::setKey( 'id' );
foreach( $this->fetch( 'forums_question_ratings', 'id' ) AS $row )
{
/* Remove non-standard columns */
$this->parent->unsetNonStandardColumns( $row, 'forums_question_ratings', 'forums' );
$libraryClass->convertForumsQuestionRating( $row );
$libraryClass->setLastKeyValue( $row['id'] );
}
}
/**
* Convert topics mmod
*
@@ -549,6 +549,7 @@ class Vanilla extends Software
'starter_name' => $row['UserName'],
'last_poster_name' => $row['LastCommentUserName'],
'views' => $row['CountViews'],
'pinned' => (int) $row['Announce'] > 0 ? 1 : 0,
);
$libraryClass->convertForumsTopic( $info );