Version 3.4.6

This commit is contained in:
Neo committed 2025-12-19 00:40:53 -08:00
1 parent e4478369d8
commit b45ea0dffb
1568 files changed
+155104 -161665

No files matched your search

@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Admin Bookmarks Model
* Last Updated: $Date: 2012-05-10 21:10:13 +0100 (Thu, 10 May 2012) $
* </pre>
+1 -1
View File
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Advertisements
* </pre>
*
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Archive: Reader
* By Matt Mecham
* </pre>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Archive: Writer
* By Matt Mecham
* </pre>
+441 -442
View File
@@ -1,442 +1,441 @@
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* Archive: Reader
* By Matt Mecham
* </pre>
*
* @author $Author: ips_terabyte $
* @copyright (c) 2010 Invision Power Services, Inc.
* @license http://www.invisionpower.com/company/standards.php#license
* @package IP.Board
* @link http://www.invisionpower.com
* @since 18th November 2011
* @version $Revision: 8644 $
*/
/**
* Restores topics that are either manually flagged or via settings
* from the Admin CP.
*
* Manually flagged topics are always restored first.
* @author matt
*
*/
class classes_archive_restore
{
/**#@+
* Registry objects
*
* @access protected
* @var object
*/
protected $registry;
protected $DB;
protected $settings;
protected $request;
protected $lang;
protected $member;
protected $memberData;
protected $cache;
protected $caches;
/**#@-*/
/**
* Set current app
*/
private $_app = '';
/**
* Constructor
*
*/
public function __construct()
{
/* Make registry objects */
$this->registry = ipsRegistry::instance();
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->lang = $this->registry->getClass('class_localization');
$this->member = $this->registry->member();
$this->memberData =& $this->registry->member()->fetchMemberData();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
/* Check for class_forums */
if ( ipsRegistry::isClassLoaded('class_forums') !== TRUE )
{
$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . "/sources/classes/forums/class_forums.php", 'class_forums', 'forums' );
$this->registry->setClass( 'class_forums', new $classToLoad( $this->registry ) );
$this->registry->class_forums->forumsInit();
}
/* Language class */
$this->registry->getClass('class_localization')->loadLanguageFile( array( 'public_global' ), 'core' );
/* Fetch engine class */
$this->settings['archive_engine'] = ( $this->settings['archive_engine'] ) ? $this->settings['archive_engine'] : 'sql';
/* Load up archive class */
$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/archive/restore/' . $this->settings['archive_engine'] . '.php', 'classes_archive_restore_' . $this->settings['archive_engine'] );
$this->engine = new $classToLoad();
}
/**
* Set the current application
* @param string $app
*/
public function setApp( $app )
{
$this->_app = $app;
}
/**
* Get the application
* @return string
*/
public function getApp()
{
return $this->_app;
}
/**
* Restore posts to the topic
* @param array INTS
*/
public function restore( $pids=array() )
{
if ( ! count( $pids ) )
{
return null;
}
$topics = array();
$forumIds = array();
$completedTopics = array();
$workingTopics = array();
$maxes = array();
/* Load the attachments stuff */
$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'core' ) . '/sources/classes/attach/class_attach.php', 'class_attach' );
$class_attach = new $classToLoad( $this->registry );
$class_attach->type = 'post';
$class_attach->init();
/* Load the attachments stuff */
$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . '/sources/classes/topics.php', 'app_forums_classes_topics' );
$topicClass = new $classToLoad( $this->registry );
/* Fetch data based on PIDs */
$posts = $topicClass->getPosts( array( 'postId' => $pids,
'sortField' => 'pid',
'sortOrder' => 'asc',
'isArchivedTopic' => true ,
'skipForumCheck' => true,
'postType' => array('sdelete', 'visible', 'hidden', 'pdeleted')
) );
foreach( $posts as $pid => $post )
{
/* Write it */
$this->engine->set( $post );
/* Collect some data */
if ( ! in_array( $post['tid'], $topics ) )
{
$post['_pids'] = 1;
$post['_lowPid'] = $post['archive_id'];
$post['_maxPid'] = $post['archive_id'];
$post['_topicCount'] = ( intval( $post['posts'] ) + intval( $post['topic_deleted_posts'] ) + intval( $post['topic_queuedposts'] ) + 1 );
$topics[ $post['tid'] ] = $post;
}
else
{
$topics[ $post['tid'] ]['_maxPid'] = $post['archive_id'];
$topics[ $post['tid'] ]['_pids']++;
}
/* Collect fids */
$forums[ $post['forum_id'] ] = $post['forum_id'];
}
/* Get the maxes */
/* junk!!!
$this->DB->build( array( 'select' => 'topic_id, MAX(pid) as i',
'from' => 'posts',
'where' => 'topic_id IN (' . implode( ',', array_keys( $topics ) ) . ')',
'group' => 'topic_id' ) );
$o = $this->DB->execute();
while( $t = $this->DB->fetch( $o ) )
{
$maxes[ $t['topic_id'] ] = intval( $t['i'] );
}
*/
foreach( array_keys( $topics ) as $t )
{
$maxes[ $t ] = intval( $this->engine->getMaxPidInTid( $t ) );
}
/* Figure out how many topics have been completed */
foreach( $topics as $tid => $data )
{
/* First pid matches topic first pid, so we have the first post in the topic
* but have we got all the posts in this topic?
*/
if ( $maxes[ $tid ] == $data['_maxPid'] )
{
$completedTopics[] = $data['tid'];
}
else if ( $maxes[ $tid ] > $data['_maxPid'] )
{
/* If this is true, the local post table has a higher PID than the archive table
and this should never happen, so lets investigate */
$_topic = $this->DB->buildAndFetch( array( 'select' => 'posts', 'from' => 'topics', 'where' => 'tid=' . intval( $tid ) ) );
$_post = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as count', 'from' => 'posts', 'where' => 'topic_id=' . intval( $tid ) ) );
/* Local database has all the data.. so lets call it done */
if ( ( $_topic['posts'] + 1 ) == $_post['count'] )
{
$completedTopics[] = $data['tid'];
}
else
{
/* Be cautious */
$workingTopics[] = $data['tid'];
}
}
else
{
$workingTopics[] = $data['tid'];
}
}
/* Update completed */
if ( count( $completedTopics ) )
{
$this->DB->update( 'topics', array( 'topic_archive_status' => $this->registry->class_forums->fetchTopicArchiveFlag( 'exclude' ) ), 'tid IN(' . implode( ',', $completedTopics ) . ')' );
/* Archive attachments */
$class_attach->bulkUnarchive( $completedTopics, 'attach_parent_id' );
/* Remove posts */
$this->engine->removePostsByTids( $completedTopics );
}
/* Flag as archived */
$this->engine->setAsRestoredByPids( array_keys ( $posts ) );
/* Do forums */
foreach( $forums as $id )
{
$this->registry->class_forums->forumRebuild( $id );
}
/* Log it */
$this->log( array_keys ( $posts ), true );
}
/**
* Process a batch. Genius.
* $options is an array of keys and values:
* process - INT - number of items to process in this batch
* @return int count of topics archived
*/
public function processBatch( $options=array() )
{
$restoreData = $this->getRestoreData();
$topics = array();
$forums = array();
$pids = array();
/* Fix up options */
$options['process'] = ( is_numeric( $options['process'] ) && $options['process'] > 0 ) ? $options['process'] : 250;
if ( ! $restoreData['restore_min_tid'] && ! $restoreData['restore_max_tid'] && ! count( $restoreData['restore_manual_tids'] ) )
{
return false;
}
/* Any manually flagged? */
if ( count( $restoreData['restore_manual_tids'] ) )
{
/* Select remaining Pids */
$pids = $this->engine->getPidsInTids( IPSLib::cleanIntArray( array_keys( $restoreData['restore_manual_tids'] ) ), $options['process'] );
/* Did we complete topics? */
foreach( $restoreData['restore_manual_tids'] as $tid => $maxPid )
{
if ( in_array( $maxPid, array_keys( $pids ) ) )
{
$this->deleteManualId( $tid );
}
}
/* All done? */
if ( ! count( $pids ) )
{
$restoreData['restore_manual_tids'] = array();
$this->setRestoreData( $restoreData );
}
/* Update process for below */
$options['process'] -= count( $pids );
}
/* Now fetch the max/min if archiver is on */
if ( $this->settings['archive_on'] && $options['process'] > 0 && $restoreData['restore_min_tid'] && $restoreData['restore_max_tid'] )
{
$date = IPS_UNIX_TIME_NOW - ( 86400 * intval( $this->settings['archive_restore_days'] ) );
$pids = $this->engine->getPidsBetweenTidsAndDate( $restoreData['restore_min_tid'], $restoreData['restore_max_tid'], $date, $options['process'] );
/* All done? */
if ( ! count( $pids ) )
{
$restoreData['restore_min_tid'] = 0;
$restoreData['restore_max_tid'] = 0;
$this->setRestoreData( $restoreData );
}
}
/* Process */
$this->restore( $pids );
return count( $pids );
}
/**
* Flag an item for manual unarchive
* @param int $id
*/
public function setManualUnarchive( $id )
{
/* Init */
$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . "/sources/classes/topics.php", 'app_forums_classes_topics', 'forums' );
$topicClass = new $classToLoad( $this->registry );
$topic = $topicClass->getTopicById( $id );
if ( $topic['tid'] && $this->registry->class_forums->fetchArchiveTopicType( $topic ) == 'archived' )
{
$topicClass->updateTopic( $topic['tid'], array( 'topic_archive_status' => $this->registry->class_forums->fetchTopicArchiveFlag('restore') ) );
$this->insertManualId( $id );
}
}
/**
* Add an ID to the manual restore filter
*/
public function insertManualId( $id )
{
$data = $this->getRestoreData();
$max = $this->engine->getMaxPidInTid( $id );
$data['restore_manual_tids'][ $id ] = $max;
$this->setRestoreData( $data );
}
/**
* Delete an ID from the manual restore filter
*/
public function deleteManualId( $id )
{
$data = $this->getRestoreData();
if ( in_array( $id, array_keys( $data['restore_manual_tids'] ) ) )
{
unset( $data['restore_manual_tids'][ $id ] );
$this->setRestoreData( $data );
}
}
/**
* Get restore data
*/
public function getRestoreData()
{
$data = $this->DB->buildAndFetch( array( 'select' => '*',
'from' => 'core_archive_restore' ) );
if ( IPSLib::isSerialized( $data['restore_manual_tids'] ) )
{
$data['restore_manual_tids'] = unserialize( $data['restore_manual_tids'] );
}
else
{
$data['restore_manual_tids'] = array();
}
return $data;
}
/**
* Set restore data
* @param array
*/
public function setRestoreData( $data )
{
if ( is_array( $data['restore_manual_tids'] ) )
{
$data['restore_manual_tids'] = serialize( $data['restore_manual_tids'] );
}
$data['restore_min_tid'] = intval( $data['restore_min_tid'] );
$data['restore_max_tid'] = intval( $data['restore_max_tid'] );
$this->DB->delete( 'core_archive_restore');
$this->DB->insert( 'core_archive_restore', $data );
}
/**
* Take an archive row and returned native friendly array
* @param array $post
* @return array
*/
public function archiveToNativeFields( $post )
{
$native = array( 'pid' => intval( $post['archive_id'] ),
'author_id' => intval( $post['archive_author_id'] ),
'author_name' => $post['archive_author_name'],
'ip_address' => $post['archive_ip_address'],
'post_date' => intval( $post['archive_content_date'] ),
'post' => $post['archive_content'],
'queued' => $post['archive_queued'],
'topic_id' => intval( $post['archive_topic_id'] ),
'new_topic' => intval( $post['archive_is_first'] ),
'post_bwoptions' => $post['archive_bwoptions'],
'post_key' => $post['archive_attach_key'],
'post_htmlstate' => $post['archive_html_mode'],
'use_sig' => $post['archive_show_signature'],
'use_emo' => $post['archive_show_emoticons'],
'append_edit' => $post['archive_show_edited_by'],
'edit_time' => $post['archive_edit_time'],
'edit_name' => $post['archive_edit_name'],
'post_edit_reason' => $post['archive_edit_reason'] );
return $native;
}
/**
* Logs archive action
* @param array $ids
*/
public function log( $ids )
{
$this->DB->insert( 'core_archive_log', array( 'archlog_date' => IPS_UNIX_TIME_NOW,
'archlog_app' => $this->getApp(),
'archlog_ids' => serialize( $ids ),
'archlog_is_restore' => 1,
'archlog_count' => count( $ids ) ) );
}
}
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Archive: Reader
* By Matt Mecham
* </pre>
*
* @author $Author: ips_terabyte $
* @copyright (c) 2010 Invision Power Services, Inc.
* @license http://www.invisionpower.com/company/standards.php#license
* @package IP.Board
* @link http://www.invisionpower.com
* @since 18th November 2011
* @version $Revision: 8644 $
*/
/**
* Restores topics that are either manually flagged or via settings
* from the Admin CP.
*
* Manually flagged topics are always restored first.
* @author matt
*
*/
class classes_archive_restore
{
/**#@+
* Registry objects
*
* @access protected
* @var object
*/
protected $registry;
protected $DB;
protected $settings;
protected $request;
protected $lang;
protected $member;
protected $memberData;
protected $cache;
protected $caches;
/**#@-*/
/**
* Set current app
*/
private $_app = '';
/**
* Constructor
*
*/
public function __construct()
{
/* Make registry objects */
$this->registry = ipsRegistry::instance();
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->lang = $this->registry->getClass('class_localization');
$this->member = $this->registry->member();
$this->memberData =& $this->registry->member()->fetchMemberData();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
/* Check for class_forums */
if ( ipsRegistry::isClassLoaded('class_forums') !== TRUE )
{
$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . "/sources/classes/forums/class_forums.php", 'class_forums', 'forums' );
$this->registry->setClass( 'class_forums', new $classToLoad( $this->registry ) );
$this->registry->class_forums->forumsInit();
}
/* Language class */
$this->registry->getClass('class_localization')->loadLanguageFile( array( 'public_global' ), 'core' );
/* Fetch engine class */
$this->settings['archive_engine'] = ( $this->settings['archive_engine'] ) ? $this->settings['archive_engine'] : 'sql';
/* Load up archive class */
$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/archive/restore/' . $this->settings['archive_engine'] . '.php', 'classes_archive_restore_' . $this->settings['archive_engine'] );
$this->engine = new $classToLoad();
}
/**
* Set the current application
* @param string $app
*/
public function setApp( $app )
{
$this->_app = $app;
}
/**
* Get the application
* @return string
*/
public function getApp()
{
return $this->_app;
}
/**
* Restore posts to the topic
* @param array INTS
*/
public function restore( $pids=array() )
{
if ( ! count( $pids ) )
{
return null;
}
$topics = array();
$forumIds = array();
$completedTopics = array();
$workingTopics = array();
$maxes = array();
/* Load the attachments stuff */
$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'core' ) . '/sources/classes/attach/class_attach.php', 'class_attach' );
$class_attach = new $classToLoad( $this->registry );
$class_attach->type = 'post';
$class_attach->init();
/* Load the attachments stuff */
$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . '/sources/classes/topics.php', 'app_forums_classes_topics' );
$topicClass = new $classToLoad( $this->registry );
/* Fetch data based on PIDs */
$posts = $topicClass->getPosts( array( 'postId' => $pids,
'sortField' => 'pid',
'sortOrder' => 'asc',
'postType' => array('visible', 'sdelete', 'hidden', 'pdelete', 'oktoremove'),
'skipForumCheck' => true,
'isArchivedTopic' => true ) );
foreach( $posts as $pid => $post )
{
/* Write it */
$this->engine->set( $post );
/* Collect some data */
if ( ! in_array( $post['tid'], $topics ) )
{
$post['_pids'] = 1;
$post['_lowPid'] = $post['archive_id'];
$post['_maxPid'] = $post['archive_id'];
$post['_topicCount'] = ( intval( $post['posts'] ) + intval( $post['topic_deleted_posts'] ) + intval( $post['topic_queuedposts'] ) + 1 );
$topics[ $post['tid'] ] = $post;
}
else
{
$topics[ $post['tid'] ]['_maxPid'] = $post['archive_id'];
$topics[ $post['tid'] ]['_pids']++;
}
/* Collect fids */
$forums[ $post['forum_id'] ] = $post['forum_id'];
}
foreach( $topics AS $k => $v )
{
$topics[$k]['_realMaxPid'] = $this->engine->getMaxPidInTid( $k );
}
/* Get the maxes */
$this->DB->build( array( 'select' => 'topic_id, MAX(pid) as i',
'from' => 'posts',
'where' => 'topic_id IN (' . implode( ',', array_keys( $topics ) ) . ')',
'group' => 'topic_id' ) );
$o = $this->DB->execute();
while( $t = $this->DB->fetch( $o ) )
{
$maxes[ $t['topic_id'] ] = intval( $t['i'] );
}
/* Figure out how many topics have been completed */
foreach( $topics as $tid => $data )
{
/* First pid matches topic first pid, so we have the first post in the topic
* but have we got all the posts in this topic?
*/
if ( $maxes[ $tid ] == $data['_realMaxPid'] )
{
$completedTopics[] = $data['tid'];
}
else if ( $maxes[ $tid ] > $data['_realMaxPid'] )
{
/* If this is true, the local post table has a higher PID than the archive table
and this should never happen, so lets investigate */
$_topic = $this->DB->buildAndFetch( array( 'select' => 'posts', 'from' => 'topics', 'where' => 'tid=' . intval( $tid ) ) );
$_post = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as count', 'from' => 'posts', 'where' => 'topic_id=' . intval( $tid ) ) );
/* Local database has all the data.. so lets call it done */
if ( ( $_topic['posts'] + 1 ) == $_post['count'] )
{
$completedTopics[] = $data['tid'];
}
else
{
/* Be cautious */
$workingTopics[] = $data['tid'];
}
}
else
{
$workingTopics[] = $data['tid'];
}
}
/* Update completed */
if ( count( $completedTopics ) )
{
$this->DB->update( 'topics', array( 'topic_archive_status' => $this->registry->class_forums->fetchTopicArchiveFlag( 'exclude' ) ), 'tid IN(' . implode( ',', $completedTopics ) . ')' );
/* Archive attachments */
$class_attach->bulkUnarchive( $completedTopics, 'attach_parent_id' );
/* Remove posts */
$this->engine->removePostsByTids( $completedTopics );
}
/* Flag as archived */
$this->engine->setAsRestoredByPids( $pids );
/* Do forums */
foreach( $forums as $id )
{
$this->registry->class_forums->forumRebuild( $id );
}
/* Log it */
$this->log( $pids, true );
}
/**
* Process a batch. Genius.
* $options is an array of keys and values:
* process - INT - number of items to process in this batch
* @return int count of topics archived
*/
public function processBatch( $options=array() )
{
$restoreData = $this->getRestoreData();
$topics = array();
$forums = array();
$pids = array();
/* Fix up options */
$options['process'] = ( is_numeric( $options['process'] ) && $options['process'] > 0 ) ? $options['process'] : 250;
if ( ! $restoreData['restore_min_tid'] && ! $restoreData['restore_max_tid'] && ! count( $restoreData['restore_manual_tids'] ) )
{
return false;
}
/* Any manually flagged? */
if ( count( $restoreData['restore_manual_tids'] ) )
{
/* Select remaining Pids */
$pids = $this->engine->getPidsInTids( IPSLib::cleanIntArray( array_keys( $restoreData['restore_manual_tids'] ) ), $options['process'] );
/* Did we complete topics? */
foreach( $restoreData['restore_manual_tids'] as $tid => $maxPid )
{
if ( in_array( $maxPid, array_keys( $pids ) ) )
{
$this->deleteManualId( $tid );
}
}
/* All done? */
if ( ! count( $pids ) )
{
$restoreData['restore_manual_tids'] = array();
$this->setRestoreData( $restoreData );
}
/* Update process for below */
$options['process'] -= count( $pids );
}
/* Now fetch the max/min if archiver is on */
if ( $this->settings['archive_on'] && $options['process'] > 0 && $restoreData['restore_min_tid'] && $restoreData['restore_max_tid'] )
{
$date = IPS_UNIX_TIME_NOW - ( 86400 * intval( $this->settings['archive_restore_days'] ) );
$pids = $this->engine->getPidsBetweenTidsAndDate( $restoreData['restore_min_tid'], $restoreData['restore_max_tid'], $date, $options['process'] );
/* All done? */
if ( ! count( $pids ) )
{
$restoreData['restore_min_tid'] = 0;
$restoreData['restore_max_tid'] = 0;
$this->setRestoreData( $restoreData );
}
}
/* Process */
$this->restore( $pids );
return count( $pids );
}
/**
* Flag an item for manual unarchive
* @param int $id
*/
public function setManualUnarchive( $id )
{
/* Init */
$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . "/sources/classes/topics.php", 'app_forums_classes_topics', 'forums' );
$topicClass = new $classToLoad( $this->registry );
$topic = $topicClass->getTopicById( $id );
if ( $topic['tid'] && $this->registry->class_forums->fetchArchiveTopicType( $topic ) == 'archived' )
{
$topicClass->updateTopic( $topic['tid'], array( 'topic_archive_status' => $this->registry->class_forums->fetchTopicArchiveFlag('restore') ) );
$this->insertManualId( $id );
}
}
/**
* Add an ID to the manual restore filter
*/
public function insertManualId( $id )
{
$data = $this->getRestoreData();
$max = $this->engine->getMaxPidInTid( $id );
$data['restore_manual_tids'][ $id ] = $max;
$this->setRestoreData( $data );
}
/**
* Delete an ID from the manual restore filter
*/
public function deleteManualId( $id )
{
$data = $this->getRestoreData();
if ( in_array( $id, array_keys( $data['restore_manual_tids'] ) ) )
{
unset( $data['restore_manual_tids'][ $id ] );
$this->setRestoreData( $data );
}
}
/**
* Get restore data
*/
public function getRestoreData()
{
$data = $this->DB->buildAndFetch( array( 'select' => '*',
'from' => 'core_archive_restore' ) );
if ( IPSLib::isSerialized( $data['restore_manual_tids'] ) )
{
$data['restore_manual_tids'] = unserialize( $data['restore_manual_tids'] );
}
else
{
$data['restore_manual_tids'] = array();
}
return $data;
}
/**
* Set restore data
* @param array
*/
public function setRestoreData( $data )
{
if ( is_array( $data['restore_manual_tids'] ) )
{
$data['restore_manual_tids'] = serialize( $data['restore_manual_tids'] );
}
$data['restore_min_tid'] = intval( $data['restore_min_tid'] );
$data['restore_max_tid'] = intval( $data['restore_max_tid'] );
$this->DB->delete( 'core_archive_restore');
$this->DB->insert( 'core_archive_restore', $data );
}
/**
* Take an archive row and returned native friendly array
* @param array $post
* @return array
*/
public function archiveToNativeFields( $post )
{
$native = array( 'pid' => intval( $post['archive_id'] ),
'author_id' => intval( $post['archive_author_id'] ),
'author_name' => $post['archive_author_name'],
'ip_address' => $post['archive_ip_address'],
'post_date' => intval( $post['archive_content_date'] ),
'post' => $post['archive_content'],
'queued' => $post['archive_queued'],
'topic_id' => intval( $post['archive_topic_id'] ),
'new_topic' => intval( $post['archive_is_first'] ),
'post_bwoptions' => $post['archive_bwoptions'],
'post_key' => $post['archive_attach_key'],
'post_htmlstate' => $post['archive_html_mode'],
'use_sig' => $post['archive_show_signature'],
'use_emo' => $post['archive_show_emoticons'],
'append_edit' => $post['archive_show_edited_by'],
'edit_time' => $post['archive_edit_time'],
'edit_name' => $post['archive_edit_name'],
'post_edit_reason' => $post['archive_edit_reason'] );
return $native;
}
/**
* Logs archive action
* @param array $ids
*/
public function log( $ids )
{
$this->DB->insert( 'core_archive_log', array( 'archlog_date' => IPS_UNIX_TIME_NOW,
'archlog_app' => $this->getApp(),
'archlog_ids' => serialize( $ids ),
'archlog_is_restore' => 1,
'archlog_count' => count( $ids ) ) );
}
}
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -1,175 +1,175 @@
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* Archive: Restore
* By Matt Mecham
* </pre>
*
* @author $Author: ips_terabyte $
* @copyright (c) 2010 Invision Power Services, Inc.
* @license http://www.invisionpower.com/company/standards.php#license
* @package IP.Board
* @link http://www.invisionpower.com
* @since 17th February 2010
* @version $Revision: 8644 $
*/
class classes_archive_restore_sql extends classes_archive_restore
{
public function __construct()
{
/* Make registry objects */
$this->registry = ipsRegistry::instance();
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->lang = $this->registry->getClass('class_localization');
$this->member = $this->registry->member();
$this->memberData =& $this->registry->member()->fetchMemberData();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
/* Do we have a remote DB? */
if ( $this->settings['archive_remote_sql_database'] && $this->settings['archive_remote_sql_user'] )
{
if ( ! is_object( $this->registry->dbFunctions()->getDB('remoteArchive') ) )
{
$this->registry->dbFunctions()->setDB( 'mysql', 'remoteArchive', array( 'sql_database' => $this->settings['archive_remote_sql_database'],
'sql_user' => $this->settings['archive_remote_sql_user'],
'sql_pass' => $this->settings['archive_remote_sql_pass'],
'sql_host' => $this->settings['archive_remote_sql_host'],
'sql_charset' => $this->settings['archive_remote_sql_charset'],
'sql_tbl_prefix' => $this->settings['sql_tbl_prefix'],
'catchConnectionError' => true ) );
$this->remoteDB = $this->registry->dbFunctions()->getDB('remoteArchive');
/* Check for connection issue */
if ( $this->remoteDB->error )
{
$this->connectError = $this->remoteDB->error;
$this->remoteDB = null;
$this->registry->dbFunctions()->unsetDB('remoteArchive');
}
}
else
{
$this->remoteDB = $this->registry->dbFunctions()->getDB('remoteArchive');
/* Check for connection issue */
if ( $this->remoteDB->error )
{
$this->connectError = $this->remoteDB->error;
$this->remoteDB = null;
$this->registry->dbFunctions()->unsetDB('remoteArchive');
}
}
}
else
{
$this->remoteDB = $this->DB;
}
}
/**
* Get max PID in a TID
*/
public function getMaxPidInTid( $tid )
{
$max = $this->remoteDB->buildAndFetch( array( 'select' => 'MAX(archive_id) as i', 'from' => 'forums_archive_posts', 'where' => 'archive_topic_id=' . intval( $tid ) ) );
return $max['i'];
}
/**
* Fetch by TIDS
*/
public function getPidsInTids( array $tids, $limit=50 )
{
$pids = array();
/* Select remaining Pids */
$this->remoteDB->build( array( 'select' => 'archive_id',
'from' => 'forums_archive_posts',
'where' => 'archive_topic_id IN(' . implode( ',', $tids ) . ') AND archive_restored=0',
'order' => 'archive_topic_id ASC, archive_id ASC',
'limit' => array( 0, $limit ) ) );
$o = $this->remoteDB->execute();
while( $post = $this->remoteDB->fetch( $o ) )
{
$pids[ $post['archive_id'] ] = $post['archive_id'];
}
return $pids;
}
/**
* Fetch between TIDS and date
*
*/
public function getPidsBetweenTidsAndDate( $min, $max, $date=0, $limit=50 )
{
$this->remoteDB->build( array( 'select' => 'archive_id',
'from' => 'forums_archive_posts',
'where' => 'archive_content_date > ' . $date . ' AND archive_topic_id BETWEEN ' . intval( $min ) . ' AND ' . intval( $max ) . ' AND archive_restored = 0',
'order' => 'archive_topic_id ASC, archive_id ASC',
'limit' => array( 0, $limit ) ) );
$o = $this->remoteDB->execute();
while( $post = $this->remoteDB->fetch( $o ) )
{
$pids[ $post['archive_id'] ] = $post['archive_id'];
}
return $pids;
}
/**
* Remove posts by TIDs
* @param array TIDS
*/
public function removePostsByTids( array $tids )
{
if ( count( $tids ) )
{
$this->remoteDB->delete( 'forums_archive_posts', 'archive_topic_id IN(' . implode( ',', $tids ) . ')' );
}
}
/**
* Remove posts by PIDs
* @param array PIDs
*/
public function setAsRestoredByPids( array $pids )
{
if ( count( $pids ) )
{
$this->DB->update( 'forums_archive_posts', array( 'archive_restored' => 1 ), 'archive_id IN (' . implode( ',', $pids ) .')' );
}
}
/**
* Write single entry to DB
* @param array INTS
*/
public function set( $data=array() )
{
if ( ! count( $data ) )
{
return null;
}
$this->DB->replace( 'posts', $this->archiveToNativeFields( $data ), array( 'pid' ) );
}
}
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Archive: Restore
* By Matt Mecham
* </pre>
*
* @author $Author: ips_terabyte $
* @copyright (c) 2010 Invision Power Services, Inc.
* @license http://www.invisionpower.com/company/standards.php#license
* @package IP.Board
* @link http://www.invisionpower.com
* @since 17th February 2010
* @version $Revision: 8644 $
*/
class classes_archive_restore_sql extends classes_archive_restore
{
public function __construct()
{
/* Make registry objects */
$this->registry = ipsRegistry::instance();
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->lang = $this->registry->getClass('class_localization');
$this->member = $this->registry->member();
$this->memberData =& $this->registry->member()->fetchMemberData();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
/* Do we have a remote DB? */
if ( $this->settings['archive_remote_sql_database'] && $this->settings['archive_remote_sql_user'] )
{
if ( ! is_object( $this->registry->dbFunctions()->getDB('remoteArchive') ) )
{
$this->registry->dbFunctions()->setDB( 'mysql', 'remoteArchive', array( 'sql_database' => $this->settings['archive_remote_sql_database'],
'sql_user' => $this->settings['archive_remote_sql_user'],
'sql_pass' => $this->settings['archive_remote_sql_pass'],
'sql_host' => $this->settings['archive_remote_sql_host'],
'sql_charset' => $this->settings['archive_remote_sql_charset'],
'sql_tbl_prefix' => $this->settings['sql_tbl_prefix'],
'catchConnectionError' => true ) );
$this->remoteDB = $this->registry->dbFunctions()->getDB('remoteArchive');
/* Check for connection issue */
if ( $this->remoteDB->error )
{
$this->connectError = $this->remoteDB->error;
$this->remoteDB = null;
$this->registry->dbFunctions()->unsetDB('remoteArchive');
}
}
else
{
$this->remoteDB = $this->registry->dbFunctions()->getDB('remoteArchive');
/* Check for connection issue */
if ( $this->remoteDB->error )
{
$this->connectError = $this->remoteDB->error;
$this->remoteDB = null;
$this->registry->dbFunctions()->unsetDB('remoteArchive');
}
}
}
else
{
$this->remoteDB = $this->DB;
}
}
/**
* Get max PID in a TID
*/
public function getMaxPidInTid( $tid )
{
$max = $this->remoteDB->buildAndFetch( array( 'select' => 'MAX(archive_id) as i', 'from' => 'forums_archive_posts', 'where' => 'archive_topic_id=' . intval( $tid ) ) );
return $max['i'];
}
/**
* Fetch by TIDS
*/
public function getPidsInTids( array $tids, $limit=50 )
{
$pids = array();
/* Select remaining Pids */
$this->remoteDB->build( array( 'select' => 'archive_id',
'from' => 'forums_archive_posts',
'where' => 'archive_topic_id IN(' . implode( ',', $tids ) . ') AND archive_restored=0',
'order' => 'archive_topic_id ASC, archive_id ASC',
'limit' => array( 0, $limit ) ) );
$o = $this->remoteDB->execute();
while( $post = $this->remoteDB->fetch( $o ) )
{
$pids[ $post['archive_id'] ] = $post['archive_id'];
}
return $pids;
}
/**
* Fetch between TIDS and date
*
*/
public function getPidsBetweenTidsAndDate( $min, $max, $date=0, $limit=50 )
{
$this->remoteDB->build( array( 'select' => 'archive_id',
'from' => 'forums_archive_posts',
'where' => 'archive_restored = 0 AND archive_content_date > ' . $date . ' AND archive_topic_id BETWEEN ' . intval( $min ) . ' AND ' . intval( $max ),
'order' => 'archive_topic_id ASC, archive_id ASC',
'limit' => array( 0, $limit ) ) );
$o = $this->remoteDB->execute();
while( $post = $this->remoteDB->fetch( $o ) )
{
$pids[ $post['archive_id'] ] = $post['archive_id'];
}
return $pids;
}
/**
* Remove posts by TIDs
* @param array TIDS
*/
public function removePostsByTids( array $tids )
{
if ( count( $tids ) )
{
$this->remoteDB->delete( 'forums_archive_posts', 'archive_topic_id IN(' . implode( ',', $tids ) . ')' );
}
}
/**
* Remove posts by PIDs
* @param array PIDs
*/
public function setAsRestoredByPids( array $pids )
{
if ( count( $pids ) )
{
$this->remoteDB->update( 'forums_archive_posts', array( 'archive_restored' => 1 ), 'archive_id IN (' . implode( ',', $pids ) .')' );
}
}
/**
* Write single entry to DB
* @param array INTS
*/
public function set( $data=array() )
{
if ( ! count( $data ) )
{
return null;
}
$this->DB->replace( 'posts', $this->archiveToNativeFields( $data ), array( 'pid' ) );
}
}
File diff suppressed because it is too large. Load diff
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Archive: Writer
* By Matt Mecham
* </pre>
+3 -3
View File
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Back Up Model
* Last Updated: $Date: 2012-05-10 21:10:13 +0100 (Thu, 10 May 2012) $
* </pre>
@@ -410,7 +410,7 @@ class ipsBackup
if ( ! file_put_contents( $this->_getBackUpKeyCacheFilename(), $contents ) )
{
trigger_error( 'Не удалось записать файл кэша системы резервного копиования' );
trigger_error( 'Could not save cache file for back up system' );
}
/* Reset table pkeys */
@@ -726,7 +726,7 @@ class ipsBackup
*/
private function _getBackupServerUrl()
{
return 'http://gateway.backuptest.lw.ipslink.com/index.php';
//return 'http://gateway.backuptest.lw.ipslink.com/index.php';
}
/**
+1 -1
View File
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Back Up Model
* Last Updated: $Date: 2012-05-10 21:10:13 +0100 (Thu, 10 May 2012) $
* </pre>
File diff suppressed because it is too large. Load diff
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* IP.Content custom bbcode
* Last Updated: $Date: 2012-06-01 13:11:08 -0400 (Fri, 01 Jun 2012) $
* </pre>
File diff suppressed because it is too large. Load diff
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
+1 -1
View File
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Simple caching class
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Control Panel Functions
* Last Updated: $Date: 2012-11-21 14:26:15 -0500 (Wed, 21 Nov 2012) $
* </pre>
File diff suppressed because it is too large. Load diff
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* ACP Restrictions
* Last Updated: $Date: 2013-01-22 16:10:36 -0500 (Tue, 22 Jan 2013) $
* </pre>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Manages public permissions
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Facilitates reputation plugins
* Last Updated: $Date: 2013-03-05 09:42:55 -0500 (Tue, 05 Mar 2013) $
* </pre>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Task Manager Library
* Last Updated: $Date: 2012-09-18 10:15:15 -0400 (Tue, 18 Sep 2012) $
* </pre>
@@ -7,7 +7,7 @@
* @license http://www.invisionpower.com/company/standards.php#license
* @package Core
* @link http://www.invisionpower.com
* @version $Rev: 12266 $
* @version $Rev: 12380 $
*
*/
@@ -23,7 +23,7 @@ class classes_comments_bootstrap
/**
* Construct
*
*
* @param string Comment class key (app-section)
* @param mixed Optional extra data to pass to init() method
*/
@@ -80,7 +80,7 @@ abstract class classes_comments_renderer
protected $memberData;
protected $cache;
protected $caches;
/**#@-*/
/**#@-*/
protected $_cache = array();
/**
@@ -362,6 +362,7 @@ abstract class classes_comments_renderer
$data['thisApp'] = $app;
$data['repType'] = $_remap['comment_id'];
$data['enableRep'] = $this->reputationEnabled();
$data['baseUrl'] = "app=core&amp;module=global&amp;section=comments&amp;parentId={$parent['parent_id']}&amp;fromApp={$data['fromApp']}";
/* Give plugin a chance to adjust */
$adjusted = $this->preOutputAdjustment( 'commentSingle', array( 'comment' => $comment, 'data' => $data, 'parent' => $parent ) );
@@ -527,7 +528,7 @@ abstract class classes_comments_renderer
/* Ignored users */
foreach( $this->member->ignored_users as $_i )
{
if( $_i['ignore_topics'] AND $_i['ignore_ignore_id'] == $row['author_id'] )
if( $_i['ignore_topics'] AND $_i['ignore_ignore_id'] == $row['comment_author_id'] )
{
if ( ! strstr( $this->settings['cannot_ignore_groups'], ','.$row['member_group_id'].',' ) )
{
@@ -543,6 +544,15 @@ abstract class classes_comments_renderer
$row['pp_reputation_points'] = $row['pp_reputation_points'] ? $row['pp_reputation_points'] : 0;
$row['has_given_rep'] = $row['has_given_rep'] ? $row['has_given_rep'] : 0;
$row['rep_points'] = $this->registry->repCache->getRepPoints( array( 'app' => $app, 'type' => $_remap['comment_id'], 'type_id' => $row['comment_id'], 'rep_points' => $row['rep_points'] ) );
if ( ! ( $this->settings['reputation_protected_groups'] && in_array( $this->memberData['member_group_id'], explode( ',', $this->settings['reputation_protected_groups'] ) ) ) && $this->memberData['_members_cache']['rep_filter'] !== '*' )
{
if ( $this->settings['reputation_show_content'] && $row['rep_points'] < $this->memberData['_members_cache']['rep_filter'] && $this->settings['reputation_point_types'] != 'like' )
{
$row['_repignored'] = true;
}
}
}
/* View */
@@ -761,7 +771,7 @@ abstract class classes_comments_renderer
}
return true;
}
}
/**
* Unhide a comment
@@ -913,7 +923,7 @@ abstract class classes_comments_renderer
* @return nowt lad
*/
public function sendNotifications( array $array, $comment )
{
{
list( $_app, $_area ) = explode( '-', $this->whoAmI() );
/* Send them if they are approved */
@@ -1109,7 +1119,7 @@ abstract class classes_comments_renderer
/* Delete */
$this->DB->delete( $this->table(), $_remap['comment_id'] . ' IN (' . implode( ",", $cids ) . ')' );
/* We also need to delete rep - Bug #37686 */
/* We also need to delete rep - Bug #37686 */
list( $app, $_where ) = explode( '-', $this->whoAmI() );
foreach( $cids as $cid )
@@ -1203,7 +1213,7 @@ abstract class classes_comments_renderer
/* If we have anything.. */
if ( count( $cids ) )
{
{
/* Update array */
$array = array( 'comment_approved' => ( $toggle == 'on' ? 1 : 0 ) );
@@ -1453,7 +1463,7 @@ abstract class classes_comments_renderer
$pages = ceil( $number);
}
$st = ($pages - 1) * $this->perPage();
$st = ($pages - 1) * $this->perPage();
if( $showApprovalMessage )
{
@@ -1697,7 +1707,7 @@ abstract class classes_comments_renderer
public function can( $type, array $array )
{
/* Default, so return least permissive */
return 'NO_PERMISSION';
return 'NO_PERMISSION';
}
/**
* Unpack the repuation cache, yo.
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Editor Library: Core Class
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Editor Library: RTE (WYSIWYG) Class
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -962,7 +962,7 @@ class class_editor_module extends class_editor
while ( $tag_begin_loc !== FALSE )
{
$lowtext = mb_strtolower($text);
$lowtext = strtolower($text);
$tag_begin_loc = @strpos( $lowtext, $open_tag, $start_search_pos );
$lentext = strlen($text);
$quoted = '';
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Editor Library: Standard Class
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -3,18 +3,18 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Editor Library: RTE (WYSIWYG) Class
* Last Updated: $Date: 2013-05-21 20:51:17 -0400 (Tue, 21 May 2013) $
* Last Updated: $Date: 2013-10-15 10:08:51 -0400 (Tue, 15 Oct 2013) $
* </pre>
*
* @author $Author: bfarber $
* @author $Author: AndyMillne $
* @copyright (c) 2001 - 2009 Invision Power Services, Inc.
* @license http://www.invisionpower.com/company/standards.php#license
* @package IP.Board
* @link http://www.invisionpower.com
* @since 9th March 2005 11:03
* @version $Revision: 12263 $
* @version $Revision: 12378 $
*/
if ( ! defined( 'IN_IPB' ) )
@@ -25,30 +25,30 @@ if ( ! defined( 'IN_IPB' ) )
/**
* In an effort to simplify all the bbcode routines:
*
*
* This class will take CKEditor HTML, clean it up and pass it on.
* This means [b] will be converted to <strong>, URLs auto-linked and so on.
* App specific BBCode ([entry] [topic]) and complex BBCode (CODE, QUOTE, MEDIA) are not parsed.
*
*
* Likewise, when showing the editor, you should supply it with data in the same format: that is, parsed HTML
* with complex app specific BBCode unparsed. A good example of this would be:
* <strong>I am strong!</strong><br />[quote]I am a quote![/quote]
*
*
* -- Legacy Issues --
* If the setContent method detects legacy markup (that is, unparsed basic BBCode such as [b]) then it
* will first convert it to the standard that it expects for input (HTML parsed, complex or app specific bbcode not parsed)
*
*
* If setLegacyMode is true, this class will return BBCode mark-up as expected of 3.3.x and older.
* This is recommended for code in transition as it's largely buggy and rather annoying.
*
*
*
*
*
*
*
*
* Test input: < > ' " & ¦ $ \ ! &amp; &#39; &quot; &lt; &gt; &para;
* Should be processed as: &lt; &gt; &#39; &quot; &amp; ¦ $ &#92; ! &amp;amp; &amp;#39; &amp;quot; &amp;lt; &amp;gt; &amp;para;
*/
/**
*
*
* IP.Board PHP work to display an editor
* @author Matt
*
@@ -134,7 +134,7 @@ class classes_editor_composite
* Registry objects
*
* @var object
*/
*/
protected $registry;
protected $DB;
protected $settings;
@@ -468,9 +468,9 @@ class classes_editor_composite
if ( isset( $options['recover'] ) )
{
$content = $_POST['Post'];
$content = IPSText::xssMakeJavascriptSafe( $_POST['Post'] );
}
/* Try and sniff out entered HTML */
if ( IN_ACP AND empty( $options['isHtml'] ) )
{
@@ -613,7 +613,7 @@ class classes_editor_composite
{
$moredetails = "<a href='{$this->registry->getClass('output')->buildUrl( "app=members&amp;module=profile&amp;section=warnings" )}'>{$this->lang->words['warnings_moreinfo']}</a>";
}
else
else
{
$moredetails = "<a href='javascript:void(0);' onclick='warningPopup( this, {$warn['wl_id']} )'>{$this->lang->words['warnings_moreinfo']}</a>";
}
@@ -687,8 +687,11 @@ class classes_editor_composite
$content = $parser->htmlToEditor( $content );
}
$bbcodeVersion = '';
/* Make sure the textarea isn't terminated early */
$content = str_ireplace( '</textarea>', '&#60;/textarea>', $content );
$bbcodeVersion = '';
if ( $content )
{
$bbcodeVersion = $this->toPlainTextArea( $parser->postEditor( $content ) );
@@ -748,7 +751,7 @@ class classes_editor_composite
{
$parser = new class_text_parser_legacy();
$this->passSettings( $parser );
$content = $parser->postEditor( $content );
// @link http://community.invisionpower.com/resources/bugs.html/_/ip-board/encoded-text-is-replaced-when-quoting-on-mobile-devices-r40540
@@ -781,7 +784,7 @@ class classes_editor_composite
{
/* Some areas of IPB add quotes as HTML so turn it into BBCode so fromPlainTextArea can convert it back instead of htmlizing the < > chars */
if ( stristr( $content, '<blockquote' ) )
{
{
$content = $this->toPlainTextArea( $content );
}
@@ -836,10 +839,14 @@ class classes_editor_composite
$cleanContent = $this->protectMedia( $cleanContent );
/* Like nice neat code? Look away now */
if ( $this->getIsHtml() AND IN_ACP )
if ( $this->getIsHtml() AND IN_ACP AND str_replace( '<!-- isHtml:1 -->', '', $cleanContent ) !== '' )
{
$cleanContent = '<!-- isHtml:1 -->' . $cleanContent;
}
else
{
$cleanContent = str_replace( '<!-- isHtml:1 -->', '', $cleanContent );
}
/* Reset */
$this->setIsHtml( false );
@@ -965,7 +972,7 @@ class classes_editor_composite
/**
* Remove auto saved content
* @param array $where options member_id = x , app = x, time = x
* @param array $where options member_id = x , app = x, time = x
*/
public function removeAutoSavedContent( $where=array() )
{
@@ -1068,9 +1075,7 @@ class classes_editor_composite
*/
protected function protectMedia( $content )
{
$content = preg_replace( '#<a\s+?([^>]*?)href=["\']([^"\']+?)?["\']([^>]*?)?>(.+?)</a>#is', "<a data-ipb='nomediaparse' $1href='$2'$3>$4</a>" , $content );
//print htmlspecialchars($content);exit;
$content = preg_replace( '#<a\s+?([^>|data-ipb=\'nomediaparse\']*?)href=["\']([^"\']+?)?["\']([^>]*?)?>(.+?)</a>#is', "<a data-ipb='nomediaparse' $1href='$2'$3>$4</a>" , $content );
return $content;
}
@@ -1612,7 +1617,7 @@ class classes_editor_composite
. 'b,strong,i,em,u,strike,del,sup,sub,'
/* LISTS */
. 'ol[type|start|class],ul[type|class],li,'
/* IMG, A */
/* IMG, A */
. 'img[src|width|height|title],a[href|target|title|class|rel]';
if ( count( $disabledTags ) )
@@ -1715,7 +1720,7 @@ class classes_editor_composite
* @return object
*/
private function _newParserObject()
{
{
/* Load parser */
$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/text/parser.php', 'classes_text_parser' );
$parser = new $classToLoad();
@@ -1861,7 +1866,7 @@ class classes_editor_composite
if ( stristr( $content, '<' . $tag ) || stristr( $content, '&lt;' . $tag ) )
{
return true;
}
}
}
}
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
File diff suppressed because it is too large. Load diff
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Parse Incoming Emails
* Last Updated: $Date: 2013-05-08 17:43:20 -0400 (Wed, 08 May 2013) $
* </pre>
+1 -1
View File
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Item Marking
* Owner: Matt "Oh Lord, why did I get assigned this?" Mecham
* Last Updated: $Date: 2012-11-06 15:14:35 -0500 (Tue, 06 Nov 2012) $
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
+48 -21
View File
@@ -4,11 +4,11 @@
*~TERABYTE_DOC_READY~
* $Copyright: (c) 2001 - 2011 Invision Power Services, Inc.$
* $License: http://www.invisionpower.com/company/standards.php#license$
* $Author: bfarber $
* $Author: mmecham $
* @since 11th October 2010
* $LastChangedDate: 2013-05-17 19:05:15 -0400 (Fri, 17 May 2013) $
* @version v3.4.5
* $Revision: 12259 $
* $LastChangedDate: 2013-08-14 06:45:49 -0400 (Wed, 14 Aug 2013) $
* @version v3.4.6
* $Revision: 12334 $
*
* <b>Example Usage:</b>
* @code
@@ -658,6 +658,9 @@ abstract class classes_like_composite
$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . '/sources/classes/member/notifications.php', 'notifications' );
$notifyLibrary = new $classToLoad( $this->registry );
$htmlMessage = array();
$textMessage = array();
foreach( $data as $row )
{
if ( ! $row['like_notify_freq'] OR ! in_array( $row['like_notify_freq'], $type ) )
@@ -689,44 +692,71 @@ abstract class classes_like_composite
{
continue;
}
/* Expensively process HTML/Text versions once per language.. <#NAME#> is converted to -members:members_display_name- for processing later */
if ( ! isset( $htmlMessage[ $row['language'] ] ) )
{
$buildMessage = array();
if ( is_array( $notificationOpts['build_message_array'] ) and count( $notificationOpts['build_message_array'] ) )
{
foreach( $notificationOpts['build_message_array'] as $k => $v )
{
$buildMessage[ $k ] = $v;
}
}
$buildMessage = array();
$buildMessage['UNSUBCRIBE_URL'] = '-member:unsubscribe_url-';
$notificationOpts['build_message_array']['UNSUBCRIBE_URL'] = '-member:unsubscribe_url-';
IPSText::getTextClass('email')->setPlainTextTemplate( IPSText::getTextClass('email')->getTemplate( $notificationOpts['email_template'], $row['language'], trim($notificationOpts['email_lang_file']), trim($notificationOpts['email_lang_app']) ) );
$textMessage[ $row['language'] ] = IPSText::getTextClass('email')->buildPlainTextContent( $buildMessage );
$htmlMessage[ $row['language'] ] = IPSText::getTextClass('email')->buildHtmlContent( $buildMessage );
}
$thisTextMessage = $textMessage[ $row['language'] ];
$thisHtmlMessage = $htmlMessage[ $row['language'] ];
/* Add in unsubscribe link */
$unsubKey = $row['like_app'] . ';' . $row['like_area'] . ';' . $row['like_rel_id'] . ';' . $row['like_member_id'] . ';' . $row['member_id'] . ';' . $row['email'];
$unsubUrl = $this->registry->output->buildSEOUrl( 'app=core&amp;module=global&amp;section=like&amp;do=unsubscribe&amp;key=' . IPSText::base64_encode_urlSafe( $unsubKey ), 'publicNoSession', 'unsubscribe', 'likeunsubscribe' );
/* Now process the dynamic replacements */
if ( is_array( $notificationOpts['build_message_array'] ) and count( $notificationOpts['build_message_array'] ) )
{
foreach( $notificationOpts['build_message_array'] as $k => $v )
{
if ( preg_match( '/\-member:(.+?)\-/', $v, $_matches ) )
{
$v = str_replace( $_matches[0], $row[$_matches[1]], $v );
if ( $_matches[1] == 'unsubscribe_url' )
{
$thisHtmlMessage = str_replace( $_matches[0], $unsubUrl, $thisHtmlMessage );
$thisTextMessage = str_replace( $_matches[0], $unsubUrl, $thisTextMessage );
}
else
{
$thisHtmlMessage = str_replace( $_matches[0], $row[ $_matches[1] ], $thisHtmlMessage );
$thisTextMessage = str_replace( $_matches[0], $row[ $_matches[1] ], $thisTextMessage );
}
}
$buildMessage[ $k ] = $v;
}
}
$sentToIds[] = $row['like_member_id'];
/* Add in unsubscribe link */
$key = $row['like_app'] . ';' . $row['like_area'] . ';' . $row['like_rel_id'] . ';' . $row['like_member_id'] . ';' . $row['member_id'] . ';' . $row['email'];
$buildMessage['UNSUBCRIBE_URL'] = $this->registry->output->buildSEOUrl( 'app=core&amp;module=global&amp;section=like&amp;do=unsubscribe&amp;key=' . IPSText::base64_encode_urlSafe( $key ), 'publicNoSession', 'unsubscribe', 'likeunsubscribe' );
IPSText::getTextClass('email')->setPlainTextTemplate( IPSText::getTextClass('email')->getTemplate( $notificationOpts['email_template'], $row['language'], trim($notificationOpts['email_lang_file']), trim($notificationOpts['email_lang_app']) ) );
IPSText::getTextClass('email')->buildPlainTextContent( $buildMessage );
$notifyLibrary->setMember( $row );
$notifyLibrary->setFrom( $notificationOpts['from'] ? $notificationOpts['from'] : $this->memberData );
$notifyLibrary->setNotificationKey( $notificationOpts['notification_key'] );
$notifyLibrary->setNotificationUrl( $notificationOpts['notification_url'] );
$notifyLibrary->setNotificationText( IPSText::getTextClass('email')->getPlainTextContent() );
$notifyLibrary->setNotificationTitle( $notificationOpts['email_subject'] ? $notificationOpts['email_subject'] : IPSText::getTextClass('email')->subject );
$notifyLibrary->setNotificationHtml( IPSText::getTextClass('email')->buildHtmlContent( $buildMessage ) );
$notifyLibrary->setNotificationText( $thisTextMessage );
$notifyLibrary->setNotificationHtml( $thisHtmlMessage );
if ( ! empty( $notificationOpts['email_only_subject'] ) && $notificationOpts['email_only_subject'] != IPSText::getTextClass('email')->subject )
{
$notifyLibrary->setEmailSubject( $notificationOpts['email_only_subject'], $row['language'], trim($notificationOpts['email_lang_file']), trim($notificationOpts['email_lang_app']) );
}
try
{
$notifyLibrary->sendNotification();
@@ -1455,10 +1485,7 @@ abstract class classes_like_composite
/* Need to apply secondary groups and grab g_perm_id if $parseMembers is false (default)
@link http://community.invisionpower.com/tracker/issue-34691-digest-notifications-not-going-out/ */
$row['mgroup_others'] = ($row['mgroup_others'] != '') ? IPSText::cleanPermString($row['mgroup_others']) : '';
//by denchu
if (is_array($this->caches['group_cache'][ $row['member_group_id'] ])){
$row = array_merge( $row, $this->caches['group_cache'][ $row['member_group_id'] ] );
}
$row = $this->registry->member()->setUpSecondaryGroups( $row );
if( $row['topic_last_post'] )
+1 -1
View File
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Generic Mapping Class
* Owner: Matt Mecham
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Bing mapping class
* Owner: Matt Mecham
* Last Updated: $Date: 2013-04-30 21:56:42 -0400 (Tue, 30 Apr 2013) $
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Bing mapping class
* Owner: Matt Mecham
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
File diff suppressed because it is too large. Load diff
@@ -3,9 +3,9 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Notification library
* Last Updated: $Date: 2012-10-30 18:24:46 -0400 (Tue, 30 Oct 2012) $
* Last Updated: $Date: 2013-10-16 12:57:41 -0400 (Wed, 16 Oct 2013) $
* </pre>
*
* @author $Author: AndyMillne $ (Original: bfarber)
@@ -14,7 +14,7 @@
* @package IP.Board
* @link http://www.invisionpower.com
* @since Thursday Jan 7, 2010
* @version $Revision: 11530 $
* @version $Revision: 12380 $
*
*/
@@ -395,7 +395,7 @@ class notifications
* @return array
*/
public function getNotificationData( $checkCallbacks=FALSE )
{
{
//-----------------------------------------
// Already stored the data?
//-----------------------------------------
@@ -554,7 +554,7 @@ class notifications
foreach( $missingTypes as $_type )
{
$_cache['notifications'][ $_type ] = $_default[ $_type ]['selected'];
$_cache['notifications'][ $_type ] = array( 'selected' => $_default[ $_type ]['selected'] );
}
//-----------------------------------------
@@ -845,7 +845,7 @@ class notifications
{
$this->DB->update( 'members', 'notification_cnt=notification_cnt+1', 'member_id=' . $member['member_id'], true, true );
}
}
}
return true;
}
@@ -1006,7 +1006,7 @@ class notifications
if ( count( $members ) )
{
foreach( $return as $key => $data )
{
{
if ( in_array( $data['notify_from_id'], array_keys( $members ) ) )
{
$return[ $key ]['member'] = IPSMember::buildProfilePhoto( $members[ $data['notify_from_id'] ] );
@@ -1321,7 +1321,7 @@ class notifications
}
return intval( $_limit );
}
}
/**
* Do we have an application class?
File diff suppressed because it is too large. Load diff
+40 -40
View File
@@ -3,7 +3,7 @@
* <pre>
* Status Updates Class
* Holds various functions
* Last Updated: $Date: 2013-02-13 11:25:39 -0500 (Wed, 13 Feb 2013) $
* Last Updated: $Date: 2013-10-16 12:57:41 -0400 (Wed, 16 Oct 2013) $
* </pre>
*
* @author $author$
@@ -12,7 +12,7 @@
* @package IP.Board
* @author MattMecham
* @link http://www.invisionpower.com
* @version $Rev: 11985 $
* @version $Rev: 12380 $
*
* Example: Create new status update
* <code>
@@ -59,7 +59,7 @@ class memberStatus
{
/**
* Registry Object Shortcuts
*
*
* @var object
*/
protected $registry;
@@ -90,7 +90,7 @@ class memberStatus
* Bypass all permission checks
*
* Use with care, this will allow the class to be used within an API
*
*
* @var boolean
*/
protected $_bypassPermChecks = false;
@@ -194,7 +194,7 @@ class memberStatus
* Fetch status actions
* Default filters are last 10 status actions from everyone sorted in desc date order.
* 'not_theirs' pulls all actions that are not on their own statuses
* @param mixed [Array of member data OR member ID INT for member updating their status - will use ->getAuthor() if null]
* @param mixed [Array of member data OR member ID INT for member updating their status - will use ->getAuthor() if null]
* @param array Array of sort/filter data ( member_id [int], status_id [int], offset [int], limit [int], unix_cutoff [int], sort_dir [asc,desc], sort_field [string], 'not_theirs' [0,1] )
*/
public function fetchActions( $author=null, $filters=array() )
@@ -302,8 +302,8 @@ class memberStatus
* The 'isApproved' flag can contain true, false or null (true, approved only, false, unapproved only, null both)
* The 'ignorePermissions' flag can be set to true (do not verify we can view) or false (pull only statuses we can see based on other filters), defaulting to false
* getCount - returns a count of all matches without the limit
*
* @param mixed [Array of member data OR member ID INT for member updating their status - will use ->getAuthor() if null]
*
* @param mixed [Array of member data OR member ID INT for member updating their status - will use ->getAuthor() if null]
* @param array Array of sort/filter data ( member_id [int], latest_only [0,1], offset [int], limit [int], unix_cutoff [int], sort_dir [asc,desc], sort_field [string], type [string] )
*/
public function fetch( $author=null, $filters=array() )
@@ -330,7 +330,7 @@ class memberStatus
if ( isset( $filters['relatedTo'] ) && ! empty( $filters['relatedTo'] ) )
{
$where[] = "s.status_member_id=" . intval( $filters['relatedTo'] ) . ' OR s.status_author_id=' . intval( $filters['relatedTo'] );
$where[] = "s.status_member_id=" . intval( $filters['relatedTo'] ) . ' OR s.status_author_id=' . intval( $filters['relatedTo'] );
}
if ( isset( $filters['ownerOnly'] ) )
@@ -418,7 +418,7 @@ class memberStatus
'from' => array( 'members' => 'm' ),
'where' => 'm.member_id=s.status_author_id',
'type' => 'left' ),
array(
array(
'from' => array( 'profile_portal' => 'pp' ),
'where' => 'pp.pp_member_id=m.member_id',
'type' => 'left' ) ) ) );
@@ -508,7 +508,7 @@ class memberStatus
if ( is_array( $row['replies'] ) )
{
foreach( $row['replies'] as $rid => $r )
{
{
if ( $members[ $r['reply_member_id'] ] )
{
if ( ! isset( $members[ $r['reply_member_id'] ]['_done'] ) )
@@ -532,7 +532,7 @@ class memberStatus
* Fetch all replies to a status
* Default filters are sorted on reply_date ASC
*
* @param mixed [Array of member data OR member ID INT for member updating their status - will use ->getAuthor() if null]
* @param mixed [Array of member data OR member ID INT for member updating their status - will use ->getAuthor() if null]
* @param array Array of sort/filter data ( member_id [int], latest_only [0,1], offset [int], limit [int], unix_cutoff [int], sort_dir [asc,desc], sort_field [string] )
*/
public function fetchAllReplies( $status=null, $filters=array() )
@@ -697,7 +697,7 @@ class memberStatus
IPSText::getTextClass('email')->getTemplate( 'new_status', $friend['language'] );
IPSText::getTextClass('email')->buildMessage( $ndata );
$_subject = sprintf( IPSText::getTextClass('email')->subject,
$_subject = sprintf( IPSText::getTextClass('email')->subject,
$this->registry->output->buildSEOUrl( 'showuser=' . $owner['member_id'], 'publicNoSession', $owner['members_seo_name'], 'showuser' ),
$owner['members_display_name'],
$statusUrl );
@@ -765,7 +765,7 @@ class memberStatus
$this->_recordAction( 'reply', $author, $status, $data );
$this->rebuildStatus( $status );
$this->rebuildStatus( $status );
$this->rebuildOwnerLatest( $author );
$this->_sendNotification( $author, $status, $data );
@@ -784,10 +784,10 @@ class memberStatus
* @param int Status ID just posted
* @param array [Array of member data for member updating their status - will use ->getAuthor() if null]
* @param string [Content to update]
* @todo [Future] At some point it could be expanded into a mini framework with plugins
* @todo [Future] At some point it could be expanded into a mini framework with plugins
*/
protected function _triggerExternalUpdates( $updates, $status_id=0, $author=null, $content=null )
{
{
$author = ( $author === null ) ? $this->getAuthor() : $author;
$content = ( $content ) ? $this->_cleanContent( $content ) : $this->_cleanContent( $this->getContent() );
@@ -815,7 +815,7 @@ class memberStatus
if ( $updates['facebook'] )
{
if ( IPSLib::fbc_enabled() AND $author['fb_uid'] )
{
{
$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/facebook/connect.php', 'facebook_connect' );
$facebook = new $classToLoad( $this->registry );
$facebook->updateStatusWithUrl( $content, $url, FALSE );
@@ -874,9 +874,9 @@ class memberStatus
IPSText::getTextClass('email')->buildMessage( $data );
IPSText::getTextClass('email')->subject = sprintf(
IPSText::getTextClass('email')->subject,
$this->registry->output->buildSEOUrl( 'showuser=' . $_replier['member_id'], 'public', $_replier['members_seo_name'], 'showuser' ),
IPSText::getTextClass('email')->subject = sprintf(
IPSText::getTextClass('email')->subject,
$this->registry->output->buildSEOUrl( 'showuser=' . $_replier['member_id'], 'public', $_replier['members_seo_name'], 'showuser' ),
$_replier['members_display_name'],
$statusUrl
);
@@ -904,7 +904,7 @@ class memberStatus
while( $row = $this->DB->fetch() )
{
$_ids[ $row['reply_member_id'] ] = $row['reply_member_id'];
}
}
if ( count( $_ids ) )
{
@@ -951,20 +951,20 @@ class memberStatus
if ( $_replier['member_id'] == $_owner['member_id'] )
{
IPSText::getTextClass('email')->subject = sprintf(
$this->lang->words['subject__their_status_reply'],
$this->registry->output->buildSEOUrl( 'showuser=' . $_replier['member_id'], 'public', $_replier['members_seo_name'], 'showuser' ),
IPSText::getTextClass('email')->subject = sprintf(
$this->lang->words['subject__their_status_reply'],
$this->registry->output->buildSEOUrl( 'showuser=' . $_replier['member_id'], 'public', $_replier['members_seo_name'], 'showuser' ),
$_replier['members_display_name'],
$statusUrl
);
}
else
{
IPSText::getTextClass('email')->subject = sprintf(
$this->lang->words['subject__other_status_reply'],
$this->registry->output->buildSEOUrl( 'showuser=' . $_replier['member_id'], 'public', $_replier['members_seo_name'], 'showuser' ),
IPSText::getTextClass('email')->subject = sprintf(
$this->lang->words['subject__other_status_reply'],
$this->registry->output->buildSEOUrl( 'showuser=' . $_replier['member_id'], 'public', $_replier['members_seo_name'], 'showuser' ),
$_replier['members_display_name'],
$this->registry->output->buildSEOUrl( 'showuser=' . $_owner['member_id'], 'public', $_owner['members_seo_name'], 'showuser' ),
$this->registry->output->buildSEOUrl( 'showuser=' . $_owner['member_id'], 'public', $_owner['members_seo_name'], 'showuser' ),
$_owner['members_display_name'],
$statusUrl
);
@@ -1017,9 +1017,9 @@ class memberStatus
'LINK' => $memberUrl
) );
IPSText::getTextClass('email')->subject = sprintf( IPSText::getTextClass('email')->subject,
IPSText::getTextClass('email')->subject = sprintf( IPSText::getTextClass('email')->subject,
$memberUrl,
$this->registry->output->buildSEOUrl( 'showuser=' . $author['member_id'], 'public', $author['members_seo_name'], 'showuser' ),
$this->registry->output->buildSEOUrl( 'showuser=' . $author['member_id'], 'public', $author['members_seo_name'], 'showuser' ),
$author['members_display_name'] );
$notifyLibrary->setMember( $owner );
@@ -1125,7 +1125,7 @@ class memberStatus
}
return FALSE;
}
}
/**
* Delete all user's status'
@@ -1229,7 +1229,7 @@ class memberStatus
foreach( $statusIds as $sid )
{
/* Rebuild this status */
$this->rebuildStatus( $sid );
$this->rebuildStatus( $sid );
/* Rebuild latest */
$this->rebuildOwnerLatest( $members[ $stom[ $sid ] ] );
@@ -1296,7 +1296,7 @@ class memberStatus
$this->DB->delete( 'member_status_actions', 'action_reply_id=' . $reply['reply_id'] );
/* Rebuild this status */
$this->rebuildStatus( $status );
$this->rebuildStatus( $status );
/* Rebuild latest */
$this->rebuildOwnerLatest( $author );
@@ -1565,7 +1565,7 @@ class memberStatus
* @return bool
*/
public function canComment( $author=null, $owner=null, $status=null )
{
{
$author = ( $author === null ) ? $this->getAuthor() : $author;
$owner = ( $owner === null ) ? $this->_internalData['StatusOwner'] : $owner;
@@ -1890,7 +1890,7 @@ class memberStatus
$author = ( $author === null ) ? $this->getAuthor() : $author;
if ( $author['member_id'] AND $custom['text'] )
{
{
$this->DB->insert( 'member_status_actions', array( 'action_member_id' => $author['member_id'],
'action_date' => time(),
'action_custom' => 1,
@@ -1916,7 +1916,7 @@ class memberStatus
$reply = ( $reply === null ) ? $this->_internalData['ReplyData'] : ( ( is_array( $reply ) ) ? $reply : $this->_loadReply( $reply ) );
if ( $author['member_id'] AND $status['status_id'] )
{
{
$this->DB->insert( 'member_status_actions', array( 'action_status_id' => $status['status_id'],
'action_reply_id' => intval( $reply['reply_id'] ),
'action_member_id' => $author['member_id'],
@@ -2069,7 +2069,7 @@ class memberStatus
/**
* Callback to auto-parse @names
*
*
* @param array Matches from the regular expression
* @return string Converted text
*/
@@ -2080,19 +2080,19 @@ class memberStatus
/**
* Callback to auto-parse #tags
*
*
* @param array Matches from the regular expression
* @return string Converted text
*/
protected function _autoParseTags( $matches )
{
return $this->_autoParseUrls( array( '', $matches[1], 'http://search.twitter.com/search?q=%23' . urlencode( $matches[3] ), $matches[2] ) );
return $this->_autoParseUrls( array( '', $matches[1], 'http://twitter.com/search?q=%23' . urlencode( $matches[3] ), $matches[2] ) );
}
/**
* Callback to auto-parse urls
* I totally stole this from Brandon's code but do NOT tell him.
*
*
* @param array Matches from the regular expression
* @return string Converted text
*/
@@ -2159,7 +2159,7 @@ class memberStatus
}
}
/* Moderated Posting */
/* Moderated Posting */
if ( $author['mod_posts'] )
{
if ( $author['mod_posts'] == 1 )
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Mobile iOS App image class
* Owner: Matt Mecham
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Navigation Builder
* Owner: Matt Mecham
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -3,17 +3,17 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Admin Output Library
* Last Updated: $LastChangedDate: 2013-05-20 16:38:23 -0400 (Mon, 20 May 2013) $
* Last Updated: $LastChangedDate: 2013-10-16 12:57:41 -0400 (Wed, 16 Oct 2013) $
* </pre>
*
* @author $Author: bfarber $
* @author $Author: AndyMillne $
* @copyright (c) 2001 - 2009 Invision Power Services, Inc.
* @license http://www.invisionpower.com/company/standards.php#license
* @package IP.Board
* @link http://www.invisionpower.com
* @version $Rev: 12261 $
* @version $Rev: 12380 $
*
*/
@@ -218,7 +218,7 @@ class adminOutput extends output
else
{
foreach( ipsRegistry::$applications as $app_dir => $app_data )
{
{
if ( in_array( $app_data['app_directory'], array( 'core', 'forums', 'members' ) ) || in_array( $app_data['app_directory'], $mainTabKeys ) || $this->registry->getClass('class_permissions')->checkForAppAccess( $app_data['app_directory'] ) !== TRUE || ! $app_data['app_enabled'] )
{
continue;
@@ -227,6 +227,14 @@ class adminOutput extends output
$this->otherTabKeys[] = $app_data['app_directory'];
}
foreach( array( 'lookfeel', 'support', 'reports' ) AS $v )
{
if ( ! in_array( $v, $this->tabKeys ) )
{
$this->otherTabKeys[] = $v;
}
}
}
}
@@ -275,7 +283,7 @@ class adminOutput extends output
{
$fakeAppActive[ $fa ] = true;
$fakeActive = true;
$fakeActive = true;
}
}
}
@@ -656,8 +664,10 @@ class adminOutput extends output
* @param string Text to display
* @return @e void
*/
public function multipleRedirectFinish($text='Завершено!')
public function multipleRedirectFinish($text='')
{
$text = ( $text ) ? $text : $this->lang->words['mr_completed'];
print $this->global_template->global_redirect_done( $text );
exit();
}
@@ -828,7 +838,7 @@ class adminOutput extends output
$_bookmarkData = array( 'url' => $bookmarks->cleanUrl( $this->settings['query_string_safe'] ),
'can' => ( $this->_canBookmark ? 'true' : 'false' ),
'has' => ( $bookmarks->hasBookmarked( $this->settings['query_string_safe'] ) ? 'true' : 'false' ),
'jsn' => $bookmarks->asJson() );
'jsn' => $bookmarks->asJson() );
//-----------------------------------------
// Get tab order
@@ -1662,7 +1672,7 @@ class adminOutput extends output
$this->lang->loadLanguageFile( array( 'admin_menulang' ), $app_dir );
foreach( $data as $_current_module => $module_data )
{
{
$_thisApp = $app_dir;
$__current_module = $_current_module;
$_current_module = preg_replace( '/^\d+?_(.*)$/', "\\1", $_current_module );
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Ouput format: HTML
* (Matt Mecham)
* Last Updated: $Date: 2013-03-12 16:14:42 -0400 (Tue, 12 Mar 2013) $
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Ouput format: HTML
* (Matt Mecham)
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
File diff suppressed because it is too large. Load diff
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Ouput format: XML
* (Matt Mecham)
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Ouput format: HTML
* (Matt Mecham)
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
@@ -314,8 +314,8 @@ class xmlOutput extends coreOutput implements interface_output
{
$copyright = "<!-- Copyright Information -->
<p id='copyright'>
Powered By <a href='http://www.invisionboard.com' title='IP.Board Homepage'>IP.Board</a>
{$version} &copy; ".date("Y")." &nbsp;<a href='http://www.invisionpower.com' title='IPS Homepage'>IPS, <abbr title='Incorporated'>Inc</abbr></a>.
Powered By <a href='' title='IP.Board Homepage'>IP.Board</a>
{$version} &copy; ".date("Y")." &nbsp;IPS, <abbr title='Incorporated'>Inc</abbr>.
";
if ( $this->settings['ipb_reg_name'] )
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Public output methods
* Last Updated: $Date: 2013-05-20 16:38:23 -0400 (Mon, 20 May 2013) $
* </pre>
@@ -2043,8 +2043,6 @@ class output
return $url;
}
$seoTitle = IPSText::makeSeoTransliterate( $seoTitle );
$_template = FALSE;
$seoTitle = ( ! empty( $seoTitle ) && ! is_array( $seoTitle ) ) ? array( $seoTitle ) : $seoTitle;
$_seoTitleForCache = ( is_array( $seoTitle ) ) ? implode( ';', $seoTitle ) : '';
@@ -2464,7 +2462,6 @@ class output
#print '#\d+?' . $_st . preg_quote( $seoTitle, '#' ) . '(' . $_end . "$|" . $_end . "\w+?" . $_end . "$|" . preg_quote( $_blk, '#' ) . ")#";exit;
if ( is_array($seoTitle) OR ! preg_match( '#\d+?' . $_st . preg_quote( $seoTitle, '#' ) . '(' . $_end . "$|" . $_end . '\w+?' . $_end . '$|/\?|' . preg_quote( $_blk, '#' ) . ")#", $_toTest ) )
{
if ( $return === TRUE )
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* System Templates
* Last Updated: $Date: 2012-05-10 21:10:13 +0100 (Thu, 10 May 2012) $
* </pre>
+23 -23
View File
@@ -3,10 +3,10 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* RSS Import
* Owner: Matt Mecham
* Last Updated: $Date: 2013-05-16 11:23:35 -0400 (Thu, 16 May 2013) $
* Last Updated: $Date: 2013-09-26 22:37:28 -0400 (Thu, 26 Sep 2013) $
* </pre>
*
* @author Matt Mecham
@@ -15,7 +15,7 @@
* @package IP.Board
* @link http://www.invisionpower.com
* @since 24th November 2009
* @version $Revision: 12255 $
* @version $Revision: 12370 $
*/
/**
@@ -219,26 +219,26 @@ class rss_import
ipsRegistry::getClass('class_localization')->loadLanguageFile( array( 'public_global' ), 'core' );
/* Are we checking for external links */
$rels = array();
$rel = '';
if( ipsRegistry::$settings['posts_add_nofollow'] )
{
$rels[] = "nofollow";
}
if( ipsRegistry::$settings['links_external'] )
{
$rels[] = "external";
}
if( count($rels) )
{
$rel = " rel='" . implode( ' ', $rels ) . "'";
/* Are we checking for external links */
$rels = array();
$rel = '';
if( ipsRegistry::$settings['posts_add_nofollow'] )
{
$rels[] = "nofollow";
}
$this->_settings['LinkBack'] = "<a href=\"{url}\" {$rel}>" . $this->registry->getClass('class_localization')->words['_rssimportsource'] . "</a>";
if( ipsRegistry::$settings['links_external'] )
{
$rels[] = "external";
}
if( count($rels) )
{
$rel = " rel='" . implode( ' ', $rels ) . "'";
}
$this->_settings['LinkBack'] = "<a href=\"{url}\" class='bbc_url' {$rel}>" . $this->registry->getClass('class_localization')->words['_rssimportsource'] . "</a>";
/* Reset class */
$this->_reset();
@@ -566,7 +566,7 @@ class rss_import
if ( ! $this->_settings['ParseHtml'] )
{
$_raw = stripslashes($content);
$content = IPSText::getTextClass( 'bbcode' )->preDbParse( $editor->process( $_raw ) );
}
else
@@ -579,7 +579,7 @@ class rss_import
{
$the_link = str_replace( '{url}', trim( $link ), $this->_settings['LinkBack'] );
if ( $this->_settings['ParseHtml'] )
if ( !$this->_settings['ParseHtml'] )
{
$_raw = IPSText::getTextClass( 'bbcode' )->preEditParse( stripslashes($the_link) );
+1 -1
View File
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Sabre classes by Matt Mecham
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Sabre classes by Matt Mecham
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Sabre classes by Matt Mecham
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Sabre classes by Matt Mecham
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com/">IP.Board</a>
IP.Board
</body>
</html>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Sabre classes by Matt Mecham
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Global Search
* Last Updated: $Date: 2012-10-09 12:16:32 -0400 (Tue, 09 Oct 2012) $
* </pre>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Global Search
* Last Updated: $Date: 2012-12-03 14:03:02 -0500 (Mon, 03 Dec 2012) $
* </pre>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Global Search
* Last Updated: $Date: 2012-12-03 14:03:02 -0500 (Mon, 03 Dec 2012) $
* </pre>
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Global Search
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Admin session handler
* Last Updated: $Date: 2012-08-21 11:56:40 -0400 (Tue, 21 Aug 2012) $
* </pre>
+1 -1
View File
@@ -7,7 +7,7 @@
* $Author: mmecham $
* @since Friday 12th November 2010 16:58
* $LastChangedDate: 2012-08-22 05:05:53 -0400 (Wed, 22 Aug 2012) $
* @version v3.4.5
* @version v3.4.6
* $Revision: 11245 $
*/
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
File diff suppressed because it is too large. Load diff
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Sample SSO Class
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
@@ -3,7 +3,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Sample Mobile App SSO Class
* Last Updated: $Date: 2012-05-10 21:10:13 +0100 (Thu, 10 May 2012) $
* </pre>
@@ -5,6 +5,6 @@
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
<a href="http://www.invisionpower.com">IP.Board</a>
IP.Board
</body>
</html>
+1 -1
View File
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Share links library.
* Created by Matt Mecham
* Last Updated: $Date: 2013-05-08 13:48:52 -0400 (Wed, 08 May 2013) $
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Blog This plug in for share links library.
*
* Created by Mark Wade
@@ -77,16 +77,7 @@ class sl_blogthis
foreach ( ipsRegistry::$applications as $app )
{
$furltemplatesfile = IPSLib::getAppDir( $app['app_directory'] );
if(IPB_USE_ONLY_ID_FURL && is_file( $furltemplatesfile.'/extensions/furlTemplatesID.php'))
{
$furltemplatesfile.='/extensions/furlTemplatesID.php';
}
else
{
$furltemplatesfile.='/extensions/furlTemplates.php';
}
$_file = $furltemplatesfile;
$_file = IPSLib::getAppDir( $app['app_directory'] ) . '/extensions/furlTemplates.php';
if ( is_file( $_file ) )
{
@@ -1,91 +0,0 @@
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.1.0 Beta 2
* Bobrdobr plug in for share links library.
* This is just the basic fallback bobrdobr share, the front end has JS to do something more fancy
*
* Created by Matt Mecham
* Last Updated: $Date: 2010-01-25 13:21:25 +0000 (Mon, 25 Jan 2010) $
* </pre>
*
* @author $Author: matt $
* @copyright (c) 2001 - 2009 Invision Power Services, Inc.
* @license http://www.invisionpower.com/community/board/license.html
* @package IP.Board
* @link http://www.invisionpower.com
* @version $Rev: 5746 $
*
*/
/* Class name must be in the format of:
sl_{key}
Where {key}, place with the value of: core_share_links.share_key
*/
class sl_bobrdobr
{
/**#@+
* Registry Object Shortcuts
*
* @access protected
* @var object
*/
protected $DB;
protected $settings;
protected $lang;
protected $member;
protected $memberData;
protected $cache;
protected $caches;
/**#@-*/
/**
* Construct.
* @access public
* @param object Registry
* @return void
*/
public function __construct( $registry )
{
/* Make object */
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->lang = $this->registry->getClass('class_localization');
$this->member = $this->registry->member();
$this->memberData =& $this->registry->member()->fetchMemberData();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
}
/**
* Requires a permission check
*
* @access public
* @param array Data array
* @return boolean
*/
public function requiresPermissionCheck( $array )
{
return false;
}
/**
* Redirect to Twitter
* Exciting, isn't it.
*
* @access private
* @param string Plug in
*/
public function share( $title, $url )
{
$title = IPSText::convertCharsets( $title, IPS_DOC_CHAR_SET, 'utf-8' );
$url = "http://bobrdobr.ru/addext.html?url=" . urlencode( $url ) . '&title=' . urlencode( $title );
$this->registry->output->silentRedirect( $url );
}
}
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Twitter plug in for share links library.
* This is just the basic fallback twitter share, the front end has JS to do something more fancy
*
@@ -2,7 +2,7 @@
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.5
* IP.Board v3.4.6
* Twitter plug in for share links library.
* This is just the basic fallback twitter share, the front end has JS to do something more fancy
*
Loaded 100 of 1568 files, more files were not shown because too many files have changed in this diff. Show more