30 Commits
Author SHA1 Message Date
Neo dbd774b30c Version 5.0.14 2025-12-19 19:17:57 -08:00
Neo 5efe744c5f Version 5.0.13 2025-12-19 19:04:57 -08:00
Neo b89858b2ff Version 5.0.6 2025-12-19 18:55:49 -08:00
Neo a3a4a9ccbd Version 5.0.0 release 2025-12-19 18:37:58 -08:00
Neo 90e8c7e903 Version 5.0.0 beta 11.1 2025-12-19 18:00:22 -08:00
Neo 264eeb97e0 Version 5.0.0 beta 10 2025-12-19 17:53:48 -08:00
Neo 56979f8ee8 Version 5.0.0 beta 9 2025-12-19 17:47:00 -08:00
Neo 214f649f1d Version 5.0.0 beta 8 2025-12-19 17:30:12 -08:00
Neo 54d5dcd0a0 Version 5.0.0 beta 7 2025-12-19 17:18:38 -08:00
Neo fa2a720105 Version 5.0.0 beta 6 2025-12-19 17:12:27 -08:00
Neo 57d9db6ce2 Version 5.0.0 beta 5 2025-12-19 17:04:22 -08:00
Neo 2f24f9de48 Version 5.0.0 beta 4 2025-12-19 16:57:00 -08:00
Neo e86153356a Version 5.0.0 beta 3 2025-12-19 16:47:22 -08:00
Neo f61b0da85d Version 5.0.0 beta 2 2025-12-19 16:39:01 -08:00
Neo 15c7beabc5 Version 5.0.0 beta 1 2025-12-19 16:27:35 -08:00
Neo 25ddeb65d6 Version 4.7.23 2025-12-19 16:21:27 -08:00
Neo 7124a02564 Version 4.7.13 2025-12-19 16:14:56 -08:00
Neo fd22d99e69 Version 4.7.8 2025-12-19 16:10:42 -08:00
Neo 7b7404e741 Version 4.7.6 2025-12-19 16:05:19 -08:00
Neo 8ba7d43898 Version 4.7.0 2025-12-19 16:00:35 -08:00
Neo 517a5e1f70 Version 4.6.0 2025-12-19 05:55:31 -08:00
Neo f79dcf067a Version 4.5.0 2025-12-19 05:51:58 -08:00
Neo 1a0c7fd3c2 Version 4.3.6 2025-12-19 05:49:12 -08:00
Neo fe1acf984a Version 4.3.0 2025-12-19 05:47:12 -08:00
Neo 96997ddd8e Version 4.2.0 2025-12-19 05:44:59 -08:00
Neo 0dc2aee5ed Version 4.1.19.4 2025-12-19 05:42:01 -08:00
Neo 2bd5025018 Version 4.1.19 2025-12-19 05:38:56 -08:00
Neo 28bd025b35 Version 4.1.2 2025-12-19 05:32:19 -08:00
Neo 3ba79295ee Version 4.0.13.1 (nulled) 2025-12-19 05:28:09 -08:00
Neo c6a86f0d9b Version 4.0.13.1 2025-12-19 04:57:54 -08:00
15282 changed files with 1582895 additions and 690725 deletions

No files matched your search

+14
View File
@@ -0,0 +1,14 @@
<?php
header("HTTP/1.0 404 Not Found");
print <<<EOF
<html>
<title>404 Not Found</title>
<body>
The file you were looking for could not be found
</body>
</html>
EOF;
exit;
+362
View File
@@ -0,0 +1,362 @@
Invision Community
(c) Invision Power Services, Inc.
Invision Power Services, Inc. is grateful to the following projects, whose work
has been used throughout Invision Community to add style, flair and functionality
to our product.
NULLING
Last Updated: 9 December 2025
Author: https://ipbmafia.ru
AES implementation in PHP
Description: Used by \IPS\Text\Encrypt to provide two-way text encryption for storing certain data.
Location: system/3rd_party/AES
Included version: Last Updated: 22 July 2014
Website: http://www.movable-type.co.uk/scripts/aes-php.html
License: http://creativecommons.org/licenses/by/3.0/
BaconQrCode
Description: Used to generate QR Codes for Authenticator MFA.
Location: system/3rd_party/BaconQrCode
Included version: 3.0.0
Website: https://github.com/Bacon/BaconQrCode
License: https://github.com/Bacon/BaconQrCode/blob/3.0.0/LICENSE - BSD 2-Clause
Brick/math
Description: Arbitrary-precision arithmetic library
Location: system/3rd_party/Brick
Included version: 0.9.2
Website: https://github.com/brick/math
License: http://opensource.org/licenses/MIT
Browser Icons
Description: Browser logo icons for UI
Location: applications/core/interface/logos/browsers
Website: https://github.com/alrra/browser-logos
License: https://github.com/alrra/browser-logos/blob/main/LICENSE.txt
Clipboard
Description: Cross browser copy to clipboard functionality
Location: applications/core/interface/static/clipboard
Included version: 2.0.6
Website: clipboardjs.com
License: https://zenorocha.mit-license.org
Codemirror (with C-like, CSS, HTMLMixed, JavaScript, PHP, SQL and XML modes and merge, search, and searchcursor addons)
Description: Provides code editor for adding code to content, editing templates in the AdminCP, etc.
Location: In development: applications/core/dev/codemirror
Included version: 5.68.18
Website: http://codemirror.net
License: http://codemirror.net/LICENSE
Cropper
Description: Provides cropping functionality for profile photos
Location: applications/core/interface/static/cropper
Included version: 1.5.9
Website: https://github.com/fengyuanchen/cropperjs
License: http://opensource.org/licenses/MIT
Devices Icon Pack
Description: Icon pack for representing different devices
Location: In development: applications/core/dev/resources/front/devices
Website: https://www.iconfinder.com/iconsets/devices-42
License: Free for commercial use
Enum
Description: Dependency for BaconQrCode
Location: system/3rd_party/DASPRiD
Included version: 1.0.5
Website: https://github.com/DASPRiD/Enum
License: https://github.com/DASPRiD/Enum/blob/1.0.5/LICENSE - BSD 2-Clause
FontAwesome
Description: General icons for UI
Location: applications/core/interface/static/fontawesome
Included version: 6.7.1
Website: https://fontawesome.com
License: https://fontawesome.com/license/free
Google Charts
Description: Generates charts for statistics in the AdminCP
Location: Loaded from CDN https://www.gstatic.com/charts/loader.js
Website: https://developers.google.com/chart/
google-code-prettify
Description: Provides syntax highlighting for code posted in content, etc.
Location: In development: dev/js/library/prettify and applications/core/dev/css/global/framework/prettify.css
Included version: 4 March 2013
Website: http://code.google.com/p/google-code-prettify/
License: http://www.apache.org/licenses/LICENSE-2.0
google-diff-mode-patch
Description: Provides diff comparisons for CodeMirror
Location: applications/core/interface/static/codemirror/diff_match_patch.js
Included version: 19 November 2012
Website: https://code.google.com/p/google-diff-match-patch/
License: http://www.apache.org/licenses/LICENSE-2.0
Google fonts
Description: Provides numerous font familes for the theme
Location: applications/core/interface/fonts
Website: https://fonts.google.com/
License: SIL Open Font License: Free for commercial use
graphql-php
Description: PHP implementation of the GraphQL standard
Location: system/3rd_party/graphql-php
Included version: 14.11.6
Website: https://webonyx.github.io/graphql-php/
License: http://opensource.org/licenses/MIT
history.js
Description: HTML5 history API, used extensively in controllers
Location: /dev/js/library/jquery/jquery.history.js
Included version: 1.8b2
Website: https://github.com/browserstate/history.js
License: https://github.com/browserstate/history.js#license
Howler
Description: HTML5 audio api
Location: applications/core/interface/howler
Included version: 2.1.2
Website: https://github.com/goldfire/howler.js
License: http://opensource.org/licenses/MIT
HTMLPurifier
Description: Validates and cleans submitted HTML for content
Location: system/3rd_party/HTMLPurifier
Included version: 4.18.0
Website: http://htmlpurifier.org
License: http://www.gnu.org/copyleft/lesser.html
IcoMoon
Description: General icons for UI
Location: Font files in applications/core/interface/font and CSS in development in applications/core/dev/css/global/framework/fonts.css (mixed with other CSS and modified to use correct path to font files)
Website: https://icomoon.io/
License: http://creativecommons.org/licenses/by/4.0/
IPLib
Description: IPv4 and IPv6 management library
Location: system/3rd_party/IPLib
Website: https://github.com/mlocati/ip-lib
License: http://opensource.org/licenses/MIT
jQuery
Description: JavaScript Library
Location: In development: dev/js/library/jquery/jquery.js
Included version: 3.7.1
Website: http://jquery.com
License: http://jquery.org/license
jQuery imagesLoaded plugin
Description: Plugin that can defer script execution until specified images have loaded
Location: dev/js/library/jquery/jquery.imagesloaded.js
Included version: 4.4.1
Website: http://desandro.github.io/imagesloaded/
License: http://opensource.org/licenses/MIT
jQuery.menuaim.js
Description: Library that provides intelligent activation of menu items based on mouse movement
Location: applications/core/interface/jquery/jquery.menuaim.js
Included version: 1.1
Website: https://github.com/kamens/jQuery-menu-aim
License: http://opensource.org/licenses/MIT
jQuery Migrate
Description: Migration tool for jQuery
Location: In development: dev/js/library/jquery/jquery-migrate.js
Included version: 3.4.1
Website: https://github.com/jquery/jquery-migrate/
License: https://github.com/jquery/jquery-migrate/blob/master/LICENSE.txt
jQuery.nestedSortable.js
Description: Extends jqueryui's sortable with nested support
Location: applications/core/interface/jquery/jquery.nestedSortable.js
Included version: 2.1a
Website: https://github.com/ilikenwf/nestedSortable
License: http://opensource.org/licenses/MIT
jQuery.rangyinputs.js
Description: Simple selection/caret manipulation in textboxes
Location: applications/core/interface/jquery/jquery.rangyinputs.js
Included version: 1.2.0
Website: https://github.com/timdown/rangyinputs
License: http://opensource.org/licenses/MIT
jQuery UI
Description: Javascript library for drag+drop, resizing, date polyfill
Location: applications/core/interface/jquery/jquery-ui.js
Included version: 1.13.2
Website: http://jqueryui.com
License: http://jquery.org/license
jQuery UI TouchPunch
Description: Library that adds touch support to jquery ui
Location: /applications/core/interface/jquery/jquery-touchpunch.js
Included version: 0.2.3
Website: http://touchpunch.furf.com/
License: http://opensource.org/licenses/MIT
JS-minify
Description: Provides JavaScript minification
Location: system/3rd_party/JsMinify
Included version: 1.0.0
Website: https://github.com/garfix/js-minify
License: https://github.com/garfix/js-minify/blob/main/LICENSE
JwtFramework
Description: Provides JWT signing & encryption support
Location: system/3rd_party/JwtFramework
Included version: 2.2.8
Website: https://github.com/web-token/jwt-framework
License: http://www.opensource.org/licenses/mit-license.php
linkify
Description: Provides link detection
Location: dev/js/library/linkify
Included version: 2.1.0
Website: http://soapbox.github.io/linkifyjs/
License: http://www.opensource.org/licenses/mit-license.php
Mustache.js
Description: JS templating engine
Location: dev/js/library/mustache/
Included version: 4.2.0
Website: http://github.com/janl/mustache.js
License: http://opensource.org/licenses/MIT
Normalize.css
Description: Sets base CSS styles for consistency across browsers
Location: applications/core/dev/css/global/framework/normalize.css
Included version: 6.0.0
Website: http://necolas.github.io/normalize.css/
License: http://opensource.org/licenses/MIT
Parsedown
Description: Converts Markdown to HTML
Location: applications/convert/sources/Tools/Vanilla/Parsedown
Included version: 1.7.4
Website: https://parsedown.org/
License: https://github.com/erusev/parsedown/blob/master/LICENSE.txt
parseUri
Description: Used to parse URLs in JS
Location: dev/js/framework/common/utils/ips.utils.url.js
Included version: 1.2.2
Website: http://blog.stevenlevithan.com/archives/parseuri
License: http://opensource.org/licenses/MIT
Payment Method Icons
Description: Credit card logo icons for UI
Location: applications/nexus/dev/resources/front/cards
Website: http://www.dreamstale.com/free-download-payment-method-vector-icons/
License: http://creativecommons.org/licenses/by/3.0/
PclZip
Description: Used by \IPS\Archive\Zip to provide zip handling features if the PHP Zip extension is not available
Location: system/3rd_party/pclzip
Included version: 2.8.2
Website: http://www.phpconcept.net/pclzip/
License: http://www.gnu.org/copyleft/lesser.html
phpass
Description: Password strength calculator
Location: system/3rd_party/phpass
Included version: Aug 2012
Website: https://github.com/rchouinard/phpass
License: http://mit-license.org
PHP Diff Implementation
Description: Computes difference between two strings, used to display differences between content revisions, themes, etc.
Location: system/3rd_party/Diff
Included version: 11 Feb 2013
Website: http://code.stephenmorley.org/php/diff-implementation/
License: http://creativecommons.org/publicdomain/zero/1.0/legalcode
PHP Domain Parser
Description: Parses domain names with more accuracy than PHP (uses ICAAN lids)
Location: system/3rd_party/Pdp
Website: https://github.com/jeremykendall/php-domain-parser
License: http://opensource.org/licenses/mit-license.php
php-punycode
Description: A library for Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)
Location: system/3rd_party/php-punycode
Included version: 2.1.1
Website: https://github.com/true/php-punycode
License: https://github.com/true/php-punycode/blob/master/LICENSE
phpQuery
Description: Handles template hooks
Location: system/3rd_party/phpQuery
Included Version: 0.9.5
Website: https://code.google.com/p/phpquery
License: http://opensource.org/licenses/mit-license.php
PHP User Agent Parser
Description: Parses user agent strings
Location: system/3rd_party/PhpUserAgent
Included Version: 1.9.0
Website: https://github.com/donatj/PhpUserAgent
License: http://opensource.org/licenses/mit-license.php
Plupload
Description: Facilitates uploading files
Location: applications/core/interface/plupload
Included version: 2.3.9
Website: http://www.plupload.com
License: http://www.plupload.com/license/plupload_commercial_oem.txt
Preloaders.net
Description: Animated gif preload imags
Website: http://preloaders.net/
License: http://preloaders.net/en/terms_of_use
Spectrum
Description: Color selector polyfill
Location: applications/core/interface/spectrum
Included version: 2.0.8
Website: https://seballot.github.io/spectrum/
License: https://github.com/seballot/spectrum/blob/master/LICENSE
success.mp3 Notification Sound by RCP Tones
Description: "Success" sound used in ips.ui.uploader.js
Location: /applications/core/interface/static/sounds/success.mp3
Website: http://rcptones.com/dev_tones/
License: http://creativecommons.org/licenses/by/3.0/us/
Underscore.js
Description: General-purpose functional JS library
Location: dev/js/library/underscore/
Included version: 1.13.1
Website: http://underscorejs.org
License: https://github.com/documentcloud/underscore/blob/master/LICENSE
Web Push Library for PHP
Description: Provides support and utility functions for Web Push
Location: system/3rd_party/Minishlink
Included version: 6.0.3
Website: https://github.com/web-push-libs/web-push-php
License: http://opensource.org/licenses/mit-license.php
Whoops
Description: Provides error handling for development mode
Location: dev/Whoops
Included Version: 2.16.0
Website: http://filp.github.io/whoops/
License: https://github.com/filp/whoops/blob/master/LICENSE.md
world-flags-sprite
Description: Flag icons for UI
Location: In development: Image files at applications/core/dev/resources/global, facilitated by custom CSS at applications/core/dev/css/global/flags.css
Included version: Last Updated Oct 2015
Website: https://github.com/lafeber/world-flags-sprite/
License: https://github.com/lafeber/world-flags-sprite/blob/master/LICENSE
XRegExp (with addons)
Description: Advanced Regular Expression JS library, used in autolink editor plugin and search result highlighting
Location: In development: dev/js/library/xregexp/xregexp-all.js
Included Version: 3.2.0
Website: http://xregexp.com
License: http://mit-license.org
-39
View File
@@ -1,39 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>IPS Community Suite Setup Guide</title>
<style type='text/css' media='all'>
@import url('data/install.css');
</style>
</head>
<body>
<div id='ipbwrapper'>
<div id='branding'>
<div class='main_width'>
<div class='logo'><img src='data/images/logo.png' /></div>
</div>
</div>
</div>
<div id='content'>
<div class='message'>
<a href='http://anonym.to/?http://external.ipslink.com/ipboard30/landing/?p=installation-guide'>Installing &rarr;
</div>
<br />
<div class='message'>
<a href='http://anonym.to/?http://external.ipslink.com/ipboard30/landing/?p=upgrade-guide'>Upgrading &rarr;
</div>
<br />
<div class='message'>
<a href='http://anonym.to/?http://external.ipslink.com/ipboard30/landing/?p=convert-guide'>Converting &rarr;
</div>
<br />
<div class='copyright'>
&copy; 2012 Invision Power Services, Inc.
</div>
</div>
</body>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1008 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1009 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 B

-1
View File
@@ -1 +0,0 @@
<html>␍<head><title>Invision Power Board - Bulletin Board System</title></head>␍<body>␍<h1>403: Invision Power Board -&gt; Forbidden</h1>␍<hr>␍You have reached this Page in error, please use␍your back button to return to Invision Board.␍<hr>␍Invision Power Board␍</body>␍</html>␍
Binary file not shown.

Before

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

-10
View File
@@ -1,10 +0,0 @@
<html>
<head><title>IP.Board - Bulletin Board System</title></head>
<body>
<h1>403: IP.Board -&gt; Forbidden</h1>
<hr>
You have reached this page in error, please use your back button to return to the forum.
<hr>
IP.Board
</body>
</html>
-545
View File
@@ -1,545 +0,0 @@
/**
* Installer CSS
* (c) Invision Power Services, Inc.
*/
/*-----------------------------------------------*/
/* This section resets default browser styles. */
/* You shouldn't need to edit this section. */
/*-----------------------------------------------*/
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td { margin:0; padding:0; }
table { border-collapse:collapse; border-spacing:0; }
fieldset,img { border:0; }
address,caption,cite,code,dfn,em,strong,th,var { font-style:normal; font-weight:normal; }
ol,ul { list-style:none; }
caption,th { text-align:left; }
h1,h2,h3,h4,h5,h6 { font-size:100%; font-weight:normal; }
q:before,q:after { content:''; }
abbr,acronym { border:0; }
hr { display: none; }
html, body { /* Safari has trouble with bgcolor on body. Apply to html tag too. */
background-color: #d8dde8;
color: #5a5a5a;
}
body {
font: normal 13px helvetica, arial, sans-serif;
position: relative;
}
input, select {
font: normal 13px helvetica, arial, sans-serif;
}
a {
color: #225985;
text-decoration: none;
}
a:hover { color: #328586; }
/************************************************************************/
/* LAYOUT */
#content, .main_width {
margin: 0 auto;
width: 980px;
}
#branding, #header_bar, #primary_nav { min-width: 980px; }
/*#header_bar .main_width, #branding .main_width, #primary_nav .main_width { padding: 0 10px; }*/
/**
* @key content
* @group global
* @colorize base
* @title Main Content Area
* @description The area that contains all page content
* @default background
*/
#content {
background: #fff;
padding: 10px 10px;
line-height: 120%;
-webkit-box-shadow: 0 5px 9px rgba(0,0,0,0.1);
-moz-box-shadow: 0 5px 9px rgba(0,0,0,0.1);
box-shadow: 0 5px 9px rgba(0,0,0,0.1);
}
#branding {
background: #0f3854 url(images/branding_bg.png) repeat-x;
border-bottom: 1px solid #1b3759;
min-height: 64px;
}
#logo { display: inline; }
#primary_nav {
background: #204066;
font-size: 13px;
padding: 4px 0 0 0;
}
#community_app_menu > li { margin: 0px 3px 0 0; position: relative; }
/**
* @key primarynav_inactive
* @group header
* @colorize base
* @title Inactive App Tab
* @description An inactive tab in the Primary Nav bar
* @default background, color
*/
#community_app_menu > li > a {
color: #c5d5e2;
background: #1c3b5f;
display: block;
padding: 6px 15px 8px;
text-shadow: 0px 1px 1px rgba(0,0,0,0.5);
}
#community_app_menu > li > a:hover, #community_app_menu > li > a.menu_active { background: #173455; color: #fff; }
/**
* @key primarynav_active
* @group header
* @colorize base
* @title Active App Tab
* @description An active tab in the Primary Nav bar
* @default background, color
*/
#community_app_menu > li.active > a {
background: #fff;
color: #0b5794;
font-weight: bold;
margin-top: 0;
text-shadow: none;
}
.ipsList_inline > li {
display: inline-block;
margin: 0 3px;
}
.ipsList_inline > li:first-child { margin-left: 0; }
.ipsList_inline > li:last-child { margin-right: 0; }
.ipsList_inline.ipsList_reset > li:first-child { margin-left: 3px; }
.ipsList_inline.ipsList_reset > li:last-child { margin-right: 3px; }
.ipsList_inline.ipsList_nowrap { white-space: nowrap; }
/* Utility styles */
.right { float: right; }
.left { float: left; }
.hide { display: none; }
.short { text-align: center; }
.clear { clear: both; }
.clearfix:after { content: ".";display: block;height: 0;clear: both;visibility: hidden;}
.faded { opacity: 0.5 }
.clickable { cursor: pointer; }
.reset_cursor { cursor: default; }
/************************************************************************/
/* LAYOUT SYSTEM */
.ipsLayout.ipsLayout_withleft { padding-left: 210px; }
.ipsBox.ipsLayout.ipsLayout_withleft { padding-left: 220px; }
.ipsLayout.ipsLayout_withright { padding-right: 210px; clear: left; }
.ipsBox.ipsLayout.ipsLayout_withright { padding-right: 220px; }
/* Panes */
.ipsLayout_content, .ipsLayout .ipsLayout_left, .ipsLayout_right { position: relative; }
.ipsLayout_content { width: 100%; float: left; }
.ipsLayout .ipsLayout_left { width: 200px; margin-left: -210px; float: left; }
.ipsLayout .ipsLayout_right { width: 200px; margin-right: -210px; float: right; }
/* Wider sidebars */
.ipsLayout_largeleft.ipsLayout_withleft { padding-left: 280px; }
.ipsBox.ipsLayout_largeleft.ipsLayout_withleft { padding-left: 290px; }
.ipsLayout_largeleft.ipsLayout .ipsLayout_left { width: 270px; margin-left: -280px; }
.ipsLayout_largeright.ipsLayout_withright { padding-right: 280px; }
.ipsBox.ipsLayout_largeright.ipsLayout_withright { padding-right: 290px; }
.ipsLayout_largeright.ipsLayout .ipsLayout_right { width: 270px; margin-right: -280px; }
/* Narrow sidebars */
.ipsLayout_smallleft.ipsLayout_withleft { padding-left: 150px; }
.ipsBox.ipsLayout_smallleft.ipsLayout_withleft { padding-left: 160px; }
.ipsLayout_smallleft.ipsLayout .ipsLayout_left { width: 140px; margin-left: -150px; }
.ipsLayout_smallright.ipsLayout_withright { padding-right: 150px; }
.ipsBox.ipsLayout_smallright.ipsLayout_withright { padding-right: 160px; }
.ipsLayout_smallright.ipsLayout .ipsLayout_right { width: 140px; margin-right: -150px; }
/* Tiny sidebar */
.ipsLayout_tinyleft.ipsLayout_withleft { padding-left: 50px; }
.ipsBox.ipsLayout_tinyleft.ipsLayout_withleft { padding-left: 60px; }
.ipsLayout_tinyleft.ipsLayout .ipsLayout_left { width: 40px; margin-left: -40px; }
.ipsLayout_tinyright.ipsLayout_withright { padding-right: 50px; }
.ipsBox.ipsLayout_tinyright.ipsLayout_withright { padding-right: 60px; }
.ipsLayout_tinyright.ipsLayout .ipsLayout_right { width: 40px; margin-right: -40px; }
/* Big sidebar */
.ipsLayout_bigleft.ipsLayout_withleft { padding-left: 330px; }
.ipsBox.ipsLayout_bigleft.ipsLayout_withleft { padding-left: 340px; }
.ipsLayout_bigleft.ipsLayout .ipsLayout_left { width: 320px; margin-left: -330px; }
.ipsLayout_bigright.ipsLayout_withright { padding-right: 330px; }
.ipsBox.ipsLayout_bigright.ipsLayout_withright { padding-right: 340px; }
.ipsLayout_bigright.ipsLayout .ipsLayout_right { width: 320px; margin-right: -330px; }
/* Even Wider sidebars */
.ipsLayout_hugeleft.ipsLayout_withleft { padding-left: 380px; }
.ipsBox.ipsLayout_hugeleft.ipsLayout_withleft { padding-left: 390px; }
.ipsLayout_hugeleft.ipsLayout .ipsLayout_left { width: 370px; margin-left: -380px; }
.ipsLayout_hugeright.ipsLayout_withright { padding-right: 380px; }
.ipsBox.ipsLayout_hugeright.ipsLayout_withright { padding-right: 390px; }
.ipsLayout_hugeright.ipsLayout .ipsLayout_right { width: 370px; margin-right: -380px; }
.ipsBox { background: #ebf0f3; }
.ipsBox, .ipsPad { padding: 9px; }
.ipsPad_double { padding: 9px 19px; } /* 19px because it's still only 1px border to account for */
.ipsBox_withphoto { margin-left: 65px; }
.ipsBox_container {
background: #fff;
border: 1px solid #dbe4ef;
}
.ipsBox_notice {
padding: 10px;
line-height: 1.6;
margin-bottom: 10px;
}
.ipsBox_container .ipsBox_notice { margin: -10px -10px 10px -10px; }
.ipsPad_half { padding: 4px !important; }
.ipsPad_left { padding-left: 9px; }
.ipsPad_top { padding-top: 9px; }
.ipsPad_top_slimmer { padding-top: 7px; }
.ipsPad_top_half { padding-top: 4px; }
.ipsPad_top_bottom { padding-top: 9px; padding-bottom: 9px; }
.ipsPad_top_bottom_half { padding-top: 4px; padding-bottom: 4px; }
.ipsMargin_top { margin-top: 9px; }
#progress { margin: 10px 0px 10px 40px }
#progress .step_done {
list-style-image: url('images/bullet_done.gif');
color: #44638E;
font-style: italic;
}
#progress .step_doing {
list-style-image: url('images/bullet_doing.gif');
font-weight: bold;
}
#progress .step_doing p {
color: gray;
font-weight: normal;
}
#progress .step_notdone {
list-style-image: url('images/bullet_notdone.gif');
}
.maintitle {
background: #2c5687 url(images/maintitle.png) repeat-x top;
color: #fff;
padding: 10px 10px 11px;
font-size: 16px;
font-weight: 300;
-moz-border-radius: 4px 4px 0 0;
-webkit-border-top-left-radius: 4px;
-webkit-border-top-right-radius: 4px;
border-radius: 4px 4px 0 0;
-webkit-box-shadow: inset 0px 1px 0 #528cbc;
-moz-box-shadow: inset 0px 1px 0 #528cbc;
box-shadow: inset 0px 1px 0 #528cbc;
border-width: 1px 1px 0 1px;
border-color: #316897;
border-style: solid;
}
.maintitle a { color: #fff; }
#contentContainer {
overflow: auto;
overflow-y:auto;
overflow-x:hidden;
height: 550px;
}
.input_text, .sql_form {
padding: 4px;
border-width: 1px;
border-style: solid;
border-color: #848484 #c1c1c1 #e1e1e1 #c1c1c1;
background: #fff;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
}
.input_text:focus {
border-color: #4e4e4e #7c7c7c #a3a3a3 #7c7c7c;
-webkit-box-shadow: 0px 0px 5px rgba(0,0,0,0.3);
-moz-box-shadow: 0px 0px 5px rgba(0,0,0,0.3);
box-shadow: 0px 0px 5px rgba(0,0,0,0.3);
}
ipsType_pagetitle, .ipsType_subtitle {
font: 300 26px/1.3 Helvetica, Arial, sans-serif;
color: #323232;
}
.ipsType_subtitle { font-size: 18px; }
.ipsType_sectiontitle {
font-size: 16px;
font-weight: normal;
color: #595959;
padding: 5px 0;
border-bottom: 1px solid #ececec;
}
.ipsType_pagedesc {
color: #7f7f7f;
line-height: 1.5;
}
#login_controls {
margin: 0 auto;
width: 100%;
font-size: 12px;
}
#login_controls label {
display: block;
width: 35%;
color: #000;
float: left;
clear: both;
margin-bottom: 12px;
text-align: right;
padding-right: 15px;
}
#login_controls input {
margin-bottom: 12px;
font-size: 12px;
width: 45%;
}
.nav_button, .button, .realbutton {
-moz-border-radius-bottomleft:3px;
-moz-border-radius-bottomright:3px;
-moz-border-radius-topleft:3px;
-moz-border-radius-topright:3px;
background-color:#657B97;
border:1px solid #3E546F;
color:#FFFFFF;
cursor:pointer;
padding:3px;
}
.message {
padding: 10px 10px 10px 10px;
margin-bottom: 6px;
border-width: 1px;
border-style: solid;
border-color: #b0ce94;
background-color: #f1f6ec;
color: #3e4934;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
line-height: 150%;
}
.message.error {
background-color: #f3dddd;
border-color: #deb7b7;
color: #281b1b;
font-size: 1.1em;
}
.message.unspecific {
background-color: #f3f3f3;
border-color: #d4d4d4;
color: #515151;
clear: both;
margin: 0 0 10px 0;
}
.message.unspecific.note {
background-color: #f9f7e0;
border-color: #eadca0;
margin-top: 8px;
}
H1 {
margin: 0px;
/* -provide BG incase of missing img- */
background-image: url('images/title_bar.gif');
padding: 7px 5px 6px 5px;
font-size: 13px;
color: #ffffff;
font-weight: bold;
}
H2 {
margin: 0px;
font-size: 18px;
}
H3 {
font-size: 11px;
margin: 0px;
}
.content_shell
{
margin: 0px 3px 3px 3px;
border: 1px solid #24426A;
border-top: 3px solid #24426A;
background-repeat: repeat-x;
background-color: #D5DDE5;
}
.package {
clear:both;
height: 577px;
}
.content_wrap {
width: 70%;
height: 480px;
float: right;
margin: 6px 6px 4px 0px;
padding: 10px;
background-color: #ffffff;
border: 1px solid #000000;
line-height: 150%;
overflow: auto;
overflow-y:auto;
overflow-x:hidden;
}
.install_info {
float: left;
margin: -5px 0px 0px 10px;
font-size: 12px;
width: 23%;
}
.install_info H3 {
font-size: 15px;
color: #6D87A9;
}
.install_info UL {
margin: 0px;
margin-top: 15px;
padding-left: 25px;
list-style-type: none;
}
.warning {
background-color: #EDF1AB;
border: 1px solid #6E704B;
padding: 5px;
font-weight: bold;
-moz-border-radius: 5px;
overflow: auto;
}
.hr {
margin: 4px 6px 0px 6px;
border-bottom: 1px solid #627686;
}
.copyright {
width: 98%;
text-align: right;
font-size: 9px;
color: #9EA7B3;
padding-top: 3px;
padding-right: 5px;
}
.eula {
height: 400px;
border: 1px solid #76774C;
background-color: #FDFDD3;
padding: 8px;
overflow: auto;
margin-bottom: 6px;
}
#auto_progress LI {
list-style: none;
color: #029901;
font-size: 11px;
font-weight: bold;
padding: 3px;
}
.done_text {
font-size: 14px;
font-weight: bold;
}
#links {
margin: 0px;
padding: 5px;
}
#links LI {
list-style: none;
}
.float_img {
float: left;
margin-right: 5px;
}
.info {
background-color: #DCE6F3;
border: 1px solid #5876A0;
padding: 4px;
line-height: 120%;
-moz-border-radius: 7px;
color: #1D3A60;
}
.sql_form {
width: 100%;
}
FIELDSET {
padding: 10px 10px 10px 10px;
border-width: 1px;
border-style: solid;
border-color: #d5dde5;
background-color: #F1F4F7;
color: #3e4934;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
line-height: 150%;
}
FIELDSET LEGEND {
font-weight: bold;
}
TABLE .title {
color: #2D4461;
font-weight: bold;
padding-bottom: 6px;
}
TABLE .content {
padding-bottom: 6px;
}
-240
View File
@@ -1,240 +0,0 @@
<?php
/*
+---------------------------------------------------------------------------
| IP.Board v3.4.6
| ========================================
| by Matthew Mecham
| (c) 2008 Invision Power Services
| http://www.invisionpower.com
| ========================================
+---------------------------------------------------------------------------
| Invision Power Board IS NOT FREE SOFTWARE!
+---------------------------------------------------------------------------
| http://www.invisionpower.com/
| > $Id: 10039 2011-12-20 19:49:28Z mmecham $
| > $Revision: 10039 $
| > $Date: 2011-12-20 14:49:28 -0500 (Tue, 20 Dec 2011) $
+---------------------------------------------------------------------------
*/
@set_time_limit( 3600 );
/**
* Main public executable wrapper.
*
* Set-up and load module to run
*
* @package IP.Board
* @author Matt Mecham
* @version 3.0
*/
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
elseif ( is_file( '../initdata.php' ) )
{
require_once( '../initdata.php' );/*noLibHook*/
}
else
{
require_once( 'initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
private $processed = 0;
private $parser;
private $oldparser;
private $start = 0;
private $end = 0;
const TOPICS_PER_GO = 100;
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->memberData = array();
/* 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;
}
switch( $this->request['do'] )
{
case 'process':
$this->process();
break;
default:
$this->splash();
break;
}
}
function show( $content, $url='' )
{
if ( $url )
{
$firstBit = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
$refresh = "<meta http-equiv='refresh' content='0; url={$firstBit}?{$url}'>";
}
if ( is_array( $content ) )
{
$content = implode( "<br />", $content );
}
$html = <<<EOF
<html>
<head>
<title>Archive Update</title>
$refresh
</head>
<body>
$content
</body>
</html>
EOF;
print $html; exit();
}
/**
* SPLASH
*/
function splash()
{
$txt = '';
if ( ! $this->remoteDB->checkForField( 'archive_forum_id', 'forums_archive_posts' ) )
{
$PRE = trim(ipsRegistry::dbFunctions()->getPrefix());
$this->remoteDB->query('ALTER TABLE ' . $PRE . 'forums_archive_posts ADD archive_forum_id INT(10) NOT NULL DEFAULT 0;');
$txt = "Adding archive_forum_id field to your database - Done<br />";
}
$html = <<<EOF
<strong>Archive Update for IP.Board 3.3.1</strong>
<br />{$txt}
<a href="?do=process">Continue</a>
EOF;
$this->show( $html );
}
/**
* Process
*/
function process()
{
$id = intval( $this->request['id'] );
$lastId = 0;
$done = intval( $this->request['done'] );
$cycleDone = 0;
$content = array();
/* skipping? */
$total = $this->remoteDB->buildAndFetch( array( 'select' => 'count(*) as count',
'from' => 'forums_archive_posts' ) );
/* Fetch batch */
$this->remoteDB->build( array( 'select' => '*',
'from' => 'forums_archive_posts',
'where' => 'archive_topic_id > ' . $id,
'limit' => array( 0, self::TOPICS_PER_GO ),
'order' => 'archive_topic_id ASC' ) );
$o = $this->remoteDB->execute();
while( $row = $this->remoteDB->fetch( $o ) )
{
$cycleDone++;
$lastId = $row['archive_topic_id'];
$content[] = "Updating topics " . ( $done + $cycleDone ) . " (archive_topic_id: " . $row['archive_topic_id'] . ") of " . $total['count'];
/* Fetch the forum ID */
$topic = $this->DB->buildAndFetch( array( 'select' => 'forum_id',
'from' => 'topics',
'where' => 'tid=' . intval( $row['archive_topic_id'] ) ) );
if ( $topic['forum_id'] )
{
$this->remoteDB->update( 'forums_archive_posts', array( 'archive_forum_id' => $topic['forum_id'] ), 'archive_topic_id=' . $row['archive_topic_id'] );
}
}
/* More? */
if ( $cycleDone )
{
/* Reset */
$done += $cycleDone;
$this->show( $content, "do=process&id=" . $lastId . "&done=" . $done );
}
else
{
$this->show( "Process complete" );
return;
}
}
}
?>
-252
View File
@@ -1,252 +0,0 @@
<?php
/*
+---------------------------------------------------------------------------
| IP.Board v3.4.6
| ========================================
| by Matthew Mecham
| (c) 2008 Invision Power Services
| http://www.invisionpower.com
| ========================================
+---------------------------------------------------------------------------
| Invision Power Board IS NOT FREE SOFTWARE!
+---------------------------------------------------------------------------
| http://www.invisionpower.com/
| > $Id: 10039 2011-12-20 19:49:28Z mmecham $
| > $Revision: 10039 $
| > $Date: 2011-12-20 14:49:28 -0500 (Tue, 20 Dec 2011) $
+---------------------------------------------------------------------------
*/
@set_time_limit( 3600 );
/**
* Main public executable wrapper.
*
* Set-up and load module to run
*
* @package IP.Board
* @author Matt Mecham
* @version 3.0
*/
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
elseif ( is_file( '../initdata.php' ) )
{
require_once( '../initdata.php' );/*noLibHook*/
}
else
{
require_once( 'initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
private $processed = 0;
private $parser;
private $oldparser;
private $start = 0;
private $end = 0;
const TOPICS_PER_GO = 100;
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->memberData = array();
/* 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;
}
switch( $this->request['do'] )
{
case 'process':
$this->process();
break;
default:
$this->splash();
break;
}
}
function show( $content, $url='' )
{
if ( $url )
{
$firstBit = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
$refresh = "<meta http-equiv='refresh' content='0; url={$firstBit}?{$url}'>";
}
if ( is_array( $content ) )
{
$content = implode( "<br />", $content );
}
$html = <<<EOF
<html>
<head>
<title>Archive Update</title>
$refresh
</head>
<body>
$content
</body>
</html>
EOF;
print $html; exit();
}
/**
* SPLASH
*/
function splash()
{
$txt = '';
$html = <<<EOF
<strong>Archive Update for IP.Board 3.3.3</strong>
<br />{$txt}
<a href="?do=process">Continue</a>
EOF;
$this->show( $html );
}
/**
* Process
*/
function process()
{
$data = $this->getRestoreData();
$topics = array();
$this->DB->build( array( 'select' => 'tid',
'from' => 'topics',
'where' => 'topic_archive_status=4' ) );
$this->DB->execute();
while( $row = $this->DB->fetch() )
{
$topics[ $row['tid'] ] = $row['tid'];
}
/* get maxes */
if ( count( $topics ) )
{
$this->DB->build( array( 'select' => 'topic_id, max(pid) as max',
'from' => 'posts',
'where' => 'topic_id IN( ' . implode( ',', $topics ) . ')',
'group' => 'topic_id' ) );
$this->DB->execute();
while( $row = $this->DB->fetch() )
{
$topics[ $row['topic_id'] ] = $row['max'];
}
}
$data['restore_manual_tids'] = $topics;
$this->setRestoreData( $data );
$this->show( "Process complete" );
}
/**
* 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 );
}
}
?>
-166
View File
@@ -1,166 +0,0 @@
<?php
/*
+---------------------------------------------------------------------------
| IP.Board v3.4.6
| ========================================
| by Matthew Mecham
| (c) 2008 Invision Power Services
| http://www.invisionpower.com
| ========================================
+---------------------------------------------------------------------------
| Invision Power Board IS NOT FREE SOFTWARE!
+---------------------------------------------------------------------------
| http://www.invisionpower.com/
| > $Id: 10039 2011-12-20 19:49:28Z mmecham $
| > $Revision: 10039 $
| > $Date: 2011-12-20 14:49:28 -0500 (Tue, 20 Dec 2011) $
+---------------------------------------------------------------------------
*/
@set_time_limit( 3600 );
/**
* Main public executable wrapper.
*
* Set-up and load module to run
*
* @package IP.Board
* @author Matt Mecham
* @version 3.0
*/
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
elseif ( is_file( '../initdata.php' ) )
{
require_once( '../initdata.php' );/*noLibHook*/
}
else
{
require_once( 'initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
private $processed = 0;
private $parser;
private $oldparser;
private $start = 0;
private $end = 0;
const TOPICS_PER_GO = 100;
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->memberData = array();
switch( $this->request['do'] )
{
case 'media':
$this->media();
break;
default:
$this->splash();
break;
}
}
function show( $content, $url='' )
{
if ( $url )
{
$firstBit = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
$refresh = "<meta http-equiv='refresh' content='0; url={$firstBit}?{$url}'>";
}
if ( is_array( $content ) )
{
$content = implode( "<br />", $content );
}
$html = <<<EOF
<html>
<head>
<title>3.4.x Post Repair</title>
$refresh
</head>
<body>
$content
</body>
</html>
EOF;
print $html; exit();
}
/**
* SPLASH
*/
function splash()
{
$txt = '';
$html = <<<EOF
<strong>Please select a tool</strong>
<br />{$txt}
<a href="?do=media">Fix MEDIA (Youtube, etc)</a>
EOF;
$this->show( $html );
}
/**
* Fix up media stuffs
*/
function media()
{
$this->DB->build( array( 'select' => '*',
'from' => 'posts',
'where' => "post LIKE '%<object%'" ) );
$o = $this->DB->execute();
while( $row = $this->DB->fetch( $o ) )
{
$original = $row['post'];
preg_match_all( '#<object(.+?)</object>#i', $row['post'], $matches, PREG_SET_ORDER );
foreach( $matches as $val )
{
preg_match( '#http(?:s)?://(?:www.)?youtube.com/v/([\d\w-_]{4,})(&\S+?)?#', $row['post'], $matches );
if ( $matches[1] )
{
$row['post'] = str_replace( $val[0], '[media]http://youtube.com/watch?v=' . $matches[1] . '[/media]', $row['post'] );
}
}
if ( $row['post'] && $row['pid'] && ( $original != $row['post'] ) )
{
$this->DB->update( 'posts', array( 'post' => $row['post'] ), 'pid=' . intval( $row['pid'] ) );
$output .= "Fixed Post Id: " . $row['pid'] . '<br />';
}
}
$this->show( "<h2>Complete</h2>" . $output );
}
}
?>
-236
View File
@@ -1,236 +0,0 @@
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Main public executable wrapper.
* Set-up and load module to run
* Last Updated: $Date: 2011-03-31 11:17:44 +0100 (Thu, 31 Mar 2011) $
* </pre>
*
* @author $Author: ips_terabyte $
* @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: 8229 $
*
*/
define( 'IPB_THIS_SCRIPT', 'admin' );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->_doLang();
$this->_doSkins();
}
/**
* Rebuild langs
*/
protected function _doSkins()
{
/* INIT */
$start = time();
$output = array();
$errors = array();
/* Grab class */
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinFunctions.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinCaching.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinImportExport.php' );/*noLibHook*/
$skinFunctions = new skinImportExport( $this->registry );
/* Grab skin data */
$this->DB->build( array( 'select' => '*',
'from' => 'skin_collections' ) );
$this->DB->execute();
while( $row = $this->DB->fetch() )
{
/* Bit of jiggery pokery... */
if ( $row['set_key'] == 'default' )
{
$row['set_key'] = 'root';
$row['set_id'] = 0;
}
$skinSets[ $row['set_key'] ] = $row;
}
/* Templates */
foreach( ipsRegistry::$applications as $appDir => $appData )
{
foreach( $skinSets as $skinKey => $skinData )
{
$_PATH = IPSLib::getAppDir( $appDir ) . '/xml/';
$output[] = "Upgrading {$skinData['set_name']} for $appDir templates...";
if ( is_file( $_PATH . $appDir . '_' . $skinKey . '_templates.xml' ) )
{
//-----------------------------------------
// Install
//-----------------------------------------
$return = $skinFunctions->importTemplateAppXML( $appDir, $skinKey, $skinData['set_id'], TRUE );
$output[] = intval( $return['insertCount'] ) . " added, " . intval( $return['updateCount'] ) . " templates updated";
}
if ( is_file( $_PATH . $appDir . '_' . $skinKey . '_css.xml' ) )
{
//-----------------------------------------
// Install
//-----------------------------------------
$return = $skinFunctions->importCSSAppXML( $appDir, $skinKey, $skinData['set_id'] );
$output[] = intval( $return['insertCount'] ) . " {$skinData['set_name']} CSS files inserted";
}
}
}
/* Replacements */
foreach( $skinSets as $skinKey => $skinData )
{
if ( is_file( IPS_ROOT_PATH . 'setup/xml/skins/replacements_' . $skinKey . '.xml' ) )
{
$skinFunctions->importReplacementsXMLArchive( file_get_contents( IPS_ROOT_PATH . 'setup/xml/skins/replacements_' . $skinKey . '.xml' ), $skinKey );
$output[] = $skinKey . " replacements rebuilt";
}
}
/* reset ID */
//$skinSets['root']['set_id'] = 1;
/* Recache */
foreach( $skinSets as $skinKey => $skinData )
{
$skinFunctions->rebuildPHPTemplates( $skinData['set_id'] );
if ( $skinFunctions->fetchErrorMessages() !== FALSE )
{
$output[] = implode( "<br />", $skinFunctions->fetchErrorMessages() );
}
$skinFunctions->rebuildCSS( $skinData['set_id'] );
if ( $skinFunctions->fetchErrorMessages() !== FALSE )
{
$output[] = implode( "<br />", $skinFunctions->fetchErrorMessages() );
}
$skinFunctions->rebuildReplacementsCache( $skinData['set_id'] );
if ( $skinFunctions->fetchErrorMessages() !== FALSE )
{
$output[] = implode( "<br />", $skinFunctions->fetchErrorMessages() );
}
$output[] = $skinKey . " recached";
}
/* recache other */
$skinFunctions->rebuildSkinSetsCache();
$this->_print( implode( "\n", $output ) );
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "COMPLETE. Took " . $tkn . "m\n" );
}
/**
* Rebuild langs
*/
protected function _doLang()
{
/* Grab class */
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/languages/manage_languages.php' );/*noLibHook*/
$lang = new admin_core_languages_manage_languages( $this->registry );
$lang->makeRegistryShortcuts( $this->registry );
$start = time();
foreach( ipsRegistry::$applications as $app => $app_data )
{
$output[] = "Upgrading ADMIN languages...";
$_PATH = IPSLib::getAppDir( $app ) . '/xml/';
/* Loop through the xml directory and look for lang packs */
try
{
foreach( new DirectoryIterator( $_PATH ) as $f )
{
if( preg_match( "#(admin|public)_(.+?)_language_pack.xml#", $f->getFileName() ) )
{
//-----------------------------------------
// Import and cache
//-----------------------------------------
$output[] = "Importing " . $f->getFileName();
$this->request['file_location'] = $_PATH . $f->getFileName();
$lang->imprtFromXML( true, true, true, $app );
}
}
} catch ( Exception $e ) {}
}
$this->_print( implode( "\n", $output ) );
$this->_print( "\nAll languages imported and recached" );
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "\COMPLETE. Took " . $tkn . "m\n" );
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
print nl2br( preg_replace( "#\n{1,}#", "\n", $message ) );
}
}
exit();
?>
-303
View File
@@ -1,303 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Main public executable wrapper.
* Set-up and load module to run
* Last Updated: $Date: 2012-06-06 15:26:34 -0400 (Wed, 06 Jun 2012) $
* </pre>
*
* @author $Author: ips_terabyte $
* @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: 10878 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'admin' );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
elseif ( is_file( '../initdata.php' ) )
{
require_once( '../initdata.php' );/*noLibHook*/
}
else
{
require_once( 'initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->stdin = fopen('php://stdin', 'r');
$this->_print( "--------------------------------------------\nWelcome to the IP.Board Shell Get Stuff Ready For Release Tool\n--------------------------------------------\n" );
$this->_print( "What do you wish to do? [l=Rebuild and Export Lang, s=Rebuild and Export Skins, a=Both]\nEnter: " );
$option = $this->_fetchOption();
switch( $option )
{
case 'l':
$this->_doLang();
break;
case 's':
$this->_doSkins();
break;
case 'a':
$this->_doLang();
$this->_doSkins();
break;
default:
$this->_print( "\nIncorrect option" );
exit();
break;
}
}
/**
* Rebuild langs
*/
protected function _doSkins()
{
/* INIT */
$start = time();
$messages = array();
$errors = array();
/* Grab class */
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinFunctions.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinCaching.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinImportExport.php' );/*noLibHook*/
$this->skinFunctions = new skinImportExport( $this->registry );
/* This is which skins we want to export for default installations */
$skinIDs = array_values( $this->skinFunctions->remapData['export'] );
//-----------------------------------------
// Can do .. stuff?
//-----------------------------------------
if ( ! is_writable( IPS_ROOT_PATH . 'setup/xml/skins' ) )
{
$this->_print( 'Cannot write to /admin/setup/xml/skins' );
exit();
}
//-----------------------------------------
// Rebuild stuff
//-----------------------------------------
foreach( $skinIDs as $id )
{
$msg = $this->skinFunctions->rebuildMasterCSS( $id );
$messages[] = "<strong>CSS Rebuilt for $id</strong>";
$messages = array_merge( $messages, $msg, $this->skinFunctions->fetchMessages( TRUE ) );
$errors = array_merge( $errors , $this->skinFunctions->fetchErrorMessages( TRUE ) );
$msg = $this->skinFunctions->rebuildMasterFromPHP( $id );
$messages[] = "<strong>HTML Rebuilt for $id</strong>";
$messages = array_merge( $messages, $msg, $this->skinFunctions->fetchMessages( TRUE ) );
$errors = array_merge( $errors , $this->skinFunctions->fetchErrorMessages( TRUE ) );
$msg = $this->skinFunctions->rebuildMasterReplacements( $id );
$messages[] = "<strong>Replacements Rebuilt for $id</strong>";
$messages = array_merge( $messages, (array)$msg, $this->skinFunctions->fetchMessages( TRUE ) );
$errors = array_merge( $errors , $this->skinFunctions->fetchErrorMessages( TRUE ) );
}
/* Got any errors? */
if ( count( $errors ) )
{
$this->_print( 'ERROR: ' . implode( "\n *", $errors ) );
//exit();
}
$this->skinFunctions->rebuildTreeInformation();
$this->skinFunctions->rebuildSkinSetsCache();
//-----------------------------------------
// Rebuild skin caches
//-----------------------------------------
foreach( $skinIDs as $id )
{
$setData = $this->skinFunctions->fetchSkinData( $id );
$key = $setData['set_key'];
if ( $id > 0 )
{
$this->skinFunctions->rebuildPHPTemplates( $id );
$messages[] = "<strong>PHP Templates Recached for $key</strong>";
$messages = array_merge( $messages, $this->skinFunctions->fetchMessages( TRUE ) );
$errors = array_merge( $errors , $this->skinFunctions->fetchErrorMessages( TRUE ) );
$this->skinFunctions->rebuildCSS( $id );
$messages[] = "<strong>CSS Recached for $key</strong>";
$messages = array_merge( $messages, $this->skinFunctions->fetchMessages( TRUE ) );
$errors = array_merge( $errors , $this->skinFunctions->fetchErrorMessages( TRUE ) );
$this->skinFunctions->rebuildReplacementsCache( $id );
$messages[] = "<strong>Replacements Recached for $key</strong>";
$messages = array_merge( $messages, $this->skinFunctions->fetchMessages( TRUE ) );
$errors = array_merge( $errors , $this->skinFunctions->fetchErrorMessages( TRUE ) );
}
/* Build and write XML files for replacements and CSS */
$replacementsXML = $this->skinFunctions->generateReplacementsXML( $id, FALSE );
@unlink( IPS_ROOT_PATH . 'setup/xml/skins/replacements_' . $key . '.xml', $replacementsXML );
if ( $replacementsXML )
{
if ( ! @file_put_contents( IPS_ROOT_PATH . 'setup/xml/skins/replacements_' . $key . '.xml', $replacementsXML ) )
{
$errors[] = "Cannot write: " . IPS_ROOT_PATH . 'setup/xml/skins/replacements_' . $key . '.xml';
}
else
{
$messages[] = "Written: " . IPS_ROOT_PATH . 'setup/xml/skins/replacements_' . $key . '.xml';
}
}
/* Export all CSS - Function loops through all skin sets */
$this->skinFunctions->exportAllAppCSS( $id );
$messages[] = "<strong>App CSS Written For $key</strong>";
$messages = array_merge( $messages, $this->skinFunctions->fetchMessages( TRUE ) );
$errors = array_merge( $errors , $this->skinFunctions->fetchErrorMessages( TRUE ) );
/* Export all CSS - Function loops through all skin sets */
$this->skinFunctions->exportAllAppTemplates( $id );
$messages[] = "<strong>App XML Written For $key</strong>";
$messages = array_merge( $messages, $this->skinFunctions->fetchMessages( TRUE ) );
$errors = array_merge( $errors , $this->skinFunctions->fetchErrorMessages( TRUE ) );
/* Got any errors? */
if ( count( $errors ) )
{
$this->_print( 'ERROR: ' . implode( "\n *", $errors ) );
//exit();
}
}
/* Generate skin sets XML */
$skinSetXML = $this->skinFunctions->generateMasterSkinSetXML( $skinIDs );
@unlink( IPS_ROOT_PATH . 'setup/xml/skins/setsData.xml' );
if ( ! @file_put_contents( IPS_ROOT_PATH . 'setup/xml/skins/setsData.xml', $skinSetXML ) )
{
$errors[] = "Cannot write:: " . IPS_ROOT_PATH . 'setup/xml/skins/setsData.xml';
}
else
{
$messages[] = "Written: " . IPS_ROOT_PATH . 'setup/xml/skins/setsData.xml';
}
$this->_print( implode( "\n", $messages ) );
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "COMPLETE. Took " . $tkn . "m\n" );
}
/**
* Rebuild langs
*/
protected function _doLang()
{
/* Grab class */
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/languages/manage_languages.php' );/*noLibHook*/
$lang = new admin_core_languages_manage_languages( $this->registry );
$lang->makeRegistryShortcuts( $this->registry );
$start = time();
foreach( ipsRegistry::$applications as $app => $app_data )
{
$this->_print("\nStarting App: " . $app_data['app_title'] );
$_start = time();
/* Stuff the post array */
$_POST['apps'] = array( $app => $app );
$msgs = $lang->importFromCacheFiles( FALSE );
$_end = time();
$_tkn = ( $_end - $_start) / 60;
$this->_print( "\nDone. Took " . $_tkn . "m\n" . implode( "\n", $msgs ) );
}
$this->_print( "\nAll languages imported" );
foreach( ipsRegistry::$applications as $app_dir => $app_data )
{
$this->_print("\nExporting XML for App: " . $app_data['app_title'] );
$this->request['app_dir'] = $app_dir;
$this->request['type'] = 'admin';
$lang->languageExportToXML( 1, 1 );
$this->request['type'] = 'public';
$lang->languageExportToXML( 1, 1 );
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "\nCOMPLETE. Took " . $tkn . "m\n" );
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
?>
-285
View File
@@ -1,285 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Rebuilds stuff from XML
* Last Updated: $Date: 2012-06-06 15:26:34 -0400 (Wed, 06 Jun 2012) $
* </pre>
*
* @author $Author: ips_terabyte $
* @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: 10878 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'admin' );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
elseif ( is_file( '../initdata.php' ) )
{
require_once( '../initdata.php' );/*noLibHook*/
}
else
{
require_once( 'initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
/* Ensure it's CLI */
$cli = php_sapi_name() === 'cli';
if ( ! $cli )
{
print "<html><head><title>Warning</title></head>\n";
print "<body style='text-align:center'>\n";
print "This script is meant to be run via command line<br />\n";
print "More information:<br />\n";
print "<a href=\"http://www.google.com/search?hl=en&q=php+cli+windows\" target=\"_blank\">http://www.google.com/search?hl=en&q=php+cli+windows</a><br />\n";
print "This script will not run through a webserver.<br />\n";
print "</body></html>\n";
exit();
}
print "\n ";
print "\n (_) _ __ ____ ";
print "\n | || '_ \ / ___' ";
print "\n | || |_) | \__. ";
print "\n | || .__/.\___ \ ";
print "\n |_||_| |_______/ \n\n";
$moo = new moo( $reg );
class moo
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->stdin = fopen('php://stdin', 'r');
$this->_print( "--------------------------------------------\nWelcome to the IN_DEV build tool" );
$this->_print( "This tool will create the required directories and files to run in IN_DEV\n--------------------------------------------\n" );
/* Is IN_DEV on? */
if ( ! IN_DEV )
{
$this->_print( "IN_DEV is not on. Please edit 'conf_global.php' and add: define( 'IN_DEV', 1 );" );
exit();
}
/* Can we write into require folders? */
$req = array( 'cache', 'cache/skin_cache', 'cache/lang_cache', 'cache/lang_cache/1', PUBLIC_DIRECTORY . '/style_css' );/*noLibHook*/
$stop = false;
foreach( $req as $r )
{
if ( ! is_dir( DOC_IPS_ROOT_PATH . $r ) )
{
$this->_print( "Cannot locate: $r - please CHMOD appropriately and re-run" );
$stop = true;
}
if ( ! is_writable( DOC_IPS_ROOT_PATH . $r ) )
{
$this->_print( "Cannot write to: $r - please CHMOD appropriately and re-run" );
$stop = true;
}
}
if ( $stop )
{
exit();
}
$this->_print( "Hit Any Key To Continue: " );
$option = $this->_fetchOption();
/* Export all skins required */
$this->_doSkins();
/* Export all language bits */
$this->_doLang();
}
/**
* Rebuild skins
*/
protected function _doSkins()
{
/* INIT */
$start = time();
$output = array();
$errors = array();
/* Grab class */
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinFunctions.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinCaching.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinImportExport.php' );/*noLibHook*/
$skinFunctions = new skinImportExport( $this->registry );
/* Fetch master dirs */
$master = $skinFunctions->fetchMasterKeys();
if ( ! count( $master ) )
{
$this->_print( "Could not locate any master skin keys" );
exit();
}
/* PHP */
foreach( $master as $m )
{
$path = ( $m == 'root' ) ? IPS_CACHE_PATH . 'cache/skin_cache/master_skin' : IPS_CACHE_PATH . 'cache/skin_cache/master_skin_' . $m;
$path = ( $m == 'xmlskin' ) ? IPS_CACHE_PATH . 'cache/skin_cache/master_skin_xml' : $path;
if ( is_dir( $path ) )
{
$this->_print( "$path already exists..." );
continue;
}
if ( ! mkdir( $path, IPS_FOLDER_PERMISSION ) )
{
$this->_print( "Could not create $path" );
exit();
}
else
{
@chmod( $path, IPS_FOLDER_PERMISSION );
$this->_print( "$path created..." );
}
}
/* CSS */
foreach( $master as $m )
{
$path = ( $m == 'root' ) ? DOC_IPS_ROOT_PATH . PUBLIC_DIRECTORY . '/style_css/master_css' : DOC_IPS_ROOT_PATH . PUBLIC_DIRECTORY . '/style_css/master_css_' . $m;
$path = ( $m == 'xmlskin' ) ? DOC_IPS_ROOT_PATH . PUBLIC_DIRECTORY . '/style_css/master_css_xml' : $path;
if ( is_dir( $path ) )
{
$this->_print( "$path already exists..." );
continue;
}
if ( ! mkdir( $path, IPS_FOLDER_PERMISSION ) )
{
$this->_print( "Could not create $path" );
exit();
}
else
{
@chmod( $path, IPS_FOLDER_PERMISSION );
$this->_print( "$path created..." );
}
}
/* Now create master dirs for PHP */
foreach( $master as $m )
{
$dir = ( $m == 'root' ) ? 'master_skin' : 'master_skin_' . $m;
$dir = ( $m == 'xmlskin' ) ? 'master_skin_xml' : $dir;
$skinFunctions->writeMasterSkin( $m, $dir );
$this->_print( "PHP templates written for $m" );
}
/* Now create master dirs for CSS */
foreach( $master as $m )
{
$dir = ( $m == 'root' ) ? 'master_css' :'master_css_' . $m;
$dir = ( $m == 'xmlskin' ) ? 'master_css_xml' : $dir;
$skinFunctions->writeMasterSkinCss( $m, $dir );
$this->_print( "CSS written for $m" );
}
/* Now create master dirs for replacements */
foreach( $master as $m )
{
$dir = ( $m == 'root' ) ? 'master_skin' : 'master_skin_' . $m;
$dir = ( $m == 'xmlskin' ) ? 'master_skin_xml' : $dir;
$skinFunctions->writeMasterSkinReplacements( $m, $dir );
$this->_print( "Replacements written for $m" );
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "COMPLETE. Took " . $tkn . "m\n" );
}
/**
* Rebuild langs
*/
protected function _doLang()
{
/* INIT */
$start = time();
/* Grab class */
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/languages/manage_languages.php' );/*noLibHook*/
$lang = new admin_core_languages_manage_languages( $this->registry );
$lang->makeRegistryShortcuts( $this->registry );
$lang->cacheToDisk( 'master' );
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "Master languages written" );
$this->_print( "COMPLETE. Took " . $tkn . "m\n" );
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
?>
-283
View File
@@ -1,283 +0,0 @@
<?php
define( 'IPB_VERSION', '3.4' );
?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>IP.Board <?php print IPB_VERSION; ?> - Requirements Checker</title>
<style type='text/css'>
.pass {
color: green;
font-weight: bold;
}
.fail {
color: red;
font-weight: bold;
}
.warn {
color: orange;
font-weight: bold;
}
.what-you-should-do {
color: grey;
font-size: 12px;
font-style: italic;
padding-left: 15px;
}
h1 {
border-bottom: 1px solid black;
}
p {
margin: 2px;
padding: 4px;
border-bottom: 1px dotted grey;
font-size: 15px;
font-family: "Arial, Verdana";
}
p.final {
border-bottom: 0px;
padding-top: 20px;
}
</style>
</head>
<body>
<h1>IP.Board <?php print IPB_VERSION; ?> Requirements Checker</h1>
<?php
$extensions = get_loaded_extensions();
$version = phpversion();
$minVersion = '5.2.0';
//-----------------------------------------
// Checking against required version
//-----------------------------------------
$checkRequiredVersion = version_compare( $minVersion, $version, '<=' );
flushOutput( "Checking minimum version ({$minVersion})...", $checkRequiredVersion, "You must be running PHP v{$minVersion} or greater to use IP.Board " . IPB_VERSION . ". You are currently running version {$version}. Please ask your host to move you to a server running PHP v{$minVersion} or greater." );
print "<p>You are running PHP <strong>{$version}</strong></p>";
//-----------------------------------------
// Check for zend guard
//-----------------------------------------
$hasZend = false;
$hasIoncube = false;
if ( function_exists( 'zend_loader_enabled' ) )
{
if ( @zend_loader_enabled() === true )
{
$hasZend = true;
}
}
if ( extension_loaded( 'ionCube Loader' ) )
{
$hasIoncube = true;
}
flushOutput( "IP.Nexus Only: Checking for ability to load Zend Guard encoded files...", $hasZend, "Not able to run the Zend encoded files for IP.Nexus." );
flushOutput( "IP.Nexus Only: Checking for ability to load Ioncube encoded files...", $hasIoncube, "Not able to run the Ioncube encoded files for IP.Nexus." );
flushOutput( "IP.Nexus Only: Can run IP.Nexus...", $hasZend or $hasIoncube, "Not able to run either Ioncube or Zend Encoded IP.Nexus files. You can still use IP.Board, IP.Downloads. IP.Blog, IP.Gallery, IP.Content, IP.Chat" );
//-----------------------------------------
// Memory limit
//-----------------------------------------
$_memLimit = null;
$_recLimit = 128;
if( @ini_get('memory_limit') )
{
$_memLimit = @ini_get('memory_limit');
}
if( $_memLimit )
{
$_intLimit = $_memLimit;
$_intRec = $_recLimit * 1024 * 1024;
preg_match( "#^(\d+)(\w+)$#", strtolower($_intLimit), $match );
if( $match[2] == 'g' )
{
$_intLimit = intval( $_intLimit ) * 1024 * 1024 * 1024;
}
else if ( $match[2] == 'm' )
{
$_intLimit = intval( $_intLimit ) * 1024 * 1024;
}
else if ( $match[2] == 'k' )
{
$_intLimit = intval( $_intLimit ) * 1024;
}
else
{
$_intLimit = intval( $_intLimit );
}
if( $_intLimit >= $_intRec )
{
flushOutput( "Checking memory limit ({$_recLimit}M or better recommended)...", true, "Your memory limit: {$_memLimit}" );
}
else
{
flushOutput( "Checking memory limit ({$_recLimit}M or better recommended)...", 2, "Your memory limit: {$_memLimit}. You can still proceed but we recommend you contact your host and request the memory limit be raised to {$_recLimit}M to prevent possible issues." );
}
}
else
{
flushOutput( "Checking memory limit ({$_recLimit}M or better recommended)...", 2, "Could not determine your memory limit" );
}
//-----------------------------------------
// Checking for SPL
//-----------------------------------------
$splExists = in_array( 'SPL', $extensions );
flushOutput( "Checking for SPL...", $splExists, "The PHP SPL extension is required for IP.Board " . IPB_VERSION . ". Please ask your host to install the <a href='http://www.php.net/manual/en/spl.setup.php'>SPL library</a>." );
//-----------------------------------------
// Checking for DOM XML
//-----------------------------------------
$domXML = in_array( 'dom', $extensions );
flushOutput( "Checking for DOM XML Handling...", $domXML, "The DOM XML Handling extension is required for IP.Board " . IPB_VERSION . ". Please ask your host to install the <a href='http://www.php.net/manual/en/dom.setup.php'>libxml2 library</a>." );
//-----------------------------------------
// Check for GD2
//-----------------------------------------
$gd2 = in_array( 'gd', $extensions );
flushOutput( "Checking for GD library...", $gd2, "The GD2 library is required for IP.Board " . IPB_VERSION . ". Please ask your host to install the <a href='http://us.php.net/manual/en/image.setup.php'>libgd library</a>." );
if( function_exists( 'gd_info' ) )
{
$gdInfo = gd_info();
$fail = true;
if( $gdInfo["GD Version"] )
{
preg_match( "/.*?([\d\.]+).*?/", $gdInfo["GD Version"], $matches );
if( $matches[1] )
{
$compareVersions = version_compare( '2.0', $matches[1], '<=' );
if( !$compareVersions )
{
$fail = 2;
}
}
}
flushOutput( "Checking for GD2...", $fail, "While the GD library is installed, GD library version 2 is required for IP.Board " . IPB_VERSION . ". The version reported (if at all) by your server is '{$gdInfo['GD Version']}'. Please verify you are running GD version 2, and upgrade the <a href='http://us.php.net/manual/en/image.setup.php'>libgd library</a> if necessary." );
}
//-----------------------------------------
// Checking for mysql extension
//-----------------------------------------
$mysql = in_array( 'mysql', $extensions );
$mysqli = in_array( 'mysqli', $extensions );
flushOutput( "Checking for mysql support...", ( $mysql OR $mysqli ), "Your server does not appear to have a mysql library available, please ask your host to install the <a href='http://us.php.net/manual/en/mysqli.setup.php'>mysqli extension</a>." );
if( $mysql AND !$mysqli )
{
flushOutput( "Checking for mysqli support...", false, "The mysqli extension is preferred over the original mysql extension. This is not a requirement, but if possible we recommend you to install the <a href='http://us.php.net/manual/en/mysqli.setup.php'>mysqli extension</a> for better performance." );
}
//-----------------------------------------
// Checking for JSON
//-----------------------------------------
$json = in_array( 'json', $extensions );
flushOutput( "Checking for JSON...", $json, "While not required, the PHP JSON extension is recommended. The JSON extensions provides for improved efficiency in handling some functionality in IP.Board. If possible, we recommend you to install the <a href='http://us.php.net/manual/en/json.setup.php'>json extension</a>." );
//-----------------------------------------
// Checking for openSSL
//-----------------------------------------
$openssl = in_array( 'openssl', $extensions ) ? true : 2;
flushOutput( "Checking for openSSL...", $openssl, "OpenSSL is required for some Facebook, Twitter, and Subscription Manager functionality. If you do not use any of these modules, you do not need this module, otherwise we recommend you to install the <a href='http://us2.php.net/manual/en/openssl.installation.php'>openssl extension</a>." );
//-----------------------------------------
// Suhosin
//-----------------------------------------
if( extension_loaded( 'suhosin' ) )
{
$_postMaxVars = @ini_get('suhosin.post.max_vars');
$_reqMaxVars = @ini_get('suhosin.request.max_vars');
$_getMaxLen = @ini_get('suhosin.get.max_value_length');
$_postMaxLen = @ini_get('suhosin.post.max_value_length');
$_reqMaxLen = @ini_get('suhosin.request.max_value_length');
$_reqMaxVar = @ini_get('suhosin.request.max_varname_length');
$_indPMV = $_postMaxVars < 4096 ? 2 : true;
$_indRMV = $_reqMaxVars < 4096 ? 2 : true;
$_indGML = $_getMaxLen < 2000 ? 2 : true;
$_indPML = $_postMaxLen < 1000000 ? 2 : true;
$_indRML = $_reqMaxLen < 1000000 ? 2 : true;
$_indRMVL = $_reqMaxVar < 350 ? 2 : true;
flushOutput( "suhosin.post.max_vars (4096 or better recommended)...", $_indPMV, "Your value: {$_postMaxVars}. Can prevent some forms (especially in the ACP) from saving properly." );
flushOutput( "suhosin.request.max_vars (4096 or better recommended)...", $_indRMV, "Your value: {$_reqMaxVars}. Can prevent some forms (especially in the ACP) from saving properly." );
flushOutput( "suhosin.get.max_value_length (2000 or better recommended)...", $_indGML, "Your value: {$_postMaxLen}. Can prevent very long URLs from loading correctly." );
flushOutput( "suhosin.post.max_value_length (1000000 or better recommended)...", $_indPML, "Your value: {$_postMaxLen}. Can prevent very large posts or other form submissions from saving properly." );
flushOutput( "suhosin.request.max_value_length (1000000 or better recommended)...", $_indRML, "Your value: {$_reqMaxLen}. Can prevent very large posts or other form submissions from saving properly." );
flushOutput( "suhosin.request.max_varname_length (350 or better recommended)...", $_indRMVL, "Your value: {$_reqMaxVar}. Can prevent long friendly URLs from loading correctly." );
}
//-----------------------------------------
// Flush output function
//-----------------------------------------
function flushOutput( $checking, $result, $errorText )
{
print "<p>" . $checking;
if( $result === 2 )
{
print "<span class='warn'>WARNING</span><br /><span class='what-you-should-do'>{$errorText}</span>";
}
else if( !$result )
{
print "<span class='fail'>FAIL</span><br /><span class='what-you-should-do'>{$errorText}</span>";
}
else
{
print "<span class='pass'>Pass</span>";
}
print "</p>";
flush();
ob_flush();
return true;
}
?>
<p class='final'>Please also remember that MySQL 4.1 or higher (MySQL 5.0 or higher preferred) is required for IP.Board <?php print IPB_VERSION; ?>. Ask your server administrator to check the version of MySQL on your server if you are unsure.</p>
</body>
</html>
-200
View File
@@ -1,200 +0,0 @@
<?php
/*
+---------------------------------------------------------------------------
| IP.Board v3.4.6
| ========================================
| by Matthew Mecham
| (c) 2008 Invision Power Services
| http://www.invisionpower.com
| ========================================
+---------------------------------------------------------------------------
| Invision Power Board IS NOT FREE SOFTWARE!
+---------------------------------------------------------------------------
| http://www.invisionpower.com/
| > $Id: galleryRebuild4_php.php 10039 2011-12-20 19:49:28Z mmecham $
| > $Revision: 10039 $
| > $Date: 2011-12-20 14:49:28 -0500 (Tue, 20 Dec 2011) $
+---------------------------------------------------------------------------
*/
@set_time_limit( 3600 );
/**
* Main public executable wrapper.
*
* Set-up and load module to run
*
* @package IP.Board
* @author Matt Mecham
* @version 3.0
*/
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
private $processed = 0;
private $parser;
private $oldparser;
private $start = 0;
private $end = 0;
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->memberData = array();
switch( $this->request['do'] )
{
case 'save':
$this->save();
break;
default:
$this->splash();
break;
}
}
function show( $content, $url='' )
{
if ( $url )
{
$firstBit = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];
$refresh = "<meta http-equiv='refresh' content='0; url={$firstBit}?{$url}'>";
}
if ( is_array( $content ) )
{
$content = implode( "<br />", $content );
}
$html = <<<EOF
<html>
<head>
<title>Group Edit BitWise</title>
$refresh
</head>
<body>
$content
</body>
</html>
EOF;
print $html; exit();
}
/**
* SPLASH
*/
function splash()
{
/* Unpack bitwise fields */
$_tmp = IPSBWOptions::thaw( 0, 'groups', 'global' );
$groups = $this->caches['group_cache'];
foreach( $_tmp as $k => $v )
{
$radio .= "<tr>
<td><strong>{$k}</strong></td>
<td><input type='radio' name='bitwise[$k]' value='leave' checked='checked' /> <em>Leave as per group</em></td>
<td><input type='radio' name='bitwise[$k]' value='1' /> <span style='color:green'>ON</span></td>
<td><input type='radio' name='bitwise[$k]' value='0' /> <span style='color:red'>OFF</span></td>
</tr>";
}
foreach( $groups as $id => $data )
{
$groupHTML .= "<div><input type='checkbox' name='groups[$id]' value='1' /> " . $data['g_title'] . "</div>\n";
}
$html = <<<EOF
<form action="?do=save" method="POST">
Bitwise Values
<table>{$radio}</table>
<br />
Apply to groups:
{$groupHTML}
<br />
<input type="submit" value="Save" />
</form>
EOF;
$this->show( $html );
}
/**
* Convert images
*/
function save()
{
$gids = $_POST['groups'];
$bitwise = $_POST['bitwise'];
$groups = $this->caches['group_cache'];
foreach( $gids as $id => $val )
{
$thisGroup = $groups[ $id ];
foreach( $bitwise as $k => $v )
{
if ( $v != 'leave' )
{
$thisGroup[ $k ] = intval( $v );
}
}
$g_bitoptions = IPSBWOPtions::freeze( $thisGroup, 'groups', 'global' );
$this->DB->update( 'groups', array( 'g_bitoptions' => $g_bitoptions ), 'g_id=' . $id );
}
$this->rebuildGroupCache();
$this->show('Done');
}
/**
* Rebuilds the group cache
*
* @return @e void
*/
public function rebuildGroupCache()
{
$cache = array();
$this->DB->build( array( 'select' => '*',
'from' => 'groups',
'order' => 'g_title ASC' ) );
$this->DB->execute();
while ( $i = $this->DB->fetch() )
{
$cache[ $i['g_id'] ] = IPSMember::unpackGroup( $i );
}
$this->cache->setCache( 'group_cache', $cache, array( 'array' => 1 ) );
}
}
?>
-56
View File
@@ -1,56 +0,0 @@
===============================================================
Ñêà÷àíî ñ ñàéòà www.Skripter.info
===============================================================
Ó íàñ íà ñàéòå Âû íàéäåòå:
Datalife Engine
Wordpress
Joomla
phpBB
IPB
vBulletin
Èãðîâûå CMS .....è ò.ä.
Âñå îò ìîäóëåé è øàáëîíîâ äî óðîêîâ ïî èíòåðåñóþùèì âàñ âîïðîñàì.
----------------------------------------------------------------
Äîáðî ïîæàëîâàòü íà íàø ñàéò !!!
----------------------------------------------------------------
Àäìèíèñòðàöèÿ ñàéòà Skripter.info
==============================================
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
===============================================================
Download from www.Skripter.info
===============================================================
At our site you will find:
Datalife Engine
Wordpress
Joomla
phpBB
IPB
vBulletin
Gaming CMS ..... etc.
All of the modules and templates to lessons on your questions.
----------------------------------------------------------------
Welcome to our site!
----------------------------------------------------------------
The website administration Skripter.info
==============================================
-268
View File
@@ -1,268 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Rebuilds stuff from XML
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
*
* @author $Author: bfarber $
* @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: 10721 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'admin' );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->stdin = fopen('php://stdin', 'r');
$this->_print( "--------------------------------------------\nWelcome to the IP.Board Shell Rebuild Stuff From XML Tool\n--------------------------------------------\n" );
$this->_print( "What do you wish to do? [l=Rebuild Lang, s=Rebuild Skins, b=Both]\nEnter: " );
$option = $this->_fetchOption();
switch( $option )
{
case 'l':
$this->_doLang();
break;
case 's':
$this->_doSkins();
break;
case 'b':
$this->_doLang();
$this->_doSkins();
break;
default:
$this->_print( "\nIncorrect option" );
exit();
break;
}
}
/**
* Rebuild langs
*/
protected function _doSkins()
{
/* INIT */
$start = time();
$output = array();
$errors = array();
/* Grab class */
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinFunctions.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinCaching.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/classes/skins/skinImportExport.php' );/*noLibHook*/
$skinFunctions = new skinImportExport( $this->registry );
/* Grab skin data */
$this->DB->build( array( 'select' => '*',
'from' => 'skin_collections' ) );
$this->DB->execute();
while( $row = $this->DB->fetch() )
{
/* Bit of jiggery pokery... */
if ( $row['set_key'] == 'default' )
{
$row['set_key'] = 'root';
$row['set_id'] = 0;
}
$skinSets[ $row['set_key'] ] = $row;
}
/* Templates */
foreach( ipsRegistry::$applications as $appDir => $appData )
{
foreach( $skinSets as $skinKey => $skinData )
{
$_PATH = IPSLib::getAppDir( $appDir ) . '/xml/';
$output[] = "Upgrading {$skinData['set_name']} for $appDir templates...";
if ( is_file( $_PATH . $appDir . '_' . $skinKey . '_templates.xml' ) )
{
//-----------------------------------------
// Install
//-----------------------------------------
$return = $skinFunctions->importTemplateAppXML( $appDir, $skinKey, $skinData['set_id'], TRUE );
$output[] = intval( $return['insertCount'] ) . " added, " . intval( $return['updateCount'] ) . " templates updated";
}
if ( is_file( $_PATH . $appDir . '_' . $skinKey . '_css.xml' ) )
{
//-----------------------------------------
// Install
//-----------------------------------------
$return = $skinFunctions->importCSSAppXML( $appDir, $skinKey, $skinData['set_id'] );
$output[] = intval( $return['insertCount'] ) . " {$skinData['set_name']} CSS files inserted";
}
}
}
/* Replacements */
foreach( $skinSets as $skinKey => $skinData )
{
if ( is_file( IPS_ROOT_PATH . 'setup/xml/skins/replacements_' . $skinKey . '.xml' ) )
{
$skinFunctions->importReplacementsXMLArchive( file_get_contents( IPS_ROOT_PATH . 'setup/xml/skins/replacements_' . $skinKey . '.xml' ), $skinKey );
$output[] = $skinKey . " replacements rebuilt";
}
}
/* reset ID */
$skinSets['root']['set_id'] = 1;
/* Recache */
foreach( $skinSets as $skinKey => $skinData )
{
$skinFunctions->rebuildPHPTemplates( $skinData['set_id'] );
if ( $skinFunctions->fetchErrorMessages() !== FALSE )
{
$output[] = implode( "<br />", $skinFunctions->fetchErrorMessages() );
}
$skinFunctions->rebuildCSS( $skinData['set_id'] );
if ( $skinFunctions->fetchErrorMessages() !== FALSE )
{
$output[] = implode( "<br />", $skinFunctions->fetchErrorMessages() );
}
$skinFunctions->rebuildReplacementsCache( $skinData['set_id'] );
if ( $skinFunctions->fetchErrorMessages() !== FALSE )
{
$output[] = implode( "<br />", $skinFunctions->fetchErrorMessages() );
}
$output[] = $skinKey . " recached";
}
/* recache other */
$skinFunctions->rebuildSkinSetsCache();
$this->_print( implode( "\n", $output ) );
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "COMPLETE. Took " . $tkn . "m\n" );
}
/**
* Rebuild langs
*/
protected function _doLang()
{
/* Grab class */
require_once( IPS_ROOT_PATH . 'applications/core/modules_admin/languages/manage_languages.php' );/*noLibHook*/
$lang = new admin_core_languages_manage_languages( $this->registry );
$lang->makeRegistryShortcuts( $this->registry );
$start = time();
foreach( ipsRegistry::$applications as $app => $app_data )
{
$output[] = "Upgrading ADMIN languages...";
$_PATH = IPSLib::getAppDir( $app ) . '/xml/';
/* Loop through the xml directory and look for lang packs */
try
{
foreach( new DirectoryIterator( $_PATH ) as $f )
{
if( preg_match( "#(admin|public)_(.+?)_language_pack.xml#", $f->getFileName() ) )
{
//-----------------------------------------
// Import and cache
//-----------------------------------------
$output[] = "Importing " . $f->getFileName();
$this->request['file_location'] = $_PATH . $f->getFileName();
$lang->imprtFromXML( true, true, true, $app );
}
}
} catch ( Exception $e ) {}
}
$this->_print( implode( "\n", $output ) );
$this->_print( "\nAll languages imported and recached" );
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "\COMPLETE. Took " . $tkn . "m\n" );
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
?>
-266
View File
@@ -1,266 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Main public executable wrapper.
* Set-up and load module to run
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
*
* @author $Author: bfarber $
* @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: 10721 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'admin' );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
/* Ensure it's CLI */
$cli = php_sapi_name() === 'cli';
if ( ! $cli )
{
print "<html><head><title>Warning</title></head>\n";
print "<body style='text-align:center'>\n";
print "This script is meant to be run via command line<br />\n";
print "More information:<br />\n";
print "<a href=\"http://www.google.com/search?hl=en&q=php+cli+windows\" target=\"_blank\">http://www.google.com/search?hl=en&q=php+cli+windows</a><br />\n";
print "This script will not run through a webserver.<br />\n";
print "</body></html>\n";
exit();
}
print "\n ";
print "\n (_) _ __ ____ ";
print "\n | || '_ \ / ___' ";
print "\n | || |_) | \__. ";
print "\n | || .__/.\___ \ ";
print "\n |_||_| |_______/ \n\n";
$moo = new moo( $reg );
class moo
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->stdin = fopen('php://stdin', 'r');
/* Gallery Object */
require_once( IPSLib::getAppDir('gallery') . '/sources/classes/gallery.php' );/*noLibHook*/
$registry->setClass( 'gallery', new ipsGallery( $registry ) );
$this->albums = $this->registry->gallery->helper('albums');
$this->images = $this->registry->gallery->helper('image');
$this->moderate = $this->registry->gallery->helper('moderate');
/* Load up gallery boyo */
$this->_print( "--------------------------------------------\nWelcome to the IP.Gallery Rebuild Tool\n--------------------------------------------\n" );
$this->_print( "[0] Rebuild All Albums Node Data (Node level, left and right indexes)" );
$this->_print( "[1] Rebuild Album Data (Cover image, comment counts, etc)" );
$this->_print( "[2] Rebuild Album Permissions (Ensures inherited permissions are OK)" );
$this->_print( "[3] Rebuild Image File Data (Thumbnail images, etc)" );
$this->_print( "[4] Rebuild Image SEO Data" );
$this->_print( "Enter Choice: ", "" );
$option = $this->_fetchOption();
if ( stristr( $option, 'look' ) )
{
$this->_print("\nYou see a forest full of shadows. In the distance smoke rises from a small building. There is a troll here." );
exit;
}
switch( $option )
{
case 0:
$this->_albumNodes();
break;
case 1:
$this->_albumData();
break;
case 2:
$this->_albumPermissions();
break;
case 3:
$this->_images();
break;
case 4:
$this->_seoImages();
break;
case 99:
$this->_print("\n100!");
break;
default:
$this->_print("\nThat wasn't a real option and I strongly believe you knew that");
break;
}
}
/**
* Rebuild All Nodes
*/
protected function _albumNodes()
{
$this->albums->rebuildNodeTree();
$this->_print("Node Tree rebuilt");
exit();
}
/**
* Rebuild All Permissions
*/
protected function _albumPermissions()
{
$this->moderate->resetPermissions(0);
$this->_print("Permissions rebuilt");
exit();
}
/**
* Rebuild All Album Data
*/
protected function _albumData()
{
$done = 0;
$this->DB->build( array( 'select' => '*',
'from' => 'gallery_albums_main',
'where' => '1=1' ) );
$o = $this->DB->execute();
while( $row = $this->DB->fetch( $o ) )
{
$done++;
$this->albums->resync( $row );
}
$this->_print("Album Data rebuilt");
exit();
}
/**
* Rebuild Images
*/
protected function _images()
{
/* INIT */
$start = time();
$done = 0;
$this->DB->build( array( 'select' => '*',
'from' => 'gallery_images',
'order' => 'id ASC' ) );
$o = $this->DB->execute();
while( $row = $this->DB->fetch( $o ) )
{
$done++;
$this->images->resync( $row );
$this->images->buildSizedCopies( $row );
if ( $done % 50 == 0 )
{
$this->_print( "Completed... " . $done . " (IMG ID=" . $row['id'] . " total=" . ( $done ) . ")" );
}
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "Finished Images. Took " . $tkn . "m\n" );
}
/**
* Rebuild Images
*/
protected function _seoImages()
{
/* INIT */
$start = time();
$done = 0;
$this->DB->build( array( 'select' => '*',
'from' => 'gallery_images',
'order' => 'id ASC' ) );
$o = $this->DB->execute();
while( $row = $this->DB->fetch( $o ) )
{
$done++;
$this->DB->update( 'gallery_images', array( 'caption_seo' => IPSText::makeSeoTitle( $row['caption'] ) ), 'id=' . $row['id'] );
if ( $done % 50 == 0 )
{
$this->_print( "Completed... " . $done . " (IMG ID=" . $row['id'] . " total=" . ( $done ) . ")" );
}
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "Finished Images. Took " . $tkn . "m\n" );
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
-122
View File
@@ -1,122 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Main public executable wrapper.
* Set-up and load module to run
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
*
* @author $Author: bfarber $
* @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: 10721 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'public' );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->stdin = fopen('php://stdin', 'r');
$this->_print( "--------------------------------------------\nWelcome to the IP.Gallery Images SEO Fixer\n--------------------------------------------\n" );
$this->_print( "Start from row?\nEnter: " );
$start = intval( $this->_fetchOption() );
$this->_print( "Do X rows\nEnter: " );
$end = intval( $this->_fetchOption() );
$this->_doImages( $start, $end );
}
/**
* Rebuild Images
*/
protected function _doImages( $_start, $end )
{
/* INIT */
$start = time();
$done = 0;
$this->DB->build( array( 'select' => '*',
'from' => 'gallery_images',
'order' => 'id ASC',
'limit' => array( $_start, $end ) ) );
$t = $this->DB->execute();
while( $row = $this->DB->fetch( $t ) )
{
$this->DB->update( 'gallery_images', array( 'caption_seo' => IPSText::makeSeoTitle( $row['caption'] ) ), 'id=' . $row['id'] );
$done++;
if ( $done % 250 == 0 )
{
$this->_print( "Completed... " . $done . " (IMG ID=" . $row['file_id'] . " total=" . ( $_start + $done ) . ")" );
}
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "FINISHED Images. Took " . $tkn . "m\n" );
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
-326
View File
@@ -1,326 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Main public executable wrapper.
* Set-up and load module to run
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
*
* @author $Author: bfarber $
* @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: 10721 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'public' );
define( 'IPS_CLI_MEMORY_DEBUG', false );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
protected $processed = 0;
protected $start = 0;
protected $end = 0;
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->memberData = array();
$this->stdin = fopen('php://stdin', 'r');
$this->_print( "--------------------------------------------\nWelcome to the IP.Board PM Re-Builder\n--------------------------------------------\n" );
$this->_print( "Start at row (Enter 0 to start from the very first entry)\nEnter: " );
$this->start = intval( $this->_fetchOption() );
$this->_print( "Process X rows (Enter 0 to process all rows)\nEnter: " );
$this->end = intval( $this->_fetchOption() );
if ( $this->start == 0 )
{
$this->_print( "No starting ID? Do you want to remove all current PMs to start again? (y/n): " );
$delete = $this->_fetchOption();
if ( $delete == 'y' )
{
/* Ditch current data */
$this->DB->delete( 'message_posts' );
$this->DB->delete( 'message_topics' );
$this->DB->delete( 'message_topic_user_map' );
}
}
while( ( $result = $this->_process() ) !== FALSE )
{
$this->_print( $result );
}
/* We're done.. */
$this->_print( "COMPLETE" );
}
/**
* Actually process it
*/
protected function _process()
{
if ( ! $this->end OR ( $this->end > $this->processed ) )
{
/* More to do... */
$batch = 250;
$_s = $this->processed + $this->start;
$_e = ( $this->end AND $this->end < $batch ) ? $this->end : $batch;
$this->processed = $_s + $batch;
$this->start = 0;
$converted = 0;
$seen = 0;
/* Select max topic ID thus far */
$_tmp = $this->DB->buildAndFetch( array( 'select' => 'MAX(mt_id) as max',
'from' => 'message_topics' ) );
$topicID = intval( $_tmp['max'] );
$this->DB->build( array( 'select' => '*',
'from' => 'message_text',
'order' => 'msg_id ASC',
'limit' => array( $_s, $_e ) ) );
$o = $this->DB->execute();
while( $post = $this->DB->fetch( $o ) )
{
$seen++;
/* Make sure all data is valid */
if ( intval( $post['msg_sent_to_count'] ) < 1 )
{
continue;
}
/* a little set up */
$oldTopics = array();
/* Now fetch all topics */
$this->DB->build( array( 'select' => '*',
'from' => 'message_topics_old',
'where' => 'mt_msg_id=' . intval( $post['msg_id'] ) ) );
$t = $this->DB->execute();
while( $topic = $this->DB->fetch( $t ) )
{
/* Got any data? */
if ( ! $topic['mt_from_id'] OR ! $topic['mt_to_id'] )
{
continue;
}
$oldTopics[ $topic['mt_id'] ] = $topic; # Luke added that space. That's his first contribution to the code vaults at IPS.
}
/* Attempt to free memory */
$this->DB->freeResult( $t );
/* Fail safe */
if ( ! count( $oldTopics ) )
{
continue;
}
/* Increment number */
$topicID++;
/* Add in the post */
$this->DB->insert( 'message_posts', array( 'msg_topic_id' => $topicID,
'msg_date' => $post['msg_date'],
'msg_post' => $post['msg_post'],
'msg_post_key' => $post['msg_post_key'],
'msg_author_id' => $post['msg_author_id'],
'msg_ip_address' => $post['msg_ip_address'],
'msg_is_first_post' => 1 ) );
$postID = $this->DB->getInsertId();
/* Update attachments */
$this->DB->update( 'attachments', array( 'attach_rel_id' => $postID ), "attach_rel_module='msg' AND attach_rel_id=".$post['msg_id'] );
/* Define some stuff. "To" member is added last in IPB 2 */
$_tmp = $oldTopics;
ksort( $_tmp );
$topicData = array_pop( $_tmp );
$_invited = array();
$_seenOwner = array();
$_isDeleted = 0;
/* Add the member rows */
foreach( $oldTopics as $mt_id => $data )
{
/* Prevent SQL error with unique index: Seen the owner ID already? */
if ( $_seenOwner[ $data['mt_owner_id'] ] )
{
continue;
}
$_seenOwner[ $data['mt_owner_id'] ] = $data['mt_owner_id'];
/* Build invited - does not include 'to' person */
if ( $data['mt_owner_id'] AND ( $post['msg_author_id'] != $data['mt_owner_id'] ) AND ( $topicData['mt_to_id'] != $data['mt_owner_id'] ) )
{
$_invited[ $data['mt_owner_id'] ] = $data['mt_owner_id'];/*noLibHook*/
}
$_isSent = ( $data['mt_vid_folder'] == 'sent' ) ? 1 : 0;
$_isDraft = ( $data['mt_vid_folder'] == 'unsent' ) ? 1 : 0;
$this->DB->insert( 'message_topic_user_map', array( 'map_user_id' => $data['mt_owner_id'],
'map_topic_id' => $topicID,
'map_folder_id' => ( $_isDraft ) ? 'drafts' : 'myconvo',
'map_read_time' => ( $data['mt_user_read'] ) ? $data['mt_user_read'] : ( $data['mt_read'] ? time() : 0 ),
'map_user_active' => 1,
'map_user_banned' => 0,
'map_has_unread' => 0,//( $data['mt_read'] ) ? 0 : 1,
'map_is_system' => 0,
'map_last_topic_reply' => $post['msg_date'],
'map_is_starter' => ( $data['mt_owner_id'] == $post['msg_author_id'] ) ? 1 : 0 ) );
}
/* Now, did we see the author? If not, add them too but as inactive */
if ( ! $_seenOwner[ $post['msg_author_id'] ] )
{
$_isDeleted = 1;
/*$this->DB->insert( 'message_topic_user_map', array( 'map_user_id' => $post['msg_author_id'],
'map_topic_id' => $topicID,
'map_folder_id' => 'myconvo',
'map_read_time' => 0,
'map_user_active' => 0,
'map_user_banned' => 0,
'map_has_unread' => 0,
'map_is_system' => 0,
'map_is_starter' => 1 ) );*/
}
$_isSent = ( $topicData['mt_vid_folder'] == 'sent' ) ? 1 : 0;
$_isDraft = ( $topicData['mt_vid_folder'] == 'unsent' ) ? 1 : 0;
/* This is for MSSQL. I need a quick fix. This is it. Enjoy. */
if ( method_exists( $this->DB, 'setTableIdentityInsert' ) )
{
$this->DB->setTableIdentityInsert( 'message_topics', 'ON' );
}
/* Add the topic */
$this->DB->insert( 'message_topics', array( 'mt_id' => $topicID,
'mt_date' => $topicData['mt_date'],
'mt_title' => $topicData['mt_title'],
'mt_starter_id' => $post['msg_author_id'],
'mt_start_time' => $post['msg_date'],
'mt_last_post_time' => $post['msg_date'],
'mt_invited_members' => serialize( array_keys( $_invited ) ),
'mt_to_count' => count( array_keys( $_invited ) ) + 1,
'mt_to_member_id' => $topicData['mt_to_id'],
'mt_replies' => 0,
'mt_last_msg_id' => $postID,
'mt_first_msg_id' => $postID,
'mt_is_draft' => $_isDraft,
'mt_is_deleted' => $_isDeleted,
'mt_is_system' => 0 ) );
/* This is for MSSQL. I need a quick fix. This is it. Enjoy. */
if ( method_exists( $this->DB, 'setTableIdentityInsert' ) )
{
$this->DB->setTableIdentityInsert( 'message_topics', 'OFF' );
}
$converted++;
}
}
/* Attempt to free memory */
$this->DB->freeResult( $o );
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
/* Memory Debug */
if ( IPS_CLI_MEMORY_DEBUG )
{
IPSDebug::setMemoryDebugFlag( "Done", 0 );
foreach( IPSDebug::$memory_debug as $i )
{
$this->_print( "Debug:... " . $i[0] . ' - ' . IPSLib::sizeFormat( $i[1] ) );
}
/* Reset */
IPSDebug::$memory_debug = array();
}
if ( $seen )
{
/* Check for more.. */
return "Checked {$seen}, Completed... " . $this->processed . "(last ID=[ " . $topicID . " ] )";
}
else
{
return FALSE;
}
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
?>
-615
View File
@@ -1,615 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Main public executable wrapper.
* Set-up and load module to run
* Last Updated: $Date: 2013-02-05 06:22:45 -0500 (Tue, 05 Feb 2013) $
* </pre>
*
* @author $Author: mmecham $
* @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: 11935 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'public' );
define( 'IPS_CLI_MEMORY_DEBUG', false );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
protected $processed = 0;
protected $parser;
protected $oldparser;
protected $start = 0;
protected $end = 0;
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->memberData = array();
$this->stdin = fopen('php://stdin', 'r');
//-----------------------------------------
// Get new parser and old parser
//-----------------------------------------
require_once( IPS_ROOT_PATH . "sources/handlers/han_parse_bbcode.php" );/*noLibHook*/
$this->parser = new parseBbcode( $this->registry );
$this->oldparser = new parseBbcode( $this->registry, 'legacy' );
$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/text/parser.php', 'classes_text_parser' );
$this->newParser = new $classToLoad();
//-----------------------------------------
// Show options
//-----------------------------------------
$this->_print( "--------------------------------------------\nWelcome to the IP.Board Post Content Re-Builder\n--------------------------------------------\n" );
$this->_print( "What do you wish to build?\n(c=Calendar Events, a=Announcements, x=Personal Conversations, s=Signatures, m=About me, p=posts, o=Remove Orphaned Posts)\nEnter: " );
$option = $this->_fetchOption();
switch( $option )
{
case 'c':
$this->_doPosts('cal');
break;
case 'a':
$this->_doPosts('announce');
break;
case 'x':
$this->_doPosts('pms');
break;
case 's':
$this->_doPosts('sigs');
break;
case 'm':
$this->_doPosts('aboutme');
break;
case 'p':
$this->_doPosts('posts');
break;
case 'o':
$this->_doOrphanedPosts();
break;
default:
$this->_doPosts('posts');
break;
}
}
/**
* Rebuild data
*/
protected function _doOrphanedPosts()
{
$batch = 250;
$c = -1;
$bucket = array();
/* Lets grab the highest and lowest IDs */
$rows = $this->DB->buildAndFetch( array( 'select' => "count(pid) AS CNT, max(pid) AS MAX, min(pid) as MIN",
'from' => array( 'posts' => 'p' ),
'where' => 't.tid IS NULL',
'add_join' => array( array( 'select' => 't.*',
'from' => array( 'topics' => 't' ),
'where' => 't.tid=p.topic_id' ) ) ) );
if ( empty( $rows['CNT'] ) )
{
$this->_print( "No orphaned posts have been found" );
exit();
}
$this->DB->build( array( 'select' => 'pid, from_unixtime(post_date) as time',
'from' => 'posts',
'where' => 'pid IN( ' . $rows['MIN'] . ',' . $rows['MAX'] . ')' ) );
$this->DB->execute();
while( $r = $this->DB->fetch() )
{
$posts[ $r['pid'] ] = $r['time'];
}
$this->_print( "--------------------------------------------\n" . $rows['CNT'] . " orphaned posts found\n--------------------------------------------\n" );
$this->_print( "Oldest: PID:" . $rows['MIN'] . " - Date: " . $posts[ $rows['MIN'] ] );
$this->_print( "Newest: PID:" . $rows['MAX'] . " - Date: " . $posts[ $rows['MAX'] ] );
$this->_print( "Continue? (y/n):" );
$option = $this->_fetchOption();
if ( $option != 'y' )
{
$this->_print("Nothing deleted");
exit();
}
$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . '/sources/classes/moderate.php', 'moderatorLibrary', 'forums' );
$this->modLibrary = new $classToLoad( $this->registry );
/* Still here? */
$this->DB->build( array( 'select' => "pid",
'from' => array( 'posts' => 'p' ),
'where' => 't.tid IS NULL',
'add_join' => array( array( 'select' => 't.*',
'from' => array( 'topics' => 't' ),
'where' => 't.tid=p.topic_id' ) ) ) );
$o = $this->DB->execute();
while( $post = $this->DB->fetch( $o ) )
{
$c++;
$bucket[] = $post['pid'];
if ( $c % $batch )
{
$this->modLibrary->postDeleteFromDb( $bucket, true, true );
$this->_print( $c . ' deleted' );
//$this->_print( var_export( $bucket, true ) );
$bucket = array();
$c = 0;
}
}
$this->_print( "All done" );
}
/**
* Rebuild data
*/
protected function _doPosts( $type )
{
//-----------------------------------------
// Set up
//-----------------------------------------
$last = 0;
$output = array();
$types = array( 'posts', 'pms', 'cal', 'announce', 'sigs', 'aboutme' );
$type = in_array( $type, $types ) ? $type : 'posts';
$groupCache = $this->caches['group_cache'];
$this->_print( "Start at ID (Enter 0 to start from the very first entry)\nEnter: " );
$this->start = intval( $this->_fetchOption() );
$this->_print( "Process X rows (Enter 0 to process all rows)\nEnter: " );
$this->end = intval( $this->_fetchOption() );
//-----------------------------------------
// Process batches...
//-----------------------------------------
while( ( $result = $this->_process( $type ) ) !== FALSE )
{
$this->_print( $result );
}
/* We're done.. */
$this->_print( "COMPLETE" );
/* Update isRebuilt cache */
$sections = array();
$alreadyRebuilt = $this->DB->buildAndFetch( array( 'select' => 'cs_value', 'from' => 'cache_store', 'where' => "cs_key='isRebuilt'" ) );
if( $alreadyRebuilt['cs_value'] )
{
$sections = explode( ',', $alreadyRebuilt['cs_value'] );
}
$sections[] = $type;
$this->DB->replace( 'cache_store', array( 'cs_key' => 'isRebuilt', 'cs_value' => implode( ',', $sections ) ), array( "cs_key" ) );
/* Drop cache */
if ( $type == 'posts' )
{
$this->DB->delete( 'content_cache_posts' );
}
else if ( $type == 'sigs' )
{
$this->DB->delete( 'content_cache_sigs' );
}
}
/**
* Actually process
*
*/
protected function _process( $type )
{
if ( $this->end == 0 OR ( $this->end > $this->processed ) )
{
/* More to do... */
$batch = 250;
$_s = intval( $this->start );
$done = 0;
$this->processed += $batch;
/* On mssql, the select query blocks all the updates. Doing this causes the engine not to lock */
if ( method_exists( $this->DB, 'setQueryRowLocking' ) )
{
$this->DB->setQueryRowLocking( 'OFF' );
}
switch( $type )
{
case 'cal':
$this->DB->build( array( 'select' => 'e.*',
'from' => array( 'cal_events' => 'e' ),
'order' => 'e.event_id ASC',
'where' => 'e.event_id > ' . $_s,
'limit' => array( $batch ),
'add_join' => array( 1 => array( 'type' => 'left',
'select' => 'm.member_group_id, m.mgroup_others',
'from' => array( 'members' => 'm' ),
'where' => "m.member_id=e.event_member_id"
) )
) );
break;
case 'announce':
$this->DB->build( array( 'select' => 'a.*',
'from' => array( 'announcements' => 'a' ),
'order' => 'a.announce_id ASC',
'where' => 'a.announce_id > ' . $_s,
'limit' => array( $batch ),
'add_join' => array( 1 => array( 'type' => 'left',
'select' => 'm.member_group_id, m.mgroup_others',
'from' => array( 'members' => 'm' ),
'where' => "m.member_id=a.announce_member_id"
) )
) );
break;
case 'pms':
$this->DB->build( array( 'select' => 'p.*',
'from' => array( 'message_posts' => 'p' ),
'order' => 'p.msg_id ASC',
'where' => 'p.msg_id > ' . $_s,
'limit' => array( $batch ),
'add_join' => array( 1 => array( 'type' => 'left',
'select' => 'm.member_group_id, m.mgroup_others',
'from' => array( 'members' => 'm' ),
'where' => "m.member_id=p.msg_author_id"
) )
) );
break;
case 'sigs':
$this->DB->build( array( 'select' => 'me.signature, me.pp_member_id',
'from' => array( 'profile_portal' => 'me' ),
'order' => 'me.pp_member_id ASC',
'where' => "me.signature IS NOT NULL AND me.signature != '' AND me.pp_member_id > " . $_s,
'limit' => array( $batch ),
'add_join' => array( 1 => array( 'type' => 'left',
'select' => 'm.member_group_id, m.mgroup_others, m.members_display_name',
'from' => array( 'members' => 'm' ),
'where' => "m.member_id=me.pp_member_id"
) )
) );
break;
case 'aboutme':
$this->DB->build( array( 'select' => 'pp.pp_about_me, pp.pp_member_id',
'from' => array( 'profile_portal' => 'pp' ),
'order' => 'pp.pp_member_id ASC',
'where' => "pp.pp_about_me != '' AND pp.pp_about_me IS NOT NULL AND pp.pp_member_id > " . $_s,
'limit' => array( $batch ),
'add_join' => array( 1 => array( 'type' => 'left',
'select' => 'm.member_group_id, m.mgroup_others, m.members_display_name',
'from' => array( 'members' => 'm' ),
'where' => "m.member_id=pp.pp_member_id"
) )
) );
break;
case 'posts':
$this->DB->build( array( 'select' => 'p.*',
'from' => array( 'posts' => 'p' ),
'order' => 'p.pid ASC',
'where' => 'p.pid > ' . $_s,
'limit' => array( $batch ),
'add_join' => array( 1 => array( 'type' => 'left',
'select' => 't.forum_id',
'from' => array( 'topics' => 't' ),
'where' => "t.tid=p.topic_id"
),
2 => array( 'type' => 'left',
'select' => 'm.member_group_id, m.mgroup_others',
'from' => array( 'members' => 'm' ),
'where' => "m.member_id=p.author_id"
),
3 => array( 'type' => 'left',
'select' => 'f.*',
'from' => array( 'forums' => 'f' ),
'where' => "t.forum_id=f.id"
) ) ) );
break;
}
$outer = $this->DB->execute();
//-----------------------------------------
// Process...
//-----------------------------------------
while( $r = $this->DB->fetch( $outer ) )
{
//-----------------------------------------
// Reset
//-----------------------------------------
$this->parser->quote_open = $this->oldparser->quote_open = 0;
$this->parser->quote_closed = $this->oldparser->quote_closed = 0;
$this->parser->quote_error = $this->oldparser->quote_error = 0;
$this->parser->error = $this->oldparser->error = '';
$this->parser->image_count = $this->oldparser->image_count = 0;
$this->parser->parsing_mgroup = $this->oldparser->parsing_mgroup = $r['member_group_id'];
$this->parser->parsing_mgroup_others = $this->oldparser->parsing_mgroup_others = $r['mgroup_others'];
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
$this->memberData['g_bypass_badwords'] = $this->caches['group_cache'][ $r['member_group_id'] ]['g_bypass_badwords'];
switch( $type )
{
case 'cal':
$this->parser->parse_smilies = $this->oldparser->parse_smilies = $r['event_smilies'];
$this->parser->parse_html = $this->oldparser->parse_html = 0;
$this->parser->parse_bbcode = $this->oldparser->parse_bbcode = 1;
$this->parser->parsing_section = 'calendar';
$rawpost = $this->oldparser->preEditParse( $r['event_content'] );
break;
case 'announce':
$this->parser->parse_smilies = $this->oldparser->parse_smilies = 1;
$this->parser->parse_html = $this->oldparser->parse_html = $r['announce_html_enabled'];
$this->parser->parse_bbcode = $this->oldparser->parse_bbcode = 1;
$this->parser->parse_nl2br = $this->oldparser->parse_nl2br = $r['announce_nlbr_enabled'];
$this->parser->parsing_section = 'announcement';
$rawpost = $this->oldparser->preEditParse( $r['announce_post'] );
break;
case 'pms':
$this->parser->parse_smilies = $this->oldparser->parse_smilies = 1;
$this->parser->parse_html = $this->oldparser->parse_html = $this->caches['group_cache'][ $r['member_group_id'] ]['g_dohtml'];
$this->parser->parse_bbcode = $this->oldparser->parse_bbcode = 1;
$this->parser->parse_nl2br = $this->oldparser->parse_nl2br = 1;
$this->parser->parsing_section = 'pms';
$rawpost = $this->oldparser->preEditParse( $r['msg_post'] );
break;
case 'sigs':
$this->parser->parse_smilies = $this->oldparser->parse_smilies = 0;
$this->parser->parse_html = $this->oldparser->parse_html = $this->caches['group_cache'][ $r['member_group_id'] ]['g_dohtml'];
$this->parser->parse_bbcode = $this->oldparser->parse_bbcode = 1;
$this->parser->parse_nl2br = $this->oldparser->parse_nl2br = 1;
$this->parser->parsing_section = 'signatures';
$rawpost = $this->oldparser->preEditParse( $r['signature'] );
break;
case 'aboutme':
$this->parser->parse_smilies = $this->oldparser->parse_smilies = 1;
$this->parser->parse_html = $this->oldparser->parse_html = $this->caches['group_cache'][ $r['member_group_id'] ]['g_dohtml'];
$this->parser->parse_bbcode = $this->oldparser->parse_bbcode = 1;
$this->parser->parse_nl2br = $this->oldparser->parse_nl2br = 1;
$this->parser->parsing_section = 'aboutme';
$rawpost = $this->oldparser->preEditParse( $r['pp_about_me'] );
break;
case 'posts':
$allowHtml = ( $r['post_htmlstate'] && $r['use_html'] && $this->caches['group_cache'][ $r['member_group_id'] ]['g_dohtml'] );
$this->newParser->set( array( 'parseArea' => 'topics',
'memberData' => $r,
'parseBBCode' => $r['use_ibc'],
'parseHtml' => $allowHtml,
'parseEmoticons' => $r['use_emo'] ) );
$rawpost = $this->newParser->BBCodeToHtml( $r['post'] );
break;
}
/* @link http://community.invisionpower.com/tracker/issue-36434-rebuild-post-content-remove-break-from-post-content/ New parser retains <br>, legacy retains \n */
if ( $type == 'posts' || $type == 'sigs' )
{
/* Anything special here? */
$newpost = $rawpost;
}
else
{
if ( strstr( $rawpost, "\n" ) )
{
$rawpost = nl2br( $rawpost );
}
$newpost = $this->parser->preDbParse( $rawpost );
}
//-----------------------------------------
// Remove old \' escaping
//-----------------------------------------
$newpost = str_replace( "\\'", "'", $newpost );
//-----------------------------------------
// Convert old dohtml?
//-----------------------------------------
$htmlstate = 0;
if ( strstr( strtolower($newpost), '[dohtml]' ) )
{
//-----------------------------------------
// Can we use HTML?
//-----------------------------------------
if ( $type == 'posts' AND $this->registry->class_forums->forum_by_id[ $r['forum_id'] ]['use_html'] )
{
$htmlstate = 2;
}
$newpost = preg_replace( "#\[dohtml\]#i" , "", $newpost );
$newpost = preg_replace( "#\[/dohtml\]#i", "", $newpost );
}
else
{
$htmlstate = intval( $r['post_htmlstate'] );
}
//-----------------------------------------
// Convert old attachment tags
//-----------------------------------------
$newpost = preg_replace( "#\[attachmentid=(\d+?)\]#is", "[attachment=\\1:attachment]", $newpost );
if ( $newpost OR $type == 'sigs' OR $type == 'aboutme' )
{
switch( $type )
{
case 'posts':
$this->DB->update( 'posts', array( 'post' => $newpost, 'post_htmlstate' => $htmlstate ), 'pid='.$r['pid'] );
$string = substr( $r['post'], 0, 30 ) . '...';
$last = $r['pid'];
break;
case 'pms':
$this->DB->update( 'message_posts', array( 'msg_post' => $newpost ), 'msg_id='.$r['msg_id'] );
$string = substr( $r['msg_post'], 0, 30 ) . '...';
$last = $r['msg_id'];
break;
case 'sigs':
$this->DB->update( 'profile_portal', array( 'signature' => $newpost ), 'pp_member_id='.$r['pp_member_id'] );
$string = substr( $r['members_display_name'], 0, 30 ) . '...';
$last = $r['pp_member_id'];
break;
case 'aboutme':
$this->DB->update( 'profile_portal', array( 'pp_about_me' => $newpost ), 'pp_member_id='.$r['pp_member_id'] );
$string = substr( $r['post'], 0, 30 ) . '...';
$last = $r['pp_member_id'];
break;
case 'cal':
$this->DB->update( 'cal_events', array( 'event_content' => $newpost ), 'event_id='.$r['event_id'] );
$string = substr( $r['event_content'], 0, 30 ) . '...';
$last = $r['event_id'];
break;
case 'announce':
$this->DB->update( 'announcements', array( 'announce_post' => $newpost ), 'announce_id='.$r['announce_id'] );
$string = substr( $r['announce_post'], 0, 30 ) . '...';
$last = $r['announce_id'];
break;
}
}
unset( $r );
$done++;
}
if ( method_exists( $this->DB, 'setQueryRowLocking' ) )
{
$this->DB->setQueryRowLocking( 'ON' );
}
}
/* Attempt to free memory */
$this->DB->freeResult( $outer );
/* Memory Debug */
if ( IPS_CLI_MEMORY_DEBUG )
{
IPSDebug::setMemoryDebugFlag( "Done", 0 );
foreach( IPSDebug::$memory_debug as $i )
{
$this->_print( "Debug:... " . $i[0] . ' - ' . IPSLib::sizeFormat( $i[1] ) );
}
/* Reset */
IPSDebug::$memory_debug = array();
}
if ( $done )
{
$this->start = intval( $last );
return "Completed... " . $this->processed . "(last ID[ " . $last . " ] " . str_replace( "\n", "", $string ) . ")";
}
else
{
return FALSE;
}
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
?>
-162
View File
@@ -1,162 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Main public executable wrapper.
* Set-up and load module to run
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
*
* @author $Author: bfarber $
* @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: 10721 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'public' );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->stdin = fopen('php://stdin', 'r');
$this->_print( "--------------------------------------------\nWelcome to the IP.Board IP.Downloads SEO Fixer\n--------------------------------------------\n" );
$this->_print( "Start from row?\nEnter: " );
$start = intval( $this->_fetchOption() );
$this->_print( "Do X rows\nEnter: " );
$end = intval( $this->_fetchOption() );
$this->_doCats();
$this->_doFiles( $start, $end );
}
/**
* Rebuild categories
*/
protected function _doCats()
{
/* INIT */
$start = time();
$done = 0;
$this->DB->build( array( 'select' => '*',
'from' => 'downloads_categories',
//'limit' => array( $_start, $end ) //those variables are always null
) );
$t = $this->DB->execute();
while( $row = $this->DB->fetch( $t ) )
{
$title_seo = IPSText::makeSeoTitle( $row['cname'] );
$this->DB->update( 'downloads_categories', array( 'cname_furl' => $title_seo ), 'cid=' . $row['cid'] );
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "FINISHED CATEGORIES. Took " . $tkn . "m\n" );
}
/**
* Rebuild langs
*/
protected function _doFiles( $_start, $end )
{
/* INIT */
$start = time();
$done = 0;
$this->DB->build( array( 'select' => '*',
'from' => 'downloads_files',
'order' => 'file_id ASC',
'limit' => array( $_start, $end ) ) );
$t = $this->DB->execute();
while( $row = $this->DB->fetch( $t ) )
{
$title_seo = IPSText::makeSeoTitle( $row['file_name'] );
$this->DB->update( 'downloads_files', array( 'file_name_furl' => $title_seo ), 'file_id=' . $row['file_id'] );
$done++;
if ( $done % 250 == 0 )
{
$this->_print( "Completed... " . $done . " (File ID=" . $row['file_id'] . " total=" . ( $_start + $done ) . ")" );
}
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "FINISHED FILES. Took " . $tkn . "m\n" );
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
?>
-148
View File
@@ -1,148 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Main public executable wrapper.
* Set-up and load module to run
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
*
* @author $Author: bfarber $
* @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: 10721 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'public' );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->stdin = fopen('php://stdin', 'r');
$this->_print( "--------------------------------------------\nWelcome to the IP.Gallery Albums and Categories SEO Fixer\n--------------------------------------------\n" );
$this->_print( "Start from row?\nEnter: " );
$start = intval( $this->_fetchOption() );
$this->_print( "Do X rows\nEnter: " );
$end = intval( $this->_fetchOption() );
$this->_doCats();
$this->_doAlbums( $start, $end );
}
/**
* Rebuild categories
*/
protected function _doCats()
{
/* INIT */
$start = time();
$done = 0;
$this->DB->build( array( 'select' => '*', 'from' => 'gallery_categories' ) );
$t = $this->DB->execute();
while( $row = $this->DB->fetch( $t ) )
{
$this->DB->update( 'gallery_categories', array( 'name_seo' => IPSText::makeSeoTitle( $row['name'] ) ), 'id=' . $row['id'] );
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "FINISHED CATEGORIES. Took " . $tkn . "m\n" );
}
/**
* Rebuild Images
*/
protected function _doAlbums( $_start, $end )
{
/* INIT */
$start = time();
$done = 0;
$this->DB->build( array( 'select' => '*',
'from' => 'gallery_albums',
'order' => 'id ASC',
'limit' => array( $_start, $end ) ) );
$t = $this->DB->execute();
while( $row = $this->DB->fetch( $t ) )
{
$this->DB->update( 'gallery_albums', array( 'name_seo' => IPSText::makeSeoTitle( $row['seo'] ) ), 'id=' . $row['id'] );
$done++;
if ( $done % 250 == 0 )
{
$this->_print( "Completed... " . $done . " (Album ID=" . $row['file_id'] . " total=" . ( $_start + $done ) . ")" );
}
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "FINISHED Albums. Took " . $tkn . "m\n" );
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
-129
View File
@@ -1,129 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Main public executable wrapper.
* Set-up and load module to run
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
*
* @author $Author: bfarber $
* @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: 10721 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'public' );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->stdin = fopen('php://stdin', 'r');
$this->_print( "--------------------------------------------\nWelcome to the IP.Board Member Name SEO Fixer\n--------------------------------------------\n" );
$this->_print( "Start from row?\nEnter: " );
$start = intval( $this->_fetchOption() );
$this->_print( "Do X rows\nEnter: " );
$end = intval( $this->_fetchOption() );
$this->_doTopics( $start, $end );
}
/**
* Rebuild langs
*/
protected function _doTopics( $_start, $end )
{
/* INIT */
$start = time();
$done = 0;
$this->DB->build( array( 'select' => '*',
'from' => 'members',
'order' => 'member_id ASC',
'limit' => array( $_start, $end ) ) );
$t = $this->DB->execute();
while( $row = $this->DB->fetch( $t ) )
{
$members_seo_name = IPSText::makeSeoTitle( $row['members_display_name'] );
$this->DB->update( 'members', array( 'members_seo_name' => $members_seo_name ), 'member_id=' . $row['member_id'] );
$done++;
if ( $done % 250 == 0 )
{
$this->_print( "Completed... " . $done . " (Last ID=" . $row['member_id'] . " total=" . ( $_start + $done ) . ")" );
}
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "COMPLETE. Took " . $tkn . "m\n" );
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
?>
-133
View File
@@ -1,133 +0,0 @@
#!/usr/local/bin/php
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Main public executable wrapper.
* Set-up and load module to run
* Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
* </pre>
*
* @author $Author: bfarber $
* @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: 10721 $
*
*/
define( 'IPS_IS_SHELL', TRUE );
define( 'IPB_THIS_SCRIPT', 'public' );
if ( is_file( './initdata.php' ) )
{
require_once( './initdata.php' );/*noLibHook*/
}
else
{
require_once( '../initdata.php' );/*noLibHook*/
}
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
$moo = new moo( $reg );
class moo
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->stdin = fopen('php://stdin', 'r');
$this->_print( "--------------------------------------------\nWelcome to the IP.Board Topic Title SEO Fixer\n--------------------------------------------\n" );
$this->_print( "Start from row?\nEnter: " );
$start = intval( $this->_fetchOption() );
$this->_print( "Do X rows\nEnter: " );
$end = intval( $this->_fetchOption() );
$this->_doTopics( $start, $end );
}
/**
* Rebuild langs
*/
protected function _doTopics( $_start, $end )
{
/* INIT */
$start = time();
$done = 0;
$this->DB->build( array( 'select' => '*',
'from' => 'topics',
'order' => 'tid ASC',
'limit' => array( $_start, $end ) ) );
$t = $this->DB->execute();
while( $row = $this->DB->fetch( $t ) )
{
$title_seo = IPSText::makeSeoTitle( $row['title'] );
$seo_last_name = IPSText::makeSeoTitle( $row['last_poster_name'] );
$seo_first_name = IPSText::makeSeoTitle( $row['starter_name'] );
$this->DB->update( 'topics', array( 'title_seo' => $title_seo,
'seo_last_name' => $seo_last_name,
'seo_first_name' => $seo_first_name ), 'tid=' . $row['tid'] );
$done++;
if ( $done % 250 == 0 )
{
$this->_print( "Completed... " . $done . " (Last ID=" . $row['tid'] . " total=" . ( $_start + $done ) . ")" );
}
/* Clear cached queries */
$this->DB->obj['cached_queries'] = array();
}
$end = time();
$tkn = ( $end - $start) / 60;
$this->_print( "COMPLETE. Took " . $tkn . "m\n" );
}
/**
* Out to stdout
*/
protected function _print( $message, $newline="\n" )
{
$stdout = fopen('php://stdout', 'w');
fwrite( $stdout, $message . $newline );
fclose( $stdout );
}
/* Fetch option
*
*/
protected function _fetchOption()
{
return trim( fgets( $this->stdin ) );
}
}
exit();
?>
-39
View File
@@ -1,39 +0,0 @@
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Simple skin change script
* Place in your site root directory to send a user to a specified skin
* Last Updated: $Date: 2012-05-16 10:43:54 -0400 (Wed, 16 May 2012) $
* </pre>
*
* @author $Author: ips_terabyte $
* @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: 10760 $
*
*/
define( 'IPS_PUBLIC_SCRIPT', 'index.php' );
define( 'IPB_THIS_SCRIPT', 'public' );
require_once( './initdata.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
$reg = ipsRegistry::instance();
$reg->init();
if ( $_GET['id'] )
{
@header("Location: " . ipsRegistry::$settings['base_url'] . '&settingNewSkin=' . intval( $_GET['id'] ) . '&k=' . $reg->member()->form_hash );
}
else
{
die("No ID passed");
}
exit();
-552
View File
@@ -1,552 +0,0 @@
<?php
/*
+--------------------------------------------------------------------------
| Invision Power Board v<{%dyn.down.var.human.version%}>
| ========================================
| by Matthew Mecham
| (c) 2001 - 2009 Invision Power Services
| http://www.invisionpower.com
| ========================================
| Web: http://www.invisionboard.com
| Time: <{%dyn.down.var.time%}>
| Release: <{%dyn.down.var.md5%}>
| Email: matt@invisionpower.com
| Licence Info: http://www.invisionboard.com/?license
+---------------------------------------------------------------------------
|
| > SSI script
| > Script written by Matt Mecham
| > Date started: 29th April 2002
| > UPDATED for 2.0: 1st July 2004
| > UPDATED for 2.1: 13th Sept 2005
| > UPDATED for 3.0: 26th Feb 2009
|
+--------------------------------------------------------------------------
+--------------------------------------------------------------------------
| USAGE:
+--------------------------------------------------------------------------
Simply call this script via PHP includes, or SSI .shtml tags to generate content
on the fly, streamed into your own webpage.
+--------------------------------------------------------------------------
| To show the board statistics
+--------------------------------------------------------------------------
include("http://domain.com/forums/ssi.php?a=stats");/*noLibHook*//*TERANOTE: remove additional /*
+--------------------------------------------------------------------------
| To show the active users stats (x Members, X Guests, etc)
+--------------------------------------------------------------------------
include("http://domain.com/forums/ssi.php?a=active");/*noLibHook*//*TERANOTE: remove additional /*
+--------------------------------------------------------------------------
| RSS / XML Syndication..
+--------------------------------------------------------------------------
RSS: http://domain.com/forums/ssi.php?a=out&f=1,2,3,4,5&show=10&type=rss
XML: http://domain.com/forums/ssi.php?a=out&f=1,2,3,4,5&show=10&type=xml
Will show last 10 topics in reverse chronological last post date order from
all the forums in the comma separated list
*/
/**
* Main executable wrapper.
*
* Set-up and load module to run
*
* @package IP.Board
* @author Matt Mecham
* @version 3.0
*/
define( 'CCS_GATEWAY_CALLED', TRUE ); // Prevents redirect checks in ipsRegistry
define( 'IPS_ENFORCE_ACCESS', TRUE ); // Prevents force login setting from returning a login page
define( 'IPB_THIS_SCRIPT', 'public' );
require_once( './initdata.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );/*noLibHook*/
/**
* Path to SSI templates directory
*
*/
define( 'SSI_TEMPLATES_DIR', DOC_IPS_ROOT_PATH."ssi_templates" );
/**
* Maximum number of topics to show
*
*/
define( 'SSI_MAX_SHOW' , 100 );
/**
* Allow SSI export. Enter "0" to turn off.
*
*/
define( 'SSI_ALLOW_SYND' , 1 );
/* Go... */
$reg = ipsRegistry::instance();
$reg->init();
$ssi = new ssi( $reg );
class ssi
{
function __construct( ipsRegistry $registry )
{
$this->registry = $registry;
$this->DB = $this->registry->DB();
$this->settings =& $this->registry->fetchSettings();
$this->request =& $this->registry->fetchRequest();
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
$this->member = $this->registry->member();
$this->memberData =& $this->registry->member()->fetchMemberData();
/* Load forums class */
$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir('forums') . '/sources/classes/forums/class_forums.php', 'class_forums', 'forums' );
$this->registry->setClass( 'class_forums', new $classToLoad( $registry ) );
$this->registry->class_forums->forumsInit();
switch ($this->request['a'])
{
case 'active':
$this->_doActive();
break;
case 'stats':
$this->_doStats();
break;
case 'out':
if ( SSI_ALLOW_SYND == 1 )
{
$this->_doSyndication();
}
else
{
exit();
}
break;
default:
echo("An error occurred whilst processing this directive");
exit();
break;
}
}
/**
* Do Syndication
*
* Export topics / titles from selected forums
*
* @access protected
*/
protected function _doSyndication()
{
//----------------------------------------
// Sort out the forum ids
//----------------------------------------
$tmp_forums = array();
$forums = array();
if ( $this->request['f'] )
{
$tmp_forums = explode( ",", $this->request['f'] );
}
else
{
fatal_error("Fatal error: no forum id specified");
}
//----------------------------------------
// Intval the IDs
//----------------------------------------
foreach ($tmp_forums as $f )
{
$f = intval($f);
if ( $f )
{
$forums[] = $f;
}
}
//----------------------------------------
// Check...
//----------------------------------------
if ( count($forums) < 1 )
{
fatal_error("Fatal error: no forum id specified");
}
$sql_fields = implode( ",", $forums );
//----------------------------------------
// Number of topics to return?
//----------------------------------------
$perpage = intval($this->request['show']) ? intval($this->request['show']) : 10;
$perpage = ( $perpage > SSI_MAX_SHOW ) ? SSI_MAX_SHOW : $perpage;
//----------------------------------------
// Load the template...
//----------------------------------------
if ( $this->request['type'] == 'xml' )
{
$template = $this->_loadTemplate("syndicate_xml.html");
}
else
{
$template = $this->_loadTemplate("syndicate_rss.html");
}
//----------------------------------------
// parse..
//----------------------------------------
$to_echo = "";
$top = "";
$row = "";
$bottom = "";
preg_match( "#\[TOP\](.+?)\[/TOP\]#is", $template, $match );
$top = trim($match[1]);
preg_match( "#\[ROW\](.+?)\[/ROW\]#is", $template, $match );
$row = trim($match[1]);
preg_match( "#\[BOTTOM\](.+?)\[/BOTTOM\]#is", $template, $match );
$bottom = trim($match[1]);
//----------------------------------------
// Header parse...
//----------------------------------------
//@header("Content-Type: text/xml;charset={$this->settings['gb_char_set']}");
//@header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
//@header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
//@header('Pragma: public');
$to_echo .= $this->_parseTemplate( $top, array ( 'board_url' => $this->settings['base_url'] ,
'board_name' => $this->settings['board_name'] ) );
//----------------------------------------
// Fix up
//----------------------------------------
$group = $this->caches['group_cache'][ $this->settings['guest_group'] ];
//----------------------------------------
// Get the topics, member info and other stuff
//----------------------------------------
$this->DB->build( array( 'select' => '*',
'from' => 'topics',
'where' => "forum_id IN ($sql_fields) AND " . $this->registry->getClass('class_forums')->fetchTopicHiddenQuery( array( 'visible' ), '' ),
'order' => 'last_post DESC',
'limit' => array( 0, $perpage ) ) );
$this->DB->execute();
if ( ! $this->DB->getTotalRows() )
{
fatal_error("Could not get the information from the database");
}
while ( $i = $this->DB->fetch() )
{
$forum = $this->registry->class_forums->forum_by_id[ $i['forum_id'] ];
if ( $this->registry->permissions->check( 'read', $forum ) != TRUE )
{
continue;
}
if ( $forum['password'] != "" )
{
continue;
}
$to_echo .= $this->_parseTemplate( $row, array ( 'topic_title' => str_replace( '&#', '&amp;#', $i['title'] ),
'topic_id' => $i['tid'],
'topic_link' => $this->settings['base_url']."showtopic=".$i['tid'],
'forum_title' => htmlspecialchars($forum['name']),
'forum_id' => $i['forum_id'],
'last_poster_id' => $i['last_poster_id'],
'last_post_name' => $i['last_poster_name'],
'last_post_time' => $this->registry->getClass('class_localization')->getDate( $i['last_post'] , 'LONG', 1 ),
'timestamp' => $i['last_post'],
'starter_id' => $i['starter_id'],
'starter_name' => $i['starter_name'],
'board_url' => $this->settings['board_url'] ,
'board_name' => $this->settings['board_name'],
'rfc_date' => date( 'r', $i['last_post'] ) ) ) . "\r\n";
}
//----------------------------------------
// Print bottom...
//----------------------------------------
echo $to_echo."\r\n".$bottom;
exit();
}
/**
* Do Stats
*
* Show totals
*/
function _doStats()
{
//----------------------------------------
// Load the template...
//----------------------------------------
$template = $this->_loadTemplate("stats.html");
//----------------------------------------
// INIT
//----------------------------------------
$to_echo = "";
$time = time() - 900;
$stats = $this->caches['stats'];
$total_posts = $stats['total_replies'] + $stats['total_topics'];
$to_echo = $this->_parseTemplate( $template, array( 'total_posts' => $total_posts,
'topics' => $stats['total_topics'],
'replies' => $stats['total_replies'],
'members' => $stats['mem_count'] ) );
echo $to_echo;
exit();
}
/**
* Do Active
*
* Show active users
*/
function _doActive()
{
//--------------------------------
// Load the template...
//--------------------------------
$template = $this->_loadTemplate("active.html");
//--------------------------------
// INIT
//--------------------------------
$to_echo = "";
//--------------------------------
// Make sure we have a cut off...
//--------------------------------
if ($this->settings['au_cutoff'] == "")
{
$this->settings['au_cutoff'] = 15;
}
//-----------------------------------------
// Get the users from the DB
//-----------------------------------------
$cut_off = $this->settings['au_cutoff'] * 60;
$time = time() - $cut_off;
$rows = array();
$ar_time = time();
if ( $this->memberData['member_id'] )
{
$rows = array( $ar_time => array( 'login_type' => IPSMember::isLoggedInAnon( $this->memberData ),
'running_time' => $ar_time,
'member_id' => $this->memberData['member_id'],
'member_name' => $this->memberData['members_display_name'],
'member_group' => $this->memberData['member_group_id'] ) );
}
$this->DB->build( array( 'select' => 'id, member_id, member_name, login_type, running_time, member_group',
'from' => 'sessions',
'where' => "running_time > $time",
) );
$this->DB->execute();
//-----------------------------------------
// FETCH...
//-----------------------------------------
while ( $r = $this->DB->fetch() )
{
$rows[ $r['running_time'].'.'.$r['id'] ] = $r;
}
krsort( $rows );
//--------------------------------
// cache all printed members so we
// don't double print them
//--------------------------------
$cached = array();
$active = array();
foreach( $rows as $result )
{
//-----------------------------------------
// Bot?
//-----------------------------------------
if ( strstr( $result['id'], '_session' ) )
{
//-----------------------------------------
// Seen bot of this type yet?
//-----------------------------------------
$botname = preg_replace( '/^(.+?)=/', "\\1", $result['id'] );
if ( ! $cached[ $result['member_name'] ] )
{
$cached[ $result['member_name'] ] = 1;
}
else
{
//-----------------------------------------
// Yup, count others as guest
//-----------------------------------------
$active['GUESTS']++;
}
}
//-----------------------------------------
// Guest?
//-----------------------------------------
else if ( ! $result['member_id'] )
{
$active['GUESTS']++;
}
//-----------------------------------------
// Member?
//-----------------------------------------
else
{
if ( empty( $cached[ $result['member_id'] ] ) )
{
$cached[ $result['member_id'] ] = 1;
/* Reset login type in case the board/group setting got changed */
$result['login_type'] = IPSMember::isLoggedInAnon( array( 'login_anonymous' => $result['login_type'] ), $result['member_group'] );
if ( $result['login_type'] )
{
$active['ANON']++;
}
else
{
$active['MEMBERS']++;
}
}
}
}
$active['TOTAL'] = $active['MEMBERS'] + $active['GUESTS'] + $active['ANON'];
$to_echo = $this->_parseTemplate( $template, array ( 'total' => $active['TOTAL'] ? $active['TOTAL'] : 0 ,
'members' => $active['MEMBERS'] ? $active['MEMBERS'] : 0,
'guests' => $active['GUESTS'] ? $active['GUESTS'] : 0,
'anon' => $active['ANON'] ? $active['ANON'] : 0 ) );
echo $to_echo;
exit();
}
/**
* Parse template
*
* Parses the template. Duh.
*
* @access protected
* @param string Template data
* @param array Array of data
*/
protected function _parseTemplate( $template, $assigned=array() )
{
foreach( $assigned as $word => $replace)
{
$template = preg_replace( "/\{$word\}/i", "$replace", $template );
}
$template = str_replace( '/ssi.php', '/index.php', $template );
return $this->registry->output->replaceMacros( $template );
}
/**
* Load template
*
* Loads the template
*
* @access protected
* @param string Template to load
*/
protected function _loadTemplate($template="")
{
$filename = SSI_TEMPLATES_DIR."/".$template;
if ( is_file($filename) )
{
if ( $FH = fopen($filename, 'r') )
{
$template = fread( $FH, filesize($filename) );
fclose($FH);
}
else
{
fatal_error("Couldn't open the template file");
}
}
else
{
fatal_error("Template file does not exist");
}
return $template;
}
}
function fatal_error( $error )
{
print $error;
exit();
}
-1
View File
@@ -1 +0,0 @@
<table cellpadding='4' cellspacing='1' border='0' width='100%' bgcolor='#000000' style='font-family:Verdana;font-size:11px'>␍<tr>␍ <td align='left' bgcolor='#CCCCCC'><b>Users browsing the forums: {total}</b></td>␍</tr>␍<tr>␍ <td align='left'bgcolor='#FEFEFE'>␍ <table style='border:1px dotted gray;width:100%;font-family:Verdana;font-size:10px'>␍ <tr>␍ <td>Active members: {members}<br>Active Guests: {guests}<br>Active Anonymous: {anon}␍ </td>␍ </tr>␍ </table>␍ </td>␍</tr>␍</table>␍<br>
-1
View File
@@ -1 +0,0 @@
<html>␍<head><title>Invision Power Board - Bulletin Board System</title></head>␍<body>␍<h1>403: Invision Power Board -&gt; Forbidden</h1>␍<hr>␍You have reached this Page in error, please use␍your back button to return to Invision Board.␍<hr>␍Invision Power Board␍</body>␍</html>␍
-1
View File
@@ -1 +0,0 @@
<table cellpadding='4' cellspacing='1' border='0' width='100%' bgcolor='#000000' style='font-family:Verdana;font-size:11px'>␍<tr>␍ <td align='left' bgcolor='#CCCCCC'><b>Board Statistics</b></td>␍</tr>␍<tr>␍ <td align='left'bgcolor='#FEFEFE'>␍ <table style='border:1px dotted gray;width:100%;font-family:Verdana;font-size:10px'>␍ <tr>␍ <td>Total Posts: {total_posts} ( Topics: {topics}, Replies {replies} )<br>␍ Registered Members: {members}␍ </td>␍ </tr>␍ </table>␍ </td>␍</tr>␍</table>␍<br>
-27
View File
@@ -1,27 +0,0 @@
[TOP]
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>{board_name}</title>
<link>{board_url}</link>
<description>{board_name} Syndication</description>
<language>en-us</language>
<generator>Invision Power Board</generator>
<ttl>30</ttl>
[/TOP]
[ROW]
<item>
<title>{topic_title}</title>
<link>{topic_link}</link>
<comments>{topic_link}</comments>
<category>{forum_title}</category>
<description><![CDATA[Forum: <a href="{board_url}?showforum={forum_id}">{forum_title}</a><br />Last Poster: <a href="{board_url}?showuser={last_poster_id}" target="_blank">{last_post_name}</a><br />Last Post: {last_post_time}]]></description>
<pubDate>{rfc_date}</pubDate>
</item>
[/ROW]
[BOTTOM]
</channel>
</rss>
[/BOTTOM]
-1
View File
@@ -1 +0,0 @@
[TOP]␍<?xml version="1.0" encoding="ISO-8859-1"?>␍<!DOCTYPE ipbsource␍[␍ <!-- CUSTOM IPB INLINE DOCTYPE -->␍ <!ELEMENT ipbsource (topic+) >␍ <!ELEMENT topic (title,lastposter,starter,forum,date) >␍ <!ATTLIST topic id CDATA #REQUIRED >␍ ␍ <!ELEMENT title (#PCDATA) >␍ ␍ <!ELEMENT lastposter (#PCDATA) >␍ <!ATTLIST lastposter id CDATA #REQUIRED >␍ ␍ <!ELEMENT starter (#PCDATA) >␍ <!ATTLIST starter id CDATA #REQUIRED >␍ ␍ <!ELEMENT forum (#PCDATA) >␍ <!ATTLIST forum id CDATA #REQUIRED >␍ ␍ <!ELEMENT date (#PCDATA) >␍ <!ATTLIST date timestamp CDATA #REQUIRED >␍]>␍<ipbsource>␍[/TOP]␍␍[ROW]␍ <topic id="{topic_id}">␍ <title>{topic_title}</title>␍ <lastposter id="{last_poster_id}">{last_post_name}</lastposter>␍ <starter id="{starter_id}">{starter_name}</starter>␍ <forum id="{forum_id}">{forum_title}</forum>␍ <date timestamp="{timestamp}">{last_post_time}</date>␍ </topic>␍[/ROW]␍␍[BOTTOM]␍</ipbsource>␍[/BOTTOM]
-142
View File
@@ -1,142 +0,0 @@
<?php
/**
* <pre>
* Invision Power Services
* IP.Board v3.4.6
* Installer: Upgrader core file
* Last Updated: $LastChangedDate: 2013-01-29 14:15:42 -0500 (Tue, 29 Jan 2013) $
* </pre>
*
* @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: 11913 $
*
*/
/*
This script completes the upgrade from modules onwards
Move the 'upgradeFinish' folder into your 'admin' directory
and access via your web browser
*/
$startPoint = 'modules';
define( 'IPB_THIS_SCRIPT', 'admin' );
define( 'IPS_IS_UPGRADER', TRUE );
define( 'IPS_IS_INSTALLER', FALSE );
require_once( '../../initdata.php' );/*noLibHook*/
# Bypass security check
if ( ! $_GET['s'] )
{
$_GET['section'] = 'index';
$_POST['section'] = 'index';
}
require_once( IPS_ROOT_PATH . 'setup/sources/base/ipsRegistry_setup.php' );/*noLibHook*/
require_once( IPS_ROOT_PATH . 'setup/sources/base/ipsController_setup.php' );/*noLibHook*/
/* INIT */
ipsRegistry::init();
/* Fetch admin */
if ( ! $_GET['s'] )
{
$admin = ipsRegistry::DB()->buildAndFetch( array( 'select' => '*',
'from' => 'members',
'where' => 'member_group_id=' . ipsRegistry::$settings['admin_group'],
'order' => 'last_visit DESC',
'limit' => array( 0,1 ) ) );
/* Set up a session */
ipsRegistry::$request['s'] = ipsRegistry::member()->sessionClass()->createSession( $admin, $admin['member_login_key'] );
$_GET['section'] = 'upgrade';
$_POST['section'] = 'upgrade';
ipsRegistry::$request['section'] = 'upgrade';
ipsRegistry::$current_section = 'upgrade';
/* Set up the correct module */
$_GET['do'] = ( $_GET['do'] ) ? $_GET['do'] : $startPoint;
$_POST['do'] = ( $_POST['do'] ) ? $_POST['do'] : $startPoint;
ipsRegistry::$request['do'] = ( ipsRegistry::$request['do'] ) ? ipsRegistry::$request['do'] : $startPoint;
$apps = array( 'core', 'forums', 'members' );
$toSave = array();
$vNums = array();
if ( is_array( $apps ) and count( $apps ) )
{
IPSSetUp::setSavedData( 'install_apps', implode( ',', $apps ) );
/* Grab data */
foreach( $apps as $app )
{
/* Grab version numbers */
$numbers = IPSSetUp::fetchAppVersionNumbers( $app );
/* Grab all numbers */
$nums[ $app ] = IPSSetUp::fetchXmlAppVersions( $app );
/* Grab app data */
$appData[ $app ] = IPSSetUp::fetchXmlAppInformation( $app );
$appClasses[ $app ] = IPSSetUp::fetchVersionClasses( $app, $numbers['current'][0], $numbers['latest'][0] );
/* Store starting vnums */
$vNums[ $app ] = $numbers['current'][0];
}
/* Got anything? */
if ( count( $appClasses ) )
{
foreach( $appClasses as $app => $data )
{
foreach( $data as $num )
{
if ( is_file( IPSLib::getAppDir( $app ) . '/setup/versions/upg_' . $num . '/version_class.php' ) )
{
$_class = 'version_class_' . $app . '_' . $num;
require_once( IPSLib::getAppDir( $app ) . '/setup/versions/upg_' . $num . '/version_class.php' );/*noLibHook*/
$_tmp = new $_class( ipsRegistry::instance() );
if ( method_exists( $_tmp, 'preInstallOptionsSave' ) )
{
$_t = $_tmp->preInstallOptionsSave();
if ( is_array( $_t ) AND count( $_t ) )
{
$toSave[ $app ][ $num ] = $_t;
}
}
}
}
}
/* Save it */
if ( count( $toSave ) )
{
IPSSetUp::setSavedData('custom_options', $toSave );
}
if ( count( $vNums ) )
{
IPSSetUp::setSavedData('version_numbers', $vNums );
}
}
/* Freeze data */
IPSSetUp::freezeSavedData();
/* Thaw it */
IPSSetUp::thawSavedData();
}
}
/* Run our controller */
ipsController::run();
+71
View File
@@ -0,0 +1,71 @@
.ipsButtons{
display: flex;
flex-wrap: wrap;
gap: .5em;
justify-content: center;
}
/* Base button style */
.ipsButton {
--_co: currentcolor;
background: #c0ccdb;
background: color-mix(in srgb, var(--_co) 15%, transparent);
text-align: center;
text-decoration: none;
display: inline-flex;
align-items: center;
gap: .8em;
vertical-align: middle;
padding: .8em 1.7em;
font-weight: 600;
border-radius: 5px;
cursor: pointer;
color: inherit;
position: relative;
}
.ipsButton:hover {
background: color-mix(in srgb, var(--_co) 22%, transparent);
}
.ipsButton:active {
top: 1px;
}
/* BUTTON STYLES */
.ipsButton--primary {
background: var(--i-primary);
color: var(--i-primary-contrast);
}
.ipsButton--primary:hover {
background: color-mix(in srgb, var(--i-primary), #fff 15%);
}
/* Link button - works like a button, but looks like text */
.ipsButton--text {
background: transparent;
color: inherit;
border: 1px solid transparent;
font-weight: normal;
}
.ipsButton--text:active {
border: 0;
box-shadow: none;
background-image: none;
}
/* BUTTON STATES */
.ipsButton:disabled {
opacity: .6;
font-style: italic;
cursor: default;
}
.ipsButton svg{
height: .9em;
width: auto;
fill: currentColor;
opacity: .8;
}
+463
View File
@@ -0,0 +1,463 @@
/*
----------------
- Form
----------------
*/
.ipsFieldRow{
display: grid;
gap: .8em;
padding: 2em;
border-bottom: 1px solid var(--i-background_4);
}
.ipsFieldRow[style*="list-item"]{
display: grid !important;
}
:is(.ipsFieldRow:last-child, .ipsFieldRow:has(+ .ipsSubmitRow)){
border-bottom-width: 0;
}
.ipsFieldRow ~ li:has(> .ipsHr:only-child){
display: none;
}
/* Form headers, eg in "Edit Profile" modal */
.ipsFieldRow__section{
padding: 1em;
font-weight: 600;
background: var(--i-background_3);
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 10;
}
/* Submit row */
.ipsSubmitRow{
flex: 0 0 auto; /* Useful when in flex-direction:column layouts */
background: var(--i-background_2);
padding: 1em;
border-top: 1px solid var(--i-background_4);
border-bottom-left-radius: var(--i-box--bo-ra);
border-bottom-right-radius: var(--i-box--bo-ra);
text-align: center;
}
/* Apply submit row styles to alternate HTML markup */
.ipsFieldRow:has(> .ipsFieldRow__content > button:only-child){
background: var(--i-background_2);
padding: 1em;
border-top: 1px solid var(--i-background_4);
border-bottom-left-radius: var(--i-box--bo-ra);
border-bottom-right-radius: var(--i-box--bo-ra);
text-align: center;
margin-top: -1px; /* This prevents a double border */
}
/* Labels */
.ipsFieldRow__label{
font-weight: 600;
display: block;
font-size: 1.1em;
color: var(--i-color_hard);
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 0em 2em;
}
/* Hide labels on certain forms */
.ipsFieldRow--noLabel .ipsFieldRow__label,
.ipsForm--noLabels .ipsFieldRow:not(.ipsFieldRow--checkbox) .ipsFieldRow__label {
display: none;
}
/* ..or if they're empty */
.ipsFieldRow__label:has(span:only-child:empty){
display: none;
}
/* Hide empty labels, but keep parent visible incase it contains "Required". Topic content forms are an example */
.ipsFieldRow__label span:empty{
display: none;
}
.ipsFieldRow__required {
font-size: max(.7em, 10px);
text-transform: uppercase;
color: #AA1414;
margin-inline-start: auto;
}
/* Descriptions */
.ipsFieldRow__desc {
font-size: 0.9em;
margin-top: .75em;
color: var(--i-color_soft);
}
.ipsFieldRow__label ~ .ipsFieldRow__desc{
margin-top: 0;
}
/* Warning */
.ipsFieldRow__warning{
color: var(--i-color_warning);
background: color-mix(in srgb, var(--i-color_warning) 15%, transparent);
border: 1px solid color-mix(in srgb, var(--i-color_warning) 40%, transparent);
padding: 0.8em 1em;
border-radius: 5px;
font-weight: 500;
margin-top: 1em;
font-size: .9em;
}
.ipsFieldRow__warning .fa-circle-exclamation{
margin-inline-end: .4em;
}
.ipsFieldRow__warning:empty{
display: none;
}
.ipsFieldRow__content{
flex: 999 1 55%;
}
/* Inline checkboxes */
.ipsFieldRow__inlineCheckbox{
display: inline-flex;
align-items: center;
gap: .5em;
}
/* Stacked form: Used for addresses, poll options, etc */
.ipsFieldListParent{
display: grid;
gap: 2em;
}
.ipsFieldList > *{
display: flex;
align-items: center;
gap: .8em;
padding: .4em;
}
.ipsFieldList > li:has([disabled]){
opacity: .5;
filter: grayscale(1);
pointer-events: none;
}
.ipsFieldList > input{
flex: 0 0 auto;
align-self: baseline;
margin-top: .2em;
}
.ipsFieldList__content{
flex: 1 1 auto;
}
.ipsFieldRow label[for]{
cursor: pointer;
}
/* Highlight code tags (ACP > Content Discovery > Search) */
.ipsFieldList__content code{
background: var(--i-background_3);
color: var(--i-color_hard);
border-radius: 4px;
padding: .3em;
display: inline-block;
}
/* Select menus: If they're followed by a label, set their width to auto */
.ipsFieldRow__content select:has(+ span){
width: auto;
margin-inline-end: .6em;
}
/* Inputs */
input:where(:not([type="checkbox"], [type="radio"])),
select,
textarea{
--i-outline-width: 0px;
background-color: var(--i-input--ba-co);
border-radius: var(--i-input--bo-ra);
border: 1px solid var(--i-input--bo-co);
box-shadow: var(--i-input--bo-sh, none);
color: var(--i-co);
display: inline-flex;
padding: var(--i-input--pa-bl) var(--i-input--pa-in);
/* width: 100%; */
max-width: 100%; /* Necessary if width is overwritten somewhere */
justify-self: start; /* Prevent inputs/selects from being 100% due to grid */
vertical-align: middle;
}
@media (any-hover:hover){
input:where(:not([type="checkbox"], [type="radio"])):where(:not([disabled])):hover,
select:where(:not([disabled])):hover,
textarea:where(:not([disabled])):hover{
border-color: var(--i-input-hover--bo-co);
}
}
/* Mobiles/tablets */
@media (hover: none) and (max-width: 1024px) {
input:where(:not([type="checkbox"], [type="radio"])),
select,
textarea{
font-size: max(16px, 1em);
}
}
input:where(:not([type="checkbox"], [type="radio"])):focus,
select:focus,
textarea:focus{
outline: 2px solid var(--i-input-active--bo-co);
outline-offset: -1px;
}
input::placeholder,
textarea::placeholder{
color: inherit;
opacity: var(--i-placeholder--op, .75);
}
input:where([type="number"]){
width: auto;
}
/* Colors */
input:where([type="color"]) {
min-width: 50px;
padding: 0;
}
/* Add arrow to select elements */
select:where(:not([multiple])){
cursor: pointer;
padding: var(--i-input--pa-bl) var(--i-input--pa-in);
padding-inline-end: calc(var(--i-input--pa-in) * 3);
background-image: var(--i-select--arrow);
background-size: auto 1em;
background-repeat: no-repeat;
background-position: calc(100% - 1em) 50%;
}
[dir="rtl"] select:where(:not([multiple])){
background-position: 1em 50%;
}
/* Hide 'x' in search input */
input::-webkit-search-cancel-button{
display: none;
}
textarea{
height: auto;
line-height: inherit;
padding: var(--i-input--pa-bl) var(--i-input--pa-in);
resize: vertical;
}
textarea[name="conf_global_error"] {
height: 200px;
font-family: monospace;
}
/* Disabled */
input:disabled{
opacity: .4;
font-style: italic;
pointer-events: none;
}
/*
----------------
- Checkbox and Radio inputs
----------------
*/
input:where([type="checkbox"], [type="radio"]){
-webkit-appearance: none;
appearance: none;
display: inline-flex;
align-items: center;
justify-content: center;
height: var(--i-input-toggle--size, 1.2em);
position: relative;
vertical-align: middle;
width: var(--i-input-toggle--size, 1.2em);
cursor: pointer;
background-color: var(--i-input--ba-co);
border-width: var(--i-input--bo-wi);
border-style: solid;
border-color: var(--i-input-toggle--bo-co, var(--i-input--bo-co));
box-shadow: var(--i-input--bo-sh, none);
flex: 0 0 auto;
}
/* Hovered and Checked */
@media (any-hover:hover){
input:where([type="checkbox"], [type="radio"]):hover{
border-color: var(--i-input-hover--bo-co);
}
}
/* Focus */
input:where([type="checkbox"], [type="radio"]):focus-visible{
--i-outline-color: var(--i-primary);
border-color: var(--i-input-active--bo-co);
outline: var(--i-outline-width) var(--i-outline-style) var(--i-outline-color);
outline-offset: var(--i-outline-offset);
}
input:where([type="checkbox"], [type="radio"]):checked{
background-color: var(--i-primary);
color: var(--i-primary-contrast);
border-color: transparent;
}
input:where([type="checkbox"], [type="radio"])::before{
content: '';
visibility: hidden;
}
input:where([type="checkbox"], [type="radio"]):checked::before{
visibility: visible;
}
/* Checkbox */
input:where([type="checkbox"]){
border-radius: var(--i-input-checkbox--bo-ra, max(4px, .2em));
}
/* Checkbox: tick */
input:where([type="checkbox"])::before{
content: "\f00c";
font-family: "Font Awesome 6 Free";
font-weight: 900;
-webkit-font-smoothing: antialiased;
display: block;
font-style: normal;
font-variant: normal;
line-height: 1;
text-rendering: auto;
font-size: 0.75em;
}
/* Radio */
input:where([type="radio"]){
border-radius: var(--i-input-radio--bo-ra, 50%);
}
/* Radio: dot */
input:where([type="radio"])::before{
background: currentColor;
border-radius: inherit;
width: 40%;
height: 40%;
}
/* Improved click/tap area */
@media(hover:none) and (pointer:coarse){
input:where([type="checkbox"], [type="radio"])::after{
content: '';
position: absolute;
top: 50%;
left: 50%;
height: max(30px, 100%);
width: max(30px, 100%);
transform: translate(-50%,-50%);
cursor: pointer;
z-index: 1;
}
}
label[for],
label:has(input){
cursor: pointer;
}
.ipsFieldRow__content textarea ~ label{
margin-top: 1em;
display: inline-block;
}
label input{
margin-inline-end: .6em;
}
.ipsFieldRow__warning:empty{
display: none;
}
/*
----------------
- Restyle certain forms/inputs
----------------
*/
/* Install: License key */
#license_lkey [name="lkey"]{
margin-inline-end: 1em;
}
#license_lkey a{
justify-self: start;
color: var(--i-color_soft);
}
#license_lkey a svg{
height: .8em;
margin-inline-start: .3em;
opacity: .5;
}
/* Install: Fix "Send usage and diagnostics" checkbox alignment */
#serverdetails_diagnostics_reporting{
grid-template-columns: auto 1fr;
position: relative;
}
#serverdetails_diagnostics_reporting > *{
grid-column: 2;
}
#serverdetails_diagnostics_reporting > label{
grid-column: 1;
order: -1;
}
#serverdetails_diagnostics_reporting label::before{
content: '';
position: absolute;
inset: 0;
}
/* Install: Admin username, password, email */
.ipsFieldRow[id^="admin_admin_"] input{
justify-self: stretch;
}
+221
View File
@@ -0,0 +1,221 @@
:root{
--i-background_1: hsl(215 32% 100%);
--i-background_2: hsl(215 32% 98.5%);
--i-background_3: hsl(215 32% 95%);
--i-background_4: hsl(215 32% 92%);
--i-background_5: hsl(215 32% 88%);
--i-color_root: hsl(215 32% 30%);
--i-color_soft: hsl(215 24% 49%);
--i-color_hard: hsl(215 60% 5%);
--i-color_positive: hsl(129 90% 25%);
--i-color_negative: hsl(0 95% 45%);
--i-color_warning: hsl(351 63% 40%);
--i-background_root: hsl(217 40% 96%);
--i-link--co: hsl(215 46% 14%);
--i-link-hover--co: hsl(215 84% 33%);
--i-header--ba-co: hsl(215 39% 20%);
--i-header--co: hsl(0 0% 100%);
--i-box--bo-ra: 6px;
--i-box--ba-co: hsl(0 0% 100%);
--i-box--bo-sh: hsla(215 41% 10% / 0.12) 0px 8px 7px -3px;
--i-box--bo-co: hsl(215 60% 30% / .1);
--i-primary: hsl(215 85% 50%);
--i-primary-contrast: hsl(0 0% 100%);
--i-secondary: hsl(215 48% 13%);
--i-secondary-contrast: hsl(0 0% 100%);
--i-outline-width: 2px;
--i-outline-style: solid;
--i-outline-color: var(--i-primary);
--i-input--ba-co: var(--i-background_1);
--i-input--pa-bl: .7em;
--i-input--pa-in: 1em;
--i-input--bo-wi: 1px;
--i-input--bo-ra: .4em;
--i-input--bo-co: color-mix(in srgb, currentColor 40%, transparent);
--i-input--bo-sh: hsl(0 0% 0% / .05) 0px 2px 1px;
--i-input-hover--bo-co: color-mix(in srgb, currentColor 40%, transparent);
--i-input-active--bo-co: var(--i-primary);
--i-placeholder--op: .75;
--i-select--arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M169.4 342.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 274.7 54.6 137.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z' fill='hsl(0,0%25,0%25,.5)'/%3E%3C/svg%3E");
}
[data-ips-scheme="dark"]{
--i-select--arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M169.4 342.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 274.7 54.6 137.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z' fill='hsl(0,0%25,100%25,.5)'/%3E%3C/svg%3E");
}
html {
background: var(--i-background_root);
position: relative;
}
body {
font-family: system-ui, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: calc(1rem / 16 * 15);
line-height: 1.5;
color: var(--i-color_root);
min-height: 100vh;
min-height: 100svh;
padding: 50px 0;
}
pre {
white-space: pre-wrap;
text-align: start;
}
:where(a) {
color: var(--i-link--co);
text-decoration: none;
}
:where(a:hover) {
color: var(--i-link-hover--co);
}
#ipsInstaller {
margin: 0 auto;
max-width: min(95vw, 1200px);
border-radius: var(--i-box--bo-ra);
background-color: var(--i-box--ba-co);
background-clip: padding-box;
border: 1px solid var(--i-box--bo-co);
}
.ipsInstaller__header {
background: var(--i-header--ba-co);
color: var(--i-header--co);
border-radius: var(--i-box--bo-ra) var(--i-box--bo-ra) 0 0;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 1em;
padding: 1.3em;
}
.ipsInstaller__logo{
display: flex;
align-items: center;
gap: .8em;
font-size: 22px;
color: inherit;
text-decoration: none;
font-weight: 300;
}
.ipsInstaller__logo svg {
width: auto;
height: 1em;
fill: currentColor;
}
/* .ipsInstaller__page-title{
padding: 1.4em;
background: var(--i-background_3);
} */
.ipsInstaller__padding{
padding: 3em;
}
@keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
.ipsProgressBar {
margin: auto;
height: 30px;
overflow: hidden;
background: var(--i-background_5);
border-radius: 8px;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.ipsProgressBar_animated .ipsProgressBar_progress {
background-color: var(--i-primary);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-size: 40px 40px;
animation: progress-bar-stripes 2s linear infinite;
}
.ipsProgressBar_progress {
float: left;
width: 0;
height: 100%;
font-size: 12px;
color: #ffffff;
text-align: center;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
background: var(--i-primary);
position: relative;
padding-left: 6px;
}
.ipsProgressBar_progress[data-progress]:after {
position: absolute;
right: 5px;
top: 0;
line-height: 32px;
color: #fff;
content: attr(data-progress);
display: block;
font-weight: bold;
}
/* Redirector */
.ipsRedirect {
text-align: center;
}
.ipsRedirect_loading {
height: 100px;
}
.ipsRedirect_progress {
margin-bottom: 20px;
}
.ipsRedirect_message {
display: block;
text-align: center;
font-size: .9em;
color: var(--i-color_soft);
}
.ipsRedirect_message.custom_message {
text-align: start;
color: var(--i-color_root);
}
/* Code */
.ipsCode {
background: var(--i-background_2);
padding: 1em;
border: 0;
border-inline-start: 4px solid var(--i-color_soft);
clear: both;
}
/* Multi redirect */
.ipsMultipleRedirect{
padding: 3em;
}
/* Footer */
.ipsInstaller__ip{
text-align: center;
margin-top: 2em;
color: var(--i-color_soft);
}
File renamed without changes.
+38
View File
@@ -0,0 +1,38 @@
#elInstaller_steps {
font-weight: 500;
padding: 3em 2em;
padding-inline-end: 0;
display: grid;
gap: 2em;
position: -webkit-sticky;
position: sticky;
top: 0;
}
#elInstaller_steps li{
display: flex;
align-items: center;
gap: .8em;
}
#elInstaller_steps svg{
width: 1em;
height: auto;
fill: currentColor;
}
.elInstaller_steps__done {
color: var(--i-color_positive);
}
.elInstaller_steps__current {
color: var(--i-color_hard);
}
.elInstaller_steps__future {
color: var(--i-color_soft);
}
.elInstaller_steps__future svg{
opacity: .3;
}
+41
View File
@@ -0,0 +1,41 @@
/* Fixed column sizing */
.ipsColumns {
display: flex;
flex-wrap: wrap;
}
.ipsColumns__primary{
flex: 9999 1 50%;
}
.ipsColumns__secondary{
flex: 1 1 18em;
background: var(--i-background_2);
border-inline-end: 1px solid var(--i-background_4);
border-end-start-radius: var(--i-box--bo-ra); /* Prevent overflowing of border-radius */
}
.ipsColumn_medium {
flex: 1 1 200px;
}
.ipsColumn_wide {
flex: 1 1 280px;
}
.i-margin-top_1{ margin-top: .5em; }
.i-margin-top_2{ margin-top: 1em; }
.i-margin-top_3{ margin-top: 2em; }
.i-margin-top_4{ margin-top: 3em; }
.i-margin-top_5{ margin-top: 4em; }
.i-margin-bottom_1{ margin-bottom: .5em; }
.i-margin-bottom_2{ margin-bottom: 1em; }
.i-margin-bottom_3{ margin-bottom: 2em; }
.i-margin-bottom_4{ margin-bottom: 3em; }
.i-margin-bottom_5{ margin-bottom: 4em; }
.i-padding_1{ padding: .5em; }
.i-padding_2{ padding: 1em; }
.i-padding_3{ padding: 2em; }
.i-padding_4{ padding: 3em; }
.i-padding_5{ padding: 4em; }
+67
View File
@@ -0,0 +1,67 @@
.ipsMessage {
padding: 1em;
padding-inline-start: 3em;
border-radius: 5px;
position: relative;
margin-bottom: 1em;
color: #fff;
font-weight: 500;
font-size: .9em;
}
.ipsMessage::before {
font-family: 'Font Awesome 6 Free';
font-weight: 900;
-webkit-font-smoothing: antialiased;
text-rendering: auto;
position: absolute;
top: 1em;
inset-inline-start: 1em;
}
.ipsMessage--form{
margin: 1em;
}
.ipsMessage--error {
background: #b52b38;
}
.ipsMessage--error::before {
content: '\f06a';
}
.ipsMessage--success {
background: #53902f;
}
.ipsMessage--success::before {
content: '\f00c';
}
.ipsMessage--warning {
background: #c48712;
}
.ipsMessage--warning::before {
content: '\f071';
}
.ipsMessage--info {
background: #447a9a;
}
.ipsMessage--info::before {
content: '\f05a';
}
.ipsMessage--code {
padding: 7px;
display: inline-block;
background: rgba(0,0,0,0.2);
border-radius: 5px;
float: right;
margin-top: -7px;
margin-right: -7px;
color: rgba(255,255,255,0.8);
}
+84
View File
@@ -0,0 +1,84 @@
/* MISC COLORS */
.ipsAreaBackground {
background: #ebebeb;
}
.ipsAreaBackground_light {
background: #fafafa;
}
/* MISC */
hr.ipsHr {
margin: 15px 0;
height: 0;
padding: 0;
border-width: 1px 0 0 0;
border-style: solid;
border-color: #f0f0f0;
}
@-webkit-keyframes spinner {
0% { transform: rotate(0deg); }
100% { transform: rotate(359deg); }
}
@keyframes spinner {
0% { transform: rotate(0deg); }
100% { transform: rotate(359deg); }
}
.ipsPos_center { margin: 0 auto; }
.ipsHide { display: none }
.ipsList_bullets {
list-style-type: disc;
margin-left: 16px;
}
.ipsList_checks{
margin-bottom: 3em;
display: grid;
gap: 1em;
font-weight: 500;
}
.ipsList_checks li:not(.ipsMessage) {
position: relative;
padding-inline-start: 1.6em;
}
.ipsList_checks li:not(.ipsMessage)::before{
font-family: 'Font Awesome 6 Free';
font-weight: 900;
-webkit-font-smoothing: antialiased;
text-rendering: auto;
position: absolute;
inset-inline-start: 0;
font-size: .9em;
margin-top: .05em;
}
.ipsList_checks .success {
color: var(--i-color_positive);
}
.ipsList_checks .success::before {
content: '\f00c';
}
.ipsList_checks .fail {
color: var(--i-color_negative);
}
.ipsList_checks .fail::before {
content: '\f057';
}
.ipsList_checks .advisory {
color: var(--i-color_soft);
}
.ipsList_checks .advisory::before {
content: '\f05a';
}
.ipsPad { padding: 15px; }
.ipsPad_double { padding: 30px; }
.ipsPad_half { padding: 7px; }
+91
View File
@@ -0,0 +1,91 @@
*, *::before, *::after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*{
margin: 0;
padding: 0;
min-width: 0;
min-height: 0;
}
ul, ol{
list-style-type: none;
}
article, aside, details, figcaption, figure, footer,
header, hgroup, nav, section, main {
display: block;
}
html {
-webkit-text-size-adjust: 100%;
accent-color: var(--i-primary);
-webkit-font-smoothing: antialiased;
text-rendering: optimizelegibility;
}
:focus{
outline-color: transparent;
}
:focus-visible{
outline: var(--i-outline-width) var(--i-outline-style) var(--i-outline-color);
outline-offset: var(--i-outline-offset);
}
img {
vertical-align: middle;
border: 0;
}
:where(input, textarea, select, button){
background: none;
border: 0;
color: inherit;
font-family: inherit;
font-size: inherit;
font-weight: inherit;
line-height: inherit;
text-align: inherit;
}
textarea, select{
-webkit-appearance: none;
appearance: none;
box-shadow: none;
}
textarea{
display: block;
width: 100%;
}
select{
cursor: inherit;
}
[type="search"]{
-webkit-appearance: none;
appearance: none;
}
button, [type="submit"], summary{
-webkit-appearance: none;
appearance: none;
cursor: pointer;
user-select: none;
}
h1,h2,h3,h4,h5,h6 {
font-weight: inherit;
font-size: inherit;
}
svg{
height: 1em;
width: auto;
fill: currentColor;
}
+51
View File
@@ -0,0 +1,51 @@
/* HEADINGS */
.ipsType_pageTitle {
font-size: 1.8em;
color: var(--i-color_hard);
font-weight: 500;
line-height: 1.2;
}
.ipsType_pageTitle .fa{
font-size: .75em;
}
.ipsType_pageTitle a {
color: inherit;
}
.ipsType_pageTitle + p{
margin-top: 1em;
}
.ipsType_sectionHead {
font-size: 1.3em;
color: var(--i-color_hard);
font-weight: 500;
margin-bottom: 1em;
}
.ipsList_checks + .ipsType_sectionHead{
margin-top: 3em;
}
/* ALIGNMENT */
.i-text-align_center { text-align: center; }
/* SIZING */
.i-font-size_small {
font-size: max(11px, .8em);
}
.i-font-size_large {
font-size: 1.2em;
}
/* COLORS */
.i-color_soft {
color: var(--i-color_soft);
}
.i-color_warning {
color: var(--i-color_warning);
}
+9
View File
@@ -0,0 +1,9 @@
/*!
* Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animaLine truncated
.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f5Line truncated
.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:beLine truncated
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+15
View File
@@ -0,0 +1,15 @@
<?php
/**
* @brief Admin CP bootstrap
* @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
* @since 18 Feb 2013
*/
use IPS\Dispatcher\Admin;
define('REPORT_EXCEPTIONS', TRUE);
require_once '../init.php';
Admin::i()->run();
Binary file not shown.

After

Width:  |  Height:  |  Size: 784 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 834 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

+86
View File
@@ -0,0 +1,86 @@
{
":classic_angry:": {
"image": "angry.png",
"image_2x": "angry@2x.png"
},
":classic_biggrin:": {
"image": "biggrin.png",
"image_2x": "biggrin@2x.png"
},
":classic_blink:": {
"image": "blink.png",
"image_2x": "blink@2x.png"
},
":classic_blush:": {
"image": "blush.png",
"image_2x": "blush@2x.png"
},
":classic_cool:": {
"image": "cool.png",
"image_2x": "cool@2x.png"
},
":classic_dry:": {
"image": "dry.png",
"image_2x": "dry@2x.png"
},
":classic_happy:": {
"image": "happy.png",
"image_2x": "happy@2x.png"
},
":classic_huh:": {
"image": "huh.png",
"image_2x": "huh@2x.png"
},
":classic_laugh:": {
"image": "laugh.png",
"image_2x": "laugh@2x.png"
},
":classic_mellow:": {
"image": "mellow.png",
"image_2x": "mellow@2x.png"
},
":classic_ohmy:": {
"image": "ohmy.png",
"image_2x": "ohmy@2x.png"
},
":classic_ninja:": {
"image": "ph34r.png",
"image_2x": "ph34r@2x.png"
},
":classic_rolleyes:": {
"image": "rolleyes.gif",
"image_2x": "rolleyes@2x.png"
},
":classic_sad:": {
"image": "sad.png",
"image_2x": "sad@2x.png"
},
":classic_sleep:": {
"image": "sleep.png",
"image_2x": "sleep@2x.png"
},
":classic_smile:": {
"image": "smile.png",
"image_2x": "smile@2x.png"
},
":classic_tongue:": {
"image": "tongue.png",
"image_2x": "tongue@2x.png"
},
":classic_unsure:": {
"image": "unsure.png",
"image_2x": "unsure@2x.png"
},
":classic_wacko:": {
"image": "wacko.png",
"image_2x": "wacko@2x.png"
},
":classic_wink:": {
"image": "wink.png",
"image_2x": "wink@2x.png"
},
":classic_love:": {
"image": "wub.png",
"image_2x": "wub@2x.png"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 780 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

File renamed without changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 717 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 791 B

Loaded 100 of 15282 files, more files were not shown because too many files have changed in this diff. Show more