diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5ae3bec95..995cffe29 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,25 @@
# Change Log
+## [v2.3.0.4-beta](https://github.com/torrentpier/torrentpier/tree/v2.3.0.4-beta) (2023-02-22)
+[Full Changelog](https://github.com/torrentpier/torrentpier/compare/v2.3.0.3...v2.3.0.4-beta)
+
+**Merged pull requests:**
+
+- docs: change official forum path [\#532](https://github.com/torrentpier/torrentpier/pull/532) ([Exileum](https://github.com/Exileum))
+- Fixed broken sql log selecting in debug-panel [\#533](https://github.com/torrentpier/torrentpier/pull/533) ([belomaxorka](https://github.com/belomaxorka))
+- New implementation of old browser detector [\#534](https://github.com/torrentpier/torrentpier/pull/534) ([belomaxorka](https://github.com/belomaxorka))
+- Fixed SQLite caching issue [\#535](https://github.com/torrentpier/torrentpier/pull/535) ([belomaxorka](https://github.com/belomaxorka))
+- Extended email validation [\#536](https://github.com/torrentpier/torrentpier/pull/536) ([belomaxorka](https://github.com/belomaxorka))
+- Admin panel adjustments [\#538](https://github.com/torrentpier/torrentpier/pull/538) ([belomaxorka](https://github.com/belomaxorka))
+- Added user birthday icon in profile [\#539](https://github.com/torrentpier/torrentpier/pull/539) ([belomaxorka](https://github.com/belomaxorka))
+- Added forum description in viewforum page [\#540](https://github.com/torrentpier/torrentpier/pull/540) ([belomaxorka](https://github.com/belomaxorka))
+- Fixed broken copy log from debug-panel [\#541](https://github.com/torrentpier/torrentpier/pull/541) ([belomaxorka](https://github.com/belomaxorka))
+- Added copy button in viewforum page [\#542](https://github.com/torrentpier/torrentpier/pull/542) ([belomaxorka](https://github.com/belomaxorka))
+- Added current topic url copy button in viewtopic [\#543](https://github.com/torrentpier/torrentpier/pull/543) ([belomaxorka](https://github.com/belomaxorka))
+- Added ``$bb_cfg['emailer']['enabled']`` check in admin_mass_email.php [\#545](https://github.com/torrentpier/torrentpier/pull/545) ([belomaxorka](https://github.com/belomaxorka))
+- Updated scrollTo up to 1.4.6 [\#547](https://github.com/torrentpier/torrentpier/pull/547) ([belomaxorka](https://github.com/belomaxorka))
+- Updated quicksearch up to Feb 21, 2018 commit [\#548](https://github.com/torrentpier/torrentpier/pull/548) ([belomaxorka](https://github.com/belomaxorka))
+
## [v2.3.0.3](https://github.com/torrentpier/torrentpier/tree/v2.3.0.3) (2023-02-18)
[Full Changelog](https://github.com/torrentpier/torrentpier/compare/v2.3.0.2...v2.3.0.3)
diff --git a/admin/admin_mass_email.php b/admin/admin_mass_email.php
index e3213e54e..2eaa1c1a9 100644
--- a/admin/admin_mass_email.php
+++ b/admin/admin_mass_email.php
@@ -14,6 +14,10 @@ if (!empty($setmodules)) {
require __DIR__ . '/pagestart.php';
+if (!$bb_cfg['emailer']['enabled']) {
+ bb_die($lang['EMAILER_DISABLED']);
+}
+
set_time_limit(1200);
$subject = (string)trim(request_var('subject', ''));
diff --git a/composer.json b/composer.json
index 6a6fdcac7..0d431b220 100644
--- a/composer.json
+++ b/composer.json
@@ -42,22 +42,21 @@
},
"require": {
"php": "^7.1.3",
- "bugsnag/bugsnag": "*",
+ "bugsnag/bugsnag": "v3.29.0",
"egulias/email-validator": "2.*",
- "filp/whoops": "*",
- "gigablah/sphinxphp": "*",
- "google/recaptcha": "*",
+ "filp/whoops": "2.14.6",
+ "gigablah/sphinxphp": "2.0.8",
+ "google/recaptcha": "1.2.4",
"guzzlehttp/guzzle": "6.*",
"guzzlehttp/psr7": "1.*",
- "longman/ip-tools": "*",
- "rych/bencode": "*",
- "samdark/sitemap": "*",
- "swiftmailer/swiftmailer": "*",
+ "longman/ip-tools": "1.2.1",
+ "rych/bencode": "v1.0.0",
+ "samdark/sitemap": "2.4.0",
+ "swiftmailer/swiftmailer": "v6.3.0",
"symfony/dotenv": "4.*",
- "symfony/polyfill": "*"
+ "symfony/polyfill": "v1.27.0"
},
"require-dev": {
- "phpstan/phpstan": "*",
"symfony/var-dumper": "4.*"
},
"autoload": {
diff --git a/composer.lock b/composer.lock
index 32492ddad..627755cdc 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "f032a639a723929ad90e6ecf95aa4054",
+ "content-hash": "fe19943e4649e385d7d39dad9572fdcc",
"packages": [
{
"name": "bugsnag/bugsnag",
@@ -1361,65 +1361,6 @@
}
],
"packages-dev": [
- {
- "name": "phpstan/phpstan",
- "version": "1.9.16",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpstan.git",
- "reference": "922e2689bb180575d0f57de0443c431a5a698e8f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/922e2689bb180575d0f57de0443c431a5a698e8f",
- "reference": "922e2689bb180575d0f57de0443c431a5a698e8f",
- "shasum": ""
- },
- "require": {
- "php": "^7.2|^8.0"
- },
- "conflict": {
- "phpstan/phpstan-shim": "*"
- },
- "bin": [
- "phpstan",
- "phpstan.phar"
- ],
- "type": "library",
- "autoload": {
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHPStan - PHP Static Analysis Tool",
- "keywords": [
- "dev",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/phpstan/phpstan/issues",
- "source": "https://github.com/phpstan/phpstan/tree/1.9.16"
- },
- "funding": [
- {
- "url": "https://github.com/ondrejmirtes",
- "type": "github"
- },
- {
- "url": "https://github.com/phpstan",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
- "type": "tidelift"
- }
- ],
- "time": "2023-02-07T10:42:21+00:00"
- },
{
"name": "symfony/var-dumper",
"version": "v4.4.47",
diff --git a/library/ajax/manage_admin.php b/library/ajax/manage_admin.php
index ee5d380f1..4f174a5d7 100644
--- a/library/ajax/manage_admin.php
+++ b/library/ajax/manage_admin.php
@@ -62,7 +62,7 @@ switch ($mode) {
exec("indexer --config {$bb_cfg['sphinx_config_path']} --all --rotate", $result);
if (!is_file($bb_cfg['sphinx_config_path'] . ".log")) {
- file_put_contents($bb_cfg['sphinx_config_path'] . ".log", "####Logger from dimka3210.####" . date("H:i:s", TIMENOW) . "##############################\r\n\r\n\r\n\r\n", FILE_APPEND);
+ file_put_contents($bb_cfg['sphinx_config_path'] . ".log", "##############################" . date("H:i:s", TIMENOW) . "##############################\r\n\r\n\r\n\r\n", FILE_APPEND);
}
file_put_contents($bb_cfg['sphinx_config_path'] . ".log", "##############################" . date("H:i:s", TIMENOW) . "##############################\r\n", FILE_APPEND);
diff --git a/library/config.php b/library/config.php
index 6f6be8de4..f6ed0e550 100644
--- a/library/config.php
+++ b/library/config.php
@@ -21,8 +21,8 @@ $bb_cfg = [];
$bb_cfg['js_ver'] = $bb_cfg['css_ver'] = 1;
// Version info
-$bb_cfg['tp_version'] = '2.3.0.3';
-$bb_cfg['tp_release_date'] = '18-02-2023';
+$bb_cfg['tp_version'] = '2.3.0.4-beta';
+$bb_cfg['tp_release_date'] = '22-02-2023';
$bb_cfg['tp_release_codename'] = 'Bison';
// Database
diff --git a/styles/js/jquery.pack.js b/styles/js/jquery.pack.js
index 408d367e3..57a6bb6d8 100644
--- a/styles/js/jquery.pack.js
+++ b/styles/js/jquery.pack.js
@@ -24,11 +24,11 @@
// printThis v1.15.0
!function(e){var t;function n(e,t){t&&e.append(t.jquery?t.clone():t)}e.fn.printThis=function(i){t=e.extend({},e.fn.printThis.defaults,i);var a=this instanceof jQuery?this:e(this),r="printThis-"+new Date().getTime();if(window.location.hostname!==document.domain&&navigator.userAgent.match(/msie/i)){var o='javascript:document.write("
")',s=document.createElement("iframe");s.name="printIframe",s.id=r,s.className="MSIE",document.body.appendChild(s),s.src=o}else e("").appendTo("body");var c=e("#"+r);t.debug||c.css({position:"absolute",width:"0px",height:"0px",left:"-600px",top:"-600px"}),"function"==typeof t.beforePrint&&t.beforePrint(),setTimeout(function(){t.doctypeString&&(f=c,h=t.doctypeString,(u=(m=(m=f.get(0)).contentWindow||m.contentDocument||m).document||m.contentDocument||m).open(),u.write(h),u.close());var i,r,o,s,d,l,p,f,h,m,u,v,y=c.contents(),S=y.find("head"),$=y.find("body"),b=e("base");v=!0===t.base&&b.length>0?b.attr("href"):"string"==typeof t.base?t.base:document.location.protocol+"//"+document.location.host,S.append(''),t.importCSS&&e("link[rel=stylesheet]").each(function(){var t=e(this).attr("href");if(t){var n=e(this).attr("media")||"all";S.append("")}}),t.importStyle&&e("style").each(function(){S.append(this.outerHTML)}),t.pageTitle&&S.append(""+t.pageTitle+""),t.loadCSS&&(e.isArray(t.loadCSS)?jQuery.each(t.loadCSS,function(e,t){S.append("")}):S.append(""));var g=e("html")[0];y.find("html").prop("style",g.style.cssText);var C=t.copyTagClasses;if(C&&(-1!==(C=!0===C?"bh":C).indexOf("b")&&$.addClass(e("body")[0].className),-1!==C.indexOf("h")&&y.find("html").addClass(g.className)),n($,t.header),t.canvas){var T=0;a.find("canvas").addBack("canvas").each(function(){e(this).attr("data-printthis",T++)})}if(i=$,r=a,o=t,s=r.clone(o.formValues),o.formValues&&function t(n,i,a){var r=n.find(a);i.find(a).each(function(t,n){e(n).val(r.eq(t).val())})}(r,s,"select, textarea"),o.removeScripts&&s.find("script").remove(),o.printContainer?s.appendTo(i):s.each(function(){e(this).children().appendTo(i)}),t.canvas&&$.find("canvas").each(function(){var t=e(this).data("printthis"),n=e('[data-printthis="'+t+'"]');this.getContext("2d").drawImage(n[0],0,0),e.isFunction(e.fn.removeAttr)?n.removeAttr("data-printthis"):e.each(n,function(e,t){t.removeAttribute("data-printthis")})}),t.removeInline){var x=t.removeInlineSelector||"*";e.isFunction(e.removeAttr)?$.find(x).removeAttr("style"):$.find(x).attr("style","")}n($,t.footer),d=c,l=t.beforePrint,p=(p=d.get(0)).contentWindow||p.contentDocument||p,"function"==typeof l&&("matchMedia"in p?p.matchMedia("print").addListener(function(e){e.matches&&l()}):p.onbeforeprint=l),setTimeout(function(){c.hasClass("MSIE")?(window.frames.printIframe.focus(),S.append("")):document.queryCommandSupported("print")?c[0].contentWindow.document.execCommand("print",!1,null):(c[0].contentWindow.focus(),c[0].contentWindow.print()),t.debug||setTimeout(function(){c.remove()},1e3),"function"==typeof t.afterPrint&&t.afterPrint()},t.printDelay)},333)},e.fn.printThis.defaults={debug:!1,importCSS:!0,importStyle:!1,printContainer:!0,loadCSS:"",pageTitle:"",removeInline:!1,removeInlineSelector:"*",printDelay:333,header:null,footer:null,base:!1,formValues:!0,canvas:!1,doctypeString:"",removeScripts:!1,copyTagClasses:!1,beforePrintEvent:null,beforePrint:null,afterPrint:null}}(jQuery);
-// treeview pre-1.4.1 [http://plugins.jquery.com/project/treeview]
-(function(a){a.extend(a.fn,{swapClass:function(e,d){var c=this.filter("."+e);this.filter("."+d).removeClass(d).addClass(e);c.removeClass(e).addClass(d);return this},replaceClass:function(d,c){return this.filter("."+d).removeClass(d).addClass(c).end()},hoverClass:function(c){c=c||"hover";return this.hover(function(){a(this).addClass(c)},function(){a(this).removeClass(c)})},heightToggle:function(c,d){c?this.animate({height:"toggle"},c,d):this.each(function(){jQuery(this)[jQuery(this).css("display")!="block"?"show":"hide"]();if(d){d.apply(this,arguments)}})},heightHide:function(c,d){if(c){this.animate({height:"hide"},c,d)}else{this.hide();if(d){this.each(d)}}},prepareBranches:function(c){if(!c.prerendered){this.filter(":last-child:not(ul)").addClass(b.last);this.filter((c.collapsed?"":"."+b.closed)+":not(."+b.open+")").find(">ul").hide()}return this.filter(":has(>ul)")},applyClasses:function(d,e){this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview",function(f){if(this==f.target){e.apply(a(this).next())}}).add(a("a",this)).hoverClass();if(!d.prerendered){this.filter(":has(>ul:hidden)").addClass(b.expandable).replaceClass(b.last,b.lastExpandable);this.not(":has(>ul:hidden)").addClass(b.collapsable).replaceClass(b.last,b.lastCollapsable);var c=this.find("div."+b.hitarea);if(!c.length){c=this.prepend('').find("div."+b.hitarea)}c.removeClass().addClass(b.hitarea).each(function(){var f="";a.each(a(this).parent().attr("class").split(" "),function(){f+=this+"-hitarea "});a(this).addClass(f)})}this.find("div."+b.hitarea).click(e)},treeview:function(d){d=a.extend({cookieId:"treeview"},d);if(d.toggle){var i=d.toggle;d.toggle=function(){return i.apply(a(this).parent()[0],arguments)}}function c(l,n){function m(o){return function(){f.apply(a("div."+b.hitarea,l).filter(function(){return o?a(this).parent("."+o).length:true}));return false}}a("a:eq(0)",n).click(m(b.collapsable));a("a:eq(1)",n).click(m(b.expandable));a("a:eq(2)",n).click(m())}function f(){a(this).parent().find(">.hitarea").swapClass(b.collapsableHitarea,b.expandableHitarea).swapClass(b.lastCollapsableHitarea,b.lastExpandableHitarea).end().swapClass(b.collapsable,b.expandable).swapClass(b.lastCollapsable,b.lastExpandable).find(">ul").heightToggle(d.animated,d.toggle);if(d.unique){a(this).parent().siblings().find(">.hitarea").replaceClass(b.collapsableHitarea,b.expandableHitarea).replaceClass(b.lastCollapsableHitarea,b.lastExpandableHitarea).end().replaceClass(b.collapsable,b.expandable).replaceClass(b.lastCollapsable,b.lastExpandable).find(">ul").heightHide(d.animated,d.toggle)}}this.data("toggler",f);function k(){function m(n){return n?1:0}var l=[];j.each(function(n,o){l[n]=a(o).is(":has(>ul:visible)")?1:0});a.cookie(d.cookieId,l.join(""),d.cookieOptions)}function e(){var l=a.cookie(d.cookieId);if(l){var m=l.split("");j.each(function(n,o){a(o).find(">ul")[parseInt(m[n])?"show":"hide"]()})}}this.addClass("treeview");var j=this.find("li").prepareBranches(d);switch(d.persist){case"cookie":var h=d.toggle;d.toggle=function(){k();if(h){h.apply(this,arguments)}};e();break;case"location":var g=this.find("a").filter(function(){return this.href.toLowerCase()==location.href.toLowerCase()});if(g.length){g.addClass("selected").parents("ul, li").add(g.next()).show()}break}j.applyClasses(d,f);if(d.control){c(this,d.control);a(d.control).show()}return this}});a.treeview={};var b=(a.treeview.classes={open:"open",closed:"closed",expandable:"expandable",expandableHitarea:"expandable-hitarea",lastExpandableHitarea:"lastExpandable-hitarea",collapsable:"collapsable",collapsableHitarea:"collapsable-hitarea",lastCollapsableHitarea:"lastCollapsable-hitarea",lastCollapsable:"lastCollapsable",lastExpandable:"lastExpandable",last:"last",hitarea:"hitarea"});a.fn.Treeview=a.fn.treeview})(jQuery);
+// treeview 1.4.2 [https://github.com/jzaefferer/jquery-treeview]
+!function(a){a.extend(a.fn,{swapClass:function(a,e){var l=this.filter("."+a);return this.filter("."+e).removeClass(e).addClass(a),l.removeClass(a).addClass(e),this},replaceClass:function(a,e){return this.filter("."+a).removeClass(a).addClass(e).end()},hoverClass:function(e){return e=e||"hover",this.hover(function(){a(this).addClass(e)},function(){a(this).removeClass(e)})},heightToggle:function(a,e){a?this.animate({height:"toggle"},a,e):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"](),e&&e.apply(this,arguments)})},heightHide:function(a,e){a?this.animate({height:"hide"},a,e):(this.hide(),e&&this.each(e))},prepareBranches:function(a){return a.prerendered||(this.filter(":last-child:not(ul)").addClass(e.last),this.filter((a.collapsed?"":"."+e.closed)+":not(."+e.open+")").find(">ul").hide()),this.filter(":has(>ul)")},applyClasses:function(l,s){if(this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview",function(e){this==e.target&&s.apply(a(this).next())}).add(a("a",this)).hoverClass(),!l.prerendered){this.filter(":has(>ul:hidden)").addClass(e.expandable).replaceClass(e.last,e.lastExpandable),this.not(":has(>ul:hidden)").addClass(e.collapsable).replaceClass(e.last,e.lastCollapsable);var t=this.find("div."+e.hitarea);t.length||(t=this.prepend('').find("div."+e.hitarea)),t.removeClass().addClass(e.hitarea).each(function(){var e="";a.each(a(this).parent().attr("class").split(" "),function(){e+=this+"-hitarea "}),a(this).addClass(e)})}this.find("div."+e.hitarea).click(s)},treeview:function(l){if((l=a.extend({cookieId:"treeview"},l)).toggle){var s=l.toggle;l.toggle=function(){return s.apply(a(this).parent()[0],arguments)}}function t(){a(this).parent().find(">.hitarea").swapClass(e.collapsableHitarea,e.expandableHitarea).swapClass(e.lastCollapsableHitarea,e.lastExpandableHitarea).end().swapClass(e.collapsable,e.expandable).swapClass(e.lastCollapsable,e.lastExpandable).find(">ul").heightToggle(l.animated,l.toggle),l.unique&&a(this).parent().siblings().find(">.hitarea").replaceClass(e.collapsableHitarea,e.expandableHitarea).replaceClass(e.lastCollapsableHitarea,e.lastExpandableHitarea).end().replaceClass(e.collapsable,e.expandable).replaceClass(e.lastCollapsable,e.lastExpandable).find(">ul").heightHide(l.animated,l.toggle)}this.data("toggler",t),this.addClass("treeview");var i=this.find("li").prepareBranches(l);switch(l.persist){case"cookie":var n=l.toggle;l.toggle=function(){(function e(){function s(a){return a?1:0}var t=[];i.each(function(e,l){t[e]=a(l).is(":has(>ul:visible)")?1:0}),a.cookie(l.cookieId,t.join(""),l.cookieOptions)})(),n&&n.apply(this,arguments)},function e(){var s=a.cookie(l.cookieId);if(s){var t=s.split("");i.each(function(e,l){a(l).find(">ul")[parseInt(t[e])?"show":"hide"]()})}}();break;case"location":var r=this.find("a").filter(function(){return 0==location.href.toLowerCase().indexOf(this.href.toLowerCase())});if(r.length){var o=r.addClass("selected").parents("ul, li").add(r.next()).show();l.prerendered&&o.filter("li").swapClass(e.collapsable,e.expandable).swapClass(e.lastCollapsable,e.lastExpandable).find(">.hitarea").swapClass(e.collapsableHitarea,e.expandableHitarea).swapClass(e.lastCollapsableHitarea,e.lastExpandableHitarea)}}return i.applyClasses(l,t),l.control&&(function l(s,i){function n(l){return function(){return t.apply(a("div."+e.hitarea,s).filter(function(){return!l||a(this).parent("."+l).length})),!1}}a("a:eq(0)",i).click(n(e.collapsable)),a("a:eq(1)",i).click(n(e.expandable)),a("a:eq(2)",i).click(n())}(this,l.control),a(l.control).show()),this}}),a.treeview={};var e=a.treeview.classes={open:"open",closed:"closed",expandable:"expandable",expandableHitarea:"expandable-hitarea",lastExpandableHitarea:"lastExpandable-hitarea",collapsable:"collapsable",collapsableHitarea:"collapsable-hitarea",lastCollapsableHitarea:"lastCollapsable-hitarea",lastCollapsable:"lastCollapsable",lastExpandable:"lastExpandable",last:"last",hitarea:"hitarea"}}(jQuery);
-// scrollTo 1.4.2 [http://flesler.blogspot.com/2007/10/jqueryscrollto.html]
-(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);
+// scrollTo 1.4.6 [https://github.com/bevry-archive/jquery-scrollto]
+(function(){var o,l;return o=window.jQuery||require("jquery"),o.propHooks.scrollTop=o.propHooks.scrollLeft={get:function(o,l){var t=null;return"HTML"!==o.tagName&&"BODY"!==o.tagName||("scrollLeft"===l?t=window.scrollX:"scrollTop"===l&&(t=window.scrollY)),null==t&&(t=o[l]),t}},o.Tween.propHooks.scrollTop=o.Tween.propHooks.scrollLeft={get:function(l){return o.propHooks.scrollTop.get(l.elem,l.prop)},set:function(o){"HTML"===o.elem.tagName||"BODY"===o.elem.tagName?(o.options.bodyScrollLeft=o.options.bodyScrollLeft||window.scrollX,o.options.bodyScrollTop=o.options.bodyScrollTop||window.scrollY,"scrollLeft"===o.prop?o.options.bodyScrollLeft=Math.round(o.now):"scrollTop"===o.prop&&(o.options.bodyScrollTop=Math.round(o.now)),window.scrollTo(o.options.bodyScrollLeft,o.options.bodyScrollTop)):o.elem.nodeType&&o.elem.parentNode&&(o.elem[o.prop]=o.now)}},l={config:{duration:400,easing:"swing",callback:null,durationMode:"each",offsetTop:0,offsetLeft:0},configure:function(t){return o.extend(l.config,t||{}),this},scroll:function(t,e){var r,n,s,c,i,p,f,a,d,u,g,h,T,w,m,L,b;return r=t.pop(),n=r.$container,s=r.$target,c=o("").css({position:"absolute",top:"0px",left:"0px"}),i=n.css("position"),n.css({position:"relative"}),c.appendTo(n),u=c.offset().top,g=s.offset().top,h=g-u-parseInt(e.offsetTop,10),T=c.offset().left,w=s.offset().left,m=w-T-parseInt(e.offsetLeft,10),p=n.prop("scrollTop"),f=n.prop("scrollLeft"),c.remove(),n.css({position:i}),L={},b=function(){return 0===t.length?"function"==typeof e.callback&&e.callback():l.scroll(t,e),!0},e.onlyIfOutside&&(a=p+n.height(),d=f+n.width(),p ')}table.config.headerList[index]=this});if(table.config.debug){benchmark("Built headers:",time);log($tableHeaders)}return $tableHeaders}function checkCellColSpan(table,rows,row){var arr=[],r=table.tHead.rows,c=r[row].cells;for(var i=0;i1){arr=arr.concat(checkCellColSpan(table,headerArr,row++))}else{if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1])){arr.push(cell)}}}return arr}function checkHeaderMetadata(cell){if(($.metadata)&&($(cell).metadata().sorter===false)){return true}return false}function checkHeaderOptions(table,i){if((table.config.headers[i])&&(table.config.headers[i].sorter===false)){return true}return false}function applyWidget(table){var c=table.config.widgets;var l=c.length;for(var i=0;i");$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($("").css("width",$(this).width()))});$(table).prepend(colgroup)}}function updateHeaderSortCount(table,sortList){var c=table.config,l=sortList.length;for(var i=0;ib)?1:0))}function sortTextDesc(a,b){return((ba)?1:0))}function sortNumeric(a,b){return a-b}function sortNumericDesc(a,b){return b-a}function getCachedSortType(parsers,i){return parsers[i].type}this.construct=function(settings){return this.each(function(){if(!this.tHead||!this.tBodies){return}var $this,$document,$headers,cache,config,shiftDown=0,sortOrder;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);$this=$(this);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);var sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){$this.trigger("sortStart");var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;if(!this.sortDisabled&&totalRows>0){var $cell=$(this);var i=this.column;this.order=this.count++%2;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!=null){var a=config.sortForce;for(var j=0;j0){$this.trigger("sorton",[config.sortList])}applyWidget(this)})};this.addParser=function(parser){var l=parsers.length,a=true;for(var i=0;i","g"),"");e=a.trim(e.toLowerCase());return e};this.results=function(e){if(typeof k.noResults==="string"&&k.noResults!==""){if(e){a(k.noResults).hide()}else{a(k.noResults).show()}}return this};this.loader=function(e){if(typeof k.loader==="string"&&k.loader!==""){(e)?a(k.loader).show():a(k.loader).hide()}return this};this.test=function(m,l){for(var e=0;e","g"),"");return t.trim(s.toLowerCase())},this.results=function(e){return"string"==typeof a.noResults&&""!==a.noResults&&(e?t(a.noResults).hide():t(a.noResults).show()),this},this.loader=function(e){return"string"==typeof a.loader&&""!==a.loader&&(e?t(a.loader).show():t(a.loader).hide()),this},this.cache=function(){return u=t(s),"string"==typeof a.noResults&&""!==a.noResults&&(u=u.not(a.noResults)),r=("string"==typeof a.selector?u.find(a.selector):t(s).not(a.noResults)).map(function(){return l.strip_html(this.innerHTML)}),o=u.map(function(){return this}),h=h||this.val()||"",this.go()},this.trigger=function(){return this.loader(!0),a.onBefore(),e.clearTimeout(i),i=e.setTimeout(function(){l.go()},a.delay),this},this.cache(),this.results(!0),this.stripe(),this.loader(!1),this.each(function(){t(this).on(a.bind,function(){h=t(this).val(),l.trigger()})})}}(jQuery,this,document);
// php_js.js - $P
(function(){if(typeof(C)=="undefined"){var C=function(){if(window==this||!this.init){return new C()}else{return this.init()}}}C.prototype={init:function(){},md5:function(j){var l=function(a,b){return(a<>>(32-b))};var m=function(a,b){var c,lY4,lX8,lY8,lResult;lX8=(a&0x80000000);lY8=(b&0x80000000);c=(a&0x40000000);lY4=(b&0x40000000);lResult=(a&0x3FFFFFFF)+(b&0x3FFFFFFF);if(c&lY4){return(lResult^0x80000000^lX8^lY8)}if(c|lY4){if(lResult&0x40000000){return(lResult^0xC0000000^lX8^lY8)}else{return(lResult^0x40000000^lX8^lY8)}}else{return(lResult^lX8^lY8)}};var F=function(x,y,z){return(x&y)|((~x)&z)};var G=function(x,y,z){return(x&z)|(y&(~z))};var H=function(x,y,z){return(x^y^z)};var I=function(x,y,z){return(y^(x|(~z)))};var n=function(a,b,c,d,x,s,e){a=m(a,m(m(F(b,c,d),x),e));return m(l(a,s),b)};var o=function(a,b,c,d,x,s,e){a=m(a,m(m(G(b,c,d),x),e));return m(l(a,s),b)};var p=function(a,b,c,d,x,s,e){a=m(a,m(m(H(b,c,d),x),e));return m(l(a,s),b)};var q=function(a,b,c,d,x,s,e){a=m(a,m(m(I(b,c,d),x),e));return m(l(a,s),b)};var r=function(a){var b;var c=a.length;var d=c+8;var e=(d-(d%64))/64;var f=(e+1)*16;var g=Array(f-1);var h=0;var i=0;while(i>>29;return g};var t=function(a){var b="",WordToHexValue_temp="",lByte,lCount;for(lCount=0;lCount<=3;lCount++){lByte=(a>>>(lCount*8))&255;WordToHexValue_temp="0"+lByte.toString(16);b=b+WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2)}return b};var x=Array();var k,AA,BB,CC,DD,a,b,c,d;var u=7,S12=12,S13=17,S14=22;var v=5,S22=9,S23=14,S24=20;var w=4,S32=11,S33=16,S34=23;var A=6,S42=10,S43=15,S44=21;j=this.utf8_encode(j);x=r(j);a=0x67452301;b=0xEFCDAB89;c=0x98BADCFE;d=0x10325476;for(k=0;k127)&&(c<2048)){b[ac++]=String.fromCharCode((c>>6)|192);b[ac++]=String.fromCharCode((c&63)|128)}else{b[ac++]=String.fromCharCode((c>>12)|224);b[ac++]=String.fromCharCode(((c>>6)&63)|128);b[ac++]=String.fromCharCode((c&63)|128)}}return b.join('')}};window.$P=C()})();
diff --git a/styles/templates/default/viewtopic.tpl b/styles/templates/default/viewtopic.tpl
index 9383f834f..3bf3a1261 100644
--- a/styles/templates/default/viewtopic.tpl
+++ b/styles/templates/default/viewtopic.tpl
@@ -140,6 +140,7 @@ ajax.callback.post_mod_comment = function(data) {
};
¶
+→