Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dbd774b30c | ||
|
|
5efe744c5f | ||
|
|
b89858b2ff | ||
|
|
a3a4a9ccbd | ||
|
|
90e8c7e903 | ||
|
|
264eeb97e0 | ||
|
|
56979f8ee8 | ||
|
|
214f649f1d | ||
|
|
54d5dcd0a0 | ||
|
|
fa2a720105 | ||
|
|
57d9db6ce2 | ||
|
|
2f24f9de48 | ||
|
|
e86153356a | ||
|
|
f61b0da85d | ||
|
|
15c7beabc5 | ||
|
|
25ddeb65d6 | ||
|
|
7124a02564 | ||
|
|
fd22d99e69 | ||
|
|
7b7404e741 | ||
|
|
8ba7d43898 | ||
|
|
517a5e1f70 | ||
|
|
f79dcf067a | ||
|
|
1a0c7fd3c2 | ||
|
|
fe1acf984a | ||
|
|
96997ddd8e | ||
|
|
0dc2aee5ed | ||
|
|
2bd5025018 | ||
|
|
28bd025b35 | ||
|
|
3ba79295ee | ||
|
|
c6a86f0d9b |
No files matched your search
@@ -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;
|
||||
@@ -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
|
||||
@@ -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 →
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div class='message'>
|
||||
<a href='http://anonym.to/?http://external.ipslink.com/ipboard30/landing/?p=upgrade-guide'>Upgrading →
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div class='message'>
|
||||
<a href='http://anonym.to/?http://external.ipslink.com/ipboard30/landing/?p=convert-guide'>Converting →
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div class='copyright'>
|
||||
© 2012 Invision Power Services, Inc.
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
Before Width: | Height: | Size: 357 B |
|
Before Width: | Height: | Size: 1008 B |
|
Before Width: | Height: | Size: 1009 B |
|
Before Width: | Height: | Size: 1010 B |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 701 B |
|
Before Width: | Height: | Size: 138 B |
@@ -1 +0,0 @@
|
||||
<html>␍<head><title>Invision Power Board - Bulletin Board System</title></head>␍<body>␍<h1>403: Invision Power Board -> 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>␍
|
||||
|
Before Width: | Height: | Size: 778 B |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 294 B |
|
Before Width: | Height: | Size: 213 B |
|
Before Width: | Height: | Size: 295 B |
|
Before Width: | Height: | Size: 43 B |
|
Before Width: | Height: | Size: 138 B |
|
Before Width: | Height: | Size: 295 B |
|
Before Width: | Height: | Size: 3.1 KiB |
@@ -1,10 +0,0 @@
|
||||
<html>
|
||||
<head><title>IP.Board - Bulletin Board System</title></head>
|
||||
<body>
|
||||
<h1>403: IP.Board -> 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>
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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();
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@@ -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();
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@@ -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();
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@@ -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>
|
||||
@@ -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 ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -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
|
||||
|
||||
==============================================
|
||||
@@ -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();
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@@ -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();
|
||||
@@ -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();
|
||||
@@ -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();
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@@ -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();
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@@ -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();
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@@ -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();
|
||||
@@ -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();
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@@ -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();
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@@ -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();
|
||||
@@ -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( '&#', '&#', $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 +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 +0,0 @@
|
||||
<html>␍<head><title>Invision Power Board - Bulletin Board System</title></head>␍<body>␍<h1>403: Invision Power Board -> 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 +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>
|
||||
@@ -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 +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]
|
||||
@@ -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();
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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; }
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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; }
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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();
|
||||
|
After Width: | Height: | Size: 784 B |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 695 B |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 765 B |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 834 B |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 759 B |
|
After Width: | Height: | Size: 2.9 KiB |
@@ -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"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 780 B |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 794 B |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 814 B |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 717 B |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 775 B |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 784 B |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 586 B |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 791 B |